‘, title: “”, trigger: “hover focus” }, ls = { allowList: “object”, animation: “boolean”, boundary: “(string|element)”, container: “(string|element|boolean)”, customClass: “(string|function)”, delay: “(number|object)”, fallbackPlacements: “array”, html: “boolean”, offset: “(array|string|function)”, placement: “(string|function)”, popperConfig: “(null|object|function)”, sanitize: “boolean”, sanitizeFn: “(null|function)”, selector: “(string|boolean)”, template: “string”, title: “(string|element|function)”, trigger: “string” }; class cs extends W { constructor(t, e) { if (void 0 === vi) throw new TypeError(“Bootstrap’s tooltips require Popper (https://popper.js.org)”); super(t, e), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle() } static get Default() { return as } static get DefaultType() { return ls } static get NAME() { return “tooltip” } enable() { this._isEnabled = !0 } disable() { this._isEnabled = !1 } toggleEnabled() { this._isEnabled = !this._isEnabled } toggle() { this._isEnabled && (this._activeTrigger.click = !this._activeTrigger.click, this._isShown() ? this._leave() : this._enter()) } dispose() { clearTimeout(this._timeout), N.off(this._element.closest(is), ns, this._hideModalHandler), this._element.getAttribute(“data-bs-original-title”) && this._element.setAttribute(“title”, this._element.getAttribute(“data-bs-original-title”)), this._disposePopper(), super.dispose() } show() { if (“none” === this._element.style.display) throw new Error(“Please use show on visible elements”); if (!this._isWithContent() || !this._isEnabled) return; const t = N.trigger(this._element, this.constructor.eventName(“show”)), e = (c(this._element) || this._element.ownerDocument.documentElement).contains(this._element); if (t.defaultPrevented || !e) return; this._disposePopper(); const i = this._getTipElement(); this._element.setAttribute(“aria-describedby”, i.getAttribute(“id”)); const { container: n } = this._config; if (this._element.ownerDocument.documentElement.contains(this.tip) || (n.append(i), N.trigger(this._element, this.constructor.eventName(“inserted”))), this._popper = this._createPopper(i), i.classList.add(es), “ontouchstart” in document.documentElement) for (const t of [].concat(…document.body.children)) N.on(t, “mouseover”, h); this._queueCallback((() => { N.trigger(this._element, this.constructor.eventName(“shown”)), !1 === this._isHovered && this._leave(), this._isHovered = !1 }), this.tip, this._isAnimated()) } hide() { if (this._isShown() && !N.trigger(this._element, this.constructor.eventName(“hide”)).defaultPrevented) { if (this._getTipElement().classList.remove(es), “ontouchstart” in document.documentElement) for (const t of [].concat(…document.body.children)) N.off(t, “mouseover”, h); this._activeTrigger.click = !1, this._activeTrigger[os] = !1, this._activeTrigger[ss] = !1, this._isHovered = null, this._queueCallback((() => { this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute(“aria-describedby”), N.trigger(this._element, this.constructor.eventName(“hidden”))) }), this.tip, this._isAnimated()) } } update() { this._popper && this._popper.update() } _isWithContent() { return Boolean(this._getTitle()) } _getTipElement() { return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip } _createTipElement(t) { const e = this._getTemplateFactory(t).toHtml(); if (!e) return null; e.classList.remove(ts, es), e.classList.add(`bs-${this.constructor.NAME}-auto`); const i = (t => { do { t += Math.floor(1e6 * Math.random()) } while (document.getElementById(t)); return t })(this.constructor.NAME).toString(); return e.setAttribute(“id”, i), this._isAnimated() && e.classList.add(ts), e } setContent(t) { this._newContent = t, this._isShown() && (this._disposePopper(), this.show()) } _getTemplateFactory(t) { return this._templateFactory ? this._templateFactory.changeContent(t) : this._templateFactory = new Jn({ …this._config, content: t, extraClass: this._resolvePossibleFunction(this._config.customClass) }), this._templateFactory } _getContentForTemplate() { return { “.tooltip-inner”: this._getTitle() } } _getTitle() { return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute(“data-bs-original-title”) } _initializeOnDelegatedTarget(t) { return this.constructor.getOrCreateInstance(t.delegateTarget, this._getDelegateConfig()) } _isAnimated() { return this._config.animation || this.tip && this.tip.classList.contains(ts) } _isShown() { return this.tip && this.tip.classList.contains(es) } _createPopper(t) { const e = g(this._config.placement, [this, t, this._element]), i = rs[e.toUpperCase()]; return bi(this._element, t, this._getPopperConfig(i)) } _getOffset() { const { offset: t } = this._config; return “string” == typeof t ? t.split(“,”).map((t => Number.parseInt(t, 10))) : “function” == typeof t ? e => t(e, this._element) : t } _resolvePossibleFunction(t) { return g(t, [this._element]) } _getPopperConfig(t) { const e = { placement: t, modifiers: [{ name: “flip”, options: { fallbackPlacements: this._config.fallbackPlacements } }, { name: “offset”, options: { offset: this._getOffset() } }, { name: “preventOverflow”, options: { boundary: this._config.boundary } }, { name: “arrow”, options: { element: `.${this.constructor.NAME}-arrow` } }, { name: “preSetPlacement”, enabled: !0, phase: “beforeMain”, fn: t => { this._getTipElement().setAttribute(“data-popper-placement”, t.state.placement) } }] }; return { …e, …g(this._config.popperConfig, [e]) } } _setListeners() { const t = this._config.trigger.split(” “); for (const e of t) if (“click” === e) N.on(this._element, this.constructor.eventName(“click”), this._config.selector, (t => { this._initializeOnDelegatedTarget(t).toggle() })); else if (“manual” !== e) { const t = e === ss ? this.constructor.eventName(“mouseenter”) : this.constructor.eventName(“focusin”), i = e === ss ? this.constructor.eventName(“mouseleave”) : this.constructor.eventName(“focusout”); N.on(this._element, t, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); e._activeTrigger[“focusin” === t.type ? os : ss] = !0, e._enter() })), N.on(this._element, i, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); e._activeTrigger[“focusout” === t.type ? os : ss] = e._element.contains(t.relatedTarget), e._leave() })) } this._hideModalHandler = () => { this._element && this.hide() }, N.on(this._element.closest(is), ns, this._hideModalHandler) } _fixTitle() { const t = this._element.getAttribute(“title”); t && (this._element.getAttribute(“aria-label”) || this._element.textContent.trim() || this._element.setAttribute(“aria-label”, t), this._element.setAttribute(“data-bs-original-title”, t), this._element.removeAttribute(“title”)) } _enter() { this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout((() => { this._isHovered && this.show() }), this._config.delay.show)) } _leave() { this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout((() => { this._isHovered || this.hide() }), this._config.delay.hide)) } _setTimeout(t, e) { clearTimeout(this._timeout), this._timeout = setTimeout(t, e) } _isWithActiveTrigger() { return Object.values(this._activeTrigger).includes(!0) } _getConfig(t) { const e = F.getDataAttributes(this._element); for (const t of Object.keys(e)) Zn.has(t) && delete e[t]; return t = { …e, …”object” == typeof t && t ? t : {} }, t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } _configAfterMerge(t) { return t.container = !1 === t.container ? document.body : r(t.container), “number” == typeof t.delay && (t.delay = { show: t.delay, hide: t.delay }), “number” == typeof t.title && (t.title = t.title.toString()), “number” == typeof t.content && (t.content = t.content.toString()), t } _getDelegateConfig() { const t = {}; for (const [e, i] of Object.entries(this._config)) this.constructor.Default[e] !== i && (t[e] = i); return t.selector = !1, t.trigger = “manual”, t } _disposePopper() { this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null) } static jQueryInterface(t) { return this.each((function () { const e = cs.getOrCreateInstance(this, t); if (“string” == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named “${t}”`); e[t]() } })) } } m(cs); const hs = { …cs.Default, content: “”, offset: [0, 8], placement: “right”, template: ”, trigger: “click” }, ds = { …cs.DefaultType, content: “(null|string|element|function)” }; class us extends cs { static get Default() { return hs } static get DefaultType() { return ds } static get NAME() { return “popover” } _isWithContent() { return this._getTitle() || this._getContent() } _getContentForTemplate() { return { “.popover-header”: this._getTitle(), “.popover-body”: this._getContent() } } _getContent() { return this._resolvePossibleFunction(this._config.content) } static jQueryInterface(t) { return this.each((function () { const e = us.getOrCreateInstance(this, t); if (“string” == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named “${t}”`); e[t]() } })) } } m(us); const fs = “.bs.scrollspy”, ps = `activate${fs}`, ms = `click${fs}`, gs = `load${fs}.data-api`, _s = “active”, bs = “[href]”, vs = “.nav-link”, ys = `${vs}, .nav-item > ${vs}, .list-group-item`, ws = { offset: null, rootMargin: “0px 0px -25%”, smoothScroll: !1, target: null, threshold: [.1, .5, 1] }, As = { offset: “(number|null)”, rootMargin: “string”, smoothScroll: “boolean”, target: “element”, threshold: “array” }; class Es extends W { constructor(t, e) { super(t, e), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = “visible” === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }, this.refresh() } static get Default() { return ws } static get DefaultType() { return As } static get NAME() { return “scrollspy” } refresh() { this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver(); for (const t of this._observableSections.values()) this._observer.observe(t) } dispose() { this._observer.disconnect(), super.dispose() } _configAfterMerge(t) { return t.target = r(t.target) || document.body, t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin, “string” == typeof t.threshold && (t.threshold = t.threshold.split(“,”).map((t => Number.parseFloat(t)))), t } _maybeEnableSmoothScroll() { this._config.smoothScroll && (N.off(this._config.target, ms), N.on(this._config.target, ms, bs, (t => { const e = this._observableSections.get(t.target.hash); if (e) { t.preventDefault(); const i = this._rootElement || window, n = e.offsetTop – this._element.offsetTop; if (i.scrollTo) return void i.scrollTo({ top: n, behavior: “smooth” }); i.scrollTop = n } }))) } _getNewObserver() { const t = { root: this._rootElement, threshold: this._config.threshold, rootMargin: this._config.rootMargin }; return new IntersectionObserver((t => this._observerCallback(t)), t) } _observerCallback(t) { const e = t => this._targetLinks.get(`#${t.target.id}`), i = t => { this._previousScrollData.visibleEntryTop = t.target.offsetTop, this._process(e(t)) }, n = (this._rootElement || document.documentElement).scrollTop, s = n >= this._previousScrollData.parentScrollTop; this._previousScrollData.parentScrollTop = n; for (const o of t) { if (!o.isIntersecting) { this._activeTarget = null, this._clearActiveClass(e(o)); continue } const t = o.target.offsetTop >= this._previousScrollData.visibleEntryTop; if (s && t) { if (i(o), !n) return } else s || t || i(o) } } _initializeTargetsAndObservables() { this._targetLinks = new Map, this._observableSections = new Map; const t = z.find(bs, this._config.target); for (const e of t) { if (!e.hash || l(e)) continue; const t = z.findOne(decodeURI(e.hash), this._element); a(t) && (this._targetLinks.set(decodeURI(e.hash), e), this._observableSections.set(e.hash, t)) } } _process(t) { this._activeTarget !== t && (this._clearActiveClass(this._config.target), this._activeTarget = t, t.classList.add(_s), this._activateParents(t), N.trigger(this._element, ps, { relatedTarget: t })) } _activateParents(t) { if (t.classList.contains(“dropdown-item”)) z.findOne(“.dropdown-toggle”, t.closest(“.dropdown”)).classList.add(_s); else for (const e of z.parents(t, “.nav, .list-group”)) for (const t of z.prev(e, ys)) t.classList.add(_s) } _clearActiveClass(t) { t.classList.remove(_s); const e = z.find(`${bs}.${_s}`, t); for (const t of e) t.classList.remove(_s) } static jQueryInterface(t) { return this.each((function () { const e = Es.getOrCreateInstance(this, t); if (“string” == typeof t) { if (void 0 === e[t] || t.startsWith(“_”) || “constructor” === t) throw new TypeError(`No method named “${t}”`); e[t]() } })) } } N.on(window, gs, (() => { for (const t of z.find(‘[data-bs-spy=”scroll”]’)) Es.getOrCreateInstance(t) })), m(Es); const Ts = “.bs.tab”, Cs = `hide${Ts}`, Os = `hidden${Ts}`, xs = `show${Ts}`, ks = `shown${Ts}`, Ls = `click${Ts}`, Ss = `keydown${Ts}`, Ds = `load${Ts}`, $s = “ArrowLeft”, Is = “ArrowRight”, Ns = “ArrowUp”, Ps = “ArrowDown”, Ms = “Home”, js = “End”, Fs = “active”, Hs = “fade”, Ws = “show”, Bs = “:not(.dropdown-toggle)”, zs = ‘[data-bs-toggle=”tab”], [data-bs-toggle=”pill”], [data-bs-toggle=”list”]’, Rs = `.nav-link${Bs}, .list-group-item${Bs}, [role=”tab”]${Bs}, ${zs}`, qs = `.${Fs}[data-bs-toggle=”tab”], .${Fs}[data-bs-toggle=”pill”], .${Fs}[data-bs-toggle=”list”]`; class Vs extends W { constructor(t) { super(t), this._parent = this._element.closest(‘.list-group, .nav, [role=”tablist”]’), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), N.on(this._element, Ss, (t => this._keydown(t)))) } static get NAME() { return “tab” } show() { const t = this._element; if (this._elemIsActive(t)) return; const e = this._getActiveElem(), i = e ? N.trigger(e, Cs, { relatedTarget: t }) : null; N.trigger(t, xs, { relatedTarget: e }).defaultPrevented || i && i.defaultPrevented || (this._deactivate(e, t), this._activate(t, e)) } _activate(t, e) { t && (t.classList.add(Fs), this._activate(z.getElementFromSelector(t)), this._queueCallback((() => { “tab” === t.getAttribute(“role”) ? (t.removeAttribute(“tabindex”), t.setAttribute(“aria-selected”, !0), this._toggleDropDown(t, !0), N.trigger(t, ks, { relatedTarget: e })) : t.classList.add(Ws) }), t, t.classList.contains(Hs))) } _deactivate(t, e) { t && (t.classList.remove(Fs), t.blur(), this._deactivate(z.getElementFromSelector(t)), this._queueCallback((() => { “tab” === t.getAttribute(“role”) ? (t.setAttribute(“aria-selected”, !1), t.setAttribute(“tabindex”, “-1”), this._toggleDropDown(t, !1), N.trigger(t, Os, { relatedTarget: e })) : t.classList.remove(Ws) }), t, t.classList.contains(Hs))) } _keydown(t) { if (![$s, Is, Ns, Ps, Ms, js].includes(t.key)) return; t.stopPropagation(), t.preventDefault(); const e = this._getChildren().filter((t => !l(t))); let i; if ([Ms, js].includes(t.key)) i = e[t.key === Ms ? 0 : e.length – 1]; else { const n = [Is, Ps].includes(t.key); i = b(e, t.target, n, !0) } i && (i.focus({ preventScroll: !0 }), Vs.getOrCreateInstance(i).show()) } _getChildren() { return z.find(Rs, this._parent) } _getActiveElem() { return this._getChildren().find((t => this._elemIsActive(t))) || null } _setInitialAttributes(t, e) { this._setAttributeIfNotExists(t, “role”, “tablist”); for (const t of e) this._setInitialAttributesOnChild(t) } _setInitialAttributesOnChild(t) { t = this._getInnerElement(t); const e = this._elemIsActive(t), i = this._getOuterElement(t); t.setAttribute(“aria-selected”, e), i !== t && this._setAttributeIfNotExists(i, “role”, “presentation”), e || t.setAttribute(“tabindex”, “-1”), this._setAttributeIfNotExists(t, “role”, “tab”), this._setInitialAttributesOnTargetPanel(t) } _setInitialAttributesOnTargetPanel(t) { const e = z.getElementFromSelector(t); e && (this._setAttributeIfNotExists(e, “role”, “tabpanel”), t.id && this._setAttributeIfNotExists(e, “aria-labelledby”, `${t.id}`)) } _toggleDropDown(t, e) { const i = this._getOuterElement(t); if (!i.classList.contains(“dropdown”)) return; const n = (t, n) => { const s = z.findOne(t, i); s && s.classList.toggle(n, e) }; n(“.dropdown-toggle”, Fs), n(“.dropdown-menu”, Ws), i.setAttribute(“aria-expanded”, e) } _setAttributeIfNotExists(t, e, i) { t.hasAttribute(e) || t.setAttribute(e, i) } _elemIsActive(t) { return t.classList.contains(Fs) } _getInnerElement(t) { return t.matches(Rs) ? t : z.findOne(Rs, t) } _getOuterElement(t) { return t.closest(“.nav-item, .list-group-item”) || t } static jQueryInterface(t) { return this.each((function () { const e = Vs.getOrCreateInstance(this); if (“string” == typeof t) { if (void 0 === e[t] || t.startsWith(“_”) || “constructor” === t) throw new TypeError(`No method named “${t}”`); e[t]() } })) } } N.on(document, Ls, zs, (function (t) { [“A”, “AREA”].includes(this.tagName) && t.preventDefault(), l(this) || Vs.getOrCreateInstance(this).show() })), N.on(window, Ds, (() => { for (const t of z.find(qs)) Vs.getOrCreateInstance(t) })), m(Vs); const Ks = “.bs.toast”, Qs = `mouseover${Ks}`, Xs = `mouseout${Ks}`, Ys = `focusin${Ks}`, Us = `focusout${Ks}`, Gs = `hide${Ks}`, Js = `hidden${Ks}`, Zs = `show${Ks}`, to = `shown${Ks}`, eo = “hide”, io = “show”, no = “showing”, so = { animation: “boolean”, autohide: “boolean”, delay: “number” }, oo = { animation: !0, autohide: !0, delay: 5e3 }; class ro extends W { constructor(t, e) { super(t, e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners() } static get Default() { return oo } static get DefaultType() { return so } static get NAME() { return “toast” } show() { N.trigger(this._element, Zs).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add(“fade”), this._element.classList.remove(eo), d(this._element), this._element.classList.add(io, no), this._queueCallback((() => { this._element.classList.remove(no), N.trigger(this._element, to), this._maybeScheduleHide() }), this._element, this._config.animation)) } hide() { this.isShown() && (N.trigger(this._element, Gs).defaultPrevented || (this._element.classList.add(no), this._queueCallback((() => { this._element.classList.add(eo), this._element.classList.remove(no, io), N.trigger(this._element, Js) }), this._element, this._config.animation))) } dispose() { this._clearTimeout(), this.isShown() && this._element.classList.remove(io), super.dispose() } isShown() { return this._element.classList.contains(io) } _maybeScheduleHide() { this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout((() => { this.hide() }), this._config.delay))) } _onInteraction(t, e) { switch (t.type) { case “mouseover”: case “mouseout”: this._hasMouseInteraction = e; break; case “focusin”: case “focusout”: this._hasKeyboardInteraction = e }if (e) return void this._clearTimeout(); const i = t.relatedTarget; this._element === i || this._element.contains(i) || this._maybeScheduleHide() } _setListeners() { N.on(this._element, Qs, (t => this._onInteraction(t, !0))), N.on(this._element, Xs, (t => this._onInteraction(t, !1))), N.on(this._element, Ys, (t => this._onInteraction(t, !0))), N.on(this._element, Us, (t => this._onInteraction(t, !1))) } _clearTimeout() { clearTimeout(this._timeout), this._timeout = null } static jQueryInterface(t) { return this.each((function () { const e = ro.getOrCreateInstance(this, t); if (“string” == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named “${t}”`); e[t](this) } })) } } return R(ro), m(ro), { Alert: Q, Button: Y, Carousel: xt, Collapse: Bt, Dropdown: qi, Modal: On, Offcanvas: qn, Popover: us, ScrollSpy: Es, Tab: Vs, Toast: ro, Tooltip: cs } }));