PageSourceSearch

https://abcas3.auditedmedia.com/PFCenter/lib/bootstrap/dist/js/bootstrap.bundle.js

js auditedmedia.com collected 2026-10-02 06:44:19 UTC 208,492 bytes, 6,780 lines download raw bytes

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