{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","documentElement","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","dispatchEvent","Event","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","VERSION","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","show","_append","_getElement","add","_emulateAnimation","hide","backdrop","createElement","append","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","focus","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","Math","abs","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","style","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_HIDDEN","EVENT_SHOW","CLASS_NAME_OPEN","CLASS_NAME_STATIC","keyboard","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_isShown","_isTransitioning","_scrollBar","_addEventListeners","toggle","_adjustDialog","_showElement","_hideModal","_isAnimated","handleUpdate","display","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","each","data","getOrCreateInstance","tagName","showEvent","alreadyOpen","enableDismissTrigger","component","method","clickEvent","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","Tab","_parent","_setInitialAttributes","_getChildren","_keydown","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","complete","_toggleDropDown","blur","stopPropagation","isNext","nextActiveElement","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","preventScroll","parent","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","attribute","elem","undefined"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/backdrop.js","../../js/src/util/component-functions.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/tab.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n//import Alert from './src/alert.js'\n//import Button from './src/button.js'\n//import Carousel from './src/carousel.js'\n//import Collapse from './src/collapse.js'\n//import Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\n//import Offcanvas from './src/offcanvas.js'\n//import Popover from './src/popover.js'\n//import ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\n//import Toast from './src/toast.js'\n//import Tooltip from './src/tooltip.js'\n\nexport default {\n //Alert,\n //Button,\n //Carousel,\n //Collapse,\n //Dropdown,\n Modal,\n //Offcanvas,\n //Popover,\n //ScrollSpy,\n Tab,\n //Toast,\n //Tooltip\n}\n"],"mappings":"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"}