UNPKG

@hummingbirdui/hummingbird

Version:

An open-source system designed for rapid development, without sacrificing the granular control of utility-first CSS.

1,234 lines 157 kB
(function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("@popperjs/core")) : typeof define === "function" && define.amd ? define(["exports", "@popperjs/core"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.hummingbird = {}, global.Popper)); })(this, function(exports2, require$$0) { "use strict"; function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var alert$1 = { exports: {} }; var baseComponent$1 = { exports: {} }; var data$1 = { exports: {} }; /*! * Bootstrap data.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var data = data$1.exports; var hasRequiredData; function requireData() { if (hasRequiredData) return data$1.exports; hasRequiredData = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(); })(data, function() { const elementMap = /* @__PURE__ */ new Map(); const data2 = { set(element, key, instance) { if (!elementMap.has(element)) { elementMap.set(element, /* @__PURE__ */ new Map()); } const instanceMap = elementMap.get(element); if (!instanceMap.has(key) && instanceMap.size !== 0) { console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); return; } instanceMap.set(key, instance); }, get(element, key) { if (elementMap.has(element)) { return elementMap.get(element).get(key) || null; } return null; }, remove(element, key) { if (!elementMap.has(element)) { return; } const instanceMap = elementMap.get(element); instanceMap.delete(key); if (instanceMap.size === 0) { elementMap.delete(element); } } }; return data2; }); })(data$1); return data$1.exports; } var eventHandler$1 = { exports: {} }; var util$1 = { exports: {} }; /*! * Bootstrap index.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var util = util$1.exports; var hasRequiredUtil; function requireUtil() { if (hasRequiredUtil) return util$1.exports; hasRequiredUtil = 1; (function(module2, exports3) { (function(global, factory) { factory(exports3); })(util, function(exports4) { const MAX_UID = 1e6; const MILLISECONDS_MULTIPLIER = 1e3; const TRANSITION_END = "transitionend"; const parseSelector = (selector) => { if (selector && window.CSS && window.CSS.escape) { selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); } return selector; }; const toType = (object) => { if (object === null || object === void 0) { return `${object}`; } return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); }; const getUID = (prefix) => { do { prefix += Math.floor(Math.random() * MAX_UID); } while (document.getElementById(prefix)); return prefix; }; const getTransitionDurationFromElement = (element) => { if (!element) { return 0; } let { transitionDuration, transitionDelay } = window.getComputedStyle(element); const floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDelay = Number.parseFloat(transitionDelay); if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } transitionDuration = transitionDuration.split(",")[0]; transitionDelay = transitionDelay.split(",")[0]; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }; const triggerTransitionEnd = (element) => { element.dispatchEvent(new Event(TRANSITION_END)); }; const isElement = (object) => { if (!object || typeof object !== "object") { return false; } if (typeof object.jquery !== "undefined") { object = object[0]; } return typeof object.nodeType !== "undefined"; }; const getElement = (object) => { if (isElement(object)) { return object.jquery ? object[0] : object; } if (typeof object === "string" && object.length > 0) { return document.querySelector(parseSelector(object)); } return null; }; const isVisible = (element) => { if (!isElement(element) || element.getClientRects().length === 0) { return false; } const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible"; const closedDetails = element.closest("details:not([open])"); if (!closedDetails) { return elementIsVisible; } if (closedDetails !== element) { const summary = element.closest("summary"); if (summary && summary.parentNode !== closedDetails) { return false; } if (summary === null) { return false; } } return elementIsVisible; }; const isDisabled = (element) => { if (!element || element.nodeType !== Node.ELEMENT_NODE) { return true; } if (element.classList.contains("disabled")) { return true; } if (typeof element.disabled !== "undefined") { return element.disabled; } return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false"; }; const findShadowRoot = (element) => { if (!document.documentElement.attachShadow) { return null; } if (typeof element.getRootNode === "function") { const root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } if (element instanceof ShadowRoot) { return element; } if (!element.parentNode) { return null; } return findShadowRoot(element.parentNode); }; const noop = () => { }; const reflow = (element) => { element.offsetHeight; }; const getjQuery = () => { if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) { return window.jQuery; } return null; }; const DOMContentLoadedCallbacks = []; const onDOMContentLoaded = (callback) => { if (document.readyState === "loading") { if (!DOMContentLoadedCallbacks.length) { document.addEventListener("DOMContentLoaded", () => { for (const callback2 of DOMContentLoadedCallbacks) { callback2(); } }); } DOMContentLoadedCallbacks.push(callback); } else { callback(); } }; const isRTL = () => document.documentElement.dir === "rtl"; const defineJQueryPlugin = (plugin) => { onDOMContentLoaded(() => { const $ = getjQuery(); if ($) { const name = plugin.NAME; const JQUERY_NO_CONFLICT = $.fn[name]; $.fn[name] = plugin.jQueryInterface; $.fn[name].Constructor = plugin; $.fn[name].noConflict = () => { $.fn[name] = JQUERY_NO_CONFLICT; return plugin.jQueryInterface; }; } }); }; const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { return typeof possibleCallback === "function" ? possibleCallback.call(...args) : defaultValue; }; const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { if (!waitForTransition) { execute(callback); return; } const durationPadding = 5; const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; let called = false; const handler = ({ target }) => { if (target !== transitionElement) { return; } called = true; transitionElement.removeEventListener(TRANSITION_END, handler); execute(callback); }; transitionElement.addEventListener(TRANSITION_END, handler); setTimeout(() => { if (!called) { triggerTransitionEnd(transitionElement); } }, emulatedDuration); }; const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { const listLength = list.length; let index = list.indexOf(activeElement); if (index === -1) { return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; } index += shouldGetNext ? 1 : -1; if (isCycleAllowed) { index = (index + listLength) % listLength; } return list[Math.max(0, Math.min(index, listLength - 1))]; }; exports4.defineJQueryPlugin = defineJQueryPlugin; exports4.execute = execute; exports4.executeAfterTransition = executeAfterTransition; exports4.findShadowRoot = findShadowRoot; exports4.getElement = getElement; exports4.getNextActiveElement = getNextActiveElement; exports4.getTransitionDurationFromElement = getTransitionDurationFromElement; exports4.getUID = getUID; exports4.getjQuery = getjQuery; exports4.isDisabled = isDisabled; exports4.isElement = isElement; exports4.isRTL = isRTL; exports4.isVisible = isVisible; exports4.noop = noop; exports4.onDOMContentLoaded = onDOMContentLoaded; exports4.parseSelector = parseSelector; exports4.reflow = reflow; exports4.toType = toType; exports4.triggerTransitionEnd = triggerTransitionEnd; Object.defineProperty(exports4, Symbol.toStringTag, { value: "Module" }); }); })(util$1, util$1.exports); return util$1.exports; } /*! * Bootstrap event-handler.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var eventHandler = eventHandler$1.exports; var hasRequiredEventHandler; function requireEventHandler() { if (hasRequiredEventHandler) return eventHandler$1.exports; hasRequiredEventHandler = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireUtil()); })(eventHandler, function(index_js) { const namespaceRegex = /[^.]*(?=\..*)\.|.*/; const stripNameRegex = /\..*/; const stripUidRegex = /::\d+$/; const eventRegistry = {}; let uidEvent = 1; const customEvents = { mouseenter: "mouseover", mouseleave: "mouseout" }; const nativeEvents = /* @__PURE__ */ 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 makeEventUid(element, uid) { return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; } function getElementEvents(element) { const uid = makeEventUid(element); element.uidEvent = uid; eventRegistry[uid] = eventRegistry[uid] || {}; return eventRegistry[uid]; } function bootstrapHandler(element, fn) { return function handler(event) { hydrateObj(event, { delegateTarget: element }); if (handler.oneOff) { EventHandler.off(element, event.type, fn); } return fn.apply(element, [event]); }; } function bootstrapDelegationHandler(element, selector, fn) { return function handler(event) { const domElements = element.querySelectorAll(selector); for (let { target } = event; target && target !== this; target = target.parentNode) { for (const domElement of domElements) { if (domElement !== target) { continue; } hydrateObj(event, { delegateTarget: target }); if (handler.oneOff) { EventHandler.off(element, event.type, selector, fn); } return fn.apply(target, [event]); } } }; } function findHandler(events, callable, delegationSelector = null) { return Object.values(events).find((event) => event.callable === callable && event.delegationSelector === delegationSelector); } function normalizeParameters(originalTypeEvent, handler, delegationFunction) { const isDelegated = typeof handler === "string"; const callable = isDelegated ? delegationFunction : handler || delegationFunction; let typeEvent = getTypeEvent(originalTypeEvent); if (!nativeEvents.has(typeEvent)) { typeEvent = originalTypeEvent; } return [isDelegated, callable, typeEvent]; } function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { if (typeof originalTypeEvent !== "string" || !element) { return; } let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); if (originalTypeEvent in customEvents) { const wrapFunction = (fn2) => { return function(event) { if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { return fn2.call(this, event); } }; }; callable = wrapFunction(callable); } const events = getElementEvents(element); const handlers = events[typeEvent] || (events[typeEvent] = {}); const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); if (previousFunction) { previousFunction.oneOff = previousFunction.oneOff && oneOff; return; } const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, "")); const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); fn.delegationSelector = isDelegated ? handler : null; fn.callable = callable; fn.oneOff = oneOff; fn.uidEvent = uid; handlers[uid] = fn; element.addEventListener(typeEvent, fn, isDelegated); } function removeHandler(element, events, typeEvent, handler, delegationSelector) { const fn = findHandler(events[typeEvent], handler, delegationSelector); if (!fn) { return; } element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); delete events[typeEvent][fn.uidEvent]; } function removeNamespacedHandlers(element, events, typeEvent, namespace) { const storeElementEvent = events[typeEvent] || {}; for (const [handlerKey, event] of Object.entries(storeElementEvent)) { if (handlerKey.includes(namespace)) { removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); } } } function getTypeEvent(event) { event = event.replace(stripNameRegex, ""); return customEvents[event] || event; } const EventHandler = { on(element, event, handler, delegationFunction) { addHandler(element, event, handler, delegationFunction, false); }, one(element, event, handler, delegationFunction) { addHandler(element, event, handler, delegationFunction, true); }, off(element, originalTypeEvent, handler, delegationFunction) { if (typeof originalTypeEvent !== "string" || !element) { return; } const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); const inNamespace = typeEvent !== originalTypeEvent; const events = getElementEvents(element); const storeElementEvent = events[typeEvent] || {}; const isNamespace = originalTypeEvent.startsWith("."); if (typeof callable !== "undefined") { if (!Object.keys(storeElementEvent).length) { return; } removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); return; } if (isNamespace) { for (const elementEvent of Object.keys(events)) { removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); } } for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { const handlerKey = keyHandlers.replace(stripUidRegex, ""); if (!inNamespace || originalTypeEvent.includes(handlerKey)) { removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); } } }, trigger(element, event, args) { if (typeof event !== "string" || !element) { return null; } const $ = index_js.getjQuery(); const typeEvent = getTypeEvent(event); const inNamespace = event !== typeEvent; let jQueryEvent = null; let bubbles = true; let nativeDispatch = true; let defaultPrevented = false; if (inNamespace && $) { jQueryEvent = $.Event(event, args); $(element).trigger(jQueryEvent); bubbles = !jQueryEvent.isPropagationStopped(); nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); defaultPrevented = jQueryEvent.isDefaultPrevented(); } const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args); if (defaultPrevented) { evt.preventDefault(); } if (nativeDispatch) { element.dispatchEvent(evt); } if (evt.defaultPrevented && jQueryEvent) { jQueryEvent.preventDefault(); } return evt; } }; function hydrateObj(obj, meta = {}) { for (const [key, value] of Object.entries(meta)) { try { obj[key] = value; } catch (_unused) { Object.defineProperty(obj, key, { configurable: true, get() { return value; } }); } } return obj; } return EventHandler; }); })(eventHandler$1); return eventHandler$1.exports; } var config$1 = { exports: {} }; var manipulator$1 = { exports: {} }; /*! * Bootstrap manipulator.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var manipulator = manipulator$1.exports; var hasRequiredManipulator; function requireManipulator() { if (hasRequiredManipulator) return manipulator$1.exports; hasRequiredManipulator = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(); })(manipulator, function() { function normalizeData(value) { if (value === "true") { return true; } if (value === "false") { return false; } if (value === Number(value).toString()) { return Number(value); } if (value === "" || value === "null") { return null; } if (typeof value !== "string") { return value; } try { return JSON.parse(decodeURIComponent(value)); } catch (_unused) { return value; } } function normalizeDataKey(key) { return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`); } const Manipulator = { setDataAttribute(element, key, value) { element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); }, removeDataAttribute(element, key) { element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); }, getDataAttributes(element) { if (!element) { return {}; } const attributes = {}; const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig")); for (const key of bsKeys) { let pureKey = key.replace(/^bs/, ""); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1); attributes[pureKey] = normalizeData(element.dataset[key]); } return attributes; }, getDataAttribute(element, key) { return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); } }; return Manipulator; }); })(manipulator$1); return manipulator$1.exports; } /*! * Bootstrap config.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var config = config$1.exports; var hasRequiredConfig; function requireConfig() { if (hasRequiredConfig) return config$1.exports; hasRequiredConfig = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireManipulator(), requireUtil()); })(config, function(Manipulator, index_js) { class Config { // Getters static get Default() { return {}; } static get DefaultType() { return {}; } static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!'); } _getConfig(config2) { config2 = this._mergeConfigObj(config2); config2 = this._configAfterMerge(config2); this._typeCheckConfig(config2); return config2; } _configAfterMerge(config2) { return config2; } _mergeConfigObj(config2, element) { const jsonConfig = index_js.isElement(element) ? Manipulator.getDataAttribute(element, "config") : {}; return { ...this.constructor.Default, ...typeof jsonConfig === "object" ? jsonConfig : {}, ...index_js.isElement(element) ? Manipulator.getDataAttributes(element) : {}, ...typeof config2 === "object" ? config2 : {} }; } _typeCheckConfig(config2, configTypes = this.constructor.DefaultType) { for (const [property, expectedTypes] of Object.entries(configTypes)) { const value = config2[property]; const valueType = index_js.isElement(value) ? "element" : index_js.toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); } } } } return Config; }); })(config$1); return config$1.exports; } /*! * Bootstrap base-component.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var baseComponent = baseComponent$1.exports; var hasRequiredBaseComponent; function requireBaseComponent() { if (hasRequiredBaseComponent) return baseComponent$1.exports; hasRequiredBaseComponent = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireData(), requireEventHandler(), requireConfig(), requireUtil()); })(baseComponent, function(Data, EventHandler, Config, index_js) { const VERSION = "5.3.8"; class BaseComponent extends Config { constructor(element, config2) { super(); element = index_js.getElement(element); if (!element) { return; } this._element = element; this._config = this._getConfig(config2); Data.set(this._element, this.constructor.DATA_KEY, this); } // Public dispose() { Data.remove(this._element, this.constructor.DATA_KEY); EventHandler.off(this._element, this.constructor.EVENT_KEY); for (const propertyName of Object.getOwnPropertyNames(this)) { this[propertyName] = null; } } // Private _queueCallback(callback, element, isAnimated = true) { index_js.executeAfterTransition(callback, element, isAnimated); } _getConfig(config2) { config2 = this._mergeConfigObj(config2, this._element); config2 = this._configAfterMerge(config2); this._typeCheckConfig(config2); return config2; } // Static static getInstance(element) { return Data.get(index_js.getElement(element), this.DATA_KEY); } static getOrCreateInstance(element, config2 = {}) { return this.getInstance(element) || new this(element, typeof config2 === "object" ? config2 : null); } static get VERSION() { return VERSION; } static get DATA_KEY() { return `bs.${this.NAME}`; } static get EVENT_KEY() { return `.${this.DATA_KEY}`; } static eventName(name) { return `${name}${this.EVENT_KEY}`; } } return BaseComponent; }); })(baseComponent$1); return baseComponent$1.exports; } var componentFunctions$1 = { exports: {} }; var selectorEngine$1 = { exports: {} }; /*! * Bootstrap selector-engine.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var selectorEngine = selectorEngine$1.exports; var hasRequiredSelectorEngine; function requireSelectorEngine() { if (hasRequiredSelectorEngine) return selectorEngine$1.exports; hasRequiredSelectorEngine = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireUtil()); })(selectorEngine, function(index_js) { const getSelector = (element) => { let selector = element.getAttribute("data-bs-target"); if (!selector || selector === "#") { let hrefAttribute = element.getAttribute("href"); if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) { return null; } if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) { hrefAttribute = `#${hrefAttribute.split("#")[1]}`; } selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null; } return selector ? selector.split(",").map((sel) => index_js.parseSelector(sel)).join(",") : null; }; const SelectorEngine = { find(selector, element = document.documentElement) { return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); }, findOne(selector, element = document.documentElement) { return Element.prototype.querySelector.call(element, selector); }, children(element, selector) { return [].concat(...element.children).filter((child) => child.matches(selector)); }, parents(element, selector) { const parents = []; let ancestor = element.parentNode.closest(selector); while (ancestor) { parents.push(ancestor); ancestor = ancestor.parentNode.closest(selector); } return parents; }, prev(element, selector) { let previous = element.previousElementSibling; while (previous) { if (previous.matches(selector)) { return [previous]; } previous = previous.previousElementSibling; } return []; }, // TODO: this is now unused; remove later along with prev() next(element, selector) { let next = element.nextElementSibling; while (next) { if (next.matches(selector)) { return [next]; } next = next.nextElementSibling; } return []; }, focusableChildren(element) { const focusables = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((selector) => `${selector}:not([tabindex^="-"])`).join(","); return this.find(focusables, element).filter((el) => !index_js.isDisabled(el) && index_js.isVisible(el)); }, getSelectorFromElement(element) { const selector = getSelector(element); if (selector) { return SelectorEngine.findOne(selector) ? selector : null; } return null; }, getElementFromSelector(element) { const selector = getSelector(element); return selector ? SelectorEngine.findOne(selector) : null; }, getMultipleElementsFromSelector(element) { const selector = getSelector(element); return selector ? SelectorEngine.find(selector) : []; } }; return SelectorEngine; }); })(selectorEngine$1); return selectorEngine$1.exports; } /*! * Bootstrap component-functions.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var componentFunctions = componentFunctions$1.exports; var hasRequiredComponentFunctions; function requireComponentFunctions() { if (hasRequiredComponentFunctions) return componentFunctions$1.exports; hasRequiredComponentFunctions = 1; (function(module2, exports3) { (function(global, factory) { factory(exports3, requireEventHandler(), requireSelectorEngine(), requireUtil()); })(componentFunctions, function(exports4, EventHandler, SelectorEngine, index_js) { const enableDismissTrigger = (component, method = "hide") => { const clickEvent = `click.dismiss${component.EVENT_KEY}`; const name = component.NAME; EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) { if (["A", "AREA"].includes(this.tagName)) { event.preventDefault(); } if (index_js.isDisabled(this)) { return; } const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); const instance = component.getOrCreateInstance(target); instance[method](); }); }; exports4.enableDismissTrigger = enableDismissTrigger; Object.defineProperty(exports4, Symbol.toStringTag, { value: "Module" }); }); })(componentFunctions$1, componentFunctions$1.exports); return componentFunctions$1.exports; } /*! * Bootstrap alert.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var alert = alert$1.exports; var hasRequiredAlert; function requireAlert() { if (hasRequiredAlert) return alert$1.exports; hasRequiredAlert = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireBaseComponent(), requireEventHandler(), requireComponentFunctions(), requireUtil()); })(alert, function(BaseComponent, EventHandler, componentFunctions_js, index_js) { const NAME = "alert"; const DATA_KEY = "bs.alert"; const EVENT_KEY = `.${DATA_KEY}`; const EVENT_CLOSE = `close${EVENT_KEY}`; const EVENT_CLOSED = `closed${EVENT_KEY}`; const CLASS_NAME_FADE = "fade"; const CLASS_NAME_SHOW = "show"; class Alert2 extends BaseComponent { // Getters static get NAME() { return NAME; } // Public close() { const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); if (closeEvent.defaultPrevented) { return; } this._element.classList.remove(CLASS_NAME_SHOW); const isAnimated = this._element.classList.contains(CLASS_NAME_FADE); this._queueCallback(() => this._destroyElement(), this._element, isAnimated); } // Private _destroyElement() { this._element.remove(); EventHandler.trigger(this._element, EVENT_CLOSED); this.dispose(); } // Static static jQueryInterface(config2) { return this.each(function() { const data2 = Alert2.getOrCreateInstance(this); if (typeof config2 !== "string") { return; } if (data2[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") { throw new TypeError(`No method named "${config2}"`); } data2[config2](this); }); } } componentFunctions_js.enableDismissTrigger(Alert2, "close"); index_js.defineJQueryPlugin(Alert2); return Alert2; }); })(alert$1); return alert$1.exports; } var alertExports = requireAlert(); const BsAlert = /* @__PURE__ */ getDefaultExportFromCjs(alertExports); var AlertEvents = /* @__PURE__ */ ((AlertEvents2) => { AlertEvents2["close"] = "close.bs.alert"; AlertEvents2["closed"] = "closed.bs.alert"; return AlertEvents2; })(AlertEvents || {}); const Alert = BsAlert; Alert.Events = AlertEvents; var button$1 = { exports: {} }; /*! * Bootstrap button.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var button = button$1.exports; var hasRequiredButton; function requireButton() { if (hasRequiredButton) return button$1.exports; hasRequiredButton = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireBaseComponent(), requireEventHandler(), requireUtil()); })(button, function(BaseComponent, EventHandler, index_js) { const NAME = "button"; const DATA_KEY = "bs.button"; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = ".data-api"; const CLASS_NAME_ACTIVE = "active"; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]'; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; class Button2 extends BaseComponent { // Getters static get NAME() { return NAME; } // Public toggle() { this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE)); } // Static static jQueryInterface(config2) { return this.each(function() { const data2 = Button2.getOrCreateInstance(this); if (config2 === "toggle") { data2[config2](); } }); } } EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => { event.preventDefault(); const button2 = event.target.closest(SELECTOR_DATA_TOGGLE); const data2 = Button2.getOrCreateInstance(button2); data2.toggle(); }); index_js.defineJQueryPlugin(Button2); return Button2; }); })(button$1); return button$1.exports; } var buttonExports = requireButton(); const BsButton = /* @__PURE__ */ getDefaultExportFromCjs(buttonExports); const Button = BsButton; var carousel$1 = { exports: {} }; var swipe$1 = { exports: {} }; /*! * Bootstrap swipe.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var swipe = swipe$1.exports; var hasRequiredSwipe; function requireSwipe() { if (hasRequiredSwipe) return swipe$1.exports; hasRequiredSwipe = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireEventHandler(), requireConfig(), requireUtil()); })(swipe, function(EventHandler, Config, index_js) { const NAME = "swipe"; const EVENT_KEY = ".bs.swipe"; const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`; const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`; const EVENT_TOUCHEND = `touchend${EVENT_KEY}`; const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`; const EVENT_POINTERUP = `pointerup${EVENT_KEY}`; const POINTER_TYPE_TOUCH = "touch"; const POINTER_TYPE_PEN = "pen"; const CLASS_NAME_POINTER_EVENT = "pointer-event"; const SWIPE_THRESHOLD = 40; const Default = { endCallback: null, leftCallback: null, rightCallback: null }; const DefaultType = { endCallback: "(function|null)", leftCallback: "(function|null)", rightCallback: "(function|null)" }; class Swipe extends Config { constructor(element, config2) { super(); this._element = element; if (!element || !Swipe.isSupported()) { return; } this._config = this._getConfig(config2); this._deltaX = 0; this._supportPointerEvents = Boolean(window.PointerEvent); this._initEvents(); } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public dispose() { EventHandler.off(this._element, EVENT_KEY); } // Private _start(event) { if (!this._supportPointerEvents) { this._deltaX = event.touches[0].clientX; return; } if (this._eventIsPointerPenTouch(event)) { this._deltaX = event.clientX; } } _end(event) { if (this._eventIsPointerPenTouch(event)) { this._deltaX = event.clientX - this._deltaX; } this._handleSwipe(); index_js.execute(this._config.endCallback); } _move(event) { this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; } _handleSwipe() { const absDeltaX = Math.abs(this._deltaX); if (absDeltaX <= SWIPE_THRESHOLD) { return; } const direction = absDeltaX / this._deltaX; this._deltaX = 0; if (!direction) { return; } index_js.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); } _initEvents() { if (this._supportPointerEvents) { EventHandler.on(this._element, EVENT_POINTERDOWN, (event) => this._start(event)); EventHandler.on(this._element, EVENT_POINTERUP, (event) => this._end(event)); this._element.classList.add(CLASS_NAME_POINTER_EVENT); } else { EventHandler.on(this._element, EVENT_TOUCHSTART, (event) => this._start(event)); EventHandler.on(this._element, EVENT_TOUCHMOVE, (event) => this._move(event)); EventHandler.on(this._element, EVENT_TOUCHEND, (event) => this._end(event)); } } _eventIsPointerPenTouch(event) { return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); } // Static static isSupported() { return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0; } } return Swipe; }); })(swipe$1); return swipe$1.exports; } /*! * Bootstrap carousel.js v5.3.8 (https://getbootstrap.com/) * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ var carousel = carousel$1.exports; var hasRequiredCarousel; function requireCarousel() { if (hasRequiredCarousel) return carousel$1.exports; hasRequiredCarousel = 1; (function(module2, exports3) { (function(global, factory) { module2.exports = factory(requireBaseComponent(), requireEventHandler(), requireManipulator(), requireSelectorEngine(), requireUtil(), requireSwipe()); })(carousel, function(BaseComponent, EventHandler, Manipulator, SelectorEngine, index_js, Swipe) { const NAME = "carousel"; const DATA_KEY = "bs.carousel"; const EVENT_KEY = `.${DATA_KEY}`; const DATA_API_KEY = ".data-api"; const ARROW_LEFT_KEY = "ArrowLeft"; const ARROW_RIGHT_KEY = "ArrowRight"; const TOUCHEVENT_COMPAT_WAIT = 500; const ORDER_NEXT = "next"; const ORDER_PREV = "prev"; const DIRECTION_LEFT = "left"; const DIRECTION_RIGHT = "right"; const EVENT_SLIDE = `slide${EVENT_KEY}`; const EVENT_SLID = `slid${EVENT_KEY}`; const EVENT_KEYDOWN = `keydown${EVENT_KEY}`; const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`; const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`; const EVENT_DRAG_START = `dragstart${EVENT_KEY}`; const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; const CLASS_NAME_CAROUSEL = "carousel"; const CLASS_NAME_ACTIVE = "active"; const CLASS_NAME_SLIDE = "slide"; const CLASS_NAME_END = "carousel-item-end"; const CLASS_NAME_START = "carousel-item-start"; const CLASS_NAME_NEXT = "carousel-item-next"; const CLASS_NAME_PREV = "carousel-item-prev"; const SELECTOR_ACTIVE = ".active"; const SELECTOR_ITEM = ".carousel-item"; const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; const SELECTOR_ITEM_IMG = ".carousel-item img"; const SELECTOR_INDICATORS = ".carousel-indicators"; const SELECTOR_DATA_SLIDE = "[data-bs-slide], [data-bs-slide-to]"; const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; const KEY_TO_DIRECTION = { [ARROW_LEFT_KEY]: DIRECTION_RIGHT, [ARROW_RIGHT_KEY]: DIRECTION_LEFT }; const Default = { interval: 5e3, keyboard: true, pause: "hover", ride: false, touch: true, wrap: true }; const DefaultType = { interval: "(number|boolean)", // TODO:v6 remove boolean support keyboard: "boolean", pause: "(string|boolean)", ride: "(boolean|string)", touch: "boolean", wrap: "boolean" }; class Carousel2 extends BaseComponent { constructor(element, config2) { super(element, config2); this._interval = null; this._activeElement = null; this._isSliding = false; this.touchTimeout = null; this._swipeHelper = null; this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); this._addEventListeners(); if (this._config.ride === CLASS_NAME_CAROUSEL) { this.cycle(); } } // Getters static get Default() { return Default; } static get DefaultType() { return DefaultType; } static get NAME() { return NAME; } // Public next() { this._slide(ORDER_NEXT); } nextWhenVisible() { if (!document.hidden && index_js.isVisible(this._element)) { this.next(); } } prev() { this._slide(ORDER_PREV); } pause() { if (this._isSliding) { index_js.triggerTransitionEnd(this._element); } this._clearInterval(); } cycle() { this._clearInterval(); this._updateInterval(); this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); } _maybeEnableCycle() { if (!this._config.ride) { return; } if (this._isSliding) { EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); return; } this.cycle(); } to(index) { const items = this._getItems(); if (index > items.length - 1 || index < 0) { return; } if (this._isSliding) { EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); return; } const activeIndex = this._getItemIndex(this._getActive()); if (activeIndex === index) { return; } const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; this._slide(order, items[index]); } dispose() { if (this._swipeHelper) { this._swipeHelper.dispose(); } super.dispose(); } // Private _configAfterMerge(config2) { config2.defaultInterval = config2.interval; return config2; } _addEventListeners() { if (this._config.keyboard) { EventHandler.on(this._element, EVENT_KEYDOWN, (event) => this._k