1 |
- {"version":3,"file":"bootstrap-native.cjs","sources":["../node_modules/.pnpm/@thednp+shorty@2.0.10/node_modules/@thednp/shorty/dist/shorty.mjs","../node_modules/.pnpm/@thednp+event-listener@2.0.8/node_modules/@thednp/event-listener/dist/event-listener.mjs","../src/strings/fadeClass.ts","../src/strings/showClass.ts","../src/strings/dataBsDismiss.ts","../src/strings/alertString.ts","../src/strings/alertComponent.ts","../src/util/isDisabled.ts","../src/version.ts","../src/components/base-component.ts","../src/components/alert.ts","../src/strings/activeClass.ts","../src/strings/dataBsToggle.ts","../src/strings/buttonString.ts","../src/strings/buttonComponent.ts","../src/components/button.ts","../src/strings/dataBsTarget.ts","../src/strings/carouselString.ts","../src/strings/carouselComponent.ts","../src/strings/dataBsParent.ts","../src/strings/dataBsContainer.ts","../src/util/getTargetElement.ts","../src/components/carousel.ts","../src/strings/collapsingClass.ts","../src/strings/collapseString.ts","../src/strings/collapseComponent.ts","../src/components/collapse.ts","../node_modules/.pnpm/@thednp+position-observer@1.0.7/node_modules/@thednp/position-observer/dist/index.mjs","../src/strings/dropdownClasses.ts","../src/strings/dropdownComponent.ts","../src/strings/dropdownMenuClass.ts","../src/util/isEmptyAnchor.ts","../src/components/dropdown.ts","../src/strings/modalString.ts","../src/strings/modalComponent.ts","../src/strings/offcanvasComponent.ts","../src/strings/fixedTopClass.ts","../src/strings/fixedBottomClass.ts","../src/strings/stickyTopClass.ts","../src/strings/positionStickyClass.ts","../src/util/scrollbar.ts","../src/strings/offcanvasString.ts","../src/util/popupContainer.ts","../src/util/backdrop.ts","../src/util/isVisible.ts","../src/components/modal.ts","../src/components/offcanvas.ts","../src/strings/popoverString.ts","../src/strings/popoverComponent.ts","../src/strings/tooltipString.ts","../src/util/getTipTemplate.ts","../src/util/tipClassPositions.ts","../src/util/styleTip.ts","../src/util/tooltipDefaults.ts","../src/strings/dataOriginalTitle.ts","../src/strings/tooltipComponent.ts","../src/util/setHtml.ts","../src/util/createTip.ts","../src/util/getElementContainer.ts","../src/components/tooltip.ts","../src/components/popover.ts","../src/strings/scrollspyString.ts","../src/strings/scrollspyComponent.ts","../src/components/scrollspy.ts","../src/strings/tabString.ts","../src/strings/tabComponent.ts","../src/components/tab.ts","../src/strings/toastString.ts","../src/strings/toastComponent.ts","../src/components/toast.ts","../src/util/init.ts"],"sourcesContent":["const Ce = \"2.0.10\", Me = \"aria-checked\", De = \"aria-description\", Le = \"aria-describedby\", Oe = \"aria-expanded\", xe = \"aria-haspopup\", X = \"aria-hidden\", ze = \"aria-label\", Ie = \"aria-labelledby\", Pe = \"aria-modal\", Fe = \"aria-pressed\", Be = \"aria-selected\", Ve = \"aria-valuemin\", He = \"aria-valuemax\", Ue = \"aria-valuenow\", We = \"aria-valuetext\", Y = \"abort\", tt = \"beforeunload\", et = \"blur\", nt = \"change\", ot = \"contextmenu\", U = \"DOMContentLoaded\", st = \"DOMMouseScroll\", rt = \"error\", ct = \"focus\", at = \"focusin\", it = \"focusout\", ut = \"gesturechange\", lt = \"gestureend\", dt = \"gesturestart\", ft = \"keydown\", pt = \"keypress\", gt = \"keyup\", mt = \"load\", vt = \"click\", bt = \"dblclick\", Et = \"mousedown\", ht = \"mouseup\", yt = \"hover\", wt = \"mouseenter\", At = \"mouseleave\", St = \"mousein\", kt = \"mouseout\", Nt = \"mouseover\", Tt = \"mousemove\", Ct = \"mousewheel\", Mt = \"move\", Dt = \"orientationchange\", Lt = \"pointercancel\", Ot = \"pointerdown\", xt = \"pointerleave\", zt = \"pointermove\", It = \"pointerup\", Pt = \"readystatechange\", Ft = \"reset\", Bt = \"resize\", Vt = \"select\", Ht = \"selectend\", Ut = \"selectstart\", Wt = \"scroll\", Rt = \"submit\", Qt = \"touchstart\", jt = \"touchmove\", Kt = \"touchcancel\", qt = \"touchend\", Gt = \"unload\", Re = {\n DOMContentLoaded: U,\n DOMMouseScroll: st,\n abort: Y,\n beforeunload: tt,\n blur: et,\n change: nt,\n click: vt,\n contextmenu: ot,\n dblclick: bt,\n error: rt,\n focus: ct,\n focusin: at,\n focusout: it,\n gesturechange: ut,\n gestureend: lt,\n gesturestart: dt,\n hover: yt,\n keydown: ft,\n keypress: pt,\n keyup: gt,\n load: mt,\n mousedown: Et,\n mousemove: Tt,\n mousein: St,\n mouseout: kt,\n mouseenter: wt,\n mouseleave: At,\n mouseover: Nt,\n mouseup: ht,\n mousewheel: Ct,\n move: Mt,\n orientationchange: Dt,\n pointercancel: Lt,\n pointerdown: Ot,\n pointerleave: xt,\n pointermove: zt,\n pointerup: It,\n readystatechange: Pt,\n reset: Ft,\n resize: Bt,\n scroll: Wt,\n select: Vt,\n selectend: Ht,\n selectstart: Ut,\n submit: Rt,\n touchcancel: Kt,\n touchend: qt,\n touchmove: jt,\n touchstart: Qt,\n unload: Gt\n}, Qe = \"drag\", je = \"dragstart\", Ke = \"dragenter\", qe = \"dragleave\", Ge = \"dragover\", Ze = \"dragend\", _e = \"loadstart\", $e = {\n start: \"mousedown\",\n end: \"mouseup\",\n move: \"mousemove\",\n cancel: \"mouseleave\"\n}, Je = { down: \"mousedown\", up: \"mouseup\" }, Xe = \"onmouseleave\" in document ? [\"mouseenter\", \"mouseleave\"] : [\"mouseover\", \"mouseout\"], Ye = {\n start: \"touchstart\",\n end: \"touchend\",\n move: \"touchmove\",\n cancel: \"touchcancel\"\n}, tn = { in: \"focusin\", out: \"focusout\" }, Zt = 'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex=\"-1\"]', en = {\n Backspace: \"Backspace\",\n Tab: \"Tab\",\n Enter: \"Enter\",\n Shift: \"Shift\",\n Control: \"Control\",\n Alt: \"Alt\",\n Pause: \"Pause\",\n CapsLock: \"CapsLock\",\n Escape: \"Escape\",\n Scape: \"Space\",\n ArrowLeft: \"ArrowLeft\",\n ArrowUp: \"ArrowUp\",\n ArrowRight: \"ArrowRight\",\n ArrowDown: \"ArrowDown\",\n Insert: \"Insert\",\n Delete: \"Delete\",\n Meta: \"Meta\",\n ContextMenu: \"ContextMenu\",\n ScrollLock: \"ScrollLock\"\n}, nn = \"Alt\", on = \"ArrowDown\", sn = \"ArrowUp\", rn = \"ArrowLeft\", cn = \"ArrowRight\", an = \"Backspace\", un = \"CapsLock\", ln = \"Control\", dn = \"Delete\", fn = \"Enter\", pn = \"NumpadEnter\", gn = \"Escape\", mn = \"Insert\", vn = \"Meta\", bn = \"Pause\", En = \"ScrollLock\", hn = \"Shift\", yn = \"Space\", wn = \"Tab\", _t = \"animationDuration\", $t = \"animationDelay\", W = \"animationName\", C = \"animationend\", Jt = \"transitionDuration\", Xt = \"transitionDelay\", M = \"transitionend\", R = \"transitionProperty\", An = \"addEventListener\", Sn = \"removeEventListener\", kn = {\n linear: \"linear\",\n easingSinusoidalIn: \"cubic-bezier(0.47,0,0.745,0.715)\",\n easingSinusoidalOut: \"cubic-bezier(0.39,0.575,0.565,1)\",\n easingSinusoidalInOut: \"cubic-bezier(0.445,0.05,0.55,0.95)\",\n easingQuadraticIn: \"cubic-bezier(0.550,0.085,0.680,0.530)\",\n easingQuadraticOut: \"cubic-bezier(0.250,0.460,0.450,0.940)\",\n easingQuadraticInOut: \"cubic-bezier(0.455,0.030,0.515,0.955)\",\n easingCubicIn: \"cubic-bezier(0.55,0.055,0.675,0.19)\",\n easingCubicOut: \"cubic-bezier(0.215,0.61,0.355,1)\",\n easingCubicInOut: \"cubic-bezier(0.645,0.045,0.355,1)\",\n easingQuarticIn: \"cubic-bezier(0.895,0.03,0.685,0.22)\",\n easingQuarticOut: \"cubic-bezier(0.165,0.84,0.44,1)\",\n easingQuarticInOut: \"cubic-bezier(0.77,0,0.175,1)\",\n easingQuinticIn: \"cubic-bezier(0.755,0.05,0.855,0.06)\",\n easingQuinticOut: \"cubic-bezier(0.23,1,0.32,1)\",\n easingQuinticInOut: \"cubic-bezier(0.86,0,0.07,1)\",\n easingExponentialIn: \"cubic-bezier(0.95,0.05,0.795,0.035)\",\n easingExponentialOut: \"cubic-bezier(0.19,1,0.22,1)\",\n easingExponentialInOut: \"cubic-bezier(1,0,0,1)\",\n easingCircularIn: \"cubic-bezier(0.6,0.04,0.98,0.335)\",\n easingCircularOut: \"cubic-bezier(0.075,0.82,0.165,1)\",\n easingCircularInOut: \"cubic-bezier(0.785,0.135,0.15,0.86)\",\n easingBackIn: \"cubic-bezier(0.6,-0.28,0.735,0.045)\",\n easingBackOut: \"cubic-bezier(0.175,0.885,0.32,1.275)\",\n easingBackInOut: \"cubic-bezier(0.68,-0.55,0.265,1.55)\"\n}, Nn = \"offsetHeight\", Tn = \"offsetWidth\", Cn = \"scrollHeight\", Mn = \"scrollWidth\", Dn = \"tabindex\", Ln = navigator.userAgentData, { userAgent: Yt } = navigator, On = Yt, xn = () => {\n const t = /iPhone|iPad|iPod|Android/i;\n return navigator?.userAgentData?.brands.some(\n (e) => t.test(e.brand)\n ) || t.test(navigator?.userAgent) || !1;\n}, zn = () => {\n const t = /(iPhone|iPod|iPad)/;\n return navigator?.userAgentData?.brands.some(\n (e) => t.test(e.brand)\n ) || t.test(\n navigator?.userAgent\n ) || !1;\n}, In = () => navigator?.userAgent?.includes(\"Firefox\") || !1, te = () => typeof CSS > \"u\" || !CSS.supports ? !1 : CSS.supports(\"-webkit-backdrop-filter\", \"none\"), Pn = () => [\"webkitPerspective\", \"perspective\"].some((t) => t in document.head.style), ee = () => {\n}, Q = (t, e, n, o) => {\n const s = o || !1;\n t.addEventListener(\n e,\n n,\n s\n );\n}, j = (t, e, n, o) => {\n const s = o || !1;\n t.removeEventListener(\n e,\n n,\n s\n );\n}, ne = (t, e, n, o) => {\n const s = (r) => {\n (r.target === t || r.currentTarget === t) && (n.apply(t, [r]), j(t, e, s, o));\n };\n Q(t, e, s, o);\n}, Fn = () => {\n let t = !1;\n try {\n const e = Object.defineProperty({}, \"passive\", {\n get: () => (t = !0, t)\n });\n ne(document, U, ee, e);\n } catch {\n }\n return t;\n}, Bn = () => [\"webkitTransform\", \"transform\"].some((t) => t in document.head.style), Vn = () => \"ontouchstart\" in window || \"msMaxTouchPoints\" in navigator, Hn = () => [\"webkitAnimation\", \"animation\"].some((t) => t in document.head.style), Un = () => [\"webkitTransition\", \"transition\"].some((t) => t in document.head.style), K = (t, e) => t.getAttribute(e), Wn = (t, e, n) => e.getAttributeNS(t, n), oe = (t, e) => t.hasAttribute(e), Rn = (t, e, n) => e.hasAttributeNS(t, n), Qn = (t, e, n) => t.setAttribute(e, n), jn = (t, e, n, o) => e.setAttributeNS(t, n, o), Kn = (t, e) => t.removeAttribute(e), qn = (t, e, n) => e.removeAttributeNS(t, n), Gn = (t, ...e) => {\n t.classList.add(...e);\n}, Zn = (t, ...e) => {\n t.classList.remove(...e);\n}, _n = (t, e) => t.classList.contains(e), { body: $n } = document, { documentElement: Jn } = document, { head: Xn } = document, Yn = (t) => Array.from(t), v = (t) => t != null && typeof t == \"object\" || !1, u = (t) => v(t) && typeof t.nodeType == \"number\" && [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].some(\n (e) => t.nodeType === e\n) || !1, i = (t) => u(t) && t.nodeType === 1 || !1, E = /* @__PURE__ */ new Map(), L = {\n data: E,\n set: (t, e, n) => {\n if (!i(t)) return;\n E.has(e) || E.set(e, /* @__PURE__ */ new Map()), E.get(e).set(t, n);\n },\n getAllFor: (t) => E.get(t) || null,\n get: (t, e) => {\n if (!i(t) || !e) return null;\n const n = L.getAllFor(e);\n return t && n && n.get(t) || null;\n },\n remove: (t, e) => {\n const n = L.getAllFor(e);\n !n || !i(t) || (n.delete(t), n.size === 0 && E.delete(e));\n }\n}, to = (t, e) => L.get(t, e), eo = (t) => t?.charAt(0).toUpperCase() + t?.slice(1), P = (t) => t?.trim().replace(\n /(?:^\\w|[A-Z]|\\b\\w)/g,\n (e, n) => n === 0 ? e.toLowerCase() : e.toUpperCase()\n).replace(/\\s+/g, \"\"), N = (t) => typeof t == \"string\" || !1, q = (t) => v(t) && t.constructor.name === \"Window\" || !1, G = (t) => u(t) && t.nodeType === 9 || !1, d = (t) => G(t) ? t : u(t) ? t.ownerDocument : q(t) ? t.document : globalThis.document, T = (t, ...e) => Object.assign(t, ...e), se = (t) => {\n if (!t) return;\n if (N(t))\n return d().createElement(t);\n const { tagName: e } = t, n = se(e);\n if (!n) return;\n const o = { ...t };\n return delete o.tagName, T(n, o);\n}, re = (t, e) => {\n if (!t || !e) return;\n if (N(e))\n return d().createElementNS(t, e);\n const { tagName: n } = e, o = re(t, n);\n if (!o) return;\n const s = { ...e };\n return delete s.tagName, T(o, s);\n}, Z = (t, e) => t.dispatchEvent(e), no = (t, e, n) => n.indexOf(t) === e, f = (t, e, n) => {\n const o = getComputedStyle(t, n), s = e.replace(\"webkit\", \"Webkit\").replace(/([A-Z])/g, \"-$1\").toLowerCase();\n return o.getPropertyValue(s);\n}, ce = (t) => {\n const e = f(t, W), n = f(t, $t), o = n.includes(\"ms\") ? 1 : 1e3, s = e && e !== \"none\" ? parseFloat(n) * o : 0;\n return Number.isNaN(s) ? 0 : s;\n}, ae = (t) => {\n const e = f(t, W), n = f(t, _t), o = n.includes(\"ms\") ? 1 : 1e3, s = e && e !== \"none\" ? parseFloat(n) * o : 0;\n return Number.isNaN(s) ? 0 : s;\n}, oo = (t, e) => {\n let n = 0;\n const o = new Event(C), s = ae(t), r = ce(t);\n if (s) {\n const a = (l) => {\n l.target === t && (e.apply(t, [l]), t.removeEventListener(C, a), n = 1);\n };\n t.addEventListener(C, a), setTimeout(() => {\n n || Z(t, o);\n }, s + r + 17);\n } else\n e.apply(t, [o]);\n}, ie = (t) => {\n const e = f(t, R), n = f(t, Xt), o = n.includes(\"ms\") ? 1 : 1e3, s = e && e !== \"none\" ? parseFloat(n) * o : 0;\n return Number.isNaN(s) ? 0 : s;\n}, ue = (t) => {\n const e = f(t, R), n = f(t, Jt), o = n.includes(\"ms\") ? 1 : 1e3, s = e && e !== \"none\" ? parseFloat(n) * o : 0;\n return Number.isNaN(s) ? 0 : s;\n}, so = (t, e) => {\n let n = 0;\n const o = new Event(M), s = ue(t), r = ie(t);\n if (s) {\n const a = (l) => {\n l.target === t && (e.apply(t, [l]), t.removeEventListener(M, a), n = 1);\n };\n t.addEventListener(M, a), setTimeout(() => {\n n || Z(t, o);\n }, s + r + 17);\n } else\n e.apply(t, [o]);\n}, ro = (t) => Float32Array.from(Array.from(t)), co = (t) => Float64Array.from(Array.from(t)), ao = (t, e) => t.focus(e), io = (t) => t?.trim().replace(/([a-z])([A-Z])/g, \"$1-$2\").replace(/\\s+/g, \"-\").toLowerCase(), F = (t) => [\"true\", !0].includes(t) ? !0 : [\"false\", !1].includes(t) ? !1 : [\"null\", \"\", null, void 0].includes(t) ? null : t !== \"\" && !Number.isNaN(+t) ? +t : t, S = (t) => Object.entries(t), uo = (t, e, n, o) => {\n if (!i(t)) return e;\n const s = { ...n }, r = { ...t.dataset }, a = { ...e }, l = {}, p = \"title\";\n return S(r).forEach(([c, g]) => {\n const A = o && typeof c == \"string\" && c.includes(o) ? P(c.replace(o, \"\")) : P(c);\n l[A] = F(g);\n }), S(s).forEach(([c, g]) => {\n s[c] = F(g);\n }), S(e).forEach(([c, g]) => {\n c in s ? a[c] = s[c] : c in l ? a[c] = l[c] : a[c] = c === p ? K(t, p) : g;\n }), a;\n}, lo = (t, e) => v(t) && (Object.hasOwn(t, e) || e in t), fo = (t) => Object.keys(t), po = (t) => Object.values(t), go = (t) => Object.fromEntries(t), mo = (t, e) => {\n const n = new CustomEvent(t, {\n cancelable: !0,\n bubbles: !0\n });\n return v(e) && T(n, e), n;\n}, vo = { passive: !0 }, bo = (t) => t.offsetHeight, Eo = (t, e) => {\n S(e).forEach(([n, o]) => {\n if (o && N(n) && n.includes(\"--\"))\n t.style.setProperty(n, o);\n else {\n const s = {};\n s[n] = o, T(t.style, s);\n }\n });\n}, O = (t) => v(t) && t.constructor.name === \"Map\" || !1, le = (t) => typeof t == \"number\" || !1, m = /* @__PURE__ */ new Map(), ho = {\n set: (t, e, n, o) => {\n i(t) && (o && o.length ? (m.has(t) || m.set(t, /* @__PURE__ */ new Map()), m.get(t).set(o, setTimeout(e, n))) : m.set(t, setTimeout(e, n)));\n },\n get: (t, e) => {\n if (!i(t)) return null;\n const n = m.get(t);\n return e && n && O(n) ? n.get(e) || null : le(n) ? n : null;\n },\n clear: (t, e) => {\n if (!i(t)) return;\n const n = m.get(t);\n e && e.length && O(n) ? (clearTimeout(n.get(e)), n.delete(e), n.size === 0 && m.delete(t)) : (clearTimeout(n), m.delete(t));\n }\n}, yo = (t) => t.toLowerCase(), wo = (t) => t.toUpperCase(), de = (t, e) => (u(e) ? e : d()).querySelectorAll(t), z = /* @__PURE__ */ new Map();\nfunction _(t) {\n const { shiftKey: e, code: n } = t, o = d(this), s = [\n ...de(Zt, this)\n ].filter(\n (l) => !oe(l, \"disabled\") && !K(l, X)\n );\n if (!s.length) return;\n const r = s[0], a = s[s.length - 1];\n n === \"Tab\" && (e && o.activeElement === r ? (a.focus(), t.preventDefault()) : !e && o.activeElement === a && (r.focus(), t.preventDefault()));\n}\nconst I = (t) => z.has(t) === !0, fe = (t) => {\n I(t) || (Q(t, \"keydown\", _), z.set(t, !0));\n}, pe = (t) => {\n I(t) && (j(t, \"keydown\", _), z.delete(t));\n}, Ao = (t) => {\n I(t) ? pe(t) : fe(t);\n}, b = (t) => i(t) && \"offsetWidth\" in t || !1, y = (t, e) => {\n const { width: n, height: o, top: s, right: r, bottom: a, left: l } = t.getBoundingClientRect();\n let p = 1, c = 1;\n if (e && b(t)) {\n const { offsetWidth: g, offsetHeight: A } = t;\n p = g > 0 ? Math.round(n) / g : 1, c = A > 0 ? Math.round(o) / A : 1;\n }\n return {\n width: n / p,\n height: o / c,\n top: s / c,\n right: r / p,\n bottom: a / c,\n left: l / p,\n x: l / p,\n y: s / c\n };\n}, So = (t) => d(t).body, w = (t) => d(t).documentElement, ko = (t) => d(t).head, ge = (t) => u(t) ? (t.nodeName || \"\").toLowerCase() : \"#document\", No = (t) => {\n const e = q(t), n = e ? t.scrollX : t.scrollLeft, o = e ? t.scrollY : t.scrollTop;\n return { x: n, y: o };\n}, me = (t) => u(t) && t.constructor.name === \"ShadowRoot\" || !1, k = (t) => t.nodeName === \"HTML\" ? t : i(t) && t.assignedSlot || u(t) && t.parentNode || me(t) && t.host || w(t), ve = (t) => t ? G(t) ? t.defaultView : u(t) ? t?.ownerDocument?.defaultView : t : window, be = (t) => u(t) && [\"TABLE\", \"TD\", \"TH\"].includes(t.nodeName) || !1, Ee = (t, e) => t.matches(e), D = (t) => f(t, \"position\") === \"static\", he = (t) => f(t, \"position\") === \"fixed\", $ = (t) => [\":popover-open\", \":modal\"].some((e) => {\n try {\n return Ee(t, e);\n } catch {\n return !1;\n }\n}), J = (t) => {\n const e = te(), n = i(t) ? getComputedStyle(t) : t;\n return n.transform !== \"none\" || n.perspective !== \"none\" || (n.containerType ? n.containerType !== \"normal\" : !1) || !e && (n.backdropFilter ? n.backdropFilter !== \"none\" : !1) || !e && (n.filter ? n.filter !== \"none\" : !1) || [\"transform\", \"perspective\", \"filter\"].some(\n (o) => (n.willChange || \"\").includes(o)\n ) || [\"paint\", \"layout\", \"strict\", \"content\"].some(\n (o) => (n.contain || \"\").includes(o)\n );\n}, ye = (t) => {\n let e = k(t);\n for (; i(e) && !x(e); ) {\n if (J(e))\n return e;\n if ($(e))\n return null;\n e = k(e);\n }\n return null;\n}, x = (t) => [\"html\", \"body\", \"#document\"].includes(ge(t)), B = (t) => {\n if (!b(t) || he(t))\n return null;\n let e = t.offsetParent;\n return w(t) === e && (e = e.ownerDocument.body), e;\n}, To = (t) => {\n const e = ve(t);\n if (!u(t) || $(t))\n return e;\n if (!b(t)) {\n let o = k(t);\n for (; o && !x(o); ) {\n if (i(o) && !D(o))\n return o;\n o = k(o);\n }\n return e;\n }\n let n = B(t);\n for (; n && be(n) && D(n); )\n n = B(n);\n return n && x(n) && D(n) && !J(n) ? e : n || ye(t) || e;\n}, we = (t) => {\n if (!b(t)) return !1;\n const { width: e, height: n } = y(t), { offsetWidth: o, offsetHeight: s } = t;\n return Math.round(e) !== o || Math.round(n) !== s;\n}, Co = (t, e, n) => {\n const o = b(e), s = y(\n t,\n o && we(e)\n ), r = { x: 0, y: 0 };\n if (o) {\n const a = y(e, !0);\n r.x = a.x + e.clientLeft, r.y = a.y + e.clientTop;\n }\n return {\n x: s.left + n.x - r.x,\n y: s.top + n.y - r.y,\n width: s.width,\n height: s.height\n };\n};\nlet V = 0, H = 0;\nconst h = /* @__PURE__ */ new Map(), Ae = (t, e) => {\n let n = e ? V : H;\n if (e) {\n const o = Ae(t), s = h.get(o) || /* @__PURE__ */ new Map();\n h.has(o) || h.set(o, s), O(s) && !s.has(e) ? (s.set(e, n), V += 1) : n = s.get(e);\n } else {\n const o = t.id || t;\n h.has(o) ? n = h.get(o) : (h.set(o, n), H += 1);\n }\n return n;\n}, Se = (t) => Array.isArray(t) || !1, Mo = (t) => u(t) && t.nodeName === \"CANVAS\" || !1, ke = (t) => b(t) && !!t.shadowRoot || !1, Do = (t) => {\n if (!u(t)) return !1;\n const { top: e, bottom: n } = y(t), { clientHeight: o } = w(t);\n return e <= o && n >= 0;\n}, Lo = (t) => {\n if (!i(t)) return !1;\n const { clientWidth: e, clientHeight: n } = w(t), { top: o, left: s, bottom: r, right: a } = y(t, !0);\n return o >= 0 && s >= 0 && r <= n && a <= e;\n}, Oo = (t) => Se(t) && t.every(i) || !1, xo = (t) => typeof t == \"function\" || !1, zo = (t) => v(t) && t.constructor.name === \"HTMLCollection\" || !1, Io = (t) => b(t) && t.tagName === \"IMG\" || !1, Po = (t) => {\n if (!N(t)) return !1;\n try {\n JSON.parse(t);\n } catch {\n return !1;\n }\n return !0;\n}, Fo = (t) => v(t) && t.constructor.name === \"WeakMap\" || !1, Bo = (t) => u(t) && [\"SVG\", \"Image\", \"Video\", \"Canvas\"].some(\n (e) => t.constructor.name.includes(e)\n) || !1, Vo = (t) => v(t) && t.constructor.name === \"NodeList\" || !1, Ho = (t) => w(t).dir === \"rtl\", Uo = (t) => u(t) && t.constructor.name.includes(\"SVG\") || !1, Ne = (t, e) => !t || !e ? null : t.closest(e) || Ne(t.getRootNode().host, e) || null, Wo = (t, e) => i(t) ? t : (i(e) ? e : d()).querySelector(t), Te = (t, e) => (u(e) ? e : d()).getElementsByTagName(\n t\n), Ro = (t) => [...Te(\"*\", t)].filter(ke), Qo = (t, e) => d(e).getElementById(t), jo = (t, e) => (e && u(e) ? e : d()).getElementsByClassName(\n t\n);\nexport {\n Yn as ArrayFrom,\n U as DOMContentLoadedEvent,\n st as DOMMouseScrollEvent,\n L as Data,\n ro as Float32ArrayFrom,\n co as Float64ArrayFrom,\n T as ObjectAssign,\n S as ObjectEntries,\n go as ObjectFromEntries,\n lo as ObjectHasOwn,\n fo as ObjectKeys,\n po as ObjectValues,\n ho as Timer,\n Y as abortEvent,\n Gn as addClass,\n An as addEventListener,\n fe as addFocusTrap,\n $t as animationDelay,\n _t as animationDuration,\n C as animationEndEvent,\n W as animationName,\n Me as ariaChecked,\n Le as ariaDescribedBy,\n De as ariaDescription,\n Oe as ariaExpanded,\n xe as ariaHasPopup,\n X as ariaHidden,\n ze as ariaLabel,\n Ie as ariaLabelledBy,\n Pe as ariaModal,\n Fe as ariaPressed,\n Be as ariaSelected,\n He as ariaValueMax,\n Ve as ariaValueMin,\n Ue as ariaValueNow,\n We as ariaValueText,\n tt as beforeunloadEvent,\n kn as bezierEasings,\n et as blurEvent,\n P as camelCase,\n eo as capitalize,\n nt as changeEvent,\n Ne as closest,\n ot as contextmenuEvent,\n mo as createCustomEvent,\n se as createElement,\n re as createElementNS,\n Z as dispatchEvent,\n no as distinct,\n $n as documentBody,\n Jn as documentElement,\n Xn as documentHead,\n Qe as dragEvent,\n Ze as dragendEvent,\n Ke as dragenterEvent,\n qe as dragleaveEvent,\n Ge as dragoverEvent,\n je as dragstartEvent,\n oo as emulateAnimationEnd,\n so as emulateTransitionEnd,\n rt as errorEvent,\n ao as focus,\n ct as focusEvent,\n tn as focusEvents,\n Zt as focusableSelector,\n at as focusinEvent,\n it as focusoutEvent,\n ut as gesturechangeEvent,\n lt as gestureendEvent,\n dt as gesturestartEvent,\n K as getAttribute,\n Wn as getAttributeNS,\n y as getBoundingClientRect,\n Ro as getCustomElements,\n d as getDocument,\n So as getDocumentBody,\n w as getDocumentElement,\n ko as getDocumentHead,\n ce as getElementAnimationDelay,\n ae as getElementAnimationDuration,\n Qo as getElementById,\n f as getElementStyle,\n ie as getElementTransitionDelay,\n ue as getElementTransitionDuration,\n jo as getElementsByClassName,\n Te as getElementsByTagName,\n to as getInstance,\n ge as getNodeName,\n No as getNodeScroll,\n To as getOffsetParent,\n k as getParentNode,\n Co as getRectRelativeToOffsetParent,\n Ae as getUID,\n ve as getWindow,\n _ as handleKeyboardNavigation,\n oe as hasAttribute,\n Rn as hasAttributeNS,\n _n as hasClass,\n I as hasFocusTrap,\n zn as isApple,\n Se as isArray,\n Mo as isCanvas,\n ke as isCustomElement,\n G as isDocument,\n i as isElement,\n Do as isElementInScrollRange,\n Lo as isElementInViewport,\n Oo as isElementsArray,\n In as isFirefox,\n xo as isFunction,\n zo as isHTMLCollection,\n b as isHTMLElement,\n Io as isHTMLImageElement,\n Po as isJSON,\n O as isMap,\n Bo as isMedia,\n xn as isMobile,\n u as isNode,\n Vo as isNodeList,\n le as isNumber,\n v as isObject,\n Ho as isRTL,\n Uo as isSVGElement,\n we as isScaledElement,\n me as isShadowRoot,\n N as isString,\n be as isTableElement,\n Fo as isWeakMap,\n te as isWebKit,\n q as isWindow,\n io as kebabCase,\n nn as keyAlt,\n on as keyArrowDown,\n rn as keyArrowLeft,\n cn as keyArrowRight,\n sn as keyArrowUp,\n an as keyBackspace,\n un as keyCapsLock,\n ln as keyControl,\n dn as keyDelete,\n fn as keyEnter,\n gn as keyEscape,\n mn as keyInsert,\n vn as keyMeta,\n pn as keyNumpadEnter,\n bn as keyPause,\n En as keyScrollLock,\n hn as keyShift,\n yn as keySpace,\n wn as keyTab,\n en as keyboardEventKeys,\n ft as keydownEvent,\n pt as keypressEvent,\n gt as keyupEvent,\n mt as loadEvent,\n _e as loadstartEvent,\n Ee as matches,\n Je as mouseClickEvents,\n Xe as mouseHoverEvents,\n $e as mouseSwipeEvents,\n vt as mouseclickEvent,\n bt as mousedblclickEvent,\n Et as mousedownEvent,\n wt as mouseenterEvent,\n yt as mousehoverEvent,\n St as mouseinEvent,\n At as mouseleaveEvent,\n Tt as mousemoveEvent,\n kt as mouseoutEvent,\n Nt as mouseoverEvent,\n ht as mouseupEvent,\n Ct as mousewheelEvent,\n Mt as moveEvent,\n Re as nativeEvents,\n ee as noop,\n uo as normalizeOptions,\n F as normalizeValue,\n j as off,\n Nn as offsetHeight,\n Tn as offsetWidth,\n Q as on,\n ne as one,\n Dt as orientationchangeEvent,\n vo as passiveHandler,\n Lt as pointercancelEvent,\n Ot as pointerdownEvent,\n xt as pointerleaveEvent,\n zt as pointermoveEvent,\n It as pointerupEvent,\n Wo as querySelector,\n de as querySelectorAll,\n Pt as readystatechangeEvent,\n bo as reflow,\n Kn as removeAttribute,\n qn as removeAttributeNS,\n Zn as removeClass,\n Sn as removeEventListener,\n pe as removeFocusTrap,\n Ft as resetEvent,\n Bt as resizeEvent,\n Wt as scrollEvent,\n Cn as scrollHeight,\n Mn as scrollWidth,\n Vt as selectEvent,\n Ht as selectendEvent,\n Ut as selectstartEvent,\n Qn as setAttribute,\n jn as setAttributeNS,\n Eo as setElementStyle,\n Rt as submitEvent,\n Pn as support3DTransform,\n Hn as supportAnimation,\n Fn as supportPassive,\n Vn as supportTouch,\n Bn as supportTransform,\n Un as supportTransition,\n Dn as tabindex,\n yo as toLowerCase,\n wo as toUpperCase,\n Ao as toggleFocusTrap,\n Ye as touchEvents,\n Kt as touchcancelEvent,\n qt as touchendEvent,\n jt as touchmoveEvent,\n Qt as touchstartEvent,\n Xt as transitionDelay,\n Jt as transitionDuration,\n M as transitionEndEvent,\n R as transitionProperty,\n Gt as unloadEvent,\n On as userAgent,\n Ln as userAgentData,\n Ce as version\n};\n//# sourceMappingURL=shorty.mjs.map\n","const g = \"2.0.8\", e = {}, f = (t) => {\n const { type: n, currentTarget: c } = t;\n e[n].forEach((a, s) => {\n c === s && a.forEach((o, i) => {\n i.apply(s, [t]), typeof o == \"object\" && o.once && r(s, n, i, o);\n });\n });\n}, E = (t, n, c, a) => {\n e[n] || (e[n] = /* @__PURE__ */ new Map());\n const s = e[n];\n s.has(t) || s.set(t, /* @__PURE__ */ new Map());\n const o = s.get(\n t\n ), { size: i } = o;\n o.set(c, a), i || t.addEventListener(\n n,\n f,\n a\n );\n}, r = (t, n, c, a) => {\n const s = e[n], o = s && s.get(t), i = o && o.get(c), d = i !== void 0 ? i : a;\n o && o.has(c) && o.delete(c), s && (!o || !o.size) && s.delete(t), (!s || !s.size) && delete e[n], (!o || !o.size) && t.removeEventListener(\n n,\n f,\n d\n );\n}, M = E, p = r;\nexport {\n E as addListener,\n f as globalListener,\n p as off,\n M as on,\n e as registry,\n r as removeListener,\n g as version\n};\n//# sourceMappingURL=event-listener.mjs.map\n","/**\n * Global namespace for most components `fade` class.\n */\nconst fadeClass = \"fade\";\nexport default fadeClass;\n","/**\n * Global namespace for most components `show` class.\n */\nconst showClass = \"show\";\nexport default showClass;\n","/**\n * Global namespace for most components `dismiss` option.\n */\nconst dataBsDismiss = \"data-bs-dismiss\";\nexport default dataBsDismiss;\n","/** @type {string} */\nconst alertString = \"alert\";\nexport default alertString;\n","/** @type {string} */\nconst alertComponent = \"Alert\";\nexport default alertComponent;\n","import { getAttribute, hasClass } from \"@thednp/shorty\";\n\n/**\n * Check if interactive element is disabled.\n * @param target either a `<button>` or an `<a>`\n * @returns whether the target is disabled\n */\nconst isDisabled = (target: Element) => {\n return hasClass(target, \"disabled\") ||\n getAttribute(target, \"disabled\") === \"true\";\n};\n\nexport default isDisabled;\n","import { version } from \"../package.json\";\n\nconst Version = version;\n\nexport default Version;\n","/* Native JavaScript for Bootstrap 5 | Base Component\n----------------------------------------------------- */\nimport {\n Data,\n isElement,\n isString,\n normalizeOptions,\n ObjectKeys,\n querySelector,\n} from \"@thednp/shorty\";\n\nimport type { BaseOptions } from \"~/interface/baseComponent\";\nimport Version from \"~/version\";\n\n/** Returns a new `BaseComponent` instance. */\nexport default class BaseComponent {\n declare element: Element;\n declare options?: BaseOptions;\n\n /**\n * @param target `Element` or selector string\n * @param config component instance options\n */\n constructor(target: Element | string, config?: BaseOptions) {\n let element: Element | null;\n\n try {\n if (isElement(target)) {\n element = target as Element;\n } else if (isString(target)) {\n element = querySelector(target);\n // istanbul ignore else @preserve\n if (!element) throw Error(`\"${target}\" is not a valid selector.`);\n } else {\n throw Error(`your target is not an instance of HTMLElement.`);\n }\n } catch (e) {\n throw Error(`${this.name} Error: ${(e as Error).message}`);\n }\n\n const prevInstance = Data.get<typeof this>(element, this.name);\n /* istanbul ignore else @preserve */\n if (prevInstance) {\n // remove previously attached event listeners\n // to avoid memory leaks\n prevInstance._toggleEventListeners();\n }\n\n this.element = element;\n this.options = this.defaults && ObjectKeys(this.defaults).length\n ? normalizeOptions(element, this.defaults, config || {}, \"bs\")\n : /* istanbul ignore next @preserve */ {};\n\n Data.set(element, this.name, this);\n }\n\n // istanbul ignore next @preserve\n get version() {\n return Version;\n }\n\n // istanbul ignore next @preserve\n get name() {\n return \"BaseComponent\";\n }\n\n // istanbul ignore next @preserve\n get defaults() {\n return {};\n }\n\n /** just to have something to extend from */\n // istanbul ignore next @preserve coverage wise this isn't important\n _toggleEventListeners = () => {\n // do something to please linters\n };\n\n /** Removes component from target element. */\n dispose() {\n Data.remove<typeof this>(this.element, this.name);\n ObjectKeys(this).forEach((prop) => {\n delete this[prop];\n });\n }\n}\n","/* Native JavaScript for Bootstrap 5 | Alert\n-------------------------------------------- */\nimport {\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n getInstance,\n hasClass,\n mouseclickEvent,\n PointerEvent,\n querySelector,\n removeClass,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport fadeClass from \"~/strings/fadeClass\";\nimport showClass from \"~/strings/showClass\";\nimport dataBsDismiss from \"~/strings/dataBsDismiss\";\nimport alertString from \"~/strings/alertString\";\nimport alertComponent from \"~/strings/alertComponent\";\nimport isDisabled from \"~/util/isDisabled\";\nimport type { AlertEvent } from \"~/interface/alert\";\n\nimport BaseComponent from \"./base-component\";\n\n// ALERT PRIVATE GC\n// ================\nconst alertSelector = `.${alertString}`;\nconst alertDismissSelector = `[${dataBsDismiss}=\"${alertString}\"]`;\n\n/**\n * Static method which returns an existing `Alert` instance associated\n * to a target `Element`.\n */\nconst getAlertInstance = (element: Element) =>\n getInstance<Alert>(element, alertComponent);\n\n/**\n * An `Alert` initialization callback.\n */\nconst alertInitCallback = (element: Element) => new Alert(element);\n\n// ALERT CUSTOM EVENTS\n// ===================\nconst closeAlertEvent = createCustomEvent<Record<string, never>, AlertEvent>(\n `close.bs.${alertString}`,\n);\nconst closedAlertEvent = createCustomEvent<Record<string, never>, AlertEvent>(\n `closed.bs.${alertString}`,\n);\n\n// ALERT EVENT HANDLER\n// ===================\n/**\n * Alert `transitionend` callback.\n *\n * @param that target Alert instance\n */\nconst alertTransitionEnd = (self: Alert) => {\n const { element } = self;\n dispatchEvent(element, closedAlertEvent);\n\n self._toggleEventListeners();\n self.dispose();\n element.remove();\n};\n\n// ALERT DEFINITION\n// ================\n/** Creates a new Alert instance. */\nexport default class Alert extends BaseComponent {\n static selector = alertSelector;\n static init = alertInitCallback;\n static getInstance = getAlertInstance;\n dismiss: HTMLElement | null;\n\n constructor(target: Element | string) {\n super(target);\n\n // the dismiss button\n this.dismiss = querySelector<HTMLElement>(\n alertDismissSelector,\n this.element,\n );\n\n // add event listener\n this._toggleEventListeners(true);\n }\n\n /** Returns component name string. */\n get name() {\n return alertComponent;\n }\n\n // ALERT PUBLIC METHODS\n // ====================\n /**\n * Public method that hides the `.alert` element from the user,\n * disposes the instance once animation is complete, then\n * removes the element from the DOM.\n */\n close = (e: PointerEvent<HTMLElement>) => {\n const { element, dismiss } = this;\n\n // istanbul ignore if @preserve\n if (!element || !hasClass(element, showClass)) return;\n // istanbul ignore if @preserve\n if (e && dismiss && isDisabled(dismiss)) return;\n dispatchEvent(element, closeAlertEvent);\n\n if (closeAlertEvent.defaultPrevented) return;\n\n removeClass(element, showClass);\n\n if (hasClass(element, fadeClass)) {\n emulateTransitionEnd(element, () => alertTransitionEnd(this));\n } else alertTransitionEnd(this);\n };\n /**\n * Toggle on / off the `click` event listener.\n *\n * @param add when `true`, event listener is added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { dismiss, close } = this;\n // istanbul ignore else @preserve\n if (dismiss) {\n action(dismiss, mouseclickEvent, close);\n }\n };\n\n /** Remove the component from target element. */\n dispose() {\n this._toggleEventListeners();\n super.dispose();\n }\n}\n","/**\n * Global namespace for most components active class.\n */\nconst activeClass = \"active\";\nexport default activeClass;\n","/**\n * Global namespace for most components `toggle` option.\n */\nconst dataBsToggle = \"data-bs-toggle\";\nexport default dataBsToggle;\n","/** @type {string} */\nconst buttonString = \"button\";\nexport default buttonString;\n","/** @type {string} */\nconst buttonComponent = \"Button\";\nexport default buttonComponent;\n","/* Native JavaScript for Bootstrap 5 | Button\n---------------------------------------------*/\nimport {\n addClass,\n ariaPressed,\n getInstance,\n hasClass,\n mouseclickEvent,\n PointerEvent,\n removeClass,\n setAttribute,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport activeClass from \"~/strings/activeClass\";\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport buttonString from \"~/strings/buttonString\";\nimport buttonComponent from \"~/strings/buttonComponent\";\nimport BaseComponent from \"./base-component\";\nimport isDisabled from \"~/util/isDisabled\";\n\n// BUTTON PRIVATE GC\n// =================\nconst buttonSelector = `[${dataBsToggle}=\"${buttonString}\"]`;\n\n/**\n * Static method which returns an existing `Button` instance associated\n * to a target `Element`.\n */\nconst getButtonInstance = (element: Element) =>\n getInstance<Button>(element, buttonComponent);\n\n/** A `Button` initialization callback. */\nconst buttonInitCallback = (element: Element) => new Button(element);\n\n// BUTTON DEFINITION\n// =================\n/** Creates a new `Button` instance. */\nexport default class Button extends BaseComponent {\n static selector = buttonSelector;\n static init = buttonInitCallback;\n static getInstance = getButtonInstance;\n\n declare isActive: boolean;\n declare element: HTMLElement;\n\n /**\n * @param target usually a `.btn` element\n */\n constructor(target: Element | string) {\n super(target);\n\n // initialization element\n const { element } = this;\n\n // set initial state\n this.isActive = hasClass(element, activeClass);\n setAttribute(element, ariaPressed, String(!!this.isActive));\n\n // add event listener\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return buttonComponent;\n }\n\n // BUTTON PUBLIC METHODS\n // =====================\n /**\n * Toggles the state of the target button.\n *\n * @param e usually `click` Event object\n */\n toggle = (e?: PointerEvent<HTMLElement>) => {\n if (e) e.preventDefault();\n\n const { element, isActive } = this;\n // istanbul ignore if @preserve\n if (isDisabled(element)) return;\n const action = isActive ? removeClass : addClass;\n action(element, activeClass);\n setAttribute(element, ariaPressed, isActive ? \"false\" : \"true\");\n this.isActive = hasClass(element, activeClass);\n };\n\n // BUTTON PRIVATE METHOD\n // =====================\n /**\n * Toggles on/off the `click` event listener.\n *\n * @param add when `true`, event listener is added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n action(this.element, mouseclickEvent, this.toggle);\n };\n\n /** Removes the `Button` component from the target element. */\n dispose() {\n this._toggleEventListeners();\n super.dispose();\n }\n}\n","/**\n * Global namespace for most components `target` option.\n */\nconst dataBsTarget = \"data-bs-target\";\nexport default dataBsTarget;\n","/** @type {string} */\nconst carouselString = \"carousel\";\nexport default carouselString;\n","/** @type {string} */\nconst carouselComponent = \"Carousel\";\nexport default carouselComponent;\n","/**\n * Global namespace for most components `parent` option.\n */\nconst dataBsParent = \"data-bs-parent\";\nexport default dataBsParent;\n","/**\n * Global namespace for most components `container` option.\n */\nconst dataBsContainer = \"data-bs-container\";\nexport default dataBsContainer;\n","import {\n closest,\n getAttribute,\n getDocument,\n querySelector,\n} from \"@thednp/shorty\";\n\nimport dataBsTarget from \"../strings/dataBsTarget\";\nimport dataBsParent from \"../strings/dataBsParent\";\nimport dataBsContainer from \"../strings/dataBsContainer\";\n\n/**\n * Returns the `Element` that THIS one targets\n * via `data-bs-target`, `href`, `data-bs-parent` or `data-bs-container`.\n *\n * @param element the target element\n * @returns the query result\n */\nconst getTargetElement = <T extends Element = HTMLElement>(element: T) => {\n const targetAttr = [dataBsTarget, dataBsParent, dataBsContainer, \"href\"];\n const doc = getDocument(element);\n\n return targetAttr\n .map((att) => {\n const attValue = getAttribute(element, att);\n if (attValue) {\n return att === dataBsParent\n ? closest<T>(element, attValue)\n : querySelector<T>(attValue, doc);\n }\n return null;\n })\n .filter((x) => x)[0];\n};\n\nexport default getTargetElement;\n","/* Native JavaScript for Bootstrap 5 | Carousel\n----------------------------------------------- */\nimport {\n addClass,\n closest,\n createCustomEvent,\n dispatchEvent,\n DragEvent,\n dragstartEvent,\n emulateTransitionEnd,\n getAttribute,\n getDocument,\n getElementsByClassName,\n getElementTransitionDuration,\n getInstance,\n hasClass,\n isElementInScrollRange,\n isRTL,\n keyArrowLeft,\n keyArrowRight,\n keydownEvent,\n matches,\n mouseclickEvent,\n mouseenterEvent,\n mouseleaveEvent,\n ObjectAssign,\n passiveHandler,\n pointerdownEvent,\n PointerEvent,\n pointermoveEvent,\n pointerupEvent,\n querySelector,\n querySelectorAll,\n reflow,\n removeClass,\n Timer,\n TouchEvent,\n touchstartEvent,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport activeClass from \"~/strings/activeClass\";\nimport dataBsTarget from \"~/strings/dataBsTarget\";\nimport carouselString from \"~/strings/carouselString\";\nimport carouselComponent from \"~/strings/carouselComponent\";\nimport getTargetElement from \"~/util/getTargetElement\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport type { CarouselEvent, CarouselOptions } from \"~/interface/carousel\";\n\ntype CarouselEventProperties = {\n relatedTarget: EventTarget & HTMLElement;\n from: number;\n to: number;\n direction: \"left\" | \"right\";\n};\n\n// CAROUSEL PRIVATE GC\n// ===================\nconst carouselSelector = `[data-bs-ride=\"${carouselString}\"]`;\nconst carouselItem = `${carouselString}-item`;\nconst dataBsSlideTo = \"data-bs-slide-to\";\nconst dataBsSlide = \"data-bs-slide\";\nconst pausedClass = \"paused\";\n\nconst carouselDefaults: CarouselOptions = {\n pause: \"hover\",\n keyboard: false,\n touch: true,\n interval: 5000,\n};\n\n/**\n * Static method which returns an existing `Carousel` instance associated\n * to a target `Element`.\n */\nconst getCarouselInstance = (element: Element) =>\n getInstance<Carousel>(element, carouselComponent);\n\n/**\n * A `Carousel` initialization callback.\n */\nconst carouselInitCallback = (element: Element) => new Carousel(element);\n\nlet startX = 0;\nlet currentX = 0;\nlet endX = 0;\n\n// CAROUSEL CUSTOM EVENTS\n// ======================\nconst carouselSlideEvent = createCustomEvent<\n CarouselEventProperties,\n CarouselEvent\n>(`slide.bs.${carouselString}`);\nconst carouselSlidEvent = createCustomEvent<\n CarouselEventProperties,\n CarouselEvent\n>(`slid.bs.${carouselString}`);\n\n// CAROUSEL EVENT HANDLERS\n// =======================\n/**\n * The `transitionend` event listener of the `Carousel`.\n *\n * @param self the `Carousel` instance\n */\nconst carouselTransitionEndHandler = (self: Carousel) => {\n const { index, direction, element, slides, options } = self;\n\n // istanbul ignore else @preserve\n if (self.isAnimating) {\n const activeItem = getActiveIndex(self);\n const orientation = direction === \"left\" ? \"next\" : \"prev\";\n const directionClass = direction === \"left\" ? \"start\" : \"end\";\n\n addClass(slides[index], activeClass);\n removeClass(slides[index], `${carouselItem}-${orientation}`);\n removeClass(slides[index], `${carouselItem}-${directionClass}`);\n\n removeClass(slides[activeItem], activeClass);\n removeClass(slides[activeItem], `${carouselItem}-${directionClass}`);\n\n dispatchEvent(element, carouselSlidEvent);\n Timer.clear(element, dataBsSlide);\n\n // must check if a previous instance is disposed\n if (\n self.cycle && !getDocument(element).hidden && options.interval &&\n !self.isPaused\n ) {\n self.cycle();\n }\n }\n};\n\n/**\n * Handles the `mouseenter` events when *options.pause*\n * is set to `hover`.\n */\nfunction carouselPauseHandler(this: HTMLElement) {\n const self = getCarouselInstance(this);\n // istanbul ignore else @preserve\n if (self && !self.isPaused && !Timer.get(this, pausedClass)) {\n addClass(this, pausedClass);\n }\n}\n\n/**\n * Handles the `mouseleave` events when *options.pause*\n * is set to `hover`.\n */\nfunction carouselResumeHandler(this: HTMLElement) {\n const self = getCarouselInstance(this);\n // istanbul ignore else @preserve\n if (self && self.isPaused && !Timer.get(this, pausedClass)) {\n self.cycle();\n }\n}\n\n/**\n * Handles the `click` event for the `Carousel` indicators.\n *\n * @param e the `Event` object\n */\nfunction carouselIndicatorHandler(this: HTMLElement, e: MouseEvent) {\n e.preventDefault();\n const element = closest(this, carouselSelector) || getTargetElement(this);\n const self = element && getCarouselInstance(element);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n // istanbul ignore if @preserve\n if (!self || self.isAnimating) return;\n\n const newIndex = +(\n getAttribute(this, dataBsSlideTo) ||\n // istanbul ignore next @preserve\n 0\n );\n\n // istanbul ignore else @preserve\n if (\n this &&\n !hasClass(this, activeClass) && // event target is not active\n !Number.isNaN(newIndex)\n ) {\n // AND has the specific attribute\n self.to(newIndex); // do the slide\n }\n}\n\n/**\n * Handles the `click` event for the `Carousel` arrows.\n *\n * @param e the `Event` object\n */\nfunction carouselControlsHandler(this: HTMLElement, e: MouseEvent) {\n e.preventDefault();\n const element = closest(this, carouselSelector) || getTargetElement(this);\n const self = element && getCarouselInstance(element);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n // istanbul ignore if @preserve\n if (!self || self.isAnimating) return;\n\n const orientation = getAttribute(this, dataBsSlide);\n\n // istanbul ignore else @preserve\n if (orientation === \"next\") {\n self.next();\n } else if (orientation === \"prev\") {\n self.prev();\n }\n}\n\n/**\n * Handles the keyboard `keydown` event for the visible `Carousel` elements.\n *\n * @param e the `Event` object\n */\nconst carouselKeyHandler = (\n { code, target }: KeyboardEvent & { target: Node },\n) => {\n const doc = getDocument(target);\n const [element] = [...querySelectorAll<HTMLElement>(carouselSelector, doc)]\n .filter((x) => isElementInScrollRange(x));\n const self = getCarouselInstance(element);\n\n // istanbul ignore next @preserve\n if (\n !self || self.isAnimating || /textarea|input|select/i.test(target.nodeName)\n ) return;\n\n const RTL = isRTL(element);\n const arrowKeyNext = !RTL ? keyArrowRight : keyArrowLeft;\n const arrowKeyPrev = !RTL ? keyArrowLeft : keyArrowRight;\n\n // istanbul ignore else @preserve\n if (code === arrowKeyPrev) self.prev();\n else if (code === arrowKeyNext) self.next();\n};\n\n// CAROUSEL TOUCH HANDLERS\n// =======================\n/**\n * Prevents the `touchstart` and `dragstart` events for the `Carousel` element.\n *\n * @param e the `Event` object\n */\nfunction carouselDragHandler<T extends HTMLElement>(\n this: T,\n e: Event & (DragEvent<T> | TouchEvent<T>),\n) {\n const { target } = e;\n const self = getCarouselInstance(this);\n\n // istanbul ignore next @preserve\n if (\n self &&\n self.isTouch &&\n ((self.indicator && !self.indicator.contains(target)) ||\n !self.controls.includes(target))\n ) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n e.preventDefault();\n }\n}\n\n// CAROUSEL POINTER HANDLERS\n// =========================\n/**\n * Handles the `pointerdown` event for the `Carousel` element.\n *\n * @param e the `Event` object\n */\nfunction carouselPointerDownHandler(\n this: HTMLElement,\n e: PointerEvent<HTMLElement>,\n) {\n const { target } = e;\n const self = getCarouselInstance(this);\n\n // istanbul ignore else @preserve\n if (!self || self.isAnimating || self.isTouch) return;\n\n // filter pointer event on controls & indicators\n const { controls, indicators } = self;\n // istanbul ignore else @preserve\n if (\n ![...controls, ...indicators].every((el) =>\n el === target || el.contains(target)\n )\n ) {\n startX = e.pageX;\n\n // istanbul ignore else @preserve\n if (this.contains(target)) {\n self.isTouch = true;\n toggleCarouselTouchHandlers(self, true);\n }\n }\n}\n\n/**\n * Handles the `pointermove` event for the `Carousel` element.\n *\n * @param e\n */\nconst carouselPointerMoveHandler = (e: PointerEvent<HTMLElement>) => {\n currentX = e.pageX;\n};\n\n/**\n * Handles the `pointerup` event for the `Carousel` element.\n *\n * @param e\n */\nconst carouselPointerUpHandler = (e: PointerEvent<HTMLElement>) => {\n const { target } = e;\n const doc = getDocument(target);\n const self = [...querySelectorAll(carouselSelector, doc)]\n .map((c) => getCarouselInstance(c) as Carousel)\n .find((i) => i.isTouch) as Carousel;\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n const { element, index } = self;\n const RTL = isRTL(element);\n endX = e.pageX;\n\n self.isTouch = false;\n toggleCarouselTouchHandlers(self);\n\n if (\n !doc.getSelection()?.toString().length &&\n element.contains(target) &&\n Math.abs(startX - endX) > 120\n ) {\n // determine next index to slide to\n // istanbul ignore else @preserve\n if (currentX < startX) {\n self.to(index + (RTL ? -1 : 1));\n } else if (currentX > startX) {\n self.to(index + (RTL ? 1 : -1));\n }\n }\n\n // reset pointer position\n startX = 0;\n currentX = 0;\n endX = 0;\n};\n\n// CAROUSEL PRIVATE METHODS\n// ========================\n/**\n * Sets active indicator for the `Carousel` instance.\n *\n * @param self the `Carousel` instance\n * @param index the index of the new active indicator\n */\nconst activateCarouselIndicator = (self: Carousel, index: number) => {\n const { indicators } = self;\n [...indicators].forEach((x) => removeClass(x, activeClass));\n\n // istanbul ignore else @preserve\n if (self.indicators[index]) addClass(indicators[index], activeClass);\n};\n\n/**\n * Toggles the pointer event listeners for a given `Carousel` instance.\n *\n * @param self the `Carousel` instance\n * @param add when `TRUE` event listeners are added\n */\nconst toggleCarouselTouchHandlers = (self: Carousel, add?: boolean) => {\n const { element } = self;\n const action = add ? addListener : removeListener;\n action(\n getDocument(element),\n pointermoveEvent,\n carouselPointerMoveHandler,\n passiveHandler,\n );\n action(\n getDocument(element),\n pointerupEvent,\n carouselPointerUpHandler,\n passiveHandler,\n );\n};\n\n/**\n * Returns the index of the current active item.\n *\n * @param self the `Carousel` instance\n * @returns the query result\n */\nconst getActiveIndex = (self: Carousel) => {\n const { slides, element } = self;\n const activeItem = querySelector<HTMLElement>(\n `.${carouselItem}.${activeClass}`,\n element,\n );\n return activeItem ? [...slides].indexOf(activeItem) : -1;\n};\n\n// CAROUSEL DEFINITION\n// ===================\n/** Creates a new `Carousel` instance. */\nexport default class Carousel extends BaseComponent {\n static selector = carouselSelector;\n static init = carouselInitCallback;\n static getInstance = getCarouselInstance;\n declare element: HTMLElement;\n declare options: CarouselOptions;\n declare direction: \"right\" | \"left\";\n declare index: number;\n declare isTouch: boolean;\n declare slides: HTMLCollectionOf<HTMLElement>;\n declare controls: HTMLElement[];\n declare indicator: HTMLElement | null;\n declare indicators: HTMLElement[];\n\n /**\n * @param target mostly a `.carousel` element\n * @param config instance options\n */\n constructor(target: Element | string, config?: Partial<CarouselOptions>) {\n super(target, config);\n\n // initialization element\n const { element } = this;\n\n // additional properties\n this.direction = isRTL(element) ? \"right\" : \"left\";\n this.isTouch = false;\n\n // carousel elements\n // a LIVE collection is prefferable\n this.slides = getElementsByClassName(carouselItem, element);\n const { slides } = this;\n\n // invalidate when not enough items\n // no need to go further\n if (slides.length < 2) return;\n\n const activeIndex = getActiveIndex(this);\n // recover item from disposed instance\n const transitionItem = [...slides].find((s) =>\n matches(s, `.${carouselItem}-next`)\n );\n this.index = activeIndex;\n\n // external controls must be within same document context\n const doc = getDocument(element);\n\n this.controls = [\n ...querySelectorAll<HTMLElement>(`[${dataBsSlide}]`, element),\n ...querySelectorAll<HTMLElement>(\n `[${dataBsSlide}][${dataBsTarget}=\"#${element.id}\"]`,\n doc,\n ),\n ].filter((c, i, ar) => i === ar.indexOf(c));\n\n this.indicator = querySelector<HTMLElement>(\n `.${carouselString}-indicators`,\n element,\n );\n\n // a LIVE collection is preffered\n this.indicators = [\n ...(this.indicator\n ? querySelectorAll<HTMLElement>(`[${dataBsSlideTo}]`, this.indicator)\n /* istanbul ignore next @preserve */ : []),\n ...querySelectorAll<HTMLElement>(\n `[${dataBsSlideTo}][${dataBsTarget}=\"#${element.id}\"]`,\n doc,\n ),\n ].filter((c, i, ar) => i === ar.indexOf(c));\n\n // set JavaScript and DATA API options\n const { options } = this;\n\n // don't use TRUE as interval, it's actually 0, use the default 5000ms better\n this.options.interval = options.interval === true\n ? carouselDefaults.interval\n : options.interval;\n\n // set first slide active if none\n // istanbul ignore next @preserve - impossible to test\n if (transitionItem) {\n this.index = [...slides].indexOf(transitionItem);\n } else if (activeIndex < 0) {\n this.index = 0;\n addClass(slides[0], activeClass);\n if (this.indicators.length) activateCarouselIndicator(this, 0);\n }\n\n // istanbul ignore else @preserve\n if (this.indicators.length) activateCarouselIndicator(this, this.index);\n\n // attach event handlers\n this._toggleEventListeners(true);\n\n // start to cycle if interval is set\n if (options.interval) this.cycle();\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return carouselComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return carouselDefaults;\n }\n\n /**\n * Check if instance is paused.\n */\n get isPaused() {\n return hasClass(this.element, pausedClass);\n }\n\n /**\n * Check if instance is animating.\n */\n get isAnimating() {\n return querySelector(\n `.${carouselItem}-next,.${carouselItem}-prev`,\n this.element,\n ) !== null;\n }\n\n // CAROUSEL PUBLIC METHODS\n // =======================\n /** Slide automatically through items. */\n cycle() {\n const { element, options, isPaused, index } = this;\n\n Timer.clear(element, carouselString);\n if (isPaused) {\n Timer.clear(element, pausedClass);\n removeClass(element, pausedClass);\n }\n\n Timer.set(\n element,\n () => {\n // it's very important to check self.element\n // where instance might have been disposed\n // istanbul ignore else @preserve\n if (\n this.element && !this.isPaused && !this.isTouch &&\n isElementInScrollRange(element)\n ) {\n this.to(index + 1);\n }\n },\n options.interval as number,\n carouselString,\n );\n }\n\n /** Pause the automatic cycle. */\n pause() {\n const { element, options } = this;\n // istanbul ignore else @preserve\n if (this.isPaused || !options.interval) return;\n\n addClass(element, pausedClass);\n Timer.set(\n element,\n () => {\n /* ESLint is now happy */\n },\n 1,\n pausedClass,\n );\n }\n\n /** Slide to the next item. */\n next() {\n // istanbul ignore else @preserve\n if (!this.isAnimating) {\n this.to(this.index + 1);\n }\n }\n\n /** Slide to the previous item. */\n prev() {\n // istanbul ignore else @preserve\n if (!this.isAnimating) {\n this.to(this.index - 1);\n }\n }\n\n /**\n * Jump to the item with the `idx` index.\n *\n * @param idx the index of the item to jump to\n */\n to(idx: number) {\n const { element, slides, options } = this;\n const activeItem = getActiveIndex(this);\n const RTL = isRTL(element);\n let next = idx;\n\n // when controled via methods, make sure to check again\n // first return if we're on the same item #227\n // `to()` must be SPAM protected by Timer\n if (\n this.isAnimating || activeItem === next ||\n Timer.get(element, dataBsSlide)\n ) return;\n\n // determine transition direction\n // istanbul ignore else @preserve\n if (\n activeItem < next || (activeItem === 0 && next === slides.length - 1)\n ) {\n this.direction = RTL ? \"right\" : \"left\"; // next\n } else if (\n activeItem > next || (activeItem === slides.length - 1 && next === 0)\n ) {\n this.direction = RTL ? \"left\" : \"right\"; // prev\n }\n const { direction } = this;\n\n // find the right next index\n if (next < 0) {\n next = slides.length - 1;\n } else if (next >= slides.length) {\n next = 0;\n }\n\n // orientation, class name, eventProperties\n const orientation = direction === \"left\" ? \"next\" : \"prev\";\n const directionClass = direction === \"left\" ? \"start\" : \"end\";\n\n const eventProperties = {\n relatedTarget: slides[next],\n from: activeItem,\n to: next,\n direction,\n };\n\n // update event properties\n ObjectAssign(carouselSlideEvent, eventProperties);\n ObjectAssign(carouselSlidEvent, eventProperties);\n\n // discontinue when prevented\n dispatchEvent(element, carouselSlideEvent);\n if (carouselSlideEvent.defaultPrevented) return;\n\n // update index\n this.index = next;\n activateCarouselIndicator(this, next);\n\n if (\n getElementTransitionDuration(slides[next]) &&\n hasClass(element, \"slide\")\n ) {\n Timer.set(\n element,\n () => {\n addClass(slides[next], `${carouselItem}-${orientation}`);\n reflow(slides[next]);\n addClass(slides[next], `${carouselItem}-${directionClass}`);\n addClass(slides[activeItem], `${carouselItem}-${directionClass}`);\n\n // the instance might get diposed mid-animation\n emulateTransitionEnd(\n slides[next],\n () =>\n this.slides && this.slides.length &&\n carouselTransitionEndHandler(this),\n );\n },\n 0,\n dataBsSlide,\n );\n } else {\n addClass(slides[next], activeClass);\n removeClass(slides[activeItem], activeClass);\n\n Timer.set(\n element,\n () => {\n Timer.clear(element, dataBsSlide);\n // check for element, might have been disposed\n // istanbul ignore else @preserve\n if (element && options.interval && !this.isPaused) {\n this.cycle();\n }\n\n dispatchEvent(element, carouselSlidEvent);\n },\n 0,\n dataBsSlide,\n );\n }\n }\n\n /**\n * Toggles all event listeners for the `Carousel` instance.\n *\n * @param add when `TRUE` event listeners are added\n */\n _toggleEventListeners = (add?: boolean) => {\n const { element, options, slides, controls, indicators } = this;\n const { touch, pause, interval, keyboard } = options;\n const action = add ? addListener : removeListener;\n\n if (pause && interval) {\n action(element, mouseenterEvent, carouselPauseHandler);\n action(element, mouseleaveEvent, carouselResumeHandler);\n }\n\n if (touch && slides.length > 2) {\n action(\n element,\n pointerdownEvent,\n carouselPointerDownHandler,\n passiveHandler,\n );\n action(element, touchstartEvent, carouselDragHandler, { passive: false });\n action(element, dragstartEvent, carouselDragHandler, { passive: false });\n }\n\n // istanbul ignore else @preserve\n if (controls.length) {\n controls.forEach((arrow) => {\n action(arrow, mouseclickEvent, carouselControlsHandler);\n });\n }\n\n // istanbul ignore else @preserve\n if (indicators.length) {\n indicators.forEach((indicator) => {\n action(indicator, mouseclickEvent, carouselIndicatorHandler);\n });\n }\n\n if (keyboard) {\n action(getDocument(element), keydownEvent, carouselKeyHandler);\n }\n };\n\n /** Remove `Carousel` component from target. */\n dispose() {\n const { isAnimating } = this;\n\n const clone = {\n ...this,\n isAnimating,\n };\n this._toggleEventListeners();\n super.dispose();\n\n // istanbul ignore next @preserve - impossible to test in playwright\n if (clone.isAnimating) {\n emulateTransitionEnd(clone.slides[clone.index], () => {\n carouselTransitionEndHandler(clone);\n });\n }\n }\n}\n","/**\n * Global namespace for most components `collapsing` class.\n * As used by `Collapse` / `Tab`.\n */\nconst collapsingClass = \"collapsing\";\nexport default collapsingClass;\n","/** @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","const p = (e) => e != null && typeof e == \"object\" || !1, d = (e) => p(e) && typeof e.nodeType == \"number\" && [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].some(\n (t) => e.nodeType === t\n) || !1, a = (e) => d(e) && e.nodeType === 1 || !1, k = (e) => typeof e == \"function\" || !1, v = \"1.0.7\", u = \"PositionObserver Error\";\nclass y {\n entries;\n static version = v;\n _tick;\n _root;\n _callback;\n /**\n * The constructor takes two arguments, a `callback`, which is called\n * whenever the position of an observed element changes and an `options` object.\n * The callback function should take an array of `PositionObserverEntry` objects\n * as its only argument, but it's not required.\n *\n * @param callback the callback that applies to all targets of this observer\n * @param options the options of this observer\n */\n constructor(t, i) {\n if (!k(t))\n throw new Error(`${u}: ${t} is not a function.`);\n this.entries = /* @__PURE__ */ new Map(), this._callback = t, this._root = a(i?.root) ? i.root : document?.documentElement, this._tick = 0;\n }\n /**\n * Start observing the position of the specified element.\n * If the element is not currently attached to the DOM,\n * it will NOT be added to the entries.\n *\n * @param target an `Element` target\n */\n observe = (t) => {\n if (!a(t))\n throw new Error(\n `${u}: ${t} is not an instance of Element.`\n );\n this._root.contains(t) && this._new(t).then(({ boundingClientRect: i }) => {\n if (i && !this.getEntry(t)) {\n const { clientWidth: s, clientHeight: n } = this._root;\n this.entries.set(t, {\n target: t,\n boundingClientRect: i,\n clientWidth: s,\n clientHeight: n\n });\n }\n this._tick || (this._tick = requestAnimationFrame(this._runCallback));\n });\n };\n /**\n * Stop observing the position of the specified element.\n *\n * @param target an `Element` target\n */\n unobserve = (t) => {\n this.entries.has(t) && this.entries.delete(t);\n };\n /**\n * Private method responsible for all the heavy duty,\n * the observer's runtime.\n */\n _runCallback = () => {\n if (!this.entries.size) return;\n const { clientWidth: t, clientHeight: i } = this._root, s = new Promise((n) => {\n const o = [];\n this.entries.forEach(\n ({\n target: r,\n boundingClientRect: c,\n clientWidth: _,\n clientHeight: f\n }) => {\n this._root.contains(r) && this._new(r).then(({ boundingClientRect: h, isIntersecting: m }) => {\n if (!m) return;\n const { left: b, top: w } = h;\n if (c.top !== w || c.left !== b || _ !== t || f !== i) {\n const l = {\n target: r,\n boundingClientRect: h,\n clientHeight: i,\n clientWidth: t\n };\n this.entries.set(r, l), o.push(l);\n }\n });\n }\n ), n(o);\n });\n this._tick = requestAnimationFrame(async () => {\n const n = await s;\n n.length && this._callback(n, this), this._runCallback();\n });\n };\n /**\n * Check intersection status and resolve it\n * right away.\n *\n * @param target an `Element` target\n */\n _new = (t) => new Promise((i) => {\n new IntersectionObserver(\n ([n], o) => {\n o.disconnect(), i(n);\n }\n ).observe(t);\n });\n /**\n * Find the entry for a given target.\n *\n * @param target an `HTMLElement` target\n */\n getEntry = (t) => this.entries.get(t);\n /**\n * Immediately stop observing all elements.\n */\n disconnect = () => {\n cancelAnimationFrame(this._tick), this.entries.clear(), this._tick = 0;\n };\n}\nexport {\n y as default\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Global namespace for `Dropdown` types / classes.\n */\nconst dropdownMenuClasses = [\"dropdown\", \"dropup\", \"dropstart\", \"dropend\"];\nexport default dropdownMenuClasses;\n","/** @type {string} */\nconst dropdownComponent = \"Dropdown\";\nexport default dropdownComponent;\n","/**\n * Global namespace for `.dropdown-menu`.\n */\nconst dropdownMenuClass = \"dropdown-menu\";\nexport default dropdownMenuClass;\n","import { closest, getAttribute, hasAttribute } from \"@thednp/shorty\";\n\n/**\n * Checks if an *event.target* or its parent has an `href=\"#\"` value.\n * We need to prevent jumping around onclick, don't we?\n *\n * @param element the target element\n * @returns the query result\n */\nconst isEmptyAnchor = (element: HTMLElement) => {\n // `EventTarget` must be `HTMLElement`\n const parentAnchor = closest(element, \"A\");\n return (\n (element.tagName === \"A\" &&\n // anchor href starts with #\n hasAttribute(element, \"href\") &&\n (getAttribute(element, \"href\"))?.slice(-1) === \"#\") ||\n // OR a child of an anchor with href starts with #\n (parentAnchor &&\n hasAttribute(parentAnchor, \"href\") &&\n (getAttribute(parentAnchor, \"href\"))?.slice(-1) === \"#\")\n );\n};\nexport default isEmptyAnchor;\n","/* Native JavaScript for Bootstrap 5 | Dropdown\n----------------------------------------------- */\nimport {\n addClass,\n ariaExpanded,\n closest,\n createCustomEvent,\n CSS4Declaration,\n dispatchEvent,\n focus,\n focusEvent,\n getAttribute,\n getBoundingClientRect,\n getDocument,\n getDocumentElement,\n getElementsByClassName,\n getElementStyle,\n getInstance,\n hasClass,\n isHTMLElement,\n isRTL,\n keyArrowDown,\n keyArrowUp,\n KeyboardEvent,\n keydownEvent,\n keyEscape,\n keyupEvent,\n mouseclickEvent,\n mousedownEvent,\n MouseEvent,\n ObjectAssign,\n removeClass,\n setAttribute,\n setElementStyle,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\nimport PositionObserver from \"@thednp/position-observer\";\n\nimport showClass from \"~/strings/showClass\";\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport dropdownClasses from \"~/strings/dropdownClasses\";\nimport dropdownComponent from \"~/strings/dropdownComponent\";\nimport dropdownMenuClass from \"~/strings/dropdownMenuClass\";\nimport isEmptyAnchor from \"~/util/isEmptyAnchor\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport type { DropdownEvent, DropdownOptions } from \"~/interface/dropdown\";\n\n// DROPDOWN PRIVATE GC\n// ===================\nconst [dropdownString, dropupString, dropstartString, dropendString] =\n dropdownClasses;\nconst dropdownSelector = `[${dataBsToggle}=\"${dropdownString}\"]`;\n\n/**\n * Static method which returns an existing `Dropdown` instance associated\n * to a target `Element`.\n */\nconst getDropdownInstance = (element: Element) =>\n getInstance<Dropdown>(element, dropdownComponent);\n\n/**\n * A `Dropdown` initialization callback.\n */\nconst dropdownInitCallback = (element: Element) => new Dropdown(element);\n\n// DROPDOWN PRIVATE GC\n// ===================\n// const dropdownMenuStartClass = `${dropdownMenuClass}-start`;\nconst dropdownMenuEndClass = `${dropdownMenuClass}-end`;\nconst verticalClass = [dropdownString, dropupString];\nconst horizontalClass = [dropstartString, dropendString];\nconst menuFocusTags = [\"A\", \"BUTTON\"];\n\nconst dropdownDefaults = {\n offset: 5, // [number] 5(px)\n display: \"dynamic\", // [dynamic|static]\n};\n\ntype DropdownEventProps = { relatedTarget: Element & EventTarget };\n\n// DROPDOWN CUSTOM EVENTS\n// ======================\nconst showDropdownEvent = createCustomEvent<DropdownEventProps, DropdownEvent>(\n `show.bs.${dropdownString}`,\n);\nconst shownDropdownEvent = createCustomEvent<DropdownEventProps, DropdownEvent>(\n `shown.bs.${dropdownString}`,\n);\nconst hideDropdownEvent = createCustomEvent<DropdownEventProps, DropdownEvent>(\n `hide.bs.${dropdownString}`,\n);\nconst hiddenDropdownEvent = createCustomEvent<\n DropdownEventProps,\n DropdownEvent\n>(`hidden.bs.${dropdownString}`);\nconst updatedDropdownEvent = createCustomEvent<\n DropdownEventProps,\n DropdownEvent\n>(`updated.bs.${dropdownString}`);\n\n// DROPDOWN PRIVATE METHODS\n// ========================\n/**\n * Apply specific style or class names to a `.dropdown-menu` to automatically\n * accomodate the layout and the page scroll.\n *\n * @param self the `Dropdown` instance\n */\nconst styleDropdown = (self: Dropdown) => {\n const { element, menu, parentElement, options } = self;\n const { offset } = options;\n // don't apply any style on mobile view\n // istanbul ignore if @preserve: this test requires a navbar\n if (getElementStyle(menu, \"position\") === \"static\") return;\n\n const RTL = isRTL(element);\n const menuEnd = hasClass(menu, dropdownMenuEndClass);\n\n // reset menu offset and position\n const resetProps = [\"margin\", \"top\", \"bottom\", \"left\", \"right\"];\n resetProps.forEach((p) => {\n const style: { [key: string]: string } = {};\n style[p] = \"\";\n setElementStyle(menu, style);\n });\n\n // set initial position class\n // take into account .btn-group parent as .dropdown\n // this requires navbar/btn-group/input-group\n let positionClass = dropdownClasses.find((c) => hasClass(parentElement, c)) ||\n /* istanbul ignore next @preserve: fallback position */\n dropdownString;\n\n const dropdownMargin: { [key: string]: number[] } = {\n dropdown: [offset, 0, 0],\n dropup: [0, 0, offset],\n dropstart: RTL ? [-1, 0, 0, offset] : [-1, offset, 0],\n dropend: RTL ? [-1, offset, 0] : [-1, 0, 0, offset],\n };\n\n const dropdownPosition: { [key: string]: Partial<CSS4Declaration> } = {\n dropdown: { top: \"100%\" },\n dropup: { top: \"auto\", bottom: \"100%\" },\n dropstart: RTL\n ? { left: \"100%\", right: \"auto\" }\n : { left: \"auto\", right: \"100%\" },\n dropend: RTL\n ? { left: \"auto\", right: \"100%\" }\n : { left: \"100%\", right: \"auto\" },\n menuStart: RTL\n ? { right: \"0\", left: \"auto\" }\n : { right: \"auto\", left: \"0\" },\n menuEnd: RTL ? { right: \"auto\", left: \"0\" } : { right: \"0\", left: \"auto\" },\n };\n\n const { offsetWidth: menuWidth, offsetHeight: menuHeight } = menu;\n\n const { clientWidth, clientHeight } = getDocumentElement(element);\n const {\n left: targetLeft,\n top: targetTop,\n width: targetWidth,\n height: targetHeight,\n } = getBoundingClientRect(element);\n\n // dropstart | dropend\n const leftFullExceed = targetLeft - menuWidth - offset < 0;\n // dropend\n const rightFullExceed =\n targetLeft + menuWidth + targetWidth + offset >= clientWidth;\n // dropstart | dropend\n const bottomExceed = targetTop + menuHeight + offset >= clientHeight;\n // dropdown\n const bottomFullExceed =\n targetTop + menuHeight + targetHeight + offset >= clientHeight;\n // dropup\n const topExceed = targetTop - menuHeight - offset < 0;\n // dropdown / dropup\n const leftExceed = ((!RTL && menuEnd) || (RTL && !menuEnd)) &&\n targetLeft + targetWidth - menuWidth < 0;\n const rightExceed = ((RTL && menuEnd) || (!RTL && !menuEnd)) &&\n targetLeft + menuWidth >= clientWidth;\n\n // recompute position\n // handle RTL as well\n if (\n horizontalClass.includes(positionClass) && leftFullExceed &&\n rightFullExceed\n ) {\n positionClass = dropdownString;\n }\n if (\n positionClass === dropstartString &&\n (!RTL ? leftFullExceed : rightFullExceed)\n ) {\n positionClass = dropendString;\n }\n if (\n positionClass === dropendString &&\n (RTL ? leftFullExceed : rightFullExceed)\n ) {\n positionClass = dropstartString;\n }\n if (positionClass === dropupString && topExceed && !bottomFullExceed) {\n positionClass = dropdownString;\n }\n if (positionClass === dropdownString && bottomFullExceed && !topExceed) {\n positionClass = dropupString;\n }\n\n // override position for horizontal classes\n if (horizontalClass.includes(positionClass) && bottomExceed) {\n ObjectAssign(dropdownPosition[positionClass], {\n top: \"auto\",\n bottom: 0,\n });\n }\n\n // override position for vertical classes\n if (verticalClass.includes(positionClass) && (leftExceed || rightExceed)) {\n // don't realign when menu is wider than window\n // in both RTL and non-RTL readability is KING\n let posAjust:\n | { left: \"auto\" | number; right: \"auto\" | number }\n | undefined = { left: \"auto\", right: \"auto\" };\n /* istanbul ignore else @preserve */\n if (!leftExceed && rightExceed && !RTL) {\n posAjust = { left: \"auto\", right: 0 };\n }\n /* istanbul ignore else @preserve */\n if (leftExceed && !rightExceed && RTL) {\n posAjust = { left: 0, right: \"auto\" };\n }\n /* istanbul ignore else @preserve */\n if (posAjust) {\n ObjectAssign(dropdownPosition[positionClass], posAjust);\n }\n }\n\n const margins: number[] = dropdownMargin[positionClass];\n setElementStyle(menu, {\n ...dropdownPosition[positionClass],\n margin: `${margins.map((x) => (x ? `${x}px` : x)).join(\" \")}`,\n });\n\n // override dropdown-menu-start | dropdown-menu-end\n if (verticalClass.includes(positionClass) && menuEnd) {\n // istanbul ignore else @preserve\n if (menuEnd) {\n const endAdjust = (!RTL && leftExceed) || (RTL && rightExceed)\n ? \"menuStart\"\n : /* istanbul ignore next @preserve */ \"menuEnd\";\n setElementStyle(menu, dropdownPosition[endAdjust]);\n }\n }\n // trigger updated event\n dispatchEvent(parentElement, updatedDropdownEvent);\n};\n\n/**\n * Returns an `Array` of focusable items in the given dropdown-menu.\n *\n * @param menu the target menu\n * @returns all children of the dropdown menu\n */\nconst getMenuItems = (menu: HTMLElement) => {\n return Array.from(menu.children)\n .map((c) => {\n if (c && menuFocusTags.includes(c.tagName)) return c as HTMLElement;\n const { firstElementChild } = c;\n if (\n firstElementChild && menuFocusTags.includes(firstElementChild.tagName)\n ) {\n return firstElementChild as HTMLElement;\n }\n return null;\n })\n .filter((c) => c);\n};\n\n/**\n * Toggles on/off the listeners for the events that close the dropdown\n * as well as event that request a new position for the dropdown.\n *\n * @param {Dropdown} self the `Dropdown` instance\n */\nconst toggleDropdownDismiss = (self: Dropdown) => {\n const { element, options, menu } = self;\n const action = self.open ? addListener : removeListener;\n const doc = getDocument(element);\n\n action(doc, mouseclickEvent, dropdownDismissHandler);\n action(doc, focusEvent, dropdownDismissHandler);\n action(doc, keydownEvent, dropdownPreventScroll);\n action(doc, keyupEvent, dropdownKeyHandler);\n\n // istanbul ignore else @preserve\n if (options.display === \"dynamic\") {\n if (self.open) self._observer.observe(menu);\n else self._observer.disconnect();\n }\n};\n\n/**\n * Returns the currently open `.dropdown` element.\n *\n * @param element target\n * @returns the query result\n */\nconst getCurrentOpenDropdown = (\n element: Element,\n): Element | undefined => {\n const currentParent = [...dropdownClasses, \"btn-group\", \"input-group\"]\n .map((c) =>\n getElementsByClassName(`${c} ${showClass}`, getDocument(element))\n )\n .find((x) => x.length);\n\n if (currentParent && currentParent.length) {\n return [...(currentParent[0].children as HTMLCollectionOf<Element>)]\n .find((x) =>\n dropdownClasses.some((c) => c === getAttribute(x, dataBsToggle))\n );\n }\n return undefined;\n};\n\n// DROPDOWN EVENT HANDLERS\n// =======================\n/**\n * Handles the `click` event for the `Dropdown` instance.\n *\n * @param e event object\n */\nconst dropdownDismissHandler = (e: MouseEvent) => {\n const { target, type } = e;\n\n // istanbul ignore if @preserve\n if (!isHTMLElement(target)) return;\n\n // some weird FF bug #409\n const element = getCurrentOpenDropdown(target);\n const self = element && getDropdownInstance(element);\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n const { parentElement, menu } = self;\n\n const isForm = parentElement &&\n parentElement.contains(target) &&\n (target.tagName === \"form\" || closest(target, \"form\") !== null);\n\n if (\n [mouseclickEvent, mousedownEvent].includes(type) &&\n isEmptyAnchor(target)\n ) {\n e.preventDefault();\n }\n\n // istanbul ignore else @preserve\n if (\n !isForm && type !== focusEvent && target !== element && target !== menu\n ) {\n self.hide();\n }\n};\n\n/**\n * Handles `click` event listener for `Dropdown`.\n *\n * @param e event object\n */\nfunction dropdownClickHandler(this: HTMLElement, e: MouseEvent<HTMLElement>) {\n const self = getDropdownInstance(this);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n // istanbul ignore if @preserve\n if (!self) return;\n\n e.stopPropagation();\n self.toggle();\n // istanbul ignore else @preserve\n if (isEmptyAnchor(this)) e.preventDefault();\n}\n\n/**\n * Prevents scroll when dropdown-menu is visible.\n *\n * @param e event object\n */\nconst dropdownPreventScroll = (e: KeyboardEvent) => {\n // istanbul ignore else @preserve\n if ([keyArrowDown, keyArrowUp].includes(e.code)) e.preventDefault();\n};\n\n/**\n * Handles keyboard `keydown` events for `Dropdown`.\n *\n * @param e keyboard key\n */\nfunction dropdownKeyHandler(this: Element, e: KeyboardEvent) {\n const { code } = e;\n const element = getCurrentOpenDropdown(this) as HTMLElement;\n /* istanbul ignore if @preserve */\n if (!element) return;\n\n const self = getDropdownInstance(element);\n const { activeElement } = getDocument(element) as Document & {\n activeElement: HTMLElement;\n };\n\n // istanbul ignore if @preserve\n if (!self || !activeElement) return;\n\n const { menu, open } = self;\n const menuItems = getMenuItems(menu);\n\n // arrow up & down\n if (\n menuItems && menuItems.length && [keyArrowDown, keyArrowUp].includes(code)\n ) {\n let idx = menuItems.indexOf(activeElement);\n // istanbul ignore else @preserve\n if (activeElement === element) {\n idx = 0;\n } else if (code === keyArrowUp) {\n idx = idx > 1 ? idx - 1 : 0;\n } else if (code === keyArrowDown) {\n idx = idx < menuItems.length - 1 ? idx + 1 : idx;\n }\n // istanbul ignore else @preserve\n if (menuItems[idx]) focus(menuItems[idx] as HTMLElement);\n }\n\n if (keyEscape === code && open) {\n self.toggle();\n focus(element);\n }\n}\n\n// DROPDOWN DEFINITION\n// ===================\n/** Returns a new Dropdown instance. */\nexport default class Dropdown extends BaseComponent {\n static selector = dropdownSelector;\n static init = dropdownInitCallback;\n static getInstance = getDropdownInstance;\n declare element: HTMLElement;\n declare options: DropdownOptions;\n declare open: boolean;\n declare parentElement: HTMLElement;\n declare menu: HTMLElement;\n declare _observer: PositionObserver;\n\n /**\n * @param target Element or string selector\n * @param config the instance options\n */\n constructor(target: Element | string, config?: Partial<DropdownOptions>) {\n super(target, config);\n\n // initialization element\n const { parentElement } = this.element;\n const [menu] = getElementsByClassName<HTMLElement>(\n dropdownMenuClass,\n parentElement as ParentNode,\n );\n\n // invalidate when dropdown-menu is missing\n // istanbul ignore if @preserve\n if (!menu) return;\n\n // set targets\n this.parentElement = parentElement as HTMLElement;\n this.menu = menu;\n this._observer = new PositionObserver(\n () => styleDropdown(this),\n );\n\n // add event listener\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return dropdownComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return dropdownDefaults;\n }\n\n // DROPDOWN PUBLIC METHODS\n // =======================\n /** Shows/hides the dropdown menu to the user. */\n toggle() {\n if (this.open) this.hide();\n else this.show();\n }\n\n /** Shows the dropdown menu to the user. */\n show() {\n const { element, open, menu, parentElement } = this;\n\n // istanbul ignore if @preserve\n if (open) return;\n const currentElement = getCurrentOpenDropdown(element);\n const currentInstance = currentElement &&\n getDropdownInstance(currentElement);\n if (currentInstance) currentInstance.hide();\n\n // dispatch event\n [showDropdownEvent, shownDropdownEvent, updatedDropdownEvent].forEach(\n (e) => {\n e.relatedTarget = element;\n },\n );\n\n dispatchEvent(parentElement, showDropdownEvent);\n // istanbul ignore if @preserve\n if (showDropdownEvent.defaultPrevented) return;\n\n addClass(menu, showClass);\n addClass(parentElement, showClass);\n setAttribute(element, ariaExpanded, \"true\");\n\n // change menu position\n styleDropdown(this);\n\n this.open = !open;\n\n focus(element); // focus the element\n toggleDropdownDismiss(this);\n dispatchEvent(parentElement, shownDropdownEvent);\n }\n\n /** Hides the dropdown menu from the user. */\n hide() {\n const { element, open, menu, parentElement } = this;\n\n // istanbul ignore if @preserve\n if (!open) return;\n\n [hideDropdownEvent, hiddenDropdownEvent].forEach((e) => {\n e.relatedTarget = element as HTMLElement;\n });\n\n dispatchEvent(parentElement, hideDropdownEvent);\n // istanbul ignore if @preserve\n if (hideDropdownEvent.defaultPrevented) return;\n\n removeClass(menu, showClass);\n removeClass(parentElement, showClass);\n setAttribute(element, ariaExpanded, \"false\");\n\n this.open = !open;\n // only re-attach handler if the instance is not disposed\n toggleDropdownDismiss(this);\n dispatchEvent(parentElement, hiddenDropdownEvent);\n }\n\n /**\n * Toggles on/off the `click` event listener of the `Dropdown`.\n *\n * @param add when `true`, it will add the event listener\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n action(this.element, mouseclickEvent, dropdownClickHandler);\n };\n\n /** Removes the `Dropdown` component from the target element. */\n dispose() {\n if (this.open) this.hide();\n\n this._toggleEventListeners();\n super.dispose();\n }\n}\n","/** @type {string} */\nconst modalString = \"modal\";\nexport default modalString;\n","/** @type {string} */\nconst modalComponent = \"Modal\";\nexport default modalComponent;\n","/** @type {string} */\nconst offcanvasComponent = \"Offcanvas\";\nexport default offcanvasComponent;\n","/**\n * Global namespace for components `fixed-top` class.\n */\nconst fixedTopClass = \"fixed-top\";\nexport default fixedTopClass;\n","/**\n * Global namespace for components `fixed-bottom` class.\n */\nconst fixedBottomClass = \"fixed-bottom\";\nexport default fixedBottomClass;\n","/**\n * Global namespace for components `sticky-top` class.\n */\nconst stickyTopClass = \"sticky-top\";\nexport default stickyTopClass;\n","/**\n * Global namespace for components `position-sticky` class.\n */\nconst positionStickyClass = \"position-sticky\";\nexport default positionStickyClass;\n","import {\n getDocumentBody,\n getDocumentElement,\n getElementsByClassName,\n getElementStyle,\n getWindow,\n hasClass,\n setElementStyle,\n} from \"@thednp/shorty\";\n\nimport fixedTopClass from \"../strings/fixedTopClass\";\nimport fixedBottomClass from \"../strings/fixedBottomClass\";\nimport stickyTopClass from \"../strings/stickyTopClass\";\nimport positionStickyClass from \"../strings/positionStickyClass\";\n\nconst getFixedItems = (parent?: ParentNode) => [\n ...getElementsByClassName<HTMLElement>(fixedTopClass, parent),\n ...getElementsByClassName<HTMLElement>(fixedBottomClass, parent),\n ...getElementsByClassName<HTMLElement>(stickyTopClass, parent),\n ...getElementsByClassName<HTMLElement>(positionStickyClass, parent),\n ...getElementsByClassName<HTMLElement>(\"is-fixed\", parent),\n];\n\n/**\n * Removes *padding* and *overflow* from the `<body>`\n * and all spacing from fixed items.\n *\n * @param element the target modal/offcanvas\n */\nexport const resetScrollbar = (element?: Element) => {\n const bd = getDocumentBody(element);\n setElementStyle(bd, {\n paddingRight: \"\",\n overflow: \"\",\n });\n\n const fixedItems = getFixedItems(bd);\n\n // istanbul ignore else @preserve\n if (fixedItems.length) {\n fixedItems.forEach((fixed) => {\n setElementStyle(fixed, {\n paddingRight: \"\",\n marginRight: \"\",\n });\n });\n }\n};\n\n/**\n * Returns the scrollbar width if the body does overflow\n * the window.\n *\n * @param element target element\n * @returns the scrollbar width value\n */\nexport const measureScrollbar = (element: Element) => {\n const { clientWidth } = getDocumentElement(element);\n const { innerWidth } = getWindow(element);\n return Math.abs(innerWidth - clientWidth);\n};\n\n/**\n * Sets the `<body>` and fixed items style when modal / offcanvas\n * is shown to the user.\n *\n * @param element the target modal/offcanvas\n * @param overflow body does overflow or not\n */\nexport const setScrollbar = (element: Element, overflow?: boolean) => {\n const bd = getDocumentBody(element);\n const bodyPad = parseInt(getElementStyle(bd, \"paddingRight\"), 10);\n const isOpen = getElementStyle(bd, \"overflow\") === \"hidden\";\n const sbWidth = isOpen && bodyPad\n ? /* istanbul ignore next */ 0\n : measureScrollbar(element);\n const fixedItems = getFixedItems(bd);\n\n // istanbul ignore if @preserve\n if (!overflow) return;\n\n setElementStyle(bd, {\n overflow: \"hidden\",\n paddingRight: `${bodyPad + sbWidth}px`,\n });\n\n // istanbul ignore if @preserve\n if (!fixedItems.length) return;\n\n fixedItems.forEach((fixed) => {\n const itemPadValue = getElementStyle(fixed, \"paddingRight\");\n fixed.style.paddingRight = `${parseInt(itemPadValue, 10) + sbWidth}px`;\n // istanbul ignore else @preserve\n if (\n [stickyTopClass, positionStickyClass].some((c) => hasClass(fixed, c))\n ) {\n const itemMValue = getElementStyle(fixed, \"marginRight\");\n fixed.style.marginRight = `${parseInt(itemMValue, 10) - sbWidth}px`;\n }\n });\n};\n","/** @type {string} */\nconst offcanvasString = \"offcanvas\";\nexport default offcanvasString;\n","import { createElement, getDocumentBody, isNode } from \"@thednp/shorty\";\n\n// the default container for Modal, Offcanvas, Popover and Tooltip\nconst popupContainer = createElement({\n tagName: \"div\",\n className: \"popup-container\",\n}) as HTMLElement;\n\nconst appendPopup = (target: Element, customContainer?: ParentNode) => {\n const containerIsBody = isNode(customContainer) &&\n customContainer.nodeName === \"BODY\";\n const lookup = isNode(customContainer) && !containerIsBody\n ? customContainer\n : popupContainer;\n const BODY = containerIsBody ? customContainer : getDocumentBody(target);\n\n // istanbul ignore else @preserve\n if (isNode(target)) {\n if (lookup === popupContainer) {\n BODY.append(popupContainer);\n }\n lookup.append(target);\n }\n};\n\nconst removePopup = (target: Element, customContainer?: ParentNode) => {\n const containerIsBody = isNode(customContainer) &&\n customContainer.nodeName === \"BODY\";\n const lookup = isNode(customContainer) && !containerIsBody\n ? customContainer\n : popupContainer;\n\n // istanbul ignore else @preserve\n if (isNode(target)) {\n target.remove();\n\n if (lookup === popupContainer && !popupContainer.children.length) {\n popupContainer.remove();\n }\n }\n};\n\nconst hasPopup = (target: Element, customContainer?: ParentNode) => {\n const lookup = isNode(customContainer) && customContainer.nodeName !== \"BODY\"\n ? customContainer\n : popupContainer;\n return isNode(target) && lookup.contains(target);\n};\n\nexport { appendPopup, hasPopup, popupContainer, removePopup };\n","import {\n addClass,\n createElement,\n getDocument,\n getDocumentBody,\n hasClass,\n querySelector,\n reflow,\n removeClass,\n} from \"@thednp/shorty\";\n\nimport fadeClass from \"../strings/fadeClass\";\nimport showClass from \"../strings/showClass\";\nimport modalString from \"../strings/modalString\";\nimport offcanvasString from \"../strings/offcanvasString\";\nimport { resetScrollbar } from \"./scrollbar\";\nimport { appendPopup, removePopup } from \"./popupContainer\";\n\nconst backdropString = \"backdrop\";\nconst modalBackdropClass = `${modalString}-${backdropString}`;\nconst offcanvasBackdropClass = `${offcanvasString}-${backdropString}`;\nconst modalActiveSelector = `.${modalString}.${showClass}`;\nconst offcanvasActiveSelector = `.${offcanvasString}.${showClass}`;\n\n// any document would suffice\nconst overlay = createElement(\"div\") as HTMLElement;\n\n/**\n * Returns the current active modal / offcancas element.\n *\n * @param element the context element\n * @returns the requested element\n */\nconst getCurrentOpen = (element?: Element) => {\n return querySelector(\n `${modalActiveSelector},${offcanvasActiveSelector}`,\n getDocument(element),\n );\n};\n\n/**\n * Toogles from a Modal overlay to an Offcanvas, or vice-versa.\n *\n * @param isModal\n */\nconst toggleOverlayType = (isModal?: boolean) => {\n const targetClass = isModal ? modalBackdropClass : offcanvasBackdropClass;\n [modalBackdropClass, offcanvasBackdropClass].forEach((c) => {\n removeClass(overlay, c);\n });\n addClass(overlay, targetClass);\n};\n\n/**\n * Append the overlay to DOM.\n *\n * @param element\n * @param hasFade\n * @param isModal\n */\nconst appendOverlay = (\n element: Element,\n hasFade: boolean,\n isModal?: boolean,\n) => {\n toggleOverlayType(isModal);\n appendPopup(overlay, getDocumentBody(element));\n if (hasFade) addClass(overlay, fadeClass);\n};\n\n/**\n * Shows the overlay to the user.\n */\nconst showOverlay = () => {\n if (!hasClass(overlay, showClass)) {\n addClass(overlay, showClass);\n reflow(overlay);\n }\n};\n\n/**\n * Hides the overlay from the user.\n */\nconst hideOverlay = () => {\n removeClass(overlay, showClass);\n};\n\n/**\n * Removes the overlay from DOM.\n *\n * @param element\n */\nconst removeOverlay = (element?: Element): void => {\n if (!getCurrentOpen(element)) {\n removeClass(overlay, fadeClass);\n removePopup(overlay, getDocumentBody(element));\n resetScrollbar(element);\n }\n};\n\nexport {\n appendOverlay,\n getCurrentOpen,\n hideOverlay,\n modalActiveSelector,\n modalBackdropClass,\n offcanvasActiveSelector,\n offcanvasBackdropClass,\n overlay,\n removeOverlay,\n showOverlay,\n toggleOverlayType,\n};\n","import { getElementStyle, isHTMLElement } from \"@thednp/shorty\";\n\n/**\n * @param element target\n * @returns the check result\n */\nconst isVisible = (element: HTMLElement) => {\n return isHTMLElement(element) &&\n getElementStyle(element, \"visibility\") !== \"hidden\" &&\n element.offsetParent !== null;\n};\nexport default isVisible;\n","/* Native JavaScript for Bootstrap 5 | Modal\n-------------------------------------------- */\nimport {\n addClass,\n ariaHidden,\n ariaModal,\n closest,\n createCustomEvent,\n CSS4Declaration,\n dispatchEvent,\n emulateTransitionEnd,\n focus,\n getDocument,\n getDocumentBody,\n getDocumentElement,\n getElementTransitionDuration,\n getInstance,\n hasClass,\n isRTL,\n KeyboardEvent,\n keydownEvent,\n keyEscape,\n mouseclickEvent,\n MouseEvent,\n querySelector,\n querySelectorAll,\n removeAttribute,\n removeClass,\n setAttribute,\n setElementStyle,\n Timer,\n toggleFocusTrap,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport dataBsDismiss from \"~/strings/dataBsDismiss\";\nimport fadeClass from \"~/strings/fadeClass\";\nimport showClass from \"~/strings/showClass\";\nimport modalString from \"~/strings/modalString\";\nimport modalComponent from \"~/strings/modalComponent\";\nimport offcanvasComponent from \"~/strings/offcanvasComponent\";\nimport getTargetElement from \"~/util/getTargetElement\";\nimport { measureScrollbar, setScrollbar } from \"~/util/scrollbar\";\nimport {\n appendOverlay,\n getCurrentOpen,\n hideOverlay,\n modalActiveSelector,\n overlay,\n removeOverlay,\n showOverlay,\n toggleOverlayType,\n} from \"~/util/backdrop\";\nimport isVisible from \"~/util/isVisible\";\nimport { hasPopup } from \"~/util/popupContainer\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport { ModalEvent, ModalOptions } from \"~/interface/modal\";\n\n// MODAL PRIVATE GC\n// ================\nconst modalSelector = `.${modalString}`;\nconst modalToggleSelector = `[${dataBsToggle}=\"${modalString}\"]`;\nconst modalDismissSelector = `[${dataBsDismiss}=\"${modalString}\"]`;\nconst modalStaticClass = `${modalString}-static`;\n\nconst modalDefaults = {\n backdrop: true,\n keyboard: true,\n};\n\ntype ModalEventProps = {\n relatedTarget: Element & EventTarget | null;\n};\n\n/**\n * Static method which returns an existing `Modal` instance associated\n * to a target `Element`.\n */\nconst getModalInstance = (element: Element) =>\n getInstance<Modal>(element, modalComponent);\n\n/**\n * A `Modal` initialization callback.\n */\nconst modalInitCallback = (element: Element) => new Modal(element);\n\n// MODAL CUSTOM EVENTS\n// ===================\nconst showModalEvent = createCustomEvent<ModalEventProps, ModalEvent>(\n `show.bs.${modalString}`,\n);\nconst shownModalEvent = createCustomEvent<ModalEventProps, ModalEvent>(\n `shown.bs.${modalString}`,\n);\nconst hideModalEvent = createCustomEvent<ModalEventProps, ModalEvent>(\n `hide.bs.${modalString}`,\n);\nconst hiddenModalEvent = createCustomEvent<ModalEventProps, ModalEvent>(\n `hidden.bs.${modalString}`,\n);\n\n// MODAL PRIVATE METHODS\n// =====================\n/**\n * Applies special style for the `<body>` and fixed elements\n * when a modal instance is shown to the user.\n *\n * @param self the `Modal` instance\n */\nconst setModalScrollbar = (self: Modal) => {\n const { element } = self;\n const scrollbarWidth = measureScrollbar(element);\n const { clientHeight, scrollHeight } = getDocumentElement(element);\n const { clientHeight: modalHeight, scrollHeight: modalScrollHeight } =\n element;\n const modalOverflow = modalHeight !== modalScrollHeight;\n\n // istanbul ignore next @preserve: impossible to test?\n if (!modalOverflow && scrollbarWidth) {\n const pad = !isRTL(element)\n ? \"paddingRight\"\n // istanbul ignore next @preserve\n : \"paddingLeft\";\n const padStyle = { [pad]: `${scrollbarWidth}px` } as Partial<\n CSS4Declaration\n >;\n setElementStyle(element, padStyle);\n }\n setScrollbar(element, modalOverflow || clientHeight !== scrollHeight);\n};\n\n/**\n * Toggles on/off the listeners of events that close the modal.\n *\n * @param self the `Modal` instance\n * @param add when `true`, event listeners are added\n */\nconst toggleModalDismiss = (self: Modal, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element } = self;\n action(element, mouseclickEvent, modalDismissHandler);\n action(getDocument(element), keydownEvent, modalKeyHandler);\n\n if (add) self._observer.observe(element);\n else self._observer.disconnect();\n};\n\n/**\n * Executes after a modal is hidden to the user.\n *\n * @param self the `Modal` instance\n */\nconst afterModalHide = (self: Modal) => {\n const { triggers, element, relatedTarget } = self;\n removeOverlay(element);\n setElementStyle(element, { paddingRight: \"\", display: \"\" });\n toggleModalDismiss(self);\n\n const focusElement = showModalEvent.relatedTarget || triggers.find(isVisible);\n // istanbul ignore else @preserve\n if (focusElement) focus(focusElement);\n\n hiddenModalEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, hiddenModalEvent);\n toggleFocusTrap(element);\n};\n\n/**\n * Executes after a modal is shown to the user.\n *\n * @param self the `Modal` instance\n */\nconst afterModalShow = (self: Modal) => {\n const { element, relatedTarget } = self;\n focus(element as HTMLElement);\n toggleModalDismiss(self, true);\n\n shownModalEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, shownModalEvent);\n toggleFocusTrap(element);\n};\n\n/**\n * Executes before a modal is shown to the user.\n *\n * @param self the `Modal` instance\n */\nconst beforeModalShow = (self: Modal) => {\n const { element, hasFade } = self;\n setElementStyle(element, { display: \"block\" });\n setModalScrollbar(self);\n // istanbul ignore else @preserve\n if (!getCurrentOpen(element)) {\n setElementStyle(getDocumentBody(element), { overflow: \"hidden\" });\n }\n\n addClass(element, showClass);\n removeAttribute(element, ariaHidden);\n setAttribute(element, ariaModal, \"true\");\n\n if (hasFade) emulateTransitionEnd(element, () => afterModalShow(self));\n else afterModalShow(self);\n};\n\n/**\n * Executes before a modal is hidden to the user.\n *\n * @param self the `Modal` instance\n */\nconst beforeModalHide = (self: Modal) => {\n const { element, options, hasFade } = self;\n\n // callback can also be the transitionEvent object, we wanna make sure it's not\n // call is not forced and overlay is visible\n if (\n options.backdrop && hasFade && hasClass(overlay, showClass) &&\n !getCurrentOpen(element)\n ) {\n // AND no modal is visible\n hideOverlay();\n emulateTransitionEnd(overlay, () => afterModalHide(self));\n } else {\n afterModalHide(self);\n }\n};\n\n// MODAL EVENT HANDLERS\n// ====================\n/**\n * Handles the `click` event listener for modal.\n *\n * @param e the `Event` object\n */\nfunction modalClickHandler(this: HTMLElement, e: MouseEvent<HTMLElement>) {\n const element = getTargetElement(this);\n const self = element && getModalInstance(element);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n // istanbul ignore else @preserve\n if (this.tagName === \"A\") e.preventDefault();\n self.relatedTarget = this;\n self.toggle();\n}\n\n/**\n * Handles the `keydown` event listener for modal\n * to hide the modal when user type the `ESC` key.\n *\n * @param e the `Event` object\n */\nconst modalKeyHandler = ({ code, target }: KeyboardEvent<Element>) => {\n const element = querySelector(modalActiveSelector, getDocument(target));\n const self = element && getModalInstance(element);\n\n // istanbul ignore if @preserve\n if (!self) return;\n\n const { options } = self;\n // istanbul ignore else @preserve\n if (\n options.keyboard &&\n code === keyEscape && // the keyboard option is enabled and the key is 27\n hasClass(element, showClass)\n ) {\n // the modal is not visible\n self.relatedTarget = null;\n self.hide();\n }\n};\n\n/**\n * Handles the `click` event listeners that hide the modal.\n *\n * @param e the `Event` object\n */\nconst modalDismissHandler = (e: MouseEvent<HTMLElement>) => {\n const { currentTarget } = e;\n const self = currentTarget && getModalInstance(currentTarget);\n\n // the timer is needed\n // istanbul ignore if @preserve\n if (!self || !currentTarget || Timer.get(currentTarget)) return;\n\n const { options, isStatic, modalDialog } = self;\n const { backdrop } = options;\n const { target } = e;\n\n const selectedText = getDocument(currentTarget)?.getSelection()?.toString()\n .length;\n const targetInsideDialog = modalDialog.contains(target);\n const dismiss = target && closest(target, modalDismissSelector);\n\n // istanbul ignore else @preserve\n if (isStatic && !targetInsideDialog) {\n Timer.set(\n currentTarget,\n () => {\n addClass(currentTarget, modalStaticClass);\n emulateTransitionEnd(modalDialog, () => staticTransitionEnd(self));\n },\n 17,\n );\n } else if (\n dismiss || (!selectedText && !isStatic && !targetInsideDialog && backdrop)\n ) {\n self.relatedTarget = dismiss || null;\n self.hide();\n e.preventDefault();\n }\n};\n\n/**\n * Handles the `transitionend` event listeners for `Modal`.\n *\n * @param self the `Modal` instance\n */\nconst staticTransitionEnd = (self: Modal) => {\n const { element, modalDialog } = self;\n const duration = (getElementTransitionDuration(modalDialog) || 0) + 17;\n removeClass(element, modalStaticClass);\n // user must wait for zoom out transition\n Timer.set(element, () => Timer.clear(element), duration);\n};\n\n// MODAL DEFINITION\n// ================\n/** Returns a new `Modal` instance. */\nexport default class Modal extends BaseComponent {\n static selector = modalSelector;\n static init = modalInitCallback;\n static getInstance = getModalInstance;\n declare element: HTMLElement;\n declare options: ModalOptions;\n declare modalDialog: HTMLElement;\n declare triggers: HTMLElement[];\n declare isStatic: boolean;\n declare hasFade: boolean;\n declare relatedTarget: EventTarget & HTMLElement | null;\n declare _observer: ResizeObserver;\n\n /**\n * @param target usually the `.modal` element\n * @param config instance options\n */\n constructor(target: Element | string, config?: Partial<ModalOptions>) {\n super(target, config);\n\n // the modal\n const { element } = this;\n\n // the modal-dialog\n const modalDialog = querySelector<HTMLElement>(\n `.${modalString}-dialog`,\n element,\n );\n\n // istanbul ignore if @preserve\n if (!modalDialog) return;\n\n this.modalDialog = modalDialog;\n // modal can have multiple triggering elements\n this.triggers = [\n ...querySelectorAll<HTMLElement>(\n modalToggleSelector,\n getDocument(element),\n ),\n ].filter(\n (btn) => getTargetElement(btn) === element,\n );\n\n // additional internals\n this.isStatic = this.options.backdrop === \"static\";\n this.hasFade = hasClass(element, fadeClass);\n this.relatedTarget = null;\n this._observer = new ResizeObserver(() => this.update());\n\n // attach event listeners\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return modalComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return modalDefaults;\n }\n\n // MODAL PUBLIC METHODS\n // ====================\n /** Toggles the visibility of the modal. */\n toggle() {\n if (hasClass(this.element, showClass)) this.hide();\n else this.show();\n }\n\n /** Shows the modal to the user. */\n show() {\n const { element, options, hasFade, relatedTarget } = this;\n const { backdrop } = options;\n let overlayDelay = 0;\n\n // istanbul ignore if @preserve\n if (hasClass(element, showClass)) return;\n\n showModalEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, showModalEvent);\n\n // allow the event to be prevented\n // istanbul ignore else @preserve\n if (showModalEvent.defaultPrevented) return;\n\n // we elegantly hide any opened modal/offcanvas\n const currentOpen = getCurrentOpen(element);\n\n // istanbul ignore else @preserve\n if (currentOpen && currentOpen !== element) {\n const that = getModalInstance(currentOpen) ||\n // istanbul ignore next @preserve\n getInstance<typeof BaseComponent & { hide: () => void }>(\n currentOpen,\n offcanvasComponent,\n );\n // istanbul ignore else @preserve\n if (that) that.hide();\n }\n if (backdrop) {\n if (!hasPopup(overlay)) {\n appendOverlay(element, hasFade, true);\n } else {\n toggleOverlayType(true);\n }\n\n overlayDelay = getElementTransitionDuration(overlay);\n showOverlay();\n\n setTimeout(() => beforeModalShow(this), overlayDelay);\n } else {\n beforeModalShow(this);\n // istanbul ignore else @preserve\n if (currentOpen && hasClass(overlay, showClass)) {\n hideOverlay();\n }\n }\n }\n\n /** Hide the modal from the user. */\n hide() {\n const { element, hasFade, relatedTarget } = this;\n\n // istanbul ignore if @preserve\n if (!hasClass(element, showClass)) return;\n\n hideModalEvent.relatedTarget = relatedTarget || undefined;\n dispatchEvent(element, hideModalEvent);\n\n // istanbul ignore if @preserve\n if (hideModalEvent.defaultPrevented) return;\n\n removeClass(element, showClass);\n setAttribute(element, ariaHidden, \"true\");\n removeAttribute(element, ariaModal);\n\n if (hasFade) emulateTransitionEnd(element, () => beforeModalHide(this));\n else beforeModalHide(this);\n }\n\n /**\n * Updates the modal layout.\n */\n update = () => {\n // istanbul ignore else @preserve\n if (hasClass(this.element, showClass)) setModalScrollbar(this);\n };\n\n /**\n * Toggles on/off the `click` event listener of the `Modal` instance.\n *\n * @param add when `true`, event listener(s) is/are added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { triggers } = this;\n\n // istanbul ignore if @preserve\n if (!triggers.length) return;\n\n triggers.forEach((btn) => {\n // istanbul ignore else @preserve\n action(btn, mouseclickEvent, modalClickHandler);\n });\n };\n\n /** Removes the `Modal` component from target element. */\n dispose() {\n const clone = { ...this };\n const { modalDialog, hasFade } = clone;\n const callback = () => setTimeout(() => super.dispose(), 17);\n\n this.hide();\n this._toggleEventListeners();\n\n if (hasFade) {\n // use transitionend callback\n emulateTransitionEnd(modalDialog, callback);\n } else {\n callback();\n }\n }\n}\n","/* 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","/** @type {string} */\nconst popoverString = \"popover\";\nexport default popoverString;\n","/** @type {string} */\nconst popoverComponent = \"Popover\";\nexport default popoverComponent;\n","/** @type {string} */\nconst tooltipString = \"tooltip\";\nexport default tooltipString;\n","import tooltipString from \"../strings/tooltipString\";\n\n/**\n * Returns a template for Popover / Tooltip.\n *\n * @param tipType the expected markup type\n * @returns the template markup\n */\nconst getTipTemplate = (tipType: string) => {\n const isTooltip = tipType === tooltipString;\n const bodyClass = isTooltip ? `${tipType}-inner` : `${tipType}-body`;\n const header = !isTooltip ? `<h3 class=\"${tipType}-header\"></h3>` : \"\";\n const arrow = `<div class=\"${tipType}-arrow\"></div>`;\n const body = `<div class=\"${bodyClass}\"></div>`;\n return `<div class=\"${tipType}\" role=\"${tooltipString}\">${\n header + arrow + body\n }</div>`;\n};\n\nexport default getTipTemplate;\n","const tipClassPositions = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"start\",\n right: \"end\",\n};\n\nexport default tipClassPositions;\n","import {\n createCustomEvent,\n dispatchEvent,\n getBoundingClientRect,\n getDocumentElement,\n getElementStyle,\n getNodeScroll,\n getRectRelativeToOffsetParent,\n isHTMLElement,\n isRTL,\n setElementStyle,\n toLowerCase,\n} from \"@thednp/shorty\";\n\nimport tipClassPositions from \"./tipClassPositions\";\nimport Tooltip from \"../components/tooltip\";\nimport type { TooltipEvent } from \"../interface/tooltip\";\nimport type { PopoverEvent } from \"../interface/popover\";\n\n/**\n * Style popovers and tooltips.\n *\n * @param self the `Popover` / `Tooltip` instance\n */\nconst styleTip = (self: Tooltip) => {\n requestAnimationFrame(() => {\n const tipClasses = /\\b(top|bottom|start|end)+/;\n const { element, tooltip, container, offsetParent, options, arrow } = self;\n\n // istanbul ignore if @preserve\n if (!tooltip) return;\n const RTL = isRTL(element);\n const { x: scrollLeft, y: scrollTop } = getNodeScroll(offsetParent);\n\n // reset tooltip style (top: 0, left: 0 works best)\n setElementStyle(tooltip, {\n top: \"\",\n left: \"\",\n right: \"\",\n bottom: \"\",\n });\n const { offsetWidth: tipWidth, offsetHeight: tipHeight } = tooltip;\n const { clientWidth: htmlcw, clientHeight: htmlch, offsetWidth: htmlow } =\n getDocumentElement(element);\n let { placement } = options;\n const { clientWidth: parentCWidth, offsetWidth: parentOWidth } = container;\n const parentPosition = getElementStyle(\n container,\n \"position\",\n );\n const fixedParent = parentPosition === \"fixed\";\n const scrollbarWidth = fixedParent\n ? Math.abs(parentCWidth - parentOWidth)\n : Math.abs(htmlcw - htmlow);\n const leftBoundry = RTL && fixedParent\n ? /* istanbul ignore next @preserve */ scrollbarWidth\n : 0;\n const rightBoundry = htmlcw - (!RTL ? scrollbarWidth : 0) - 1;\n\n // reuse observer entry bounding box\n const observerEntry = self._observer.getEntry(element);\n const {\n width: elemWidth,\n height: elemHeight,\n left: elemRectLeft,\n right: elemRectRight,\n top: elemRectTop,\n } = observerEntry?.boundingClientRect ||\n getBoundingClientRect(element, true);\n\n const {\n x: elemOffsetLeft,\n y: elemOffsetTop,\n } = getRectRelativeToOffsetParent(\n element,\n offsetParent,\n { x: scrollLeft, y: scrollTop },\n );\n\n // reset arrow style\n setElementStyle(arrow as HTMLElement, {\n top: \"\",\n left: \"\",\n right: \"\",\n bottom: \"\",\n });\n let topPosition: number | string = 0;\n let bottomPosition: number | string = \"\";\n let leftPosition: number | string = 0;\n let rightPosition: number | string = \"\";\n let arrowTop: number | string = \"\";\n let arrowLeft: number | string = \"\";\n let arrowRight: number | string = \"\";\n\n const arrowWidth = arrow.offsetWidth || 0;\n const arrowHeight = arrow.offsetHeight || 0;\n const arrowAdjust = arrowWidth / 2;\n\n // check placement\n let topExceed = elemRectTop - tipHeight - arrowHeight < 0;\n let bottomExceed =\n elemRectTop + tipHeight + elemHeight + arrowHeight >= htmlch;\n let leftExceed = elemRectLeft - tipWidth - arrowWidth < leftBoundry;\n let rightExceed =\n elemRectLeft + tipWidth + elemWidth + arrowWidth >= rightBoundry;\n\n const horizontals = [\"left\", \"right\"];\n const verticals = [\"top\", \"bottom\"];\n\n topExceed = horizontals.includes(placement)\n ? elemRectTop + elemHeight / 2 - tipHeight / 2 - arrowHeight < 0\n : topExceed;\n bottomExceed = horizontals.includes(placement)\n ? elemRectTop + tipHeight / 2 + elemHeight / 2 + arrowHeight >= htmlch\n : bottomExceed;\n leftExceed = verticals.includes(placement)\n ? elemRectLeft + elemWidth / 2 - tipWidth / 2 < leftBoundry\n : leftExceed;\n rightExceed = verticals.includes(placement)\n ? elemRectLeft + tipWidth / 2 + elemWidth / 2 >= rightBoundry\n : rightExceed;\n\n // first remove side positions if both left and right limits are exceeded\n // we usually fall back to top|bottom\n placement = horizontals.includes(placement) && leftExceed && rightExceed\n ? \"top\"\n : placement;\n // recompute placement\n placement = placement === \"top\" && topExceed ? \"bottom\" : placement;\n placement = placement === \"bottom\" && bottomExceed ? \"top\" : placement;\n placement = placement === \"left\" && leftExceed ? \"right\" : placement;\n placement = placement === \"right\" && rightExceed\n ? \"left\"\n // istanbul ignore next @preserve\n : placement;\n\n // update tooltip/popover class\n // istanbul ignore else @preserve\n if (!tooltip.className.includes(placement)) {\n tooltip.className = tooltip.className.replace(\n tipClasses,\n tipClassPositions[placement],\n );\n }\n\n // compute tooltip / popover coordinates\n // istanbul ignore else @preserve\n if (horizontals.includes(placement)) {\n // secondary|side positions\n if (placement === \"left\") {\n // LEFT\n leftPosition = elemOffsetLeft - tipWidth - arrowWidth;\n } else {\n // RIGHT\n leftPosition = elemOffsetLeft + elemWidth + arrowWidth;\n }\n\n // adjust top and arrow\n if (topExceed && bottomExceed) {\n topPosition = 0;\n bottomPosition = 0;\n arrowTop = elemOffsetTop + elemHeight / 2 - arrowHeight / 2;\n } else if (topExceed) {\n topPosition = elemOffsetTop;\n bottomPosition = \"\";\n arrowTop = elemHeight / 2 - arrowWidth;\n } else if (bottomExceed) {\n topPosition = elemOffsetTop - tipHeight + elemHeight;\n bottomPosition = \"\";\n arrowTop = tipHeight - elemHeight / 2 - arrowWidth;\n } else {\n topPosition = elemOffsetTop - tipHeight / 2 + elemHeight / 2;\n arrowTop = tipHeight / 2 - arrowHeight / 2;\n }\n } else if (verticals.includes(placement)) {\n if (placement === \"top\") {\n topPosition = elemOffsetTop - tipHeight - arrowHeight;\n } else {\n // BOTTOM\n topPosition = elemOffsetTop + elemHeight + arrowHeight;\n }\n\n // adjust left | right and also the arrow\n if (leftExceed) {\n leftPosition = 0;\n arrowLeft = elemOffsetLeft + elemWidth / 2 - arrowAdjust;\n } else if (rightExceed) {\n leftPosition = \"auto\";\n rightPosition = 0;\n arrowRight = elemWidth / 2 + rightBoundry - elemRectRight - arrowAdjust;\n } else {\n leftPosition = elemOffsetLeft - tipWidth / 2 + elemWidth / 2;\n arrowLeft = tipWidth / 2 - arrowAdjust;\n }\n }\n\n // apply style to tooltip/popover\n setElementStyle(tooltip, {\n top: `${topPosition}px`,\n bottom: bottomPosition === \"\" ? \"\" : `${bottomPosition}px`,\n left: leftPosition === \"auto\" ? leftPosition : `${leftPosition}px`,\n right: rightPosition !== \"\" ? `${rightPosition}px` : \"\",\n });\n\n // update arrow placement\n // istanbul ignore else @preserve\n if (isHTMLElement(arrow)) {\n if (arrowTop !== \"\") {\n arrow.style.top = `${arrowTop}px`;\n }\n if (arrowLeft !== \"\") {\n arrow.style.left = `${arrowLeft}px`;\n } else if (arrowRight !== \"\") {\n arrow.style.right = `${arrowRight}px`;\n }\n }\n const updatedTooltipEvent = createCustomEvent<\n Record<string, unknown>,\n TooltipEvent | PopoverEvent\n >(\n `updated.bs.${toLowerCase(self.name)}`,\n );\n dispatchEvent(element, updatedTooltipEvent);\n });\n};\n\nexport default styleTip;\n","import getTipTemplate from \"./getTipTemplate\";\nimport tooltipString from \"../strings/tooltipString\";\nimport { TooltipOptions } from \"../interface/tooltip\";\n\nconst tooltipDefaults: TooltipOptions = {\n template: getTipTemplate(tooltipString),\n title: \"\",\n customClass: \"\",\n trigger: \"hover focus\",\n placement: \"top\",\n sanitizeFn: undefined,\n animation: true,\n delay: 200,\n container: document.body,\n content: \"\",\n dismissible: false,\n btnClose: \"\",\n};\nexport default tooltipDefaults;\n","/**\n * Global namespace for `data-bs-title` attribute.\n */\nconst dataOriginalTitle = \"data-original-title\";\nexport default dataOriginalTitle;\n","/** @type {string} */\nconst tooltipComponent = \"Tooltip\";\nexport default tooltipComponent;\n","import {\n isArray,\n isFunction,\n isHTMLElement,\n isNode,\n isNodeList,\n isString,\n} from \"@thednp/shorty\";\n\n/**\n * Append an existing `Element` to Popover / Tooltip component or HTML\n * markup string to be parsed & sanitized to be used as popover / tooltip content.\n *\n * @param element target\n * @param content the `Element` to append / string\n * @param sanitizeFn a function to sanitize string content\n */\nconst setHtml = (\n element: HTMLElement,\n content: Node[] | Node | string,\n sanitizeFn?: (s: string) => string,\n) => {\n // istanbul ignore else @preserve\n if (isString(content) && content.length) {\n let dirty = content.trim(); // fixing #233\n if (isFunction(sanitizeFn)) dirty = sanitizeFn(dirty);\n\n const domParser = new DOMParser();\n const tempDocument = domParser.parseFromString(dirty, \"text/html\");\n element.append(...[...tempDocument.body.childNodes]);\n } else if (isHTMLElement(content)) {\n element.append(content);\n } else if (\n isNodeList(content) || (isArray(content) && content.every(isNode))\n ) {\n element.append(...[...content]);\n }\n};\nexport default setHtml;\n","import {\n addClass,\n createElement,\n hasClass,\n isHTMLElement,\n isRTL,\n querySelector,\n setAttribute,\n} from \"@thednp/shorty\";\n\nimport tooltipComponent from \"../strings/tooltipComponent\";\nimport tooltipString from \"../strings/tooltipString\";\nimport popoverString from \"../strings/popoverString\";\nimport fadeClass from \"../strings/fadeClass\";\nimport tipClassPositions from \"./tipClassPositions\";\nimport setHtml from \"./setHtml\";\nimport Tooltip from \"../components/tooltip\";\nimport Popover from \"../components/popover\";\n\n/**\n * Creates a new tooltip / popover.\n *\n * @param self the `Tooltip` / `Popover` instance\n */\nconst createTip = (self: Tooltip | Popover) => {\n const isTooltip = self.name === tooltipComponent;\n\n const { id, element, options } = self;\n const {\n title,\n placement,\n template,\n animation,\n customClass,\n sanitizeFn,\n dismissible,\n content,\n btnClose,\n } = options;\n const tipString = isTooltip ? tooltipString : popoverString;\n const tipPositions = { ...tipClassPositions };\n let titleParts: Node[] = [];\n let contentParts: Node[] = [];\n\n if (isRTL(element)) {\n tipPositions.left = \"end\";\n tipPositions.right = \"start\";\n }\n\n // set initial popover class\n const placementClass = `bs-${tipString}-${tipPositions[placement]}`;\n\n // load template\n let tooltipTemplate: Node | string;\n if (isHTMLElement(template)) {\n tooltipTemplate = template;\n } else {\n const htmlMarkup = createElement(\"div\") as HTMLElement;\n setHtml(htmlMarkup, template, sanitizeFn);\n tooltipTemplate = htmlMarkup.firstChild as HTMLElement;\n }\n\n /* istanbul ignore if @preserve */\n if (!isHTMLElement(tooltipTemplate)) return;\n\n // set popover markup\n self.tooltip = tooltipTemplate.cloneNode(true) as HTMLElement;\n const { tooltip } = self;\n\n // set id and role attributes\n setAttribute(tooltip, \"id\", id);\n setAttribute(tooltip, \"role\", tooltipString);\n\n const bodyClass = isTooltip\n ? `${tooltipString}-inner`\n : `${popoverString}-body`;\n const tooltipHeader = isTooltip\n ? null\n : querySelector<HTMLElement>(`.${popoverString}-header`, tooltip);\n const tooltipBody = querySelector<HTMLElement>(`.${bodyClass}`, tooltip);\n\n // set arrow and enable access for styleTip\n self.arrow = querySelector<HTMLElement>(\n `.${tipString}-arrow`,\n tooltip,\n ) as HTMLElement;\n const { arrow } = self;\n\n if (isHTMLElement(title)) titleParts = [title.cloneNode(true)];\n else {\n const tempTitle = createElement(\"div\") as HTMLElement;\n setHtml(tempTitle, title, sanitizeFn);\n titleParts = [...[...tempTitle.childNodes]];\n }\n\n if (isHTMLElement(content)) contentParts = [content.cloneNode(true)];\n else {\n const tempContent = createElement(\"div\") as HTMLElement;\n setHtml(tempContent, content, sanitizeFn);\n contentParts = [...[...tempContent.childNodes]];\n }\n\n // set dismissible button\n if (dismissible) {\n if (title) {\n if (isHTMLElement(btnClose)) {\n titleParts = [...titleParts, btnClose.cloneNode(true)];\n } else {\n const tempBtn = createElement(\"div\") as HTMLElement;\n setHtml(tempBtn, btnClose, sanitizeFn);\n titleParts = [...titleParts, tempBtn.firstChild as Node];\n }\n } else {\n // istanbul ignore else @preserve\n if (tooltipHeader) tooltipHeader.remove();\n if (isHTMLElement(btnClose)) {\n contentParts = [...contentParts, btnClose.cloneNode(true)];\n } else {\n const tempBtn = createElement(\"div\") as HTMLElement;\n setHtml(tempBtn, btnClose, sanitizeFn);\n contentParts = [...contentParts, tempBtn.firstChild as Node];\n }\n }\n }\n\n // fill the template with content from options / data attributes\n // also sanitize title && content\n // istanbul ignore else @preserve\n if (!isTooltip) {\n // istanbul ignore else @preserve\n if (title && tooltipHeader) {\n setHtml(tooltipHeader, titleParts, sanitizeFn);\n }\n // istanbul ignore else @preserve\n if (content && tooltipBody) {\n setHtml(tooltipBody, contentParts, sanitizeFn);\n }\n // set btn\n self.btn = querySelector<HTMLButtonElement>(\".btn-close\", tooltip) ||\n undefined;\n } else if (title && tooltipBody) setHtml(tooltipBody, title, sanitizeFn);\n\n // Bootstrap 5.2.x\n addClass(tooltip, \"position-absolute\");\n addClass(arrow, \"position-absolute\");\n\n // set popover animation and placement\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, tipString)) addClass(tooltip, tipString);\n // istanbul ignore else @preserve\n if (animation && !hasClass(tooltip, fadeClass)) {\n addClass(tooltip, fadeClass);\n }\n // istanbul ignore else @preserve\n if (customClass && !hasClass(tooltip, customClass)) {\n addClass(tooltip, customClass);\n }\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, placementClass)) addClass(tooltip, placementClass);\n};\n\nexport default createTip;\n","import {\n getDocument,\n getElementStyle,\n getParentNode,\n isShadowRoot,\n isTableElement,\n} from \"@thednp/shorty\";\n\n/**\n * Returns an `HTMLElement` to be used as default value for *options.container*\n * for `Tooltip` / `Popover` components.\n *\n * @see https://github.com/floating-ui/floating-ui\n *\n * @param element the target\n * @returns the query result\n */\nconst getElementContainer = (element: Element) => {\n const majorBlockTags = [\"HTML\", \"BODY\"];\n const containers: HTMLElement[] = [];\n let { parentNode } = element;\n\n while (parentNode && !majorBlockTags.includes(parentNode.nodeName)) {\n parentNode = getParentNode(parentNode) as HTMLElement;\n // istanbul ignore else @preserve\n if (!(isShadowRoot(parentNode) || isTableElement(parentNode))) {\n containers.push(parentNode as HTMLElement);\n }\n }\n\n return (\n containers.find((c, i) => {\n if (\n ((getElementStyle(c, \"position\") !== \"relative\" ||\n getElementStyle(c, \"position\") === \"relative\" &&\n c.offsetHeight !== c.scrollHeight) &&\n containers.slice(i + 1).every((r) =>\n getElementStyle(r, \"position\") === \"static\"\n ))\n ) {\n return c;\n }\n return null;\n }) ||\n /* istanbul ignore next: optional guard */\n getDocument(element).body\n );\n};\n\nexport default getElementContainer;\n","/* Native JavaScript for Bootstrap 5 | Tooltip\n---------------------------------------------- */\nimport {\n addClass,\n ariaDescribedBy,\n closest,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n focus,\n focusEvent,\n focusinEvent,\n focusoutEvent,\n getAttribute,\n getDocument,\n getElementStyle,\n getInstance,\n getUID,\n getWindow,\n hasAttribute,\n hasClass,\n isApple,\n mouseclickEvent,\n mousedownEvent,\n mouseenterEvent,\n mousehoverEvent,\n mouseleaveEvent,\n ObjectAssign,\n passiveHandler,\n removeAttribute,\n removeClass,\n setAttribute,\n Timer,\n toLowerCase,\n TouchEvent,\n touchstartEvent,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\nimport PositionObserver from \"@thednp/position-observer\";\n\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport dataOriginalTitle from \"~/strings/dataOriginalTitle\";\nimport showClass from \"~/strings/showClass\";\nimport tooltipString from \"~/strings/tooltipString\";\nimport tooltipComponent from \"~/strings/tooltipComponent\";\nimport popoverString from \"~/strings/popoverString\";\nimport popoverComponent from \"~/strings/popoverComponent\";\nimport modalString from \"~/strings/modalString\";\nimport offcanvasString from \"~/strings/offcanvasString\";\n\nimport styleTip from \"~/util/styleTip\";\nimport createTip from \"~/util/createTip\";\nimport { appendPopup, hasPopup, removePopup } from \"~/util/popupContainer\";\nimport getElementContainer from \"~/util/getElementContainer\";\nimport tooltipDefaults from \"~/util/tooltipDefaults\";\nimport BaseComponent from \"./base-component\";\nimport type { TooltipEvent, TooltipOptions } from \"~/interface/tooltip\";\nimport type { PopoverEvent, PopoverOptions } from \"~/interface/popover\";\n\n// TOOLTIP PRIVATE GC\n// ==================\nconst tooltipSelector =\n `[${dataBsToggle}=\"${tooltipString}\"],[data-tip=\"${tooltipString}\"]`;\nconst titleAttr = \"title\";\n\n/**\n * Static method which returns an existing `Tooltip` instance associated\n * to a target `Element`.\n */\nlet getTooltipInstance = (element: Element) =>\n getInstance<Tooltip>(element, tooltipComponent);\n\n/**\n * A `Tooltip` initialization callback.\n */\nconst tooltipInitCallback = (element: Element) => new Tooltip(element);\n\n// TOOLTIP PRIVATE METHODS\n// =======================\n/**\n * Removes the tooltip from the DOM.\n *\n * @param self the `Tooltip` instance\n */\nconst removeTooltip = (self: Tooltip) => {\n const { element, tooltip, container } = self;\n removeAttribute(element, ariaDescribedBy);\n removePopup(\n tooltip,\n container,\n );\n};\n\n/**\n * Check if container contains the tooltip.\n *\n * @param self Tooltip\n */\nconst hasTip = (self: Tooltip): boolean | undefined => {\n const { tooltip, container } = self;\n\n return tooltip &&\n hasPopup(tooltip, container);\n};\n\n/**\n * Executes after the instance has been disposed.\n *\n * @param self the `Tooltip` instance\n * @param callback the parent dispose callback\n */\nconst disposeTooltipComplete = (self: Tooltip, callback?: () => void) => {\n const { element } = self;\n self._toggleEventListeners();\n\n // istanbul ignore else @preserve\n if (\n hasAttribute(element, dataOriginalTitle) && self.name === tooltipComponent\n ) {\n toggleTooltipTitle(self);\n }\n // istanbul ignore else @preserve\n if (callback) callback();\n};\n\n/**\n * Toggles on/off the special `Tooltip` event listeners.\n *\n * @param self the `Tooltip` instance\n * @param add when `true`, event listeners are added\n */\nconst toggleTooltipAction = (self: Tooltip, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element } = self;\n\n action(\n getDocument(element),\n touchstartEvent,\n self.handleTouch,\n passiveHandler,\n );\n};\n\n/**\n * Executes after the tooltip was shown to the user.\n *\n * @param self the `Tooltip` instance\n */\nconst tooltipShownAction = (self: Tooltip) => {\n const { element } = self;\n const shownTooltipEvent = createCustomEvent<\n Record<string, never>,\n TooltipEvent | PopoverEvent\n >(\n `shown.bs.${toLowerCase(self.name)}`,\n );\n\n toggleTooltipAction(self, true);\n dispatchEvent(element, shownTooltipEvent);\n Timer.clear(element, \"in\");\n};\n\n/**\n * Executes after the tooltip was hidden to the user.\n *\n * @param self the `Tooltip` instance\n */\nconst tooltipHiddenAction = (self: Tooltip) => {\n const { element } = self;\n const hiddenTooltipEvent = createCustomEvent<\n Record<string, never>,\n TooltipEvent | PopoverEvent\n >(\n `hidden.bs.${toLowerCase(self.name)}`,\n );\n\n toggleTooltipAction(self);\n removeTooltip(self);\n dispatchEvent(element, hiddenTooltipEvent);\n\n Timer.clear(element, \"out\");\n};\n\n/**\n * Toggles on/off the `Tooltip` event listeners that hide/update the tooltip.\n *\n * @param self the `Tooltip` instance\n * @param add when `true`, event listeners are added\n */\nconst toggleTooltipOpenHandlers = (self: Tooltip, add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element, tooltip } = self;\n const parentModal = closest(element, `.${modalString}`);\n const parentOffcanvas = closest(element, `.${offcanvasString}`);\n\n if (add) {\n [element, tooltip]\n .forEach((target) => self._observer.observe(target));\n } else self._observer.disconnect();\n\n // dismiss tooltips inside modal / offcanvas\n if (parentModal) {\n action(parentModal, `hide.bs.${modalString}`, self.handleHide);\n }\n if (parentOffcanvas) {\n action(parentOffcanvas, `hide.bs.${offcanvasString}`, self.handleHide);\n }\n};\n\n/**\n * Toggles the `title` and `data-original-title` attributes.\n *\n * @param self the `Tooltip` instance\n * @param content when `true`, event listeners are added\n */\nconst toggleTooltipTitle = (self: Tooltip, content?: string) => {\n // [0 - add, 1 - remove] | [0 - remove, 1 - add]\n const titleAtt = [dataOriginalTitle, titleAttr];\n const { element } = self;\n\n setAttribute(\n element,\n titleAtt[content ? 0 : 1],\n content ||\n getAttribute(element, titleAtt[0]) ||\n // istanbul ignore next @preserve\n \"\",\n );\n removeAttribute(element, titleAtt[content ? 1 : 0]);\n};\n\n// TOOLTIP DEFINITION\n// ==================\n/** Creates a new `Tooltip` instance. */\nexport default class Tooltip extends BaseComponent {\n static selector = tooltipSelector;\n static init = tooltipInitCallback;\n static getInstance = getTooltipInstance;\n static styleTip = styleTip;\n declare element: Element & HTMLOrSVGElement;\n declare options: TooltipOptions;\n declare btn?: HTMLElement;\n declare tooltip: HTMLElement;\n declare container: HTMLElement;\n declare offsetParent: Element | Window;\n declare arrow: HTMLElement;\n declare enabled: boolean;\n declare id: string;\n declare _observer: PositionObserver;\n\n /**\n * @param target the target element\n * @param config the instance options\n */\n constructor(target: Element | string, config?: Partial<TooltipOptions>) {\n super(target, config);\n\n const { element } = this;\n const isTooltip = this.name === tooltipComponent;\n const tipString = isTooltip ? tooltipString : popoverString;\n const tipComponent = isTooltip ? tooltipComponent : popoverComponent;\n\n // istanbul ignore next @preserve: this is to set Popover too\n getTooltipInstance = <T extends Tooltip>(elem: Element) =>\n getInstance<T>(elem, tipComponent);\n\n // additional properties\n this.enabled = true;\n /** Set unique ID for `aria-describedby`. */\n this.id = `${tipString}-${getUID(element, tipString)}`;\n\n // instance options\n const { options } = this;\n\n // invalidate\n // istanbul ignore else @preserve\n if (((!options.title && isTooltip) || (!isTooltip && !options.content))) {\n return;\n }\n\n // reset default options\n ObjectAssign(tooltipDefaults, { titleAttr: \"\" });\n\n // set title attributes and add event listeners\n // istanbul ignore else @preserve\n if (\n hasAttribute(element, titleAttr) && isTooltip &&\n typeof options.title === \"string\"\n ) {\n toggleTooltipTitle(this, options.title);\n }\n\n // set containers\n const container = getElementContainer(element);\n const offsetParent = [\"sticky\", \"fixed\", \"relative\"].some(\n (position) =>\n getElementStyle(container, \"position\") ===\n position,\n )\n ? container\n : getWindow(element);\n\n this.container = container;\n this.offsetParent = offsetParent;\n\n // create tooltip here\n createTip(this);\n\n /* istanbul ignore if @preserve */\n if (!this.tooltip) return;\n\n // create observer\n this._observer = new PositionObserver(() => this.update());\n\n // attach events\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return tooltipComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return tooltipDefaults;\n }\n\n // TOOLTIP PUBLIC METHODS\n // ======================\n /** Handles the focus event on iOS. */\n // istanbul ignore next @preserve - impossible to test without Apple device\n handleFocus = () => focus(this.element as HTMLElement);\n /** Shows the tooltip. */\n handleShow = () => this.show();\n show() {\n const { options, tooltip, element, container, id } = this;\n const { animation } = options;\n const outTimer = Timer.get(element, \"out\");\n\n Timer.clear(element, \"out\");\n\n if (tooltip && !outTimer && !hasTip(this)) {\n Timer.set(\n element,\n () => {\n const showTooltipEvent = createCustomEvent<\n Record<string, never>,\n TooltipEvent | PopoverEvent\n >(\n `show.bs.${toLowerCase(this.name)}`,\n );\n dispatchEvent(element, showTooltipEvent);\n\n // istanbul ignore else @preserve\n if (!showTooltipEvent.defaultPrevented) {\n // append to container\n appendPopup(tooltip, container);\n\n setAttribute(element, ariaDescribedBy, `#${id}`);\n\n this.update();\n toggleTooltipOpenHandlers(this, true);\n\n // istanbul ignore else @preserve\n if (!hasClass(tooltip, showClass)) addClass(tooltip, showClass);\n // istanbul ignore else @preserve\n if (animation) {\n emulateTransitionEnd(tooltip, () => tooltipShownAction(this));\n } else tooltipShownAction(this);\n }\n },\n 17,\n \"in\",\n );\n }\n }\n\n /** Hides the tooltip. */\n handleHide = () => this.hide();\n hide() {\n const { options, tooltip, element } = this;\n const { animation, delay } = options;\n\n Timer.clear(element, \"in\");\n\n // istanbul ignore else @preserve\n if (tooltip && hasTip(this)) {\n Timer.set(\n element,\n () => {\n const hideTooltipEvent = createCustomEvent<\n Record<string, never>,\n TooltipEvent | PopoverEvent\n >(\n `hide.bs.${toLowerCase(this.name)}`,\n );\n dispatchEvent(element, hideTooltipEvent);\n\n // istanbul ignore else @preserve\n if (!hideTooltipEvent.defaultPrevented) {\n this.update();\n removeClass(tooltip, showClass);\n toggleTooltipOpenHandlers(this);\n\n // istanbul ignore else @preserve\n if (animation) {\n emulateTransitionEnd(tooltip, () => tooltipHiddenAction(this));\n } else tooltipHiddenAction(this);\n }\n },\n delay + 17,\n \"out\",\n );\n }\n }\n\n /** Updates the tooltip position. */\n update = () => {\n styleTip(this);\n };\n\n /** Toggles the tooltip visibility. */\n toggle = () => {\n const { tooltip } = this;\n\n if (tooltip && !hasTip(this)) this.show();\n else this.hide();\n };\n\n /** Enables the tooltip. */\n enable() {\n const { enabled } = this;\n // istanbul ignore else @preserve\n if (!enabled) {\n this._toggleEventListeners(true);\n this.enabled = !enabled;\n }\n }\n\n /** Disables the tooltip. */\n disable() {\n const { tooltip, enabled } = this;\n // istanbul ignore else @preserve\n if (enabled) {\n if (tooltip && hasTip(this)) this.hide();\n this._toggleEventListeners();\n this.enabled = !enabled;\n }\n }\n\n /** Toggles the `disabled` property. */\n toggleEnabled() {\n if (!this.enabled) this.enable();\n else this.disable();\n }\n\n /**\n * Handles the `touchstart` event listener for `Tooltip`\n *\n * @this {Tooltip}\n * @param {TouchEvent} e the `Event` object\n */\n handleTouch = ({ target }: TouchEvent) => {\n const { tooltip, element } = this;\n\n // istanbul ignore if @preserve\n if (\n (tooltip && tooltip.contains(target)) ||\n target === element ||\n (target && element.contains(target))\n ) {\n // smile for ESLint\n } else {\n this.hide();\n }\n };\n\n /**\n * Toggles on/off the `Tooltip` event listeners.\n *\n * @param add when `true`, event listeners are added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n // btn is only for dismissible popover\n const { element, options, btn } = this;\n const { trigger } = options;\n const isPopover = this.name !== tooltipComponent;\n const dismissible = isPopover && (options as PopoverOptions).dismissible\n ? true\n : false;\n\n // istanbul ignore else @preserve\n if (!trigger.includes(\"manual\")) {\n this.enabled = !!add;\n\n const triggerOptions = trigger.split(\" \");\n\n triggerOptions.forEach((tr) => {\n // istanbul ignore else @preserve\n if (tr === mousehoverEvent) {\n action(element, mousedownEvent, this.handleShow);\n action(element, mouseenterEvent, this.handleShow);\n\n // istanbul ignore else @preserve\n if (!dismissible) {\n action(element, mouseleaveEvent, this.handleHide);\n action(\n getDocument(element),\n touchstartEvent,\n this.handleTouch,\n passiveHandler,\n );\n }\n } else if (tr === mouseclickEvent) {\n action(element, tr, !dismissible ? this.toggle : this.handleShow);\n } else if (tr === focusEvent) {\n action(element, focusinEvent, this.handleShow);\n // istanbul ignore else @preserve\n if (!dismissible) action(element, focusoutEvent, this.handleHide);\n // istanbul ignore else @preserve\n if (isApple()) {\n action(element, mouseclickEvent, this.handleFocus);\n }\n }\n // istanbul ignore else @preserve\n if (dismissible && btn) {\n action(btn, mouseclickEvent, this.handleHide);\n }\n });\n }\n };\n\n /** Removes the `Tooltip` from the target element. */\n dispose() {\n const { tooltip, options } = this;\n const clone = { ...this, name: this.name };\n const callback = () =>\n setTimeout(\n () => disposeTooltipComplete(clone, () => super.dispose()),\n 17,\n );\n\n if (options.animation && hasTip(clone)) {\n this.options.delay = 0; // reset delay\n this.hide();\n emulateTransitionEnd(tooltip, callback);\n } else {\n callback();\n }\n }\n}\n","/* Native JavaScript for Bootstrap 5 | Popover\n---------------------------------------------- */\nimport { focus, getInstance, ObjectAssign } from \"@thednp/shorty\";\n\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport popoverString from \"~/strings/popoverString\";\nimport popoverComponent from \"~/strings/popoverComponent\";\n\nimport getTipTemplate from \"~/util/getTipTemplate\";\nimport styleTip from \"~/util/styleTip\";\nimport tooltipDefaults from \"~/util/tooltipDefaults\";\nimport Tooltip from \"./tooltip\";\n\nimport type { PopoverOptions /* , PopoverEvent */ } from \"~/interface/popover\";\n\n// POPOVER PRIVATE GC\n// ==================\nconst popoverSelector =\n `[${dataBsToggle}=\"${popoverString}\"],[data-tip=\"${popoverString}\"]`;\n\nconst popoverDefaults: PopoverOptions = ObjectAssign({}, tooltipDefaults, {\n template: getTipTemplate(popoverString),\n content: \"\",\n dismissible: false,\n btnClose:\n '<button class=\"btn-close position-absolute top-0 end-0 m-1\" aria-label=\"Close\"></button>',\n});\n\n/**\n * Static method which returns an existing `Popover` instance associated\n * to a target `Element`.\n */\nconst getPopoverInstance = (element: Element) =>\n getInstance<Popover>(element, popoverComponent);\n\n/**\n * A `Popover` initialization callback.\n */\nconst popoverInitCallback = (element: Element) => new Popover(element);\n\n// POPOVER DEFINITION\n// ==================\n/** Returns a new `Popover` instance. */\nexport default class Popover extends Tooltip {\n static selector = popoverSelector;\n static init = popoverInitCallback;\n static getInstance = getPopoverInstance;\n static styleTip = styleTip;\n declare options: PopoverOptions;\n\n /**\n * @param target the target element\n * @param config the instance options\n */\n constructor(target: Element | string, config?: Partial<PopoverOptions>) {\n super(target, config);\n }\n /**\n * Returns component name string.\n */\n get name() {\n return popoverComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return popoverDefaults;\n }\n\n /* extend original `show()` */\n show = () => {\n super.show();\n // btn only exists within dismissible popover\n const { options, btn } = this;\n // istanbul ignore else @preserve\n if (options.dismissible && btn) setTimeout(() => focus(btn), 17);\n };\n}\n","/** @type {string} */\nconst scrollspyString = \"scrollspy\";\nexport default scrollspyString;\n","/** @type {string} */\nconst scrollspyComponent = \"ScrollSpy\";\nexport default scrollspyComponent;\n","/* Native JavaScript for Bootstrap 5 | ScrollSpy\n------------------------------------------------ */\nimport {\n addClass,\n closest,\n createCustomEvent,\n dispatchEvent,\n getAttribute,\n getBoundingClientRect,\n getDocument,\n getDocumentElement,\n getElementById,\n getElementsByTagName,\n getInstance,\n hasClass,\n mouseclickEvent,\n MouseEvent,\n querySelector,\n removeClass,\n} from \"@thednp/shorty\";\n\nimport PositionObserver from \"@thednp/position-observer\";\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport activeClass from \"~/strings/activeClass\";\nimport scrollspyString from \"~/strings/scrollspyString\";\nimport scrollspyComponent from \"~/strings/scrollspyComponent\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport { ScrollSpyEvent, ScrollSpyOptions } from \"~/interface/scrollspy\";\n\n// SCROLLSPY PRIVATE GC\n// ====================\nconst scrollspySelector = '[data-bs-spy=\"scroll\"]';\nconst scrollSpyAnchorSelector = \"[href]\";\n\nconst scrollspyDefaults: Partial<ScrollSpyOptions> = {\n offset: 10,\n target: undefined,\n};\n\ntype ScrollSpyEventProps = {\n relatedTarget: HTMLElement;\n};\n\n/**\n * Static method which returns an existing `ScrollSpy` instance associated\n * to a target `Element`.\n */\nconst getScrollSpyInstance = (element: Element) =>\n getInstance<ScrollSpy>(element, scrollspyComponent);\n\n/**\n * A `ScrollSpy` initialization callback.\n */\nconst scrollspyInitCallback = (element: Element) => new ScrollSpy(element);\n\n// SCROLLSPY CUSTOM EVENT\n// ======================\nconst activateScrollSpy = createCustomEvent<\n ScrollSpyEventProps,\n ScrollSpyEvent\n>(`activate.bs.${scrollspyString}`);\n\n// SCROLLSPY PRIVATE METHODS\n// =========================\n/**\n * Update the state of all items.\n *\n * @param self the `ScrollSpy` instance\n */\nconst updateSpyTargets = (self: ScrollSpy) => {\n const {\n target,\n _itemsLength,\n _observables,\n } = self;\n\n const links = getElementsByTagName<HTMLAnchorElement>(\"A\", target);\n const doc = getDocument(target);\n\n // only update items once or with each mutation\n // istanbul ignore else @preserve\n if (!links.length || _itemsLength === _observables.size) return;\n // reset arrays & update\n _observables.clear();\n\n Array.from(links).forEach((link) => {\n const hash = getAttribute(link, \"href\")?.slice(1);\n const targetItem = hash?.length ? doc.getElementById(hash) : null;\n\n if (targetItem && !isDisabled(link)) {\n self._observables.set(targetItem, link);\n }\n });\n self._itemsLength = self._observables.size;\n};\n\n/**\n * Clear all items of the target.\n *\n * @param target a single item\n */\nconst clear = (target: Element) => {\n Array.from(getElementsByTagName<HTMLAnchorElement>(\"A\", target)).forEach(\n (item) => {\n if (hasClass(item, activeClass)) removeClass(item, activeClass);\n },\n );\n};\n\n/**\n * Activates a new item.\n *\n * @param self the `ScrollSpy` instance\n * @param item a single item\n */\nconst activate = (self: ScrollSpy, item: HTMLElement) => {\n const { target, element } = self;\n\n // istanbul ignore else @preserve\n clear(target);\n\n self._activeItem = item;\n addClass(item, activeClass);\n\n // activate all parents\n let parentItem = item;\n while (parentItem !== target) {\n parentItem = parentItem.parentElement as HTMLElement;\n if (\n [\"nav\", \"dropdown-menu\", \"list-group\"].some((c) =>\n hasClass(parentItem, c)\n )\n ) {\n const parentLink = parentItem.previousElementSibling as\n | HTMLElement\n | null;\n\n // istanbul ignore else @preserve\n if (parentLink && !hasClass(parentLink, activeClass)) {\n addClass(parentLink, activeClass);\n }\n }\n }\n\n // dispatch\n activateScrollSpy.relatedTarget = item;\n dispatchEvent(element, activateScrollSpy);\n};\n\nconst getOffset = (self: ScrollSpy, target: HTMLElement) => {\n const { scrollTarget, element, options } = self;\n\n return (scrollTarget !== element\n ? getBoundingClientRect(target).top + scrollTarget.scrollTop\n : target.offsetTop) - (options.offset as number || 10);\n};\n\n// SCROLLSPY DEFINITION\n// ====================\n/** Returns a new `ScrollSpy` instance. */\nexport default class ScrollSpy extends BaseComponent {\n static selector = scrollspySelector;\n static init = scrollspyInitCallback;\n static getInstance = getScrollSpyInstance;\n declare element: HTMLElement;\n declare options: ScrollSpyOptions;\n declare target: HTMLElement;\n declare scrollTarget: HTMLElement;\n declare _itemsLength: number;\n declare _activeItem: HTMLElement | null;\n declare _observables: Map<HTMLElement, HTMLElement>;\n declare _observer: PositionObserver; //| IntersectionObserver;\n\n /**\n * @param target the target element\n * @param config the instance options\n */\n constructor(\n target: Element | string,\n config?: Partial<ScrollSpyOptions>,\n ) {\n super(target, config);\n\n // initialization element & options\n const { element, options } = this;\n\n // get target\n const spyTarget = querySelector(\n options.target,\n getDocument(element),\n );\n\n // invalidate\n if (!spyTarget) return;\n this.target = spyTarget;\n\n // set initial state\n this.scrollTarget = element.clientHeight < element.scrollHeight\n ? element\n : getDocumentElement(element);\n this._observables = new Map();\n\n // run an initial burst, we need to know the targets\n this.refresh();\n // updateSpyTargets(this);\n\n // create observer\n this._observer = new PositionObserver(() => {\n requestAnimationFrame(() => this.refresh());\n }, {\n root: this.scrollTarget,\n });\n\n // add event handlers\n this._toggleEventListeners(true);\n }\n\n /* eslint-disable */\n /**\n * Returns component name string.\n */\n get name() {\n return scrollspyComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return scrollspyDefaults;\n }\n /* eslint-enable */\n\n // SCROLLSPY PUBLIC METHODS\n // ========================\n /** Updates all items. */\n refresh = () => {\n const { target, scrollTarget } = this;\n // check if target is visible and invalidate\n // istanbul ignore if @preserve\n if (!target || target.offsetHeight === 0) return;\n\n updateSpyTargets(this);\n const { _itemsLength, _observables, _activeItem } = this;\n\n // istanbul ignore if @preserve\n if (!_itemsLength) return;\n const entries = _observables.entries().toArray();\n\n const { scrollTop, scrollHeight, clientHeight } = scrollTarget;\n\n if (scrollTop >= scrollHeight - clientHeight) {\n const newActiveItem = entries[_itemsLength - 1]?.[1];\n\n // istanbul ignore else @preserve\n if (_activeItem !== newActiveItem) activate(this, newActiveItem);\n return;\n }\n\n const firstOffset = entries[0]?.[0]\n ? getOffset(this, entries[0][0])\n : /* istanbul ignore next */ null;\n if (\n firstOffset !== null && scrollTop < firstOffset &&\n firstOffset > 0\n ) {\n this._activeItem = null;\n clear(target);\n return;\n }\n\n for (let i = 0; i < _itemsLength; i += 1) {\n const [targetItem, item] = entries[i];\n const offsetTop = getOffset(this, targetItem);\n const nextTarget = entries[i + 1]?.[0];\n const nextOffsetTop = nextTarget\n ? getOffset(this, nextTarget)\n : /* istanbul ignore next */ null;\n\n // istanbul ignore else @preserve\n if (\n _activeItem !== item &&\n scrollTop >= offsetTop &&\n (nextOffsetTop === null || scrollTop < nextOffsetTop)\n ) {\n activate(this, item);\n break;\n }\n }\n };\n\n /**\n * This method provides an event handle\n * for scrollspy\n * @param e the event listener object\n */\n _scrollTo = (e: MouseEvent<HTMLAnchorElement>) => {\n const item = closest(e.target, scrollSpyAnchorSelector);\n const hash = item && getAttribute(item, \"href\")?.slice(1);\n const targetItem = hash && getElementById(hash, this.target);\n\n // istanbul ignore else @preserve\n if (targetItem) {\n this.scrollTarget.scrollTo({\n top: targetItem.offsetTop,\n behavior: \"smooth\",\n });\n e.preventDefault();\n }\n };\n\n /**\n * Toggles on/off the component observer.\n *\n * @param self the ScrollSpy instance\n * @param add when `true`, listener is added\n */\n _toggleEventListeners = (\n add?: boolean,\n ) => {\n const { target, _observables, _observer, _scrollTo } = this;\n const action = add ? addListener : removeListener;\n action(target, mouseclickEvent, _scrollTo);\n\n if (add) {\n _observables?.forEach((_, targetItem) => _observer.observe(targetItem));\n } else _observer.disconnect();\n };\n\n /** Removes `ScrollSpy` from the target element. */\n dispose() {\n this._toggleEventListeners();\n super.dispose();\n }\n}\n","/** @type {string} */\nconst tabString = \"tab\";\nexport default tabString;\n","/** @type {string} */\nconst tabComponent = \"Tab\";\nexport default tabComponent;\n","/* Native JavaScript for Bootstrap 5 | Tab\n------------------------------------------ */\nimport {\n addClass,\n ariaSelected,\n closest,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n getElementsByClassName,\n getInstance,\n hasClass,\n isHTMLElement,\n mouseclickEvent,\n MouseEvent,\n querySelector,\n reflow,\n removeClass,\n setAttribute,\n Timer,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport collapsingClass from \"~/strings/collapsingClass\";\nimport activeClass from \"~/strings/activeClass\";\nimport fadeClass from \"~/strings/fadeClass\";\nimport showClass from \"~/strings/showClass\";\nimport dropdownClasses from \"~/strings/dropdownClasses\";\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport tabString from \"~/strings/tabString\";\nimport tabComponent from \"~/strings/tabComponent\";\nimport getTargetElement from \"~/util/getTargetElement\";\nimport BaseComponent from \"./base-component\";\nimport type { /* TabOptions, */ TabEvent } from \"~/interface/tab\";\n\n// TAB PRIVATE GC\n// ================\nconst tabSelector = `[${dataBsToggle}=\"${tabString}\"]`;\n\n/**\n * Static method which returns an existing `Tab` instance associated\n * to a target `Element`.\n */\nconst getTabInstance = (element: Element) =>\n getInstance<Tab>(element, tabComponent);\n\n/** A `Tab` initialization callback. */\nconst tabInitCallback = (element: Element) => new Tab(element);\n\ntype TabEventProps = {\n relatedTarget: Element & EventTarget | undefined;\n};\n\n// TAB CUSTOM EVENTS\n// =================\nconst showTabEvent = createCustomEvent<TabEventProps, TabEvent>(\n `show.bs.${tabString}`,\n);\nconst shownTabEvent = createCustomEvent<TabEventProps, TabEvent>(\n `shown.bs.${tabString}`,\n);\nconst hideTabEvent = createCustomEvent<TabEventProps, TabEvent>(\n `hide.bs.${tabString}`,\n);\nconst hiddenTabEvent = createCustomEvent<TabEventProps, TabEvent>(\n `hidden.bs.${tabString}`,\n);\n\ninterface TabPrivate {\n tab: HTMLElement | null;\n content: HTMLElement | null;\n currentHeight: number;\n nextHeight: number;\n}\n\n/**\n * Stores the current active tab and its content\n * for a given `.nav` element.\n */\nconst tabPrivate: Map<HTMLElement, TabPrivate> = new Map();\n\n// TAB PRIVATE METHODS\n// ===================\n/**\n * Executes after tab transition has finished.\n *\n * @param self the `Tab` instance\n */\nconst triggerTabEnd = (self: Tab) => {\n const { tabContent, nav } = self;\n\n // istanbul ignore else @preserve\n if (tabContent && hasClass(tabContent, collapsingClass)) {\n tabContent.style.height = \"\";\n removeClass(tabContent, collapsingClass);\n }\n\n // istanbul ignore else @preserve\n if (nav) Timer.clear(nav);\n};\n\n/**\n * Executes before showing the tab content.\n *\n * @param self the `Tab` instance\n */\nconst triggerTabShow = (self: Tab) => {\n const { element, tabContent, content: nextContent, nav } = self;\n const { tab } = (isHTMLElement(nav) && tabPrivate.get(nav)) ||\n // istanbul ignore next @preserve\n { tab: null };\n\n // istanbul ignore else @preserve\n if (tabContent && nextContent && hasClass(nextContent, fadeClass)) {\n const { currentHeight, nextHeight } = tabPrivate.get(element) ||\n // istanbul ignore next @preserve\n { currentHeight: 0, nextHeight: 0 };\n // istanbul ignore else @preserve: vitest won't validate this branch\n if (currentHeight !== nextHeight) {\n // enables height animation\n setTimeout(() => {\n tabContent.style.height = `${nextHeight}px`;\n reflow(tabContent);\n emulateTransitionEnd(tabContent, () => triggerTabEnd(self));\n }, 50);\n } else {\n triggerTabEnd(self);\n }\n } else if (nav) Timer.clear(nav);\n\n shownTabEvent.relatedTarget = tab as HTMLElement | undefined;\n\n dispatchEvent(element, shownTabEvent);\n};\n\n/**\n * Executes before hiding the tab.\n *\n * @param self the `Tab` instance\n */\nconst triggerTabHide = (self: Tab) => {\n const { element, content: nextContent, tabContent, nav } = self;\n const { tab, content } = (nav && tabPrivate.get(nav)) ||\n // istanbul ignore next @preserve\n { tab: null, content: null };\n let currentHeight = 0;\n\n // istanbul ignore else @preserve\n if (tabContent && nextContent && hasClass(nextContent, fadeClass)) {\n [content, nextContent].forEach((c) => {\n // istanbul ignore else @preserve\n if (c) addClass(c, \"overflow-hidden\");\n });\n currentHeight = content\n ? content.scrollHeight\n : /* istanbul ignore next @preserve */ 0;\n }\n\n // update relatedTarget and dispatch event\n showTabEvent.relatedTarget = tab as HTMLElement | undefined;\n hiddenTabEvent.relatedTarget = element as HTMLElement;\n dispatchEvent(element, showTabEvent);\n\n // istanbul ignore if @preserve\n if (showTabEvent.defaultPrevented) return;\n // istanbul ignore else @preserve\n if (nextContent) addClass(nextContent, activeClass);\n // istanbul ignore else @preserve\n if (content) removeClass(content, activeClass);\n\n // istanbul ignore else @preserve\n if (tabContent && nextContent && hasClass(nextContent, fadeClass)) {\n const nextHeight = nextContent.scrollHeight;\n tabPrivate.set(element, {\n currentHeight,\n nextHeight,\n tab: null,\n content: null,\n });\n\n addClass(tabContent, collapsingClass);\n tabContent.style.height = `${currentHeight}px`;\n reflow(tabContent);\n [content, nextContent].forEach((c) => {\n // istanbul ignore else @preserve\n if (c) removeClass(c, \"overflow-hidden\");\n });\n }\n\n if (nextContent && nextContent && hasClass(nextContent, fadeClass)) {\n setTimeout(() => {\n addClass(nextContent, showClass);\n emulateTransitionEnd(nextContent, () => {\n triggerTabShow(self);\n });\n }, 1);\n } else {\n // istanbul ignore else @preserve\n if (nextContent) addClass(nextContent, showClass);\n triggerTabShow(self);\n }\n\n // istanbul ignore else @preserve\n if (tab) dispatchEvent(tab, hiddenTabEvent);\n};\n\n/**\n * Returns the current active tab and its target content.\n *\n * @param self the `Tab` instance\n * @returns the query result\n */\nconst getActiveTab = (\n self: Tab,\n): { tab: HTMLElement | null; content: HTMLElement | null } => {\n const { nav } = self;\n // istanbul ignore next @preserve\n if (!isHTMLElement(nav)) {\n return { tab: null, content: null };\n }\n\n const activeTabs = getElementsByClassName<HTMLElement>(\n activeClass,\n nav,\n );\n let tab: HTMLElement | null = null;\n // istanbul ignore else @preserve\n if (\n activeTabs.length === 1 &&\n !dropdownClasses.some((c) =>\n hasClass(activeTabs[0].parentElement as HTMLElement, c)\n )\n ) {\n [tab] = activeTabs;\n } else if (activeTabs.length > 1) {\n tab = activeTabs[activeTabs.length - 1];\n }\n const content = isHTMLElement(tab) ? getTargetElement(tab) : null;\n return { tab, content };\n};\n\n/**\n * Returns a parent dropdown.\n *\n * @param element the `Tab` element\n * @returns the parent dropdown\n */\nconst getParentDropdown = (element?: HTMLElement) => {\n // istanbul ignore next @preserve\n if (!isHTMLElement(element)) return null;\n const dropdown = closest(element, `.${dropdownClasses.join(\",.\")}`);\n return dropdown\n ? querySelector<HTMLElement>(`.${dropdownClasses[0]}-toggle`, dropdown)\n : null;\n};\n\n// TAB EVENT HANDLER\n// =================\n/**\n * Handles the `click` event listener.\n *\n * @param e the `Event` object\n */\nconst tabClickHandler = (e: MouseEvent<Element>) => {\n const element = closest(e.target, tabSelector);\n const self = element && getTabInstance(element);\n\n // istanbul ignore if @preserve\n if (!self) return;\n e.preventDefault();\n self.show();\n};\n\n// TAB DEFINITION\n// ==============\n/** Creates a new `Tab` instance. */\nexport default class Tab extends BaseComponent {\n static selector = tabSelector;\n static init = tabInitCallback;\n static getInstance = getTabInstance;\n declare element: HTMLElement;\n declare nav: HTMLElement | null;\n declare content: HTMLElement | null;\n declare tabContent: HTMLElement | null;\n declare nextContent: HTMLElement | null;\n declare dropdown: HTMLElement | null;\n\n /** @param target the target element */\n constructor(target: Element | string) {\n super(target);\n\n // initialization element\n const { element } = this;\n const content = getTargetElement(element);\n\n // no point initializing a tab without a corresponding content\n // istanbul ignore else @preserve\n if (!content) return;\n\n const nav = closest<HTMLElement>(element, \".nav\");\n const container = closest<HTMLElement>(\n content as HTMLElement,\n \".tab-content\",\n );\n\n this.nav = nav;\n this.content = content;\n this.tabContent = container;\n\n // event targets\n this.dropdown = getParentDropdown(element);\n\n // show first Tab instance of none is shown\n // suggested on #432\n const { tab } = getActiveTab(this);\n if (nav && !tab) {\n const firstTab = querySelector(tabSelector, nav);\n const firstTabContent = firstTab && getTargetElement(firstTab);\n\n // istanbul ignore else @preserve\n if (firstTabContent) {\n addClass(firstTab, activeClass);\n addClass(firstTabContent, showClass);\n addClass(firstTabContent, activeClass);\n setAttribute(element, ariaSelected, \"true\");\n }\n }\n\n // add event listener\n this._toggleEventListeners(true);\n }\n\n /**\n * Returns component name string.\n */\n get name() {\n return tabComponent;\n }\n\n // TAB PUBLIC METHODS\n // ==================\n /** Shows the tab to the user. */\n show() {\n const { element, content: nextContent, nav, dropdown } = this;\n\n // istanbul ignore else @preserve\n if ((nav && Timer.get(nav)) || hasClass(element, activeClass)) return;\n const { tab, content } = getActiveTab(this);\n\n // istanbul ignore else @preserve\n if (nav && tab) {\n tabPrivate.set(nav, { tab, content, currentHeight: 0, nextHeight: 0 });\n }\n\n // update relatedTarget and dispatch\n hideTabEvent.relatedTarget = element as HTMLElement;\n\n // istanbul ignore if @preserve\n if (!isHTMLElement(tab)) return;\n\n dispatchEvent(tab, hideTabEvent);\n\n // istanbul ignore else @preserve\n if (hideTabEvent.defaultPrevented) return;\n\n addClass(element, activeClass);\n setAttribute(element, ariaSelected, \"true\");\n\n const activeDropdown = isHTMLElement(tab) && getParentDropdown(tab);\n if (activeDropdown && hasClass(activeDropdown, activeClass)) {\n removeClass(activeDropdown, activeClass);\n }\n\n // istanbul ignore else @preserve\n if (nav) {\n const toggleTab = () => {\n // istanbul ignore else @preserve\n if (tab) {\n removeClass(tab, activeClass);\n setAttribute(tab, ariaSelected, \"false\");\n }\n if (dropdown && !hasClass(dropdown, activeClass)) {\n addClass(dropdown, activeClass);\n }\n };\n\n if (\n content &&\n (hasClass(content, fadeClass) ||\n (nextContent && hasClass(nextContent, fadeClass)))\n ) {\n Timer.set(nav, toggleTab, 1);\n } else toggleTab();\n }\n\n // istanbul ignore else @preserve\n if (content) {\n removeClass(content, showClass);\n if (hasClass(content, fadeClass)) {\n emulateTransitionEnd(content, () => triggerTabHide(this));\n } else {\n triggerTabHide(this);\n }\n }\n }\n\n /**\n * Toggles on/off the `click` event listener.\n *\n * @param add when `true`, event listener is added\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n action(this.element, mouseclickEvent, tabClickHandler);\n };\n\n /** Removes the `Tab` component from the target element. */\n dispose() {\n this._toggleEventListeners();\n super.dispose();\n }\n}\n","/** @type {string} */\nconst toastString = \"toast\";\nexport default toastString;\n","/** @type {string} */\nconst toastComponent = \"Toast\";\nexport default toastComponent;\n","/* Native JavaScript for Bootstrap 5 | Toast\n-------------------------------------------- */\nimport {\n addClass,\n createCustomEvent,\n dispatchEvent,\n emulateTransitionEnd,\n focusinEvent,\n focusoutEvent,\n getDocument,\n getInstance,\n hasClass,\n mouseclickEvent,\n mouseenterEvent,\n MouseEvent,\n mouseleaveEvent,\n querySelector,\n querySelectorAll,\n reflow,\n removeClass,\n Timer,\n} from \"@thednp/shorty\";\n\nimport { addListener, removeListener } from \"@thednp/event-listener\";\n\nimport fadeClass from \"~/strings/fadeClass\";\nimport showClass from \"~/strings/showClass\";\nimport dataBsDismiss from \"~/strings/dataBsDismiss\";\nimport dataBsToggle from \"~/strings/dataBsToggle\";\nimport toastString from \"~/strings/toastString\";\nimport toastComponent from \"~/strings/toastComponent\";\nimport getTargetElement from \"~/util/getTargetElement\";\nimport isDisabled from \"~/util/isDisabled\";\nimport BaseComponent from \"./base-component\";\nimport { ToastEvent, ToastOptions } from \"~/interface/toast\";\n\n// TOAST PRIVATE GC\n// ================\nconst toastSelector = `.${toastString}`;\nconst toastDismissSelector = `[${dataBsDismiss}=\"${toastString}\"]`;\nconst toastToggleSelector = `[${dataBsToggle}=\"${toastString}\"]`;\nconst showingClass = \"showing\";\n/** @deprecated */\nconst hideClass = \"hide\";\n\nconst toastDefaults = {\n animation: true,\n autohide: true,\n delay: 5000,\n};\n\n/**\n * Static method which returns an existing `Toast` instance associated\n * to a target `Element`.\n */\nconst getToastInstance = (element: Element) =>\n getInstance<Toast>(element, toastComponent);\n\n/**\n * A `Toast` initialization callback.\n */\nconst toastInitCallback = (element: Element) => new Toast(element);\n\n// TOAST CUSTOM EVENTS\n// ===================\nconst showToastEvent = createCustomEvent<Record<string, never>, ToastEvent>(\n `show.bs.${toastString}`,\n);\nconst shownToastEvent = createCustomEvent<Record<string, never>, ToastEvent>(\n `shown.bs.${toastString}`,\n);\nconst hideToastEvent = createCustomEvent<Record<string, never>, ToastEvent>(\n `hide.bs.${toastString}`,\n);\nconst hiddenToastEvent = createCustomEvent<Record<string, never>, ToastEvent>(\n `hidden.bs.${toastString}`,\n);\n\n// TOAST PRIVATE METHODS\n// =====================\n/**\n * Executes after the toast is shown to the user.\n *\n * @param self the `Toast` instance\n */\nconst showToastComplete = (self: Toast) => {\n const { element, options } = self;\n removeClass(element, showingClass);\n Timer.clear(element, showingClass);\n\n dispatchEvent(element, shownToastEvent);\n // istanbul ignore else @preserve\n if (options.autohide) {\n Timer.set(element, () => self.hide(), options.delay, toastString);\n }\n};\n\n/**\n * Executes after the toast is hidden to the user.\n *\n * @param self the `Toast` instance\n */\nconst hideToastComplete = (self: Toast) => {\n const { element } = self;\n removeClass(element, showingClass);\n removeClass(element, showClass);\n addClass(element, hideClass); // B/C\n Timer.clear(element, toastString);\n dispatchEvent(element, hiddenToastEvent);\n};\n\n/**\n * Executes before hiding the toast.\n *\n * @param self the `Toast` instance\n */\nconst hideToast = (self: Toast) => {\n const { element, options } = self;\n addClass(element, showingClass);\n\n if (options.animation) {\n reflow(element as HTMLElement);\n emulateTransitionEnd(element, () => hideToastComplete(self));\n } else {\n hideToastComplete(self);\n }\n};\n\n/**\n * Executes before showing the toast.\n *\n * @param self the `Toast` instance\n */\nconst showToast = (self: Toast) => {\n const { element, options } = self;\n Timer.set(\n element,\n () => {\n removeClass(element, hideClass); // B/C\n reflow(element as HTMLElement);\n addClass(element, showClass);\n addClass(element, showingClass);\n\n if (options.animation) {\n emulateTransitionEnd(element, () => showToastComplete(self));\n } else {\n showToastComplete(self);\n }\n },\n 17,\n showingClass,\n );\n};\n\n// TOAST EVENT HANDLERS\n// ====================\n/**\n * Handles the `click` event listener for toast.\n *\n * @param e the `Event` object\n */\nfunction toastClickHandler(this: HTMLElement, e: Event) {\n const element = getTargetElement(this);\n const self = element && getToastInstance(element);\n\n // istanbul ignore if @preserve\n if (isDisabled(this)) return;\n // istanbul ignore if @preserve\n if (!self) return;\n // istanbul ignore else @preserve\n if (this.tagName === \"A\") e.preventDefault();\n self.relatedTarget = this;\n self.show();\n}\n\n/**\n * Executes when user interacts with the toast without closing it,\n * usually by hovering or focusing it.\n *\n * @param e the `Toast` instance\n */\nconst interactiveToastHandler = (e: MouseEvent<HTMLElement>) => {\n const element = e.target;\n const self = getToastInstance(element);\n const { type, relatedTarget } = e;\n\n // istanbul ignore if @preserve: a solid filter is required\n if (\n !self || element === relatedTarget ||\n element.contains(relatedTarget as Node)\n ) return;\n\n if ([mouseenterEvent, focusinEvent].includes(type)) {\n Timer.clear(element, toastString);\n } else {\n Timer.set(element, () => self.hide(), self.options.delay, toastString);\n }\n};\n\n// TOAST DEFINITION\n// ================\n/** Creates a new `Toast` instance. */\nexport default class Toast extends BaseComponent {\n static selector = toastSelector;\n static init = toastInitCallback;\n static getInstance = getToastInstance;\n declare element: HTMLElement;\n declare options: ToastOptions;\n declare dismiss: HTMLElement | null;\n declare triggers: HTMLElement[];\n declare relatedTarget: HTMLElement | null;\n\n /**\n * @param target the target `.toast` element\n * @param config the instance options\n */\n constructor(target: Element | string, config?: Partial<ToastOptions>) {\n super(target, config);\n const { element, options } = this;\n\n // set fadeClass, the options.animation will override the markup\n if (options.animation && !hasClass(element, fadeClass)) {\n addClass(element, fadeClass);\n } else if (!options.animation && hasClass(element, fadeClass)) {\n removeClass(element, fadeClass);\n }\n\n // dismiss button\n this.dismiss = querySelector<HTMLElement>(toastDismissSelector, element);\n\n // toast can have multiple triggering elements\n this.triggers = [\n ...querySelectorAll<HTMLElement>(\n toastToggleSelector,\n getDocument(element),\n ),\n ].filter(\n (btn) => getTargetElement(btn) === element,\n );\n\n // add event listener\n this._toggleEventListeners(true);\n }\n /**\n * Returns component name string.\n */\n get name() {\n return toastComponent;\n }\n /**\n * Returns component default options.\n */\n get defaults() {\n return toastDefaults;\n }\n /**\n * Returns *true* when toast is visible.\n */\n get isShown() {\n return hasClass(this.element, showClass);\n }\n\n // TOAST PUBLIC METHODS\n // ====================\n /** Shows the toast. */\n show = () => {\n const { element, isShown } = this;\n\n // istanbul ignore if @preserve\n if (!element || isShown) return;\n\n dispatchEvent(element, showToastEvent);\n if (!showToastEvent.defaultPrevented) showToast(this);\n };\n\n /** Hides the toast. */\n hide = () => {\n const { element, isShown } = this;\n\n // istanbul ignore if @preserve\n if (!element || !isShown) return;\n\n dispatchEvent(element, hideToastEvent);\n if (!hideToastEvent.defaultPrevented) hideToast(this);\n };\n\n /**\n * Toggles on/off the `click` event listener.\n *\n * @param add when `true`, it will add the listener\n */\n _toggleEventListeners = (add?: boolean) => {\n const action = add ? addListener : removeListener;\n const { element, triggers, dismiss, options, hide } = this;\n\n // istanbul ignore else @preserve\n if (dismiss) {\n action(dismiss, mouseclickEvent, hide);\n }\n\n // istanbul ignore else @preserve\n if (options.autohide) {\n [focusinEvent, focusoutEvent, mouseenterEvent, mouseleaveEvent].forEach(\n (e) => action(element, e, interactiveToastHandler),\n );\n }\n // istanbul ignore else @preserve\n if (triggers.length) {\n triggers.forEach((btn) => {\n action(btn, mouseclickEvent, toastClickHandler);\n });\n }\n };\n\n /** Removes the `Toast` component from the target element. */\n dispose() {\n const { element, isShown } = this;\n this._toggleEventListeners();\n Timer.clear(element, toastString);\n\n if (isShown) removeClass(element, showClass);\n\n super.dispose();\n }\n}\n","import { Data, getElementsByTagName, matches } from \"@thednp/shorty\";\n\nimport { addListener } from \"@thednp/event-listener\";\n\nimport Alert from \"../components/alert\";\nimport Button from \"../components/button\";\nimport Carousel from \"../components/carousel\";\nimport Collapse from \"../components/collapse\";\nimport Dropdown from \"../components/dropdown\";\nimport Modal from \"../components/modal\";\nimport Offcanvas from \"../components/offcanvas\";\nimport Popover from \"../components/popover\";\nimport ScrollSpy from \"../components/scrollspy\";\nimport Tab from \"../components/tab\";\nimport Toast from \"../components/toast\";\nimport Tooltip from \"../components/tooltip\";\n\nconst componentsList = new Map<\n string,\n | typeof Alert\n | typeof Button\n | typeof Carousel\n | typeof Collapse\n | typeof Dropdown\n | typeof Modal\n | typeof Offcanvas\n | typeof Popover\n | typeof ScrollSpy\n | typeof Tab\n | typeof Toast\n | typeof Tooltip\n>();\n\ntype Component =\n | Alert\n | Button\n | Carousel\n | Collapse\n | Dropdown\n | Modal\n | Offcanvas\n | Popover\n | ScrollSpy\n | Tab\n | Toast\n | Tooltip;\n\n[\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip,\n].forEach((c) => componentsList.set(c.prototype.name, c));\n\n/**\n * Initialize all matched `Element`s for one component.\n *\n * @param callback\n * @param collection\n */\nconst initComponentDataAPI = (\n callback: (el: Element) => Component,\n collection: HTMLCollectionOf<Element> | Element[],\n) => {\n [...collection].forEach((x) => callback(x));\n};\n\n/**\n * Remove one component from a target container element or all in the page.\n *\n * @param component the component name\n * @param context parent `Node`\n */\nconst removeComponentDataAPI = <T>(component: string, context: ParentNode) => {\n const compData = Data.getAllFor(component) as Map<Element, T>;\n\n if (compData) {\n [...compData].forEach(([element, instance]) => {\n if (context.contains(element)) {\n (instance as T & { dispose: () => void }).dispose();\n }\n });\n }\n};\n\n/**\n * Initialize all BSN components for a target container.\n *\n * @param context parent `Node`\n */\nexport const initCallback = (context?: ParentNode) => {\n const lookUp = context && context.nodeName ? context : document;\n const elemCollection = [...getElementsByTagName<Element>(\"*\", lookUp)];\n\n componentsList.forEach((cs) => {\n const { init, selector } = cs;\n initComponentDataAPI(\n init,\n elemCollection.filter((item) => matches(item, selector)),\n );\n });\n};\n\n/**\n * Remove all BSN components for a target container.\n *\n * @param context parent `Node`\n */\nexport const removeDataAPI = (context?: ParentNode) => {\n const lookUp = context && context.nodeName ? context : document;\n\n componentsList.forEach((comp) => {\n removeComponentDataAPI(comp.prototype.name, lookUp);\n });\n};\n\n// Bulk initialize all components\nif (document.body) initCallback();\nelse {\n addListener(document, \"DOMContentLoaded\", () => initCallback(), {\n once: true,\n });\n}\n"],"names":["Le","Oe","X","Pe","Fe","Be","ct","at","it","ft","gt","vt","Et","yt","wt","At","Ot","zt","It","Qt","je","Zt","on","sn","rn","cn","gn","Jt","Xt","M","R","zn","t","e","ee","Q","n","o","j","K","oe","Qn","Kn","Gn","Zn","_n","v","u","i","E","L","to","P","N","q","G","d","T","se","Z","f","s","ie","ue","so","r","a","l","ao","F","S","uo","p","c","g","A","fo","mo","vo","bo","Eo","O","le","m","ho","yo","de","z","_","I","fe","pe","Ao","b","y","So","w","No","me","k","ve","be","Ee","we","Co","V","H","h","Ae","Se","Do","xo","Vo","Ho","Ne","Wo","Te","Qo","jo","fadeClass","showClass","dataBsDismiss","alertString","alertComponent","isDisabled","target","hasClass","getAttribute","Version","version","BaseComponent","config","element","isElement","isString","querySelector","prevInstance","Data","ObjectKeys","normalizeOptions","prop","alertSelector","alertDismissSelector","getAlertInstance","getInstance","alertInitCallback","Alert","closeAlertEvent","createCustomEvent","closedAlertEvent","alertTransitionEnd","self","dispatchEvent","dismiss","removeClass","emulateTransitionEnd","add","action","addListener","removeListener","close","mouseclickEvent","activeClass","dataBsToggle","buttonString","buttonComponent","buttonSelector","getButtonInstance","buttonInitCallback","Button","setAttribute","ariaPressed","isActive","addClass","dataBsTarget","carouselString","carouselComponent","dataBsParent","dataBsContainer","getTargetElement","targetAttr","doc","getDocument","att","attValue","closest","x","carouselSelector","carouselItem","dataBsSlideTo","dataBsSlide","pausedClass","carouselDefaults","getCarouselInstance","carouselInitCallback","Carousel","startX","currentX","endX","carouselSlideEvent","carouselSlidEvent","carouselTransitionEndHandler","index","direction","slides","options","activeItem","getActiveIndex","orientation","directionClass","Timer","carouselPauseHandler","carouselResumeHandler","carouselIndicatorHandler","newIndex","carouselControlsHandler","carouselKeyHandler","code","querySelectorAll","isElementInScrollRange","RTL","isRTL","keyArrowRight","keyArrowLeft","carouselDragHandler","carouselPointerDownHandler","controls","indicators","el","toggleCarouselTouchHandlers","carouselPointerMoveHandler","carouselPointerUpHandler","activateCarouselIndicator","pointermoveEvent","passiveHandler","pointerupEvent","getElementsByClassName","activeIndex","transitionItem","matches","ar","isPaused","idx","next","eventProperties","ObjectAssign","getElementTransitionDuration","reflow","touch","pause","interval","keyboard","mouseenterEvent","mouseleaveEvent","pointerdownEvent","touchstartEvent","dragstartEvent","arrow","indicator","keydownEvent","isAnimating","clone","collapsingClass","collapseString","collapseComponent","collapseSelector","collapseToggleSelector","collapseDefaults","getCollapseInstance","collapseInitCallback","Collapse","showCollapseEvent","shownCollapseEvent","hideCollapseEvent","hiddenCollapseEvent","expandCollapse","parent","triggers","noop","setElementStyle","btn","ariaExpanded","collapseContent","collapseClickHandler","trigger","isHTMLElement","activeCollapse","activeCollapseInstance","dropdownMenuClasses","dropdownComponent","dropdownMenuClass","isEmptyAnchor","parentAnchor","hasAttribute","dropdownString","dropupString","dropstartString","dropendString","dropdownClasses","dropdownSelector","getDropdownInstance","dropdownInitCallback","Dropdown","dropdownMenuEndClass","verticalClass","horizontalClass","menuFocusTags","dropdownDefaults","showDropdownEvent","shownDropdownEvent","hideDropdownEvent","hiddenDropdownEvent","updatedDropdownEvent","styleDropdown","menu","parentElement","offset","getElementStyle","menuEnd","style","positionClass","dropdownMargin","dropdownPosition","menuWidth","menuHeight","clientWidth","clientHeight","getDocumentElement","targetLeft","targetTop","targetWidth","targetHeight","getBoundingClientRect","leftFullExceed","rightFullExceed","bottomExceed","bottomFullExceed","topExceed","leftExceed","rightExceed","posAjust","margins","getMenuItems","firstElementChild","toggleDropdownDismiss","dropdownDismissHandler","focusEvent","dropdownPreventScroll","keyupEvent","dropdownKeyHandler","getCurrentOpenDropdown","currentParent","type","isForm","mousedownEvent","dropdownClickHandler","keyArrowDown","keyArrowUp","activeElement","open","menuItems","focus","keyEscape","PositionObserver","currentElement","currentInstance","modalString","modalComponent","offcanvasComponent","fixedTopClass","fixedBottomClass","stickyTopClass","positionStickyClass","getFixedItems","resetScrollbar","bd","getDocumentBody","fixedItems","fixed","measureScrollbar","innerWidth","getWindow","setScrollbar","overflow","bodyPad","sbWidth","itemPadValue","itemMValue","offcanvasString","popupContainer","createElement","appendPopup","customContainer","containerIsBody","isNode","lookup","BODY","removePopup","hasPopup","backdropString","modalBackdropClass","offcanvasBackdropClass","modalActiveSelector","offcanvasActiveSelector","overlay","getCurrentOpen","toggleOverlayType","isModal","targetClass","appendOverlay","hasFade","showOverlay","hideOverlay","removeOverlay","isVisible","modalSelector","modalToggleSelector","modalDismissSelector","modalStaticClass","modalDefaults","getModalInstance","modalInitCallback","Modal","showModalEvent","shownModalEvent","hideModalEvent","hiddenModalEvent","setModalScrollbar","scrollbarWidth","scrollHeight","modalHeight","modalScrollHeight","modalOverflow","padStyle","toggleModalDismiss","modalDismissHandler","modalKeyHandler","afterModalHide","relatedTarget","focusElement","toggleFocusTrap","afterModalShow","beforeModalShow","removeAttribute","ariaHidden","ariaModal","beforeModalHide","modalClickHandler","currentTarget","isStatic","modalDialog","backdrop","selectedText","targetInsideDialog","staticTransitionEnd","duration","overlayDelay","currentOpen","that","callback","offcanvasSelector","offcanvasToggleSelector","offcanvasDismissSelector","offcanvasTogglingClass","offcanvasDefaults","getOffcanvasInstance","offcanvasInitCallback","Offcanvas","showOffcanvasEvent","shownOffcanvasEvent","hideOffcanvasEvent","hiddenOffcanvasEvent","setOffCanvasScrollbar","toggleOffCanvasDismiss","offcanvasKeyDismissHandler","offcanvasDismissHandler","beforeOffcanvasShow","showOffcanvasComplete","beforeOffcanvasHide","hideOffcanvasComplete","offcanvasTriggerHandler","offCanvasDismiss","selection","visibleTrigger","isOpen","popoverString","popoverComponent","tooltipString","getTipTemplate","tipType","isTooltip","bodyClass","header","body","tipClassPositions","styleTip","tipClasses","tooltip","container","offsetParent","scrollLeft","scrollTop","getNodeScroll","tipWidth","tipHeight","htmlcw","htmlch","htmlow","placement","parentCWidth","parentOWidth","fixedParent","leftBoundry","rightBoundry","observerEntry","elemWidth","elemHeight","elemRectLeft","elemRectRight","elemRectTop","elemOffsetLeft","elemOffsetTop","getRectRelativeToOffsetParent","topPosition","bottomPosition","leftPosition","rightPosition","arrowTop","arrowLeft","arrowRight","arrowWidth","arrowHeight","arrowAdjust","horizontals","verticals","updatedTooltipEvent","toLowerCase","tooltipDefaults","dataOriginalTitle","tooltipComponent","setHtml","content","sanitizeFn","dirty","isFunction","tempDocument","isNodeList","isArray","createTip","id","title","template","animation","customClass","dismissible","btnClose","tipString","tipPositions","titleParts","contentParts","placementClass","tooltipTemplate","htmlMarkup","tooltipHeader","tooltipBody","tempTitle","tempContent","tempBtn","getElementContainer","majorBlockTags","containers","parentNode","getParentNode","isShadowRoot","isTableElement","tooltipSelector","titleAttr","getTooltipInstance","tooltipInitCallback","Tooltip","removeTooltip","ariaDescribedBy","hasTip","disposeTooltipComplete","toggleTooltipTitle","toggleTooltipAction","tooltipShownAction","shownTooltipEvent","tooltipHiddenAction","hiddenTooltipEvent","toggleTooltipOpenHandlers","parentModal","parentOffcanvas","titleAtt","tipComponent","elem","getUID","position","outTimer","showTooltipEvent","delay","hideTooltipEvent","enabled","tr","mousehoverEvent","focusinEvent","focusoutEvent","isApple","popoverSelector","popoverDefaults","getPopoverInstance","popoverInitCallback","Popover","scrollspyString","scrollspyComponent","scrollspySelector","scrollSpyAnchorSelector","scrollspyDefaults","getScrollSpyInstance","scrollspyInitCallback","ScrollSpy","activateScrollSpy","updateSpyTargets","_itemsLength","_observables","links","getElementsByTagName","link","hash","targetItem","clear","item","activate","parentItem","parentLink","getOffset","scrollTarget","spyTarget","_activeItem","entries","newActiveItem","firstOffset","offsetTop","nextTarget","nextOffsetTop","getElementById","_observer","_scrollTo","tabString","tabComponent","tabSelector","getTabInstance","tabInitCallback","Tab","showTabEvent","shownTabEvent","hideTabEvent","hiddenTabEvent","tabPrivate","triggerTabEnd","tabContent","nav","triggerTabShow","nextContent","tab","currentHeight","nextHeight","triggerTabHide","getActiveTab","activeTabs","getParentDropdown","dropdown","tabClickHandler","firstTab","firstTabContent","ariaSelected","activeDropdown","toggleTab","toastString","toastComponent","toastSelector","toastDismissSelector","toastToggleSelector","showingClass","hideClass","toastDefaults","getToastInstance","toastInitCallback","Toast","showToastEvent","shownToastEvent","hideToastEvent","hiddenToastEvent","showToastComplete","hideToastComplete","hideToast","showToast","toastClickHandler","interactiveToastHandler","isShown","hide","componentsList","initComponentDataAPI","collection","removeComponentDataAPI","component","context","compData","instance","initCallback","lookUp","elemCollection","cs","init","selector","removeDataAPI","comp"],"mappings":"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","x_google_ignoreList":[0,1,27]}
|