}\n */\n\n\n var offcanvasInitCallback = function offcanvasInitCallback(element) {\n return new Offcanvas(element);\n }; // OFFCANVAS CUSTOM EVENTS\n // =======================\n\n\n var showOffcanvasEvent = OriginalEvent(\"show.bs.\".concat(offcanvasString));\n var shownOffcanvasEvent = OriginalEvent(\"shown.bs.\".concat(offcanvasString));\n var hideOffcanvasEvent = OriginalEvent(\"hide.bs.\".concat(offcanvasString));\n var hiddenOffcanvasEvent = OriginalEvent(\"hidden.bs.\".concat(offcanvasString)); // OFFCANVAS PRIVATE METHODS\n // =========================\n\n /**\n * Sets additional style for the `` and other elements\n * when showing an offcanvas to the user.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n */\n\n function setOffCanvasScrollbar(self) {\n var element = self.element;\n\n var _getDocumentElement5 = getDocumentElement(element),\n clientHeight = _getDocumentElement5.clientHeight,\n scrollHeight = _getDocumentElement5.scrollHeight;\n\n setScrollbar(element, clientHeight !== scrollHeight);\n }\n /**\n * Toggles on/off the `click` event listeners.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n * @param {boolean=} add when *true*, listeners are added\n */\n\n\n function toggleOffcanvasEvents(self, add) {\n var action = add ? addListener : removeListener;\n self.triggers.forEach(function (btn) {\n return action(btn, mouseclickEvent, offcanvasTriggerHandler);\n });\n }\n /**\n * Toggles on/off the listeners of the events that close the offcanvas.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n * @param {boolean=} add when *true* listeners are added\n */\n\n\n function toggleOffCanvasDismiss(self, add) {\n var action = add ? addListener : removeListener;\n var doc = getDocument(self.element);\n action(doc, keydownEvent, offcanvasKeyDismissHandler);\n action(doc, mouseclickEvent, offcanvasDismissHandler);\n }\n /**\n * Executes before showing the offcanvas.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n */\n\n\n function beforeOffcanvasShow(self) {\n var element = self.element,\n options = self.options;\n /* istanbul ignore else */\n\n if (!options.scroll) {\n setOffCanvasScrollbar(self);\n setElementStyle(getDocumentBody(element), {\n overflow: 'hidden'\n });\n }\n\n addClass(element, offcanvasTogglingClass);\n addClass(element, showClass);\n setElementStyle(element, {\n visibility: 'visible'\n });\n emulateTransitionEnd(element, function () {\n return showOffcanvasComplete(self);\n });\n }\n /**\n * Executes before hiding the offcanvas.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n * @param {Function=} callback the hide callback\n */\n\n\n function beforeOffcanvasHide(self, callback) {\n var element = self.element,\n options = self.options;\n var currentOpen = getCurrentOpen(element);\n element.blur();\n\n if (!currentOpen && options.backdrop && hasClass(overlay, showClass)) {\n hideOverlay();\n emulateTransitionEnd(overlay, function () {\n return hideOffcanvasComplete(self, callback);\n });\n } else hideOffcanvasComplete(self, callback);\n } // OFFCANVAS EVENT HANDLERS\n // ========================\n\n /**\n * Handles the `click` event listeners.\n *\n * @this {HTMLElement}\n * @param {MouseEvent} e the `Event` object\n */\n\n\n function offcanvasTriggerHandler(e) {\n var trigger = closest(this, offcanvasToggleSelector);\n var element = trigger && getTargetElement(trigger);\n var self = element && getOffcanvasInstance(element);\n /* istanbul ignore else */\n\n if (self) {\n self.relatedTarget = trigger;\n self.toggle();\n /* istanbul ignore else */\n\n if (trigger && trigger.tagName === 'A') {\n e.preventDefault();\n }\n }\n }\n /**\n * Handles the event listeners that close the offcanvas.\n *\n * @param {MouseEvent} e the `Event` object\n */\n\n\n function offcanvasDismissHandler(e) {\n var target = e.target;\n var element = querySelector(offcanvasActiveSelector, getDocument(target));\n var offCanvasDismiss = querySelector(offcanvasDismissSelector, element);\n var self = getOffcanvasInstance(element);\n /* istanbul ignore next: must have a filter */\n\n if (!self) return;\n var options = self.options,\n triggers = self.triggers;\n var backdrop = options.backdrop;\n var trigger = closest(target, offcanvasToggleSelector);\n var selection = getDocument(element).getSelection();\n if (overlay.contains(target) && backdrop === 'static') return;\n /* istanbul ignore else */\n\n if (!(selection && selection.toString().length) && (!element.contains(target) && backdrop && (\n /* istanbul ignore next */\n !trigger || triggers.includes(target)) || offCanvasDismiss && offCanvasDismiss.contains(target))) {\n self.relatedTarget = offCanvasDismiss && offCanvasDismiss.contains(target) ? offCanvasDismiss : null;\n self.hide();\n }\n /* istanbul ignore next */\n\n\n if (trigger && trigger.tagName === 'A') e.preventDefault();\n }\n /**\n * Handles the `keydown` event listener for offcanvas\n * to hide it when user type the `ESC` key.\n *\n * @param {KeyboardEvent} e the `Event` object\n */\n\n\n function offcanvasKeyDismissHandler(_ref7) {\n var code = _ref7.code,\n target = _ref7.target;\n var element = querySelector(offcanvasActiveSelector, getDocument(target));\n var self = getOffcanvasInstance(element);\n /* istanbul ignore next: must filter */\n\n if (!self) return;\n /* istanbul ignore else */\n\n if (self.options.keyboard && code === keyEscape) {\n self.relatedTarget = null;\n self.hide();\n }\n }\n /**\n * Handles the `transitionend` when showing the offcanvas.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n */\n\n\n function showOffcanvasComplete(self) {\n var element = self.element;\n removeClass(element, offcanvasTogglingClass);\n removeAttribute(element, ariaHidden);\n setAttribute(element, ariaModal, 'true');\n setAttribute(element, 'role', 'dialog');\n dispatchEvent(element, shownOffcanvasEvent);\n toggleOffCanvasDismiss(self, true);\n focus(element);\n }\n /**\n * Handles the `transitionend` when hiding the offcanvas.\n *\n * @param {Offcanvas} self the `Offcanvas` instance\n * @param {Function} callback the hide callback\n */\n\n\n function hideOffcanvasComplete(self, callback) {\n var element = self.element,\n triggers = self.triggers;\n setAttribute(element, ariaHidden, 'true');\n removeAttribute(element, ariaModal);\n removeAttribute(element, 'role');\n setElementStyle(element, {\n visibility: ''\n });\n var visibleTrigger = showOffcanvasEvent.relatedTarget || triggers.find(function (x) {\n return isVisible(x);\n });\n /* istanbul ignore else */\n\n if (visibleTrigger) focus(visibleTrigger);\n removeOverlay(element);\n dispatchEvent(element, hiddenOffcanvasEvent);\n removeClass(element, offcanvasTogglingClass); // must check for open instances\n\n if (!getCurrentOpen(element)) {\n toggleOffCanvasDismiss(self);\n } // callback\n\n\n if (callback) callback();\n } // OFFCANVAS DEFINITION\n // ====================\n\n /** Returns a new `Offcanvas` instance. */\n\n\n var Offcanvas = /*#__PURE__*/function (_BaseComponent7) {\n _inherits(Offcanvas, _BaseComponent7);\n\n var _super7 = _createSuper(Offcanvas);\n\n /**\n * @param {HTMLElement | string} target usually an `.offcanvas` element\n * @param {BSN.Options.Offcanvas=} config instance options\n */\n function Offcanvas(target, config) {\n var _this8;\n\n _classCallCheck(this, Offcanvas);\n\n _this8 = _super7.call(this, target, config);\n\n var self = _assertThisInitialized(_this8); // instance element\n\n\n var element = self.element; // all the triggering buttons\n\n /** @type {HTMLElement[]} */\n\n self.triggers = _toConsumableArray(querySelectorAll(offcanvasToggleSelector, getDocument(element))).filter(function (btn) {\n return getTargetElement(btn) === element;\n }); // additional instance property\n\n /** @type {HTMLBodyElement | HTMLElement} */\n\n self.container = getElementContainer(element);\n /** @type {HTMLElement?} */\n\n self.relatedTarget = null; // attach event listeners\n\n toggleOffcanvasEvents(self, true);\n return _this8;\n }\n /* eslint-disable */\n\n /**\n * Returns component name string.\n */\n\n\n _createClass(Offcanvas, [{\n key: \"name\",\n get: function get() {\n return offcanvasComponent;\n }\n /**\n * Returns component default options.\n */\n\n }, {\n key: \"defaults\",\n get: function get() {\n return offcanvasDefaults;\n }\n /* eslint-enable */\n // OFFCANVAS PUBLIC METHODS\n // ========================\n\n /** Shows or hides the offcanvas from the user. */\n\n }, {\n key: \"toggle\",\n value: function toggle() {\n var self = this;\n if (hasClass(self.element, showClass)) self.hide();else self.show();\n }\n /** Shows the offcanvas to the user. */\n\n }, {\n key: \"show\",\n value: function show() {\n var self = this;\n var element = self.element,\n options = self.options,\n container = self.container,\n relatedTarget = self.relatedTarget;\n var overlayDelay = 0;\n if (hasClass(element, showClass)) return;\n showOffcanvasEvent.relatedTarget = relatedTarget;\n shownOffcanvasEvent.relatedTarget = relatedTarget;\n dispatchEvent(element, showOffcanvasEvent);\n if (showOffcanvasEvent.defaultPrevented) return; // we elegantly hide any opened modal/offcanvas\n\n var currentOpen = getCurrentOpen(element);\n\n if (currentOpen && currentOpen !== element) {\n var this1 = getOffcanvasInstance(currentOpen);\n var that1 = this1 ||\n /* istanbul ignore next */\n getInstance(currentOpen, 'Modal');\n that1.hide();\n }\n\n if (options.backdrop) {\n if (!container.contains(overlay)) {\n appendOverlay(container, true);\n } else {\n toggleOverlayType();\n }\n\n overlayDelay = getElementTransitionDuration(overlay);\n showOverlay();\n setTimeout(function () {\n return beforeOffcanvasShow(self);\n }, overlayDelay);\n } else {\n beforeOffcanvasShow(self);\n /* istanbul ignore else */\n\n if (currentOpen && hasClass(overlay, showClass)) {\n hideOverlay();\n }\n }\n }\n /**\n * Hides the offcanvas from the user.\n * @param {Function=} callback when `true` it will skip animation\n */\n\n }, {\n key: \"hide\",\n value: function hide(callback) {\n var self = this;\n var element = self.element,\n relatedTarget = self.relatedTarget;\n if (!hasClass(element, showClass)) return;\n hideOffcanvasEvent.relatedTarget = relatedTarget;\n hiddenOffcanvasEvent.relatedTarget = relatedTarget;\n dispatchEvent(element, hideOffcanvasEvent);\n if (hideOffcanvasEvent.defaultPrevented) return;\n addClass(element, offcanvasTogglingClass);\n removeClass(element, showClass);\n\n if (!callback) {\n emulateTransitionEnd(element, function () {\n return beforeOffcanvasHide(self, callback);\n });\n } else beforeOffcanvasHide(self, callback);\n }\n /** Removes the `Offcanvas` from the target element. */\n\n }, {\n key: \"dispose\",\n value: function dispose() {\n var _this9 = this;\n\n var self = this;\n toggleOffcanvasEvents(self);\n self.hide(function () {\n return _get(_getPrototypeOf(Offcanvas.prototype), \"dispose\", _this9).call(_this9);\n });\n }\n }]);\n\n return Offcanvas;\n }(BaseComponent);\n\n ObjectAssign(Offcanvas, {\n selector: offcanvasSelector,\n init: offcanvasInitCallback,\n getInstance: getOffcanvasInstance\n });\n /** @type {string} */\n\n var popoverString = 'popover';\n /** @type {string} */\n\n var popoverComponent = 'Popover';\n /** @type {string} */\n\n var tooltipString = 'tooltip';\n /**\n * Returns a template for Popover / Tooltip.\n *\n * @param {string} tipType the expected markup type\n * @returns {string} the template markup\n */\n\n function getTipTemplate(tipType) {\n var isTooltip = tipType === tooltipString;\n var bodyClass = isTooltip ? \"\".concat(tipType, \"-inner\") : \"\".concat(tipType, \"-body\");\n var header = !isTooltip ? \"\") : '';\n var arrow = \"\");\n var body = \"\");\n return \"\").concat(header + arrow + body, \"
\");\n }\n /**\n * Checks if an element is an `
` or `