PageSourceSearch

https://n-e-f.org/templates/nef/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js?70a1b4

js n-e-f.org collected 2026-10-02 06:38:07 UTC 209,719 bytes, 6,812 lines download raw bytes

vendor: 10,027 bytes, lines 1-344
1/*!
2  * Bootstrap v5.1.3 (https://getbootstrap.com/)
3  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5  */
6(function (global, factory) {
7  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
8  typeof define === 'function' && define.amd ? define(factory) :
9  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());
10})(this, (function () { 'use strict';
11
12  /**
13   * --------------------------------------------------------------------------
14   * Bootstrap (v5.1.3): util/index.js
15   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
16   * --------------------------------------------------------------------------
17   */
18  const MAX_UID = 1000000;
19  const MILLISECONDS_MULTIPLIER = 1000;
20  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
21
22  const toType = obj => {
23    if (obj === null || obj === undefined) {
24      return `${obj}`;
25    }
26
27    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
28  };
29  /**
30   * --------------------------------------------------------------------------
31   * Public Util Api
32   * --------------------------------------------------------------------------
33   */
34
35
36  const getUID = prefix => {
37    do {
38      prefix += Math.floor(Math.random() * MAX_UID);
39    } while (document.getElementById(prefix));
40
41    return prefix;
42  };
43
44  const getSelector = element => {
45    let selector = element.getAttribute('data-bs-target');
46
47    if (!selector || selector === '#') {
48      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
49      // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
50      // `document.querySelector` will rightfully complain it is invalid.
51      // See https://github.com/twbs/bootstrap/issues/32273
52
53      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
54        return null;
55      } // Just in case some CMS puts out a full URL with the anchor appended
56
57
58      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
59        hrefAttr = `#${hrefAttr.split('#')[1]}`;
60      }
61
62      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
63    }
64
65    return selector;
66  };
67
68  const getSelectorFromElement = element => {
69    const selector = getSelector(element);
70
71    if (selector) {
72      return document.querySelector(selector) ? selector : null;
73    }
74
75    return null;
76  };
77
78  const getElementFromSelector = element => {
79    const selector = getSelector(element);
80    return selector ? document.querySelector(selector) : null;
81  };
82
83  const getTransitionDurationFromElement = element => {
84    if (!element) {
85      return 0;
86    } // Get transition-duration of the element
87
88
89    let {
90      transitionDuration,
91      transitionDelay
92    } = window.getComputedStyle(element);
93    const floatTransitionDuration = Number.parseFloat(transitionDuration);
94    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
95
96    if (!floatTransitionDuration && !floatTransitionDelay) {
97      return 0;
98    } // If multiple durations are defined, take the first
99
100
101    transitionDuration = transitionDuration.split(',')[0];
102    transitionDelay = transitionDelay.split(',')[0];
103    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
104  };
105
106  const triggerTransitionEnd = element => {
107    element.dispatchEvent(new Event(TRANSITION_END));
108  };
109
110  const isElement$1 = obj => {
111    if (!obj || typeof obj !== 'object') {
112      return false;
113    }
114
115    if (typeof obj.jquery !== 'undefined') {
116      obj = obj[0];
117    }
118
119    return typeof obj.nodeType !== 'undefined';
120  };
121
122  const getElement = obj => {
123    if (isElement$1(obj)) {
124      // it's a jQuery object or a node element
125      return obj.jquery ? obj[0] : obj;
126    }
127
128    if (typeof obj === 'string' && obj.length > 0) {
129      return document.querySelector(obj);
130    }
131
132    return null;
133  };
134
135  const typeCheckConfig = (componentName, config, configTypes) => {
136    Object.keys(configTypes).forEach(property => {
137      const expectedTypes = configTypes[property];
138      const value = config[property];
139      const valueType = value && isElement$1(value) ? 'element' : toType(value);
140
141      if (!new RegExp(expectedTypes).test(valueType)) {
142        throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
143      }
144    });
145  };
146
147  const isVisible = element => {
148    if (!isElement$1(element) || element.getClientRects().length === 0) {
149      return false;
150    }
151
152    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';
153  };
154
155  const isDisabled = element => {
156    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
157      return true;
158    }
159
160    if (element.classList.contains('disabled')) {
161      return true;
162    }
163
164    if (typeof element.disabled !== 'undefined') {
165      return element.disabled;
166    }
167
168    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
169  };
170
171  const findShadowRoot = element => {
172    if (!document.documentElement.attachShadow) {
173      return null;
174    } // Can find the shadow root otherwise it'll return the document
175
176
177    if (typeof element.getRootNode === 'function') {
178      const root = element.getRootNode();
179      return root instanceof ShadowRoot ? root : null;
180    }
181
182    if (element instanceof ShadowRoot) {
183      return element;
184    } // when we don't find a shadow root
185
186
187    if (!element.parentNode) {
188      return null;
189    }
190
191    return findShadowRoot(element.parentNode);
192  };
193
194  const noop = () => {};
195  /**
196   * Trick to restart an element's animation
197   *
198   * @param {HTMLElement} element
199   * @return void
200   *
201   * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
202   */
203
204
205  const reflow = element => {
206    // eslint-disable-next-line no-unused-expressions
207    element.offsetHeight;
208  };
209
210  const getjQuery = () => {
211    const {
212      jQuery
213    } = window;
214
215    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
216      return jQuery;
217    }
218
219    return null;
220  };
221
222  const DOMContentLoadedCallbacks = [];
223
224  const onDOMContentLoaded = callback => {
225    if (document.readyState === 'loading') {
226      // add listener on the first call when the document is in loading state
227      if (!DOMContentLoadedCallbacks.length) {
228        document.addEventListener('DOMContentLoaded', () => {
229          DOMContentLoadedCallbacks.forEach(callback => callback());
230        });
231      }
232
233      DOMContentLoadedCallbacks.push(callback);
234    } else {
235      callback();
236    }
237  };
238
239  const isRTL = () => document.documentElement.dir === 'rtl';
240
241  const defineJQueryPlugin = plugin => {
242    onDOMContentLoaded(() => {
243      const $ = getjQuery();
244      /* istanbul ignore if */
245
246      if ($) {
247        const name = plugin.NAME;
248        const JQUERY_NO_CONFLICT = $.fn[name];
249        $.fn[name] = plugin.jQueryInterface;
250        $.fn[name].Constructor = plugin;
251
252        $.fn[name].noConflict = () => {
253          $.fn[name] = JQUERY_NO_CONFLICT;
254          return plugin.jQueryInterface;
255        };
256      }
257    });
258  };
259
260  const execute = callback => {
261    if (typeof callback === 'function') {
262      callback();
263    }
264  };
265
266  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
267    if (!waitForTransition) {
268      execute(callback);
269      return;
270    }
271
272    const durationPadding = 5;
273    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
274    let called = false;
275
276    const handler = ({
277      target
278    }) => {
279      if (target !== transitionElement) {
280        return;
281      }
282
283      called = true;
284      transitionElement.removeEventListener(TRANSITION_END, handler);
285      execute(callback);
286    };
287
288    transitionElement.addEventListener(TRANSITION_END, handler);
289    setTimeout(() => {
290      if (!called) {
291        triggerTransitionEnd(transitionElement);
292      }
293    }, emulatedDuration);
294  };
295  /**
296   * Return the previous/next element of a list.
297   *
298   * @param {array} list    The list of elements
299   * @param activeElement   The active element
300   * @param shouldGetNext   Choose to get next or previous element
301   * @param isCycleAllowed
302   * @return {Element|elem} The proper element
303   */
304
305
306  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
307    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed
308
309    if (index === -1) {
310      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];
311    }
312
313    const listLength = list.length;
314    index += shouldGetNext ? 1 : -1;
315
316    if (isCycleAllowed) {
317      index = (index + listLength) % listLength;
318    }
319
320    return list[Math.max(0, Math.min(index, listLength - 1))];
321  };
322
323  /**
324   * --------------------------------------------------------------------------
325   * Bootstrap (v5.1.3): dom/event-handler.js
326   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
327   * --------------------------------------------------------------------------
328   */
329  /**
330   * ------------------------------------------------------------------------
331   * Constants
332   * ------------------------------------------------------------------------
333   */
334
335  const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
336  const stripNameRegex = /\..*/;
337  const stripUidRegex = /::\d+$/;
338  const eventRegistry = {}; // Events storage
339
340  let uidEvent = 1;
341  const customEvents = {
342    mouseenter: 'mouseover',
343    mouseleave: 'mouseout'
344  };
vendor: 13,860 bytes, lines 345-774
345  const customEventsRegex = /^(mouseenter|mouseleave)/i;
346  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
347  /**
348   * ------------------------------------------------------------------------
349   * Private methods
350   * ------------------------------------------------------------------------
351   */
352
353  function getUidEvent(element, uid) {
354    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
355  }
356
357  function getEvent(element) {
358    const uid = getUidEvent(element);
359    element.uidEvent = uid;
360    eventRegistry[uid] = eventRegistry[uid] || {};
361    return eventRegistry[uid];
362  }
363
364  function bootstrapHandler(element, fn) {
365    return function handler(event) {
366      event.delegateTarget = element;
367
368      if (handler.oneOff) {
369        EventHandler.off(element, event.type, fn);
370      }
371
372      return fn.apply(element, [event]);
373    };
374  }
375
376  function bootstrapDelegationHandler(element, selector, fn) {
377    return function handler(event) {
378      const domElements = element.querySelectorAll(selector);
379
380      for (let {
381        target
382      } = event; target && target !== this; target = target.parentNode) {
383        for (let i = domElements.length; i--;) {
384          if (domElements[i] === target) {
385            event.delegateTarget = target;
386
387            if (handler.oneOff) {
388              EventHandler.off(element, event.type, selector, fn);
389            }
390
391            return fn.apply(target, [event]);
392          }
393        }
394      } // To please ESLint
395
396
397      return null;
398    };
399  }
400
401  function findHandler(events, handler, delegationSelector = null) {
402    const uidEventList = Object.keys(events);
403
404    for (let i = 0, len = uidEventList.length; i < len; i++) {
405      const event = events[uidEventList[i]];
406
407      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {
408        return event;
409      }
410    }
411
412    return null;
413  }
414
415  function normalizeParams(originalTypeEvent, handler, delegationFn) {
416    const delegation = typeof handler === 'string';
417    const originalHandler = delegation ? delegationFn : handler;
418    let typeEvent = getTypeEvent(originalTypeEvent);
419    const isNative = nativeEvents.has(typeEvent);
420
421    if (!isNative) {
422      typeEvent = originalTypeEvent;
423    }
424
425    return [delegation, originalHandler, typeEvent];
426  }
427
428  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {
429    if (typeof originalTypeEvent !== 'string' || !element) {
430      return;
431    }
432
433    if (!handler) {
434      handler = delegationFn;
435      delegationFn = null;
436    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
437    // this prevents the handler from being dispatched the same way as mouseover or mouseout does
438
439
440    if (customEventsRegex.test(originalTypeEvent)) {
441      const wrapFn = fn => {
442        return function (event) {
443          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
444            return fn.call(this, event);
445          }
446        };
447      };
448
449      if (delegationFn) {
450        delegationFn = wrapFn(delegationFn);
451      } else {
452        handler = wrapFn(handler);
453      }
454    }
455
456    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
457    const events = getEvent(element);
458    const handlers = events[typeEvent] || (events[typeEvent] = {});
459    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);
460
461    if (previousFn) {
462      previousFn.oneOff = previousFn.oneOff && oneOff;
463      return;
464    }
465
466    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));
467    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);
468    fn.delegationSelector = delegation ? handler : null;
469    fn.originalHandler = originalHandler;
470    fn.oneOff = oneOff;
471    fn.uidEvent = uid;
472    handlers[uid] = fn;
473    element.addEventListener(typeEvent, fn, delegation);
474  }
475
476  function removeHandler(element, events, typeEvent, handler, delegationSelector) {
477    const fn = findHandler(events[typeEvent], handler, delegationSelector);
478
479    if (!fn) {
480      return;
481    }
482
483    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
484    delete events[typeEvent][fn.uidEvent];
485  }
486
487  function removeNamespacedHandlers(element, events, typeEvent, namespace) {
488    const storeElementEvent = events[typeEvent] || {};
489    Object.keys(storeElementEvent).forEach(handlerKey => {
490      if (handlerKey.includes(namespace)) {
491        const event = storeElementEvent[handlerKey];
492        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
493      }
494    });
495  }
496
497  function getTypeEvent(event) {
498    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
499    event = event.replace(stripNameRegex, '');
500    return customEvents[event] || event;
501  }
502
503  const EventHandler = {
504    on(element, event, handler, delegationFn) {
505      addHandler(element, event, handler, delegationFn, false);
506    },
507
508    one(element, event, handler, delegationFn) {
509      addHandler(element, event, handler, delegationFn, true);
510    },
511
512    off(element, originalTypeEvent, handler, delegationFn) {
513      if (typeof originalTypeEvent !== 'string' || !element) {
514        return;
515      }
516
517      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);
518      const inNamespace = typeEvent !== originalTypeEvent;
519      const events = getEvent(element);
520      const isNamespace = originalTypeEvent.startsWith('.');
521
522      if (typeof originalHandler !== 'undefined') {
523        // Simplest case: handler is passed, remove that listener ONLY.
524        if (!events || !events[typeEvent]) {
525          return;
526        }
527
528        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);
529        return;
530      }
531
532      if (isNamespace) {
533        Object.keys(events).forEach(elementEvent => {
534          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
535        });
536      }
537
538      const storeElementEvent = events[typeEvent] || {};
539      Object.keys(storeElementEvent).forEach(keyHandlers => {
540        const handlerKey = keyHandlers.replace(stripUidRegex, '');
541
542        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
543          const event = storeElementEvent[keyHandlers];
544          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);
545        }
546      });
547    },
548
549    trigger(element, event, args) {
550      if (typeof event !== 'string' || !element) {
551        return null;
552      }
553
554      const $ = getjQuery();
555      const typeEvent = getTypeEvent(event);
556      const inNamespace = event !== typeEvent;
557      const isNative = nativeEvents.has(typeEvent);
558      let jQueryEvent;
559      let bubbles = true;
560      let nativeDispatch = true;
561      let defaultPrevented = false;
562      let evt = null;
563
564      if (inNamespace && $) {
565        jQueryEvent = $.Event(event, args);
566        $(element).trigger(jQueryEvent);
567        bubbles = !jQueryEvent.isPropagationStopped();
568        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
569        defaultPrevented = jQueryEvent.isDefaultPrevented();
570      }
571
572      if (isNative) {
573        evt = document.createEvent('HTMLEvents');
574        evt.initEvent(typeEvent, bubbles, true);
575      } else {
576        evt = new CustomEvent(event, {
577          bubbles,
578          cancelable: true
579        });
580      } // merge custom information in our event
581
582
583      if (typeof args !== 'undefined') {
584        Object.keys(args).forEach(key => {
585          Object.defineProperty(evt, key, {
586            get() {
587              return args[key];
588            }
589
590          });
591        });
592      }
593
594      if (defaultPrevented) {
595        evt.preventDefault();
596      }
597
598      if (nativeDispatch) {
599        element.dispatchEvent(evt);
600      }
601
602      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {
603        jQueryEvent.preventDefault();
604      }
605
606      return evt;
607    }
608
609  };
610
611  /**
612   * --------------------------------------------------------------------------
613   * Bootstrap (v5.1.3): dom/data.js
614   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
615   * --------------------------------------------------------------------------
616   */
617
618  /**
619   * ------------------------------------------------------------------------
620   * Constants
621   * ------------------------------------------------------------------------
622   */
623  const elementMap = new Map();
624  const Data = {
625    set(element, key, instance) {
626      if (!elementMap.has(element)) {
627        elementMap.set(element, new Map());
628      }
629
630      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
631      // can be removed later when multiple key/instances are fine to be used
632
633      if (!instanceMap.has(key) && instanceMap.size !== 0) {
634        // eslint-disable-next-line no-console
635        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
636        return;
637      }
638
639      instanceMap.set(key, instance);
640    },
641
642    get(element, key) {
643      if (elementMap.has(element)) {
644        return elementMap.get(element).get(key) || null;
645      }
646
647      return null;
648    },
649
650    remove(element, key) {
651      if (!elementMap.has(element)) {
652        return;
653      }
654
655      const instanceMap = elementMap.get(element);
656      instanceMap.delete(key); // free up element references if there are no instances left for an element
657
658      if (instanceMap.size === 0) {
659        elementMap.delete(element);
660      }
661    }
662
663  };
664
665  /**
666   * --------------------------------------------------------------------------
667   * Bootstrap (v5.1.3): base-component.js
668   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
669   * --------------------------------------------------------------------------
670   */
671  /**
672   * ------------------------------------------------------------------------
673   * Constants
674   * ------------------------------------------------------------------------
675   */
676
677  const VERSION = '5.1.3';
678
679  class BaseComponent {
680    constructor(element) {
681      element = getElement(element);
682
683      if (!element) {
684        return;
685      }
686
687      this._element = element;
688      Data.set(this._element, this.constructor.DATA_KEY, this);
689    }
690
691    dispose() {
692      Data.remove(this._element, this.constructor.DATA_KEY);
693      EventHandler.off(this._element, this.constructor.EVENT_KEY);
694      Object.getOwnPropertyNames(this).forEach(propertyName => {
695        this[propertyName] = null;
696      });
697    }
698
699    _queueCallback(callback, element, isAnimated = true) {
700      executeAfterTransition(callback, element, isAnimated);
701    }
702    /** Static */
703
704
705    static getInstance(element) {
706      return Data.get(getElement(element), this.DATA_KEY);
707    }
708
709    static getOrCreateInstance(element, config = {}) {
710      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
711    }
712
713    static get VERSION() {
714      return VERSION;
715    }
716
717    static get NAME() {
718      throw new Error('You have to implement the static method "NAME", for each component!');
719    }
720
721    static get DATA_KEY() {
722      return `bs.${this.NAME}`;
723    }
724
725    static get EVENT_KEY() {
726      return `.${this.DATA_KEY}`;
727    }
728
729  }
730
731  /**
732   * --------------------------------------------------------------------------
733   * Bootstrap (v5.1.3): util/component-functions.js
734   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
735   * --------------------------------------------------------------------------
736   */
737
738  const enableDismissTrigger = (component, method = 'hide') => {
739    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
740    const name = component.NAME;
741    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
742      if (['A', 'AREA'].includes(this.tagName)) {
743        event.preventDefault();
744      }
745
746      if (isDisabled(this)) {
747        return;
748      }
749
750      const target = getElementFromSelector(this) || this.closest(`.${name}`);
751      const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
752
753      instance[method]();
754    });
755  };
756
757  /**
758   * --------------------------------------------------------------------------
759   * Bootstrap (v5.1.3): alert.js
760   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
761   * --------------------------------------------------------------------------
762   */
763  /**
764   * ------------------------------------------------------------------------
765   * Constants
766   * ------------------------------------------------------------------------
767   */
768
769  const NAME$d = 'alert';
770  const DATA_KEY$c = 'bs.alert';
771  const EVENT_KEY$c = `.${DATA_KEY$c}`;
772  const EVENT_CLOSE = `close${EVENT_KEY$c}`;
773  const EVENT_CLOSED = `closed${EVENT_KEY$c}`;
774  const CLASS_NAME_FADE$5 = 'fade';
vendor: 4,515 bytes, lines 775-929
775  const CLASS_NAME_SHOW$8 = 'show';
776  /**
777   * ------------------------------------------------------------------------
778   * Class Definition
779   * ------------------------------------------------------------------------
780   */
781
782  class Alert extends BaseComponent {
783    // Getters
784    static get NAME() {
785      return NAME$d;
786    } // Public
787
788
789    close() {
790      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
791
792      if (closeEvent.defaultPrevented) {
793        return;
794      }
795
796      this._element.classList.remove(CLASS_NAME_SHOW$8);
797
798      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
799
800      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
801    } // Private
802
803
804    _destroyElement() {
805      this._element.remove();
806
807      EventHandler.trigger(this._element, EVENT_CLOSED);
808      this.dispose();
809    } // Static
810
811
812    static jQueryInterface(config) {
813      return this.each(function () {
814        const data = Alert.getOrCreateInstance(this);
815
816        if (typeof config !== 'string') {
817          return;
818        }
819
820        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
821          throw new TypeError(`No method named "${config}"`);
822        }
823
824        data[config](this);
825      });
826    }
827
828  }
829  /**
830   * ------------------------------------------------------------------------
831   * Data Api implementation
832   * ------------------------------------------------------------------------
833   */
834
835
836  enableDismissTrigger(Alert, 'close');
837  /**
838   * ------------------------------------------------------------------------
839   * jQuery
840   * ------------------------------------------------------------------------
841   * add .Alert to jQuery only if jQuery is present
842   */
843
844  defineJQueryPlugin(Alert);
845
846  /**
847   * --------------------------------------------------------------------------
848   * Bootstrap (v5.1.3): button.js
849   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
850   * --------------------------------------------------------------------------
851   */
852  /**
853   * ------------------------------------------------------------------------
854   * Constants
855   * ------------------------------------------------------------------------
856   */
857
858  const NAME$c = 'button';
859  const DATA_KEY$b = 'bs.button';
860  const EVENT_KEY$b = `.${DATA_KEY$b}`;
861  const DATA_API_KEY$7 = '.data-api';
862  const CLASS_NAME_ACTIVE$3 = 'active';
863  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
864  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;
865  /**
866   * ------------------------------------------------------------------------
867   * Class Definition
868   * ------------------------------------------------------------------------
869   */
870
871  class Button extends BaseComponent {
872    // Getters
873    static get NAME() {
874      return NAME$c;
875    } // Public
876
877
878    toggle() {
879      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
880      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
881    } // Static
882
883
884    static jQueryInterface(config) {
885      return this.each(function () {
886        const data = Button.getOrCreateInstance(this);
887
888        if (config === 'toggle') {
889          data[config]();
890        }
891      });
892    }
893
894  }
895  /**
896   * ------------------------------------------------------------------------
897   * Data Api implementation
898   * ------------------------------------------------------------------------
899   */
900
901
902  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
903    event.preventDefault();
904    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
905    const data = Button.getOrCreateInstance(button);
906    data.toggle();
907  });
908  /**
909   * ------------------------------------------------------------------------
910   * jQuery
911   * ------------------------------------------------------------------------
912   * add .Button to jQuery only if jQuery is present
913   */
914
915  defineJQueryPlugin(Button);
916
917  /**
918   * --------------------------------------------------------------------------
919   * Bootstrap (v5.1.3): dom/manipulator.js
920   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
921   * --------------------------------------------------------------------------
922   */
923  function normalizeData(val) {
924    if (val === 'true') {
925      return true;
926    }
927
928    if (val === 'false') {
929      return false;
930    }
931
932    if (val === Number(val).toString()) {
933      return Number(val);
934    }
935
936    if (val === '' || val === 'null') {
937      return null;
938    }
939
940    return val;
941  }
942
943  function normalizeDataKey(key) {
944    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
945  }
946
947  const Manipulator = {
948    setDataAttribute(element, key, value) {
949      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
950    },
951
952    removeDataAttribute(element, key) {
953      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
954    },
955
956    getDataAttributes(element) {
957      if (!element) {
958        return {};
959      }
960
961      const attributes = {};
962      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {
963        let pureKey = key.replace(/^bs/, '');
964        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
965        attributes[pureKey] = normalizeData(element.dataset[key]);
966      });
967      return attributes;
968    },
969
970    getDataAttribute(element, key) {
971      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
972    },
973
974    offset(element) {
975      const rect = element.getBoundingClientRect();
976      return {
977        top: rect.top + window.pageYOffset,
978        left: rect.left + window.pageXOffset
979      };
980    },
981
982    position(element) {
983      return {
984        top: element.offsetTop,
985        left: element.offsetLeft
986      };
987    }
988
989  };
990
991  /**
992   * --------------------------------------------------------------------------
993   * Bootstrap (v5.1.3): dom/selector-engine.js
994   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
995   * --------------------------------------------------------------------------
996   */
997  const NODE_TEXT = 3;
998  const SelectorEngine = {
999    find(selector, element = document.documentElement) {
1000      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
1001    },
1002
1003    findOne(selector, element = document.documentElement) {
1004      return Element.prototype.querySelector.call(element, selector);
1005    },
1006
1007    children(element, selector) {
1008      return [].concat(...element.children).filter(child => child.matches(selector));
1009    },
1010
1011    parents(element, selector) {
1012      const parents = [];
1013      let ancestor = element.parentNode;
1014
1015      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {
1016        if (ancestor.matches(selector)) {
1017          parents.push(ancestor);
1018        }
1019
1020        ancestor = ancestor.parentNode;
1021      }
1022
1023      return parents;
1024    },
1025
1026    prev(element, selector) {
1027      let previous = element.previousElementSibling;
1028
1029      while (previous) {
1030        if (previous.matches(selector)) {
1031          return [previous];
1032        }
1033
1034        previous = previous.previousElementSibling;
1035      }
1036
1037      return [];
1038    },
1039
1040    next(element, selector) {
1041      let next = element.nextElementSibling;
1042
1043      while (next) {
1044        if (next.matches(selector)) {
1045          return [next];
1046        }
1047
1048        next = next.nextElementSibling;
1049      }
1050
1051      return [];
1052    },
1053
1054    focusableChildren(element) {
1055      const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', ');
1056      return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
1057    }
1058
1059  };
1060
1061  /**
1062   * --------------------------------------------------------------------------
1063   * Bootstrap (v5.1.3): carousel.js
1064   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1065   * --------------------------------------------------------------------------
1066   */
1067  /**
1068   * ------------------------------------------------------------------------
1069   * Constants
1070   * ------------------------------------------------------------------------
1071   */
1072
1073  const NAME$b = 'carousel';
1074  const DATA_KEY$a = 'bs.carousel';
1075  const EVENT_KEY$a = `.${DATA_KEY$a}`;
1076  const DATA_API_KEY$6 = '.data-api';
1077  const ARROW_LEFT_KEY = 'ArrowLeft';
1078  const ARROW_RIGHT_KEY = 'ArrowRight';
1079  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
1080
1081  const SWIPE_THRESHOLD = 40;
1082  const Default$a = {
1083    interval: 5000,
1084    keyboard: true,
1085    slide: false,
1086    pause: 'hover',
1087    wrap: true,
1088    touch: true
1089  };
1090  const DefaultType$a = {
1091    interval: '(number|boolean)',
1092    keyboard: 'boolean',
1093    slide: '(boolean|string)',
1094    pause: '(string|boolean)',
1095    wrap: 'boolean',
1096    touch: 'boolean'
1097  };
1098  const ORDER_NEXT = 'next';
1099  const ORDER_PREV = 'prev';
1100  const DIRECTION_LEFT = 'left';
1101  const DIRECTION_RIGHT = 'right';
1102  const KEY_TO_DIRECTION = {
1103    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,
1104    [ARROW_RIGHT_KEY]: DIRECTION_LEFT
1105  };
1106  const EVENT_SLIDE = `slide${EVENT_KEY$a}`;
1107  const EVENT_SLID = `slid${EVENT_KEY$a}`;
1108  const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;
1109  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;
1110  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;
1111  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;
1112  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;
1113  const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;
1114  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;
1115  const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;
1116  const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;
1117  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;
1118  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
1119  const CLASS_NAME_CAROUSEL = 'carousel';
1120  const CLASS_NAME_ACTIVE$2 = 'active';
1121  const CLASS_NAME_SLIDE = 'slide';
1122  const CLASS_NAME_END = 'carousel-item-end';
1123  const CLASS_NAME_START = 'carousel-item-start';
1124  const CLASS_NAME_NEXT = 'carousel-item-next';
1125  const CLASS_NAME_PREV = 'carousel-item-prev';
1126  const CLASS_NAME_POINTER_EVENT = 'pointer-event';
1127  const SELECTOR_ACTIVE$1 = '.active';
1128  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
1129  const SELECTOR_ITEM = '.carousel-item';
1130  const SELECTOR_ITEM_IMG = '.carousel-item img';
1131  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
1132  const SELECTOR_INDICATORS = '.carousel-indicators';
1133  const SELECTOR_INDICATOR = '[data-bs-target]';
1134  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';
1135  const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
1136  const POINTER_TYPE_TOUCH = 'touch';
1137  const POINTER_TYPE_PEN = 'pen';
1138  /**
1139   * ------------------------------------------------------------------------
1140   * Class Definition
1141   * ------------------------------------------------------------------------
1142   */
1143
1144  class Carousel extends BaseComponent {
1145    constructor(element, config) {
1146      super(element);
1147      this._items = null;
1148      this._interval = null;
1149      this._activeElement = null;
1150      this._isPaused = false;
1151      this._isSliding = false;
1152      this.touchTimeout = null;
1153      this.touchStartX = 0;
1154      this.touchDeltaX = 0;
1155      this._config = this._getConfig(config);
1156      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
1157      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
1158      this._pointerEvent = Boolean(window.PointerEvent);
1159
1160      this._addEventListeners();
1161    } // Getters
1162
1163
1164    static get Default() {
1165      return Default$a;
1166    }
1167
1168    static get NAME() {
1169      return NAME$b;
1170    } // Public
1171
1172
1173    next() {
1174      this._slide(ORDER_NEXT);
1175    }
1176
1177    nextWhenVisible() {
1178      // Don't call next when the page isn't visible
1179      // or the carousel or its parent isn't visible
1180      if (!document.hidden && isVisible(this._element)) {
1181        this.next();
1182      }
1183    }
1184
1185    prev() {
1186      this._slide(ORDER_PREV);
1187    }
1188
1189    pause(event) {
1190      if (!event) {
1191        this._isPaused = true;
1192      }
1193
1194      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {
1195        triggerTransitionEnd(this._element);
1196        this.cycle(true);
1197      }
1198
1199      clearInterval(this._interval);
1200      this._interval = null;
1201    }
1202
1203    cycle(event) {
1204      if (!event) {
1205        this._isPaused = false;
1206      }
1207
1208      if (this._interval) {
1209        clearInterval(this._interval);
1210        this._interval = null;
1211      }
1212
1213      if (this._config && this._config.interval && !this._isPaused) {
1214        this._updateInterval();
1215
1216        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
1217      }
1218    }
1219
1220    to(index) {
1221      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
1222
1223      const activeIndex = this._getItemIndex(this._activeElement);
1224
1225      if (index > this._items.length - 1 || index < 0) {
1226        return;
1227      }
1228
1229      if (this._isSliding) {
1230        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
1231        return;
1232      }
1233
1234      if (activeIndex === index) {
1235        this.pause();
1236        this.cycle();
1237        return;
1238      }
1239
1240      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
1241
1242      this._slide(order, this._items[index]);
1243    } // Private
1244
1245
1246    _getConfig(config) {
1247      config = { ...Default$a,
1248        ...Manipulator.getDataAttributes(this._element),
1249        ...(typeof config === 'object' ? config : {})
1250      };
1251      typeCheckConfig(NAME$b, config, DefaultType$a);
1252      return config;
1253    }
1254
1255    _handleSwipe() {
1256      const absDeltax = Math.abs(this.touchDeltaX);
1257
1258      if (absDeltax <= SWIPE_THRESHOLD) {
1259        return;
1260      }
1261
1262      const direction = absDeltax / this.touchDeltaX;
1263      this.touchDeltaX = 0;
1264
1265      if (!direction) {
1266        return;
1267      }
1268
1269      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);
1270    }
1271
1272    _addEventListeners() {
1273      if (this._config.keyboard) {
1274        EventHandler.on(this._element, EVENT_KEYDOWN, event =>
1274 this._keydown(event));
1275      }
1276
1277      if (this._config.pause === 'hover') {
1278        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));
1279        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));
1280      }
1281
1282      if (this._config.touch && this._touchSupported) {
1283        this._addTouchEventListeners();
1284      }
1285    }
1286
1287    _addTouchEventListeners() {
1288      const hasPointerPenTouch = event => {
1289        return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
1290      };
1291
1292      const start = event => {
1293        if (hasPointerPenTouch(event)) {
1294          this.touchStartX = event.clientX;
1295        } else if (!this._pointerEvent) {
1296          this.touchStartX = event.touches[0].clientX;
1297        }
1298      };
1299
1300      const move = event => {
1301        // ensure swiping with one touch and not pinching
1302        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;
1303      };
1304
1305      const end = event => {
1306        if (hasPointerPenTouch(event)) {
1307          this.touchDeltaX = event.clientX - this.touchStartX;
1308        }
1309
1310        this._handleSwipe();
1311
1312        if (this._config.pause === 'hover') {
1313          // If it's a touch-enabled device, mouseenter/leave are fired as
1314          // part of the mouse compatibility events on first tap - the carousel
1315          // would stop cycling until user tapped out of it;
1316          // here, we listen for touchend, explicitly pause the carousel
1317          // (as if it's the second time we tap on it, mouseenter compat event
1318          // is NOT fired) and after a timeout (to allow for mouse compatibility
1319          // events to fire) we explicitly restart cycling
1320          this.pause();
1321
1322          if (this.touchTimeout) {
1323            clearTimeout(this.touchTimeout);
1324          }
1325
1326          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
1327        }
1328      };
1329
1330      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {
1331        EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());
1332      });
1333
1334      if (this._pointerEvent) {
1335        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));
1336        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));
1337
1338        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
1339      } else {
1340        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));
1341        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));
1342        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));
1343      }
1344    }
1345
1346    _keydown(event) {
1347      if (/input|textarea/i.test(event.target.tagName)) {
1348        return;
1349      }
1350
1351      const direction = KEY_TO_DIRECTION[event.key];
1352
1353      if (direction) {
1354        event.preventDefault();
1355
1356        this._slide(direction);
1357      }
1358    }
1359
1360    _getItemIndex(element) {
1361      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];
1362      return this._items.indexOf(element);
1363    }
1364
1365    _getItemByOrder(order, activeElement) {
1366      const isNext = order === ORDER_NEXT;
1367      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);
1368    }
1369
1370    _triggerSlideEvent(relatedTarget, eventDirectionName) {
1371      const targetIndex = this._getItemIndex(relatedTarget);
1372
1373      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));
1374
1375      return EventHandler.trigger(this._element, EVENT_SLIDE, {
1376        relatedTarget,
1377        direction: eventDirectionName,
1378        from: fromIndex,
1379        to: targetIndex
1380      });
1381    }
1382
1383    _setActiveIndicatorElement(element) {
1384      if (this._indicatorsElement) {
1385        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);
1386        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
1387        activeIndicator.removeAttribute('aria-current');
1388        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);
1389
1390        for (let i = 0; i < indicators.length; i++) {
1391          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {
1392            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);
1393            indicators[i].setAttribute('aria-current', 'true');
1394            break;
1395          }
1396        }
1397      }
1398    }
1399
1400    _updateInterval() {
1401      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
1402
1403      if (!element) {
1404        return;
1405      }
1406
1407      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
1408
1409      if (elementInterval) {
1410        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
1411        this._config.interval = elementInterval;
1412      } else {
1413        this._config.interval = this._config.defaultInterval || this._config.interval;
1414      }
1415    }
1416
1417    _slide(directionOrOrder, element) {
1418      const order = this._directionToOrder(directionOrOrder);
1419
1420      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
1421
1422      const activeElementIndex = this._getItemIndex(activeElement);
1423
1424      const nextElement = element || this._getItemByOrder(order, activeElement);
1425
1426      const nextElementIndex = this._getItemIndex(nextElement);
1427
1428      const isCycling = Boolean(this._interval);
1429      const isNext = order === ORDER_NEXT;
1430      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
1431      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
1432
1433      const eventDirectionName = this._orderToDirection(order);
1434
1435      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {
1436        this._isSliding = false;
1437        return;
1438      }
1439
1440      if (this._isSliding) {
1441        return;
1442      }
1443
1444      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
1445
1446      if (slideEvent.defaultPrevented) {
1447        return;
1448      }
1449
1450      if (!activeElement || !nextElement) {
1451        // Some weirdness is happening, so we bail
1452        return;
1453      }
1454
1455      this._isSliding = true;
1456
1457      if (isCycling) {
1458        this.pause();
1459      }
1460
1461      this._setActiveIndicatorElement(nextElement);
1462
1463      this._activeElement = nextElement;
1464
1465      const triggerSlidEvent = () => {
1466        EventHandler.trigger(this._element, EVENT_SLID, {
1467          relatedTarget: nextElement,
1468          direction: eventDirectionName,
1469          from: activeElementIndex,
1470          to: nextElementIndex
1471        });
1472      };
1473
1474      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {
1475        nextElement.classList.add(orderClassName);
1476        reflow(nextElement);
1477        activeElement.classList.add(directionalClassName);
1478        nextElement.classList.add(directionalClassName);
1479
1480        const completeCallBack = () => {
1481          nextElement.classList.remove(directionalClassName, orderClassName);
1482          nextElement.classList.add(CLASS_NAME_ACTIVE$2);
1483          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
1484          this._isSliding = false;
1485          setTimeout(triggerSlidEvent, 0);
1486        };
1487
1488        this._queueCallback(completeCallBack, activeElement, true);
1489      } else {
1490        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);
1491        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
1492        this._isSliding = false;
1493        triggerSlidEvent();
1494      }
1495
1496      if (isCycling) {
1497        this.cycle();
1498      }
1499    }
1500
1501    _directionToOrder(direction) {
1502      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {
1503        return direction;
1504      }
1505
1506      if (isRTL()) {
1507        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
1508      }
1509
1510      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
1511    }
1512
1513    _orderToDirection(order) {
1514      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {
1515        return order;
1516      }
1517
1518      if (isRTL()) {
1519        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
1520      }
1521
1522      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
1523    } // Static
1524
1525
1526    static carouselInterface(element, config) {
1527      const data = Carousel.getOrCreateInstance(element, config);
1528      let {
1529        _config
1530      } = data;
1531
1532      if (typeof config === 'object') {
1533        _config = { ..._config,
1534          ...config
1535        };
1536      }
1537
1538      const action = typeof config === 'string' ? config : _config.slide;
1539
1540      if (typeof config === 'number') {
1541        data.to(config);
1542      } else if (typeof action === 'string') {
1543        if (typeof data[action] === 'undefined') {
1544          throw new TypeError(`No method named "${action}"`);
1545        }
1546
1547        data[action]();
1548      } else if (_config.interval && _config.ride) {
1549        data.pause();
1550        data.cycle();
1551      }
1552    }
1553
1554    static jQueryInterface(config) {
1555      return this.each(function () {
1556        Carousel.carouselInterface(this, config);
1557      });
1558    }
1559
1560    static dataApiClickHandler(event) {
1561      const target = getElementFromSelector(this);
1562
1563      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
1564        return;
1565      }
1566
1567      const config = { ...Manipulator.getDataAttributes(target),
1568        ...Manipulator.getDataAttributes(this)
1569      };
1570      const slideIndex = this.getAttribute('data-bs-slide-to');
1571
1572      if (slideIndex) {
1573        config.interval = false;
1574      }
1575
1576      Carousel.carouselInterface(target, config);
1577
1578      if (slideIndex) {
1579        Carousel.getInstance(target).to(slideIndex);
1580      }
1581
1582      event.preventDefault();
1583    }
1584
1585  }
1586  /**
1587   * ------------------------------------------------------------------------
1588   * Data Api implementation
1589   * ------------------------------------------------------------------------
1590   */
1591
1592
1593  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);
1594  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
1595    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
1596
1597    for (let i = 0, len = carousels.length; i < len; i++) {
1598      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));
1599    }
1600  });
1601  /**
1602   * ------------------------------------------------------------------------
1603   * jQuery
1604   * ------------------------------------------------------------------------
1605   * add .Carousel to jQuery only if jQuery is present
1606   */
1607
1608  defineJQueryPlugin(Carousel);
1609
1610  /**
1611   * --------------------------------------------------------------------------
1612   * Bootstrap (v5.1.3): collapse.js
1613   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
1614   * --------------------------------------------------------------------------
1615   */
1616  /**
1617   * ------------------------------------------------------------------------
1618   * Constants
1619   * ------------------------------------------------------------------------
1620   */
1621
1622  const NAME$a = 'collapse';
1623  const DATA_KEY$9 = 'bs.collapse';
1624  const EVENT_KEY$9 = `.${DATA_KEY$9}`;
1625  const DATA_API_KEY$5 = '.data-api';
1626  const Default$9 = {
1627    toggle: true,
1628    parent: null
1629  };
1630  const DefaultType$9 = {
1631    toggle: 'boolean',
1632    parent: '(null|element)'
1633  };
1634  const EVENT_SHOW$5 = `show${EVENT_KEY$9}`;
1635  const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;
1636  const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;
1637  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;
1638  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;
1639  const CLASS_NAME_SHOW$7 = 'show';
1640  const CLASS_NAME_COLLAPSE = 'collapse';
1641  const CLASS_NAME_COLLAPSING = 'collapsing';
1642  const CLASS_NAME_COLLAPSED = 'collapsed';
1643  const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
1644  const CLASS_NAME_HORIZONTAL = 'collapse-horizontal';
1645  const WIDTH = 'width';
1646  const HEIGHT = 'height';
1647  const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';
1648  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
1649  /**
1650   * ------------------------------------------------------------------------
1651   * Class Definition
1652   * ------------------------------------------------------------------------
1653   */
1654
1655  class Collapse extends BaseComponent {
1656    constructor(element, config) {
1657      super(element);
1658      this._isTransitioning = false;
1659      this._config = this._getConfig(config);
1660      this._triggerArray = [];
1661      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
1662
1663      for (let i = 0, len = toggleList.length; i < len; i++) {
1664        const elem = toggleList[i];
1665        const selector = getSelectorFromElement(elem);
1666        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);
1667
1668        if (selector !== null && filterElement.length) {
1669          this._selector = selector;
1670
1671          this._triggerArray.push(elem);
1672        }
1673      }
1674
1675      this._initializeChildren();
1676
1677      if (!this._config.parent) {
1678        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
1679      }
1680
1681      if (this._config.toggle) {
1682        this.toggle();
1683      }
1684    } // Getters
1685
1686
1687    static get Default() {
1688      return Default$9;
1689    }
1690
1691    static get NAME() {
1692      return NAME$a;
1693    } // Public
1694
1695
1696    toggle() {
1697      if (this._isShown()) {
1698        this.hide();
1699      } else {
1700        this.show();
1701      }
1702    }
1703
1704    show() {
1705      if (this._isTransitioning || this._isShown()) {
1706        return;
1707      }
1708
1709      let actives = [];
1710      let activesData;
1711
1712      if (this._config.parent) {
1713        const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1714        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth
1715      }
1716
1717      const container = SelectorEngine.findOne(this._selector);
1718
1719      if (actives.length) {
1720        const tempActiveData = actives.find(elem => container !== elem);
1721        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;
1722
1723        if (activesData && activesData._isTransitioning) {
1724          return;
1725        }
1726      }
1727
1728      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);
1729
1730      if (startEvent.defaultPrevented) {
1731        return;
1732      }
1733
1734      actives.forEach(elemActive => {
1735        if (container !== elemActive) {
1736          Collapse.getOrCreateInstance(elemActive, {
1737            toggle: false
1738          }).hide();
1739        }
1740
1741        if (!activesData) {
1742          Data.set(elemActive, DATA_KEY$9, null);
1743        }
1744      });
1745
1746      const dimension = this._getDimension();
1747
1748      this._element.classList.remove(CLASS_NAME_COLLAPSE);
1749
1750      this._element.classList.add(CLASS_NAME_COLLAPSING);
1751
1752      this._element.style[dimension] = 0;
1753
1754      this._addAriaAndCollapsedClass(this._triggerArray, true);
1755
1756      this._isTransitioning = true;
1757
1758      const complete = () => {
1759        this._isTransitioning = false;
1760
1761        this._element.classList.remove(CLASS_NAME_COLLAPSING);
1762
1763        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1764
1765        this._element.style[dimension] = '';
1766        EventHandler.trigger(this._element, EVENT_SHOWN$5);
1767      };
1768
1769      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
1770      const scrollSize = `scroll${capitalizedDimension}`;
1771
1772      this._queueCallback(complete, this._element, true);
1773
1774      this._element.style[dimension] = `${this._element[scrollSize]}px`;
1775    }
1776
1777    hide() {
1778      if (this._isTransitioning || !this._isShown()) {
1779        return;
1780      }
1781
1782      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);
1783
1784      if (startEvent.defaultPrevented) {
1785        return;
1786      }
1787
1788      const dimension = this._getDimension();
1789
1790      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
1791      reflow(this._element);
1792
1793      this._element.classList.add(CLASS_NAME_COLLAPSING);
1794
1795      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
1796
1797      const triggerArrayLength = this._triggerArray.length;
1798
1799      for (let i = 0; i < triggerArrayLength; i++) {
1800        const trigger = this._triggerArray[i];
1801        const elem = getElementFromSelector(trigger);
1802
1803        if (elem && !this._isShown(elem)) {
1804          this._addAriaAndCollapsedClass([trigger], false);
1805        }
1806      }
1807
1808      this._isTransitioning = true;
1809
1810      const complete = () => {
1811        this._isTransitioning = false;
1812
1813        this._element.classList.remove(CLASS_NAME_COLLAPSING);
1814
1815        this._element.classList.add(CLASS_NAME_COLLAPSE);
1816
1817        EventHandler.trigger(this._element, EVENT_HIDDEN$5);
1818      };
1819
1820      this._element.style[dimension] = '';
1821
1822      this._queueCallback(complete, this._element, true);
1823    }
1824
1825    _isShown(element = this._element) {
1826      return element.classList.contains(CLASS_NAME_SHOW$7);
1827    } // Private
1828
1829
1830    _getConfig(config) {
1831      config = { ...Default$9,
1832        ...Manipulator.getDataAttributes(this._element),
1833        ...config
1834      };
1835      config.toggle = Boolean(config.toggle); // Coerce string values
1836
1837      config.parent = getElement(config.parent);
1838      typeCheckConfig(NAME$a, config, DefaultType$9);
1839      return config;
1840    }
1841
1842    _getDimension() {
1843      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
1844    }
1845
1846    _initializeChildren() {
1847      if (!this._config.parent) {
1848        return;
1849      }
1850
1851      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
1852      SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {
1853        const selected = getElementFromSelector(element);
1854
1855        if (selected) {
1856          this._addAriaAndCollapsedClass([element], this._isShown(selected));
1857        }
1858      });
1859    }
1860
1861    _addAriaAndCollapsedClass(triggerArray, isOpen) {
1862      if (!triggerArray.length) {
1863        return;
1864      }
1865
1866      triggerArray.forEach(elem => {
1867        if (isOpen) {
1868          elem.classList.remove(CLASS_NAME_COLLAPSED);
1869        } else {
1870          elem.classList.add(CLASS_NAME_COLLAPSED);
1871        }
1872
1873        elem.setAttribute('aria-expanded', isOpen);
1874      });
1875    } // Static
1876
1877
1878    static jQueryInterface(config) {
1879      return this.each(function () {
1880        const _config = {};
1881
1882        if (typeof config === 'string' && /show|hide/.test(config)) {
1883          _config.toggle = false;
vendor: 4,195 bytes, lines 1884-2014
1884        }
1885
1886        const data = Collapse.getOrCreateInstance(this, _config);
1887
1888        if (typeof config === 'string') {
1889          if (typeof data[config] === 'undefined') {
1890            throw new TypeError(`No method named "${config}"`);
1891          }
1892
1893          data[config]();
1894        }
1895      });
1896    }
1897
1898  }
1899  /**
1900   * ------------------------------------------------------------------------
1901   * Data Api implementation
1902   * ------------------------------------------------------------------------
1903   */
1904
1905
1906  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
1907    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
1908    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
1909      event.preventDefault();
1910    }
1911
1912    const selector = getSelectorFromElement(this);
1913    const selectorElements = SelectorEngine.find(selector);
1914    selectorElements.forEach(element => {
1915      Collapse.getOrCreateInstance(element, {
1916        toggle: false
1917      }).toggle();
1918    });
1919  });
1920  /**
1921   * ------------------------------------------------------------------------
1922   * jQuery
1923   * ------------------------------------------------------------------------
1924   * add .Collapse to jQuery only if jQuery is present
1925   */
1926
1927  defineJQueryPlugin(Collapse);
1928
1929  var top = 'top';
1930  var bottom = 'bottom';
1931  var right = 'right';
1932  var left = 'left';
1933  var auto = 'auto';
1934  var basePlacements = [top, bottom, right, left];
1935  var start = 'start';
1936  var end = 'end';
1937  var clippingParents = 'clippingParents';
1938  var viewport = 'viewport';
1939  var popper = 'popper';
1940  var reference = 'reference';
1941  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
1942    return acc.concat([placement + "-" + start, placement + "-" + end]);
1943  }, []);
1944  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
1945    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
1946  }, []); // modifiers that need to read the DOM
1947
1948  var beforeRead = 'beforeRead';
1949  var read = 'read';
1950  var afterRead = 'afterRead'; // pure-logic modifiers
1951
1952  var beforeMain = 'beforeMain';
1953  var main = 'main';
1954  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
1955
1956  var beforeWrite = 'beforeWrite';
1957  var write = 'write';
1958  var afterWrite = 'afterWrite';
1959  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
1960
1961  function getNodeName(element) {
1962    return element ? (element.nodeName || '').toLowerCase() : null;
1963  }
1964
1965  function getWindow(node) {
1966    if (node == null) {
1967      return window;
1968    }
1969
1970    if (node.toString() !== '[object Window]') {
1971      var ownerDocument = node.ownerDocument;
1972      return ownerDocument ? ownerDocument.defaultView || window : window;
1973    }
1974
1975    return node;
1976  }
1977
1978  function isElement(node) {
1979    var OwnElement = getWindow(node).Element;
1980    return node instanceof OwnElement || node instanceof Element;
1981  }
1982
1983  function isHTMLElement(node) {
1984    var OwnElement = getWindow(node).HTMLElement;
1985    return node instanceof OwnElement || node instanceof HTMLElement;
1986  }
1987
1988  function isShadowRoot(node) {
1989    // IE 11 has no ShadowRoot
1990    if (typeof ShadowRoot === 'undefined') {
1991      return false;
1992    }
1993
1994    var OwnElement = getWindow(node).ShadowRoot;
1995    return node instanceof OwnElement || node instanceof ShadowRoot;
1996  }
1997
1998  // and applies them to the HTMLElements such as popper and arrow
1999
2000  function applyStyles(_ref) {
2001    var state = _ref.state;
2002    Object.keys(state.elements).forEach(function (name) {
2003      var style = state.styles[name] || {};
2004      var attributes = state.attributes[name] || {};
2005      var element = state.elements[name]; // arrow is optional + virtual elements
2006
2007      if (!isHTMLElement(element) || !getNodeName(element)) {
2008        return;
2009      } // Flow doesn't support to extend this property, but it's the most
2010      // effective way to apply styles to an HTMLElement
2011      // $FlowFixMe[cannot-write]
2012
2013
2014      Object.assign(element.style, style);
vendor: 4,483 bytes, lines 2015-2166
2015      Object.keys(attributes).forEach(function (name) {
2016        var value = attributes[name];
2017
2018        if (value === false) {
2019          element.removeAttribute(name);
2020        } else {
2021          element.setAttribute(name, value === true ? '' : value);
2022        }
2023      });
2024    });
2025  }
2026
2027  function effect$2(_ref2) {
2028    var state = _ref2.state;
2029    var initialStyles = {
2030      popper: {
2031        position: state.options.strategy,
2032        left: '0',
2033        top: '0',
2034        margin: '0'
2035      },
2036      arrow: {
2037        position: 'absolute'
2038      },
2039      reference: {}
2040    };
2041    Object.assign(state.elements.popper.style, initialStyles.popper);
2042    state.styles = initialStyles;
2043
2044    if (state.elements.arrow) {
2045      Object.assign(state.elements.arrow.style, initialStyles.arrow);
2046    }
2047
2048    return function () {
2049      Object.keys(state.elements).forEach(function (name) {
2050        var element = state.elements[name];
2051        var attributes = state.attributes[name] || {};
2052        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
2053
2054        var style = styleProperties.reduce(function (style, property) {
2055          style[property] = '';
2056          return style;
2057        }, {}); // arrow is optional + virtual elements
2058
2059        if (!isHTMLElement(element) || !getNodeName(element)) {
2060          return;
2061        }
2062
2063        Object.assign(element.style, style);
2064        Object.keys(attributes).forEach(function (attribute) {
2065          element.removeAttribute(attribute);
2066        });
2067      });
2068    };
2069  } // eslint-disable-next-line import/no-unused-modules
2070
2071
2072  const applyStyles$1 = {
2073    name: 'applyStyles',
2074    enabled: true,
2075    phase: 'write',
2076    fn: applyStyles,
2077    effect: effect$2,
2078    requires: ['computeStyles']
2079  };
2080
2081  function getBasePlacement(placement) {
2082    return placement.split('-')[0];
2083  }
2084
2085  // import { isHTMLElement } from './instanceOf';
2086  function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars
2087  includeScale) {
2088
2089    var rect = element.getBoundingClientRect();
2090    var scaleX = 1;
2091    var scaleY = 1; // FIXME:
2092    // `offsetWidth` returns an integer while `getBoundingClientRect`
2093    // returns a float. This results in `scaleX` or `scaleY` being
2094    // non-1 when it should be for elements that aren't a full pixel in
2095    // width or height.
2096    // if (isHTMLElement(element) && includeScale) {
2097    //   const offsetHeight = element.offsetHeight;
2098    //   const offsetWidth = element.offsetWidth;
2099    //   // Do not attempt to divide by 0, otherwise we get `Infinity` as scale
2100    //   // Fallback to 1 in case both values are `0`
2101    //   if (offsetWidth > 0) {
2102    //     scaleX = rect.width / offsetWidth || 1;
2103    //   }
2104    //   if (offsetHeight > 0) {
2105    //     scaleY = rect.height / offsetHeight || 1;
2106    //   }
2107    // }
2108
2109    return {
2110      width: rect.width / scaleX,
2111      height: rect.height / scaleY,
2112      top: rect.top / scaleY,
2113      right: rect.right / scaleX,
2114      bottom: rect.bottom / scaleY,
2115      left: rect.left / scaleX,
2116      x: rect.left / scaleX,
2117      y: rect.top / scaleY
2118    };
2119  }
2120
2121  // means it doesn't take into account transforms.
2122
2123  function getLayoutRect(element) {
2124    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
2125    // Fixes https://github.com/popperjs/popper-core/issues/1223
2126
2127    var width = element.offsetWidth;
2128    var height = element.offsetHeight;
2129
2130    if (Math.abs(clientRect.width - width) <= 1) {
2131      width = clientRect.width;
2132    }
2133
2134    if (Math.abs(clientRect.height - height) <= 1) {
2135      height = clientRect.height;
2136    }
2137
2138    return {
2139      x: element.offsetLeft,
2140      y: element.offsetTop,
2141      width: width,
2142      height: height
2143    };
2144  }
2145
2146  function contains(parent, child) {
2147    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
2148
2149    if (parent.contains(child)) {
2150      return true;
2151    } // then fallback to custom implementation with Shadow DOM support
2152    else if (rootNode && isShadowRoot(rootNode)) {
2153        var next = child;
2154
2155        do {
2156          if (next && parent.isSameNode(next)) {
2157            return true;
2158          } // $FlowFixMe[prop-missing]: need a better way to handle this...
2159
2160
2161          next = next.parentNode || next.host;
2162        } while (next);
2163      } // Give up, the result is false
2164
2165
2166    return false;
vendor: 8,638 bytes, lines 2167-2423
2167  }
2168
2169  function getComputedStyle$1(element) {
2170    return getWindow(element).getComputedStyle(element);
2171  }
2172
2173  function isTableElement(element) {
2174    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
2175  }
2176
2177  function getDocumentElement(element) {
2178    // $FlowFixMe[incompatible-return]: assume body is always available
2179    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
2180    element.document) || window.document).documentElement;
2181  }
2182
2183  function getParentNode(element) {
2184    if (getNodeName(element) === 'html') {
2185      return element;
2186    }
2187
2188    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
2189      // $FlowFixMe[incompatible-return]
2190      // $FlowFixMe[prop-missing]
2191      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
2192      element.parentNode || ( // DOM Element detected
2193      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
2194      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
2195      getDocumentElement(element) // fallback
2196
2197    );
2198  }
2199
2200  function getTrueOffsetParent(element) {
2201    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
2202    getComputedStyle$1(element).position === 'fixed') {
2203      return null;
2204    }
2205
2206    return element.offsetParent;
2207  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
2208  // return the containing block
2209
2210
2211  function getContainingBlock(element) {
2212    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
2213    var isIE = navigator.userAgent.indexOf('Trident') !== -1;
2214
2215    if (isIE && isHTMLElement(element)) {
2216      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
2217      var elementCss = getComputedStyle$1(element);
2218
2219      if (elementCss.position === 'fixed') {
2220        return null;
2221      }
2222    }
2223
2224    var currentNode = getParentNode(element);
2225
2226    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
2227      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
2228      // create a containing block.
2229      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
2230
2231      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
2232        return currentNode;
2233      } else {
2234        currentNode = currentNode.parentNode;
2235      }
2236    }
2237
2238    return null;
2239  } // Gets the closest ancestor positioned element. Handles some edge cases,
2240  // such as table ancestors and cross browser bugs.
2241
2242
2243  function getOffsetParent(element) {
2244    var window = getWindow(element);
2245    var offsetParent = getTrueOffsetParent(element);
2246
2247    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
2248      offsetParent = getTrueOffsetParent(offsetParent);
2249    }
2250
2251    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
2252      return window;
2253    }
2254
2255    return offsetParent || getContainingBlock(element) || window;
2256  }
2257
2258  function getMainAxisFromPlacement(placement) {
2259    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
2260  }
2261
2262  var max = Math.max;
2263  var min = Math.min;
2264  var round = Math.round;
2265
2266  function within(min$1, value, max$1) {
2267    return max(min$1, min(value, max$1));
2268  }
2269
2270  function getFreshSideObject() {
2271    return {
2272      top: 0,
2273      right: 0,
2274      bottom: 0,
2275      left: 0
2276    };
2277  }
2278
2279  function mergePaddingObject(paddingObject) {
2280    return Object.assign({}, getFreshSideObject(), paddingObject);
2281  }
2282
2283  function expandToHashMap(value, keys) {
2284    return keys.reduce(function (hashMap, key) {
2285      hashMap[key] = value;
2286      return hashMap;
2287    }, {});
2288  }
2289
2290  var toPaddingObject = function toPaddingObject(padding, state) {
2291    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
2292      placement: state.placement
2293    })) : padding;
2294    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
2295  };
2296
2297  function arrow(_ref) {
2298    var _state$modifiersData$;
2299
2300    var state = _ref.state,
2301        name = _ref.name,
2302        options = _ref.options;
2303    var arrowElement = state.elements.arrow;
2304    var popperOffsets = state.modifiersData.popperOffsets;
2305    var basePlacement = getBasePlacement(state.placement);
2306    var axis = getMainAxisFromPlacement(basePlacement);
2307    var isVertical = [left, right].indexOf(basePlacement) >= 0;
2308    var len = isVertical ? 'height' : 'width';
2309
2310    if (!arrowElement || !popperOffsets) {
2311      return;
2312    }
2313
2314    var paddingObject = toPaddingObject(options.padding, state);
2315    var arrowRect = getLayoutRect(arrowElement);
2316    var minProp = axis === 'y' ? top : left;
2317    var maxProp = axis === 'y' ? bottom : right;
2318    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
2319    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
2320    var arrowOffsetParent = getOffsetParent(arrowElement);
2321    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
2322    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
2323    // outside of the popper bounds
2324
2325    var min = paddingObject[minProp];
2326    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
2327    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
2328    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
2329
2330    var axisProp = axis;
2331    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
2332  }
2333
2334  function effect$1(_ref2) {
2335    var state = _ref2.state,
2336        options = _ref2.options;
2337    var _options$element = options.element,
2338        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
2339
2340    if (arrowElement == null) {
2341      return;
2342    } // CSS selector
2343
2344
2345    if (typeof arrowElement === 'string') {
2346      arrowElement = state.elements.popper.querySelector(arrowElement);
2347
2348      if (!arrowElement) {
2349        return;
2350      }
2351    }
2352
2353    if (!contains(state.elements.popper, arrowElement)) {
2354
2355      return;
2356    }
2357
2358    state.elements.arrow = arrowElement;
2359  } // eslint-disable-next-line import/no-unused-modules
2360
2361
2362  const arrow$1 = {
2363    name: 'arrow',
2364    enabled: true,
2365    phase: 'main',
2366    fn: arrow,
2367    effect: effect$1,
2368    requires: ['popperOffsets'],
2369    requiresIfExists: ['preventOverflow']
2370  };
2371
2372  function getVariation(placement) {
2373    return placement.split('-')[1];
2374  }
2375
2376  var unsetSides = {
2377    top: 'auto',
2378    right: 'auto',
2379    bottom: 'auto',
2380    left: 'auto'
2381  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
2382  // Zooming can change the DPR, but it seems to report a value that will
2383  // cleanly divide the values into the appropriate subpixels.
2384
2385  function roundOffsetsByDPR(_ref) {
2386    var x = _ref.x,
2387        y = _ref.y;
2388    var win = window;
2389    var dpr = win.devicePixelRatio || 1;
2390    return {
2391      x: round(round(x * dpr) / dpr) || 0,
2392      y: round(round(y * dpr) / dpr) || 0
2393    };
2394  }
2395
2396  function mapToStyles(_ref2) {
2397    var _Object$assign2;
2398
2399    var popper = _ref2.popper,
2400        popperRect = _ref2.popperRect,
2401        placement = _ref2.placement,
2402        variation = _ref2.variation,
2403        offsets = _ref2.offsets,
2404        position = _ref2.position,
2405        gpuAcceleration = _ref2.gpuAcceleration,
2406        adaptive = _ref2.adaptive,
2407        roundOffsets = _ref2.roundOffsets;
2408
2409    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
2410        _ref3$x = _ref3.x,
2411        x = _ref3$x === void 0 ? 0 : _ref3$x,
2412        _ref3$y = _ref3.y,
2413        y = _ref3$y === void 0 ? 0 : _ref3$y;
2414
2415    var hasX = offsets.hasOwnProperty('x');
2416    var hasY = offsets.hasOwnProperty('y');
2417    var sideX = left;
2418    var sideY = top;
2419    var win = window;
2420
2421    if (adaptive) {
2422      var offsetParent = getOffsetParent(popper);
2423      var heightProp = 'clientHeight';
vendor: 4,274 bytes, lines 2424-2542
2424      var widthProp = 'clientWidth';
2425
2426      if (offsetParent === getWindow(popper)) {
2427        offsetParent = getDocumentElement(popper);
2428
2429        if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') {
2430          heightProp = 'scrollHeight';
2431          widthProp = 'scrollWidth';
2432        }
2433      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
2434
2435
2436      offsetParent = offsetParent;
2437
2438      if (placement === top || (placement === left || placement === right) && variation === end) {
2439        sideY = bottom; // $FlowFixMe[prop-missing]
2440
2441        y -= offsetParent[heightProp] - popperRect.height;
2442        y *= gpuAcceleration ? 1 : -1;
2443      }
2444
2445      if (placement === left || (placement === top || placement === bottom) && variation === end) {
2446        sideX = right; // $FlowFixMe[prop-missing]
2447
2448        x -= offsetParent[widthProp] - popperRect.width;
2449        x *= gpuAcceleration ? 1 : -1;
2450      }
2451    }
2452
2453    var commonStyles = Object.assign({
2454      position: position
2455    }, adaptive && unsetSides);
2456
2457    if (gpuAcceleration) {
2458      var _Object$assign;
2459
2460      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
2461    }
2462
2463    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
2464  }
2465
2466  function computeStyles(_ref4) {
2467    var state = _ref4.state,
2468        options = _ref4.options;
2469    var _options$gpuAccelerat = options.gpuAcceleration,
2470        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
2471        _options$adaptive = options.adaptive,
2472        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
2473        _options$roundOffsets = options.roundOffsets,
2474        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
2475
2476    var commonStyles = {
2477      placement: getBasePlacement(state.placement),
2478      variation: getVariation(state.placement),
2479      popper: state.elements.popper,
2480      popperRect: state.rects.popper,
2481      gpuAcceleration: gpuAcceleration
2482    };
2483
2484    if (state.modifiersData.popperOffsets != null) {
2485      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
2486        offsets: state.modifiersData.popperOffsets,
2487        position: state.options.strategy,
2488        adaptive: adaptive,
2489        roundOffsets: roundOffsets
2490      })));
2491    }
2492
2493    if (state.modifiersData.arrow != null) {
2494      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
2495        offsets: state.modifiersData.arrow,
2496        position: 'absolute',
2497        adaptive: false,
2498        roundOffsets: roundOffsets
2499      })));
2500    }
2501
2502    state.attributes.popper = Object.assign({}, state.attributes.popper, {
2503      'data-popper-placement': state.placement
2504    });
2505  } // eslint-disable-next-line import/no-unused-modules
2506
2507
2508  const computeStyles$1 = {
2509    name: 'computeStyles',
2510    enabled: true,
2511    phase: 'beforeWrite',
2512    fn: computeStyles,
2513    data: {}
2514  };
2515
2516  var passive = {
2517    passive: true
2518  };
2519
2520  function effect(_ref) {
2521    var state = _ref.state,
2522        instance = _ref.instance,
2523        options = _ref.options;
2524    var _options$scroll = options.scroll,
2525        scroll = _options$scroll === void 0 ? true : _options$scroll,
2526        _options$resize = options.resize,
2527        resize = _options$resize === void 0 ? true : _options$resize;
2528    var window = getWindow(state.elements.popper);
2529    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
2530
2531    if (scroll) {
2532      scrollParents.forEach(function (scrollParent) {
2533        scrollParent.addEventListener('scroll', instance.update, passive);
2534      });
2535    }
2536
2537    if (resize) {
2538      window.addEventListener('resize', instance.update, passive);
2539    }
2540
2541    return function () {
2542      if (scroll) {
2543        scrollParents.forEach(function (scrollParent) {
2544          scrollParent.removeEventListener('scroll', instance.update, passive);
2545        });
2546      }
2547
2548      if (resize) {
2549        window.removeEventListener('resize', instance.update, passive);
2550      }
2551    };
2552  } // eslint-disable-next-line import/no-unused-modules
2553
2554
2555  const eventListeners = {
2556    name: 'eventListeners',
2557    enabled: true,
2558    phase: 'write',
2559    fn: function fn() {},
2560    effect: effect,
2561    data: {}
2562  };
2563
2564  var hash$1 = {
2565    left: 'right',
2566    right: 'left',
2567    bottom: 'top',
2568    top: 'bottom'
2569  };
2570  function getOppositePlacement(placement) {
2571    return placement.replace(/left|right|bottom|top/g, function (matched) {
2572      return hash$1[matched];
2573    });
2574  }
2575
2576  var hash = {
2577    start: 'end',
2578    end: 'start'
2579  };
2580  function getOppositeVariationPlacement(placement) {
2581    return placement.replace(/start|end/g, function (matched) {
2582      return hash[matched];
2583    });
2584  }
2585
2586  function getWindowScroll(node) {
2587    var win = getWindow(node);
2588    var scrollLeft = win.pageXOffset;
2589    var scrollTop = win.pageYOffset;
2590    return {
2591      scrollLeft: scrollLeft,
2592      scrollTop: scrollTop
2593    };
2594  }
2595
2596  function getWindowScrollBarX(element) {
2597    // If <html> has a CSS width greater than the viewport, then this will be
2598    // incorrect for RTL.
2599    // Popper 1 is broken in this case and never had a bug report so let's assume
2600    // it's not an issue. I don't think anyone ever specifies width on <html>
2601    // anyway.
2602    // Browsers where the left scrollbar doesn't cause an issue report `0` for
2603    // this (e.g. Edge 2019, IE11, Safari)
2604    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
2605  }
2606
2607  function getViewportRect(element) {
2608    var win = getWindow(element);
2609    var html = getDocumentElement(element);
2610    var visualViewport = win.visualViewport;
2611    var width = html.clientWidth;
2612    var height = html.clientHeight;
2613    var x = 0;
2614    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
2615    // can be obscured underneath it.
2616    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
2617    // if it isn't open, so if this isn't available, the popper will be detected
2618    // to overflow the bottom of the screen too early.
2619
2620    if (visualViewport) {
2621      width = visualViewport.width;
vendor: 5,262 bytes, lines 2622-2756
2622      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
2623      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding
2624      // errors due to floating point numbers, so we need to check precision.
2625      // Safari returns a number <= 0, usually < -1 when pinch-zoomed
2626      // Feature detection fails in mobile emulation mode in Chrome.
2627      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
2628      // 0.001
2629      // Fallback here: "Not Safari" userAgent
2630
2631      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
2632        x = visualViewport.offsetLeft;
2633        y = visualViewport.offsetTop;
2634      }
2635    }
2636
2637    return {
2638      width: width,
2639      height: height,
2640      x: x + getWindowScrollBarX(element),
2641      y: y
2642    };
2643  }
2644
2645  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
2646
2647  function getDocumentRect(element) {
2648    var _element$ownerDocumen;
2649
2650    var html = getDocumentElement(element);
2651    var winScroll = getWindowScroll(element);
2652    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
2653    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
2654    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
2655    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
2656    var y = -winScroll.scrollTop;
2657
2658    if (getComputedStyle$1(body || html).direction === 'rtl') {
2659      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
2660    }
2661
2662    return {
2663      width: width,
2664      height: height,
2665      x: x,
2666      y: y
2667    };
2668  }
2669
2670  function isScrollParent(element) {
2671    // Firefox wants us to check `-x` and `-y` variations as well
2672    var _getComputedStyle = getComputedStyle$1(element),
2673        overflow = _getComputedStyle.overflow,
2674        overflowX = _getComputedStyle.overflowX,
2675        overflowY = _getComputedStyle.overflowY;
2676
2677    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
2678  }
2679
2680  function getScrollParent(node) {
2681    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
2682      // $FlowFixMe[incompatible-return]: assume body is always available
2683      return node.ownerDocument.body;
2684    }
2685
2686    if (isHTMLElement(node) && isScrollParent(node)) {
2687      return node;
2688    }
2689
2690    return getScrollParent(getParentNode(node));
2691  }
2692
2693  /*
2694  given a DOM element, return the list of all scroll parents, up the list of ancesors
2695  until we get to the top window object. This list is what we attach scroll listeners
2696  to, because if any of these parent elements scroll, we'll need to re-calculate the
2697  reference element's position.
2698  */
2699
2700  function listScrollParents(element, list) {
2701    var _element$ownerDocumen;
2702
2703    if (list === void 0) {
2704      list = [];
2705    }
2706
2707    var scrollParent = getScrollParent(element);
2708    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
2709    var win = getWindow(scrollParent);
2710    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
2711    var updatedList = list.concat(target);
2712    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
2713    updatedList.concat(listScrollParents(getParentNode(target)));
2714  }
2715
2716  function rectToClientRect(rect) {
2717    return Object.assign({}, rect, {
2718      left: rect.x,
2719      top: rect.y,
2720      right: rect.x + rect.width,
2721      bottom: rect.y + rect.height
2722    });
2723  }
2724
2725  function getInnerBoundingClientRect(element) {
2726    var rect = getBoundingClientRect(element);
2727    rect.top = rect.top + element.clientTop;
2728    rect.left = rect.left + element.clientLeft;
2729    rect.bottom = rect.top + element.clientHeight;
2730    rect.right = rect.left + element.clientWidth;
2731    rect.width = element.clientWidth;
2732    rect.height = element.clientHeight;
2733    rect.x = rect.left;
2734    rect.y = rect.top;
2735    return rect;
2736  }
2737
2738  function getClientRectFromMixedType(element, clippingParent) {
2739    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
2740  } // A "clipping parent" is an overflowable container with the characteristic of
2741  // clipping (or hiding) overflowing elements with a position different from
2742  // `initial`
2743
2744
2745  function getClippingParents(element) {
2746    var clippingParents = listScrollParents(getParentNode(element));
2747    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
2748    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
2749
2750    if (!isElement(clipperElement)) {
2751      return [];
2752    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
2753
2754
2755    return clippingParents.filter(function (clippingParent) {
2756      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'
vendor: 5,218 bytes, lines 2756-2889
2756;
2757    });
2758  } // Gets the maximum area that the element is visible in due to any number of
2759  // clipping parents
2760
2761
2762  function getClippingRect(element, boundary, rootBoundary) {
2763    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
2764    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
2765    var firstClippingParent = clippingParents[0];
2766    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
2767      var rect = getClientRectFromMixedType(element, clippingParent);
2768      accRect.top = max(rect.top, accRect.top);
2769      accRect.right = min(rect.right, accRect.right);
2770      accRect.bottom = min(rect.bottom, accRect.bottom);
2771      accRect.left = max(rect.left, accRect.left);
2772      return accRect;
2773    }, getClientRectFromMixedType(element, firstClippingParent));
2774    clippingRect.width = clippingRect.right - clippingRect.left;
2775    clippingRect.height = clippingRect.bottom - clippingRect.top;
2776    clippingRect.x = clippingRect.left;
2777    clippingRect.y = clippingRect.top;
2778    return clippingRect;
2779  }
2780
2781  function computeOffsets(_ref) {
2782    var reference = _ref.reference,
2783        element = _ref.element,
2784        placement = _ref.placement;
2785    var basePlacement = placement ? getBasePlacement(placement) : null;
2786    var variation = placement ? getVariation(placement) : null;
2787    var commonX = reference.x + reference.width / 2 - element.width / 2;
2788    var commonY = reference.y + reference.height / 2 - element.height / 2;
2789    var offsets;
2790
2791    switch (basePlacement) {
2792      case top:
2793        offsets = {
2794          x: commonX,
2795          y: reference.y - element.height
2796        };
2797        break;
2798
2799      case bottom:
2800        offsets = {
2801          x: commonX,
2802          y: reference.y + reference.height
2803        };
2804        break;
2805
2806      case right:
2807        offsets = {
2808          x: reference.x + reference.width,
2809          y: commonY
2810        };
2811        break;
2812
2813      case left:
2814        offsets = {
2815          x: reference.x - element.width,
2816          y: commonY
2817        };
2818        break;
2819
2820      default:
2821        offsets = {
2822          x: reference.x,
2823          y: reference.y
2824        };
2825    }
2826
2827    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
2828
2829    if (mainAxis != null) {
2830      var len = mainAxis === 'y' ? 'height' : 'width';
2831
2832      switch (variation) {
2833        case start:
2834          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
2835          break;
2836
2837        case end:
2838          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
2839          break;
2840      }
2841    }
2842
2843    return offsets;
2844  }
2845
2846  function detectOverflow(state, options) {
2847    if (options === void 0) {
2848      options = {};
2849    }
2850
2851    var _options = options,
2852        _options$placement = _options.placement,
2853        placement = _options$placement === void 0 ? state.placement : _options$placement,
2854        _options$boundary = _options.boundary,
2855        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
2856        _options$rootBoundary = _options.rootBoundary,
2857        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
2858        _options$elementConte = _options.elementContext,
2859        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
2860        _options$altBoundary = _options.altBoundary,
2861        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
2862        _options$padding = _options.padding,
2863        padding = _options$padding === void 0 ? 0 : _options$padding;
2864    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
2865    var altContext = elementContext === popper ? reference : popper;
2866    var popperRect = state.rects.popper;
2867    var element = state.elements[altBoundary ? altContext : elementContext];
2868    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
2869    var referenceClientRect = getBoundingClientRect(state.elements.reference);
2870    var popperOffsets = computeOffsets({
2871      reference: referenceClientRect,
2872      element: popperRect,
2873      strategy: 'absolute',
2874      placement: placement
2875    });
2876    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
2877    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
2878    // 0 or negative = within the clipping rect
2879
2880    var overflowOffsets = {
2881      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
2882      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
2883      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
2884      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
2885    };
2886    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
2887
2888    if (elementContext === popper && offsetData) {
2889      var offset = offsetData[placement];
vendor: 12,183 bytes, lines 2890-3252
2890      Object.keys(overflowOffsets).forEach(function (key) {
2891        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
2892        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
2893        overflowOffsets[key] += offset[axis] * multiply;
2894      });
2895    }
2896
2897    return overflowOffsets;
2898  }
2899
2900  function computeAutoPlacement(state, options) {
2901    if (options === void 0) {
2902      options = {};
2903    }
2904
2905    var _options = options,
2906        placement = _options.placement,
2907        boundary = _options.boundary,
2908        rootBoundary = _options.rootBoundary,
2909        padding = _options.padding,
2910        flipVariations = _options.flipVariations,
2911        _options$allowedAutoP = _options.allowedAutoPlacements,
2912        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
2913    var variation = getVariation(placement);
2914    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
2915      return getVariation(placement) === variation;
2916    }) : basePlacements;
2917    var allowedPlacements = placements$1.filter(function (placement) {
2918      return allowedAutoPlacements.indexOf(placement) >= 0;
2919    });
2920
2921    if (allowedPlacements.length === 0) {
2922      allowedPlacements = placements$1;
2923    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
2924
2925
2926    var overflows = allowedPlacements.reduce(function (acc, placement) {
2927      acc[placement] = detectOverflow(state, {
2928        placement: placement,
2929        boundary: boundary,
2930        rootBoundary: rootBoundary,
2931        padding: padding
2932      })[getBasePlacement(placement)];
2933      return acc;
2934    }, {});
2935    return Object.keys(overflows).sort(function (a, b) {
2936      return overflows[a] - overflows[b];
2937    });
2938  }
2939
2940  function getExpandedFallbackPlacements(placement) {
2941    if (getBasePlacement(placement) === auto) {
2942      return [];
2943    }
2944
2945    var oppositePlacement = getOppositePlacement(placement);
2946    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
2947  }
2948
2949  function flip(_ref) {
2950    var state = _ref.state,
2951        options = _ref.options,
2952        name = _ref.name;
2953
2954    if (state.modifiersData[name]._skip) {
2955      return;
2956    }
2957
2958    var _options$mainAxis = options.mainAxis,
2959        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
2960        _options$altAxis = options.altAxis,
2961        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
2962        specifiedFallbackPlacements = options.fallbackPlacements,
2963        padding = options.padding,
2964        boundary = options.boundary,
2965        rootBoundary = options.rootBoundary,
2966        altBoundary = options.altBoundary,
2967        _options$flipVariatio = options.flipVariations,
2968        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
2969        allowedAutoPlacements = options.allowedAutoPlacements;
2970    var preferredPlacement = state.options.placement;
2971    var basePlacement = getBasePlacement(preferredPlacement);
2972    var isBasePlacement = basePlacement === preferredPlacement;
2973    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
2974    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
2975      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
2976        placement: placement,
2977        boundary: boundary,
2978        rootBoundary: rootBoundary,
2979        padding: padding,
2980        flipVariations: flipVariations,
2981        allowedAutoPlacements: allowedAutoPlacements
2982      }) : placement);
2983    }, []);
2984    var referenceRect = state.rects.reference;
2985    var popperRect = state.rects.popper;
2986    var checksMap = new Map();
2987    var makeFallbackChecks = true;
2988    var firstFittingPlacement = placements[0];
2989
2990    for (var i = 0; i < placements.length; i++) {
2991      var placement = placements[i];
2992
2993      var _basePlacement = getBasePlacement(placement);
2994
2995      var isStartVariation = getVariation(placement) === start;
2996      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
2997      var len = isVertical ? 'width' : 'height';
2998      var overflow = detectOverflow(state, {
2999        placement: placement,
3000        boundary: boundary,
3001        rootBoundary: rootBoundary,
3002        altBoundary: altBoundary,
3003        padding: padding
3004      });
3005      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
3006
3007      if (referenceRect[len] > popperRect[len]) {
3008        mainVariationSide = getOppositePlacement(mainVariationSide);
3009      }
3010
3011      var altVariationSide = getOppositePlacement(mainVariationSide);
3012      var checks = [];
3013
3014      if (checkMainAxis) {
3015        checks.push(overflow[_basePlacement] <= 0);
3016      }
3017
3018      if (checkAltAxis) {
3019        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
3020      }
3021
3022      if (checks.every(function (check) {
3023        return check;
3024      })) {
3025        firstFittingPlacement = placement;
3026        makeFallbackChecks = false;
3027        break;
3028      }
3029
3030      checksMap.set(placement, checks);
3031    }
3032
3033    if (makeFallbackChecks) {
3034      // `2` may be desired in some cases – research later
3035      var numberOfChecks = flipVariations ? 3 : 1;
3036
3037      var _loop = function _loop(_i) {
3038        var fittingPlacement = placements.find(function (placement) {
3039          var checks = checksMap.get(placement);
3040
3041          if (checks) {
3042            return checks.slice(0, _i).every(function (check) {
3043              return check;
3044            });
3045          }
3046        });
3047
3048        if (fittingPlacement) {
3049          firstFittingPlacement = fittingPlacement;
3050          return "break";
3051        }
3052      };
3053
3054      for (var _i = numberOfChecks; _i > 0; _i--) {
3055        var _ret = _loop(_i);
3056
3057        if (_ret === "break") break;
3058      }
3059    }
3060
3061    if (state.placement !== firstFittingPlacement) {
3062      state.modifiersData[name]._skip = true;
3063      state.placement = firstFittingPlacement;
3064      state.reset = true;
3065    }
3066  } // eslint-disable-next-line import/no-unused-modules
3067
3068
3069  const flip$1 = {
3070    name: 'flip',
3071    enabled: true,
3072    phase: 'main',
3073    fn: flip,
3074    requiresIfExists: ['offset'],
3075    data: {
3076      _skip: false
3077    }
3078  };
3079
3080  function getSideOffsets(overflow, rect, preventedOffsets) {
3081    if (preventedOffsets === void 0) {
3082      preventedOffsets = {
3083        x: 0,
3084        y: 0
3085      };
3086    }
3087
3088    return {
3089      top: overflow.top - rect.height - preventedOffsets.y,
3090      right: overflow.right - rect.width + preventedOffsets.x,
3091      bottom: overflow.bottom - rect.height + preventedOffsets.y,
3092      left: overflow.left - rect.width - preventedOffsets.x
3093    };
3094  }
3095
3096  function isAnySideFullyClipped(overflow) {
3097    return [top, right, bottom, left].some(function (side) {
3098      return overflow[side] >= 0;
3099    });
3100  }
3101
3102  function hide(_ref) {
3103    var state = _ref.state,
3104        name = _ref.name;
3105    var referenceRect = state.rects.reference;
3106    var popperRect = state.rects.popper;
3107    var preventedOffsets = state.modifiersData.preventOverflow;
3108    var referenceOverflow = detectOverflow(state, {
3109      elementContext: 'reference'
3110    });
3111    var popperAltOverflow = detectOverflow(state, {
3112      altBoundary: true
3113    });
3114    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
3115    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
3116    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
3117    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
3118    state.modifiersData[name] = {
3119      referenceClippingOffsets: referenceClippingOffsets,
3120      popperEscapeOffsets: popperEscapeOffsets,
3121      isReferenceHidden: isReferenceHidden,
3122      hasPopperEscaped: hasPopperEscaped
3123    };
3124    state.attributes.popper = Object.assign({}, state.attributes.popper, {
3125      'data-popper-reference-hidden': isReferenceHidden,
3126      'data-popper-escaped': hasPopperEscaped
3127    });
3128  } // eslint-disable-next-line import/no-unused-modules
3129
3130
3131  const hide$1 = {
3132    name: 'hide',
3133    enabled: true,
3134    phase: 'main',
3135    requiresIfExists: ['preventOverflow'],
3136    fn: hide
3137  };
3138
3139  function distanceAndSkiddingToXY(placement, rects, offset) {
3140    var basePlacement = getBasePlacement(placement);
3141    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
3142
3143    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
3144      placement: placement
3145    })) : offset,
3146        skidding = _ref[0],
3147        distance = _ref[1];
3148
3149    skidding = skidding || 0;
3150    distance = (distance || 0) * invertDistance;
3151    return [left, right].indexOf(basePlacement) >= 0 ? {
3152      x: distance,
3153      y: skidding
3154    } : {
3155      x: skidding,
3156      y: distance
3157    };
3158  }
3159
3160  function offset(_ref2) {
3161    var state = _ref2.state,
3162        options = _ref2.options,
3163        name = _ref2.name;
3164    var _options$offset = options.offset,
3165        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
3166    var data = placements.reduce(function (acc, placement) {
3167      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
3168      return acc;
3169    }, {});
3170    var _data$state$placement = data[state.placement],
3171        x = _data$state$placement.x,
3172        y = _data$state$placement.y;
3173
3174    if (state.modifiersData.popperOffsets != null) {
3175      state.modifiersData.popperOffsets.x += x;
3176      state.modifiersData.popperOffsets.y += y;
3177    }
3178
3179    state.modifiersData[name] = data;
3180  } // eslint-disable-next-line import/no-unused-modules
3181
3182
3183  const offset$1 = {
3184    name: 'offset',
3185    enabled: true,
3186    phase: 'main',
3187    requires: ['popperOffsets'],
3188    fn: offset
3189  };
3190
3191  function popperOffsets(_ref) {
3192    var state = _ref.state,
3193        name = _ref.name;
3194    // Offsets are the actual position the popper needs to have to be
3195    // properly positioned near its reference element
3196    // This is the most basic placement, and will be adjusted by
3197    // the modifiers in the next step
3198    state.modifiersData[name] = computeOffsets({
3199      reference: state.rects.reference,
3200      element: state.rects.popper,
3201      strategy: 'absolute',
3202      placement: state.placement
3203    });
3204  } // eslint-disable-next-line import/no-unused-modules
3205
3206
3207  const popperOffsets$1 = {
3208    name: 'popperOffsets',
3209    enabled: true,
3210    phase: 'read',
3211    fn: popperOffsets,
3212    data: {}
3213  };
3214
3215  function getAltAxis(axis) {
3216    return axis === 'x' ? 'y' : 'x';
3217  }
3218
3219  function preventOverflow(_ref) {
3220    var state = _ref.state,
3221        options = _ref.options,
3222        name = _ref.name;
3223    var _options$mainAxis = options.mainAxis,
3224        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
3225        _options$altAxis = options.altAxis,
3226        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
3227        boundary = options.boundary,
3228        rootBoundary = options.rootBoundary,
3229        altBoundary = options.altBoundary,
3230        padding = options.padding,
3231        _options$tether = options.tether,
3232        tether = _options$tether === void 0 ? true : _options$tether,
3233        _options$tetherOffset = options.tetherOffset,
3234        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
3235    var overflow = detectOverflow(state, {
3236      boundary: boundary,
3237      rootBoundary: rootBoundary,
3238      padding: padding,
3239      altBoundary: altBoundary
3240    });
3241    var basePlacement = getBasePlacement(state.placement);
3242    var variation = getVariation(state.placement);
3243    var isBasePlacement = !variation;
3244    var mainAxis = getMainAxisFromPlacement(basePlacement);
3245    var altAxis = getAltAxis(mainAxis);
3246    var popperOffsets = state.modifiersData.popperOffsets;
3247    var referenceRect = state.rects.reference;
3248    var popperRect = state.rects.popper;
3249    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
3250      placement: state.placement
3251    })) : tetherOffset;
3252    var 
vendor: 962 bytes, lines 3252-3277
3252data = {
3253      x: 0,
3254      y: 0
3255    };
3256
3257    if (!popperOffsets) {
3258      return;
3259    }
3260
3261    if (checkMainAxis || checkAltAxis) {
3262      var mainSide = mainAxis === 'y' ? top : left;
3263      var altSide = mainAxis === 'y' ? bottom : right;
3264      var len = mainAxis === 'y' ? 'height' : 'width';
3265      var offset = popperOffsets[mainAxis];
3266      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
3267      var max$1 = popperOffsets[mainAxis] - overflow[altSide];
3268      var additive = tether ? -popperRect[len] / 2 : 0;
3269      var minLen = variation === start ? referenceRect[len] : popperRect[len];
3270      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
3271      // outside the reference bounds
3272
3273      var arrowElement = state.elements.arrow;
3274      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
3275        width: 0,
3276        height: 0
3277      };
vendor: 4,704 bytes, lines 3278-3399
3278      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
3279      var arrowPaddingMin = arrowPaddingObject[mainSide];
3280      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
3281      // to include its full size in the calculation. If the reference is small
3282      // and near the edge of a boundary, the popper can overflow even if the
3283      // reference is not overflowing as well (e.g. virtual elements with no
3284      // width or height)
3285
3286      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
3287      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
3288      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
3289      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
3290      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
3291      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
3292      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
3293      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
3294
3295      if (checkMainAxis) {
3296        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
3297        popperOffsets[mainAxis] = preventedOffset;
3298        data[mainAxis] = preventedOffset - offset;
3299      }
3300
3301      if (checkAltAxis) {
3302        var _mainSide = mainAxis === 'x' ? top : left;
3303
3304        var _altSide = mainAxis === 'x' ? bottom : right;
3305
3306        var _offset = popperOffsets[altAxis];
3307
3308        var _min = _offset + overflow[_mainSide];
3309
3310        var _max = _offset - overflow[_altSide];
3311
3312        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
3313
3314        popperOffsets[altAxis] = _preventedOffset;
3315        data[altAxis] = _preventedOffset - _offset;
3316      }
3317    }
3318
3319    state.modifiersData[name] = data;
3320  } // eslint-disable-next-line import/no-unused-modules
3321
3322
3323  const preventOverflow$1 = {
3324    name: 'preventOverflow',
3325    enabled: true,
3326    phase: 'main',
3327    fn: preventOverflow,
3328    requiresIfExists: ['offset']
3329  };
3330
3331  function getHTMLElementScroll(element) {
3332    return {
3333      scrollLeft: element.scrollLeft,
3334      scrollTop: element.scrollTop
3335    };
3336  }
3337
3338  function getNodeScroll(node) {
3339    if (node === getWindow(node) || !isHTMLElement(node)) {
3340      return getWindowScroll(node);
3341    } else {
3342      return getHTMLElementScroll(node);
3343    }
3344  }
3345
3346  function isElementScaled(element) {
3347    var rect = element.getBoundingClientRect();
3348    var scaleX = rect.width / element.offsetWidth || 1;
3349    var scaleY = rect.height / element.offsetHeight || 1;
3350    return scaleX !== 1 || scaleY !== 1;
3351  } // Returns the composite rect of an element relative to its offsetParent.
3352  // Composite means it takes into account transforms as well as layout.
3353
3354
3355  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
3356    if (isFixed === void 0) {
3357      isFixed = false;
3358    }
3359
3360    var isOffsetParentAnElement = isHTMLElement(offsetParent);
3361    isHTMLElement(offsetParent) && isElementScaled(offsetParent);
3362    var documentElement = getDocumentElement(offsetParent);
3363    var rect = getBoundingClientRect(elementOrVirtualElement);
3364    var scroll = {
3365      scrollLeft: 0,
3366      scrollTop: 0
3367    };
3368    var offsets = {
3369      x: 0,
3370      y: 0
3371    };
3372
3373    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
3374      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
3375      isScrollParent(documentElement)) {
3376        scroll = getNodeScroll(offsetParent);
3377      }
3378
3379      if (isHTMLElement(offsetParent)) {
3380        offsets = getBoundingClientRect(offsetParent);
3381        offsets.x += offsetParent.clientLeft;
3382        offsets.y += offsetParent.clientTop;
3383      } else if (documentElement) {
3384        offsets.x = getWindowScrollBarX(documentElement);
3385      }
3386    }
3387
3388    return {
3389      x: rect.left + scroll.scrollLeft - offsets.x,
3390      y: rect.top + scroll.scrollTop - offsets.y,
3391      width: rect.width,
3392      height: rect.height
3393    };
3394  }
3395
3396  function order(modifiers) {
3397    var map = new Map();
3398    var visited = new Set();
3399    var result = [];
vendor: 11,066 bytes, lines 3400-3729
3400    modifiers.forEach(function (modifier) {
3401      map.set(modifier.name, modifier);
3402    }); // On visiting object, check for its dependencies and visit them recursively
3403
3404    function sort(modifier) {
3405      visited.add(modifier.name);
3406      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
3407      requires.forEach(function (dep) {
3408        if (!visited.has(dep)) {
3409          var depModifier = map.get(dep);
3410
3411          if (depModifier) {
3412            sort(depModifier);
3413          }
3414        }
3415      });
3416      result.push(modifier);
3417    }
3418
3419    modifiers.forEach(function (modifier) {
3420      if (!visited.has(modifier.name)) {
3421        // check for visited object
3422        sort(modifier);
3423      }
3424    });
3425    return result;
3426  }
3427
3428  function orderModifiers(modifiers) {
3429    // order based on dependencies
3430    var orderedModifiers = order(modifiers); // order based on phase
3431
3432    return modifierPhases.reduce(function (acc, phase) {
3433      return acc.concat(orderedModifiers.filter(function (modifier) {
3434        return modifier.phase === phase;
3435      }));
3436    }, []);
3437  }
3438
3439  function debounce(fn) {
3440    var pending;
3441    return function () {
3442      if (!pending) {
3443        pending = new Promise(function (resolve) {
3444          Promise.resolve().then(function () {
3445            pending = undefined;
3446            resolve(fn());
3447          });
3448        });
3449      }
3450
3451      return pending;
3452    };
3453  }
3454
3455  function mergeByName(modifiers) {
3456    var merged = modifiers.reduce(function (merged, current) {
3457      var existing = merged[current.name];
3458      merged[current.name] = existing ? Object.assign({}, existing, current, {
3459        options: Object.assign({}, existing.options, current.options),
3460        data: Object.assign({}, existing.data, current.data)
3461      }) : current;
3462      return merged;
3463    }, {}); // IE11 does not support Object.values
3464
3465    return Object.keys(merged).map(function (key) {
3466      return merged[key];
3467    });
3468  }
3469
3470  var DEFAULT_OPTIONS = {
3471    placement: 'bottom',
3472    modifiers: [],
3473    strategy: 'absolute'
3474  };
3475
3476  function areValidElements() {
3477    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3478      args[_key] = arguments[_key];
3479    }
3480
3481    return !args.some(function (element) {
3482      return !(element && typeof element.getBoundingClientRect === 'function');
3483    });
3484  }
3485
3486  function popperGenerator(generatorOptions) {
3487    if (generatorOptions === void 0) {
3488      generatorOptions = {};
3489    }
3490
3491    var _generatorOptions = generatorOptions,
3492        _generatorOptions$def = _generatorOptions.defaultModifiers,
3493        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
3494        _generatorOptions$def2 = _generatorOptions.defaultOptions,
3495        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
3496    return function createPopper(reference, popper, options) {
3497      if (options === void 0) {
3498        options = defaultOptions;
3499      }
3500
3501      var state = {
3502        placement: 'bottom',
3503        orderedModifiers: [],
3504        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
3505        modifiersData: {},
3506        elements: {
3507          reference: reference,
3508          popper: popper
3509        },
3510        attributes: {},
3511        styles: {}
3512      };
3513      var effectCleanupFns = [];
3514      var isDestroyed = false;
3515      var instance = {
3516        state: state,
3517        setOptions: function setOptions(setOptionsAction) {
3518          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
3519          cleanupModifierEffects();
3520          state.options = Object.assign({}, defaultOptions, state.options, options);
3521          state.scrollParents = {
3522            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
3523            popper: listScrollParents(popper)
3524          }; // Orders the modifiers based on their dependencies and `phase`
3525          // properties
3526
3527          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
3528
3529          state.orderedModifiers = orderedModifiers.filter(function (m) {
3530            return m.enabled;
3531          }); // Validate the provided modifiers so that the consumer will get warned
3532
3533          runModifierEffects();
3534          return instance.update();
3535        },
3536        // Sync update – it will always be executed, even if not necessary. This
3537        // is useful for low frequency updates where sync behavior simplifies the
3538        // logic.
3539        // For high frequency updates (e.g. `resize` and `scroll` events), always
3540        // prefer the async Popper#update method
3541        forceUpdate: function forceUpdate() {
3542          if (isDestroyed) {
3543            return;
3544          }
3545
3546          var _state$elements = state.elements,
3547              reference = _state$elements.reference,
3548              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
3549          // anymore
3550
3551          if (!areValidElements(reference, popper)) {
3552
3553            return;
3554          } // Store the reference and popper rects to be read by modifiers
3555
3556
3557          state.rects = {
3558            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
3559            popper: getLayoutRect(popper)
3560          }; // Modifiers have the ability to reset the current update cycle. The
3561          // most common use case for this is the `flip` modifier changing the
3562          // placement, which then needs to re-run all the modifiers, because the
3563          // logic was previously ran for the previous placement and is therefore
3564          // stale/incorrect
3565
3566          state.reset = false;
3567          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
3568          // is filled with the initial data specified by the modifier. This means
3569          // it doesn't persist and is fresh on each update.
3570          // To ensure persistent data, use `${name}#persistent`
3571
3572          state.orderedModifiers.forEach(function (modifier) {
3573            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
3574          });
3575
3576          for (var index = 0; index < state.orderedModifiers.length; index++) {
3577
3578            if (state.reset === true) {
3579              state.reset = false;
3580              index = -1;
3581              continue;
3582            }
3583
3584            var _state$orderedModifie = state.orderedModifiers[index],
3585                fn = _state$orderedModifie.fn,
3586                _state$orderedModifie2 = _state$orderedModifie.options,
3587                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
3588                name = _state$orderedModifie.name;
3589
3590            if (typeof fn === 'function') {
3591              state = fn({
3592                state: state,
3593                options: _options,
3594                name: name,
3595                instance: instance
3596              }) || state;
3597            }
3598          }
3599        },
3600        // Async and optimistically optimized update – it will not be executed if
3601        // not necessary (debounced to run at most once-per-tick)
3602        update: debounce(function () {
3603          return new Promise(function (resolve) {
3604            instance.forceUpdate();
3605            resolve(state);
3606          });
3607        }),
3608        destroy: function destroy() {
3609          cleanupModifierEffects();
3610          isDestroyed = true;
3611        }
3612      };
3613
3614      if (!areValidElements(reference, popper)) {
3615
3616        return instance;
3617      }
3618
3619      instance.setOptions(options).then(function (state) {
3620        if (!isDestroyed && options.onFirstUpdate) {
3621          options.onFirstUpdate(state);
3622        }
3623      }); // Modifiers have the ability to execute arbitrary code before the first
3624      // update cycle runs. They will be executed in the same order as the update
3625      // cycle. This is useful when a modifier adds some persistent data that
3626      // other modifiers need to use, but the modifier is run after the dependent
3627      // one.
3628
3629      function runModifierEffects() {
3630        state.orderedModifiers.forEach(function (_ref3) {
3631          var name = _ref3.name,
3632              _ref3$options = _ref3.options,
3633              options = _ref3$options === void 0 ? {} : _ref3$options,
3634              effect = _ref3.effect;
3635
3636          if (typeof effect === 'function') {
3637            var cleanupFn = effect({
3638              state: state,
3639              name: name,
3640              instance: instance,
3641              options: options
3642            });
3643
3644            var noopFn = function noopFn() {};
3645
3646            effectCleanupFns.push(cleanupFn || noopFn);
3647          }
3648        });
3649      }
3650
3651      function cleanupModifierEffects() {
3652        effectCleanupFns.forEach(function (fn) {
3653          return fn();
3654        });
3655        effectCleanupFns = [];
3656      }
3657
3658      return instance;
3659    };
3660  }
3661  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
3662
3663  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
3664  var createPopper$1 = /*#__PURE__*/popperGenerator({
3665    defaultModifiers: defaultModifiers$1
3666  }); // eslint-disable-next-line import/no-unused-modules
3667
3668  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
3669  var createPopper = /*#__PURE__*/popperGenerator({
3670    defaultModifiers: defaultModifiers
3671  }); // eslint-disable-next-line import/no-unused-modules
3672
3673  const Popper = /*#__PURE__*/Object.freeze({
3674    __proto__: null,
3675    popperGenerator,
3676    detectOverflow,
3677    createPopperBase: createPopper$2,
3678    createPopper,
3679    createPopperLite: createPopper$1,
3680    top,
3681    bottom,
3682    right,
3683    left,
3684    auto,
3685    basePlacements,
3686    start,
3687    end,
3688    clippingParents,
3689    viewport,
3690    popper,
3691    reference,
3692    variationPlacements,
3693    placements,
3694    beforeRead,
3695    read,
3696    afterRead,
3697    beforeMain,
3698    main,
3699    afterMain,
3700    beforeWrite,
3701    write,
3702    afterWrite,
3703    modifierPhases,
3704    applyStyles: applyStyles$1,
3705    arrow: arrow$1,
3706    computeStyles: computeStyles$1,
3707    eventListeners,
3708    flip: flip$1,
3709    hide: hide$1,
3710    offset: offset$1,
3711    popperOffsets: popperOffsets$1,
3712    preventOverflow: preventOverflow$1
3713  });
3714
3715  /**
3716   * --------------------------------------------------------------------------
3717   * Bootstrap (v5.1.3): dropdown.js
3718   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
3719   * --------------------------------------------------------------------------
3720   */
3721  /**
3722   * ------------------------------------------------------------------------
3723   * Constants
3724   * ------------------------------------------------------------------------
3725   */
3726
3727  const NAME$9 = 'dropdown';
3728  const DATA_KEY$8 = 'bs.dropdown';
3729  const EVENT_KEY$8 = `.${DATA_KEY$8}`;
3730  const DATA_API_KEY$4 = '.data-api';
3731  const ESCAPE_KEY$2 = 'Escape';
3732  const SPACE_KEY = 'Space';
3733  const TAB_KEY$1 = 'Tab';
3734  const ARROW_UP_KEY = 'ArrowUp';
3735  const ARROW_DOWN_KEY = 'ArrowDown';
3736  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button
3737
3738  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);
3739  const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;
3740  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;
3741  const EVENT_SHOW$4 = `show${EVENT_KEY$8}`;
3742  const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;
3743  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;
3744  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;
3745  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;
3746  const CLASS_NAME_SHOW$6 = 'show';
3747  const CLASS_NAME_DROPUP = 'dropup';
3748  const CLASS_NAME_DROPEND = 'dropend';
3749  const CLASS_NAME_DROPSTART = 'dropstart';
3750  const CLASS_NAME_NAVBAR = 'navbar';
3751  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]';
3752  const SELECTOR_MENU = '.dropdown-menu';
3753  const SELECTOR_NAVBAR_NAV = '.navbar-nav';
3754  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
3755  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';
3756  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';
3757  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';
3758  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';
3759  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';
3760  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';
3761  const Default$8 = {
3762    offset: [0, 2],
3763    boundary: 'clippingParents',
3764    reference: 'toggle',
3765    display: 'dynamic',
3766    popperConfig: null,
3767    autoClose: true
3768  };
3769  const DefaultType$8 = {
3770    offset: '(array|string|function)',
3771    boundary: '(string|element)',
3772    reference: '(string|element|object)',
3773    display: 'string',
3774    popperConfig: '(null|object|function)',
3775    autoClose: '(boolean|string)'
3776  };
3777  /**
3778   * ------------------------------------------------------------------------
3779   * Class Definition
3780   * ------------------------------------------------------------------------
3781   */
3782
3783  class Dropdown extends BaseComponent {
3784    constructor(element, config) {
3785      super(element);
3786      this._popper = null;
3787      this._config = this._getConfig(config);
3788      this._menu = this._getMenuElement();
3789      this._inNavbar = this._detectNavbar();
3790    } // Getters
3791
3792
3793    static get Default() {
3794      return Default$8;
3795    }
3796
3797    static get DefaultType() {
3798      return DefaultType$8;
3799    }
3800
3801    static get NAME() {
3802      return NAME$9;
3803    } // Public
3804
3805
3806    toggle() {
3807      return this._isShown() ? this.hide() : this.show();
3808    }
3809
3810    show() {
3811      if (isDisabled(this._element) || this._isShown(this._menu)) {
3812        return;
3813      }
3814
3815      const relatedTarget = {
3816        relatedTarget: this._element
3817      };
3818      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);
3819
3820      if (showEvent.defaultPrevented) {
3821        return;
3822      }
3823
3824      const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar
3825
3826      if (this._inNavbar) {
3827        Manipulator.setDataAttribute(this._menu, 'popper', 'none');
3828      } else {
3829        this._createPopper(parent);
3830      } // If this is a touch-enabled device we add extra
3831      // empty mouseover listeners to the body's immediate children;
3832      // only needed because of broken event delegation on iOS
3833      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
3834
3835
3836      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
3837        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));
3838      }
3839
3840      this._element.focus();
3841
3842      this._element.setAttribute('aria-expanded', true);
3843
3844      this._menu.classList.add(CLASS_NAME_SHOW$6);
3845
3846      this._element.classList.add(CLASS_NAME_SHOW$6);
3847
3848      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);
3849    }
3850
3851    hide() {
3852      if (isDisabled(this._element) || !this._isShown(this._menu)) {
3853        return;
3854      }
3855
3856      const relatedTarget = {
3857        relatedTarget: this._element
3858      };
3859
3860      this._completeHide(relatedTarget);
3861    }
3862
3863    dispose() {
3864      if (this._popper) {
3865        this._popper.destroy();
3866      }
3867
3868      super.dispose();
3869    }
3870
3871    update() {
3872      this._inNavbar = this._detectNavbar();
3873
3874      if (this._popper) {
3875        this._popper.update();
3876      }
3877    } // Private
3878
3879
3880    _completeHide(relatedTarget) {
3881      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);
3882
3883      if (hideEvent.defaultPrevented) {
3884        return;
3885      } // If this is a touch-enabled device we remove the extra
3886      // empty mouseover listeners we added for iOS support
3887
3888
3889      if ('ontouchstart' in document.documentElement) {
3890        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));
3891      }
3892
3893      if (this._popper) {
3894        this._popper.destroy();
3895      }
3896
3897      this._menu.classList.remove(CLASS_NAME_SHOW$6);
3898
3899      this._element.classList.remove(CLASS_NAME_SHOW$6);
3900
3901      this._element.setAttribute('aria-expanded', 'false');
3902
3903      Manipulator.removeDataAttribute(this._menu, 'popper');
3904      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);
3905    }
3906
3907    _getConfig(config) {
3908      config = { ...this.constructor.Default,
3909        ...Manipulator.getDataAttributes(this._element),
3910        ...config
3911      };
3912      typeCheckConfig(NAME$9, config, this.constructor.DefaultType);
3913
3914      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
3915        // Popper virtual elements require a getBoundingClientRect method
3916        throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
3917      }
3918
3919      return config;
3920    }
3921
3922    _createPopper(parent) {
3923      if (typeof Popper === 'undefined') {
3924        throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
3925      }
3926
3927      let referenceElement = this._element;
3928
3929      if (this._config.reference === 'parent') {
3930        referenceElement = parent;
3931      } else if (isElement$1(this._config.reference)) {
3932        referenceElement = getElement(this._config.reference);
3933      } else if (typeof this._config.reference === 'object') {
3934        referenceElement = this._config.reference;
3935      }
3936
3937      const popperConfig = this._getPopperConfig();
3938
3939      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);
3940      this._popper = createPopper(referenceElement, this._menu, popperConfig);
3941
3942      if (isDisplayStatic) {
3943        Manipulator.setDataAttribute(this._menu, 'popper', 'static');
3944      }
3945    }
3946
3947    _isShown(element = this._element) {
3948      return element.classList.contains(CLASS_NAME_SHOW$6);
3949    }
3950
3951    _getMenuElement() {
3952      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];
3953    }
3954
3955    _getPlacement() {
3956      const parentDropdown = this._element.parentNode;
3957
3958      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
3959        return PLACEMENT_RIGHT;
3960      }
3961
3962      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
3963        return PLACEMENT_LEFT;
3964      } // We need to trim the value because custom properties can also include spaces
3965
3966
3967      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
3968
3969      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
3970        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
3971      }
3972
3973      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
3974    }
3975
3976    _detectNavbar() {
3977      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;
3978    }
3979
3980    _getOffset() {
3981      const {
3982        offset
3983      } = this._config;
3984
3985      if (typeof offset === 'string') {
3986        return offset.split(',').map(val => Number.parseInt(val, 10));
3987      }
3988
3989      if (typeof offset === 'function') {
3990        return popperData => offset(popperData, this._element);
3991      }
3992
3993      return offset;
3994    }
3995
3996    _getPopperConfig() {
3997      const defaultBsPopperConfig = {
3998        placement: this._getPlacement(),
3999        modifiers: [{
4000          name: 'preventOverflow',
4001          options: {
4002            boundary: this._config.boundary
4003          }
4004        }, {
4005          name: 'offset',
4006          options: {
4007            offset: this._getOffset()
4008          }
4009        }]
4010      }; // Disable Popper if we have a static display
4011
4012      if (this._config.display === 'static') {
4013        defaultBsPopperConfig.modifiers = [{
4014          name: 'applyStyles',
4015          enabled: false
4016        }];
4017      }
4018
4019      return { ...defaultBsPopperConfig,
4020        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
4021      };
4022    }
4023
4024    _selectMenuItem({
4025      key,
4026      target
4027    }) {
4028      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);
4029
4030      if (!items.length) {
4031        return;
4032      } // if target isn't included in items (e.g. when expanding the dropdown)
4033      // allow cycling to get the last item in case key equals ARROW_UP_KEY
4034
4035
4036      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
4037    } // Static
4038
4039
4040    static jQueryInterface(config) {
4041      return this.each(function () {
4042        const data = Dropdown.getOrCreateInstance(this, config);
4043
4044        if (typeof config !== 'string') {
4045          return;
4046        }
4047
4048        if (typeof data[config] === 'undefined') {
4049          throw new TypeError(`No method named "${config}"`);
4050        }
4051
4052        data[config]();
4053      });
4054    }
4055
4056    static clearMenus(event) {
4057      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {
4058        return;
4059      }
4060
4061      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);
4062
4063      for (let i = 0, len = toggles.length; i < len; i++) {
4064        const context = Dropdown.getInstance(toggles[i]);
4065
4066        if (!context || context._config.autoClose === false) {
4067          continue;
4068        }
4069
4070        if (!context._isShown()) {
4071          continue;
4072        }
4073
4074        const relatedTarget = {
4075          relatedTarget: context._element
4076        };
4077
4078        if (event) {
4079          const composedPath = event.composedPath();
4080          const isMenuTarget = composedPath.includes(context._menu);
4081
4082          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
4083            continue;
4084          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
4085
4086
4087          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
4088            continue;
4089          }
4090
4091          if (event.type === 'click') {
4092            relatedTarget.clickEvent = event;
4093          }
4094        }
4095
4096        context._completeHide(relatedTarget);
4097      }
4098    }
4099
4100    static getParentFromElement(element) {
4101      return getElementFromSelector(element) || element.parentNode;
4102    }
4103
4104    static dataApiKeydownHandler(event) {
4105      // If not input/textarea:
4106      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
4107      // If input/textarea:
4108      //  - If space key => not a dropdown command
4109      //  - If key is other than escape
4110      //    - If key is not up or down => not a dropdown command
4111      //    - If trigger inside the menu => not a dropdown command
4112      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {
4113        return;
4114      }
4115
4116      const isActive = this.classList.contains(CLASS_NAME_SHOW$6);
4117
4118      if (!isActive && event.key === ESCAPE_KEY$2) {
4119        return;
4120      }
4121
4122      event.preventDefault();
4123      event.stopPropagation();
4124
4125      if (isDisabled(this)) {
4126        return;
4127      }
4128
4129      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];
4130      const instance = Dropdown.getOrCreateInstance(getToggleButton);
4131
4132      if (event.key === ESCAPE_KEY$2) {
4133        instance.hide();
4134        return;
4135      }
4136
4137      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {
4138        if (!isActive) {
4139          instance.show();
4140        }
4141
4142        instance._selectMenuItem(event);
4143
4144        return;
4145      }
4146
4147      if (!isActive || event.key === SPACE_KEY) {
4148        Dropdown.clearMenus();
4149      }
4150    }
4151
4152  }
4153  /**
4154   * ------------------------------------------------------------------------
4155   * Data Api implementation
4156   * ------------------------------------------------------------------------
4157   */
4158
4159
4160  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
4161  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
4162  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
4163  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
4164  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
4165    event.preventDefault();
4166    Dropdown.getOrCreateInstance(this).toggle();
4167  });
4168  /**
4169   * ------------------------------------------------------------------------
4170   * jQuery
4171   * ------------------------------------------------------------------------
4172   * add .Dropdown to jQuery only if jQuery is present
4173   */
4174
4175  defineJQueryPlugin(Dropdown);
4176
4177  /**
4178   * --------------------------------------------------------------------------
4179   * Bootstrap (v5.1.3): util/scrollBar.js
4180   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4181   * --------------------------------------------------------------------------
4182   */
4183  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
4184  const SELECTOR_STICKY_CONTENT = '.sticky-top';
4185
4186  class ScrollBarHelper {
4187    constructor() {
4188      this._element = document.body;
4189    }
4190
4191    getWidth() {
4192      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
4193      const documentWidth = document.documentElement.clientWidth;
4194      return Math.abs(window.innerWidth - documentWidth);
4195    }
4196
4197    hide() {
4198      const width = this.getWidth();
4199
4200      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
4201
4202
4203      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width);
4203 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
4204
4205
4206      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);
4207
4208      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);
4209    }
4210
4211    _disableOverFlow() {
4212      this._saveInitialAttribute(this._element, 'overflow');
4213
4214      this._element.style.overflow = 'hidden';
4215    }
4216
4217    _setElementAttributes(selector, styleProp, callback) {
4218      const scrollbarWidth = this.getWidth();
4219
4220      const manipulationCallBack = element => {
4221        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
4222          return;
4223        }
4224
4225        this._saveInitialAttribute(element, styleProp);
4226
4227        const calculatedValue = window.getComputedStyle(element)[styleProp];
4228        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;
4229      };
4230
4231      this._applyManipulationCallback(selector, manipulationCallBack);
4232    }
4233
4234    reset() {
4235      this._resetElementAttributes(this._element, 'overflow');
4236
4237      this._resetElementAttributes(this._element, 'paddingRight');
4238
4239      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
4240
4241      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
4242    }
4243
4244    _saveInitialAttribute(element, styleProp) {
4245      const actualValue = element.style[styleProp];
4246
4247      if (actualValue) {
4248        Manipulator.setDataAttribute(element, styleProp, actualValue);
4249      }
4250    }
4251
4252    _resetElementAttributes(selector, styleProp) {
4253      const manipulationCallBack = element => {
4254        const value = Manipulator.getDataAttribute(element, styleProp);
4255
4256        if (typeof value === 'undefined') {
4257          element.style.removeProperty(styleProp);
4258        } else {
4259          Manipulator.removeDataAttribute(element, styleProp);
4260          element.style[styleProp] = value;
4261        }
4262      };
4263
4264      this._applyManipulationCallback(selector, manipulationCallBack);
4265    }
4266
4267    _applyManipulationCallback(selector, callBack) {
4268      if (isElement$1(selector)) {
4269        callBack(selector);
4270      } else {
4271        SelectorEngine.find(selector, this._element).forEach(callBack);
4272      }
4273    }
4274
4275    isOverflowing() {
4276      return this.getWidth() > 0;
4277    }
4278
4279  }
4280
4281  /**
4282   * --------------------------------------------------------------------------
4283   * Bootstrap (v5.1.3): util/backdrop.js
4284   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4285   * --------------------------------------------------------------------------
4286   */
4287  const Default$7 = {
4288    className: 'modal-backdrop',
4289    isVisible: true,
4290    // if false, we use the backdrop helper without adding any element to the dom
4291    isAnimated: false,
4292    rootElement: 'body',
4293    // give the choice to place backdrop under different elements
4294    clickCallback: null
4295  };
4296  const DefaultType$7 = {
4297    className: 'string',
4298    isVisible: 'boolean',
4299    isAnimated: 'boolean',
4300    rootElement: '(element|string)',
4301    clickCallback: '(function|null)'
4302  };
4303  const NAME$8 = 'backdrop';
4304  const CLASS_NAME_FADE$4 = 'fade';
4305  const CLASS_NAME_SHOW$5 = 'show';
4306  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;
4307
4308  class Backdrop {
4309    constructor(config) {
4310      this._config = this._getConfig(config);
4311      this._isAppended = false;
4312      this._element = null;
4313    }
4314
4315    show(callback) {
4316      if (!this._config.isVisible) {
4317        execute(callback);
4318        return;
4319      }
4320
4321      this._append();
4322
4323      if (this._config.isAnimated) {
4324        reflow(this._getElement());
4325      }
4326
4327      this._getElement().classList.add(CLASS_NAME_SHOW$5);
4328
4329      this._emulateAnimation(() => {
4330        execute(callback);
4331      });
4332    }
4333
4334    hide(callback) {
4335      if (!this._config.isVisible) {
4336        execute(callback);
4337        return;
4338      }
4339
4340      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
4341
4342      this._emulateAnimation(() => {
4343        this.dispose();
4344        execute(callback);
4345      });
4346    } // Private
4347
4348
4349    _getElement() {
4350      if (!this._element) {
4351        const backdrop = document.createElement('div');
4352        backdrop.className = this._config.className;
4353
4354        if (this._config.isAnimated) {
4355          backdrop.classList.add(CLASS_NAME_FADE$4);
4356        }
4357
4358        this._element = backdrop;
4359      }
4360
4361      return this._element;
4362    }
4363
4364    _getConfig(config) {
4365      config = { ...Default$7,
4366        ...(typeof config === 'object' ? config : {})
4367      }; // use getElement() with the default "body" to get a fresh Element on each instantiation
4368
4369      config.rootElement = getElement(config.rootElement);
4370      typeCheckConfig(NAME$8, config, DefaultType$7);
4371      return config;
4372    }
4373
4374    _append() {
4375      if (this._isAppended) {
4376        return;
4377      }
4378
4379      this._config.rootElement.append(this._getElement());
4380
4381      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {
4382        execute(this._config.clickCallback);
4383      });
4384      this._isAppended = true;
4385    }
4386
4387    dispose() {
4388      if (!this._isAppended) {
4389        return;
4390      }
4391
4392      EventHandler.off(this._element, EVENT_MOUSEDOWN);
4393
4394      this._element.remove();
4395
4396      this._isAppended = false;
4397    }
4398
4399    _emulateAnimation(callback) {
4400      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
4401    }
4402
4403  }
4404
4405  /**
4406   * --------------------------------------------------------------------------
4407   * Bootstrap (v5.1.3): util/focustrap.js
4408   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4409   * --------------------------------------------------------------------------
4410   */
4411  const Default$6 = {
4412    trapElement: null,
4413    // The element to trap focus inside of
4414    autofocus: true
4415  };
4416  const DefaultType$6 = {
4417    trapElement: 'element',
4418    autofocus: 'boolean'
4419  };
4420  const NAME$7 = 'focustrap';
4421  const DATA_KEY$7 = 'bs.focustrap';
4422  const EVENT_KEY$7 = `.${DATA_KEY$7}`;
4423  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;
4424  const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;
4425  const TAB_KEY = 'Tab';
4426  const TAB_NAV_FORWARD = 'forward';
4427  const TAB_NAV_BACKWARD = 'backward';
4428
4429  class FocusTrap {
4430    constructor(config) {
4431      this._config = this._getConfig(config);
4432      this._isActive = false;
4433      this._lastTabNavDirection = null;
4434    }
4435
4436    activate() {
4437      const {
4438        trapElement,
4439        autofocus
4440      } = this._config;
4441
4442      if (this._isActive) {
4443        return;
4444      }
4445
4446      if (autofocus) {
4447        trapElement.focus();
4448      }
4449
4450      EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop
4451
4452      EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));
4453      EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
4454      this._isActive = true;
4455    }
4456
4457    deactivate() {
4458      if (!this._isActive) {
4459        return;
4460      }
4461
4462      this._isActive = false;
4463      EventHandler.off(document, EVENT_KEY$7);
4464    } // Private
4465
4466
4467    _handleFocusin(event) {
4468      const {
4469        target
4470      } = event;
4471      const {
4472        trapElement
4473      } = this._config;
4474
4475      if (target === document || target === trapElement || trapElement.contains(target)) {
4476        return;
4477      }
4478
4479      const elements = SelectorEngine.focusableChildren(trapElement);
4480
4481      if (elements.length === 0) {
4482        trapElement.focus();
4483      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
4484        elements[elements.length - 1].focus();
4485      } else {
4486        elements[0].focus();
4487      }
4488    }
4489
4490    _handleKeydown(event) {
4491      if (event.key !== TAB_KEY) {
4492        return;
4493      }
4494
4495      this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
4496    }
4497
4498    _getConfig(config) {
4499      config = { ...Default$6,
4500        ...(typeof config === 'object' ? config : {})
4501      };
4502      typeCheckConfig(NAME$7, config, DefaultType$6);
4503      return config;
4504    }
4505
4506  }
4507
4508  /**
4509   * --------------------------------------------------------------------------
4510   * Bootstrap (v5.1.3): modal.js
4511   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4512   * --------------------------------------------------------------------------
4513   */
4514  /**
4515   * ------------------------------------------------------------------------
4516   * Constants
4517   * ------------------------------------------------------------------------
4518   */
4519
4520  const NAME$6 = 'modal';
4521  const DATA_KEY$6 = 'bs.modal';
4522  const EVENT_KEY$6 = `.${DATA_KEY$6}`;
4523  const DATA_API_KEY$3 = '.data-api';
4524  const ESCAPE_KEY$1 = 'Escape';
4525  const Default$5 = {
4526    backdrop: true,
4527    keyboard: true,
4528    focus: true
4529  };
4530  const DefaultType$5 = {
4531    backdrop: '(boolean|string)',
4532    keyboard: 'boolean',
4533    focus: 'boolean'
4534  };
4535  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;
4536  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;
4537  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;
4538  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;
4539  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;
4540  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;
4541  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;
4542  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;
4543  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;
4544  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;
4545  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
4546  const CLASS_NAME_OPEN = 'modal-open';
4547  const CLASS_NAME_FADE$3 = 'fade';
4548  const CLASS_NAME_SHOW$4 = 'show';
4549  const CLASS_NAME_STATIC = 'modal-static';
4550  const OPEN_SELECTOR$1 = '.modal.show';
4551  const SELECTOR_DIALOG = '.modal-dialog';
4552  const SELECTOR_MODAL_BODY = '.modal-body';
4553  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
4554  /**
4555   * ------------------------------------------------------------------------
4556   * Class Definition
4557   * ------------------------------------------------------------------------
4558   */
4559
4560  class Modal extends BaseComponent {
4561    constructor(element, config) {
4562      super(element);
4563      this._config = this._getConfig(config);
4564      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
4565      this._backdrop = this._initializeBackDrop();
4566      this._focustrap = this._initializeFocusTrap();
4567      this._isShown = false;
4568      this._ignoreBackdropClick = false;
4569      this._isTransitioning = false;
4570      this._scrollBar = new ScrollBarHelper();
4571    } // Getters
4572
4573
4574    static get Default() {
4575      return Default$5;
4576    }
4577
4578    static get NAME() {
4579      return NAME$6;
4580    } // Public
4581
4582
4583    toggle(relatedTarget) {
4584      return this._isShown ? this.hide() : this.show(relatedTarget);
4585    }
4586
4587    show(relatedTarget) {
4588      if (this._isShown || this._isTransitioning) {
4589        return;
4590      }
4591
4592      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
4593        relatedTarget
4594      });
4595
4596      if (showEvent.defaultPrevented) {
4597        return;
4598      }
4599
4600      this._isShown = true;
4601
4602      if (this._isAnimated()) {
4603        this._isTransitioning = true;
4604      }
4605
4606      this._scrollBar.hide();
4607
4608      document.body.classList.add(CLASS_NAME_OPEN);
4609
4610      this._adjustDialog();
4611
4612      this._setEscapeEvent();
4613
4614      this._setResizeEvent();
4615
4616      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {
4617        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {
4618          if (event.target === this._element) {
4619            this._ignoreBackdropClick = true;
4620          }
4621        });
4622      });
4623
4624      this._showBackdrop(() => this._showElement(relatedTarget));
4625    }
4626
4627    hide() {
4628      if (!this._isShown || this._isTransitioning) {
4629        return;
4630      }
4631
4632      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
4633
4634      if (hideEvent.defaultPrevented) {
4635        return;
4636      }
4637
4638      this._isShown = false;
4639
4640      const isAnimated = this._isAnimated();
4641
4642      if (isAnimated) {
4643        this._isTransitioning = true;
4644      }
4645
4646      this._setEscapeEvent();
4647
4648      this._setResizeEvent();
4649
4650      this._focustrap.deactivate();
4651
4652      this._element.classList.remove(CLASS_NAME_SHOW$4);
4653
4654      EventHandler.off(this._element, EVENT_CLICK_DISMISS);
4655      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
4656
4657      this._queueCallback(() => this._hideModal(), this._element, isAnimated);
4658    }
4659
4660    dispose() {
4661      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));
4662
4663      this._backdrop.dispose();
4664
4665      this._focustrap.deactivate();
4666
4667      super.dispose();
4668    }
4669
4670    handleUpdate() {
4671      this._adjustDialog();
4672    } // Private
4673
4674
4675    _initializeBackDrop() {
4676      return new Backdrop({
4677        isVisible: Boolean(this._config.backdrop),
4678        // 'static' option will be translated to true, and booleans will keep their value
4679        isAnimated: this._isAnimated()
4680      });
4681    }
4682
4683    _initializeFocusTrap() {
4684      return new FocusTrap({
4685        trapElement: this._element
4686      });
4687    }
4688
4689    _getConfig(config) {
4690      config = { ...Default$5,
4691        ...Manipulator.getDataAttributes(this._element),
4692        ...(typeof config === 'object' ? config : {})
4693      };
4694      typeCheckConfig(NAME$6, config, DefaultType$5);
4695      return config;
4696    }
4697
4698    _showElement(relatedTarget) {
4699      const isAnimated = this._isAnimated();
4700
4701      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
4702
4703      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
4704        // Don't move modal's DOM position
4705        document.body.append(this._element);
4706      }
4707
4708      this._element.style.display = 'block';
4709
4710      this._element.removeAttribute('aria-hidden');
4711
4712      this._element.setAttribute('aria-modal', true);
4713
4714      this._element.setAttribute('role', 'dialog');
4715
4716      this._element.scrollTop = 0;
4717
4718      if (modalBody) {
4719        modalBody.scrollTop = 0;
4720      }
4721
4722      if (isAnimated) {
4723        reflow(this._element);
4724      }
4725
4726      this._element.classList.add(CLASS_NAME_SHOW$4);
4727
4728      const transitionComplete = () => {
4729        if (this._config.focus) {
4730          this._focustrap.activate();
4731        }
4732
4733        this._isTransitioning = false;
4734        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
4735          relatedTarget
4736        });
4737      };
4738
4739      this._queueCallback(transitionComplete, this._dialog, isAnimated);
4740    }
4741
4742    _setEscapeEvent() {
4743      if (this._isShown) {
4744        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
4745          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {
4746            event.preventDefault();
4747            this.hide();
4748          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {
4749            this._triggerBackdropTransition();
4750          }
4751        });
4752      } else {
4753        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);
4754      }
4755    }
4756
4757    _setResizeEvent() {
4758      if (this._isShown) {
4759        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());
4760      } else {
4761        EventHandler.off(window, EVENT_RESIZE);
4762      }
4763    }
4764
4765    _hideModal() {
4766      this._element.style.display = 'none';
4767
4768      this._element.setAttribute('aria-hidden', true);
4769
4770      this._element.removeAttribute('aria-modal');
4771
4772      this._element.removeAttribute('role');
4773
4774      this._isTransitioning = false;
4775
4776      this._backdrop.hide(() => {
4777        document.body.classList.remove(CLASS_NAME_OPEN);
4778
4779        this._resetAdjustments();
4780
4781        this._scrollBar.reset();
4782
4783        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
4784      });
4785    }
4786
4787    _showBackdrop(callback) {
4788      EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {
4789        if (this._ignoreBackdropClick) {
4790          this._ignoreBackdropClick = false;
4791          return;
4792        }
4793
4794        if (event.target !== event.currentTarget) {
4795          return;
4796        }
4797
4798        if (this._config.backdrop === true) {
4799          this.hide();
4800        } else if (this._config.backdrop === 'static') {
4801          this._triggerBackdropTransition();
4802        }
4803      });
4804
4805      this._backdrop.show(callback);
4806    }
4807
4808    _isAnimated() {
4809      return this._element.classList.contains(CLASS_NAME_FADE$3);
4810    }
4811
4812    _triggerBackdropTransition() {
4813      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
4814
4815      if (hideEvent.defaultPrevented) {
4816        return;
4817      }
4818
4819      const {
4820        classList,
4821        scrollHeight,
4822        style
4823      } = this._element;
4824      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed
4825
4826      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {
4827        return;
4828      }
4829
4830      if (!isModalOverflowing) {
4831        style.overflowY = 'hidden';
4832      }
4833
4834      classList.add(CLASS_NAME_STATIC);
4835
4836      this._queueCallback(() => {
4837        classList.remove(CLASS_NAME_STATIC);
4838
4839        if (!isModalOverflowing) {
4840          this._queueCallback(() => {
4841            style.overflowY = '';
4842          }, this._dialog);
4843        }
4844      }, this._dialog);
4845
4846      this._element.focus();
4847    } // ----------------------------------------------------------------------
4848    // the following methods are used to handle overflowing modals
4849    // ----------------------------------------------------------------------
4850
4851
4852    _adjustDialog() {
4853      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
4854
4855      const scrollbarWidth = this._scrollBar.getWidth();
4856
4857      const isBodyOverflowing = scrollbarWidth > 0;
4858
4859      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {
4860        this._element.style.paddingLeft = `${scrollbarWidth}px`;
4861      }
4862
4863      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {
4864        this._element.style.paddingRight = `${scrollbarWidth}px`;
4865      }
4866    }
4867
4868    _resetAdjustments() {
4869      this._element.style.paddingLeft = '';
4870      this._element.style.paddingRight = '';
4871    } // Static
4872
4873
4874    static jQueryInterface(config, relatedTarget) {
4875      return this.each(function () {
4876        const data = Modal.getOrCreateInstance(this, config);
4877
4878        if (typeof config !== 'string') {
4879          return;
4880        }
4881
4882        if (typeof data[config] === 'undefined') {
vendor: 4,925 bytes, lines 4883-5064
4883          throw new TypeError(`No method named "${config}"`);
4884        }
4885
4886        data[config](relatedTarget);
4887      });
4888    }
4889
4890  }
4891  /**
4892   * ------------------------------------------------------------------------
4893   * Data Api implementation
4894   * ------------------------------------------------------------------------
4895   */
4896
4897
4898  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
4899    const target = getElementFromSelector(this);
4900
4901    if (['A', 'AREA'].includes(this.tagName)) {
4902      event.preventDefault();
4903    }
4904
4905    EventHandler.one(target, EVENT_SHOW$3, showEvent => {
4906      if (showEvent.defaultPrevented) {
4907        // only register focus restorer if modal will actually get shown
4908        return;
4909      }
4910
4911      EventHandler.one(target, EVENT_HIDDEN$3, () => {
4912        if (isVisible(this)) {
4913          this.focus();
4914        }
4915      });
4916    }); // avoid conflict when clicking moddal toggler while another one is open
4917
4918    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
4919
4920    if (allReadyOpen) {
4921      Modal.getInstance(allReadyOpen).hide();
4922    }
4923
4924    const data = Modal.getOrCreateInstance(target);
4925    data.toggle(this);
4926  });
4927  enableDismissTrigger(Modal);
4928  /**
4929   * ------------------------------------------------------------------------
4930   * jQuery
4931   * ------------------------------------------------------------------------
4932   * add .Modal to jQuery only if jQuery is present
4933   */
4934
4935  defineJQueryPlugin(Modal);
4936
4937  /**
4938   * --------------------------------------------------------------------------
4939   * Bootstrap (v5.1.3): offcanvas.js
4940   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
4941   * --------------------------------------------------------------------------
4942   */
4943  /**
4944   * ------------------------------------------------------------------------
4945   * Constants
4946   * ------------------------------------------------------------------------
4947   */
4948
4949  const NAME$5 = 'offcanvas';
4950  const DATA_KEY$5 = 'bs.offcanvas';
4951  const EVENT_KEY$5 = `.${DATA_KEY$5}`;
4952  const DATA_API_KEY$2 = '.data-api';
4953  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;
4954  const ESCAPE_KEY = 'Escape';
4955  const Default$4 = {
4956    backdrop: true,
4957    keyboard: true,
4958    scroll: false
4959  };
4960  const DefaultType$4 = {
4961    backdrop: 'boolean',
4962    keyboard: 'boolean',
4963    scroll: 'boolean'
4964  };
4965  const CLASS_NAME_SHOW$3 = 'show';
4966  const CLASS_NAME_BACKDROP = 'offcanvas-backdrop';
4967  const OPEN_SELECTOR = '.offcanvas.show';
4968  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;
4969  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;
4970  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;
4971  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;
4972  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;
4973  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;
4974  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
4975  /**
4976   * ------------------------------------------------------------------------
4977   * Class Definition
4978   * ------------------------------------------------------------------------
4979   */
4980
4981  class Offcanvas extends BaseComponent {
4982    constructor(element, config) {
4983      super(element);
4984      this._config = this._getConfig(config);
4985      this._isShown = false;
4986      this._backdrop = this._initializeBackDrop();
4987      this._focustrap = this._initializeFocusTrap();
4988
4989      this._addEventListeners();
4990    } // Getters
4991
4992
4993    static get NAME() {
4994      return NAME$5;
4995    }
4996
4997    static get Default() {
4998      return Default$4;
4999    } // Public
5000
5001
5002    toggle(relatedTarget) {
5003      return this._isShown ? this.hide() : this.show(relatedTarget);
5004    }
5005
5006    show(relatedTarget) {
5007      if (this._isShown) {
5008        return;
5009      }
5010
5011      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {
5012        relatedTarget
5013      });
5014
5015      if (showEvent.defaultPrevented) {
5016        return;
5017      }
5018
5019      this._isShown = true;
5020      this._element.style.visibility = 'visible';
5021
5022      this._backdrop.show();
5023
5024      if (!this._config.scroll) {
5025        new ScrollBarHelper().hide();
5026      }
5027
5028      this._element.removeAttribute('aria-hidden');
5029
5030      this._element.setAttribute('aria-modal', true);
5031
5032      this._element.setAttribute('role', 'dialog');
5033
5034      this._element.classList.add(CLASS_NAME_SHOW$3);
5035
5036      const completeCallBack = () => {
5037        if (!this._config.scroll) {
5038          this._focustrap.activate();
5039        }
5040
5041        EventHandler.trigger(this._element, EVENT_SHOWN$2, {
5042          relatedTarget
5043        });
5044      };
5045
5046      this._queueCallback(completeCallBack, this._element, true);
5047    }
5048
5049    hide() {
5050      if (!this._isShown) {
5051        return;
5052      }
5053
5054      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);
5055
5056      if (hideEvent.defaultPrevented) {
5057        return;
5058      }
5059
5060      this._focustrap.deactivate();
5061
5062      this._element.blur();
5063
5064      this._isShown = false;
5065
5066      this._element.classList.remove(CLASS_NAME_SHOW$3);
5067
5068      this._backdrop.hide();
5069
5070      const completeCallback = () => {
5071        this._element.setAttribute('aria-hidden', true);
5072
5073        this._element.removeAttribute('aria-modal');
5074
5075        this._element.removeAttribute('role');
5076
5077        this._element.style.visibility = 'hidden';
5078
5079        if (!this._config.scroll) {
5080          new ScrollBarHelper().reset();
5081        }
5082
5083        EventHandler.trigger(this._element, EVENT_HIDDEN$2);
5084      };
5085
5086      this._queueCallback(completeCallback, this._element, true);
5087    }
5088
5089    dispose() {
5090      this._backdrop.dispose();
5091
5092      this._focustrap.deactivate();
5093
5094      super.dispose();
5095    } // Private
5096
5097
5098    _getConfig(config) {
5099      config = { ...Default$4,
5100        ...Manipulator.getDataAttributes(this._element),
5101        ...(typeof config === 'object' ? config : {})
5102      };
5103      typeCheckConfig(NAME$5, config, DefaultType$4);
5104      return config;
5105    }
5106
5107    _initializeBackDrop() {
5108      return new Backdrop({
5109        className: CLASS_NAME_BACKDROP,
5110        isVisible: this._config.backdrop,
5111        isAnimated: true,
5112        rootElement: this._element.parentNode,
5113        clickCallback: () => this.hide()
5114      });
5115    }
5116
5117    _initializeFocusTrap() {
5118      return new FocusTrap({
5119        trapElement: this._element
5120      });
5121    }
5122
5123    _addEventListeners() {
5124      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
5125        if (this._config.keyboard && event.key === ESCAPE_KEY) {
5126          this.hide();
5127        }
5128      });
5129    } // Static
5130
5131
5132    static jQueryInterface(config) {
5133      return this.each(function () {
5134        const data = Offcanvas.getOrCreateInstance(this, config);
5135
5136        if (typeof config !== 'string') {
5137          return;
5138        }
5139
5140        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
5141          throw new TypeError(`No method named "${config}"`);
5142        }
5143
5144        data[config](this);
5145      });
5146    }
5147
5148  }
5149  /**
5150   * ------------------------------------------------------------------------
5151   * Data Api implementation
5152   * ------------------------------------------------------------------------
5153   */
5154
5155
5156  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
5157    const target = getElementFromSelector(this);
5158
5159    if (['A', 'AREA'].includes(this.tagName)) {
5160      event.preventDefault();
5161    }
5162
5163    if (isDisabled(this)) {
5164      return;
5165    }
5166
5167    EventHandler.one(target, EVENT_HIDDEN$2, () => {
5168      // focus on trigger when it is closed
5169      if (isVisible(this)) {
5170        this.focus();
5171      }
5172    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
5173
5174    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
5175
5176    if (allReadyOpen && allReadyOpen !== target) {
5177      Offcanvas.getInstance(allReadyOpen).hide();
5178    }
5179
5180    const data = Offcanvas.getOrCreateInstance(target);
5181    data.toggle(this);
5182  });
5183  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));
5184  enableDismissTrigger(Offcanvas);
5185  /**
5186   * ------------------------------------------------------------------------
5187   * jQuery
5188   * ------------------------------------------------------------------------
5189   */
5190
5191  defineJQueryPlugin(Offcanvas);
5192
5193  /**
5194   * --------------------------------------------------------------------------
5195   * Bootstrap (v5.1.3): util/sanitizer.js
5196   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5197   * --------------------------------------------------------------------------
5198   */
5199  const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
5200  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
5201  /**
5202   * A pattern that recognizes a commonly useful subset of URLs that are safe.
5203   *
5204   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
5205   */
5206
5207  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
5208  /**
5209   * A pattern that matches safe data URLs. Only matches image, video and audio types.
5210   *
5211   * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
5212   */
5213
5214  const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
5215
5216  const allowedAttribute = (attribute, allowedAttributeList) => {
5217    const attributeName = attribute.nodeName.toLowerCase();
5218
5219    if (allowedAttributeList.includes(attributeName)) {
5220      if (uriAttributes.has(attributeName)) {
5221        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
5222      }
5223
5224      return true;
5225    }
5226
5227    const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.
5228
5229    for (let i = 0, len = regExp.length; i < len; i++) {
5230      if (regExp[i].test(attributeName)) {
5231        return true;
5232      }
5233    }
5234
5235    return false;
5236  };
5237
5238  const DefaultAllowlist = {
5239    // Global attributes allowed on any supplied element below.
5240    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
5241    a: ['target', 'href', 'title', 'rel'],
5242    area: [],
5243    b: [],
5244    br: [],
5245    col: [],
5246    code: [],
5247    div: [],
5248    em: [],
5249    hr: [],
5250    h1: [],
5251    h2: [],
5252    h3: [],
5253    h4: [],
5254    h5: [],
5255    h6: [],
5256    i: [],
5257    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
5258    li: [],
5259    ol: [],
5260    p: [],
5261    pre: [],
5262    s: [],
5263    small: [],
5264    span: [],
5265    sub: [],
5266    sup: [],
5267    strong: [],
5268    u: [],
5269    ul: []
5270  };
5271  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {
5272    if (!unsafeHtml.length) {
5273      return unsafeHtml;
5274    }
5275
5276    if (sanitizeFn && typeof sanitizeFn === 'function') {
5277      return sanitizeFn(unsafeHtml);
5278    }
5279
5280    const domParser = new window.DOMParser();
5281    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
5282    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
5283
5284    for (let i = 0, len = elements.length; i < len; i++) {
5285      const element = elements[i];
5286      const elementName = element.nodeName.toLowerCase();
5287
5288      if (!Object.keys(allowList).includes(elementName)) {
5289        element.remove();
5290        continue;
5291      }
5292
5293      const attributeList = [].concat(...element.attributes);
5294      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
5295      attributeList.forEach(attribute => {
5296        if (!allowedAttribute(attribute, allowedAttributes)) {
5297          element.removeAttribute(attribute.nodeName);
5298        }
5299      });
5300    }
5301
5302    return createdDocument.body.innerHTML;
5303  }
5304
5305  /**
5306   * --------------------------------------------------------------------------
5307   * Bootstrap (v5.1.3): tooltip.js
5308   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5309   * --------------------------------------------------------------------------
5310   */
5311  /**
5312   * ------------------------------------------------------------------------
5313   * Constants
5314   * ------------------------------------------------------------------------
5315   */
5316
5317  const NAME$4 = 'tooltip';
5318  const DATA_KEY$4 = 'bs.tooltip';
5319  const EVENT_KEY$4 = `.${DATA_KEY$4}`;
5320  const CLASS_PREFIX$1 = 'bs-tooltip';
5321  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);
5322  const DefaultType$3 = {
5323    animation: 'boolean',
5324    template: 'string',
5325    title: '(string|element|function)',
5326    trigger: 'string',
5327    delay: '(number|object)',
5328    html: 'boolean',
5329    selector: '(string|boolean)',
5330    placement: '(string|function)',
5331    offset: '(array|string|function)',
5332    container: '(string|element|boolean)',
5333    fallbackPlacements: 'array',
5334    boundary: '(string|element)',
5335    customClass: '(string|function)',
5336    sanitize: 'boolean',
5337    sanitizeFn: '(null|function)',
5338    allowList: 'object',
5339    popperConfig: '(null|object|function)'
5340  };
5341  const AttachmentMap = {
5342    AUTO: 'auto',
5343    TOP: 'top',
5344    RIGHT: isRTL() ? 'left' : 'right',
5345    BOTTOM: 'bottom',
5346    LEFT: isRTL() ? 'right' : 'left'
5347  };
5348  const Default$3 = {
5349    animation: true,
5350    template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>',
5351    trigger: 'hover focus',
5352    title: '',
5353    delay: 0,
5354    html: false,
5355    selector: false,
5356    placement: 'top',
5357    offset: [0, 0],
5358    container: false,
5359    fallbackPlacements: ['top', 'right', 'bottom', 'left'],
5360    boundary: 'clippingParents',
5361    customClass: '',
5362    sanitize: true,
5363    sanitizeFn: null,
5364    allowList: DefaultAllowlist,
5365    popperConfig: null
5366  };
5367  const Event$2 = {
5368    HIDE: `hide${EVENT_KEY$4}`,
5369    HIDDEN: `hidden${EVENT_KEY$4}`,
5370    SHOW: `show${EVENT_KEY$4}`,
5371    SHOWN: `shown${EVENT_KEY$4}`,
5372    INSERTED: `inserted${EVENT_KEY$4}`,
5373    CLICK: `click${EVENT_KEY$4}`,
5374    FOCUSIN: `focusin${EVENT_KEY$4}`,
5375    FOCUSOUT: `focusout${EVENT_KEY$4}`,
5376    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,
5377    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`
5378  };
5379  const CLASS_NAME_FADE$2 = 'fade';
5380  const CLASS_NAME_MODAL = 'modal';
5381  const CLASS_NAME_SHOW$2 = 'show';
5382  const HOVER_STATE_SHOW = 'show';
5383  const HOVER_STATE_OUT = 'out';
5384  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
5385  const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
5386  const EVENT_MODAL_HIDE = 'hide.bs.modal';
5387  const TRIGGER_HOVER = 'hover';
5388  const TRIGGER_FOCUS = 'focus';
5389  const TRIGGER_CLICK = 'click';
5390  const TRIGGER_MANUAL = 'manual';
5391  /**
5392   * ------------------------------------------------------------------------
5393   * Class Definition
5394   * ------------------------------------------------------------------------
5395   */
5396
5397  class Tooltip extends BaseComponent {
5398    constructor(element, config) {
5399      if (typeof Popper === 'undefined') {
5400        throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
5401      }
5402
5403      super(element); // private
5404
5405      this._isEnabled = true;
5406      this._timeout = 0;
5407      this._hoverState = '';
5408      this._activeTrigger = {};
5409      this._popper = null; // Protected
5410
5411      this._config = this._getConfig(config);
5412      this.tip = null;
5413
5414      this._setListeners();
5415    } // Getters
5416
5417
5418    static get Default() {
5419      return Default$3;
5420    }
5421
5422    static get NAME() {
5423      return NAME$4;
5424    }
5425
5426    static get Event() {
5427      return Event$2;
5428    }
5429
5430    static get DefaultType() {
5431      return DefaultType$3;
5432    } // Public
5433
5434
5435    enable() {
5436      this._isEnabled = true;
5437    }
5438
5439    disable() {
5440      this._isEnabled = false;
5441    }
5442
5443    toggleEnabled() {
5444      this._isEnabled = !this._isEnabled;
5445    }
5446
5447    toggle(event) {
5448      if (!this._isEnabled) {
5449        return;
5450      }
5451
5452      if (event) {
5453        const context = this._initializeOnDelegatedTarget(event);
5454
5455        context._activeTrigger.click = !context._activeTrigger.click;
5456
5457        if (context._isWithActiveTrigger()) {
5458          context._enter(null, context);
5459        } else {
5460          context._leave(null, context);
5461        }
5462      } else {
5463        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {
5464          this._leave(null, this);
5465
5466          return;
5467        }
5468
5469        this._enter(null, this);
5470      }
5471    }
5472
5473    dispose() {
5474      clearTimeout(this._timeout);
5475      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
5476
5477      if (this.tip) {
5478        this.tip.remove();
5479      }
5480
5481      this._disposePopper();
5482
5483      super.dispose();
5484    }
5485
5486    show() {
5487      if (this._element.style.display === 'none') {
5488        throw new Error('Please use show on visible elements');
5489      }
5490
5491      if (!(this.isWithContent() && this._isEnabled)) {
5492        return;
5493      }
5494
5495      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);
5496      const shadowRoot = findShadowRoot(this._element);
5497      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);
5498
5499      if (showEvent.defaultPrevented || !isInTheDom) {
5500        return;
5501      } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`
5502      // This will be removed later in favor of a `setContent` method
5503
5504
5505      if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {
5506        this._disposePopper();
5507
5508        this.tip.remove();
5509        this.tip = null;
5510      }
5511
5512      const tip = this.getTipElement();
5513      const tipId = getUID(this.constructor.NAME);
5514      tip.setAttribute('id', tipId);
5515
5516      this._element.setAttribute('aria-describedby', tipId);
5517
5518      if (this._config.animation) {
5519        tip.classList.add(CLASS_NAME_FADE$2);
5520      }
5521
5522      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
5523
5524      const attachment = this._getAttachment(placement);
5525
5526      this._addAttachmentClass(attachment);
5527
5528      const {
5529        container
5530      } = this._config;
5531      Data.set(tip, this.constructor.DATA_KEY, this);
5532
5533      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
5534        container.append(tip);
5535        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);
5536      }
5537
5538      if (this._popper) {
5539        this._popper.update();
5540      } else {
5541        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));
5542      }
5543
5544      tip.classList.add(CLASS_NAME_SHOW$2);
5545
5546      const customClass = this._resolvePossibleFunction(this._config.customClass);
5547
5548      if (customClass) {
5549        tip.classList.add(...customClass.split(' '));
5550      } // If this is a touch-enabled device we add extra
5551      // empty mouseover listeners to the body's immediate children;
5552      // only needed because of broken event delegation on iOS
5553      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
5554
5555
5556      if ('ontouchstart' in document.documentElement) {
5557        [].concat(...document.body.children).forEach(element => {
5558          EventHandler.on(element, 'mouseover', noop);
5559        });
5560      }
5561
5562      const complete = () => {
5563        const prevHoverState = this._hoverState;
5564        this._hoverState = null;
5565        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);
5566
5567        if (prevHoverState === HOVER_STATE_OUT) {
5568          this._leave(null, this);
5569        }
5570      };
5571
5572      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
5573
5574      this._queueCallback(complete, this.tip, isAnimated);
5575    }
5576
5577    hide() {
5578      if (!this._popper) {
5579        return;
5580      }
5581
5582      const tip = this.getTipElement();
5583
5584      const complete = () => {
5585        if (this._isWithActiveTrigger()) {
5586          return;
5587        }
5588
5589        if (this._hoverState !== HOVER_STATE_SHOW) {
5590          tip.remove();
5591        }
5592
5593        this._cleanTipClass();
5594
5595        this._element.removeAttribute('aria-describedby');
5596
5597        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);
5598
5599        this._disposePopper();
5600      };
5601
5602      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);
5603
5604      if (hideEvent.defaultPrevented) {
5605        return;
5606      }
5607
5608      tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
5609      // empty mouseover listeners we added for iOS support
5610
5611      if ('ontouchstart' in document.documentElement) {
5612        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));
5613      }
5614
5615      this._activeTrigger[TRIGGER_CLICK] = false;
5616      this._activeTrigger[TRIGGER_FOCUS] = false;
5617      this._activeTrigger[TRIGGER_HOVER] = false;
5618      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);
5619
5620      this._queueCallback(complete, this.tip, isAnimated);
5621
5622      this._hoverState = '';
5623    }
5624
5625    update() {
5626      if (this._popper !== null) {
5627        this._popper.update();
5628      }
5629    } // Protected
5630
5631
5632    isWithContent() {
5633      return Boolean(this.getTitle());
5634    }
5635
5636    getTipElement() {
5637      if (this.tip) {
5638        return this.tip;
5639      }
5640
5641      const element = document.createElement('div');
5642      element.innerHTML = this._config.template;
5643      const tip = element.children[0];
5644      this.setContent(tip);
5645      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
5646      this.tip = tip;
5647      return this.tip;
5648    }
5649
5650    setContent(tip) {
5651      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);
5652    }
5653
5654    _sanitizeAndSetContent(template, content, selector) {
5655      const templateElement = SelectorEngine.findOne(selector, template);
5656
5657      if (!content && templateElement) {
5658        templateElement.remove();
5659        return;
5660      } // we use append for html objects to maintain js events
5661
5662
5663      this.setElementContent(templateElement, content);
5664    }
5665
5666    setElementContent(element, content) {
5667      if (element === null) {
5668        return;
5669      }
5670
5671      if (isElement$1(content)) {
5672        content = getElement(content); // content is a DOM node or a jQuery
5673
5674        if (this._config.html) {
5675          if (content.parentNode !== element) {
5676            element.innerHTML = '';
5677            element.append(content);
5678          }
5679        } else {
5680          element.textContent = content.textContent;
5681        }
5682
5683        return;
5684      }
5685
5686      if (this._config.html) {
5687        if (this._config.sanitize) {
5688          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);
5689        }
5690
5691        element.innerHTML = content;
5692      } else {
5693        element.textContent = content;
5694      }
5695    }
5696
5697    getTitle() {
5698      const title = this._element.getAttribute('data-bs-original-title') || this._config.title;
5699
5700      return this._resolvePossibleFunction(title);
5701    }
5702
5703    updateAttachment(attachment) {
5704      if (attachment === 'right') {
5705        return 'end';
5706      }
5707
5708      if (attachment === 'left') {
5709        return 'start';
5710      }
5711
5712      return attachment;
5713    } // Private
5714
5715
5716    _initializeOnDelegatedTarget(event, context) {
5717      return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
5718    }
5719
5720    _getOffset() {
5721      const {
5722        offset
5723      } = this._config;
5724
5725      if (typeof offset === 'string') {
5726        return offset.split(',').map(val => Number.parseInt(val, 10));
5727      }
5728
5729      if (typeof offset === 'function') {
5730        return popperData => offset(popperData, this._element);
5731      }
5732
5733      return offset;
5734    }
5735
5736    _resolvePossibleFunction(content) {
5737      return typeof content === 'function' ? content.call(this._element) : content;
5738    }
5739
5740    _getPopperConfig(attachment) {
5741      const defaultBsPopperConfig = {
5742        placement: attachment,
5743        modifiers: [{
5744          name: 'flip',
5745          options: {
5746            fallbackPlacements: this._config.fallbackPlacements
5747          }
5748        }, {
5749          name: 'offset',
5750          options: {
5751            offset: this._getOffset()
5752          }
5753        }, {
5754          name: 'preventOverflow',
5755          options: {
5756            boundary: this._config.boundary
5757          }
5758        }, {
5759          name: 'arrow',
5760          options: {
5761            element: `.${this.constructor.NAME}-arrow`
5762          }
5763        }, {
5764          name: 'onChange',
5765          enabled: true,
5766          phase: 'afterWrite',
5767          fn: data => this._handlePopperPlacementChange(data)
5768        }],
5769        onFirstUpdate: data => {
5770          if (data.options.placement !== data.placement) {
5771            this._handlePopperPlacementChange(data);
5772          }
5773        }
5774      };
5775      return { ...defaultBsPopperConfig,
5776        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
5777      };
5778    }
5779
5780    _addAttachmentClass(attachment) {
5781      this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);
5782    }
5783
5784    _getAttachment(placement) {
5785      return AttachmentMap[placement.toUpperCase()];
5786    }
5787
5788    _setListeners() {
5789      const triggers = this._config.trigger.split(' ');
5790
5791      triggers.forEach(trigger => {
5792        if (trigger === 'click') {
5793          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));
5794        } else if (trigger !== TRIGGER_MANUAL) {
5795          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;
5796          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;
5797          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));
5798          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));
5799        }
5800      });
5801
5802      this._hideModalHandler = () => {
5803        if (this._element) {
5804          this.hide();
5805        }
5806      };
5807
5808      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
5809
5810      if (this._config.selector) {
5811        this._config = { ...this._config,
5812          trigger: 'manual',
5813          selector: ''
5814        };
5815      } else {
5816        this._fixTitle();
5817      }
5818    }
5819
5820    _fixTitle() {
5821      const title = this._element.getAttribute('title');
5822
5823      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');
5824
5825      if (title || originalTitleType !== 'string') {
5826        this._element.setAttribute('data-bs-original-title', title || '');
5827
5828        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {
5829          this._element.setAttribute('aria-label', title);
5830        }
5831
5832        this._element.setAttribute('title', '');
5833      }
5834    }
5835
5836    _enter(event, context) {
5837      context = this._initializeOnDelegatedTarget(event, context);
5838
5839      if (event) {
5840        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
5841      }
5842
5843      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {
5844        context._hoverState = HOVER_STATE_SHOW;
5845        return;
5846      }
5847
5848      clearTimeout(context._timeout);
5849      context._hoverState = HOVER_STATE_SHOW;
5850
5851      if (!context._config.delay || !context._config.delay.show) {
5852        context.show();
5853        return;
5854      }
5855
5856      context._timeout = setTimeout(() => {
5857        if (context._hoverState === HOVER_STATE_SHOW) {
5858          context.show();
5859        }
5860      }, context._config.delay.show);
5861    }
5862
5863    _leave(event, context) {
5864      context = this._initializeOnDelegatedTarget(event, context);
5865
5866      if (event) {
5867        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
5868      }
5869
5870      if (context._isWithActiveTrigger()) {
5871        return;
5872      }
5873
5874      clearTimeout(context._timeout);
5875      context._hoverState = HOVER_STATE_OUT;
5876
5877      if (!context._config.delay || !context._config.delay.hide) {
5878        context.hide();
5879        return;
5880      }
5881
5882      context._timeout = setTimeout(() => {
5883        if (context._hoverState === HOVER_STATE_OUT) {
5884          context.hide();
5885        }
5886      }, context._config.delay.hide);
5887    }
5888
5889    _isWithActiveTrigger() {
5890      for (const trigger in this._activeTrigger) {
5891        if (this._activeTrigger[trigger]) {
5892          return true;
5893        }
5894      }
5895
5896      return false;
5897    }
5898
5899    _getConfig(config) {
5900      const dataAttributes = Manipulator.getDataAttributes(this._element);
5901      Object.keys(dataAttributes).forEach(dataAttr => {
5902        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {
5903          delete dataAttributes[dataAttr];
5904        }
5905      });
5906      config = { ...this.constructor.Default,
5907        ...dataAttributes,
5908        ...(typeof config === 'object' && config ? config : {})
5909      };
5910      config.container = config.container === false ? document.body : getElement(config.container);
5911
5912      if (typeof config.delay === 'number') {
5913        config.delay = {
5914          show: config.delay,
5915          hide: config.delay
5916        };
5917      }
5918
5919      if (typeof config.title === 'number') {
5920        config.title = config.title.toString();
5921      }
5922
5923      if (typeof config.content === 'number') {
5924        config.content = config.content.toString();
5925      }
5926
5927      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
5928
5929      if (config.sanitize) {
5930        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);
5931      }
5932
5933      return config;
5934    }
5935
5936    _getDelegateConfig() {
5937      const config = {};
5938
5939      for (const key in this._config) {
5940        if (this.constructor.Default[key] !== this._config[key]) {
5941          config[key] = this._config[key];
5942        }
5943      } // In the future can be replaced with:
5944      // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
5945      // `Object.fromEntries(keysWithDifferentValues)`
5946
5947
5948      return config;
5949    }
5950
5951    _cleanTipClass() {
5952      const tip = this.getTipElement();
5953      const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g');
5954      const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);
5955
5956      if (tabClass !== null && tabClass.length > 0) {
5957        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));
5958      }
5959    }
5960
5961    _getBasicClassPrefix() {
5962      return CLASS_PREFIX$1;
5963    }
5964
5965    _handlePopperPlacementChange(popperData) {
5966      const {
5967        state
5968      } = popperData;
5969
5970      if (!state) {
5971        return;
5972      }
5973
5974      this.tip = state.elements.popper;
5975
5976      this._cleanTipClass();
5977
5978      this._addAttachmentClass(this._getAttachment(state.placement));
5979    }
5980
5981    _disposePopper() {
5982      if (this._popper) {
5983        this._popper.destroy();
5984
5985        this._popper = null;
5986      }
5987    } // Static
5988
5989
5990    static jQueryInterface(config) {
5991      return this.each(function () {
5992        const data = Tooltip.getOrCreateInstance(this, config);
5993
5994        if (typeof config === 'string') {
5995          if (typeof data[config] === 'undefined') {
5996            throw new TypeError(`No method named "${config}"`);
5997          }
5998
5999          data[config]();
6000        }
6001      });
6002    }
6003
6004  }
6005  /**
6006   * ------------------------------------------------------------------------
6007   * jQuery
6008   * ------------------------------------------------------------------------
6009   * add .Tooltip to jQuery only if jQuery is present
6010   */
6011
6012
6013  defineJQueryPlugin(Tooltip);
6014
6015  /**
6016   * --------------------------------------------------------------------------
6017   * Bootstrap (v5.1.3): popover.js
6018   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6019   * --------------------------------------------------------------------------
6020   */
6021  /**
6022   * ------------------------------------------------------------------------
6023   * Constants
6024   * ------------------------------------------------------------------------
6025   */
6026
6027  const NAME$3 = 'popover';
6028  const DATA_KEY$3 = 'bs.popover';
6029  const EVENT_KEY$3 = `.${DATA_KEY$3}`;
6030  const CLASS_PREFIX = 'bs-popover';
6031  const Default$2 = { ...Tooltip.Default,
6032    placement: 'right',
6033    offset: [0, 8],
6034    trigger: 'click',
6035    content: '',
6036    template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>'
6037  };
6038  const DefaultType$2 = { ...Tooltip.DefaultType,
6039    content: '(string|element|function)'
6040  };
6041  const Event$1 = {
6042    HIDE: `hide${EVENT_KEY$3}`,
6043    HIDDEN: `hidden${EVENT_KEY$3}`,
6044    SHOW: `show${EVENT_KEY$3}`,
6045    SHOWN: `shown${EVENT_KEY$3}`,
6046    INSERTED: `inserted${EVENT_KEY$3}`,
6047    CLICK: `click${EVENT_KEY$3}`,
6048    FOCUSIN: `focusin${EVENT_KEY$3}`,
6049    FOCUSOUT: `focusout${EVENT_KEY$3}`,
6050    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,
6051    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`
6052  };
6053  const SELECTOR_TITLE = '.popover-header';
6054  const SELECTOR_CONTENT = '.popover-body';
6055  /**
6056   * ------------------------------------------------------------------------
6057   * Class Definition
6058   * ------------------------------------------------------------------------
6059   */
6060
6061  class Popover extends Tooltip {
6062    // Getters
6063    static get Default() {
6064      return Default$2;
6065    }
6066
6067    static get NAME() {
6068      return NAME$3;
6069    }
6070
6071    static get Event() {
6072      return Event$1;
6073    }
6074
6075    static get DefaultType() {
6076      return DefaultType$2;
6077    } // Overrides
6078
6079
6080    isWithContent() {
6081      return this.getTitle() || this._getContent();
6082    }
6083
6084    setContent(tip) {
6085      this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);
6086
6087      this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);
6088    } // Private
6089
6090
6091    _getContent() {
6092      return this._resolvePossibleFunction(this._config.content);
6093    }
6094
6095    _getBasicClassPrefix() {
6096      return CLASS_PREFIX;
6097    } // Static
6098
6099
6100    static jQueryInterface(config) {
6101      return this.each(function () {
6102        const data = Popover.getOrCreateInstance(this, config);
6103
6104        if (typeof config === 'string') {
6105          if (typeof data[config] === 'undefined') {
6106            throw new TypeError(`No method named "${config}"`);
6107          }
6108
6109          data[config]();
6110        }
6111      });
6112    }
6113
6114  }
6115  /**
6116   * ------------------------------------------------------------------------
6117   * jQuery
6118   * ------------------------------------------------------------------------
6119   * add .Popover to jQuery only if jQuery is present
6120   */
6121
6122
6123  defineJQueryPlugin(Popover);
6124
6125  /**
6126   * --------------------------------------------------------------------------
6127   * Bootstrap (v5.1.3): scrollspy.js
6128   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6129   * --------------------------------------------------------------------------
6130   */
6131  /**
6132   * ------------------------------------------------------------------------
6133   * Constants
6134   * ------------------------------------------------------------------------
6135   */
6136
6137  const NAME$2 = 'scrollspy';
6138  const DATA_KEY$2 = 'bs.scrollspy';
6139  const EVENT_KEY$2 = `.${DATA_KEY$2}`;
6140  const DATA_API_KEY$1 = '.data-api';
6141  const Default$1 = {
6142    offset: 10,
6143    method: 'auto',
6144    target: ''
6145  };
6146  const DefaultType$1 = {
6147    offset: 'number',
6148    method: 'string',
6149    target: '(string|element)'
6150  };
6151  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
6152  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;
6153  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;
6154  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
6155  const CLASS_NAME_ACTIVE$1 = 'active';
6156  const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
6157  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
6158  const SELECTOR_NAV_LINKS = '.nav-link';
6159  const SELECTOR_NAV_ITEMS = '.nav-item';
6160  const SELECTOR_LIST_ITEMS = '.list-group-item';
6161  const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;
6162  const SELECTOR_DROPDOWN$1 = '.dropdown';
6163  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
6164  const METHOD_OFFSET = 'offset';
6165  const METHOD_POSITION = 'position';
6166  /**
6167   * ------------------------------------------------------------------------
6168   * Class Definition
6169   * ------------------------------------------------------------------------
6170   */
6171
6172  class ScrollSpy extends BaseComponent {
6173    constructor(element, config) {
6174      super(element);
6175      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;
6176      this._config = this._getConfig(config);
6177      this._offsets = [];
6178      this._targets = [];
6179      this._activeTarget = null;
6180      this._scrollHeight = 0;
6181      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());
6182      this.refresh();
6183
6184      this._process();
6185    } // Getters
6186
6187
6188    static get Default() {
6189      return Default$1;
6190    }
6191
6192    static get NAME() {
6193      return NAME$2;
6194    } // Public
6195
6196
6197    refresh() {
6198      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
6199      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
6200      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
6201      this._offsets = [];
6202      this._targets = [];
6203      this._scrollHeight = this._getScrollHeight();
6204      const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);
6205      targets.map(element => {
6206        const targetSelector = getSelectorFromElement(element);
6207        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;
6208
6209        if (target) {
6210          const targetBCR = target.getBoundingClientRect();
6211
6212          if (targetBCR.width || targetBCR.height) {
6213            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];
6214          }
6215        }
6216
6217        return null;
6218      }).filter(item => item).sort((a, b) =>
6218 a[0] - b[0]).forEach(item => {
6219        this._offsets.push(item[0]);
6220
6221        this._targets.push(item[1]);
6222      });
6223    }
6224
6225    dispose() {
6226      EventHandler.off(this._scrollElement, EVENT_KEY$2);
6227      super.dispose();
6228    } // Private
6229
6230
6231    _getConfig(config) {
6232      config = { ...Default$1,
6233        ...Manipulator.getDataAttributes(this._element),
6234        ...(typeof config === 'object' && config ? config : {})
6235      };
6236      config.target = getElement(config.target) || document.documentElement;
6237      typeCheckConfig(NAME$2, config, DefaultType$1);
6238      return config;
6239    }
6240
6241    _getScrollTop() {
6242      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
6243    }
6244
6245    _getScrollHeight() {
6246      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
6247    }
6248
6249    _getOffsetHeight() {
6250      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
6251    }
6252
6253    _process() {
6254      const scrollTop = this._getScrollTop() + this._config.offset;
6255
6256      const scrollHeight = this._getScrollHeight();
6257
6258      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
6259
6260      if (this._scrollHeight !== scrollHeight) {
6261        this.refresh();
6262      }
6263
6264      if (scrollTop >= maxScroll) {
6265        const target = this._targets[this._targets.length - 1];
6266
6267        if (this._activeTarget !== target) {
6268          this._activate(target);
6269        }
6270
6271        return;
6272      }
6273
6274      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
6275        this._activeTarget = null;
6276
6277        this._clear();
6278
6279        return;
6280      }
6281
6282      for (let i = this._offsets.length; i--;) {
6283        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
6284
6285        if (isActiveTarget) {
6286          this._activate(this._targets[i]);
6287        }
6288      }
6289    }
6290
6291    _activate(target) {
6292      this._activeTarget = target;
6293
6294      this._clear();
6295
6296      const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`);
6297      const link = SelectorEngine.findOne(queries.join(','), this._config.target);
6298      link.classList.add(CLASS_NAME_ACTIVE$1);
6299
6300      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
6301        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);
6302      } else {
6303        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {
6304          // Set triggered links parents as active
6305          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
6306          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item
6307
6308          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {
6309            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));
6310          });
6311        });
6312      }
6313
6314      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {
6315        relatedTarget: target
6316      });
6317    }
6318
6319    _clear() {
6320      SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));
6321    } // Static
6322
6323
6324    static jQueryInterface(config) {
6325      return this.each(function () {
6326        const data = ScrollSpy.getOrCreateInstance(this, config);
6327
6328        if (typeof config !== 'string') {
6329          return;
6330        }
6331
6332        if (typeof data[config] === 'undefined') {
6333          throw new TypeError(`No method named "${config}"`);
6334        }
6335
6336        data[config]();
6337      });
6338    }
6339
6340  }
6341  /**
6342   * ------------------------------------------------------------------------
6343   * Data Api implementation
6344   * ------------------------------------------------------------------------
6345   */
6346
6347
6348  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
6349    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));
6350  });
6351  /**
6352   * ------------------------------------------------------------------------
6353   * jQuery
6354   * ------------------------------------------------------------------------
6355   * add .ScrollSpy to jQuery only if jQuery is present
6356   */
6357
6358  defineJQueryPlugin(ScrollSpy);
6359
6360  /**
6361   * --------------------------------------------------------------------------
6362   * Bootstrap (v5.1.3): tab.js
6363   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6364   * --------------------------------------------------------------------------
6365   */
6366  /**
6367   * ------------------------------------------------------------------------
6368   * Constants
6369   * ------------------------------------------------------------------------
6370   */
6371
6372  const NAME$1 = 'tab';
6373  const DATA_KEY$1 = 'bs.tab';
6374  const EVENT_KEY$1 = `.${DATA_KEY$1}`;
6375  const DATA_API_KEY = '.data-api';
6376  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
6377  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
6378  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
6379  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
6380  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;
6381  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
6382  const CLASS_NAME_ACTIVE = 'active';
6383  const CLASS_NAME_FADE$1 = 'fade';
6384  const CLASS_NAME_SHOW$1 = 'show';
6385  const SELECTOR_DROPDOWN = '.dropdown';
6386  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
6387  const SELECTOR_ACTIVE = '.active';
6388  const SELECTOR_ACTIVE_UL = ':scope > li > .active';
6389  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
6390  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
6391  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';
6392  /**
6393   * ------------------------------------------------------------------------
6394   * Class Definition
6395   * ------------------------------------------------------------------------
6396   */
6397
6398  class Tab extends BaseComponent {
6399    // Getters
6400    static get NAME() {
6401      return NAME$1;
6402    } // Public
6403
6404
6405    show() {
6406      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
6407        return;
6408      }
6409
6410      let previous;
6411      const target = getElementFromSelector(this._element);
6412
6413      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);
6414
6415      if (listElement) {
6416        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
6417        previous = SelectorEngine.find(itemSelector, listElement);
6418        previous = previous[previous.length - 1];
6419      }
6420
6421      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {
6422        relatedTarget: this._element
6423      }) : null;
6424      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {
6425        relatedTarget: previous
6426      });
6427
6428      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {
6429        return;
6430      }
6431
6432      this._activate(this._element, listElement);
6433
6434      const complete = () => {
6435        EventHandler.trigger(previous, EVENT_HIDDEN$1, {
6436          relatedTarget: this._element
6437        });
6438        EventHandler.trigger(this._element, EVENT_SHOWN$1, {
6439          relatedTarget: previous
6440        });
6441      };
6442
6443      if (target) {
6444        this._activate(target, target.parentNode, complete);
6445      } else {
6446        complete();
6447      }
6448    } // Private
6449
6450
6451    _activate(element, container, callback) {
6452      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);
6453      const active = activeElements[0];
6454      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);
6455
6456      const complete = () => this._transitionComplete(element, active, callback);
6457
6458      if (active && isTransitioning) {
6459        active.classList.remove(CLASS_NAME_SHOW$1);
6460
6461        this._queueCallback(complete, element, true);
6462      } else {
6463        complete();
6464      }
6465    }
6466
6467    _transitionComplete(element, active, callback) {
6468      if (active) {
6469        active.classList.remove(CLASS_NAME_ACTIVE);
6470        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);
6471
6472        if (dropdownChild) {
6473          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);
6474        }
6475
6476        if (active.getAttribute('role') === 'tab') {
6477          active.setAttribute('aria-selected', false);
6478        }
6479      }
6480
6481      element.classList.add(CLASS_NAME_ACTIVE);
6482
6483      if (element.getAttribute('role') === 'tab') {
6484        element.setAttribute('aria-selected', true);
6485      }
6486
6487      reflow(element);
6488
6489      if (element.classList.contains(CLASS_NAME_FADE$1)) {
6490        element.classList.add(CLASS_NAME_SHOW$1);
6491      }
6492
6493      let parent = element.parentNode;
6494
6495      if (parent && parent.nodeName === 'LI') {
6496        parent = parent.parentNode;
6497      }
6498
6499      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {
6500        const dropdownElement = element.closest(SELECTOR_DROPDOWN);
6501
6502        if (dropdownElement) {
6503          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));
6504        }
6505
6506        element.setAttribute('aria-expanded', true);
6507      }
6508
6509      if (callback) {
6510        callback();
6511      }
6512    } // Static
6513
6514
6515    static jQueryInterface(config) {
6516      return this.each(function () {
6517        const data = Tab.getOrCreateInstance(this);
6518
6519        if (typeof config === 'string') {
6520          if (typeof data[config] === 'undefined') {
6521            throw new TypeError(`No method named "${config}"`);
6522          }
6523
6524          data[config]();
6525        }
6526      });
6527    }
6528
6529  }
6530  /**
6531   * ------------------------------------------------------------------------
6532   * Data Api implementation
6533   * ------------------------------------------------------------------------
6534   */
6535
6536
6537  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
6538    if (['A', 'AREA'].includes(this.tagName)) {
6539      event.preventDefault();
6540    }
6541
6542    if (isDisabled(this)) {
6543      return;
6544    }
6545
6546    const data = Tab.getOrCreateInstance(this);
6547    data.show();
6548  });
6549  /**
6550   * ------------------------------------------------------------------------
6551   * jQuery
6552   * ------------------------------------------------------------------------
6553   * add .Tab to jQuery only if jQuery is present
6554   */
6555
6556  defineJQueryPlugin(Tab);
6557
6558  /**
6559   * --------------------------------------------------------------------------
6560   * Bootstrap (v5.1.3): toast.js
6561   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6562   * --------------------------------------------------------------------------
6563   */
6564  /**
6565   * ------------------------------------------------------------------------
6566   * Constants
6567   * ------------------------------------------------------------------------
6568   */
6569
6570  const NAME = 'toast';
6571  const DATA_KEY = 'bs.toast';
6572  const EVENT_KEY = `.${DATA_KEY}`;
6573  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
6574  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
6575  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
6576  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
6577  const EVENT_HIDE = `hide${EVENT_KEY}`;
6578  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
6579  const EVENT_SHOW = `show${EVENT_KEY}`;
6580  const EVENT_SHOWN = `shown${EVENT_KEY}`;
6581  const CLASS_NAME_FADE = 'fade';
vendor: 4,599 bytes, lines 6582-6767
6582  const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
6583
6584  const CLASS_NAME_SHOW = 'show';
6585  const CLASS_NAME_SHOWING = 'showing';
6586  const DefaultType = {
6587    animation: 'boolean',
6588    autohide: 'boolean',
6589    delay: 'number'
6590  };
6591  const Default = {
6592    animation: true,
6593    autohide: true,
6594    delay: 5000
6595  };
6596  /**
6597   * ------------------------------------------------------------------------
6598   * Class Definition
6599   * ------------------------------------------------------------------------
6600   */
6601
6602  class Toast extends BaseComponent {
6603    constructor(element, config) {
6604      super(element);
6605      this._config = this._getConfig(config);
6606      this._timeout = null;
6607      this._hasMouseInteraction = false;
6608      this._hasKeyboardInteraction = false;
6609
6610      this._setListeners();
6611    } // Getters
6612
6613
6614    static get DefaultType() {
6615      return DefaultType;
6616    }
6617
6618    static get Default() {
6619      return Default;
6620    }
6621
6622    static get NAME() {
6623      return NAME;
6624    } // Public
6625
6626
6627    show() {
6628      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
6629
6630      if (showEvent.defaultPrevented) {
6631        return;
6632      }
6633
6634      this._clearTimeout();
6635
6636      if (this._config.animation) {
6637        this._element.classList.add(CLASS_NAME_FADE);
6638      }
6639
6640      const complete = () => {
6641        this._element.classList.remove(CLASS_NAME_SHOWING);
6642
6643        EventHandler.trigger(this._element, EVENT_SHOWN);
6644
6645        this._maybeScheduleHide();
6646      };
6647
6648      this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
6649
6650
6651      reflow(this._element);
6652
6653      this._element.classList.add(CLASS_NAME_SHOW);
6654
6655      this._element.classList.add(CLASS_NAME_SHOWING);
6656
6657      this._queueCallback(complete, this._element, this._config.animation);
6658    }
6659
6660    hide() {
6661      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
6662        return;
6663      }
6664
6665      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
6666
6667      if (hideEvent.defaultPrevented) {
6668        return;
6669      }
6670
6671      const complete = () => {
6672        this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
6673
6674
6675        this._element.classList.remove(CLASS_NAME_SHOWING);
6676
6677        this._element.classList.remove(CLASS_NAME_SHOW);
6678
6679        EventHandler.trigger(this._element, EVENT_HIDDEN);
6680      };
6681
6682      this._element.classList.add(CLASS_NAME_SHOWING);
6683
6684      this._queueCallback(complete, this._element, this._config.animation);
6685    }
6686
6687    dispose() {
6688      this._clearTimeout();
6689
6690      if (this._element.classList.contains(CLASS_NAME_SHOW)) {
6691        this._element.classList.remove(CLASS_NAME_SHOW);
6692      }
6693
6694      super.dispose();
6695    } // Private
6696
6697
6698    _getConfig(config) {
6699      config = { ...Default,
6700        ...Manipulator.getDataAttributes(this._element),
6701        ...(typeof config === 'object' && config ? config : {})
6702      };
6703      typeCheckConfig(NAME, config, this.constructor.DefaultType);
6704      return config;
6705    }
6706
6707    _maybeScheduleHide() {
6708      if (!this._config.autohide) {
6709        return;
6710      }
6711
6712      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
6713        return;
6714      }
6715
6716      this._timeout = setTimeout(() => {
6717        this.hide();
6718      }, this._config.delay);
6719    }
6720
6721    _onInteraction(event, isInteracting) {
6722      switch (event.type) {
6723        case 'mouseover':
6724        case 'mouseout':
6725          this._hasMouseInteraction = isInteracting;
6726          break;
6727
6728        case 'focusin':
6729        case 'focusout':
6730          this._hasKeyboardInteraction = isInteracting;
6731          break;
6732      }
6733
6734      if (isInteracting) {
6735        this._clearTimeout();
6736
6737        return;
6738      }
6739
6740      const nextElement = event.relatedTarget;
6741
6742      if (this._element === nextElement || this._element.contains(nextElement)) {
6743        return;
6744      }
6745
6746      this._maybeScheduleHide();
6747    }
6748
6749    _setListeners() {
6750      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
6751      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
6752      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
6753      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
6754    }
6755
6756    _clearTimeout() {
6757      clearTimeout(this._timeout);
6758      this._timeout = null;
6759    } // Static
6760
6761
6762    static jQueryInterface(config) {
6763      return this.each(function () {
6764        const data = Toast.getOrCreateInstance(this, config);
6765
6766        if (typeof config === 'string') {
6767          if (typeof data[config] === 'undefined') {
6768            throw new TypeError(`No method named "${config}"`);
6769          }
6770
6771          data[config](this);
6772        }
6773      });
6774    }
6775
6776  }
6777
6778  enableDismissTrigger(Toast);
6779  /**
6780   * ------------------------------------------------------------------------
6781   * jQuery
6782   * ------------------------------------------------------------------------
6783   * add .Toast to jQuery only if jQuery is present
6784   */
6785
6786  defineJQueryPlugin(Toast);
6787
6788  /**
6789   * --------------------------------------------------------------------------
6790   * Bootstrap (v5.1.3): index.umd.js
6791   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
6792   * --------------------------------------------------------------------------
6793   */
6794  const index_umd = {
6795    Alert,
6796    Button,
6797    Carousel,
6798    Collapse,
6799    Dropdown,
6800    Modal,
6801    Offcanvas,
6802    Popover,
6803    ScrollSpy,
6804    Tab,
6805    Toast,
6806    Tooltip
6807  };
6808
6809  return index_umd;
6810
6811}));
6812//# sourceMappingURL=bootstrap.bundle.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.