Spaces:
Paused
Paused
/*! | |
* Bootstrap v5.1.3 (https://getbootstrap.com/) | |
* Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) | |
*/ | |
import * as Popper from "@popperjs/core"; | |
const MAX_UID = 1e6, | |
MILLISECONDS_MULTIPLIER = 1e3, | |
TRANSITION_END = "transitionend", | |
toType = (e) => | |
null == e | |
? `${e}` | |
: {}.toString | |
.call(e) | |
.match(/\s([a-z]+)/i)[1] | |
.toLowerCase(), | |
getUID = (e) => { | |
do { | |
e += Math.floor(1e6 * Math.random()); | |
} while (document.getElementById(e)); | |
return e; | |
}, | |
getSelector = (e) => { | |
let t = e.getAttribute("data-bs-target"); | |
if (!t || "#" === t) { | |
let i = e.getAttribute("href"); | |
if (!i || (!i.includes("#") && !i.startsWith("."))) return null; | |
i.includes("#") && !i.startsWith("#") && (i = `#${i.split("#")[1]}`), | |
(t = i && "#" !== i ? i.trim() : null); | |
} | |
return t; | |
}, | |
getSelectorFromElement = (e) => { | |
const t = getSelector(e); | |
return t && document.querySelector(t) ? t : null; | |
}, | |
getElementFromSelector = (e) => { | |
const t = getSelector(e); | |
return t ? document.querySelector(t) : null; | |
}, | |
getTransitionDurationFromElement = (e) => { | |
if (!e) return 0; | |
let { transitionDuration: t, transitionDelay: i } = | |
window.getComputedStyle(e); | |
const n = Number.parseFloat(t), | |
s = Number.parseFloat(i); | |
return n || s | |
? ((t = t.split(",")[0]), | |
(i = i.split(",")[0]), | |
1e3 * (Number.parseFloat(t) + Number.parseFloat(i))) | |
: 0; | |
}, | |
triggerTransitionEnd = (e) => { | |
e.dispatchEvent(new Event(TRANSITION_END)); | |
}, | |
isElement = (e) => | |
!(!e || "object" != typeof e) && | |
(void 0 !== e.jquery && (e = e[0]), void 0 !== e.nodeType), | |
getElement = (e) => | |
isElement(e) | |
? e.jquery | |
? e[0] | |
: e | |
: "string" == typeof e && e.length > 0 | |
? document.querySelector(e) | |
: null, | |
typeCheckConfig = (e, t, i) => { | |
Object.keys(i).forEach((n) => { | |
const s = i[n], | |
o = t[n], | |
r = | |
o && isElement(o) | |
? "element" | |
: null == (a = o) | |
? `${a}` | |
: {}.toString | |
.call(a) | |
.match(/\s([a-z]+)/i)[1] | |
.toLowerCase(); | |
var a; | |
if (!new RegExp(s).test(r)) | |
throw new TypeError( | |
`${e.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`, | |
); | |
}); | |
}, | |
isVisible = (e) => | |
!(!isElement(e) || 0 === e.getClientRects().length) && | |
"visible" === getComputedStyle(e).getPropertyValue("visibility"), | |
isDisabled = (e) => | |
!e || | |
e.nodeType !== Node.ELEMENT_NODE || | |
!!e.classList.contains("disabled") || | |
(void 0 !== e.disabled | |
? e.disabled | |
: e.hasAttribute("disabled") && "false" !== e.getAttribute("disabled")), | |
findShadowRoot = (e) => { | |
if (!document.documentElement.attachShadow) return null; | |
if ("function" == typeof e.getRootNode) { | |
const t = e.getRootNode(); | |
return t instanceof ShadowRoot ? t : null; | |
} | |
return e instanceof ShadowRoot | |
? e | |
: e.parentNode | |
? findShadowRoot(e.parentNode) | |
: null; | |
}, | |
noop = () => {}, | |
reflow = (e) => { | |
e.offsetHeight; | |
}, | |
getjQuery = () => { | |
const { jQuery: e } = window; | |
return e && !document.body.hasAttribute("data-bs-no-jquery") ? e : null; | |
}, | |
DOMContentLoadedCallbacks = [], | |
onDOMContentLoaded = (e) => { | |
"loading" === document.readyState | |
? (DOMContentLoadedCallbacks.length || | |
document.addEventListener("DOMContentLoaded", () => { | |
DOMContentLoadedCallbacks.forEach((e) => e()); | |
}), | |
DOMContentLoadedCallbacks.push(e)) | |
: e(); | |
}, | |
isRTL = () => "rtl" === document.documentElement.dir, | |
defineJQueryPlugin = (e) => { | |
var t; | |
(t = () => { | |
const t = getjQuery(); | |
if (t) { | |
const i = e.NAME, | |
n = t.fn[i]; | |
(t.fn[i] = e.jQueryInterface), | |
(t.fn[i].Constructor = e), | |
(t.fn[i].noConflict = () => ((t.fn[i] = n), e.jQueryInterface)); | |
} | |
}), | |
"loading" === document.readyState | |
? (DOMContentLoadedCallbacks.length || | |
document.addEventListener("DOMContentLoaded", () => { | |
DOMContentLoadedCallbacks.forEach((e) => e()); | |
}), | |
DOMContentLoadedCallbacks.push(t)) | |
: t(); | |
}, | |
execute = (e) => { | |
"function" == typeof e && e(); | |
}, | |
executeAfterTransition = (e, t, i = !0) => { | |
if (!i) return void execute(e); | |
const n = getTransitionDurationFromElement(t) + 5; | |
let s = !1; | |
const o = ({ target: i }) => { | |
i === t && | |
((s = !0), t.removeEventListener(TRANSITION_END, o), execute(e)); | |
}; | |
t.addEventListener(TRANSITION_END, o), | |
setTimeout(() => { | |
s || triggerTransitionEnd(t); | |
}, n); | |
}, | |
getNextActiveElement = (e, t, i, n) => { | |
let s = e.indexOf(t); | |
if (-1 === s) return e[!i && n ? e.length - 1 : 0]; | |
const o = e.length; | |
return ( | |
(s += i ? 1 : -1), | |
n && (s = (s + o) % o), | |
e[Math.max(0, Math.min(s, o - 1))] | |
); | |
}, | |
namespaceRegex = /[^.]*(?=\..*)\.|.*/, | |
stripNameRegex = /\..*/, | |
stripUidRegex = /::\d+$/, | |
eventRegistry = {}; | |
let uidEvent = 1; | |
const customEvents = { mouseenter: "mouseover", mouseleave: "mouseout" }, | |
customEventsRegex = /^(mouseenter|mouseleave)/i, | |
nativeEvents = new Set([ | |
"click", | |
"dblclick", | |
"mouseup", | |
"mousedown", | |
"contextmenu", | |
"mousewheel", | |
"DOMMouseScroll", | |
"mouseover", | |
"mouseout", | |
"mousemove", | |
"selectstart", | |
"selectend", | |
"keydown", | |
"keypress", | |
"keyup", | |
"orientationchange", | |
"touchstart", | |
"touchmove", | |
"touchend", | |
"touchcancel", | |
"pointerdown", | |
"pointermove", | |
"pointerup", | |
"pointerleave", | |
"pointercancel", | |
"gesturestart", | |
"gesturechange", | |
"gestureend", | |
"focus", | |
"blur", | |
"change", | |
"reset", | |
"select", | |
"submit", | |
"focusin", | |
"focusout", | |
"load", | |
"unload", | |
"beforeunload", | |
"resize", | |
"move", | |
"DOMContentLoaded", | |
"readystatechange", | |
"error", | |
"abort", | |
"scroll", | |
]); | |
function getUidEvent(e, t) { | |
return (t && `${t}::${uidEvent++}`) || e.uidEvent || uidEvent++; | |
} | |
function getEvent(e) { | |
const t = getUidEvent(e); | |
return ( | |
(e.uidEvent = t), | |
(eventRegistry[t] = eventRegistry[t] || {}), | |
eventRegistry[t] | |
); | |
} | |
function bootstrapHandler(e, t) { | |
return function i(n) { | |
return ( | |
(n.delegateTarget = e), | |
i.oneOff && EventHandler.off(e, n.type, t), | |
t.apply(e, [n]) | |
); | |
}; | |
} | |
function bootstrapDelegationHandler(e, t, i) { | |
return function n(s) { | |
const o = e.querySelectorAll(t); | |
for (let { target: r } = s; r && r !== this; r = r.parentNode) | |
for (let a = o.length; a--; ) | |
if (o[a] === r) | |
return ( | |
(s.delegateTarget = r), | |
n.oneOff && EventHandler.off(e, s.type, t, i), | |
i.apply(r, [s]) | |
); | |
return null; | |
}; | |
} | |
function findHandler(e, t, i = null) { | |
const n = Object.keys(e); | |
for (let s = 0, o = n.length; s < o; s++) { | |
const o = e[n[s]]; | |
if (o.originalHandler === t && o.delegationSelector === i) return o; | |
} | |
return null; | |
} | |
function normalizeParams(e, t, i) { | |
const n = "string" == typeof t, | |
s = n ? i : t; | |
let o = getTypeEvent(e); | |
return nativeEvents.has(o) || (o = e), [n, s, o]; | |
} | |
function addHandler(e, t, i, n, s) { | |
if ("string" != typeof t || !e) return; | |
if ((i || ((i = n), (n = null)), customEventsRegex.test(t))) { | |
const e = (e) => | |
function (t) { | |
if ( | |
!t.relatedTarget || | |
(t.relatedTarget !== t.delegateTarget && | |
!t.delegateTarget.contains(t.relatedTarget)) | |
) | |
return e.call(this, t); | |
}; | |
n ? (n = e(n)) : (i = e(i)); | |
} | |
const [o, r, a] = normalizeParams(t, i, n), | |
l = getEvent(e), | |
c = l[a] || (l[a] = {}), | |
E = findHandler(c, r, o ? i : null); | |
if (E) return void (E.oneOff = E.oneOff && s); | |
const _ = getUidEvent(r, t.replace(namespaceRegex, "")), | |
h = o ? bootstrapDelegationHandler(e, i, n) : bootstrapHandler(e, i); | |
(h.delegationSelector = o ? i : null), | |
(h.originalHandler = r), | |
(h.oneOff = s), | |
(h.uidEvent = _), | |
(c[_] = h), | |
e.addEventListener(a, h, o); | |
} | |
function removeHandler(e, t, i, n, s) { | |
const o = findHandler(t[i], n, s); | |
o && (e.removeEventListener(i, o, Boolean(s)), delete t[i][o.uidEvent]); | |
} | |
function removeNamespacedHandlers(e, t, i, n) { | |
const s = t[i] || {}; | |
Object.keys(s).forEach((o) => { | |
if (o.includes(n)) { | |
const n = s[o]; | |
removeHandler(e, t, i, n.originalHandler, n.delegationSelector); | |
} | |
}); | |
} | |
function getTypeEvent(e) { | |
return (e = e.replace(stripNameRegex, "")), customEvents[e] || e; | |
} | |
const EventHandler = { | |
on(e, t, i, n) { | |
addHandler(e, t, i, n, !1); | |
}, | |
one(e, t, i, n) { | |
addHandler(e, t, i, n, !0); | |
}, | |
off(e, t, i, n) { | |
if ("string" != typeof t || !e) return; | |
const [s, o, r] = normalizeParams(t, i, n), | |
a = r !== t, | |
l = getEvent(e), | |
c = t.startsWith("."); | |
if (void 0 !== o) { | |
if (!l || !l[r]) return; | |
return void removeHandler(e, l, r, o, s ? i : null); | |
} | |
c && | |
Object.keys(l).forEach((i) => { | |
removeNamespacedHandlers(e, l, i, t.slice(1)); | |
}); | |
const E = l[r] || {}; | |
Object.keys(E).forEach((i) => { | |
const n = i.replace(stripUidRegex, ""); | |
if (!a || t.includes(n)) { | |
const t = E[i]; | |
removeHandler(e, l, r, t.originalHandler, t.delegationSelector); | |
} | |
}); | |
}, | |
trigger(e, t, i) { | |
if ("string" != typeof t || !e) return null; | |
const n = getjQuery(), | |
s = getTypeEvent(t), | |
o = t !== s, | |
r = nativeEvents.has(s); | |
let a, | |
l = !0, | |
c = !0, | |
E = !1, | |
_ = null; | |
return ( | |
o && | |
n && | |
((a = n.Event(t, i)), | |
n(e).trigger(a), | |
(l = !a.isPropagationStopped()), | |
(c = !a.isImmediatePropagationStopped()), | |
(E = a.isDefaultPrevented())), | |
r | |
? ((_ = document.createEvent("HTMLEvents")), _.initEvent(s, l, !0)) | |
: (_ = new CustomEvent(t, { bubbles: l, cancelable: !0 })), | |
void 0 !== i && | |
Object.keys(i).forEach((e) => { | |
Object.defineProperty(_, e, { get: () => i[e] }); | |
}), | |
E && _.preventDefault(), | |
c && e.dispatchEvent(_), | |
_.defaultPrevented && void 0 !== a && a.preventDefault(), | |
_ | |
); | |
}, | |
}, | |
elementMap = new Map(), | |
Data = { | |
set(e, t, i) { | |
elementMap.has(e) || elementMap.set(e, new Map()); | |
const n = elementMap.get(e); | |
n.has(t) || 0 === n.size | |
? n.set(t, i) | |
: console.error( | |
`Bootstrap doesn't allow more than one instance per element. Bound instance: ${ | |
Array.from(n.keys())[0] | |
}.`, | |
); | |
}, | |
get: (e, t) => (elementMap.has(e) && elementMap.get(e).get(t)) || null, | |
remove(e, t) { | |
if (!elementMap.has(e)) return; | |
const i = elementMap.get(e); | |
i.delete(t), 0 === i.size && elementMap.delete(e); | |
}, | |
}, | |
VERSION = "5.1.3"; | |
class BaseComponent { | |
constructor(e) { | |
(e = getElement(e)) && | |
((this._element = e), | |
Data.set(this._element, this.constructor.DATA_KEY, this)); | |
} | |
dispose() { | |
Data.remove(this._element, this.constructor.DATA_KEY), | |
EventHandler.off(this._element, this.constructor.EVENT_KEY), | |
Object.getOwnPropertyNames(this).forEach((e) => { | |
this[e] = null; | |
}); | |
} | |
_queueCallback(e, t, i = !0) { | |
executeAfterTransition(e, t, i); | |
} | |
static getInstance(e) { | |
return Data.get(getElement(e), this.DATA_KEY); | |
} | |
static getOrCreateInstance(e, t = {}) { | |
return this.getInstance(e) || new this(e, "object" == typeof t ? t : null); | |
} | |
static get VERSION() { | |
return "5.1.3"; | |
} | |
static get NAME() { | |
throw new Error( | |
'You have to implement the static method "NAME", for each component!', | |
); | |
} | |
static get DATA_KEY() { | |
return `bs.${this.NAME}`; | |
} | |
static get EVENT_KEY() { | |
return `.${this.DATA_KEY}`; | |
} | |
} | |
const enableDismissTrigger = (e, t = "hide") => { | |
const i = `click.dismiss${e.EVENT_KEY}`, | |
n = e.NAME; | |
EventHandler.on(document, i, `[data-bs-dismiss="${n}"]`, function (i) { | |
if ( | |
(["A", "AREA"].includes(this.tagName) && i.preventDefault(), | |
isDisabled(this)) | |
) | |
return; | |
const s = getElementFromSelector(this) || this.closest(`.${n}`); | |
e.getOrCreateInstance(s)[t](); | |
}); | |
}, | |
NAME$d = "alert", | |
DATA_KEY$c = "bs.alert", | |
EVENT_KEY$c = ".bs.alert", | |
EVENT_CLOSE = "close.bs.alert", | |
EVENT_CLOSED = "closed.bs.alert", | |
CLASS_NAME_FADE$5 = "fade", | |
CLASS_NAME_SHOW$8 = "show"; | |
class Alert extends BaseComponent { | |
static get NAME() { | |
return NAME$d; | |
} | |
close() { | |
if (EventHandler.trigger(this._element, EVENT_CLOSE).defaultPrevented) | |
return; | |
this._element.classList.remove("show"); | |
const e = this._element.classList.contains("fade"); | |
this._queueCallback(() => this._destroyElement(), this._element, e); | |
} | |
_destroyElement() { | |
this._element.remove(), | |
EventHandler.trigger(this._element, EVENT_CLOSED), | |
this.dispose(); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Alert.getOrCreateInstance(this); | |
if ("string" == typeof e) { | |
if (void 0 === t[e] || e.startsWith("_") || "constructor" === e) | |
throw new TypeError(`No method named "${e}"`); | |
t[e](this); | |
} | |
}); | |
} | |
} | |
enableDismissTrigger(Alert, "close"), defineJQueryPlugin(Alert); | |
const NAME$c = "button", | |
DATA_KEY$b = "bs.button", | |
EVENT_KEY$b = ".bs.button", | |
DATA_API_KEY$7 = ".data-api", | |
CLASS_NAME_ACTIVE$3 = "active", | |
SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]', | |
EVENT_CLICK_DATA_API$6 = "click.bs.button.data-api"; | |
class Button extends BaseComponent { | |
static get NAME() { | |
return NAME$c; | |
} | |
toggle() { | |
this._element.setAttribute( | |
"aria-pressed", | |
this._element.classList.toggle("active"), | |
); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Button.getOrCreateInstance(this); | |
"toggle" === e && t[e](); | |
}); | |
} | |
} | |
function normalizeData(e) { | |
return ( | |
"true" === e || | |
("false" !== e && | |
(e === Number(e).toString() | |
? Number(e) | |
: "" === e || "null" === e | |
? null | |
: e)) | |
); | |
} | |
function normalizeDataKey(e) { | |
return e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`); | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$6, | |
SELECTOR_DATA_TOGGLE$5, | |
(e) => { | |
e.preventDefault(); | |
const t = e.target.closest(SELECTOR_DATA_TOGGLE$5); | |
Button.getOrCreateInstance(t).toggle(); | |
}, | |
), | |
defineJQueryPlugin(Button); | |
const Manipulator = { | |
setDataAttribute(e, t, i) { | |
e.setAttribute(`data-bs-${normalizeDataKey(t)}`, i); | |
}, | |
removeDataAttribute(e, t) { | |
e.removeAttribute(`data-bs-${normalizeDataKey(t)}`); | |
}, | |
getDataAttributes(e) { | |
if (!e) return {}; | |
const t = {}; | |
return ( | |
Object.keys(e.dataset) | |
.filter((e) => e.startsWith("bs")) | |
.forEach((i) => { | |
let n = i.replace(/^bs/, ""); | |
(n = n.charAt(0).toLowerCase() + n.slice(1, n.length)), | |
(t[n] = normalizeData(e.dataset[i])); | |
}), | |
t | |
); | |
}, | |
getDataAttribute: (e, t) => | |
normalizeData(e.getAttribute(`data-bs-${normalizeDataKey(t)}`)), | |
offset(e) { | |
const t = e.getBoundingClientRect(); | |
return { | |
top: t.top + window.pageYOffset, | |
left: t.left + window.pageXOffset, | |
}; | |
}, | |
position: (e) => ({ top: e.offsetTop, left: e.offsetLeft }), | |
}, | |
NODE_TEXT = 3, | |
SelectorEngine = { | |
find: (e, t = document.documentElement) => | |
[].concat(...Element.prototype.querySelectorAll.call(t, e)), | |
findOne: (e, t = document.documentElement) => | |
Element.prototype.querySelector.call(t, e), | |
children: (e, t) => [].concat(...e.children).filter((e) => e.matches(t)), | |
parents(e, t) { | |
const i = []; | |
let n = e.parentNode; | |
for (; n && n.nodeType === Node.ELEMENT_NODE && 3 !== n.nodeType; ) | |
n.matches(t) && i.push(n), (n = n.parentNode); | |
return i; | |
}, | |
prev(e, t) { | |
let i = e.previousElementSibling; | |
for (; i; ) { | |
if (i.matches(t)) return [i]; | |
i = i.previousElementSibling; | |
} | |
return []; | |
}, | |
next(e, t) { | |
let i = e.nextElementSibling; | |
for (; i; ) { | |
if (i.matches(t)) return [i]; | |
i = i.nextElementSibling; | |
} | |
return []; | |
}, | |
focusableChildren(e) { | |
const t = [ | |
"a", | |
"button", | |
"input", | |
"textarea", | |
"select", | |
"details", | |
"[tabindex]", | |
'[contenteditable="true"]', | |
] | |
.map((e) => `${e}:not([tabindex^="-"])`) | |
.join(", "); | |
return this.find(t, e).filter((e) => !isDisabled(e) && isVisible(e)); | |
}, | |
}, | |
NAME$b = "carousel", | |
DATA_KEY$a = "bs.carousel", | |
EVENT_KEY$a = ".bs.carousel", | |
DATA_API_KEY$6 = ".data-api", | |
ARROW_LEFT_KEY = "ArrowLeft", | |
ARROW_RIGHT_KEY = "ArrowRight", | |
TOUCHEVENT_COMPAT_WAIT = 500, | |
SWIPE_THRESHOLD = 40, | |
Default$a = { | |
interval: 5e3, | |
keyboard: !0, | |
slide: !1, | |
pause: "hover", | |
wrap: !0, | |
touch: !0, | |
}, | |
DefaultType$a = { | |
interval: "(number|boolean)", | |
keyboard: "boolean", | |
slide: "(boolean|string)", | |
pause: "(string|boolean)", | |
wrap: "boolean", | |
touch: "boolean", | |
}, | |
ORDER_NEXT = "next", | |
ORDER_PREV = "prev", | |
DIRECTION_LEFT = "left", | |
DIRECTION_RIGHT = "right", | |
KEY_TO_DIRECTION = { ArrowLeft: DIRECTION_RIGHT, ArrowRight: DIRECTION_LEFT }, | |
EVENT_SLIDE = "slide.bs.carousel", | |
EVENT_SLID = "slid.bs.carousel", | |
EVENT_KEYDOWN = "keydown.bs.carousel", | |
EVENT_MOUSEENTER = "mouseenter.bs.carousel", | |
EVENT_MOUSELEAVE = "mouseleave.bs.carousel", | |
EVENT_TOUCHSTART = "touchstart.bs.carousel", | |
EVENT_TOUCHMOVE = "touchmove.bs.carousel", | |
EVENT_TOUCHEND = "touchend.bs.carousel", | |
EVENT_POINTERDOWN = "pointerdown.bs.carousel", | |
EVENT_POINTERUP = "pointerup.bs.carousel", | |
EVENT_DRAG_START = "dragstart.bs.carousel", | |
EVENT_LOAD_DATA_API$2 = "load.bs.carousel.data-api", | |
EVENT_CLICK_DATA_API$5 = "click.bs.carousel.data-api", | |
CLASS_NAME_CAROUSEL = "carousel", | |
CLASS_NAME_ACTIVE$2 = "active", | |
CLASS_NAME_SLIDE = "slide", | |
CLASS_NAME_END = "carousel-item-end", | |
CLASS_NAME_START = "carousel-item-start", | |
CLASS_NAME_NEXT = "carousel-item-next", | |
CLASS_NAME_PREV = "carousel-item-prev", | |
CLASS_NAME_POINTER_EVENT = "pointer-event", | |
SELECTOR_ACTIVE$1 = ".active", | |
SELECTOR_ACTIVE_ITEM = ".active.carousel-item", | |
SELECTOR_ITEM = ".carousel-item", | |
SELECTOR_ITEM_IMG = ".carousel-item img", | |
SELECTOR_NEXT_PREV = ".carousel-item-next, .carousel-item-prev", | |
SELECTOR_INDICATORS = ".carousel-indicators", | |
SELECTOR_INDICATOR = "[data-bs-target]", | |
SELECTOR_DATA_SLIDE = "[data-bs-slide], [data-bs-slide-to]", | |
SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]', | |
POINTER_TYPE_TOUCH = "touch", | |
POINTER_TYPE_PEN = "pen"; | |
class Carousel extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._items = null), | |
(this._interval = null), | |
(this._activeElement = null), | |
(this._isPaused = !1), | |
(this._isSliding = !1), | |
(this.touchTimeout = null), | |
(this.touchStartX = 0), | |
(this.touchDeltaX = 0), | |
(this._config = this._getConfig(t)), | |
(this._indicatorsElement = SelectorEngine.findOne( | |
SELECTOR_INDICATORS, | |
this._element, | |
)), | |
(this._touchSupported = | |
"ontouchstart" in document.documentElement || | |
navigator.maxTouchPoints > 0), | |
(this._pointerEvent = Boolean(window.PointerEvent)), | |
this._addEventListeners(); | |
} | |
static get Default() { | |
return Default$a; | |
} | |
static get NAME() { | |
return NAME$b; | |
} | |
next() { | |
this._slide(ORDER_NEXT); | |
} | |
nextWhenVisible() { | |
!document.hidden && isVisible(this._element) && this.next(); | |
} | |
prev() { | |
this._slide(ORDER_PREV); | |
} | |
pause(e) { | |
e || (this._isPaused = !0), | |
SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element) && | |
(triggerTransitionEnd(this._element), this.cycle(!0)), | |
clearInterval(this._interval), | |
(this._interval = null); | |
} | |
cycle(e) { | |
e || (this._isPaused = !1), | |
this._interval && | |
(clearInterval(this._interval), (this._interval = null)), | |
this._config && | |
this._config.interval && | |
!this._isPaused && | |
(this._updateInterval(), | |
(this._interval = setInterval( | |
(document.visibilityState ? this.nextWhenVisible : this.next).bind( | |
this, | |
), | |
this._config.interval, | |
))); | |
} | |
to(e) { | |
this._activeElement = SelectorEngine.findOne( | |
SELECTOR_ACTIVE_ITEM, | |
this._element, | |
); | |
const t = this._getItemIndex(this._activeElement); | |
if (e > this._items.length - 1 || e < 0) return; | |
if (this._isSliding) | |
return void EventHandler.one(this._element, EVENT_SLID, () => this.to(e)); | |
if (t === e) return this.pause(), void this.cycle(); | |
const i = e > t ? ORDER_NEXT : ORDER_PREV; | |
this._slide(i, this._items[e]); | |
} | |
_getConfig(e) { | |
return ( | |
(e = { | |
...Default$a, | |
...Manipulator.getDataAttributes(this._element), | |
...("object" == typeof e ? e : {}), | |
}), | |
typeCheckConfig(NAME$b, e, DefaultType$a), | |
e | |
); | |
} | |
_handleSwipe() { | |
const e = Math.abs(this.touchDeltaX); | |
if (e <= 40) return; | |
const t = e / this.touchDeltaX; | |
(this.touchDeltaX = 0), | |
t && this._slide(t > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT); | |
} | |
_addEventListeners() { | |
this._config.keyboard && | |
EventHandler.on(this._element, EVENT_KEYDOWN, (e) => this._keydown(e)), | |
"hover" === this._config.pause && | |
(EventHandler.on(this._element, EVENT_MOUSEENTER, (e) => this.pause(e)), | |
EventHandler.on(this._element, EVENT_MOUSELEAVE, (e) => this.cycle(e))), | |
this._config.touch && | |
this._touchSupported && | |
this._addTouchEventListeners(); | |
} | |
_addTouchEventListeners() { | |
const e = (e) => | |
this._pointerEvent && | |
("pen" === e.pointerType || "touch" === e.pointerType), | |
t = (t) => { | |
e(t) | |
? (this.touchStartX = t.clientX) | |
: this._pointerEvent || (this.touchStartX = t.touches[0].clientX); | |
}, | |
i = (e) => { | |
this.touchDeltaX = | |
e.touches && e.touches.length > 1 | |
? 0 | |
: e.touches[0].clientX - this.touchStartX; | |
}, | |
n = (t) => { | |
e(t) && (this.touchDeltaX = t.clientX - this.touchStartX), | |
this._handleSwipe(), | |
"hover" === this._config.pause && | |
(this.pause(), | |
this.touchTimeout && clearTimeout(this.touchTimeout), | |
(this.touchTimeout = setTimeout( | |
(e) => this.cycle(e), | |
500 + this._config.interval, | |
))); | |
}; | |
SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach((e) => { | |
EventHandler.on(e, EVENT_DRAG_START, (e) => e.preventDefault()); | |
}), | |
this._pointerEvent | |
? (EventHandler.on(this._element, EVENT_POINTERDOWN, (e) => t(e)), | |
EventHandler.on(this._element, EVENT_POINTERUP, (e) => n(e)), | |
this._element.classList.add("pointer-event")) | |
: (EventHandler.on(this._element, EVENT_TOUCHSTART, (e) => t(e)), | |
EventHandler.on(this._element, EVENT_TOUCHMOVE, (e) => i(e)), | |
EventHandler.on(this._element, EVENT_TOUCHEND, (e) => n(e))); | |
} | |
_keydown(e) { | |
if (/input|textarea/i.test(e.target.tagName)) return; | |
const t = KEY_TO_DIRECTION[e.key]; | |
t && (e.preventDefault(), this._slide(t)); | |
} | |
_getItemIndex(e) { | |
return ( | |
(this._items = | |
e && e.parentNode | |
? SelectorEngine.find(SELECTOR_ITEM, e.parentNode) | |
: []), | |
this._items.indexOf(e) | |
); | |
} | |
_getItemByOrder(e, t) { | |
const i = e === ORDER_NEXT; | |
return getNextActiveElement(this._items, t, i, this._config.wrap); | |
} | |
_triggerSlideEvent(e, t) { | |
const i = this._getItemIndex(e), | |
n = this._getItemIndex( | |
SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element), | |
); | |
return EventHandler.trigger(this._element, EVENT_SLIDE, { | |
relatedTarget: e, | |
direction: t, | |
from: n, | |
to: i, | |
}); | |
} | |
_setActiveIndicatorElement(e) { | |
if (this._indicatorsElement) { | |
const t = SelectorEngine.findOne(".active", this._indicatorsElement); | |
t.classList.remove("active"), t.removeAttribute("aria-current"); | |
const i = SelectorEngine.find( | |
"[data-bs-target]", | |
this._indicatorsElement, | |
); | |
for (let t = 0; t < i.length; t++) | |
if ( | |
Number.parseInt(i[t].getAttribute("data-bs-slide-to"), 10) === | |
this._getItemIndex(e) | |
) { | |
i[t].classList.add("active"), | |
i[t].setAttribute("aria-current", "true"); | |
break; | |
} | |
} | |
} | |
_updateInterval() { | |
const e = | |
this._activeElement || | |
SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); | |
if (!e) return; | |
const t = Number.parseInt(e.getAttribute("data-bs-interval"), 10); | |
t | |
? ((this._config.defaultInterval = | |
this._config.defaultInterval || this._config.interval), | |
(this._config.interval = t)) | |
: (this._config.interval = | |
this._config.defaultInterval || this._config.interval); | |
} | |
_slide(e, t) { | |
const i = this._directionToOrder(e), | |
n = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element), | |
s = this._getItemIndex(n), | |
o = t || this._getItemByOrder(i, n), | |
r = this._getItemIndex(o), | |
a = Boolean(this._interval), | |
l = i === ORDER_NEXT, | |
c = l ? CLASS_NAME_START : CLASS_NAME_END, | |
E = l ? CLASS_NAME_NEXT : CLASS_NAME_PREV, | |
_ = this._orderToDirection(i); | |
if (o && o.classList.contains("active")) return void (this._isSliding = !1); | |
if (this._isSliding) return; | |
if (this._triggerSlideEvent(o, _).defaultPrevented) return; | |
if (!n || !o) return; | |
(this._isSliding = !0), | |
a && this.pause(), | |
this._setActiveIndicatorElement(o), | |
(this._activeElement = o); | |
const h = () => { | |
EventHandler.trigger(this._element, EVENT_SLID, { | |
relatedTarget: o, | |
direction: _, | |
from: s, | |
to: r, | |
}); | |
}; | |
if (this._element.classList.contains("slide")) { | |
o.classList.add(E), reflow(o), n.classList.add(c), o.classList.add(c); | |
const e = () => { | |
o.classList.remove(c, E), | |
o.classList.add("active"), | |
n.classList.remove("active", E, c), | |
(this._isSliding = !1), | |
setTimeout(h, 0); | |
}; | |
this._queueCallback(e, n, !0); | |
} else | |
n.classList.remove("active"), | |
o.classList.add("active"), | |
(this._isSliding = !1), | |
h(); | |
a && this.cycle(); | |
} | |
_directionToOrder(e) { | |
return [DIRECTION_RIGHT, DIRECTION_LEFT].includes(e) | |
? isRTL() | |
? e === DIRECTION_LEFT | |
? ORDER_PREV | |
: ORDER_NEXT | |
: e === DIRECTION_LEFT | |
? ORDER_NEXT | |
: ORDER_PREV | |
: e; | |
} | |
_orderToDirection(e) { | |
return [ORDER_NEXT, ORDER_PREV].includes(e) | |
? isRTL() | |
? e === ORDER_PREV | |
? DIRECTION_LEFT | |
: DIRECTION_RIGHT | |
: e === ORDER_PREV | |
? DIRECTION_RIGHT | |
: DIRECTION_LEFT | |
: e; | |
} | |
static carouselInterface(e, t) { | |
const i = Carousel.getOrCreateInstance(e, t); | |
let { _config: n } = i; | |
"object" == typeof t && (n = { ...n, ...t }); | |
const s = "string" == typeof t ? t : n.slide; | |
if ("number" == typeof t) i.to(t); | |
else if ("string" == typeof s) { | |
if (void 0 === i[s]) throw new TypeError(`No method named "${s}"`); | |
i[s](); | |
} else n.interval && n.ride && (i.pause(), i.cycle()); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
Carousel.carouselInterface(this, e); | |
}); | |
} | |
static dataApiClickHandler(e) { | |
const t = getElementFromSelector(this); | |
if (!t || !t.classList.contains("carousel")) return; | |
const i = { | |
...Manipulator.getDataAttributes(t), | |
...Manipulator.getDataAttributes(this), | |
}, | |
n = this.getAttribute("data-bs-slide-to"); | |
n && (i.interval = !1), | |
Carousel.carouselInterface(t, i), | |
n && Carousel.getInstance(t).to(n), | |
e.preventDefault(); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$5, | |
SELECTOR_DATA_SLIDE, | |
Carousel.dataApiClickHandler, | |
), | |
EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { | |
const e = SelectorEngine.find(SELECTOR_DATA_RIDE); | |
for (let t = 0, i = e.length; t < i; t++) | |
Carousel.carouselInterface(e[t], Carousel.getInstance(e[t])); | |
}), | |
defineJQueryPlugin(Carousel); | |
const NAME$a = "collapse", | |
DATA_KEY$9 = "bs.collapse", | |
EVENT_KEY$9 = ".bs.collapse", | |
DATA_API_KEY$5 = ".data-api", | |
Default$9 = { toggle: !0, parent: null }, | |
DefaultType$9 = { toggle: "boolean", parent: "(null|element)" }, | |
EVENT_SHOW$5 = "show.bs.collapse", | |
EVENT_SHOWN$5 = "shown.bs.collapse", | |
EVENT_HIDE$5 = "hide.bs.collapse", | |
EVENT_HIDDEN$5 = "hidden.bs.collapse", | |
EVENT_CLICK_DATA_API$4 = "click.bs.collapse.data-api", | |
CLASS_NAME_SHOW$7 = "show", | |
CLASS_NAME_COLLAPSE = "collapse", | |
CLASS_NAME_COLLAPSING = "collapsing", | |
CLASS_NAME_COLLAPSED = "collapsed", | |
CLASS_NAME_DEEPER_CHILDREN = ":scope .collapse .collapse", | |
CLASS_NAME_HORIZONTAL = "collapse-horizontal", | |
WIDTH = "width", | |
HEIGHT = "height", | |
SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing", | |
SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; | |
class Collapse extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._isTransitioning = !1), | |
(this._config = this._getConfig(t)), | |
(this._triggerArray = []); | |
const i = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); | |
for (let e = 0, t = i.length; e < t; e++) { | |
const t = i[e], | |
n = getSelectorFromElement(t), | |
s = SelectorEngine.find(n).filter((e) => e === this._element); | |
null !== n && | |
s.length && | |
((this._selector = n), this._triggerArray.push(t)); | |
} | |
this._initializeChildren(), | |
this._config.parent || | |
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), | |
this._config.toggle && this.toggle(); | |
} | |
static get Default() { | |
return Default$9; | |
} | |
static get NAME() { | |
return NAME$a; | |
} | |
toggle() { | |
this._isShown() ? this.hide() : this.show(); | |
} | |
show() { | |
if (this._isTransitioning || this._isShown()) return; | |
let e, | |
t = []; | |
if (this._config.parent) { | |
const e = SelectorEngine.find( | |
CLASS_NAME_DEEPER_CHILDREN, | |
this._config.parent, | |
); | |
t = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter( | |
(t) => !e.includes(t), | |
); | |
} | |
const i = SelectorEngine.findOne(this._selector); | |
if (t.length) { | |
const n = t.find((e) => i !== e); | |
if (((e = n ? Collapse.getInstance(n) : null), e && e._isTransitioning)) | |
return; | |
} | |
if (EventHandler.trigger(this._element, EVENT_SHOW$5).defaultPrevented) | |
return; | |
t.forEach((t) => { | |
i !== t && Collapse.getOrCreateInstance(t, { toggle: !1 }).hide(), | |
e || Data.set(t, DATA_KEY$9, null); | |
}); | |
const n = this._getDimension(); | |
this._element.classList.remove("collapse"), | |
this._element.classList.add("collapsing"), | |
(this._element.style[n] = 0), | |
this._addAriaAndCollapsedClass(this._triggerArray, !0), | |
(this._isTransitioning = !0); | |
const s = `scroll${n[0].toUpperCase() + n.slice(1)}`; | |
this._queueCallback( | |
() => { | |
(this._isTransitioning = !1), | |
this._element.classList.remove("collapsing"), | |
this._element.classList.add("collapse", "show"), | |
(this._element.style[n] = ""), | |
EventHandler.trigger(this._element, EVENT_SHOWN$5); | |
}, | |
this._element, | |
!0, | |
), | |
(this._element.style[n] = `${this._element[s]}px`); | |
} | |
hide() { | |
if (this._isTransitioning || !this._isShown()) return; | |
if (EventHandler.trigger(this._element, EVENT_HIDE$5).defaultPrevented) | |
return; | |
const e = this._getDimension(); | |
(this._element.style[e] = `${this._element.getBoundingClientRect()[e]}px`), | |
reflow(this._element), | |
this._element.classList.add("collapsing"), | |
this._element.classList.remove("collapse", "show"); | |
const t = this._triggerArray.length; | |
for (let e = 0; e < t; e++) { | |
const t = this._triggerArray[e], | |
i = getElementFromSelector(t); | |
i && !this._isShown(i) && this._addAriaAndCollapsedClass([t], !1); | |
} | |
(this._isTransitioning = !0), | |
(this._element.style[e] = ""), | |
this._queueCallback( | |
() => { | |
(this._isTransitioning = !1), | |
this._element.classList.remove("collapsing"), | |
this._element.classList.add("collapse"), | |
EventHandler.trigger(this._element, EVENT_HIDDEN$5); | |
}, | |
this._element, | |
!0, | |
); | |
} | |
_isShown(e = this._element) { | |
return e.classList.contains("show"); | |
} | |
_getConfig(e) { | |
return ( | |
((e = { | |
...Default$9, | |
...Manipulator.getDataAttributes(this._element), | |
...e, | |
}).toggle = Boolean(e.toggle)), | |
(e.parent = getElement(e.parent)), | |
typeCheckConfig(NAME$a, e, DefaultType$9), | |
e | |
); | |
} | |
_getDimension() { | |
return this._element.classList.contains("collapse-horizontal") | |
? WIDTH | |
: HEIGHT; | |
} | |
_initializeChildren() { | |
if (!this._config.parent) return; | |
const e = SelectorEngine.find( | |
CLASS_NAME_DEEPER_CHILDREN, | |
this._config.parent, | |
); | |
SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent) | |
.filter((t) => !e.includes(t)) | |
.forEach((e) => { | |
const t = getElementFromSelector(e); | |
t && this._addAriaAndCollapsedClass([e], this._isShown(t)); | |
}); | |
} | |
_addAriaAndCollapsedClass(e, t) { | |
e.length && | |
e.forEach((e) => { | |
t ? e.classList.remove("collapsed") : e.classList.add("collapsed"), | |
e.setAttribute("aria-expanded", t); | |
}); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = {}; | |
"string" == typeof e && /show|hide/.test(e) && (t.toggle = !1); | |
const i = Collapse.getOrCreateInstance(this, t); | |
if ("string" == typeof e) { | |
if (void 0 === i[e]) throw new TypeError(`No method named "${e}"`); | |
i[e](); | |
} | |
}); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$4, | |
SELECTOR_DATA_TOGGLE$4, | |
function (e) { | |
("A" === e.target.tagName || | |
(e.delegateTarget && "A" === e.delegateTarget.tagName)) && | |
e.preventDefault(); | |
const t = getSelectorFromElement(this); | |
SelectorEngine.find(t).forEach((e) => { | |
Collapse.getOrCreateInstance(e, { toggle: !1 }).toggle(); | |
}); | |
}, | |
), | |
defineJQueryPlugin(Collapse); | |
const NAME$9 = "dropdown", | |
DATA_KEY$8 = "bs.dropdown", | |
EVENT_KEY$8 = ".bs.dropdown", | |
DATA_API_KEY$4 = ".data-api", | |
ESCAPE_KEY$2 = "Escape", | |
SPACE_KEY = "Space", | |
TAB_KEY$1 = "Tab", | |
ARROW_UP_KEY = "ArrowUp", | |
ARROW_DOWN_KEY = "ArrowDown", | |
RIGHT_MOUSE_BUTTON = 2, | |
REGEXP_KEYDOWN = new RegExp("ArrowUp|ArrowDown|Escape"), | |
EVENT_HIDE$4 = "hide.bs.dropdown", | |
EVENT_HIDDEN$4 = "hidden.bs.dropdown", | |
EVENT_SHOW$4 = "show.bs.dropdown", | |
EVENT_SHOWN$4 = "shown.bs.dropdown", | |
EVENT_CLICK_DATA_API$3 = "click.bs.dropdown.data-api", | |
EVENT_KEYDOWN_DATA_API = "keydown.bs.dropdown.data-api", | |
EVENT_KEYUP_DATA_API = "keyup.bs.dropdown.data-api", | |
CLASS_NAME_SHOW$6 = "show", | |
CLASS_NAME_DROPUP = "dropup", | |
CLASS_NAME_DROPEND = "dropend", | |
CLASS_NAME_DROPSTART = "dropstart", | |
CLASS_NAME_NAVBAR = "navbar", | |
SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]', | |
SELECTOR_MENU = ".dropdown-menu", | |
SELECTOR_NAVBAR_NAV = ".navbar-nav", | |
SELECTOR_VISIBLE_ITEMS = | |
".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", | |
PLACEMENT_TOP = isRTL() ? "top-end" : "top-start", | |
PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end", | |
PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start", | |
PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end", | |
PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start", | |
PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start", | |
Default$8 = { | |
offset: [0, 2], | |
boundary: "clippingParents", | |
reference: "toggle", | |
display: "dynamic", | |
popperConfig: null, | |
autoClose: !0, | |
}, | |
DefaultType$8 = { | |
offset: "(array|string|function)", | |
boundary: "(string|element)", | |
reference: "(string|element|object)", | |
display: "string", | |
popperConfig: "(null|object|function)", | |
autoClose: "(boolean|string)", | |
}; | |
class Dropdown extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._popper = null), | |
(this._config = this._getConfig(t)), | |
(this._menu = this._getMenuElement()), | |
(this._inNavbar = this._detectNavbar()); | |
} | |
static get Default() { | |
return Default$8; | |
} | |
static get DefaultType() { | |
return DefaultType$8; | |
} | |
static get NAME() { | |
return NAME$9; | |
} | |
toggle() { | |
return this._isShown() ? this.hide() : this.show(); | |
} | |
show() { | |
if (isDisabled(this._element) || this._isShown(this._menu)) return; | |
const e = { relatedTarget: this._element }; | |
if (EventHandler.trigger(this._element, EVENT_SHOW$4, e).defaultPrevented) | |
return; | |
const t = Dropdown.getParentFromElement(this._element); | |
this._inNavbar | |
? Manipulator.setDataAttribute(this._menu, "popper", "none") | |
: this._createPopper(t), | |
"ontouchstart" in document.documentElement && | |
!t.closest(".navbar-nav") && | |
[] | |
.concat(...document.body.children) | |
.forEach((e) => EventHandler.on(e, "mouseover", noop)), | |
this._element.focus(), | |
this._element.setAttribute("aria-expanded", !0), | |
this._menu.classList.add("show"), | |
this._element.classList.add("show"), | |
EventHandler.trigger(this._element, EVENT_SHOWN$4, e); | |
} | |
hide() { | |
if (isDisabled(this._element) || !this._isShown(this._menu)) return; | |
const e = { relatedTarget: this._element }; | |
this._completeHide(e); | |
} | |
dispose() { | |
this._popper && this._popper.destroy(), super.dispose(); | |
} | |
update() { | |
(this._inNavbar = this._detectNavbar()), | |
this._popper && this._popper.update(); | |
} | |
_completeHide(e) { | |
EventHandler.trigger(this._element, EVENT_HIDE$4, e).defaultPrevented || | |
("ontouchstart" in document.documentElement && | |
[] | |
.concat(...document.body.children) | |
.forEach((e) => EventHandler.off(e, "mouseover", noop)), | |
this._popper && this._popper.destroy(), | |
this._menu.classList.remove("show"), | |
this._element.classList.remove("show"), | |
this._element.setAttribute("aria-expanded", "false"), | |
Manipulator.removeDataAttribute(this._menu, "popper"), | |
EventHandler.trigger(this._element, EVENT_HIDDEN$4, e)); | |
} | |
_getConfig(e) { | |
if ( | |
((e = { | |
...this.constructor.Default, | |
...Manipulator.getDataAttributes(this._element), | |
...e, | |
}), | |
typeCheckConfig(NAME$9, e, this.constructor.DefaultType), | |
"object" == typeof e.reference && | |
!isElement(e.reference) && | |
"function" != typeof e.reference.getBoundingClientRect) | |
) | |
throw new TypeError( | |
`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`, | |
); | |
return e; | |
} | |
_createPopper(e) { | |
if (void 0 === Popper) | |
throw new TypeError( | |
"Bootstrap's dropdowns require Popper (https://popper.js.org)", | |
); | |
let t = this._element; | |
"parent" === this._config.reference | |
? (t = e) | |
: isElement(this._config.reference) | |
? (t = getElement(this._config.reference)) | |
: "object" == typeof this._config.reference && | |
(t = this._config.reference); | |
const i = this._getPopperConfig(), | |
n = i.modifiers.find((e) => "applyStyles" === e.name && !1 === e.enabled); | |
(this._popper = Popper.createPopper(t, this._menu, i)), | |
n && Manipulator.setDataAttribute(this._menu, "popper", "static"); | |
} | |
_isShown(e = this._element) { | |
return e.classList.contains("show"); | |
} | |
_getMenuElement() { | |
return SelectorEngine.next(this._element, SELECTOR_MENU)[0]; | |
} | |
_getPlacement() { | |
const e = this._element.parentNode; | |
if (e.classList.contains("dropend")) return PLACEMENT_RIGHT; | |
if (e.classList.contains("dropstart")) return PLACEMENT_LEFT; | |
const t = | |
"end" === | |
getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(); | |
return e.classList.contains("dropup") | |
? t | |
? PLACEMENT_TOPEND | |
: PLACEMENT_TOP | |
: t | |
? PLACEMENT_BOTTOMEND | |
: PLACEMENT_BOTTOM; | |
} | |
_detectNavbar() { | |
return null !== this._element.closest(".navbar"); | |
} | |
_getOffset() { | |
const { offset: e } = this._config; | |
return "string" == typeof e | |
? e.split(",").map((e) => Number.parseInt(e, 10)) | |
: "function" == typeof e | |
? (t) => e(t, this._element) | |
: e; | |
} | |
_getPopperConfig() { | |
const e = { | |
placement: this._getPlacement(), | |
modifiers: [ | |
{ | |
name: "preventOverflow", | |
options: { boundary: this._config.boundary }, | |
}, | |
{ name: "offset", options: { offset: this._getOffset() } }, | |
], | |
}; | |
return ( | |
"static" === this._config.display && | |
(e.modifiers = [{ name: "applyStyles", enabled: !1 }]), | |
{ | |
...e, | |
...("function" == typeof this._config.popperConfig | |
? this._config.popperConfig(e) | |
: this._config.popperConfig), | |
} | |
); | |
} | |
_selectMenuItem({ key: e, target: t }) { | |
const i = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter( | |
isVisible, | |
); | |
i.length && | |
getNextActiveElement(i, t, "ArrowDown" === e, !i.includes(t)).focus(); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Dropdown.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](); | |
} | |
}); | |
} | |
static clearMenus(e) { | |
if (e && (2 === e.button || ("keyup" === e.type && "Tab" !== e.key))) | |
return; | |
const t = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3); | |
for (let i = 0, n = t.length; i < n; i++) { | |
const n = Dropdown.getInstance(t[i]); | |
if (!n || !1 === n._config.autoClose) continue; | |
if (!n._isShown()) continue; | |
const s = { relatedTarget: n._element }; | |
if (e) { | |
const t = e.composedPath(), | |
i = t.includes(n._menu); | |
if ( | |
t.includes(n._element) || | |
("inside" === n._config.autoClose && !i) || | |
("outside" === n._config.autoClose && i) | |
) | |
continue; | |
if ( | |
n._menu.contains(e.target) && | |
(("keyup" === e.type && "Tab" === e.key) || | |
/input|select|option|textarea|form/i.test(e.target.tagName)) | |
) | |
continue; | |
"click" === e.type && (s.clickEvent = e); | |
} | |
n._completeHide(s); | |
} | |
} | |
static getParentFromElement(e) { | |
return getElementFromSelector(e) || e.parentNode; | |
} | |
static dataApiKeydownHandler(e) { | |
if ( | |
/input|textarea/i.test(e.target.tagName) | |
? "Space" === e.key || | |
("Escape" !== e.key && | |
(("ArrowDown" !== e.key && "ArrowUp" !== e.key) || | |
e.target.closest(SELECTOR_MENU))) | |
: !REGEXP_KEYDOWN.test(e.key) | |
) | |
return; | |
const t = this.classList.contains("show"); | |
if (!t && "Escape" === e.key) return; | |
if ((e.preventDefault(), e.stopPropagation(), isDisabled(this))) return; | |
const i = this.matches(SELECTOR_DATA_TOGGLE$3) | |
? this | |
: SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0], | |
n = Dropdown.getOrCreateInstance(i); | |
if ("Escape" !== e.key) | |
return "ArrowUp" === e.key || "ArrowDown" === e.key | |
? (t || n.show(), void n._selectMenuItem(e)) | |
: void ((t && "Space" !== e.key) || Dropdown.clearMenus()); | |
n.hide(); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_KEYDOWN_DATA_API, | |
SELECTOR_DATA_TOGGLE$3, | |
Dropdown.dataApiKeydownHandler, | |
), | |
EventHandler.on( | |
document, | |
EVENT_KEYDOWN_DATA_API, | |
SELECTOR_MENU, | |
Dropdown.dataApiKeydownHandler, | |
), | |
EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus), | |
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus), | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$3, | |
SELECTOR_DATA_TOGGLE$3, | |
function (e) { | |
e.preventDefault(), Dropdown.getOrCreateInstance(this).toggle(); | |
}, | |
), | |
defineJQueryPlugin(Dropdown); | |
const SELECTOR_FIXED_CONTENT = | |
".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", | |
SELECTOR_STICKY_CONTENT = ".sticky-top"; | |
class ScrollBarHelper { | |
constructor() { | |
this._element = document.body; | |
} | |
getWidth() { | |
const e = document.documentElement.clientWidth; | |
return Math.abs(window.innerWidth - e); | |
} | |
hide() { | |
const e = this.getWidth(); | |
this._disableOverFlow(), | |
this._setElementAttributes(this._element, "paddingRight", (t) => t + e), | |
this._setElementAttributes( | |
SELECTOR_FIXED_CONTENT, | |
"paddingRight", | |
(t) => t + e, | |
), | |
this._setElementAttributes(".sticky-top", "marginRight", (t) => t - e); | |
} | |
_disableOverFlow() { | |
this._saveInitialAttribute(this._element, "overflow"), | |
(this._element.style.overflow = "hidden"); | |
} | |
_setElementAttributes(e, t, i) { | |
const n = this.getWidth(); | |
this._applyManipulationCallback(e, (e) => { | |
if (e !== this._element && window.innerWidth > e.clientWidth + n) return; | |
this._saveInitialAttribute(e, t); | |
const s = window.getComputedStyle(e)[t]; | |
e.style[t] = `${i(Number.parseFloat(s))}px`; | |
}); | |
} | |
reset() { | |
this._resetElementAttributes(this._element, "overflow"), | |
this._resetElementAttributes(this._element, "paddingRight"), | |
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, "paddingRight"), | |
this._resetElementAttributes(".sticky-top", "marginRight"); | |
} | |
_saveInitialAttribute(e, t) { | |
const i = e.style[t]; | |
i && Manipulator.setDataAttribute(e, t, i); | |
} | |
_resetElementAttributes(e, t) { | |
this._applyManipulationCallback(e, (e) => { | |
const i = Manipulator.getDataAttribute(e, t); | |
void 0 === i | |
? e.style.removeProperty(t) | |
: (Manipulator.removeDataAttribute(e, t), (e.style[t] = i)); | |
}); | |
} | |
_applyManipulationCallback(e, t) { | |
isElement(e) ? t(e) : SelectorEngine.find(e, this._element).forEach(t); | |
} | |
isOverflowing() { | |
return this.getWidth() > 0; | |
} | |
} | |
const Default$7 = { | |
className: "modal-backdrop", | |
isVisible: !0, | |
isAnimated: !1, | |
rootElement: "body", | |
clickCallback: null, | |
}, | |
DefaultType$7 = { | |
className: "string", | |
isVisible: "boolean", | |
isAnimated: "boolean", | |
rootElement: "(element|string)", | |
clickCallback: "(function|null)", | |
}, | |
NAME$8 = "backdrop", | |
CLASS_NAME_FADE$4 = "fade", | |
CLASS_NAME_SHOW$5 = "show", | |
EVENT_MOUSEDOWN = "mousedown.bs.backdrop"; | |
class Backdrop { | |
constructor(e) { | |
(this._config = this._getConfig(e)), | |
(this._isAppended = !1), | |
(this._element = null); | |
} | |
show(e) { | |
this._config.isVisible | |
? (this._append(), | |
this._config.isAnimated && reflow(this._getElement()), | |
this._getElement().classList.add("show"), | |
this._emulateAnimation(() => { | |
execute(e); | |
})) | |
: execute(e); | |
} | |
hide(e) { | |
this._config.isVisible | |
? (this._getElement().classList.remove("show"), | |
this._emulateAnimation(() => { | |
this.dispose(), execute(e); | |
})) | |
: execute(e); | |
} | |
_getElement() { | |
if (!this._element) { | |
const e = document.createElement("div"); | |
(e.className = this._config.className), | |
this._config.isAnimated && e.classList.add("fade"), | |
(this._element = e); | |
} | |
return this._element; | |
} | |
_getConfig(e) { | |
return ( | |
((e = { ...Default$7, ...("object" == typeof e ? e : {}) }).rootElement = | |
getElement(e.rootElement)), | |
typeCheckConfig(NAME$8, e, DefaultType$7), | |
e | |
); | |
} | |
_append() { | |
this._isAppended || | |
(this._config.rootElement.append(this._getElement()), | |
EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => { | |
execute(this._config.clickCallback); | |
}), | |
(this._isAppended = !0)); | |
} | |
dispose() { | |
this._isAppended && | |
(EventHandler.off(this._element, EVENT_MOUSEDOWN), | |
this._element.remove(), | |
(this._isAppended = !1)); | |
} | |
_emulateAnimation(e) { | |
executeAfterTransition(e, this._getElement(), this._config.isAnimated); | |
} | |
} | |
const Default$6 = { trapElement: null, autofocus: !0 }, | |
DefaultType$6 = { trapElement: "element", autofocus: "boolean" }, | |
NAME$7 = "focustrap", | |
DATA_KEY$7 = "bs.focustrap", | |
EVENT_KEY$7 = ".bs.focustrap", | |
EVENT_FOCUSIN$1 = "focusin.bs.focustrap", | |
EVENT_KEYDOWN_TAB = "keydown.tab.bs.focustrap", | |
TAB_KEY = "Tab", | |
TAB_NAV_FORWARD = "forward", | |
TAB_NAV_BACKWARD = "backward"; | |
class FocusTrap { | |
constructor(e) { | |
(this._config = this._getConfig(e)), | |
(this._isActive = !1), | |
(this._lastTabNavDirection = null); | |
} | |
activate() { | |
const { trapElement: e, autofocus: t } = this._config; | |
this._isActive || | |
(t && e.focus(), | |
EventHandler.off(document, EVENT_KEY$7), | |
EventHandler.on(document, EVENT_FOCUSIN$1, (e) => this._handleFocusin(e)), | |
EventHandler.on(document, EVENT_KEYDOWN_TAB, (e) => | |
this._handleKeydown(e), | |
), | |
(this._isActive = !0)); | |
} | |
deactivate() { | |
this._isActive && | |
((this._isActive = !1), EventHandler.off(document, EVENT_KEY$7)); | |
} | |
_handleFocusin(e) { | |
const { target: t } = e, | |
{ trapElement: i } = this._config; | |
if (t === document || t === i || i.contains(t)) return; | |
const n = SelectorEngine.focusableChildren(i); | |
0 === n.length | |
? i.focus() | |
: "backward" === this._lastTabNavDirection | |
? n[n.length - 1].focus() | |
: n[0].focus(); | |
} | |
_handleKeydown(e) { | |
"Tab" === e.key && | |
(this._lastTabNavDirection = e.shiftKey ? "backward" : "forward"); | |
} | |
_getConfig(e) { | |
return ( | |
(e = { ...Default$6, ...("object" == typeof e ? e : {}) }), | |
typeCheckConfig(NAME$7, e, DefaultType$6), | |
e | |
); | |
} | |
} | |
const NAME$6 = "modal", | |
DATA_KEY$6 = "bs.modal", | |
EVENT_KEY$6 = ".bs.modal", | |
DATA_API_KEY$3 = ".data-api", | |
ESCAPE_KEY$1 = "Escape", | |
Default$5 = { backdrop: !0, keyboard: !0, focus: !0 }, | |
DefaultType$5 = { | |
backdrop: "(boolean|string)", | |
keyboard: "boolean", | |
focus: "boolean", | |
}, | |
EVENT_HIDE$3 = "hide.bs.modal", | |
EVENT_HIDE_PREVENTED = "hidePrevented.bs.modal", | |
EVENT_HIDDEN$3 = "hidden.bs.modal", | |
EVENT_SHOW$3 = "show.bs.modal", | |
EVENT_SHOWN$3 = "shown.bs.modal", | |
EVENT_RESIZE = "resize.bs.modal", | |
EVENT_CLICK_DISMISS = "click.dismiss.bs.modal", | |
EVENT_KEYDOWN_DISMISS$1 = "keydown.dismiss.bs.modal", | |
EVENT_MOUSEUP_DISMISS = "mouseup.dismiss.bs.modal", | |
EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss.bs.modal", | |
EVENT_CLICK_DATA_API$2 = "click.bs.modal.data-api", | |
CLASS_NAME_OPEN = "modal-open", | |
CLASS_NAME_FADE$3 = "fade", | |
CLASS_NAME_SHOW$4 = "show", | |
CLASS_NAME_STATIC = "modal-static", | |
OPEN_SELECTOR$1 = ".modal.show", | |
SELECTOR_DIALOG = ".modal-dialog", | |
SELECTOR_MODAL_BODY = ".modal-body", | |
SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; | |
class Modal extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._config = this._getConfig(t)), | |
(this._dialog = SelectorEngine.findOne(".modal-dialog", this._element)), | |
(this._backdrop = this._initializeBackDrop()), | |
(this._focustrap = this._initializeFocusTrap()), | |
(this._isShown = !1), | |
(this._ignoreBackdropClick = !1), | |
(this._isTransitioning = !1), | |
(this._scrollBar = new ScrollBarHelper()); | |
} | |
static get Default() { | |
return Default$5; | |
} | |
static get NAME() { | |
return NAME$6; | |
} | |
toggle(e) { | |
return this._isShown ? this.hide() : this.show(e); | |
} | |
show(e) { | |
this._isShown || | |
this._isTransitioning || | |
EventHandler.trigger(this._element, EVENT_SHOW$3, { relatedTarget: e }) | |
.defaultPrevented || | |
((this._isShown = !0), | |
this._isAnimated() && (this._isTransitioning = !0), | |
this._scrollBar.hide(), | |
document.body.classList.add("modal-open"), | |
this._adjustDialog(), | |
this._setEscapeEvent(), | |
this._setResizeEvent(), | |
EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { | |
EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, (e) => { | |
e.target === this._element && (this._ignoreBackdropClick = !0); | |
}); | |
}), | |
this._showBackdrop(() => this._showElement(e))); | |
} | |
hide() { | |
if (!this._isShown || this._isTransitioning) return; | |
if (EventHandler.trigger(this._element, EVENT_HIDE$3).defaultPrevented) | |
return; | |
this._isShown = !1; | |
const e = this._isAnimated(); | |
e && (this._isTransitioning = !0), | |
this._setEscapeEvent(), | |
this._setResizeEvent(), | |
this._focustrap.deactivate(), | |
this._element.classList.remove("show"), | |
EventHandler.off(this._element, EVENT_CLICK_DISMISS), | |
EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS), | |
this._queueCallback(() => this._hideModal(), this._element, e); | |
} | |
dispose() { | |
[window, this._dialog].forEach((e) => EventHandler.off(e, ".bs.modal")), | |
this._backdrop.dispose(), | |
this._focustrap.deactivate(), | |
super.dispose(); | |
} | |
handleUpdate() { | |
this._adjustDialog(); | |
} | |
_initializeBackDrop() { | |
return new Backdrop({ | |
isVisible: Boolean(this._config.backdrop), | |
isAnimated: this._isAnimated(), | |
}); | |
} | |
_initializeFocusTrap() { | |
return new FocusTrap({ trapElement: this._element }); | |
} | |
_getConfig(e) { | |
return ( | |
(e = { | |
...Default$5, | |
...Manipulator.getDataAttributes(this._element), | |
...("object" == typeof e ? e : {}), | |
}), | |
typeCheckConfig(NAME$6, e, DefaultType$5), | |
e | |
); | |
} | |
_showElement(e) { | |
const t = this._isAnimated(), | |
i = SelectorEngine.findOne(".modal-body", this._dialog); | |
(this._element.parentNode && | |
this._element.parentNode.nodeType === Node.ELEMENT_NODE) || | |
document.body.append(this._element), | |
(this._element.style.display = "block"), | |
this._element.removeAttribute("aria-hidden"), | |
this._element.setAttribute("aria-modal", !0), | |
this._element.setAttribute("role", "dialog"), | |
(this._element.scrollTop = 0), | |
i && (i.scrollTop = 0), | |
t && reflow(this._element), | |
this._element.classList.add("show"), | |
this._queueCallback( | |
() => { | |
this._config.focus && this._focustrap.activate(), | |
(this._isTransitioning = !1), | |
EventHandler.trigger(this._element, EVENT_SHOWN$3, { | |
relatedTarget: e, | |
}); | |
}, | |
this._dialog, | |
t, | |
); | |
} | |
_setEscapeEvent() { | |
this._isShown | |
? EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, (e) => { | |
this._config.keyboard && "Escape" === e.key | |
? (e.preventDefault(), this.hide()) | |
: this._config.keyboard || | |
"Escape" !== e.key || | |
this._triggerBackdropTransition(); | |
}) | |
: EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1); | |
} | |
_setResizeEvent() { | |
this._isShown | |
? EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog()) | |
: EventHandler.off(window, EVENT_RESIZE); | |
} | |
_hideModal() { | |
(this._element.style.display = "none"), | |
this._element.setAttribute("aria-hidden", !0), | |
this._element.removeAttribute("aria-modal"), | |
this._element.removeAttribute("role"), | |
(this._isTransitioning = !1), | |
this._backdrop.hide(() => { | |
document.body.classList.remove("modal-open"), | |
this._resetAdjustments(), | |
this._scrollBar.reset(), | |
EventHandler.trigger(this._element, EVENT_HIDDEN$3); | |
}); | |
} | |
_showBackdrop(e) { | |
EventHandler.on(this._element, EVENT_CLICK_DISMISS, (e) => { | |
this._ignoreBackdropClick | |
? (this._ignoreBackdropClick = !1) | |
: e.target === e.currentTarget && | |
(!0 === this._config.backdrop | |
? this.hide() | |
: "static" === this._config.backdrop && | |
this._triggerBackdropTransition()); | |
}), | |
this._backdrop.show(e); | |
} | |
_isAnimated() { | |
return this._element.classList.contains("fade"); | |
} | |
_triggerBackdropTransition() { | |
if ( | |
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED).defaultPrevented | |
) | |
return; | |
const { classList: e, scrollHeight: t, style: i } = this._element, | |
n = t > document.documentElement.clientHeight; | |
(!n && "hidden" === i.overflowY) || | |
e.contains("modal-static") || | |
(n || (i.overflowY = "hidden"), | |
e.add("modal-static"), | |
this._queueCallback(() => { | |
e.remove("modal-static"), | |
n || | |
this._queueCallback(() => { | |
i.overflowY = ""; | |
}, this._dialog); | |
}, this._dialog), | |
this._element.focus()); | |
} | |
_adjustDialog() { | |
const e = | |
this._element.scrollHeight > document.documentElement.clientHeight, | |
t = this._scrollBar.getWidth(), | |
i = t > 0; | |
((!i && e && !isRTL()) || (i && !e && isRTL())) && | |
(this._element.style.paddingLeft = `${t}px`), | |
((i && !e && !isRTL()) || (!i && e && isRTL())) && | |
(this._element.style.paddingRight = `${t}px`); | |
} | |
_resetAdjustments() { | |
(this._element.style.paddingLeft = ""), | |
(this._element.style.paddingRight = ""); | |
} | |
static jQueryInterface(e, t) { | |
return this.each(function () { | |
const i = Modal.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === i[e]) throw new TypeError(`No method named "${e}"`); | |
i[e](t); | |
} | |
}); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$2, | |
SELECTOR_DATA_TOGGLE$2, | |
function (e) { | |
const t = getElementFromSelector(this); | |
["A", "AREA"].includes(this.tagName) && e.preventDefault(), | |
EventHandler.one(t, EVENT_SHOW$3, (e) => { | |
e.defaultPrevented || | |
EventHandler.one(t, EVENT_HIDDEN$3, () => { | |
isVisible(this) && this.focus(); | |
}); | |
}); | |
const i = SelectorEngine.findOne(".modal.show"); | |
i && Modal.getInstance(i).hide(), Modal.getOrCreateInstance(t).toggle(this); | |
}, | |
), | |
enableDismissTrigger(Modal), | |
defineJQueryPlugin(Modal); | |
const NAME$5 = "offcanvas", | |
DATA_KEY$5 = "bs.offcanvas", | |
EVENT_KEY$5 = ".bs.offcanvas", | |
DATA_API_KEY$2 = ".data-api", | |
EVENT_LOAD_DATA_API$1 = "load.bs.offcanvas.data-api", | |
ESCAPE_KEY = "Escape", | |
Default$4 = { backdrop: !0, keyboard: !0, scroll: !1 }, | |
DefaultType$4 = { | |
backdrop: "boolean", | |
keyboard: "boolean", | |
scroll: "boolean", | |
}, | |
CLASS_NAME_SHOW$3 = "show", | |
CLASS_NAME_BACKDROP = "offcanvas-backdrop", | |
OPEN_SELECTOR = ".offcanvas.show", | |
EVENT_SHOW$2 = "show.bs.offcanvas", | |
EVENT_SHOWN$2 = "shown.bs.offcanvas", | |
EVENT_HIDE$2 = "hide.bs.offcanvas", | |
EVENT_HIDDEN$2 = "hidden.bs.offcanvas", | |
EVENT_CLICK_DATA_API$1 = "click.bs.offcanvas.data-api", | |
EVENT_KEYDOWN_DISMISS = "keydown.dismiss.bs.offcanvas", | |
SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; | |
class Offcanvas extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._config = this._getConfig(t)), | |
(this._isShown = !1), | |
(this._backdrop = this._initializeBackDrop()), | |
(this._focustrap = this._initializeFocusTrap()), | |
this._addEventListeners(); | |
} | |
static get NAME() { | |
return NAME$5; | |
} | |
static get Default() { | |
return Default$4; | |
} | |
toggle(e) { | |
return this._isShown ? this.hide() : this.show(e); | |
} | |
show(e) { | |
this._isShown || | |
EventHandler.trigger(this._element, EVENT_SHOW$2, { relatedTarget: e }) | |
.defaultPrevented || | |
((this._isShown = !0), | |
(this._element.style.visibility = "visible"), | |
this._backdrop.show(), | |
this._config.scroll || new ScrollBarHelper().hide(), | |
this._element.removeAttribute("aria-hidden"), | |
this._element.setAttribute("aria-modal", !0), | |
this._element.setAttribute("role", "dialog"), | |
this._element.classList.add("show"), | |
this._queueCallback( | |
() => { | |
this._config.scroll || this._focustrap.activate(), | |
EventHandler.trigger(this._element, EVENT_SHOWN$2, { | |
relatedTarget: e, | |
}); | |
}, | |
this._element, | |
!0, | |
)); | |
} | |
hide() { | |
this._isShown && | |
(EventHandler.trigger(this._element, EVENT_HIDE$2).defaultPrevented || | |
(this._focustrap.deactivate(), | |
this._element.blur(), | |
(this._isShown = !1), | |
this._element.classList.remove("show"), | |
this._backdrop.hide(), | |
this._queueCallback( | |
() => { | |
this._element.setAttribute("aria-hidden", !0), | |
this._element.removeAttribute("aria-modal"), | |
this._element.removeAttribute("role"), | |
(this._element.style.visibility = "hidden"), | |
this._config.scroll || new ScrollBarHelper().reset(), | |
EventHandler.trigger(this._element, EVENT_HIDDEN$2); | |
}, | |
this._element, | |
!0, | |
))); | |
} | |
dispose() { | |
this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose(); | |
} | |
_getConfig(e) { | |
return ( | |
(e = { | |
...Default$4, | |
...Manipulator.getDataAttributes(this._element), | |
...("object" == typeof e ? e : {}), | |
}), | |
typeCheckConfig(NAME$5, e, DefaultType$4), | |
e | |
); | |
} | |
_initializeBackDrop() { | |
return new Backdrop({ | |
className: CLASS_NAME_BACKDROP, | |
isVisible: this._config.backdrop, | |
isAnimated: !0, | |
rootElement: this._element.parentNode, | |
clickCallback: () => this.hide(), | |
}); | |
} | |
_initializeFocusTrap() { | |
return new FocusTrap({ trapElement: this._element }); | |
} | |
_addEventListeners() { | |
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (e) => { | |
this._config.keyboard && "Escape" === e.key && this.hide(); | |
}); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Offcanvas.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e] || e.startsWith("_") || "constructor" === e) | |
throw new TypeError(`No method named "${e}"`); | |
t[e](this); | |
} | |
}); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API$1, | |
SELECTOR_DATA_TOGGLE$1, | |
function (e) { | |
const t = getElementFromSelector(this); | |
if ( | |
(["A", "AREA"].includes(this.tagName) && e.preventDefault(), | |
isDisabled(this)) | |
) | |
return; | |
EventHandler.one(t, EVENT_HIDDEN$2, () => { | |
isVisible(this) && this.focus(); | |
}); | |
const i = SelectorEngine.findOne(OPEN_SELECTOR); | |
i && i !== t && Offcanvas.getInstance(i).hide(), | |
Offcanvas.getOrCreateInstance(t).toggle(this); | |
}, | |
), | |
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => | |
SelectorEngine.find(OPEN_SELECTOR).forEach((e) => | |
Offcanvas.getOrCreateInstance(e).show(), | |
), | |
), | |
enableDismissTrigger(Offcanvas), | |
defineJQueryPlugin(Offcanvas); | |
const uriAttributes = new Set([ | |
"background", | |
"cite", | |
"href", | |
"itemtype", | |
"longdesc", | |
"poster", | |
"src", | |
"xlink:href", | |
]), | |
ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i, | |
SAFE_URL_PATTERN = | |
/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i, | |
DATA_URL_PATTERN = | |
/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i, | |
allowedAttribute = (e, t) => { | |
const i = e.nodeName.toLowerCase(); | |
if (t.includes(i)) | |
return ( | |
!uriAttributes.has(i) || | |
Boolean( | |
SAFE_URL_PATTERN.test(e.nodeValue) || | |
DATA_URL_PATTERN.test(e.nodeValue), | |
) | |
); | |
const n = t.filter((e) => e instanceof RegExp); | |
for (let e = 0, t = n.length; e < t; e++) if (n[e].test(i)) return !0; | |
return !1; | |
}, | |
DefaultAllowlist = { | |
"*": ["class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN], | |
a: ["target", "href", "title", "rel"], | |
area: [], | |
b: [], | |
br: [], | |
col: [], | |
code: [], | |
div: [], | |
em: [], | |
hr: [], | |
h1: [], | |
h2: [], | |
h3: [], | |
h4: [], | |
h5: [], | |
h6: [], | |
i: [], | |
img: ["src", "srcset", "alt", "title", "width", "height"], | |
li: [], | |
ol: [], | |
p: [], | |
pre: [], | |
s: [], | |
small: [], | |
span: [], | |
sub: [], | |
sup: [], | |
strong: [], | |
u: [], | |
ul: [], | |
}; | |
function sanitizeHtml(e, t, i) { | |
if (!e.length) return e; | |
if (i && "function" == typeof i) return i(e); | |
const n = new window.DOMParser().parseFromString(e, "text/html"), | |
s = [].concat(...n.body.querySelectorAll("*")); | |
for (let e = 0, i = s.length; e < i; e++) { | |
const i = s[e], | |
n = i.nodeName.toLowerCase(); | |
if (!Object.keys(t).includes(n)) { | |
i.remove(); | |
continue; | |
} | |
const o = [].concat(...i.attributes), | |
r = [].concat(t["*"] || [], t[n] || []); | |
o.forEach((e) => { | |
allowedAttribute(e, r) || i.removeAttribute(e.nodeName); | |
}); | |
} | |
return n.body.innerHTML; | |
} | |
const NAME$4 = "tooltip", | |
DATA_KEY$4 = "bs.tooltip", | |
EVENT_KEY$4 = ".bs.tooltip", | |
CLASS_PREFIX$1 = "bs-tooltip", | |
DISALLOWED_ATTRIBUTES = new Set(["sanitize", "allowList", "sanitizeFn"]), | |
DefaultType$3 = { | |
animation: "boolean", | |
template: "string", | |
title: "(string|element|function)", | |
trigger: "string", | |
delay: "(number|object)", | |
html: "boolean", | |
selector: "(string|boolean)", | |
placement: "(string|function)", | |
offset: "(array|string|function)", | |
container: "(string|element|boolean)", | |
fallbackPlacements: "array", | |
boundary: "(string|element)", | |
customClass: "(string|function)", | |
sanitize: "boolean", | |
sanitizeFn: "(null|function)", | |
allowList: "object", | |
popperConfig: "(null|object|function)", | |
}, | |
AttachmentMap = { | |
AUTO: "auto", | |
TOP: "top", | |
RIGHT: isRTL() ? "left" : "right", | |
BOTTOM: "bottom", | |
LEFT: isRTL() ? "right" : "left", | |
}, | |
Default$3 = { | |
animation: !0, | |
template: | |
'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', | |
trigger: "hover focus", | |
title: "", | |
delay: 0, | |
html: !1, | |
selector: !1, | |
placement: "top", | |
offset: [0, 0], | |
container: !1, | |
fallbackPlacements: ["top", "right", "bottom", "left"], | |
boundary: "clippingParents", | |
customClass: "", | |
sanitize: !0, | |
sanitizeFn: null, | |
allowList: DefaultAllowlist, | |
popperConfig: null, | |
}, | |
Event$2 = { | |
HIDE: "hide.bs.tooltip", | |
HIDDEN: "hidden.bs.tooltip", | |
SHOW: "show.bs.tooltip", | |
SHOWN: "shown.bs.tooltip", | |
INSERTED: "inserted.bs.tooltip", | |
CLICK: "click.bs.tooltip", | |
FOCUSIN: "focusin.bs.tooltip", | |
FOCUSOUT: "focusout.bs.tooltip", | |
MOUSEENTER: "mouseenter.bs.tooltip", | |
MOUSELEAVE: "mouseleave.bs.tooltip", | |
}, | |
CLASS_NAME_FADE$2 = "fade", | |
CLASS_NAME_MODAL = "modal", | |
CLASS_NAME_SHOW$2 = "show", | |
HOVER_STATE_SHOW = "show", | |
HOVER_STATE_OUT = "out", | |
SELECTOR_TOOLTIP_INNER = ".tooltip-inner", | |
SELECTOR_MODAL = ".modal", | |
EVENT_MODAL_HIDE = "hide.bs.modal", | |
TRIGGER_HOVER = "hover", | |
TRIGGER_FOCUS = "focus", | |
TRIGGER_CLICK = "click", | |
TRIGGER_MANUAL = "manual"; | |
class Tooltip extends BaseComponent { | |
constructor(e, t) { | |
if (void 0 === Popper) | |
throw new TypeError( | |
"Bootstrap's tooltips require Popper (https://popper.js.org)", | |
); | |
super(e), | |
(this._isEnabled = !0), | |
(this._timeout = 0), | |
(this._hoverState = ""), | |
(this._activeTrigger = {}), | |
(this._popper = null), | |
(this._config = this._getConfig(t)), | |
(this.tip = null), | |
this._setListeners(); | |
} | |
static get Default() { | |
return Default$3; | |
} | |
static get NAME() { | |
return NAME$4; | |
} | |
static get Event() { | |
return Event$2; | |
} | |
static get DefaultType() { | |
return DefaultType$3; | |
} | |
enable() { | |
this._isEnabled = !0; | |
} | |
disable() { | |
this._isEnabled = !1; | |
} | |
toggleEnabled() { | |
this._isEnabled = !this._isEnabled; | |
} | |
toggle(e) { | |
if (this._isEnabled) | |
if (e) { | |
const t = this._initializeOnDelegatedTarget(e); | |
(t._activeTrigger.click = !t._activeTrigger.click), | |
t._isWithActiveTrigger() ? t._enter(null, t) : t._leave(null, t); | |
} else { | |
if (this.getTipElement().classList.contains("show")) | |
return void this._leave(null, this); | |
this._enter(null, this); | |
} | |
} | |
dispose() { | |
clearTimeout(this._timeout), | |
EventHandler.off( | |
this._element.closest(".modal"), | |
"hide.bs.modal", | |
this._hideModalHandler, | |
), | |
this.tip && this.tip.remove(), | |
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 e = EventHandler.trigger(this._element, this.constructor.Event.SHOW), | |
t = findShadowRoot(this._element), | |
i = | |
null === t | |
? this._element.ownerDocument.documentElement.contains(this._element) | |
: t.contains(this._element); | |
if (e.defaultPrevented || !i) return; | |
"tooltip" === this.constructor.NAME && | |
this.tip && | |
this.getTitle() !== this.tip.querySelector(".tooltip-inner").innerHTML && | |
(this._disposePopper(), this.tip.remove(), (this.tip = null)); | |
const n = this.getTipElement(), | |
s = getUID(this.constructor.NAME); | |
n.setAttribute("id", s), | |
this._element.setAttribute("aria-describedby", s), | |
this._config.animation && n.classList.add("fade"); | |
const o = | |
"function" == typeof this._config.placement | |
? this._config.placement.call(this, n, this._element) | |
: this._config.placement, | |
r = this._getAttachment(o); | |
this._addAttachmentClass(r); | |
const { container: a } = this._config; | |
Data.set(n, this.constructor.DATA_KEY, this), | |
this._element.ownerDocument.documentElement.contains(this.tip) || | |
(a.append(n), | |
EventHandler.trigger(this._element, this.constructor.Event.INSERTED)), | |
this._popper | |
? this._popper.update() | |
: (this._popper = Popper.createPopper( | |
this._element, | |
n, | |
this._getPopperConfig(r), | |
)), | |
n.classList.add("show"); | |
const l = this._resolvePossibleFunction(this._config.customClass); | |
l && n.classList.add(...l.split(" ")), | |
"ontouchstart" in document.documentElement && | |
[].concat(...document.body.children).forEach((e) => { | |
EventHandler.on(e, "mouseover", noop); | |
}); | |
const c = this.tip.classList.contains("fade"); | |
this._queueCallback( | |
() => { | |
const e = this._hoverState; | |
(this._hoverState = null), | |
EventHandler.trigger(this._element, this.constructor.Event.SHOWN), | |
"out" === e && this._leave(null, this); | |
}, | |
this.tip, | |
c, | |
); | |
} | |
hide() { | |
if (!this._popper) return; | |
const e = this.getTipElement(); | |
if ( | |
EventHandler.trigger(this._element, this.constructor.Event.HIDE) | |
.defaultPrevented | |
) | |
return; | |
e.classList.remove("show"), | |
"ontouchstart" in document.documentElement && | |
[] | |
.concat(...document.body.children) | |
.forEach((e) => EventHandler.off(e, "mouseover", noop)), | |
(this._activeTrigger.click = !1), | |
(this._activeTrigger.focus = !1), | |
(this._activeTrigger.hover = !1); | |
const t = this.tip.classList.contains("fade"); | |
this._queueCallback( | |
() => { | |
this._isWithActiveTrigger() || | |
("show" !== this._hoverState && e.remove(), | |
this._cleanTipClass(), | |
this._element.removeAttribute("aria-describedby"), | |
EventHandler.trigger(this._element, this.constructor.Event.HIDDEN), | |
this._disposePopper()); | |
}, | |
this.tip, | |
t, | |
), | |
(this._hoverState = ""); | |
} | |
update() { | |
null !== this._popper && this._popper.update(); | |
} | |
isWithContent() { | |
return Boolean(this.getTitle()); | |
} | |
getTipElement() { | |
if (this.tip) return this.tip; | |
const e = document.createElement("div"); | |
e.innerHTML = this._config.template; | |
const t = e.children[0]; | |
return ( | |
this.setContent(t), | |
t.classList.remove("fade", "show"), | |
(this.tip = t), | |
this.tip | |
); | |
} | |
setContent(e) { | |
this._sanitizeAndSetContent(e, this.getTitle(), ".tooltip-inner"); | |
} | |
_sanitizeAndSetContent(e, t, i) { | |
const n = SelectorEngine.findOne(i, e); | |
t || !n ? this.setElementContent(n, t) : n.remove(); | |
} | |
setElementContent(e, t) { | |
if (null !== e) | |
return isElement(t) | |
? ((t = getElement(t)), | |
void (this._config.html | |
? t.parentNode !== e && ((e.innerHTML = ""), e.append(t)) | |
: (e.textContent = t.textContent))) | |
: void (this._config.html | |
? (this._config.sanitize && | |
(t = sanitizeHtml( | |
t, | |
this._config.allowList, | |
this._config.sanitizeFn, | |
)), | |
(e.innerHTML = t)) | |
: (e.textContent = t)); | |
} | |
getTitle() { | |
const e = | |
this._element.getAttribute("data-bs-original-title") || | |
this._config.title; | |
return this._resolvePossibleFunction(e); | |
} | |
updateAttachment(e) { | |
return "right" === e ? "end" : "left" === e ? "start" : e; | |
} | |
_initializeOnDelegatedTarget(e, t) { | |
return ( | |
t || | |
this.constructor.getOrCreateInstance( | |
e.delegateTarget, | |
this._getDelegateConfig(), | |
) | |
); | |
} | |
_getOffset() { | |
const { offset: e } = this._config; | |
return "string" == typeof e | |
? e.split(",").map((e) => Number.parseInt(e, 10)) | |
: "function" == typeof e | |
? (t) => e(t, this._element) | |
: e; | |
} | |
_resolvePossibleFunction(e) { | |
return "function" == typeof e ? e.call(this._element) : e; | |
} | |
_getPopperConfig(e) { | |
const t = { | |
placement: e, | |
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: "onChange", | |
enabled: !0, | |
phase: "afterWrite", | |
fn: (e) => this._handlePopperPlacementChange(e), | |
}, | |
], | |
onFirstUpdate: (e) => { | |
e.options.placement !== e.placement && | |
this._handlePopperPlacementChange(e); | |
}, | |
}; | |
return { | |
...t, | |
...("function" == typeof this._config.popperConfig | |
? this._config.popperConfig(t) | |
: this._config.popperConfig), | |
}; | |
} | |
_addAttachmentClass(e) { | |
this.getTipElement().classList.add( | |
`${this._getBasicClassPrefix()}-${this.updateAttachment(e)}`, | |
); | |
} | |
_getAttachment(e) { | |
return AttachmentMap[e.toUpperCase()]; | |
} | |
_setListeners() { | |
this._config.trigger.split(" ").forEach((e) => { | |
if ("click" === e) | |
EventHandler.on( | |
this._element, | |
this.constructor.Event.CLICK, | |
this._config.selector, | |
(e) => this.toggle(e), | |
); | |
else if ("manual" !== e) { | |
const t = | |
"hover" === e | |
? this.constructor.Event.MOUSEENTER | |
: this.constructor.Event.FOCUSIN, | |
i = | |
"hover" === e | |
? this.constructor.Event.MOUSELEAVE | |
: this.constructor.Event.FOCUSOUT; | |
EventHandler.on(this._element, t, this._config.selector, (e) => | |
this._enter(e), | |
), | |
EventHandler.on(this._element, i, this._config.selector, (e) => | |
this._leave(e), | |
); | |
} | |
}), | |
(this._hideModalHandler = () => { | |
this._element && this.hide(); | |
}), | |
EventHandler.on( | |
this._element.closest(".modal"), | |
"hide.bs.modal", | |
this._hideModalHandler, | |
), | |
this._config.selector | |
? (this._config = { ...this._config, trigger: "manual", selector: "" }) | |
: this._fixTitle(); | |
} | |
_fixTitle() { | |
const e = this._element.getAttribute("title"), | |
t = typeof this._element.getAttribute("data-bs-original-title"); | |
(e || "string" !== t) && | |
(this._element.setAttribute("data-bs-original-title", e || ""), | |
!e || | |
this._element.getAttribute("aria-label") || | |
this._element.textContent || | |
this._element.setAttribute("aria-label", e), | |
this._element.setAttribute("title", "")); | |
} | |
_enter(e, t) { | |
(t = this._initializeOnDelegatedTarget(e, t)), | |
e && (t._activeTrigger["focusin" === e.type ? "focus" : "hover"] = !0), | |
t.getTipElement().classList.contains("show") || "show" === t._hoverState | |
? (t._hoverState = "show") | |
: (clearTimeout(t._timeout), | |
(t._hoverState = "show"), | |
t._config.delay && t._config.delay.show | |
? (t._timeout = setTimeout(() => { | |
"show" === t._hoverState && t.show(); | |
}, t._config.delay.show)) | |
: t.show()); | |
} | |
_leave(e, t) { | |
(t = this._initializeOnDelegatedTarget(e, t)), | |
e && | |
(t._activeTrigger["focusout" === e.type ? "focus" : "hover"] = | |
t._element.contains(e.relatedTarget)), | |
t._isWithActiveTrigger() || | |
(clearTimeout(t._timeout), | |
(t._hoverState = "out"), | |
t._config.delay && t._config.delay.hide | |
? (t._timeout = setTimeout(() => { | |
"out" === t._hoverState && t.hide(); | |
}, t._config.delay.hide)) | |
: t.hide()); | |
} | |
_isWithActiveTrigger() { | |
for (const e in this._activeTrigger) if (this._activeTrigger[e]) return !0; | |
return !1; | |
} | |
_getConfig(e) { | |
const t = Manipulator.getDataAttributes(this._element); | |
return ( | |
Object.keys(t).forEach((e) => { | |
DISALLOWED_ATTRIBUTES.has(e) && delete t[e]; | |
}), | |
((e = { | |
...this.constructor.Default, | |
...t, | |
...("object" == typeof e && e ? e : {}), | |
}).container = | |
!1 === e.container ? document.body : getElement(e.container)), | |
"number" == typeof e.delay && | |
(e.delay = { show: e.delay, hide: e.delay }), | |
"number" == typeof e.title && (e.title = e.title.toString()), | |
"number" == typeof e.content && (e.content = e.content.toString()), | |
typeCheckConfig(NAME$4, e, this.constructor.DefaultType), | |
e.sanitize && | |
(e.template = sanitizeHtml(e.template, e.allowList, e.sanitizeFn)), | |
e | |
); | |
} | |
_getDelegateConfig() { | |
const e = {}; | |
for (const t in this._config) | |
this.constructor.Default[t] !== this._config[t] && | |
(e[t] = this._config[t]); | |
return e; | |
} | |
_cleanTipClass() { | |
const e = this.getTipElement(), | |
t = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, "g"), | |
i = e.getAttribute("class").match(t); | |
null !== i && | |
i.length > 0 && | |
i.map((e) => e.trim()).forEach((t) => e.classList.remove(t)); | |
} | |
_getBasicClassPrefix() { | |
return "bs-tooltip"; | |
} | |
_handlePopperPlacementChange(e) { | |
const { state: t } = e; | |
t && | |
((this.tip = t.elements.popper), | |
this._cleanTipClass(), | |
this._addAttachmentClass(this._getAttachment(t.placement))); | |
} | |
_disposePopper() { | |
this._popper && (this._popper.destroy(), (this._popper = null)); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Tooltip.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](); | |
} | |
}); | |
} | |
} | |
defineJQueryPlugin(Tooltip); | |
const NAME$3 = "popover", | |
DATA_KEY$3 = "bs.popover", | |
EVENT_KEY$3 = ".bs.popover", | |
CLASS_PREFIX = "bs-popover", | |
Default$2 = { | |
...Tooltip.Default, | |
placement: "right", | |
offset: [0, 8], | |
trigger: "click", | |
content: "", | |
template: | |
'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>', | |
}, | |
DefaultType$2 = { | |
...Tooltip.DefaultType, | |
content: "(string|element|function)", | |
}, | |
Event$1 = { | |
HIDE: "hide.bs.popover", | |
HIDDEN: "hidden.bs.popover", | |
SHOW: "show.bs.popover", | |
SHOWN: "shown.bs.popover", | |
INSERTED: "inserted.bs.popover", | |
CLICK: "click.bs.popover", | |
FOCUSIN: "focusin.bs.popover", | |
FOCUSOUT: "focusout.bs.popover", | |
MOUSEENTER: "mouseenter.bs.popover", | |
MOUSELEAVE: "mouseleave.bs.popover", | |
}, | |
SELECTOR_TITLE = ".popover-header", | |
SELECTOR_CONTENT = ".popover-body"; | |
class Popover extends Tooltip { | |
static get Default() { | |
return Default$2; | |
} | |
static get NAME() { | |
return NAME$3; | |
} | |
static get Event() { | |
return Event$1; | |
} | |
static get DefaultType() { | |
return DefaultType$2; | |
} | |
isWithContent() { | |
return this.getTitle() || this._getContent(); | |
} | |
setContent(e) { | |
this._sanitizeAndSetContent(e, this.getTitle(), SELECTOR_TITLE), | |
this._sanitizeAndSetContent(e, this._getContent(), ".popover-body"); | |
} | |
_getContent() { | |
return this._resolvePossibleFunction(this._config.content); | |
} | |
_getBasicClassPrefix() { | |
return "bs-popover"; | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Popover.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](); | |
} | |
}); | |
} | |
} | |
defineJQueryPlugin(Popover); | |
const NAME$2 = "scrollspy", | |
DATA_KEY$2 = "bs.scrollspy", | |
EVENT_KEY$2 = ".bs.scrollspy", | |
DATA_API_KEY$1 = ".data-api", | |
Default$1 = { offset: 10, method: "auto", target: "" }, | |
DefaultType$1 = { | |
offset: "number", | |
method: "string", | |
target: "(string|element)", | |
}, | |
EVENT_ACTIVATE = "activate.bs.scrollspy", | |
EVENT_SCROLL = "scroll.bs.scrollspy", | |
EVENT_LOAD_DATA_API = "load.bs.scrollspy.data-api", | |
CLASS_NAME_DROPDOWN_ITEM = "dropdown-item", | |
CLASS_NAME_ACTIVE$1 = "active", | |
SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]', | |
SELECTOR_NAV_LIST_GROUP$1 = ".nav, .list-group", | |
SELECTOR_NAV_LINKS = ".nav-link", | |
SELECTOR_NAV_ITEMS = ".nav-item", | |
SELECTOR_LIST_ITEMS = ".list-group-item", | |
SELECTOR_LINK_ITEMS = ".nav-link, .list-group-item, .dropdown-item", | |
SELECTOR_DROPDOWN$1 = ".dropdown", | |
SELECTOR_DROPDOWN_TOGGLE$1 = ".dropdown-toggle", | |
METHOD_OFFSET = "offset", | |
METHOD_POSITION = "position"; | |
class ScrollSpy extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._scrollElement = | |
"BODY" === this._element.tagName ? window : this._element), | |
(this._config = this._getConfig(t)), | |
(this._offsets = []), | |
(this._targets = []), | |
(this._activeTarget = null), | |
(this._scrollHeight = 0), | |
EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process()), | |
this.refresh(), | |
this._process(); | |
} | |
static get Default() { | |
return Default$1; | |
} | |
static get NAME() { | |
return NAME$2; | |
} | |
refresh() { | |
const e = | |
this._scrollElement === this._scrollElement.window | |
? "offset" | |
: "position", | |
t = "auto" === this._config.method ? e : this._config.method, | |
i = "position" === t ? this._getScrollTop() : 0; | |
(this._offsets = []), | |
(this._targets = []), | |
(this._scrollHeight = this._getScrollHeight()), | |
SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target) | |
.map((e) => { | |
const n = getSelectorFromElement(e), | |
s = n ? SelectorEngine.findOne(n) : null; | |
if (s) { | |
const e = s.getBoundingClientRect(); | |
if (e.width || e.height) return [Manipulator[t](s).top + i, n]; | |
} | |
return null; | |
}) | |
.filter((e) => e) | |
.sort((e, t) => e[0] - t[0]) | |
.forEach((e) => { | |
this._offsets.push(e[0]), this._targets.push(e[1]); | |
}); | |
} | |
dispose() { | |
EventHandler.off(this._scrollElement, EVENT_KEY$2), super.dispose(); | |
} | |
_getConfig(e) { | |
return ( | |
((e = { | |
...Default$1, | |
...Manipulator.getDataAttributes(this._element), | |
...("object" == typeof e && e ? e : {}), | |
}).target = getElement(e.target) || document.documentElement), | |
typeCheckConfig(NAME$2, e, DefaultType$1), | |
e | |
); | |
} | |
_getScrollTop() { | |
return this._scrollElement === window | |
? this._scrollElement.pageYOffset | |
: this._scrollElement.scrollTop; | |
} | |
_getScrollHeight() { | |
return ( | |
this._scrollElement.scrollHeight || | |
Math.max( | |
document.body.scrollHeight, | |
document.documentElement.scrollHeight, | |
) | |
); | |
} | |
_getOffsetHeight() { | |
return this._scrollElement === window | |
? window.innerHeight | |
: this._scrollElement.getBoundingClientRect().height; | |
} | |
_process() { | |
const e = this._getScrollTop() + this._config.offset, | |
t = this._getScrollHeight(), | |
i = this._config.offset + t - this._getOffsetHeight(); | |
if ((this._scrollHeight !== t && this.refresh(), e >= i)) { | |
const e = this._targets[this._targets.length - 1]; | |
this._activeTarget !== e && this._activate(e); | |
} else { | |
if (this._activeTarget && e < this._offsets[0] && this._offsets[0] > 0) | |
return (this._activeTarget = null), void this._clear(); | |
for (let t = this._offsets.length; t--; ) | |
this._activeTarget !== this._targets[t] && | |
e >= this._offsets[t] && | |
(void 0 === this._offsets[t + 1] || e < this._offsets[t + 1]) && | |
this._activate(this._targets[t]); | |
} | |
} | |
_activate(e) { | |
(this._activeTarget = e), this._clear(); | |
const t = SELECTOR_LINK_ITEMS.split(",").map( | |
(t) => `${t}[data-bs-target="${e}"],${t}[href="${e}"]`, | |
), | |
i = SelectorEngine.findOne(t.join(","), this._config.target); | |
i.classList.add("active"), | |
i.classList.contains("dropdown-item") | |
? SelectorEngine.findOne( | |
".dropdown-toggle", | |
i.closest(".dropdown"), | |
).classList.add("active") | |
: SelectorEngine.parents(i, ".nav, .list-group").forEach((e) => { | |
SelectorEngine.prev(e, ".nav-link, .list-group-item").forEach((e) => | |
e.classList.add("active"), | |
), | |
SelectorEngine.prev(e, ".nav-item").forEach((e) => { | |
SelectorEngine.children(e, ".nav-link").forEach((e) => | |
e.classList.add("active"), | |
); | |
}); | |
}), | |
EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, { | |
relatedTarget: e, | |
}); | |
} | |
_clear() { | |
SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target) | |
.filter((e) => e.classList.contains("active")) | |
.forEach((e) => e.classList.remove("active")); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = ScrollSpy.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](); | |
} | |
}); | |
} | |
} | |
EventHandler.on(window, EVENT_LOAD_DATA_API, () => { | |
SelectorEngine.find(SELECTOR_DATA_SPY).forEach((e) => new ScrollSpy(e)); | |
}), | |
defineJQueryPlugin(ScrollSpy); | |
const NAME$1 = "tab", | |
DATA_KEY$1 = "bs.tab", | |
EVENT_KEY$1 = ".bs.tab", | |
DATA_API_KEY = ".data-api", | |
EVENT_HIDE$1 = "hide.bs.tab", | |
EVENT_HIDDEN$1 = "hidden.bs.tab", | |
EVENT_SHOW$1 = "show.bs.tab", | |
EVENT_SHOWN$1 = "shown.bs.tab", | |
EVENT_CLICK_DATA_API = "click.bs.tab.data-api", | |
CLASS_NAME_DROPDOWN_MENU = "dropdown-menu", | |
CLASS_NAME_ACTIVE = "active", | |
CLASS_NAME_FADE$1 = "fade", | |
CLASS_NAME_SHOW$1 = "show", | |
SELECTOR_DROPDOWN = ".dropdown", | |
SELECTOR_NAV_LIST_GROUP = ".nav, .list-group", | |
SELECTOR_ACTIVE = ".active", | |
SELECTOR_ACTIVE_UL = ":scope > li > .active", | |
SELECTOR_DATA_TOGGLE = | |
'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', | |
SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle", | |
SELECTOR_DROPDOWN_ACTIVE_CHILD = ":scope > .dropdown-menu .active"; | |
class Tab extends BaseComponent { | |
static get NAME() { | |
return "tab"; | |
} | |
show() { | |
if ( | |
this._element.parentNode && | |
this._element.parentNode.nodeType === Node.ELEMENT_NODE && | |
this._element.classList.contains("active") | |
) | |
return; | |
let e; | |
const t = getElementFromSelector(this._element), | |
i = this._element.closest(".nav, .list-group"); | |
if (i) { | |
const t = | |
"UL" === i.nodeName || "OL" === i.nodeName | |
? SELECTOR_ACTIVE_UL | |
: ".active"; | |
(e = SelectorEngine.find(t, i)), (e = e[e.length - 1]); | |
} | |
const n = e | |
? EventHandler.trigger(e, EVENT_HIDE$1, { relatedTarget: this._element }) | |
: null; | |
if ( | |
EventHandler.trigger(this._element, EVENT_SHOW$1, { relatedTarget: e }) | |
.defaultPrevented || | |
(null !== n && n.defaultPrevented) | |
) | |
return; | |
this._activate(this._element, i); | |
const s = () => { | |
EventHandler.trigger(e, EVENT_HIDDEN$1, { relatedTarget: this._element }), | |
EventHandler.trigger(this._element, EVENT_SHOWN$1, { | |
relatedTarget: e, | |
}); | |
}; | |
t ? this._activate(t, t.parentNode, s) : s(); | |
} | |
_activate(e, t, i) { | |
const n = ( | |
!t || ("UL" !== t.nodeName && "OL" !== t.nodeName) | |
? SelectorEngine.children(t, ".active") | |
: SelectorEngine.find(SELECTOR_ACTIVE_UL, t) | |
)[0], | |
s = i && n && n.classList.contains("fade"), | |
o = () => this._transitionComplete(e, n, i); | |
n && s ? (n.classList.remove("show"), this._queueCallback(o, e, !0)) : o(); | |
} | |
_transitionComplete(e, t, i) { | |
if (t) { | |
t.classList.remove("active"); | |
const e = SelectorEngine.findOne( | |
SELECTOR_DROPDOWN_ACTIVE_CHILD, | |
t.parentNode, | |
); | |
e && e.classList.remove("active"), | |
"tab" === t.getAttribute("role") && t.setAttribute("aria-selected", !1); | |
} | |
e.classList.add("active"), | |
"tab" === e.getAttribute("role") && e.setAttribute("aria-selected", !0), | |
reflow(e), | |
e.classList.contains("fade") && e.classList.add("show"); | |
let n = e.parentNode; | |
if ( | |
(n && "LI" === n.nodeName && (n = n.parentNode), | |
n && n.classList.contains("dropdown-menu")) | |
) { | |
const t = e.closest(".dropdown"); | |
t && | |
SelectorEngine.find(".dropdown-toggle", t).forEach((e) => | |
e.classList.add("active"), | |
), | |
e.setAttribute("aria-expanded", !0); | |
} | |
i && i(); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Tab.getOrCreateInstance(this); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](); | |
} | |
}); | |
} | |
} | |
EventHandler.on( | |
document, | |
EVENT_CLICK_DATA_API, | |
SELECTOR_DATA_TOGGLE, | |
function (e) { | |
["A", "AREA"].includes(this.tagName) && e.preventDefault(), | |
isDisabled(this) || Tab.getOrCreateInstance(this).show(); | |
}, | |
), | |
defineJQueryPlugin(Tab); | |
const NAME = "toast", | |
DATA_KEY = "bs.toast", | |
EVENT_KEY = ".bs.toast", | |
EVENT_MOUSEOVER = "mouseover.bs.toast", | |
EVENT_MOUSEOUT = "mouseout.bs.toast", | |
EVENT_FOCUSIN = "focusin.bs.toast", | |
EVENT_FOCUSOUT = "focusout.bs.toast", | |
EVENT_HIDE = "hide.bs.toast", | |
EVENT_HIDDEN = "hidden.bs.toast", | |
EVENT_SHOW = "show.bs.toast", | |
EVENT_SHOWN = "shown.bs.toast", | |
CLASS_NAME_FADE = "fade", | |
CLASS_NAME_HIDE = "hide", | |
CLASS_NAME_SHOW = "show", | |
CLASS_NAME_SHOWING = "showing", | |
DefaultType = { animation: "boolean", autohide: "boolean", delay: "number" }, | |
Default = { animation: !0, autohide: !0, delay: 5e3 }; | |
class Toast extends BaseComponent { | |
constructor(e, t) { | |
super(e), | |
(this._config = this._getConfig(t)), | |
(this._timeout = null), | |
(this._hasMouseInteraction = !1), | |
(this._hasKeyboardInteraction = !1), | |
this._setListeners(); | |
} | |
static get DefaultType() { | |
return DefaultType; | |
} | |
static get Default() { | |
return Default; | |
} | |
static get NAME() { | |
return NAME; | |
} | |
show() { | |
EventHandler.trigger(this._element, EVENT_SHOW).defaultPrevented || | |
(this._clearTimeout(), | |
this._config.animation && this._element.classList.add("fade"), | |
this._element.classList.remove("hide"), | |
reflow(this._element), | |
this._element.classList.add("show"), | |
this._element.classList.add("showing"), | |
this._queueCallback( | |
() => { | |
this._element.classList.remove("showing"), | |
EventHandler.trigger(this._element, EVENT_SHOWN), | |
this._maybeScheduleHide(); | |
}, | |
this._element, | |
this._config.animation, | |
)); | |
} | |
hide() { | |
this._element.classList.contains("show") && | |
(EventHandler.trigger(this._element, EVENT_HIDE).defaultPrevented || | |
(this._element.classList.add("showing"), | |
this._queueCallback( | |
() => { | |
this._element.classList.add("hide"), | |
this._element.classList.remove("showing"), | |
this._element.classList.remove("show"), | |
EventHandler.trigger(this._element, EVENT_HIDDEN); | |
}, | |
this._element, | |
this._config.animation, | |
))); | |
} | |
dispose() { | |
this._clearTimeout(), | |
this._element.classList.contains("show") && | |
this._element.classList.remove("show"), | |
super.dispose(); | |
} | |
_getConfig(e) { | |
return ( | |
(e = { | |
...Default, | |
...Manipulator.getDataAttributes(this._element), | |
...("object" == typeof e && e ? e : {}), | |
}), | |
typeCheckConfig(NAME, e, this.constructor.DefaultType), | |
e | |
); | |
} | |
_maybeScheduleHide() { | |
this._config.autohide && | |
(this._hasMouseInteraction || | |
this._hasKeyboardInteraction || | |
(this._timeout = setTimeout(() => { | |
this.hide(); | |
}, this._config.delay))); | |
} | |
_onInteraction(e, t) { | |
switch (e.type) { | |
case "mouseover": | |
case "mouseout": | |
this._hasMouseInteraction = t; | |
break; | |
case "focusin": | |
case "focusout": | |
this._hasKeyboardInteraction = t; | |
} | |
if (t) return void this._clearTimeout(); | |
const i = e.relatedTarget; | |
this._element === i || | |
this._element.contains(i) || | |
this._maybeScheduleHide(); | |
} | |
_setListeners() { | |
EventHandler.on(this._element, EVENT_MOUSEOVER, (e) => | |
this._onInteraction(e, !0), | |
), | |
EventHandler.on(this._element, EVENT_MOUSEOUT, (e) => | |
this._onInteraction(e, !1), | |
), | |
EventHandler.on(this._element, EVENT_FOCUSIN, (e) => | |
this._onInteraction(e, !0), | |
), | |
EventHandler.on(this._element, EVENT_FOCUSOUT, (e) => | |
this._onInteraction(e, !1), | |
); | |
} | |
_clearTimeout() { | |
clearTimeout(this._timeout), (this._timeout = null); | |
} | |
static jQueryInterface(e) { | |
return this.each(function () { | |
const t = Toast.getOrCreateInstance(this, e); | |
if ("string" == typeof e) { | |
if (void 0 === t[e]) throw new TypeError(`No method named "${e}"`); | |
t[e](this); | |
} | |
}); | |
} | |
} | |
enableDismissTrigger(Toast), defineJQueryPlugin(Toast); | |
export { | |
Alert, | |
Button, | |
Carousel, | |
Collapse, | |
Dropdown, | |
Modal, | |
Offcanvas, | |
Popover, | |
ScrollSpy, | |
Tab, | |
Toast, | |
Tooltip, | |
}; | |
//# sourceMappingURL=bootstrap.esm.min.js.map | |