1 |
- {"version":3,"file":"offcanvas.cjs","sources":["../../src/components/offcanvas.ts"],"sourcesContent":["/* Native JavaScript for Bootstrap 5 | OffCanvas\n------------------------------------------------ */\nimport {\n addClass,\n ariaHidden,\n ariaModal,\n closest,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n focus,\n getDocument,\n getDocumentBody,\n getDocumentElement,\n getElementTransitionDuration,\n getInstance,\n hasClass,\n keydownEvent,\n keyEscape,\n mouseclickEvent,\n MouseEvent,\n querySelector,\n querySelectorAll,\n removeAttribute,\n removeClass,\n setAttribute,\n setElementStyle,\n toggleFocusTrap,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport dataBsDismiss from \"~/strings/dataBsDismiss\";\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport showClass from \"~/strings/showClass\";\nimport offcanvasString from \"~/strings/offcanvasString\";\nimport offcanvasComponent from \"~/strings/offcanvasComponent\";\nimport modalComponent from \"~/strings/modalComponent\";\n\nimport getTargetElement from \"~/util/getTargetElement\";\nimport isVisible from \"~/util/isVisible\";\nimport { setScrollbar } from \"~/util/scrollbar\";\nimport { hasPopup } from \"~/util/popupContainer\";\nimport {\n appendOverlay,\n getCurrentOpen,\n hideOverlay,\n offcanvasActiveSelector,\n overlay,\n removeOverlay,\n showOverlay,\n toggleOverlayType,\n} from \"~/util/backdrop\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport { OffcanvasEvent, OffcanvasOptions } from \"~/interface/offcanvas\";\n\n// OFFCANVAS PRIVATE GC\n// ====================\nconst offcanvasSelector = `.${offcanvasString}`;\nconst offcanvasToggleSelector = `[${dataBsToggle}=\"${offcanvasString}\"]`;\nconst offcanvasDismissSelector = `[${dataBsDismiss}=\"${offcanvasString}\"]`;\nconst offcanvasTogglingClass = `${offcanvasString}-toggling`;\n\nconst offcanvasDefaults = {\n backdrop: true, // boolean\n keyboard: true, // boolean\n scroll: false, // boolean\n};\n\ntype OffCanvasEventProps = {\n relatedTarget: Element & EventTarget | undefined;\n};\n\n/**\n * Static method which returns an existing `Offcanvas` instance associated\n * to a target `Element`.\n */\nconst getOffcanvasInstance = (element: Element) =>\n getInstance<Offcanvas>(element, offcanvasComponent);\n\n/**\n * An `Offcanvas` initialization callback.\n */\nconst offcanvasInitCallback = (element: Element) => new Offcanvas(element);\n\n// OFFCANVAS CUSTOM EVENTS\n// =======================\nconst showOffcanvasEvent = createCustomEvent<\n OffCanvasEventProps,\n OffcanvasEvent\n>(`show.bs.${offcanvasString}`);\nconst shownOffcanvasEvent = createCustomEvent<\n OffCanvasEventProps,\n OffcanvasEvent\n>(`shown.bs.${offcanvasString}`);\nconst hideOffcanvasEvent = createCustomEvent<\n OffCanvasEventProps,\n OffcanvasEvent\n>(`hide.bs.${offcanvasString}`);\nconst hiddenOffcanvasEvent = createCustomEvent<\n OffCanvasEventProps,\n OffcanvasEvent\n>(`hidden.bs.${offcanvasString}`);\n\n// OFFCANVAS PRIVATE METHODS\n// =========================\n/**\n * Sets additional style for the `<body>` and other elements\n * when showing an offcanvas to the user.\n *\n * @param self the `Offcanvas` instance\n */\nconst setOffCanvasScrollbar = (self: Offcanvas) => {\n const { element } = self;\n const { clientHeight, scrollHeight } = getDocumentElement(element);\n setScrollbar(element, clientHeight !== scrollHeight);\n};\n\n/**\n * Toggles on/off the listeners of the events that close the offcanvas.\n *\n * @param self the `Offcanvas` instance\n * @param add when *true* listeners are added\n */\nconst toggleOffCanvasDismiss = (self: Offcanvas, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const doc = getDocument(self.element);\n action(doc, keydownEvent, offcanvasKeyDismissHandler);\n action(doc, mouseclickEvent, offcanvasDismissHandler);\n};\n\n/**\n * Executes before showing the offcanvas.\n *\n * @param self the `Offcanvas` instance\n */\nconst beforeOffcanvasShow = (self: Offcanvas) => {\n const { element, options } = self;\n\n // istanbul ignore else @preserve\n if (!options.scroll) {\n setOffCanvasScrollbar(self);\n setElementStyle(getDocumentBody(element), { overflow: \"hidden\" });\n }\n\n addClass(element, offcanvasTogglingClass);\n addClass(element, showClass);\n setElementStyle(element, { visibility: \"visible\" });\n\n emulateTransitionEnd(element, () => showOffcanvasComplete(self));\n};\n\n/**\n * Executes before hiding the offcanvas.\n *\n * @param self the `Offcanvas` instance\n */\nconst beforeOffcanvasHide = (self: Offcanvas) => {\n const { element, options } = self;\n const currentOpen = getCurrentOpen(element);\n\n (element as HTMLElement).blur();\n\n if (!currentOpen && options.backdrop && hasClass(overlay, showClass)) {\n hideOverlay();\n }\n emulateTransitionEnd(element, () => hideOffcanvasComplete(self));\n};\n\n// OFFCANVAS EVENT HANDLERS\n// ========================\n/**\n * Handles the `click` event listeners.\n *\n * @param e the `Event` object\n */\nfunction offcanvasTriggerHandler(\n this: HTMLElement,\n e: MouseEvent<HTMLElement>,\n) {\n const element = getTargetElement(this);\n const self = element && getOffcanvasInstance(element);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n self.relatedTarget = this;\n self.toggle();\n\n // istanbul ignore else @preserve\n if (this.tagName === \"A\") e.preventDefault();\n}\n\n/**\n * Handles the event listeners that close the offcanvas.\n *\n * @param e the `Event` object\n */\nconst offcanvasDismissHandler = (e: MouseEvent<HTMLElement>) => {\n const { target } = e;\n const element = querySelector(\n offcanvasActiveSelector,\n getDocument(target),\n );\n // istanbul ignore else @preserve\n if (!element) return;\n\n const offCanvasDismiss = querySelector<HTMLElement>(\n offcanvasDismissSelector,\n element,\n );\n const self = getOffcanvasInstance(element);\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n const { options, triggers } = self;\n const { backdrop } = options;\n const trigger = closest(target, offcanvasToggleSelector);\n const selection = getDocument(element).getSelection();\n\n // istanbul ignore if: a filter is required here @preserve\n if (overlay.contains(target) && backdrop === \"static\") return;\n\n // istanbul ignore else @preserve\n if (\n !(selection && selection.toString().length) &&\n ((!element.contains(target) &&\n backdrop &&\n // istanbul ignore next @preserve\n (!trigger || triggers.includes(target))) ||\n (offCanvasDismiss &&\n offCanvasDismiss.contains(target)))\n ) {\n self.relatedTarget = offCanvasDismiss && offCanvasDismiss.contains(target)\n ? offCanvasDismiss\n : undefined;\n self.hide();\n }\n\n // istanbul ignore next @preserve\n if (trigger && trigger.tagName === \"A\") e.preventDefault();\n};\n\n/**\n * Handles the `keydown` event listener for offcanvas\n * to hide it when user type the `ESC` key.\n *\n * @param e the `Event` object\n */\nconst offcanvasKeyDismissHandler = ({ code, target }: KeyboardEvent) => {\n const element = querySelector(\n offcanvasActiveSelector,\n getDocument(target as Node),\n );\n const self = element && getOffcanvasInstance(element);\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n // istanbul ignore else @preserve\n if (self.options.keyboard && code === keyEscape) {\n self.relatedTarget = undefined;\n self.hide();\n }\n};\n\n/**\n * Handles the `transitionend` when showing the offcanvas.\n *\n * @param self the `Offcanvas` instance\n */\nconst showOffcanvasComplete = (self: Offcanvas) => {\n const { element } = self;\n removeClass(element, offcanvasTogglingClass);\n\n removeAttribute(element, ariaHidden);\n setAttribute(element, ariaModal, \"true\");\n setAttribute(element, \"role\", \"dialog\");\n\n dispatchEvent(element, shownOffcanvasEvent);\n\n toggleOffCanvasDismiss(self, true);\n focus(element);\n toggleFocusTrap(element);\n};\n\n/**\n * Handles the `transitionend` when hiding the offcanvas.\n *\n * @param self the `Offcanvas` instance\n */\nconst hideOffcanvasComplete = (self: Offcanvas) => {\n const { element, triggers } = self;\n\n setAttribute(element, ariaHidden, \"true\");\n removeAttribute(element, ariaModal);\n removeAttribute(element, \"role\");\n setElementStyle(element, { visibility: \"\" });\n\n const visibleTrigger = showOffcanvasEvent.relatedTarget ||\n triggers.find(isVisible);\n // istanbul ignore else @preserve\n if (visibleTrigger) focus(visibleTrigger);\n\n removeOverlay(element);\n\n dispatchEvent(element, hiddenOffcanvasEvent);\n removeClass(element, offcanvasTogglingClass);\n toggleFocusTrap(element);\n\n // must check for open instances\n if (!getCurrentOpen(element)) {\n toggleOffCanvasDismiss(self);\n }\n};\n\n// OFFCANVAS DEFINITION\n// ====================\n/** Returns a new `Offcanvas` instance. */\nexport default class Offcanvas extends BaseComponent {\n static selector = offcanvasSelector;\n static init = offcanvasInitCallback;\n static getInstance = getOffcanvasInstance;\n declare element: HTMLElement;\n declare options: OffcanvasOptions;\n declare triggers: HTMLElement[];\n declare relatedTarget: EventTarget & HTMLElement | undefined;\n\n /**\n * @param target usually an `.offcanvas` element\n * @param config instance options\n */\n constructor(\n target: Element | string,\n config?: Partial<OffcanvasOptions>,\n ) {\n super(target, config);\n\n // instance element\n const { element } = this;\n\n // all the triggering buttons\n this.triggers = [\n ...querySelectorAll<HTMLElement>(\n offcanvasToggleSelector,\n getDocument(element),\n ),\n ].filter(\n (btn) => getTargetElement(btn) === element,\n );\n\n // additional instance property\n this.relatedTarget = undefined;\n\n // attach event listeners\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return offcanvasComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return offcanvasDefaults;\n }\n\n // OFFCANVAS PUBLIC METHODS\n // ========================\n /** Shows or hides the offcanvas from the user. */\n toggle() {\n if (hasClass(this.element, showClass)) this.hide();\n else this.show();\n }\n\n /** Shows the offcanvas to the user. */\n show() {\n const { element, options, relatedTarget } = this;\n let overlayDelay = 0;\n\n // istanbul ignore else @preserve\n if (hasClass(element, showClass)) return;\n\n showOffcanvasEvent.relatedTarget = relatedTarget || undefined;\n shownOffcanvasEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, showOffcanvasEvent);\n\n // istanbul ignore else @preserve\n if (showOffcanvasEvent.defaultPrevented) return;\n\n // we elegantly hide any opened modal/offcanvas\n const currentOpen = getCurrentOpen(element);\n if (currentOpen && currentOpen !== element) {\n const that = getOffcanvasInstance(currentOpen) ||\n // istanbul ignore next @preserve\n getInstance<typeof BaseComponent & { hide: () => void }>(\n currentOpen,\n modalComponent,\n );\n\n // istanbul ignore else @preserve\n if (that) that.hide();\n }\n\n if (options.backdrop) {\n if (!hasPopup(overlay)) appendOverlay(element, true);\n else toggleOverlayType();\n\n overlayDelay = getElementTransitionDuration(overlay);\n showOverlay();\n\n setTimeout(() => beforeOffcanvasShow(this), overlayDelay);\n } else {\n beforeOffcanvasShow(this);\n // istanbul ignore next @preserve - this test was done on Modal\n if (currentOpen && hasClass(overlay, showClass)) hideOverlay();\n }\n }\n\n /** Hides the offcanvas from the user. */\n hide() {\n const { element, relatedTarget } = this;\n\n // istanbul ignore else @preserve\n if (!hasClass(element, showClass)) return;\n\n hideOffcanvasEvent.relatedTarget = relatedTarget || undefined;\n hiddenOffcanvasEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, hideOffcanvasEvent);\n\n // istanbul ignore else @preserve\n if (hideOffcanvasEvent.defaultPrevented) return;\n\n addClass(element, offcanvasTogglingClass);\n removeClass(element, showClass);\n beforeOffcanvasHide(this);\n }\n\n /**\n * Toggles on/off the `click` event listeners.\n *\n * @param self the `Offcanvas` instance\n * @param add when *true*, listeners are added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n this.triggers.forEach((btn) => {\n action(btn, mouseclickEvent, offcanvasTriggerHandler);\n });\n };\n\n /** Removes the `Offcanvas` from the target element. */\n dispose() {\n const { element } = this;\n const isOpen = hasClass(element, showClass);\n const callback = () => setTimeout(() => super.dispose(), 1);\n\n this.hide();\n this._toggleEventListeners();\n\n if (isOpen) emulateTransitionEnd(element, callback);\n // istanbul ignore next @preserve\n else callback();\n }\n}\n"],"names":["offcanvasSelector","offcanvasString","offcanvasToggleSelector","dataBsToggle","offcanvasDismissSelector","dataBsDismiss","offcanvasTogglingClass","offcanvasDefaults","getOffcanvasInstance","element","getInstance","offcanvasComponent","offcanvasInitCallback","Offcanvas","showOffcanvasEvent","createCustomEvent","shownOffcanvasEvent","hideOffcanvasEvent","hiddenOffcanvasEvent","setOffCanvasScrollbar","self","clientHeight","scrollHeight","getDocumentElement","setScrollbar","toggleOffCanvasDismiss","add","action","addListener","removeListener","doc","getDocument","keydownEvent","offcanvasKeyDismissHandler","mouseclickEvent","offcanvasDismissHandler","beforeOffcanvasShow","options","setElementStyle","getDocumentBody","addClass","showClass","emulateTransitionEnd","showOffcanvasComplete","beforeOffcanvasHide","currentOpen","getCurrentOpen","hasClass","overlay","hideOverlay","hideOffcanvasComplete","offcanvasTriggerHandler","e","getTargetElement","isDisabled","target","querySelector","offcanvasActiveSelector","offCanvasDismiss","triggers","backdrop","trigger","closest","selection","code","keyEscape","removeClass","removeAttribute","ariaHidden","setAttribute","ariaModal","dispatchEvent","focus","toggleFocusTrap","visibleTrigger","isVisible","removeOverlay","BaseComponent","config","querySelectorAll","btn","relatedTarget","overlayDelay","that","modalComponent","hasPopup","toggleOverlayType","appendOverlay","getElementTransitionDuration","showOverlay","isOpen","callback"],"mappings":"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"}
|