collapse.cjs.map 13 KB

1
  1. {"version":3,"file":"collapse.cjs","sources":["../../src/strings/collapseString.ts","../../src/strings/collapseComponent.ts","../../src/components/collapse.ts"],"sourcesContent":["/** @type {string} */\nconst collapseString = \"collapse\";\nexport default collapseString;\n","/** @type {string} */\nconst collapseComponent = \"Collapse\";\nexport default collapseComponent;\n","/* Native JavaScript for Bootstrap 5 | Collapse\n----------------------------------------------- */\nimport {\n addClass,\n ariaExpanded,\n closest,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n getDocument,\n getInstance,\n hasClass,\n isHTMLElement,\n isString,\n mouseclickEvent,\n MouseEvent,\n noop,\n querySelector,\n querySelectorAll,\n reflow,\n removeClass,\n setAttribute,\n setElementStyle,\n Timer,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport collapsingClass from \"~/strings/collapsingClass\";\nimport showClass from \"~/strings/showClass\";\nimport collapseString from \"~/strings/collapseString\";\nimport collapseComponent from \"~/strings/collapseComponent\";\nimport getTargetElement from \"~/util/getTargetElement\";\nimport BaseComponent from \"./base-component\";\nimport type { CollapseEvent, CollapseOptions } from \"~/interface/collapse\";\nimport isDisabled from \"~/util/isDisabled\";\n\n// COLLAPSE GC\n// ===========\nconst collapseSelector = `.${collapseString}`;\nconst collapseToggleSelector = `[${dataBsToggle}=\"${collapseString}\"]`;\nconst collapseDefaults = { parent: null };\n\n/**\n * Static method which returns an existing `Collapse` instance associated\n * to a target `Element`.\n */\nconst getCollapseInstance = (element: Element) =>\n getInstance<Collapse>(element, collapseComponent);\n\n/**\n * A `Collapse` initialization callback.\n */\nconst collapseInitCallback = (element: Element) => new Collapse(element);\n\n// COLLAPSE CUSTOM EVENTS\n// ======================\nconst showCollapseEvent = createCustomEvent<\n Record<string, never>,\n CollapseEvent\n>(`show.bs.${collapseString}`);\nconst shownCollapseEvent = createCustomEvent<\n Record<string, never>,\n CollapseEvent\n>(`shown.bs.${collapseString}`);\nconst hideCollapseEvent = createCustomEvent<\n Record<string, never>,\n CollapseEvent\n>(`hide.bs.${collapseString}`);\nconst hiddenCollapseEvent = createCustomEvent<\n Record<string, never>,\n CollapseEvent\n>(`hidden.bs.${collapseString}`);\n\n// COLLAPSE PRIVATE METHODS\n// ========================\n/**\n * Expand the designated `Element`.\n *\n * @param self the `Collapse` instance\n */\nconst expandCollapse = (self: Collapse) => {\n const { element, parent, triggers } = self;\n\n dispatchEvent(element, showCollapseEvent);\n if (!showCollapseEvent.defaultPrevented) {\n Timer.set(element, noop, 17);\n if (parent) Timer.set(parent, noop, 17);\n\n addClass(element, collapsingClass);\n removeClass(element, collapseString);\n\n setElementStyle(element, { height: `${element.scrollHeight}px` });\n\n emulateTransitionEnd(element, () => {\n Timer.clear(element);\n if (parent) Timer.clear(parent);\n\n triggers.forEach((btn) => setAttribute(btn, ariaExpanded, \"true\"));\n\n removeClass(element, collapsingClass);\n addClass(element, collapseString);\n addClass(element, showClass);\n\n setElementStyle(element, { height: \"\" });\n\n dispatchEvent(element, shownCollapseEvent);\n });\n }\n};\n\n/**\n * Collapse the designated `Element`.\n *\n * @param self the `Collapse` instance\n */\nconst collapseContent = (self: Collapse) => {\n const { element, parent, triggers } = self;\n\n dispatchEvent(element, hideCollapseEvent);\n\n if (!hideCollapseEvent.defaultPrevented) {\n Timer.set(element, noop, 17);\n if (parent) Timer.set(parent, noop, 17);\n\n setElementStyle(element, { height: `${element.scrollHeight}px` });\n\n removeClass(element, collapseString);\n removeClass(element, showClass);\n addClass(element, collapsingClass);\n\n reflow(element as HTMLElement);\n setElementStyle(element, { height: \"0px\" });\n\n emulateTransitionEnd(element, () => {\n Timer.clear(element);\n // istanbul ignore else @preserve\n if (parent) Timer.clear(parent);\n\n triggers.forEach((btn) => setAttribute(btn, ariaExpanded, \"false\"));\n\n removeClass(element, collapsingClass);\n addClass(element, collapseString);\n\n setElementStyle(element, { height: \"\" });\n\n dispatchEvent(element, hiddenCollapseEvent);\n });\n }\n};\n\n// COLLAPSE EVENT HANDLER\n// ======================\n/**\n * Handles the `click` event for the `Collapse` instance.\n *\n * @param e the `Event` object\n */\nconst collapseClickHandler = (e: MouseEvent<HTMLElement>) => {\n const { target } = e; // our target is `HTMLElement`\n const trigger = target &&\n closest(target, collapseToggleSelector);\n const element = trigger && getTargetElement(trigger);\n const self = element && getCollapseInstance(element);\n\n // istanbul ignore if @preserve\n if (trigger && isDisabled(trigger)) return;\n // istanbul ignore if @preserve\n if (!self) return;\n\n self.toggle();\n // event target is anchor link #398\n if (trigger?.tagName === \"A\") e.preventDefault();\n};\n\n// COLLAPSE DEFINITION\n// ===================\n\n/** Returns a new `Colapse` instance. */\nexport default class Collapse extends BaseComponent {\n static selector = collapseSelector;\n static init = collapseInitCallback;\n static getInstance = getCollapseInstance;\n declare element: HTMLElement;\n declare options: CollapseOptions;\n declare parent: Element | null;\n declare triggers: Element[];\n\n /**\n * @param target and `Element` that matches the selector\n * @param config instance options\n */\n constructor(target: Element | string, config?: Partial<CollapseOptions>) {\n super(target, config);\n\n // initialization element\n const { element, options } = this;\n const doc = getDocument(element);\n\n // set triggering elements\n this.triggers = [...querySelectorAll(collapseToggleSelector, doc)].filter(\n (btn) => getTargetElement(btn) === element,\n );\n\n // set parent accordion\n this.parent = isHTMLElement(options.parent)\n ? options.parent\n : isString(options.parent)\n ? getTargetElement(element) || querySelector(options.parent, doc)\n : null;\n\n // add event listeners\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return collapseComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return collapseDefaults;\n }\n\n // COLLAPSE PUBLIC METHODS\n // =======================\n /** Hides the collapse. */\n hide() {\n const { triggers, element } = this;\n // istanbul ignore else @preserve\n if (!Timer.get(element)) {\n collapseContent(this);\n // istanbul ignore else @preserve\n if (triggers.length) {\n triggers.forEach((btn) => addClass(btn, `${collapseString}d`));\n }\n }\n }\n\n /** Shows the collapse. */\n show() {\n const { element, parent, triggers } = this;\n let activeCollapse;\n let activeCollapseInstance;\n\n if (parent) {\n activeCollapse = [\n ...querySelectorAll(`.${collapseString}.${showClass}`, parent),\n ].find((i) => getCollapseInstance(i));\n activeCollapseInstance = activeCollapse &&\n getCollapseInstance(activeCollapse);\n }\n\n if ((!parent || !Timer.get(parent)) && !Timer.get(element)) {\n if (activeCollapseInstance && activeCollapse !== element) {\n collapseContent(activeCollapseInstance);\n activeCollapseInstance.triggers.forEach((btn) => {\n addClass(btn, `${collapseString}d`);\n });\n }\n\n expandCollapse(this);\n // istanbul ignore else @preserve\n if (triggers.length) {\n triggers.forEach((btn) => removeClass(btn, `${collapseString}d`));\n }\n }\n }\n\n /** Toggles the visibility of the collapse. */\n toggle() {\n if (!hasClass(this.element, showClass)) this.show();\n else this.hide();\n }\n\n /**\n * Toggles on/off the event listener(s) of the `Collapse` instance.\n *\n * @param add when `true`, the event listener is added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { triggers } = this;\n\n // istanbul ignore else @preserve\n if (triggers.length) {\n triggers.forEach((btn) => {\n action(btn, mouseclickEvent, collapseClickHandler);\n });\n }\n };\n\n /** Remove the `Collapse` component from the target `Element`. */\n dispose() {\n this._toggleEventListeners();\n\n super.dispose();\n }\n}\n"],"names":["collapseString","collapseComponent","collapseSelector","collapseToggleSelector","dataBsToggle","collapseDefaults","getCollapseInstance","element","getInstance","collapseInitCallback","Collapse","showCollapseEvent","createCustomEvent","shownCollapseEvent","hideCollapseEvent","hiddenCollapseEvent","expandCollapse","self","parent","triggers","dispatchEvent","Timer","noop","addClass","collapsingClass","removeClass","setElementStyle","emulateTransitionEnd","btn","setAttribute","ariaExpanded","showClass","collapseContent","reflow","collapseClickHandler","e","target","trigger","closest","getTargetElement","isDisabled","BaseComponent","config","options","doc","getDocument","querySelectorAll","isHTMLElement","isString","querySelector","activeCollapse","activeCollapseInstance","i","hasClass","add","action","addListener","removeListener","mouseclickEvent"],"mappings":"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"}