{
  "version": 3,
  "sources": ["../../../node_modules/htmx.org/dist/htmx.esm.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../../assets/src/utils/delete-confirm.js", "../../../assets/src/utils/dropzone.js", "../../../assets/src/utils/htmx-request-params.js", "../../../assets/src/utils/optimistisch.js", "../../../node_modules/web-vitals/dist/modules/lib/bfcache.js", "../../../node_modules/web-vitals/dist/modules/lib/bindReporter.js", "../../../node_modules/web-vitals/dist/modules/lib/doubleRAF.js", "../../../node_modules/web-vitals/dist/modules/lib/getNavigationEntry.js", "../../../node_modules/web-vitals/dist/modules/lib/getActivationStart.js", "../../../node_modules/web-vitals/dist/modules/lib/getVisibilityWatcher.js", "../../../node_modules/web-vitals/dist/modules/lib/initMetric.js", "../../../node_modules/web-vitals/dist/modules/lib/generateUniqueID.js", "../../../node_modules/web-vitals/dist/modules/lib/initUnique.js", "../../../node_modules/web-vitals/dist/modules/lib/LayoutShiftManager.js", "../../../node_modules/web-vitals/dist/modules/lib/observe.js", "../../../node_modules/web-vitals/dist/modules/lib/softNavs.js", "../../../node_modules/web-vitals/dist/modules/lib/runOnce.js", "../../../node_modules/web-vitals/dist/modules/lib/FCPEntryManager.js", "../../../node_modules/web-vitals/dist/modules/lib/whenActivated.js", "../../../node_modules/web-vitals/dist/modules/onFCP.js", "../../../node_modules/web-vitals/dist/modules/onCLS.js", "../../../node_modules/web-vitals/dist/modules/lib/polyfills/interactionCountPolyfill.js", "../../../node_modules/web-vitals/dist/modules/lib/InteractionManager.js", "../../../node_modules/web-vitals/dist/modules/lib/whenIdleOrHidden.js", "../../../node_modules/web-vitals/dist/modules/onINP.js", "../../../node_modules/web-vitals/dist/modules/lib/LCPEntryManager.js", "../../../node_modules/web-vitals/dist/modules/onLCP.js", "../../../node_modules/web-vitals/dist/modules/onTTFB.js", "../../../assets/src/utils/fetch.js", "../../../assets/src/utils/interaktionszeit-start.js", "../../../assets/src/interaktionszeit.js", "../../../assets/src/projekt-suchpraefix.js", "../../../assets/src/navbar-suche.js", "../../../assets/src/base.js"],
  "sourcesContent": ["var htmx = (function() {\n  'use strict'\n\n  // Public API\n  const htmx = {\n    // Tsc madness here, assigning the functions directly results in an invalid TypeScript output, but reassigning is fine\n    /* Event processing */\n    /** @type {typeof onLoadHelper} */\n    onLoad: null,\n    /** @type {typeof processNode} */\n    process: null,\n    /** @type {typeof addEventListenerImpl} */\n    on: null,\n    /** @type {typeof removeEventListenerImpl} */\n    off: null,\n    /** @type {typeof triggerEvent} */\n    trigger: null,\n    /** @type {typeof ajaxHelper} */\n    ajax: null,\n    /* DOM querying helpers */\n    /** @type {typeof find} */\n    find: null,\n    /** @type {typeof findAll} */\n    findAll: null,\n    /** @type {typeof closest} */\n    closest: null,\n    /**\n     * Returns the input values that would resolve for a given element via the htmx value resolution mechanism\n     *\n     * @see https://htmx.org/api/#values\n     *\n     * @param {Element} elt the element to resolve values on\n     * @param {HttpVerb} type the request type (e.g. **get** or **post**) non-GET's will include the enclosing form of the element. Defaults to **post**\n     * @returns {Object}\n     */\n    values: function(elt, type) {\n      const inputValues = getInputValues(elt, type || 'post')\n      return inputValues.values\n    },\n    /* DOM manipulation helpers */\n    /** @type {typeof removeElement} */\n    remove: null,\n    /** @type {typeof addClassToElement} */\n    addClass: null,\n    /** @type {typeof removeClassFromElement} */\n    removeClass: null,\n    /** @type {typeof toggleClassOnElement} */\n    toggleClass: null,\n    /** @type {typeof takeClassForElement} */\n    takeClass: null,\n    /** @type {typeof swap} */\n    swap: null,\n    /* Extension entrypoints */\n    /** @type {typeof defineExtension} */\n    defineExtension: null,\n    /** @type {typeof removeExtension} */\n    removeExtension: null,\n    /* Debugging */\n    /** @type {typeof logAll} */\n    logAll: null,\n    /** @type {typeof logNone} */\n    logNone: null,\n    /* Debugging */\n    /**\n     * The logger htmx uses to log with\n     *\n     * @see https://htmx.org/api/#logger\n     */\n    logger: null,\n    /**\n     * A property holding the configuration htmx uses at runtime.\n     *\n     * Note that using a [meta tag](https://htmx.org/docs/#config) is the preferred mechanism for setting these properties.\n     *\n     * @see https://htmx.org/api/#config\n     */\n    config: {\n      /**\n       * Whether to use history.\n       * @type boolean\n       * @default true\n       */\n      historyEnabled: true,\n      /**\n       * The number of pages to keep in **sessionStorage** for history support.\n       * @type number\n       * @default 10\n       */\n      historyCacheSize: 10,\n      /**\n       * @type boolean\n       * @default false\n       */\n      refreshOnHistoryMiss: false,\n      /**\n       * The default swap style to use if **[hx-swap](https://htmx.org/attributes/hx-swap)** is omitted.\n       * @type HtmxSwapStyle\n       * @default 'innerHTML'\n       */\n      defaultSwapStyle: 'innerHTML',\n      /**\n       * The default delay between receiving a response from the server and doing the swap.\n       * @type number\n       * @default 0\n       */\n      defaultSwapDelay: 0,\n      /**\n       * The default delay between completing the content swap and settling attributes.\n       * @type number\n       * @default 20\n       */\n      defaultSettleDelay: 20,\n      /**\n       * If true, htmx will inject a small amount of CSS into the page to make indicators invisible unless the **htmx-indicator** class is present.\n       * @type boolean\n       * @default true\n       */\n      includeIndicatorStyles: true,\n      /**\n       * The class to place on indicators when a request is in flight.\n       * @type string\n       * @default 'htmx-indicator'\n       */\n      indicatorClass: 'htmx-indicator',\n      /**\n       * The class to place on triggering elements when a request is in flight.\n       * @type string\n       * @default 'htmx-request'\n       */\n      requestClass: 'htmx-request',\n      /**\n       * The class to temporarily place on elements that htmx has added to the DOM.\n       * @type string\n       * @default 'htmx-added'\n       */\n      addedClass: 'htmx-added',\n      /**\n       * The class to place on target elements when htmx is in the settling phase.\n       * @type string\n       * @default 'htmx-settling'\n       */\n      settlingClass: 'htmx-settling',\n      /**\n       * The class to place on target elements when htmx is in the swapping phase.\n       * @type string\n       * @default 'htmx-swapping'\n       */\n      swappingClass: 'htmx-swapping',\n      /**\n       * Allows the use of eval-like functionality in htmx, to enable **hx-vars**, trigger conditions & script tag evaluation. Can be set to **false** for CSP compatibility.\n       * @type boolean\n       * @default true\n       */\n      allowEval: true,\n      /**\n       * If set to false, disables the interpretation of script tags.\n       * @type boolean\n       * @default true\n       */\n      allowScriptTags: true,\n      /**\n       * If set, the nonce will be added to inline scripts.\n       * @type string\n       * @default ''\n       */\n      inlineScriptNonce: '',\n      /**\n       * If set, the nonce will be added to inline styles.\n       * @type string\n       * @default ''\n       */\n      inlineStyleNonce: '',\n      /**\n       * The attributes to settle during the settling phase.\n       * @type string[]\n       * @default ['class', 'style', 'width', 'height']\n       */\n      attributesToSettle: ['class', 'style', 'width', 'height'],\n      /**\n       * Allow cross-site Access-Control requests using credentials such as cookies, authorization headers or TLS client certificates.\n       * @type boolean\n       * @default false\n       */\n      withCredentials: false,\n      /**\n       * @type number\n       * @default 0\n       */\n      timeout: 0,\n      /**\n       * The default implementation of **getWebSocketReconnectDelay** for reconnecting after unexpected connection loss by the event code **Abnormal Closure**, **Service Restart** or **Try Again Later**.\n       * @type {'full-jitter' | ((retryCount:number) => number)}\n       * @default \"full-jitter\"\n       */\n      wsReconnectDelay: 'full-jitter',\n      /**\n       * The type of binary data being received over the WebSocket connection\n       * @type BinaryType\n       * @default 'blob'\n       */\n      wsBinaryType: 'blob',\n      /**\n       * @type string\n       * @default '[hx-disable], [data-hx-disable]'\n       */\n      disableSelector: '[hx-disable], [data-hx-disable]',\n      /**\n       * @type {'auto' | 'instant' | 'smooth'}\n       * @default 'instant'\n       */\n      scrollBehavior: 'instant',\n      /**\n       * If the focused element should be scrolled into view.\n       * @type boolean\n       * @default false\n       */\n      defaultFocusScroll: false,\n      /**\n       * If set to true htmx will include a cache-busting parameter in GET requests to avoid caching partial responses by the browser\n       * @type boolean\n       * @default false\n       */\n      getCacheBusterParam: false,\n      /**\n       * If set to true, htmx will use the View Transition API when swapping in new content.\n       * @type boolean\n       * @default false\n       */\n      globalViewTransitions: false,\n      /**\n       * htmx will format requests with these methods by encoding their parameters in the URL, not the request body\n       * @type {(HttpVerb)[]}\n       * @default ['get', 'delete']\n       */\n      methodsThatUseUrlParams: ['get', 'delete'],\n      /**\n       * If set to true, disables htmx-based requests to non-origin hosts.\n       * @type boolean\n       * @default true\n       */\n      selfRequestsOnly: true,\n      /**\n       * If set to true htmx will not update the title of the document when a title tag is found in new content\n       * @type boolean\n       * @default false\n       */\n      ignoreTitle: false,\n      /**\n       * Whether the target of a boosted element is scrolled into the viewport.\n       * @type boolean\n       * @default true\n       */\n      scrollIntoViewOnBoost: true,\n      /**\n       * The cache to store evaluated trigger specifications into.\n       * You may define a simple object to use a never-clearing cache, or implement your own system using a [proxy object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Proxy)\n       * @type {Object|null}\n       * @default null\n       */\n      triggerSpecsCache: null,\n      /** @type boolean */\n      disableInheritance: false,\n      /** @type HtmxResponseHandlingConfig[] */\n      responseHandling: [\n        { code: '204', swap: false },\n        { code: '[23]..', swap: true },\n        { code: '[45]..', swap: false, error: true }\n      ],\n      /**\n       * Whether to process OOB swaps on elements that are nested within the main response element.\n       * @type boolean\n       * @default true\n       */\n      allowNestedOobSwaps: true,\n      /**\n       * Whether to treat history cache miss full page reload requests as a \"HX-Request\" by returning this response header\n       * This should always be disabled when using HX-Request header to optionally return partial responses\n       * @type boolean\n       * @default true\n       */\n      historyRestoreAsHxRequest: true,\n      /**\n       * Whether to report input validation errors to the end user and update focus to the first input that fails validation.\n       * This should always be enabled as this matches default browser form submit behaviour\n       * @type boolean\n       * @default false\n       */\n      reportValidityOfForms: false\n    },\n    /** @type {typeof parseInterval} */\n    parseInterval: null,\n    /**\n     * proxy of window.location used for page reload functions\n     * @type location\n     */\n    location,\n    /** @type {typeof internalEval} */\n    _: null,\n    version: '2.0.11'\n  }\n  // Tsc madness part 2\n  htmx.onLoad = onLoadHelper\n  htmx.process = processNode\n  htmx.on = addEventListenerImpl\n  htmx.off = removeEventListenerImpl\n  htmx.trigger = triggerEvent\n  htmx.ajax = ajaxHelper\n  htmx.find = find\n  htmx.findAll = findAll\n  htmx.closest = closest\n  htmx.remove = removeElement\n  htmx.addClass = addClassToElement\n  htmx.removeClass = removeClassFromElement\n  htmx.toggleClass = toggleClassOnElement\n  htmx.takeClass = takeClassForElement\n  htmx.swap = swap\n  htmx.defineExtension = defineExtension\n  htmx.removeExtension = removeExtension\n  htmx.logAll = logAll\n  htmx.logNone = logNone\n  htmx.parseInterval = parseInterval\n  htmx._ = internalEval\n\n  const internalAPI = {\n    addTriggerHandler,\n    bodyContains,\n    canAccessLocalStorage,\n    findThisElement,\n    filterValues,\n    swap,\n    hasAttribute,\n    getAttributeValue,\n    getClosestAttributeValue,\n    getClosestMatch,\n    getExpressionVars,\n    getHeaders,\n    getInputValues,\n    getInternalData,\n    getSwapSpecification,\n    getTriggerSpecs,\n    getTarget,\n    makeFragment,\n    mergeObjects,\n    makeSettleInfo,\n    oobSwap,\n    querySelectorExt,\n    settleImmediately,\n    shouldCancel,\n    triggerEvent,\n    triggerErrorEvent,\n    withExtensions\n  }\n\n  const VERBS = ['get', 'post', 'put', 'delete', 'patch']\n  const VERB_SELECTOR = VERBS.map(function(verb) {\n    return '[hx-' + verb + '], [data-hx-' + verb + ']'\n  }).join(', ')\n\n  //= ===================================================================\n  // Utilities\n  //= ===================================================================\n\n  /**\n   * Parses an interval string consistent with the way htmx does. Useful for plugins that have timing-related attributes.\n   *\n   * Caution: Accepts an int followed by either **s** or **ms**. All other values use **parseFloat**\n   *\n   * @see https://htmx.org/api/#parseInterval\n   *\n   * @param {string} str timing string\n   * @returns {number|undefined}\n   */\n  function parseInterval(str) {\n    if (str == undefined) {\n      return undefined\n    }\n\n    let interval = NaN\n    if (str.slice(-2) == 'ms') {\n      interval = parseFloat(str.slice(0, -2))\n    } else if (str.slice(-1) == 's') {\n      interval = parseFloat(str.slice(0, -1)) * 1000\n    } else if (str.slice(-1) == 'm') {\n      interval = parseFloat(str.slice(0, -1)) * 1000 * 60\n    } else {\n      interval = parseFloat(str)\n    }\n    return isNaN(interval) ? undefined : interval\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} name\n   * @returns {(string | null)}\n   */\n  function getRawAttribute(elt, name) {\n    return elt instanceof Element && elt.getAttribute(name)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} qualifiedName\n   * @returns {boolean}\n   */\n  // resolve with both hx and data-hx prefixes\n  function hasAttribute(elt, qualifiedName) {\n    return !!elt.hasAttribute && (elt.hasAttribute(qualifiedName) ||\n      elt.hasAttribute('data-' + qualifiedName))\n  }\n\n  /**\n   *\n   * @param {Node} elt\n   * @param {string} qualifiedName\n   * @returns {(string | null)}\n   */\n  function getAttributeValue(elt, qualifiedName) {\n    return getRawAttribute(elt, qualifiedName) || getRawAttribute(elt, 'data-' + qualifiedName)\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Node | null}\n   */\n  function parentElt(elt) {\n    const parent = elt.parentElement\n    if (!parent && elt.parentNode instanceof ShadowRoot) return elt.parentNode\n    return parent\n  }\n\n  /**\n   * @returns {Document}\n   */\n  function getDocument() {\n    return document\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {boolean} global\n   * @returns {Node|Document}\n   */\n  function getRootNode(elt, global) {\n    return elt.getRootNode ? elt.getRootNode({ composed: global }) : getDocument()\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {(e:Node) => boolean} condition\n   * @returns {Node | null}\n   */\n  function getClosestMatch(elt, condition) {\n    while (elt && !condition(elt)) {\n      elt = parentElt(elt)\n    }\n\n    return elt || null\n  }\n\n  /**\n   * @param {Element} initialElement\n   * @param {Element} ancestor\n   * @param {string} attributeName\n   * @returns {string|null}\n   */\n  function getAttributeValueWithDisinheritance(initialElement, ancestor, attributeName) {\n    const attributeValue = getAttributeValue(ancestor, attributeName)\n    const disinherit = getAttributeValue(ancestor, 'hx-disinherit')\n    var inherit = getAttributeValue(ancestor, 'hx-inherit')\n    if (initialElement !== ancestor) {\n      if (htmx.config.disableInheritance) {\n        if (inherit && (inherit === '*' || inherit.split(' ').indexOf(attributeName) >= 0)) {\n          return attributeValue\n        } else {\n          return null\n        }\n      }\n      if (disinherit && (disinherit === '*' || disinherit.split(' ').indexOf(attributeName) >= 0)) {\n        return 'unset'\n      }\n    }\n    return attributeValue\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attributeName\n   * @returns {string | null}\n   */\n  function getClosestAttributeValue(elt, attributeName) {\n    let closestAttr = null\n    getClosestMatch(elt, function(e) {\n      return !!(closestAttr = getAttributeValueWithDisinheritance(elt, asElement(e), attributeName))\n    })\n    if (closestAttr !== 'unset') {\n      return closestAttr\n    }\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {string} selector\n   * @returns {boolean}\n   */\n  function matches(elt, selector) {\n    return elt instanceof Element && elt.matches(selector)\n  }\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function getStartTag(str) {\n    const tagMatcher = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i\n    const match = tagMatcher.exec(str)\n    if (match) {\n      return match[1].toLowerCase()\n    } else {\n      return ''\n    }\n  }\n\n  /**\n   * @param {string} resp\n   * @returns {Document}\n   */\n  function parseHTML(resp) {\n    if ('parseHTMLUnsafe' in Document) {\n      return Document.parseHTMLUnsafe(resp)\n    }\n    const parser = new DOMParser()\n    return parser.parseFromString(resp, 'text/html')\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {Node} elt\n   */\n  function takeChildrenFor(fragment, elt) {\n    while (elt.childNodes.length > 0) {\n      fragment.append(elt.childNodes[0])\n    }\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {HTMLScriptElement}\n   */\n  function duplicateScript(script) {\n    const newScript = getDocument().createElement('script')\n    forEach(script.attributes, function(attr) {\n      newScript.setAttribute(attr.name, attr.value)\n    })\n    newScript.textContent = script.textContent\n    newScript.async = false\n    if (htmx.config.inlineScriptNonce) {\n      newScript.nonce = htmx.config.inlineScriptNonce\n    }\n    return newScript\n  }\n\n  /**\n   * @param {HTMLScriptElement} script\n   * @returns {boolean}\n   */\n  function isJavaScriptScriptNode(script) {\n    return script.matches('script') && (script.type === 'text/javascript' || script.type === 'module' || script.type === '')\n  }\n\n  /**\n   * we have to make new copies of script tags that we are going to insert because\n   * SOME browsers (not saying who, but it involves an element and an animal) don't\n   * execute scripts created in <template> tags when they are inserted into the DOM\n   * and all the others do lmao\n   * @param {DocumentFragment} fragment\n   */\n  function normalizeScriptTags(fragment) {\n    if (!htmx.config.allowScriptTags) {\n      // remove all script tags if scripts are disabled\n      fragment.querySelectorAll('script').forEach((script) => script.remove())\n      return\n    }\n    Array.from(fragment.querySelectorAll('script')).forEach(/** @param {HTMLScriptElement} script */ (script) => {\n      if (isJavaScriptScriptNode(script)) {\n        const newScript = duplicateScript(script)\n        const parent = script.parentNode\n        try {\n          parent.insertBefore(newScript, script)\n        } catch (e) {\n          logError(e)\n        } finally {\n          script.remove()\n        }\n      }\n    })\n  }\n\n  /**\n   * @typedef {DocumentFragment & {title?: string}} DocumentFragmentWithTitle\n   * @description  a document fragment representing the response HTML, including\n   * a `title` property for any title information found\n   */\n\n  /**\n   * @param {string} response HTML\n   * @returns {DocumentFragmentWithTitle}\n   */\n  function makeFragment(response) {\n    // convert <hx-*> custom tags to <template hx type=\"*\"> so they survive HTML parsing\n    response = response.replace(/<hx-([a-z]+)((?:\\s[^>]*)?)>/gi, '<template hx type=\"$1\"$2>').replace(/<\\/hx-[a-z]+>/gi, '</template>')\n    // strip head tag to determine shape of response we are dealing with\n    const responseWithNoHead = response.replace(/<head(\\s[^>]*)?>[\\s\\S]*?<\\/head>/i, '')\n    const startTag = getStartTag(responseWithNoHead)\n    /** @type DocumentFragmentWithTitle */\n    let fragment\n    if (startTag === 'html') {\n      // if it is a full document, parse it and return the body\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(response)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else if (startTag === 'body') {\n      // parse body w/o wrapping in template\n      fragment = /** @type DocumentFragmentWithTitle */ (new DocumentFragment())\n      const doc = parseHTML(responseWithNoHead)\n      takeChildrenFor(fragment, doc.body)\n      fragment.title = doc.title\n    } else {\n      // otherwise we have non-body partial HTML content, so wrap it in a template to maximize parsing flexibility\n      const doc = parseHTML('<body><template class=\"internal-htmx-wrapper\">' + responseWithNoHead + '</template></body>')\n      fragment = /** @type DocumentFragmentWithTitle */ (doc.querySelector('template').content)\n      // extract title into fragment for later processing\n      fragment.title = doc.title\n\n      // for legacy reasons we support a title tag at the root level of non-body responses, so we need to handle it\n      var titleElement = fragment.querySelector('title')\n      if (titleElement && titleElement.parentNode === fragment) {\n        titleElement.remove()\n        fragment.title = titleElement.innerText\n      }\n    }\n    if (fragment) {\n      normalizeScriptTags(fragment)\n    }\n    return fragment\n  }\n\n  /**\n   * @param {Function} func\n   */\n  function maybeCall(func) {\n    if (func) {\n      func()\n    }\n  }\n\n  /**\n   * @param {any} o\n   * @param {string} type\n   * @returns\n   */\n  function isType(o, type) {\n    return Object.prototype.toString.call(o) === '[object ' + type + ']'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Function}\n   */\n  function isFunction(o) {\n    return typeof o === 'function'\n  }\n\n  /**\n   * @param {*} o\n   * @returns {o is Object}\n   */\n  function isRawObject(o) {\n    return isType(o, 'Object')\n  }\n\n  /**\n   * @typedef {Object} OnHandler\n   * @property {(keyof HTMLElementEventMap)|string} event\n   * @property {EventListener} listener\n   */\n\n  /**\n   * @typedef {Object} ListenerInfo\n   * @property {string} trigger\n   * @property {EventListener} listener\n   * @property {EventTarget} on\n   */\n\n  /**\n   * @typedef {Object} HtmxNodeInternalData\n   * Element data\n   * @property {number} [initHash]\n   * @property {boolean} [boosted]\n   * @property {OnHandler[]} [onHandlers]\n   * @property {number} [timeout]\n   * @property {ListenerInfo[]} [listenerInfos]\n   * @property {boolean} [cancelled]\n   * @property {boolean} [triggeredOnce]\n   * @property {number} [delayed]\n   * @property {number|null} [throttle]\n   * @property {WeakMap<HtmxTriggerSpecification,WeakMap<EventTarget,string>>} [lastValue]\n   * @property {boolean} [loaded]\n   * @property {string} [path]\n   * @property {string} [verb]\n   * @property {boolean} [polling]\n   * @property {HTMLButtonElement|HTMLInputElement|null} [lastButtonClicked]\n   * @property {number} [requestCount]\n   * @property {XMLHttpRequest} [xhr]\n   * @property {(() => void)[]} [queuedRequests]\n   * @property {boolean} [abortable]\n   * @property {boolean} [firstInitCompleted]\n   *\n   * Event data\n   * @property {HtmxTriggerSpecification} [triggerSpec]\n   * @property {EventTarget[]} [handledFor]\n   */\n\n  /**\n   * getInternalData retrieves \"private\" data stored by htmx within an element\n   * @param {EventTarget|Event} elt\n   * @returns {HtmxNodeInternalData}\n   */\n  function getInternalData(elt) {\n    const dataProp = 'htmx-internal-data'\n    let data = elt[dataProp]\n    if (!data) {\n      data = elt[dataProp] = {}\n    }\n    return data\n  }\n\n  /**\n   * toArray converts an ArrayLike object into a real array.\n   * @template T\n   * @param {ArrayLike<T>} arr\n   * @returns {T[]}\n   */\n  function toArray(arr) {\n    const returnArr = []\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        returnArr.push(arr[i])\n      }\n    }\n    return returnArr\n  }\n\n  /**\n   * @template T\n   * @param {T[]|NamedNodeMap|HTMLCollection|HTMLFormControlsCollection|ArrayLike<T>} arr\n   * @param {(T) => void} func\n   */\n  function forEach(arr, func) {\n    if (arr) {\n      for (let i = 0; i < arr.length; i++) {\n        func(arr[i])\n      }\n    }\n  }\n\n  /**\n   * @param {Element} el\n   * @returns {boolean}\n   */\n  function isScrolledIntoView(el) {\n    const rect = el.getBoundingClientRect()\n    const elemTop = rect.top\n    const elemBottom = rect.bottom\n    return elemTop < window.innerHeight && elemBottom >= 0\n  }\n\n  /**\n   * Checks whether the element is in the document (includes shadow roots).\n   * This function this is a slight misnomer; it will return true even for elements in the head.\n   *\n   * @param {Node} elt\n   * @returns {boolean}\n   */\n  function bodyContains(elt) {\n    return elt.getRootNode({ composed: true }) === document\n  }\n\n  /**\n   * @param {string} trigger\n   * @returns {string[]}\n   */\n  function splitOnWhitespace(trigger) {\n    return trigger.trim().split(/\\s+/)\n  }\n\n  /**\n   * mergeObjects takes all the keys from\n   * obj2 and duplicates them into obj1\n   * @template T1\n   * @template T2\n   * @param {T1} obj1\n   * @param {T2} obj2\n   * @returns {T1 & T2}\n   */\n  function mergeObjects(obj1, obj2) {\n    return Object.assign({}, obj1, obj2)\n  }\n\n  /**\n   * @param {string} jString\n   * @returns {any|null}\n   */\n  function parseJSON(jString) {\n    try {\n      return JSON.parse(jString)\n    } catch (error) {\n      logError(error)\n      return null\n    }\n  }\n\n  /**\n   * @returns {boolean}\n   */\n  function canAccessLocalStorage() {\n    const test = 'htmx:sessionStorageTest'\n    try {\n      sessionStorage.setItem(test, test)\n      sessionStorage.removeItem(test)\n      return true\n    } catch (e) {\n      return false\n    }\n  }\n\n  /**\n   * @param {string} path\n   * @returns {string}\n   */\n  function normalizePath(path) {\n    try {\n      const url = new URL(path, window.location.href)\n      path = url.pathname + url.search\n    } catch (e) {\n      // fallback for malformed URLs\n    }\n    // remove trailing slash, unless index page\n    if (path != '/') {\n      path = path.replace(/\\/+$/, '')\n    }\n    return path\n  }\n\n  //= =========================================================================================\n  // public API\n  //= =========================================================================================\n\n  /**\n   * @param {string} str\n   * @returns {any}\n   */\n  function internalEval(str) {\n    return maybeEval(getDocument().body, function() {\n      return eval(str)\n    })\n  }\n\n  /**\n   * Adds a callback for the **htmx:load** event. This can be used to process new content, for example initializing the content with a javascript library\n   *\n   * @see https://htmx.org/api/#onLoad\n   *\n   * @param {(elt: Node) => void} callback the callback to call on newly loaded content\n   * @returns {EventListener}\n   */\n  function onLoadHelper(callback) {\n    const value = htmx.on('htmx:load', /** @param {CustomEvent} evt */ function(evt) {\n      callback(evt.detail.elt)\n    })\n    return value\n  }\n\n  /**\n   * Log all htmx events, useful for debugging.\n   *\n   * @see https://htmx.org/api/#logAll\n   */\n  function logAll() {\n    htmx.logger = function(elt, event, data) {\n      if (console) {\n        console.log(event, elt, data)\n      }\n    }\n  }\n\n  function logNone() {\n    htmx.logger = null\n  }\n\n  /**\n   * Finds an element matching the selector\n   *\n   * @see https://htmx.org/api/#find\n   *\n   * @param {ParentNode|string} eltOrSelector  the root element to search inside of, not including the root itself | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {Element|null}\n   */\n  function find(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelector(selector)\n    } else {\n      return find(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * Finds all elements matching the selector\n   *\n   * @see https://htmx.org/api/#findAll\n   *\n   * @param {ParentNode|string} eltOrSelector  the root element to search inside of, not including the root itself | the selector to match\n   * @param {string} [selector] the selector to match\n   * @returns {NodeListOf<Element>}\n   */\n  function findAll(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return eltOrSelector.querySelectorAll(selector)\n    } else {\n      return findAll(getDocument(), eltOrSelector)\n    }\n  }\n\n  /**\n   * @returns Window\n   */\n  function getWindow() {\n    return window\n  }\n\n  /**\n   * Removes an element from the DOM\n   *\n   * @see https://htmx.org/api/#remove\n   *\n   * @param {Node} elt\n   * @param {number} [delay]\n   */\n  function removeElement(elt, delay) {\n    elt = resolveTarget(elt)\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeElement(elt)\n        elt = null\n      }, delay)\n    } else {\n      parentElt(elt).removeChild(elt)\n    }\n  }\n\n  /**\n   * @param {any} elt\n   * @return {Element|null}\n   */\n  function asElement(elt) {\n    return elt instanceof Element ? elt : null\n  }\n\n  /**\n   * @param {any} elt\n   * @return {HTMLElement|null}\n   */\n  function asHtmlElement(elt) {\n    return elt instanceof HTMLElement ? elt : null\n  }\n\n  /**\n   * @param {any} value\n   * @return {string|null}\n   */\n  function asString(value) {\n    return typeof value === 'string' ? value : null\n  }\n\n  /**\n   * @param {EventTarget} elt\n   * @return {ParentNode|null}\n   */\n  function asParentNode(elt) {\n    return elt instanceof Element || elt instanceof Document || elt instanceof DocumentFragment ? elt : null\n  }\n\n  /**\n   * This method adds a class to the given element.\n   *\n   * @see https://htmx.org/api/#addClass\n   *\n   * @param {Element|string} elt the element to add the class to\n   * @param {string} clazz the class to add\n   * @param {number} [delay] the delay (in milliseconds) before class is added\n   */\n  function addClassToElement(elt, clazz, delay) {\n    elt = asElement(resolveTarget(elt))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        addClassToElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      elt.classList && elt.classList.add(clazz)\n    }\n  }\n\n  /**\n   * Removes a class from the given element\n   *\n   * @see https://htmx.org/api/#removeClass\n   *\n   * @param {Node|string} node element to remove the class from\n   * @param {string} clazz the class to remove\n   * @param {number} [delay] the delay (in milliseconds before class is removed)\n   */\n  function removeClassFromElement(node, clazz, delay) {\n    let elt = asElement(resolveTarget(node))\n    if (!elt) {\n      return\n    }\n    if (delay) {\n      getWindow().setTimeout(function() {\n        removeClassFromElement(elt, clazz)\n        elt = null\n      }, delay)\n    } else {\n      if (elt.classList) {\n        elt.classList.remove(clazz)\n        // if there are no classes left, remove the class attribute\n        if (elt.classList.length === 0) {\n          elt.removeAttribute('class')\n        }\n      }\n    }\n  }\n\n  /**\n   * Toggles the given class on an element\n   *\n   * @see https://htmx.org/api/#toggleClass\n   *\n   * @param {Element|string} elt the element to toggle the class on\n   * @param {string} clazz the class to toggle\n   */\n  function toggleClassOnElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    elt.classList.toggle(clazz)\n  }\n\n  /**\n   * Takes the given class from its siblings, so that among its siblings, only the given element will have the class.\n   *\n   * @see https://htmx.org/api/#takeClass\n   *\n   * @param {Node|string} elt the element that will take the class\n   * @param {string} clazz the class to take\n   */\n  function takeClassForElement(elt, clazz) {\n    elt = resolveTarget(elt)\n    forEach(elt.parentElement.children, function(child) {\n      removeClassFromElement(child, clazz)\n    })\n    addClassToElement(asElement(elt), clazz)\n  }\n\n  /**\n   * Finds the closest matching element in the given elements parentage, inclusive of the element\n   *\n   * @see https://htmx.org/api/#closest\n   *\n   * @param {Element|string} elt the element to find the selector from\n   * @param {string} selector the selector to find\n   * @returns {Element|null}\n   */\n  function closest(elt, selector) {\n    elt = asElement(resolveTarget(elt))\n    if (elt) {\n      return elt.closest(selector)\n    }\n    return null\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} prefix\n   * @returns {boolean}\n   */\n  function startsWith(str, prefix) {\n    return str.substring(0, prefix.length) === prefix\n  }\n\n  /**\n   * @param {string} str\n   * @param {string} suffix\n   * @returns {boolean}\n   */\n  function endsWith(str, suffix) {\n    return str.substring(str.length - suffix.length) === suffix\n  }\n\n  /**\n   * @param {string} selector\n   * @returns {string}\n   */\n  function normalizeSelector(selector) {\n    const trimmedSelector = selector.trim()\n    if (startsWith(trimmedSelector, '<') && endsWith(trimmedSelector, '/>')) {\n      return trimmedSelector.substring(1, trimmedSelector.length - 2)\n    } else {\n      return trimmedSelector\n    }\n  }\n\n  /**\n   * @param {Node|Element|Document|string} elt\n   * @param {string} selector\n   * @param {boolean=} global\n   * @returns {(Node|Window)[]}\n   */\n  function querySelectorAllExt(elt, selector, global) {\n    if (selector.indexOf('global ') === 0) {\n      return querySelectorAllExt(elt, selector.slice(7), true)\n    }\n\n    elt = resolveTarget(elt)\n\n    const parts = []\n    {\n      let chevronsCount = 0\n      let offset = 0\n      for (let i = 0; i < selector.length; i++) {\n        const char = selector[i]\n        if (char === ',' && chevronsCount === 0) {\n          parts.push(selector.substring(offset, i))\n          offset = i + 1\n          continue\n        }\n        if (char === '<') {\n          chevronsCount++\n        } else if (char === '/' && i < selector.length - 1 && selector[i + 1] === '>') {\n          chevronsCount--\n        }\n      }\n      if (offset < selector.length) {\n        parts.push(selector.substring(offset))\n      }\n    }\n\n    const result = []\n    const unprocessedParts = []\n    while (parts.length > 0) {\n      const selector = normalizeSelector(parts.shift())\n      let item\n      if (selector.indexOf('closest ') === 0) {\n        item = closest(asElement(elt), normalizeSelector(selector.slice(8)))\n      } else if (selector.indexOf('find ') === 0) {\n        item = find(asParentNode(elt), normalizeSelector(selector.slice(5)))\n      } else if (selector === 'next' || selector === 'nextElementSibling') {\n        item = asElement(elt).nextElementSibling\n      } else if (selector.indexOf('next ') === 0) {\n        item = scanForwardQuery(elt, normalizeSelector(selector.slice(5)), !!global)\n      } else if (selector === 'previous' || selector === 'previousElementSibling') {\n        item = asElement(elt).previousElementSibling\n      } else if (selector.indexOf('previous ') === 0) {\n        item = scanBackwardsQuery(elt, normalizeSelector(selector.slice(9)), !!global)\n      } else if (selector === 'document') {\n        item = document\n      } else if (selector === 'window') {\n        item = window\n      } else if (selector === 'body') {\n        item = document.body\n      } else if (selector === 'root') {\n        item = getRootNode(elt, !!global)\n      } else if (selector === 'host') {\n        item = (/** @type ShadowRoot */(elt.getRootNode())).host\n      } else {\n        unprocessedParts.push(selector)\n      }\n\n      if (item) {\n        result.push(item)\n      }\n    }\n\n    if (unprocessedParts.length > 0) {\n      const standardSelector = unprocessedParts.join(',')\n      const rootNode = asParentNode(getRootNode(elt, !!global))\n      result.push(...toArray(rootNode.querySelectorAll(standardSelector)))\n    }\n\n    return result\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanForwardQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = 0; i < results.length; i++) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node} start\n   * @param {string} match\n   * @param {boolean} global\n   * @returns {Element}\n   */\n  var scanBackwardsQuery = function(start, match, global) {\n    const results = asParentNode(getRootNode(start, global)).querySelectorAll(match)\n    for (let i = results.length - 1; i >= 0; i--) {\n      const elt = results[i]\n      if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {Node|string} eltOrSelector\n   * @param {string=} selector\n   * @returns {Node|Window}\n   */\n  function querySelectorExt(eltOrSelector, selector) {\n    if (typeof eltOrSelector !== 'string') {\n      return querySelectorAllExt(eltOrSelector, selector)[0]\n    } else {\n      return querySelectorAllExt(getDocument().body, eltOrSelector)[0]\n    }\n  }\n\n  /**\n   * @template {EventTarget} T\n   * @param {T|string} eltOrSelector\n   * @param {T} [context]\n   * @returns {Element|T|null}\n   */\n  function resolveTarget(eltOrSelector, context) {\n    if (typeof eltOrSelector === 'string') {\n      return find(asParentNode(context) || document, eltOrSelector)\n    } else {\n      return eltOrSelector\n    }\n  }\n\n  /**\n   * @typedef {keyof HTMLElementEventMap|string} AnyEventName\n   */\n\n  /**\n   * @typedef {Object} EventArgs\n   * @property {EventTarget} target\n   * @property {AnyEventName} event\n   * @property {EventListener} listener\n   * @property {Object|boolean} options\n   */\n\n  /**\n   * @param {EventTarget|AnyEventName} arg1\n   * @param {AnyEventName|EventListener} arg2\n   * @param {EventListener|Object|boolean} [arg3]\n   * @param {Object|boolean} [arg4]\n   * @returns {EventArgs}\n   */\n  function processEventArgs(arg1, arg2, arg3, arg4) {\n    if (isFunction(arg2)) {\n      return {\n        target: getDocument().body,\n        event: asString(arg1),\n        listener: arg2,\n        options: arg3\n      }\n    } else {\n      return {\n        target: resolveTarget(arg1),\n        event: asString(arg2),\n        listener: arg3,\n        options: arg4\n      }\n    }\n  }\n\n  /**\n   * Adds an event listener to an element\n   *\n   * @see https://htmx.org/api/#on\n   *\n   * @param {EventTarget|string} arg1 the element to add the listener to | the event name to add the listener for\n   * @param {string|EventListener} arg2 the event name to add the listener for | the listener to add\n   * @param {EventListener|Object|boolean} [arg3] the listener to add | options to add\n   * @param {Object|boolean} [arg4] options to add\n   * @returns {EventListener}\n   */\n  function addEventListenerImpl(arg1, arg2, arg3, arg4) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3, arg4)\n      eventArgs.target.addEventListener(eventArgs.event, eventArgs.listener, eventArgs.options)\n    })\n    const b = isFunction(arg2)\n    return b ? arg2 : arg3\n  }\n\n  /**\n   * Removes an event listener from an element\n   *\n   * @see https://htmx.org/api/#off\n   *\n   * @param {EventTarget|string} arg1 the element to remove the listener from | the event name to remove the listener from\n   * @param {string|EventListener} arg2 the event name to remove the listener from | the listener to remove\n   * @param {EventListener} [arg3] the listener to remove\n   * @returns {EventListener}\n   */\n  function removeEventListenerImpl(arg1, arg2, arg3) {\n    ready(function() {\n      const eventArgs = processEventArgs(arg1, arg2, arg3)\n      eventArgs.target.removeEventListener(eventArgs.event, eventArgs.listener)\n    })\n    return isFunction(arg2) ? arg2 : arg3\n  }\n\n  //= ===================================================================\n  // Node processing\n  //= ===================================================================\n\n  const DUMMY_ELT = getDocument().createElement('output') // dummy element for bad selectors\n  /**\n   * @param {Element} elt\n   * @param {string} attrName\n   * @returns {(Node|Window)[]}\n   */\n  function findAttributeTargets(elt, attrName) {\n    const attrTarget = getClosestAttributeValue(elt, attrName)\n    if (attrTarget) {\n      if (attrTarget === 'this') {\n        return [findThisElement(elt, attrName)]\n      } else {\n        const result = querySelectorAllExt(elt, attrTarget)\n        // find `inherit` whole word in value, make sure it's surrounded by commas or is at the start/end of string\n        const shouldInherit = /(^|,)(\\s*)inherit(\\s*)($|,)/.test(attrTarget)\n        if (shouldInherit) {\n          const eltToInheritFrom = asElement(getClosestMatch(elt, function(parent) {\n            return parent !== elt && hasAttribute(asElement(parent), attrName)\n          }))\n          if (eltToInheritFrom) {\n            result.push(...findAttributeTargets(eltToInheritFrom, attrName))\n          }\n        }\n        if (result.length === 0) {\n          logError('The selector \"' + attrTarget + '\" on ' + attrName + ' returned no matches!')\n          return [DUMMY_ELT]\n        } else {\n          return result\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} attribute\n   * @returns {Element|null}\n   */\n  function findThisElement(elt, attribute) {\n    return asElement(getClosestMatch(elt, function(elt) {\n      return getAttributeValue(asElement(elt), attribute) != null\n    }))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Node|Window|null}\n   */\n  function getTarget(elt) {\n    const targetStr = getClosestAttributeValue(elt, 'hx-target')\n    if (targetStr) {\n      if (targetStr === 'this') {\n        return findThisElement(elt, 'hx-target')\n      } else {\n        return querySelectorExt(elt, targetStr)\n      }\n    } else {\n      const data = getInternalData(elt)\n      if (data.boosted) {\n        return getDocument().body\n      } else {\n        return elt\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @returns {boolean}\n   */\n  function shouldSettleAttribute(name) {\n    return htmx.config.attributesToSettle.includes(name)\n  }\n\n  /**\n   * @param {Element} mergeTo\n   * @param {Element} mergeFrom\n   */\n  function cloneAttributes(mergeTo, mergeFrom) {\n    forEach(Array.from(mergeTo.attributes), function(attr) {\n      if (!mergeFrom.hasAttribute(attr.name) && shouldSettleAttribute(attr.name)) {\n        mergeTo.removeAttribute(attr.name)\n      }\n    })\n    forEach(mergeFrom.attributes, function(attr) {\n      if (shouldSettleAttribute(attr.name)) {\n        mergeTo.setAttribute(attr.name, attr.value)\n      }\n    })\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} target\n   * @returns {boolean}\n   */\n  function isInlineSwap(swapStyle, target) {\n    const extensions = getExtensions(target)\n    for (let i = 0; i < extensions.length; i++) {\n      const extension = extensions[i]\n      try {\n        if (extension.isInlineSwap(swapStyle)) {\n          return true\n        }\n      } catch (e) {\n        logError(e)\n      }\n    }\n    return swapStyle === 'outerHTML'\n  }\n\n  /**\n   * @param {string} oobValue\n   * @param {Element} oobElement\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   * @returns\n   */\n  function oobSwap(oobValue, oobElement, settleInfo, rootNode) {\n    rootNode = rootNode || getDocument()\n    let selector = '#' + CSS.escape(getRawAttribute(oobElement, 'id'))\n    /** @type HtmxSwapStyle */\n    let swapStyle = 'outerHTML'\n    if (oobValue === 'true') {\n      // do nothing\n    } else if (oobValue.indexOf(':') > 0) {\n      swapStyle = oobValue.substring(0, oobValue.indexOf(':'))\n      selector = oobValue.substring(oobValue.indexOf(':') + 1)\n    } else {\n      swapStyle = oobValue\n    }\n    oobElement.removeAttribute('hx-swap-oob')\n    oobElement.removeAttribute('data-hx-swap-oob')\n\n    const targets = querySelectorAllExt(rootNode, selector, false)\n    if (targets.length) {\n      forEach(\n        targets,\n        function(target) {\n          let fragment\n          const oobElementClone = oobElement.cloneNode(true)\n          fragment = getDocument().createDocumentFragment()\n          fragment.appendChild(oobElementClone)\n          if (!isInlineSwap(swapStyle, target)) {\n            fragment = asParentNode(oobElementClone) // if this is not an inline swap, we use the content of the node, not the node itself\n          }\n\n          const beforeSwapDetails = { shouldSwap: true, target, fragment }\n          if (!triggerEvent(target, 'htmx:oobBeforeSwap', beforeSwapDetails)) return\n\n          target = beforeSwapDetails.target // allow re-targeting\n          if (beforeSwapDetails.shouldSwap) {\n            handlePreservedElements(fragment)\n            swapWithStyle(swapStyle, target, target, fragment, settleInfo)\n            restorePreservedElements()\n          }\n          forEach(settleInfo.elts, function(elt) {\n            triggerEvent(elt, 'htmx:oobAfterSwap', beforeSwapDetails)\n          })\n        }\n      )\n      oobElement.parentNode.removeChild(oobElement)\n    } else {\n      oobElement.parentNode.removeChild(oobElement)\n      triggerErrorEvent(getDocument().body, 'htmx:oobErrorNoTarget', { content: oobElement, target: selector })\n    }\n    return oobValue\n  }\n\n  function restorePreservedElements() {\n    const pantry = find('#--htmx-preserve-pantry--')\n    if (pantry) {\n      for (const preservedElt of [...pantry.children]) {\n        const existingElement = find('#' + preservedElt.id)\n        // @ts-ignore - use proposed moveBefore feature\n        existingElement.parentNode.moveBefore(preservedElt, existingElement)\n        existingElement.remove()\n      }\n      pantry.remove()\n    }\n  }\n\n  /**\n   * @param {DocumentFragment|ParentNode} fragment\n   */\n  function handlePreservedElements(fragment) {\n    forEach(findAll(fragment, '[hx-preserve], [data-hx-preserve]'), function(preservedElt) {\n      const id = getAttributeValue(preservedElt, 'id')\n      const existingElement = getDocument().getElementById(id)\n      if (existingElement != null) {\n        if (preservedElt.moveBefore) { // if the moveBefore API exists, use it\n          // get or create a storage spot for stuff\n          let pantry = find('#--htmx-preserve-pantry--')\n          if (pantry == null) {\n            getDocument().body.insertAdjacentHTML('afterend', \"<div id='--htmx-preserve-pantry--'></div>\")\n            pantry = find('#--htmx-preserve-pantry--')\n          }\n          // @ts-ignore - use proposed moveBefore feature\n          pantry.moveBefore(existingElement, null)\n        } else {\n          preservedElt.parentNode.replaceChild(existingElement, preservedElt)\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function handleAttributes(parentNode, fragment, settleInfo) {\n    forEach(fragment.querySelectorAll('[id]'), function(newNode) {\n      const id = getRawAttribute(newNode, 'id')\n      if (id && id.length > 0) {\n        const parentElt = asParentNode(parentNode)\n        const oldNode = parentElt && parentElt.querySelector(CSS.escape(newNode.tagName) + '#' + CSS.escape(id))\n        if (oldNode && oldNode !== parentElt) {\n          const newAttributes = newNode.cloneNode()\n          cloneAttributes(newNode, oldNode)\n          settleInfo.tasks.push(function() {\n            cloneAttributes(newNode, newAttributes)\n          })\n        }\n      }\n    })\n  }\n\n  /**\n   * @param {Node} child\n   * @returns {HtmxSettleTask}\n   */\n  function makeAjaxLoadTask(child) {\n    return function() {\n      removeClassFromElement(child, htmx.config.addedClass)\n      processNode(asElement(child))\n      processFocus(asParentNode(child))\n      triggerEvent(child, 'htmx:load')\n    }\n  }\n\n  /**\n   * @param {ParentNode} child\n   */\n  function processFocus(child) {\n    const autofocus = '[autofocus]'\n    const autoFocusedElt = asHtmlElement(matches(child, autofocus) ? child : child.querySelector(autofocus))\n    if (autoFocusedElt != null) {\n      autoFocusedElt.focus()\n    }\n  }\n\n  /**\n   * @param {Node} parentNode\n   * @param {Node} insertBefore\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function insertNodesBefore(parentNode, insertBefore, fragment, settleInfo) {\n    handleAttributes(parentNode, fragment, settleInfo)\n    while (fragment.childNodes.length > 0) {\n      const child = fragment.firstChild\n      addClassToElement(asElement(child), htmx.config.addedClass)\n      parentNode.insertBefore(child, insertBefore)\n      if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n        settleInfo.tasks.push(makeAjaxLoadTask(child))\n      }\n    }\n  }\n\n  /**\n   * based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0,\n   * derived from Java's string hashcode implementation\n   * @param {string} string\n   * @param {number} hash\n   * @returns {number}\n   */\n  function stringHash(string, hash) {\n    let char = 0\n    while (char < string.length) {\n      hash = (hash << 5) - hash + string.charCodeAt(char++) | 0 // bitwise or ensures we have a 32-bit int\n    }\n    return hash\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {number}\n   */\n  function attributeHash(elt) {\n    let hash = 0\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const attribute = elt.attributes[i]\n      if (attribute.value) { // only include attributes w/ actual values (empty is same as non-existent)\n        hash = stringHash(attribute.name, hash)\n        hash = stringHash(attribute.value, hash)\n      }\n    }\n    return hash\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function deInitOnHandlers(elt) {\n    const internalData = getInternalData(elt)\n    if (internalData.onHandlers) {\n      for (let i = 0; i < internalData.onHandlers.length; i++) {\n        const handlerInfo = internalData.onHandlers[i]\n        removeEventListenerImpl(elt, handlerInfo.event, handlerInfo.listener)\n      }\n      delete internalData.onHandlers\n    }\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function deInitNode(element) {\n    const internalData = getInternalData(element)\n    if (internalData.timeout) {\n      clearTimeout(internalData.timeout)\n    }\n    if (internalData.listenerInfos) {\n      forEach(internalData.listenerInfos, function(info) {\n        if (info.on) {\n          removeEventListenerImpl(info.on, info.trigger, info.listener)\n        }\n      })\n    }\n    deInitOnHandlers(element)\n    forEach(Object.keys(internalData), function(key) { if (key !== 'firstInitCompleted') delete internalData[key] })\n  }\n\n  /**\n   * @param {Node} element\n   */\n  function cleanUpElement(element) {\n    triggerEvent(element, 'htmx:beforeCleanupElement')\n    deInitNode(element)\n    // @ts-ignore\n    forEach(element.children, function(child) { cleanUpElement(child) })\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapOuterHTML(target, fragment, settleInfo) {\n    if (target.tagName === 'BODY') { // special case the body to innerHTML because DocumentFragments can't contain a body elt unfortunately\n      return swapInnerHTML(target, fragment, settleInfo)\n    }\n    /** @type {Node} */\n    let newElt\n    const eltBeforeNewContent = target.previousSibling\n    const parentNode = parentElt(target)\n    if (!parentNode) { // when parent node disappears, we can't do anything\n      return\n    }\n    insertNodesBefore(parentNode, target, fragment, settleInfo)\n    if (eltBeforeNewContent == null) {\n      newElt = parentNode.firstChild\n    } else {\n      newElt = eltBeforeNewContent.nextSibling\n    }\n    settleInfo.elts = settleInfo.elts.filter(function(e) { return e !== target })\n    // scan through all newly added content and add all elements to the settle info so we trigger\n    // events properly on them\n    while (newElt && newElt !== target) {\n      if (newElt instanceof Element) {\n        settleInfo.elts.push(newElt)\n      }\n      newElt = newElt.nextSibling\n    }\n    cleanUpElement(target)\n    target.remove()\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(target, target.firstChild, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeBegin(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapBeforeEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(target, null, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapAfterEnd(target, fragment, settleInfo) {\n    return insertNodesBefore(parentElt(target), target.nextSibling, fragment, settleInfo)\n  }\n\n  /**\n   * @param {Element} target\n   */\n  function swapDelete(target) {\n    cleanUpElement(target)\n    const parent = parentElt(target)\n    if (parent) {\n      return parent.removeChild(target)\n    }\n  }\n\n  /**\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapInnerHTML(target, fragment, settleInfo) {\n    const firstChild = target.firstChild\n    insertNodesBefore(target, firstChild, fragment, settleInfo)\n    if (firstChild) {\n      while (firstChild.nextSibling) {\n        cleanUpElement(firstChild.nextSibling)\n        target.removeChild(firstChild.nextSibling)\n      }\n      cleanUpElement(firstChild)\n      target.removeChild(firstChild)\n    }\n  }\n\n  /**\n   * @param {HtmxSwapStyle} swapStyle\n   * @param {Element} elt\n   * @param {Element} target\n   * @param {ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   */\n  function swapWithStyle(swapStyle, elt, target, fragment, settleInfo) {\n    switch (swapStyle) {\n      case 'none':\n        return\n      case 'outerHTML':\n        swapOuterHTML(target, fragment, settleInfo)\n        return\n      case 'afterbegin':\n        swapAfterBegin(target, fragment, settleInfo)\n        return\n      case 'beforebegin':\n        swapBeforeBegin(target, fragment, settleInfo)\n        return\n      case 'beforeend':\n        swapBeforeEnd(target, fragment, settleInfo)\n        return\n      case 'afterend':\n        swapAfterEnd(target, fragment, settleInfo)\n        return\n      case 'delete':\n        swapDelete(target)\n        return\n      default:\n        var extensions = getExtensions(elt)\n        for (let i = 0; i < extensions.length; i++) {\n          const ext = extensions[i]\n          try {\n            const newElements = ext.handleSwap(swapStyle, target, fragment, settleInfo)\n            if (newElements) {\n              if (Array.isArray(newElements)) {\n                // if handleSwap returns an array (like) of elements, we handle them\n                for (let j = 0; j < newElements.length; j++) {\n                  const child = newElements[j]\n                  if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) {\n                    settleInfo.tasks.push(makeAjaxLoadTask(child))\n                  }\n                }\n              }\n              return\n            }\n          } catch (e) {\n            logError(e)\n          }\n        }\n        if (swapStyle === 'innerHTML') {\n          swapInnerHTML(target, fragment, settleInfo)\n        } else {\n          swapWithStyle(htmx.config.defaultSwapStyle, elt, target, fragment, settleInfo)\n        }\n    }\n  }\n\n  /**\n   * @param {DocumentFragment|ParentNode} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Element} sourceElement\n   * @returns {boolean}\n   */\n  function findAndSwapPartials(fragment, settleInfo, sourceElement) {\n    var hxTemplates = findAll(fragment, 'template[hx]')\n    forEach(hxTemplates, function(template) {\n      var type = getRawAttribute(template, 'type')\n      if (type === 'partial') {\n        var targetSelector = getAttributeValue(template, 'hx-target') ||\n          (template.id ? '#' + CSS.escape(template.id) : null)\n        if (targetSelector) {\n          var swapOverride = getAttributeValue(template, 'hx-swap')\n          var swapSpec = getSwapSpecification(template, swapOverride)\n          var targets = querySelectorAllExt(sourceElement || getDocument().body, targetSelector, false)\n          if (targets.length === 0) {\n            triggerErrorEvent(getDocument().body, 'htmx:partialErrorNoTarget', { template, targetSelector, sourceElement })\n          }\n          forEach(targets, function(target) {\n            target = asElement(target)\n            if (target) {\n              var fragment = template.content.cloneNode(true)\n              normalizeScriptTags(fragment)\n              var beforeSwapDetails = { shouldSwap: true, target, fragment }\n              if (!triggerEvent(target, 'htmx:partialBeforeSwap', beforeSwapDetails)) return\n              target = beforeSwapDetails.target\n              if (beforeSwapDetails.shouldSwap) {\n                swap(target, beforeSwapDetails.fragment, swapSpec, {\n                  contextElement: target,\n                  afterSwapCallback: function() {\n                    forEach(settleInfo.elts, function(elt) {\n                      triggerEvent(elt, 'htmx:partialAfterSwap', beforeSwapDetails)\n                    })\n                  }\n                })\n              }\n            }\n          })\n        }\n      } else {\n        triggerEvent(getDocument().body, 'htmx:processTemplate', { type, template, settleInfo, sourceElement })\n      }\n      template.parentNode.removeChild(template)\n    })\n    return hxTemplates.length > 0\n  }\n\n  /**\n   * @param {DocumentFragment} fragment\n   * @param {HtmxSettleInfo} settleInfo\n   * @param {Node|Document} [rootNode]\n   */\n  function findAndSwapOobElements(fragment, settleInfo, rootNode) {\n    var oobElts = findAll(fragment, '[hx-swap-oob], [data-hx-swap-oob]')\n    forEach(oobElts, function(oobElement) {\n      if (htmx.config.allowNestedOobSwaps || oobElement.parentElement === null) {\n        const oobValue = getAttributeValue(oobElement, 'hx-swap-oob')\n        if (oobValue != null) {\n          oobSwap(oobValue, oobElement, settleInfo, rootNode)\n        }\n      } else {\n        oobElement.removeAttribute('hx-swap-oob')\n        oobElement.removeAttribute('data-hx-swap-oob')\n      }\n    })\n    return oobElts.length > 0\n  }\n\n  /**\n   * Implements complete swapping pipeline, including: delay, view transitions, focus and selection preservation,\n   * title updates, scroll, OOB swapping, normal swapping and settling\n   * @param {string|Element} target\n   * @param {string} content\n   * @param {HtmxSwapSpecification} swapSpec\n   * @param {SwapOptions} [swapOptions]\n   */\n  function swap(target, content, swapSpec, swapOptions) {\n    if (!swapOptions) {\n      swapOptions = {}\n    }\n    // optional transition API promise callbacks\n    let settleResolve = null\n    let settleReject = null\n\n    let doSwap = function() {\n      maybeCall(swapOptions.beforeSwapCallback)\n\n      target = resolveTarget(target)\n      // A detached contextElement's own getRootNode() is its orphaned subtree, not\n      // the document, so OOB targets that are still live in the document would be\n      // unreachable through it - fall back to the document in that case.\n      const rootNode = (swapOptions.contextElement && swapOptions.contextElement.isConnected)\n        ? getRootNode(swapOptions.contextElement, false)\n        : getDocument()\n\n      // preserve focus and selection\n      const activeElt = document.activeElement\n      let selectionInfo = {}\n      selectionInfo = {\n        elt: activeElt,\n        // @ts-ignore\n        start: activeElt ? activeElt.selectionStart : null,\n        // @ts-ignore\n        end: activeElt ? activeElt.selectionEnd : null\n      }\n      const settleInfo = makeSettleInfo(target)\n\n      // For text content swaps, don't parse the response as HTML, just insert it\n      if (swapSpec.swapStyle === 'textContent') {\n        target.textContent = content\n      // Otherwise, make the fragment and process it\n      } else {\n        let fragment = typeof content === 'string' ? makeFragment(content) : content\n\n        settleInfo.title = swapOptions.title || fragment.title\n        if (swapOptions.historyRequest) {\n          // @ts-ignore fragment can be a parentNode Element\n          fragment = fragment.querySelector('[hx-history-elt],[data-hx-history-elt]') || fragment\n        }\n\n        // select-oob swaps\n        if (swapOptions.selectOOB) {\n          const oobSelectValues = swapOptions.selectOOB.split(',')\n          for (let i = 0; i < oobSelectValues.length; i++) {\n            const oobSelectValue = oobSelectValues[i].split(':', 2)\n            let id = oobSelectValue[0].trim()\n            if (id.indexOf('#') === 0) {\n              id = id.substring(1)\n            }\n            const oobValue = oobSelectValue[1] || 'true'\n            const oobElement = fragment.querySelector('#' + id)\n            if (oobElement) {\n              oobSwap(oobValue, oobElement, settleInfo, rootNode)\n            }\n          }\n        }\n        // oob swaps\n        findAndSwapOobElements(fragment, settleInfo, rootNode)\n        forEach(findAll(fragment, 'template'), /** @param {HTMLTemplateElement} template */function(template) {\n          if (template.content && findAndSwapOobElements(template.content, settleInfo, rootNode)) {\n            // Avoid polluting the DOM with empty templates that were only used to encapsulate oob swap\n            template.remove()\n          }\n        })\n        // partial swaps \u2014 after oob, before main swap\n        var hasPartials = findAndSwapPartials(fragment, settleInfo, swapOptions.contextElement || asElement(target))\n\n        // normal swap\n        if (swapOptions.select) {\n          const newFragment = getDocument().createDocumentFragment()\n          forEach(fragment.querySelectorAll(swapOptions.select), function(node) {\n            newFragment.appendChild(node)\n          })\n          fragment = newFragment\n        }\n        handlePreservedElements(fragment)\n        // if the response contained only <hx-partial> tags and nothing else, skip the main swap\n        if (hasPartials && !fragment.childElementCount && !fragment.textContent.trim()) {\n          settleInfo.elts = [asElement(target)]\n        } else {\n          swapWithStyle(swapSpec.swapStyle, swapOptions.contextElement, target, fragment, settleInfo)\n        }\n        restorePreservedElements()\n      }\n\n      // apply saved focus and selection information to swapped content\n      if (selectionInfo.elt &&\n        !bodyContains(selectionInfo.elt) &&\n        getRawAttribute(selectionInfo.elt, 'id')) {\n        const newActiveElt = document.getElementById(getRawAttribute(selectionInfo.elt, 'id'))\n        const focusOptions = { preventScroll: swapSpec.focusScroll !== undefined ? !swapSpec.focusScroll : !htmx.config.defaultFocusScroll }\n        if (newActiveElt) {\n          // @ts-ignore\n          if (selectionInfo.start && newActiveElt.setSelectionRange) {\n            try {\n              // @ts-ignore\n              newActiveElt.setSelectionRange(selectionInfo.start, selectionInfo.end)\n            } catch (e) {\n              // the setSelectionRange method is present on fields that don't support it, so just let this fail\n            }\n          }\n          newActiveElt.focus(focusOptions)\n        }\n      }\n\n      removeClassFromElement(target, htmx.config.swappingClass)\n      forEach(settleInfo.elts, function(elt) {\n        if (elt.classList) {\n          addClassToElement(elt, htmx.config.settlingClass)\n        }\n        triggerEvent(elt, 'htmx:afterSwap', swapOptions.eventInfo)\n      })\n      maybeCall(swapOptions.afterSwapCallback)\n\n      // merge in new title after swap but before settle\n      if (!swapSpec.ignoreTitle) {\n        handleTitle(settleInfo.title)\n      }\n\n      // settle\n      const doSettle = function() {\n        forEach(settleInfo.tasks, function(task) {\n          task.call()\n        })\n        forEach(settleInfo.elts, function(elt) {\n          if (elt.classList) {\n            removeClassFromElement(elt, htmx.config.settlingClass)\n          }\n          triggerEvent(elt, 'htmx:afterSettle', swapOptions.eventInfo)\n        })\n\n        if (swapOptions.anchor) {\n          const anchorTarget = asElement(resolveTarget('#' + swapOptions.anchor))\n          if (anchorTarget) {\n            anchorTarget.scrollIntoView({ block: 'start', behavior: 'auto' })\n          }\n        }\n\n        updateScrollState(settleInfo.elts, swapSpec)\n        maybeCall(swapOptions.afterSettleCallback)\n        maybeCall(settleResolve)\n      }\n\n      if (swapSpec.settleDelay > 0) {\n        getWindow().setTimeout(doSettle, swapSpec.settleDelay)\n      } else {\n        doSettle()\n      }\n    }\n    let shouldTransition = htmx.config.globalViewTransitions\n    if (swapSpec.hasOwnProperty('transition')) {\n      shouldTransition = swapSpec.transition\n    }\n\n    const elt = swapOptions.contextElement || getDocument()\n\n    if (shouldTransition &&\n            triggerEvent(elt, 'htmx:beforeTransition', swapOptions.eventInfo) &&\n            typeof Promise !== 'undefined' &&\n            // @ts-ignore experimental feature atm\n            document.startViewTransition) {\n      const settlePromise = new Promise(function(_resolve, _reject) {\n        settleResolve = _resolve\n        settleReject = _reject\n      })\n      // wrap the original doSwap() in a call to startViewTransition()\n      const innerDoSwap = doSwap\n      doSwap = function() {\n        // @ts-ignore experimental feature atm\n        document.startViewTransition(function() {\n          innerDoSwap()\n          return settlePromise\n        })\n      }\n    }\n\n    try {\n      if (swapSpec?.swapDelay && swapSpec.swapDelay > 0) {\n        getWindow().setTimeout(doSwap, swapSpec.swapDelay)\n      } else {\n        doSwap()\n      }\n    } catch (e) {\n      triggerErrorEvent(elt, 'htmx:swapError', swapOptions.eventInfo)\n      maybeCall(settleReject)\n      throw e\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {EventTarget} elt\n   */\n  function handleTriggerHeader(xhr, header, elt) {\n    const triggerBody = xhr.getResponseHeader(header)\n    if (triggerBody.indexOf('{') === 0) {\n      const triggers = parseJSON(triggerBody) || {}\n      for (const eventName of Object.keys(triggers)) {\n        let detail = triggers[eventName]\n        if (isRawObject(detail)) {\n          // @ts-ignore\n          elt = detail.target !== undefined ? detail.target : elt\n        } else {\n          detail = { value: detail }\n        }\n        triggerEvent(elt, eventName, detail)\n      }\n    } else {\n      const eventNames = triggerBody.split(',')\n      for (let i = 0; i < eventNames.length; i++) {\n        triggerEvent(elt, eventNames[i].trim(), [])\n      }\n    }\n  }\n\n  const WHITESPACE = /\\s/\n  const WHITESPACE_OR_COMMA = /[\\s,]/\n  const SYMBOL_START = /[_$a-zA-Z]/\n  const SYMBOL_CONT = /[_$a-zA-Z0-9]/\n  const STRINGISH_START = ['\"', \"'\", '/']\n  const NOT_WHITESPACE = /[^\\s]/\n  const COMBINED_SELECTOR_START = /[{(]/\n  const COMBINED_SELECTOR_END = /[})]/\n\n  /**\n   * @param {string} str\n   * @returns {string[]}\n   */\n  function tokenizeString(str) {\n    /** @type string[] */\n    const tokens = []\n    let position = 0\n    while (position < str.length) {\n      if (SYMBOL_START.exec(str.charAt(position))) {\n        var startPosition = position\n        while (SYMBOL_CONT.exec(str.charAt(position + 1))) {\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else if (STRINGISH_START.indexOf(str.charAt(position)) !== -1) {\n        const startChar = str.charAt(position)\n        var startPosition = position\n        position++\n        while (position < str.length && str.charAt(position) !== startChar) {\n          if (str.charAt(position) === '\\\\') {\n            position++\n          }\n          position++\n        }\n        tokens.push(str.substring(startPosition, position + 1))\n      } else {\n        const symbol = str.charAt(position)\n        tokens.push(symbol)\n      }\n      position++\n    }\n    return tokens\n  }\n\n  /**\n   * @param {string} token\n   * @param {string|null} last\n   * @param {string} paramName\n   * @returns {boolean}\n   */\n  function isPossibleRelativeReference(token, last, paramName) {\n    return SYMBOL_START.exec(token.charAt(0)) &&\n      token !== 'true' &&\n      token !== 'false' &&\n      token !== 'this' &&\n      token !== paramName &&\n      last !== '.'\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string[]} tokens\n   * @param {string} paramName\n   * @returns {ConditionalFunction|null}\n   */\n  function maybeGenerateConditional(elt, tokens, paramName) {\n    if (tokens[0] === '[') {\n      tokens.shift()\n      let bracketCount = 1\n      let conditionalSource = ' return (function(' + paramName + '){ return ('\n      let last = null\n      while (tokens.length > 0) {\n        const token = tokens[0]\n        // @ts-ignore For some reason tsc doesn't understand the shift call, and thinks we're comparing the same value here, i.e. '[' vs ']'\n        if (token === ']') {\n          bracketCount--\n          if (bracketCount === 0) {\n            if (last === null) {\n              conditionalSource = conditionalSource + 'true'\n            }\n            tokens.shift()\n            conditionalSource += ')})'\n            try {\n              const conditionFunction = maybeEval(elt, function() {\n                return Function(conditionalSource)()\n              },\n              function() { return true })\n              conditionFunction.source = conditionalSource\n              return conditionFunction\n            } catch (e) {\n              triggerErrorEvent(getDocument().body, 'htmx:syntax:error', { error: e, source: conditionalSource })\n              return null\n            }\n          }\n        } else if (token === '[') {\n          bracketCount++\n        }\n        if (isPossibleRelativeReference(token, last, paramName)) {\n          conditionalSource += '((' + paramName + '.' + token + ') ? (' + paramName + '.' + token + ') : (window.' + token + '))'\n        } else {\n          conditionalSource = conditionalSource + token\n        }\n        last = tokens.shift()\n      }\n    }\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @param {RegExp} match\n   * @returns {string}\n   */\n  function consumeUntil(tokens, match) {\n    let result = ''\n    while (tokens.length > 0 && !match.test(tokens[0])) {\n      result += tokens.shift()\n    }\n    return result\n  }\n\n  /**\n   * @param {string[]} tokens\n   * @returns {string}\n   */\n  function consumeCSSSelector(tokens) {\n    let result\n    if (tokens.length > 0 && COMBINED_SELECTOR_START.test(tokens[0])) {\n      tokens.shift()\n      result = consumeUntil(tokens, COMBINED_SELECTOR_END).trim()\n      tokens.shift()\n    } else {\n      result = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n    }\n    return result\n  }\n\n  const INPUT_SELECTOR = 'input, textarea, select'\n\n  /**\n   * @param {Element} elt\n   * @param {string} explicitTrigger\n   * @param {Object} cache for trigger specs\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function parseAndCacheTrigger(elt, explicitTrigger, cache) {\n    /** @type HtmxTriggerSpecification[] */\n    const triggerSpecs = []\n    const tokens = tokenizeString(explicitTrigger)\n    do {\n      consumeUntil(tokens, NOT_WHITESPACE)\n      const initialLength = tokens.length\n      const trigger = consumeUntil(tokens, /[,\\[\\s]/)\n      if (trigger !== '') {\n        if (trigger === 'every') {\n          /** @type HtmxTriggerSpecification */\n          const every = { trigger: 'every' }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          every.pollInterval = parseInterval(consumeUntil(tokens, /[,\\[\\s]/))\n          consumeUntil(tokens, NOT_WHITESPACE)\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            every.eventFilter = eventFilter\n          }\n          triggerSpecs.push(every)\n        } else {\n          /** @type HtmxTriggerSpecification */\n          const triggerSpec = { trigger }\n          var eventFilter = maybeGenerateConditional(elt, tokens, 'event')\n          if (eventFilter) {\n            triggerSpec.eventFilter = eventFilter\n          }\n          consumeUntil(tokens, NOT_WHITESPACE)\n          while (tokens.length > 0 && tokens[0] !== ',') {\n            const token = tokens.shift()\n            if (token === 'changed') {\n              triggerSpec.changed = true\n            } else if (token === 'once') {\n              triggerSpec.once = true\n            } else if (token === 'consume') {\n              triggerSpec.consume = true\n            } else if (token === 'delay' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.delay = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'from' && tokens[0] === ':') {\n              tokens.shift()\n              if (COMBINED_SELECTOR_START.test(tokens[0])) {\n                var from_arg = consumeCSSSelector(tokens)\n              } else {\n                var from_arg = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n                if (from_arg === 'closest' || from_arg === 'find' || from_arg === 'next' || from_arg === 'previous') {\n                  tokens.shift()\n                  const selector = consumeCSSSelector(tokens)\n                  // `next` and `previous` allow a selector-less syntax\n                  if (selector.length > 0) {\n                    from_arg += ' ' + selector\n                  }\n                }\n              }\n              triggerSpec.from = from_arg\n            } else if (token === 'target' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.target = consumeCSSSelector(tokens)\n            } else if (token === 'throttle' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.throttle = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA))\n            } else if (token === 'queue' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec.queue = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else if (token === 'root' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeCSSSelector(tokens)\n            } else if (token === 'threshold' && tokens[0] === ':') {\n              tokens.shift()\n              triggerSpec[token] = consumeUntil(tokens, WHITESPACE_OR_COMMA)\n            } else {\n              triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n            }\n            consumeUntil(tokens, NOT_WHITESPACE)\n          }\n          triggerSpecs.push(triggerSpec)\n        }\n      }\n      if (tokens.length === initialLength) {\n        triggerErrorEvent(elt, 'htmx:syntax:error', { token: tokens.shift() })\n      }\n      consumeUntil(tokens, NOT_WHITESPACE)\n    } while (tokens[0] === ',' && tokens.shift())\n    if (cache) {\n      cache[explicitTrigger] = triggerSpecs\n    }\n    return triggerSpecs\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HtmxTriggerSpecification[]}\n   */\n  function getTriggerSpecs(elt) {\n    const explicitTrigger = getAttributeValue(elt, 'hx-trigger')\n    let triggerSpecs = []\n    if (explicitTrigger) {\n      const cache = htmx.config.triggerSpecsCache\n      triggerSpecs = (cache && cache[explicitTrigger]) || parseAndCacheTrigger(elt, explicitTrigger, cache)\n    }\n\n    if (triggerSpecs.length > 0) {\n      return triggerSpecs\n    } else if (matches(elt, 'form')) {\n      return [{ trigger: 'submit' }]\n    } else if (matches(elt, 'input[type=\"button\"], input[type=\"submit\"]')) {\n      return [{ trigger: 'click' }]\n    } else if (matches(elt, INPUT_SELECTOR)) {\n      return [{ trigger: 'change' }]\n    } else {\n      return [{ trigger: 'click' }]\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function cancelPolling(elt) {\n    getInternalData(elt).cancelled = true\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxTriggerSpecification} spec\n   */\n  function processPolling(elt, handler, spec) {\n    const nodeData = getInternalData(elt)\n    nodeData.timeout = getWindow().setTimeout(function() {\n      if (bodyContains(elt) && nodeData.cancelled !== true) {\n        if (!maybeFilterEvent(spec, elt, makeEvent('hx:poll:trigger', {\n          triggerSpec: spec,\n          target: elt\n        }))) {\n          handler(elt)\n        }\n        processPolling(elt, handler, spec)\n      }\n    }, spec.pollInterval)\n  }\n\n  /**\n   * @param {HTMLAnchorElement} elt\n   * @returns {boolean}\n   */\n  function isLocalLink(elt) {\n    return location.hostname === elt.hostname &&\n      getRawAttribute(elt, 'href') &&\n      getRawAttribute(elt, 'href').indexOf('#') !== 0\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function eltIsDisabled(elt) {\n    return closest(elt, htmx.config.disableSelector)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   */\n  function boostElement(elt, nodeData, triggerSpecs) {\n    if ((elt instanceof HTMLAnchorElement && isLocalLink(elt) && (elt.target === '' || elt.target === '_self')) || (elt.tagName === 'FORM' && String(getRawAttribute(elt, 'method')).toLowerCase() !== 'dialog')) {\n      nodeData.boosted = true\n      let verb, path\n      if (elt.tagName === 'A') {\n        verb = (/** @type HttpVerb */('get'))\n        path = getRawAttribute(elt, 'href')\n      } else {\n        const rawAttribute = getRawAttribute(elt, 'method')\n        verb = (/** @type HttpVerb */(rawAttribute ? rawAttribute.toLowerCase() : 'get'))\n        path = getRawAttribute(elt, 'action')\n        if (path == null || path === '') {\n          // if there is no action attribute on the form set path to current href before the\n          // following logic to properly clear parameters on a GET (not on a POST!)\n          path = location.href\n        }\n        if (verb === 'get' && path.includes('?')) {\n          path = path.replace(/\\?[^#]+/, '')\n        }\n      }\n      triggerSpecs.forEach(function(triggerSpec) {\n        addEventListener(elt, function(node, evt) {\n          const elt = asElement(node)\n          if (eltIsDisabled(elt)) {\n            cleanUpElement(elt)\n            return\n          }\n          issueAjaxRequest(verb, path, elt, evt)\n        }, nodeData, triggerSpec, true)\n      })\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function shouldCancel(evt, elt) {\n    if (evt.type === 'submit' && elt.tagName === 'FORM') {\n      return true\n    } else if (evt.type === 'click') {\n      // find button wrapping the trigger element\n      const btn = /** @type {HTMLButtonElement|HTMLInputElement|null} */ (elt.closest('input[type=\"submit\"], button'))\n      // Do not cancel on buttons that 1) don't have a related form or 2) have a type attribute of 'reset'/'button'.\n      if (btn && btn.form && btn.type === 'submit') {\n        return true\n      }\n\n      // find link wrapping the trigger element\n      const link = elt.closest('a')\n      // Allow links with href=\"#fragment\" (anchors with content after #) to perform normal fragment navigation.\n      // Cancel default action for links with href=\"#\" (bare hash) to prevent scrolling to top and unwanted URL changes.\n      const samePageAnchor = /^#.+/\n      if (link && link.href && !samePageAnchor.test(link.getAttribute('href'))) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @param {Event|MouseEvent|KeyboardEvent|TouchEvent} evt\n   * @returns {boolean}\n   */\n  function ignoreBoostedAnchorCtrlClick(elt, evt) {\n    return getInternalData(elt).boosted && elt instanceof HTMLAnchorElement && evt.type === 'click' &&\n      // @ts-ignore this will resolve to undefined for events that don't define those properties, which is fine\n      (evt.ctrlKey || evt.metaKey)\n  }\n\n  /**\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {Node} elt\n   * @param {Event} evt\n   * @returns {boolean}\n   */\n  function maybeFilterEvent(triggerSpec, elt, evt) {\n    const eventFilter = triggerSpec.eventFilter\n    if (eventFilter) {\n      try {\n        return eventFilter.call(elt, evt) !== true\n      } catch (e) {\n        const source = eventFilter.source\n        triggerErrorEvent(getDocument().body, 'htmx:eventFilter:error', { error: e, source })\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {boolean} [explicitCancel]\n   */\n  function addEventListener(elt, handler, nodeData, triggerSpec, explicitCancel) {\n    const elementData = getInternalData(elt)\n    /** @type {(Node|Window)[]} */\n    let eltsToListenOn\n    if (triggerSpec.from) {\n      eltsToListenOn = querySelectorAllExt(elt, triggerSpec.from)\n    } else {\n      eltsToListenOn = [elt]\n    }\n    // store the initial values of the elements, so we can tell if they change\n    if (triggerSpec.changed) {\n      if (!('lastValue' in elementData)) {\n        elementData.lastValue = new WeakMap()\n      }\n      eltsToListenOn.forEach(function(eltToListenOn) {\n        if (!elementData.lastValue.has(triggerSpec)) {\n          elementData.lastValue.set(triggerSpec, new WeakMap())\n        }\n        // @ts-ignore value will be undefined for non-input elements, which is fine\n        elementData.lastValue.get(triggerSpec).set(eltToListenOn, eltToListenOn.value)\n      })\n    }\n    forEach(eltsToListenOn, function(eltToListenOn) {\n      /** @type EventListener */\n      const eventListener = function(evt) {\n        if (!bodyContains(elt)) {\n          eltToListenOn.removeEventListener(triggerSpec.trigger, eventListener)\n          return\n        }\n        if (ignoreBoostedAnchorCtrlClick(elt, evt)) {\n          return\n        }\n        if (explicitCancel || shouldCancel(evt, eltToListenOn)) {\n          evt.preventDefault()\n        }\n        if (maybeFilterEvent(triggerSpec, elt, evt)) {\n          return\n        }\n        const eventData = getInternalData(evt)\n        eventData.triggerSpec = triggerSpec\n        if (eventData.handledFor == null) {\n          eventData.handledFor = []\n        }\n        if (eventData.handledFor.indexOf(elt) < 0) {\n          eventData.handledFor.push(elt)\n          if (triggerSpec.consume) {\n            evt.stopPropagation()\n          }\n          if (triggerSpec.target && evt.target) {\n            if (!matches(asElement(evt.target), triggerSpec.target)) {\n              return\n            }\n          }\n          if (triggerSpec.once) {\n            if (elementData.triggeredOnce) {\n              return\n            } else {\n              elementData.triggeredOnce = true\n            }\n          }\n          if (triggerSpec.changed) {\n            const node = evt.target\n            // @ts-ignore value will be undefined for non-input elements, which is fine\n            const value = node.value\n            const lastValue = elementData.lastValue.get(triggerSpec)\n            if (lastValue.has(node) && lastValue.get(node) === value) {\n              return\n            }\n            lastValue.set(node, value)\n          }\n          if (elementData.delayed) {\n            clearTimeout(elementData.delayed)\n          }\n          if (elementData.throttle) {\n            return\n          }\n\n          if (triggerSpec.throttle > 0) {\n            if (!elementData.throttle) {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n              elementData.throttle = getWindow().setTimeout(function() {\n                elementData.throttle = null\n              }, triggerSpec.throttle)\n            }\n          } else if (triggerSpec.delay > 0) {\n            elementData.delayed = getWindow().setTimeout(function() {\n              triggerEvent(elt, 'htmx:trigger')\n              handler(elt, evt)\n            }, triggerSpec.delay)\n          } else {\n            triggerEvent(elt, 'htmx:trigger')\n            handler(elt, evt)\n          }\n        }\n      }\n      if (nodeData.listenerInfos == null) {\n        nodeData.listenerInfos = []\n      }\n      nodeData.listenerInfos.push({\n        trigger: triggerSpec.trigger,\n        listener: eventListener,\n        on: eltToListenOn\n      })\n      eltToListenOn.addEventListener(triggerSpec.trigger, eventListener)\n    })\n  }\n\n  let windowIsScrolling = false // used by initScrollHandler\n  let scrollHandler = null\n  function initScrollHandler() {\n    if (!scrollHandler) {\n      scrollHandler = function() {\n        windowIsScrolling = true\n      }\n      window.addEventListener('scroll', scrollHandler)\n      window.addEventListener('resize', scrollHandler)\n      setInterval(function() {\n        if (windowIsScrolling) {\n          windowIsScrolling = false\n          forEach(getDocument().querySelectorAll(\"[hx-trigger*='revealed'],[data-hx-trigger*='revealed']\"), function(elt) {\n            maybeReveal(elt)\n          })\n        }\n      }, 200)\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function maybeReveal(elt) {\n    if (!hasAttribute(elt, 'data-hx-revealed') && isScrolledIntoView(elt)) {\n      elt.setAttribute('data-hx-revealed', 'true')\n      const nodeData = getInternalData(elt)\n      if (nodeData.initHash) {\n        triggerEvent(elt, 'revealed')\n      } else {\n        // if the node isn't initialized, wait for it before triggering the request\n        elt.addEventListener('htmx:afterProcessNode', function() { triggerEvent(elt, 'revealed') }, { once: true })\n      }\n    }\n  }\n\n  //= ===================================================================\n\n  /**\n   * @param {Element} elt\n   * @param {TriggerHandler} handler\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {number} delay\n   */\n  function loadImmediately(elt, handler, nodeData, delay) {\n    const load = function() {\n      if (!nodeData.loaded) {\n        nodeData.loaded = true\n        triggerEvent(elt, 'htmx:trigger')\n        handler(elt)\n      }\n    }\n    if (delay > 0) {\n      getWindow().setTimeout(load, delay)\n    } else {\n      load()\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {HtmxTriggerSpecification[]} triggerSpecs\n   * @returns {boolean}\n   */\n  function processVerbs(elt, nodeData, triggerSpecs) {\n    let explicitAction = false\n    forEach(VERBS, function(verb) {\n      if (hasAttribute(elt, 'hx-' + verb)) {\n        const path = getAttributeValue(elt, 'hx-' + verb)\n        explicitAction = true\n        nodeData.path = path\n        nodeData.verb = verb\n        triggerSpecs.forEach(function(triggerSpec) {\n          addTriggerHandler(elt, triggerSpec, nodeData, function(node, evt) {\n            const elt = asElement(node)\n            if (eltIsDisabled(elt)) {\n              cleanUpElement(elt)\n              return\n            }\n            issueAjaxRequest(verb, path, elt, evt)\n          })\n        })\n      }\n    })\n    return explicitAction\n  }\n\n  /**\n   * @callback TriggerHandler\n   * @param {Element} elt\n   * @param {Event} [evt]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxTriggerSpecification} triggerSpec\n   * @param {HtmxNodeInternalData} nodeData\n   * @param {TriggerHandler} handler\n   */\n  function addTriggerHandler(elt, triggerSpec, nodeData, handler) {\n    if (triggerSpec.trigger === 'revealed') {\n      initScrollHandler()\n      addEventListener(elt, handler, nodeData, triggerSpec)\n      maybeReveal(asElement(elt))\n    } else if (triggerSpec.trigger === 'intersect') {\n      const observerOptions = {}\n      if (triggerSpec.root) {\n        observerOptions.root = querySelectorExt(elt, triggerSpec.root)\n      }\n      if (triggerSpec.threshold) {\n        observerOptions.threshold = parseFloat(triggerSpec.threshold)\n      }\n      const observer = new IntersectionObserver(function(entries) {\n        for (let i = 0; i < entries.length; i++) {\n          const entry = entries[i]\n          if (entry.isIntersecting) {\n            triggerEvent(elt, 'intersect')\n            break\n          }\n        }\n      }, observerOptions)\n      observer.observe(asElement(elt))\n      addEventListener(asElement(elt), handler, nodeData, triggerSpec)\n    } else if (!nodeData.firstInitCompleted && triggerSpec.trigger === 'load') {\n      if (!maybeFilterEvent(triggerSpec, elt, makeEvent('load', { elt }))) {\n        loadImmediately(asElement(elt), handler, nodeData, triggerSpec.delay)\n      }\n    } else if (triggerSpec.pollInterval > 0) {\n      nodeData.polling = true\n      processPolling(asElement(elt), handler, triggerSpec)\n    } else {\n      addEventListener(elt, handler, nodeData, triggerSpec)\n    }\n  }\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function shouldProcessHxOn(node) {\n    const elt = asElement(node)\n    if (!elt) {\n      return false\n    }\n    const attributes = elt.attributes\n    for (let j = 0; j < attributes.length; j++) {\n      const attrName = attributes[j].name\n      if (startsWith(attrName, 'hx-on:') || startsWith(attrName, 'data-hx-on:') ||\n        startsWith(attrName, 'hx-on-') || startsWith(attrName, 'data-hx-on-')) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Node} elt\n   * @returns {Element[]}\n   */\n  const HX_ON_QUERY = new XPathEvaluator()\n    .createExpression('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or' +\n      ' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]')\n\n  function processHXOnRoot(elt, elements) {\n    if (shouldProcessHxOn(elt)) {\n      elements.push(asElement(elt))\n    }\n    const iter = HX_ON_QUERY.evaluate(elt)\n    let node = null\n    while (node = iter.iterateNext()) elements.push(asElement(node))\n  }\n\n  function findHxOnWildcardElements(elt) {\n    /** @type {Element[]} */\n    const elements = []\n    if (elt instanceof DocumentFragment) {\n      for (const child of elt.childNodes) {\n        processHXOnRoot(child, elements)\n      }\n    } else {\n      processHXOnRoot(elt, elements)\n    }\n    return elements\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {NodeListOf<Element>|[]}\n   */\n  function findElementsToProcess(elt) {\n    if (elt.querySelectorAll) {\n      const boostedSelector = ', [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]'\n\n      const extensionSelectors = []\n      for (const e of Object.keys(extensions)) {\n        const extension = extensions[e]\n        if (extension.getSelectors) {\n          var selectors = extension.getSelectors()\n          if (selectors) {\n            extensionSelectors.push(selectors)\n          }\n        }\n      }\n\n      const results = elt.querySelectorAll(VERB_SELECTOR + boostedSelector + \", form, [type='submit'],\" +\n        ' [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]' + extensionSelectors.flat().map(s => ', ' + s).join(''))\n\n      return results\n    } else {\n      return []\n    }\n  }\n\n  /**\n   * Handle submit buttons/inputs that have the form attribute set\n   * see https://developer.mozilla.org/docs/Web/HTML/Element/button\n   * @param {Event} evt\n   */\n  function maybeSetLastButtonClicked(evt) {\n    const elt = getTargetButton(evt.target)\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = elt\n    }\n  }\n\n  /**\n   * @param {Event} evt\n   */\n  function maybeUnsetLastButtonClicked(evt) {\n    const internalData = getRelatedFormData(evt)\n    if (internalData) {\n      internalData.lastButtonClicked = null\n    }\n  }\n\n  /**\n   * @param {EventTarget} target\n   * @returns {HTMLButtonElement|HTMLInputElement|null}\n   */\n  function getTargetButton(target) {\n    return /** @type {HTMLButtonElement|HTMLInputElement|null} */ (closest(asElement(target), \"button, input[type='submit']\"))\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {HTMLFormElement|null}\n   */\n  function getRelatedForm(elt) {\n    // @ts-ignore Get the related form if available, else find the closest parent form\n    return elt.form || closest(elt, 'form')\n  }\n\n  /**\n   * @param {Event} evt\n   * @returns {HtmxNodeInternalData|undefined}\n   */\n  function getRelatedFormData(evt) {\n    const elt = getTargetButton(evt.target)\n    if (!elt) {\n      return\n    }\n    const form = getRelatedForm(elt)\n    if (!form) {\n      return\n    }\n    return getInternalData(form)\n  }\n\n  /**\n   * @param {EventTarget} elt\n   */\n  function initButtonTracking(elt) {\n    // need to handle both click and focus in:\n    //   focusin - in case someone tabs in to a button and hits the space bar\n    //   click - on OSX buttons do not focus on click see https://bugs.webkit.org/show_bug.cgi?id=13724\n    elt.addEventListener('click', maybeSetLastButtonClicked)\n    elt.addEventListener('focusin', maybeSetLastButtonClicked)\n    elt.addEventListener('focusout', maybeUnsetLastButtonClicked)\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} eventName\n   * @param {string} code\n   */\n  function addHxOnEventHandler(elt, eventName, code) {\n    const nodeData = getInternalData(elt)\n    if (!Array.isArray(nodeData.onHandlers)) {\n      nodeData.onHandlers = []\n    }\n    let func\n    /** @type EventListener */\n    const listener = function(e) {\n      maybeEval(elt, function() {\n        if (eltIsDisabled(elt)) {\n          return\n        }\n        if (!func) {\n          func = new Function('event', code)\n        }\n        func.call(elt, e)\n      })\n    }\n    elt.addEventListener(eventName, listener)\n    nodeData.onHandlers.push({ event: eventName, listener })\n  }\n\n  /**\n   * @param {Element} elt\n   */\n  function processHxOnWildcard(elt) {\n    // wipe any previous on handlers so that this function takes precedence\n    deInitOnHandlers(elt)\n\n    for (let i = 0; i < elt.attributes.length; i++) {\n      const name = elt.attributes[i].name\n      const value = elt.attributes[i].value\n      if (startsWith(name, 'hx-on') || startsWith(name, 'data-hx-on')) {\n        const afterOnPosition = name.indexOf('-on') + 3\n        const nextChar = name.slice(afterOnPosition, afterOnPosition + 1)\n        if (nextChar === '-' || nextChar === ':') {\n          let eventName = name.slice(afterOnPosition + 1)\n          // if the eventName starts with a colon or dash, prepend \"htmx\" for shorthand support\n          if (startsWith(eventName, ':')) {\n            eventName = 'htmx' + eventName\n          } else if (startsWith(eventName, '-')) {\n            eventName = 'htmx:' + eventName.slice(1)\n          } else if (startsWith(eventName, 'htmx-')) {\n            eventName = 'htmx:' + eventName.slice(5)\n          }\n\n          addHxOnEventHandler(elt, eventName, value)\n        }\n      }\n    }\n  }\n\n  /**\n   * @param {Element|HTMLInputElement} elt\n   */\n  function initNode(elt) {\n    triggerEvent(elt, 'htmx:beforeProcessNode')\n\n    const nodeData = getInternalData(elt)\n    const triggerSpecs = getTriggerSpecs(elt)\n    const hasExplicitHttpAction = processVerbs(elt, nodeData, triggerSpecs)\n\n    if (!hasExplicitHttpAction) {\n      if (getClosestAttributeValue(elt, 'hx-boost') === 'true') {\n        boostElement(elt, nodeData, triggerSpecs)\n      } else if (hasAttribute(elt, 'hx-trigger')) {\n        triggerSpecs.forEach(function(triggerSpec) {\n          // For \"naked\" triggers, don't do anything at all\n          addTriggerHandler(elt, triggerSpec, nodeData, function() {\n          })\n        })\n      }\n    }\n\n    // Handle submit buttons/inputs that have the form attribute set\n    // see https://developer.mozilla.org/docs/Web/HTML/Element/button\n    if (elt.tagName === 'FORM' || (getRawAttribute(elt, 'type') === 'submit' && hasAttribute(elt, 'form'))) {\n      initButtonTracking(elt)\n    }\n\n    nodeData.firstInitCompleted = true\n    triggerEvent(elt, 'htmx:afterProcessNode')\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function maybeDeInitAndHash(elt) {\n    // Ensure only valid Elements and not shadow DOM roots are inited\n    if (!(elt instanceof Element)) {\n      return false\n    }\n\n    const nodeData = getInternalData(elt)\n    const hash = attributeHash(elt)\n    if (nodeData.initHash !== hash) {\n      deInitNode(elt)\n      nodeData.initHash = hash\n      return true\n    }\n    return false\n  }\n\n  /**\n   * Processes new content, enabling htmx behavior. This can be useful if you have content that is added to the DOM outside of the normal htmx request cycle but still want htmx attributes to work.\n   *\n   * @see https://htmx.org/api/#process\n   *\n   * @param {Element|string} elt element to process\n   */\n  function processNode(elt) {\n    elt = resolveTarget(elt)\n    if (eltIsDisabled(elt)) {\n      cleanUpElement(elt)\n      return\n    }\n\n    const elementsToInit = []\n    if (maybeDeInitAndHash(elt)) {\n      elementsToInit.push(elt)\n    }\n    forEach(findElementsToProcess(elt), function(child) {\n      if (eltIsDisabled(child)) {\n        cleanUpElement(child)\n        return\n      }\n      if (maybeDeInitAndHash(child)) {\n        elementsToInit.push(child)\n      }\n    })\n\n    forEach(findHxOnWildcardElements(elt), processHxOnWildcard)\n    forEach(elementsToInit, initNode)\n  }\n\n  //= ===================================================================\n  // Event/Log Support\n  //= ===================================================================\n\n  /**\n   * @param {string} str\n   * @returns {string}\n   */\n  function kebabEventName(str) {\n    return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()\n  }\n\n  /**\n   * @param {string} eventName\n   * @param {any} detail\n   * @returns {CustomEvent}\n   */\n  function makeEvent(eventName, detail) {\n    // TODO: `composed: true` here is a hack to make global event handlers work with events in shadow DOM\n    // This breaks expected encapsulation but needs to be here until decided otherwise by core devs\n    return new CustomEvent(eventName, { bubbles: true, cancelable: true, composed: true, detail })\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {string} eventName\n   * @param {any=} detail\n   */\n  function triggerErrorEvent(elt, eventName, detail) {\n    triggerEvent(elt, eventName, mergeObjects({ error: eventName }, detail))\n  }\n\n  /**\n   * @param {string} eventName\n   * @returns {boolean}\n   */\n  function ignoreEventForLogging(eventName) {\n    return eventName === 'htmx:afterProcessNode'\n  }\n\n  /**\n   * `withExtensions` locates all active extensions for a provided element, then\n   * executes the provided function using each of the active extensions. You can filter\n   * the element's extensions by giving it a list of extensions to ignore. It should\n   * be called internally at every extendable execution point in htmx.\n   *\n   * @param {Element} elt\n   * @param {(extension:HtmxExtension) => void} toDo\n   * @param {string[]=} extensionsToIgnore\n   * @returns void\n   */\n  function withExtensions(elt, toDo, extensionsToIgnore) {\n    forEach(getExtensions(elt, [], extensionsToIgnore), function(extension) {\n      try {\n        toDo(extension)\n      } catch (e) {\n        logError(e)\n      }\n    })\n  }\n\n  function logError(msg) {\n    console.error(msg)\n  }\n\n  /**\n   * Triggers a given event on an element\n   *\n   * @see https://htmx.org/api/#trigger\n   *\n   * @param {EventTarget|string} elt the element to trigger the event on\n   * @param {string} eventName the name of the event to trigger\n   * @param {any=} detail details for the event\n   * @returns {boolean}\n   */\n  function triggerEvent(elt, eventName, detail) {\n    elt = resolveTarget(elt)\n    if (detail == null) {\n      detail = {}\n    }\n    detail.elt = elt\n    const event = makeEvent(eventName, detail)\n    if (htmx.logger && !ignoreEventForLogging(eventName)) {\n      htmx.logger(elt, eventName, detail)\n    }\n    if (detail.error) {\n      logError(detail.error + (detail.target ? ', ' + detail.target : ''))\n      triggerEvent(elt, 'htmx:error', { errorInfo: detail })\n    }\n    let eventResult = elt.dispatchEvent(event)\n    const kebabName = kebabEventName(eventName)\n    if (eventResult && kebabName !== eventName) {\n      const kebabedEvent = makeEvent(kebabName, event.detail)\n      eventResult = eventResult && elt.dispatchEvent(kebabedEvent)\n    }\n    withExtensions(asElement(elt), function(extension) {\n      eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented)\n    })\n    return eventResult\n  }\n\n  //= ===================================================================\n  // History Support\n  //= ===================================================================\n  let currentPathForHistory\n\n  /**\n   * @param {string} path\n   */\n  function setCurrentPathForHistory(path) {\n    currentPathForHistory = path\n    if (canAccessLocalStorage()) {\n      sessionStorage.setItem('htmx-current-path-for-history', path)\n    }\n  }\n\n  setCurrentPathForHistory(location.pathname + location.search)\n\n  /**\n   * @returns {Element}\n   */\n  function getHistoryElement() {\n    const historyElt = getDocument().querySelector('[hx-history-elt],[data-hx-history-elt]')\n    return historyElt || getDocument().body\n  }\n\n  /**\n   * @param {string} url\n   * @param {Element} rootElt\n   */\n  function saveToHistoryCache(url, rootElt) {\n    if (!canAccessLocalStorage()) {\n      return\n    }\n\n    // get state to save\n    const innerHTML = cleanInnerHtmlForHistory(rootElt)\n    const title = getDocument().title\n    const scroll = window.scrollY\n\n    if (htmx.config.historyCacheSize <= 0) {\n      // make sure that an eventually already existing cache is purged\n      sessionStorage.removeItem('htmx-history-cache')\n      return\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        historyCache.splice(i, 1)\n        break\n      }\n    }\n\n    /** @type HtmxHistoryItem */\n    const newHistoryItem = { url, content: innerHTML, title, scroll }\n\n    triggerEvent(getDocument().body, 'htmx:historyItemCreated', { item: newHistoryItem, cache: historyCache })\n\n    historyCache.push(newHistoryItem)\n    while (historyCache.length > htmx.config.historyCacheSize) {\n      historyCache.shift()\n    }\n\n    // keep trying to save the cache until it succeeds or is empty\n    while (historyCache.length > 0) {\n      try {\n        sessionStorage.setItem('htmx-history-cache', JSON.stringify(historyCache))\n        break\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheError', { cause: e, cache: historyCache })\n        historyCache.shift() // shrink the cache and retry\n      }\n    }\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryItem\n   * @property {string} url\n   * @property {string} content\n   * @property {string} title\n   * @property {number} scroll\n   */\n\n  /**\n   * @param {string} url\n   * @returns {HtmxHistoryItem|null}\n   */\n  function getCachedHistory(url) {\n    if (!canAccessLocalStorage()) {\n      return null\n    }\n\n    url = normalizePath(url)\n\n    const historyCache = parseJSON(sessionStorage.getItem('htmx-history-cache')) || []\n    for (let i = 0; i < historyCache.length; i++) {\n      if (historyCache[i].url === url) {\n        return historyCache[i]\n      }\n    }\n    return null\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string}\n   */\n  function cleanInnerHtmlForHistory(elt) {\n    const className = htmx.config.requestClass\n    const clone = /** @type Element */ (elt.cloneNode(true))\n    forEach(findAll(clone, '.' + className), function(child) {\n      removeClassFromElement(child, className)\n    })\n    // remove the disabled attribute for any element disabled due to an htmx request\n    forEach(findAll(clone, '[data-disabled-by-htmx]'), function(child) {\n      child.removeAttribute('disabled')\n    })\n    return clone.innerHTML\n  }\n\n  function saveCurrentPageToHistory() {\n    const elt = getHistoryElement()\n    let path = currentPathForHistory\n    if (canAccessLocalStorage()) {\n      path = sessionStorage.getItem('htmx-current-path-for-history')\n    }\n    path = path || location.pathname + location.search\n\n    // Allow history snapshot feature to be disabled where hx-history=\"false\"\n    // is present *anywhere* in the current document we're about to save,\n    // so we can prevent privileged data entering the cache.\n    // The page will still be reachable as a history entry, but htmx will fetch it\n    // live from the server onpopstate rather than look in the sessionStorage cache\n    const disableHistoryCache = getDocument().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')\n    if (!disableHistoryCache) {\n      triggerEvent(getDocument().body, 'htmx:beforeHistorySave', { path, historyElt: elt })\n      saveToHistoryCache(path, elt)\n    }\n\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, getDocument().title, location.href)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function pushUrlIntoHistory(path) {\n  // remove the cache buster parameter, if any\n    if (htmx.config.getCacheBusterParam) {\n      path = path.replace(/org\\.htmx\\.cache-buster=[^&]*&?/, '')\n      if (endsWith(path, '&') || endsWith(path, '?')) {\n        path = path.slice(0, -1)\n      }\n    }\n    if (htmx.config.historyEnabled) {\n      history.pushState({ htmx: true }, '', path)\n    }\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {string} path\n   */\n  function replaceUrlInHistory(path) {\n    if (htmx.config.historyEnabled) history.replaceState({ htmx: true }, '', path)\n    setCurrentPathForHistory(path)\n  }\n\n  /**\n   * @param {HtmxSettleTask[]} tasks\n   */\n  function settleImmediately(tasks) {\n    forEach(tasks, function(task) {\n      task.call(undefined)\n    })\n  }\n\n  /**\n   * @param {string} path\n   */\n  function loadHistoryFromServer(path) {\n    const request = new XMLHttpRequest()\n    const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0 }\n    const details = { path, xhr: request, historyElt: getHistoryElement(), swapSpec }\n    request.open('GET', path, true)\n    if (htmx.config.historyRestoreAsHxRequest) {\n      request.setRequestHeader('HX-Request', 'true')\n    }\n    request.setRequestHeader('HX-History-Restore-Request', 'true')\n    request.setRequestHeader('HX-Current-URL', location.href)\n    request.onload = function() {\n      if (this.status >= 200 && this.status < 400) {\n        details.response = this.response\n        triggerEvent(getDocument().body, 'htmx:historyCacheMissLoad', details)\n        swap(details.historyElt, details.response, swapSpec, {\n          contextElement: details.historyElt,\n          historyRequest: true\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', { path, cacheMiss: true, serverResponse: details.response })\n      } else {\n        triggerErrorEvent(getDocument().body, 'htmx:historyCacheMissLoadError', details)\n      }\n    }\n    if (triggerEvent(getDocument().body, 'htmx:historyCacheMiss', details)) {\n      request.send() // only send request if event not prevented\n    }\n  }\n\n  /**\n   * @param {string} [path]\n   */\n  function restoreHistory(path) {\n    saveCurrentPageToHistory()\n    path = path || location.pathname + location.search\n    const cached = getCachedHistory(path)\n    if (cached) {\n      const swapSpec = { swapStyle: 'innerHTML', swapDelay: 0, settleDelay: 0, scroll: cached.scroll }\n      const details = { path, item: cached, historyElt: getHistoryElement(), swapSpec }\n      if (triggerEvent(getDocument().body, 'htmx:historyCacheHit', details)) {\n        swap(details.historyElt, cached.content, swapSpec, {\n          contextElement: details.historyElt,\n          title: cached.title\n        })\n        setCurrentPathForHistory(details.path)\n        triggerEvent(getDocument().body, 'htmx:historyRestore', details)\n      }\n    } else {\n      if (htmx.config.refreshOnHistoryMiss) {\n        // @ts-ignore: optional parameter in reload() function throws error\n        // noinspection JSUnresolvedReference\n        htmx.location.reload(true)\n      } else {\n        loadHistoryFromServer(path)\n      }\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function addRequestIndicatorClasses(elt) {\n    let indicators = /** @type Element[] */ (findAttributeTargets(elt, 'hx-indicator'))\n    if (indicators == null) {\n      indicators = [elt]\n    }\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      addClassToElement(ic, htmx.config.requestClass)\n    })\n    return indicators\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {Element[]}\n   */\n  function disableElements(elt) {\n    let disabledElts = /** @type Element[] */ (findAttributeTargets(elt, 'hx-disabled-elt'))\n    if (disabledElts == null) {\n      disabledElts = []\n    }\n    forEach(disabledElts, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      internalData.requestCount = (internalData.requestCount || 0) + 1\n      if (!disabledElement.hasAttribute('disabled')) {\n        disabledElement.setAttribute('disabled', '')\n        disabledElement.setAttribute('data-disabled-by-htmx', '')\n      }\n    })\n    return disabledElts\n  }\n\n  /**\n   * @param {Element[]} indicators\n   * @param {Element[]} disabled\n   */\n  function removeRequestIndicators(indicators, disabled) {\n    forEach(indicators.concat(disabled), function(ele) {\n      const internalData = getInternalData(ele)\n      internalData.requestCount = (internalData.requestCount || 1) - 1\n    })\n    forEach(indicators, function(ic) {\n      const internalData = getInternalData(ic)\n      if (internalData.requestCount === 0) {\n        removeClassFromElement(ic, htmx.config.requestClass)\n      }\n    })\n    forEach(disabled, function(disabledElement) {\n      const internalData = getInternalData(disabledElement)\n      if (internalData.requestCount === 0 && disabledElement.hasAttribute('data-disabled-by-htmx')) {\n        disabledElement.removeAttribute('disabled')\n        disabledElement.removeAttribute('data-disabled-by-htmx')\n      }\n    })\n  }\n\n  //= ===================================================================\n  // Input Value Processing\n  //= ===================================================================\n\n  /**\n   * @param {Element[]} processed\n   * @param {Element} elt\n   * @returns {boolean}\n   */\n  function haveSeenNode(processed, elt) {\n    for (let i = 0; i < processed.length; i++) {\n      const node = processed[i]\n      if (node.isSameNode(elt)) {\n        return true\n      }\n    }\n    return false\n  }\n\n  /**\n   * @param {Element} element\n   * @return {boolean}\n   */\n  function shouldInclude(element) {\n    // Cast to trick tsc, undefined values will work fine here\n    const elt = /** @type {HTMLInputElement} */ (element)\n    if (elt.name === '' || elt.name == null || elt.disabled || closest(elt, 'fieldset[disabled]')) {\n      return false\n    }\n    // ignore \"submitter\" types (see jQuery src/serialize.js)\n    if (elt.type === 'button' || elt.type === 'submit' || elt.tagName === 'image' || elt.tagName === 'reset' || elt.tagName === 'file') {\n      return false\n    }\n    if (elt.type === 'checkbox' || elt.type === 'radio') {\n      return elt.checked\n    }\n    return true\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array|FormDataEntryValue} value\n   * @param {FormData} formData */\n  function addValueToFormData(name, value, formData) {\n    if (name != null && value != null) {\n      if (Array.isArray(value)) {\n        value.forEach(function(v) { formData.append(name, v) })\n      } else {\n        formData.append(name, value)\n      }\n    }\n  }\n\n  /**\n   * @param {string} name\n   * @param {string|Array} value\n   * @param {FormData} formData */\n  function removeValueFromFormData(name, value, formData) {\n    if (name != null && value != null) {\n      let values = formData.getAll(name)\n      if (Array.isArray(value)) {\n        values = values.filter(v => value.indexOf(v) < 0)\n      } else {\n        values = values.filter(v => v !== value)\n      }\n      formData.delete(name)\n      forEach(values, v => formData.append(name, v))\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @returns {string|Array}\n   */\n  function getValueFromInput(elt) {\n    if (elt instanceof HTMLSelectElement && elt.multiple) {\n      return toArray(elt.querySelectorAll('option:checked')).map(function(e) { return (/** @type HTMLOptionElement */(e)).value })\n    }\n    // include file inputs\n    if (elt instanceof HTMLInputElement && elt.files) {\n      return toArray(elt.files)\n    }\n    // @ts-ignore value will be undefined for non-input elements, which is fine\n    return elt.value\n  }\n\n  /**\n   * @param {Element[]} processed\n   * @param {FormData} formData\n   * @param {HtmxElementValidationError[]} errors\n   * @param {Element|HTMLInputElement|HTMLSelectElement|HTMLFormElement} elt\n   * @param {boolean} validate\n   */\n  function processInputValue(processed, formData, errors, elt, validate) {\n    if (elt == null || haveSeenNode(processed, elt)) {\n      return\n    } else {\n      processed.push(elt)\n    }\n    if (shouldInclude(elt)) {\n      const name = getRawAttribute(elt, 'name')\n      addValueToFormData(name, getValueFromInput(elt), formData)\n      if (validate) {\n        validateElement(elt, errors)\n      }\n    }\n    if (elt instanceof HTMLFormElement) {\n      forEach(elt.elements, function(input) {\n        if (processed.indexOf(input) >= 0) {\n          // The input has already been processed and added to the values, but the FormData that will be\n          //  constructed right after on the form, will include it once again. So remove that input's value\n          //  now to avoid duplicates\n          removeValueFromFormData(input.name, getValueFromInput(input), formData)\n        } else {\n          processed.push(input)\n        }\n        if (validate) {\n          validateElement(input, errors)\n        }\n      })\n      new FormData(elt).forEach(function(value, name) {\n        if (value instanceof File && value.name === '') {\n          return // ignore no-name files\n        }\n        addValueToFormData(name, value, formData)\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxElementValidationError[]} errors\n   */\n  function validateElement(elt, errors) {\n    const element = /** @type {HTMLElement & ElementInternals} */ (elt)\n    if (element.willValidate) {\n      triggerEvent(element, 'htmx:validation:validate')\n      if (!element.checkValidity()) {\n        if (\n          triggerEvent(element, 'htmx:validation:failed', {\n            message: element.validationMessage,\n            validity: element.validity\n          }) &&\n          !errors.length &&\n          htmx.config.reportValidityOfForms\n        ) {\n          element.reportValidity()\n        }\n        errors.push({ elt: element, message: element.validationMessage, validity: element.validity })\n      }\n    }\n  }\n\n  /**\n   * Override values in the one FormData with those from another.\n   * @param {FormData} receiver the formdata that will be mutated\n   * @param {FormData} donor the formdata that will provide the overriding values\n   * @returns {FormData} the {@linkcode receiver}\n   */\n  function overrideFormData(receiver, donor) {\n    for (const key of donor.keys()) {\n      receiver.delete(key)\n    }\n    donor.forEach(function(value, key) {\n      receiver.append(key, value)\n    })\n    return receiver\n  }\n\n  /**\n * @param {Element|HTMLFormElement} elt\n * @param {HttpVerb} verb\n * @returns {{errors: HtmxElementValidationError[], formData: FormData, values: Object}}\n */\n  function getInputValues(elt, verb) {\n    /** @type Element[] */\n    const processed = []\n    const formData = new FormData()\n    const priorityFormData = new FormData()\n    /** @type HtmxElementValidationError[] */\n    const errors = []\n    const internalData = getInternalData(elt)\n    if (internalData.lastButtonClicked && !bodyContains(internalData.lastButtonClicked)) {\n      internalData.lastButtonClicked = null\n    }\n\n    // only validate when form is directly submitted and novalidate or formnovalidate are not set\n    // or if the element has an explicit hx-validate=\"true\" on it\n    let validate = (elt instanceof HTMLFormElement && elt.noValidate !== true) || getAttributeValue(elt, 'hx-validate') === 'true'\n    if (internalData.lastButtonClicked) {\n      validate = validate && internalData.lastButtonClicked.formNoValidate !== true\n    }\n\n    // for a non-GET include the related form, which may or may not be a parent element of elt\n    if (verb !== 'get') {\n      processInputValue(processed, priorityFormData, errors, getRelatedForm(elt), validate)\n    }\n\n    // include the element itself\n    processInputValue(processed, formData, errors, elt, validate)\n\n    // if a button or submit was clicked last, include its value\n    if (internalData.lastButtonClicked || elt.tagName === 'BUTTON' ||\n    (elt.tagName === 'INPUT' && getRawAttribute(elt, 'type') === 'submit')) {\n      const button = internalData.lastButtonClicked || (/** @type HTMLInputElement|HTMLButtonElement */(elt))\n      const name = getRawAttribute(button, 'name')\n      addValueToFormData(name, button.value, priorityFormData)\n    }\n\n    // include any explicit includes\n    const includes = findAttributeTargets(elt, 'hx-include')\n    forEach(includes, function(node) {\n      processInputValue(processed, formData, errors, asElement(node), validate)\n      // if a non-form is included, include any input values within it\n      if (!matches(node, 'form')) {\n        forEach(asParentNode(node).querySelectorAll(INPUT_SELECTOR), function(descendant) {\n          processInputValue(processed, formData, errors, descendant, validate)\n        })\n      }\n    })\n\n    // values from a <form> take precedence, overriding the regular values\n    overrideFormData(formData, priorityFormData)\n\n    return { errors, formData, values: formDataProxy(formData) }\n  }\n\n  /**\n   * @param {string} returnStr\n   * @param {string} name\n   * @param {any} realValue\n   * @returns {string}\n   */\n  function appendParam(returnStr, name, realValue) {\n    if (returnStr !== '') {\n      returnStr += '&'\n    }\n    if (String(realValue) === '[object Object]') {\n      realValue = JSON.stringify(realValue)\n    }\n    const s = encodeURIComponent(realValue)\n    returnStr += encodeURIComponent(name) + '=' + s\n    return returnStr\n  }\n\n  /**\n   * @param {FormData|Object} values\n   * @returns string\n   */\n  function urlEncode(values) {\n    values = formDataFromObject(values)\n    let returnStr = ''\n    values.forEach(function(value, key) {\n      returnStr = appendParam(returnStr, key, value)\n    })\n    return returnStr\n  }\n\n  //= ===================================================================\n  // Ajax\n  //= ===================================================================\n\n  /**\n * @param {Element} elt\n * @param {Element} target\n * @param {string} prompt\n * @returns {HtmxHeaderSpecification}\n */\n  function getHeaders(elt, target, prompt) {\n    /** @type HtmxHeaderSpecification */\n    const headers = {\n      'HX-Request': 'true',\n      'HX-Trigger': getRawAttribute(elt, 'id'),\n      'HX-Trigger-Name': getRawAttribute(elt, 'name'),\n      'HX-Target': getAttributeValue(target, 'id'),\n      'HX-Current-URL': location.href\n    }\n    getValuesForElement(elt, 'hx-headers', false, headers)\n    if (prompt !== undefined) {\n      headers['HX-Prompt'] = prompt\n    }\n    if (getInternalData(elt).boosted) {\n      headers['HX-Boosted'] = 'true'\n    }\n    return headers\n  }\n\n  /**\n * filterValues takes an object containing form input values\n * and returns a new object that only contains keys that are\n * specified by the closest \"hx-params\" attribute\n * @param {FormData} inputValues\n * @param {Element} elt\n * @returns {FormData}\n */\n  function filterValues(inputValues, elt) {\n    const paramsValue = getClosestAttributeValue(elt, 'hx-params')\n    if (paramsValue) {\n      if (paramsValue === 'none') {\n        return new FormData()\n      } else if (paramsValue === '*') {\n        return inputValues\n      } else if (paramsValue.indexOf('not ') === 0) {\n        forEach(paramsValue.slice(4).split(','), function(name) {\n          name = name.trim()\n          inputValues.delete(name)\n        })\n        return inputValues\n      } else {\n        const newValues = new FormData()\n        forEach(paramsValue.split(','), function(name) {\n          name = name.trim()\n          if (inputValues.has(name)) {\n            inputValues.getAll(name).forEach(function(value) { newValues.append(name, value) })\n          }\n        })\n        return newValues\n      }\n    } else {\n      return inputValues\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function isAnchorLink(elt) {\n    return !!getRawAttribute(elt, 'href') && getRawAttribute(elt, 'href').indexOf('#') >= 0\n  }\n\n  /**\n * @param {Element} elt\n * @param {HtmxSwapStyle} [swapInfoOverride]\n * @returns {HtmxSwapSpecification}\n */\n  function getSwapSpecification(elt, swapInfoOverride) {\n    const swapInfo = swapInfoOverride || getClosestAttributeValue(elt, 'hx-swap')\n    /** @type HtmxSwapSpecification */\n    const swapSpec = {\n      swapStyle: getInternalData(elt).boosted ? 'innerHTML' : htmx.config.defaultSwapStyle,\n      swapDelay: htmx.config.defaultSwapDelay,\n      settleDelay: htmx.config.defaultSettleDelay\n    }\n    if (htmx.config.scrollIntoViewOnBoost && getInternalData(elt).boosted && !isAnchorLink(elt)) {\n      swapSpec.show = 'top'\n    }\n    if (swapInfo) {\n      const split = splitOnWhitespace(swapInfo)\n      if (split.length > 0) {\n        for (let i = 0; i < split.length; i++) {\n          const value = split[i]\n          if (value.indexOf('swap:') === 0) {\n            swapSpec.swapDelay = parseInterval(value.slice(5))\n          } else if (value.indexOf('settle:') === 0) {\n            swapSpec.settleDelay = parseInterval(value.slice(7))\n          } else if (value.indexOf('transition:') === 0) {\n            swapSpec.transition = value.slice(11) === 'true'\n          } else if (value.indexOf('ignoreTitle:') === 0) {\n            swapSpec.ignoreTitle = value.slice(12) === 'true'\n          } else if (value.indexOf('scroll:') === 0) {\n            const scrollSpec = value.slice(7)\n            var splitSpec = scrollSpec.split(':')\n            const scrollVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            // @ts-ignore\n            swapSpec.scroll = scrollVal\n            swapSpec.scrollTarget = selectorVal\n          } else if (value.indexOf('show:') === 0) {\n            const showSpec = value.slice(5)\n            var splitSpec = showSpec.split(':')\n            const showVal = splitSpec.pop()\n            var selectorVal = splitSpec.length > 0 ? splitSpec.join(':') : null\n            swapSpec.show = showVal\n            swapSpec.showTarget = selectorVal\n          } else if (value.indexOf('focus-scroll:') === 0) {\n            const focusScrollVal = value.slice('focus-scroll:'.length)\n            swapSpec.focusScroll = focusScrollVal == 'true'\n          } else if (i == 0) {\n            swapSpec.swapStyle = value\n          } else {\n            logError('Unknown modifier in hx-swap: ' + value)\n          }\n        }\n      }\n    }\n    return swapSpec\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {boolean}\n   */\n  function usesFormData(elt) {\n    return getClosestAttributeValue(elt, 'hx-encoding') === 'multipart/form-data' ||\n    (matches(elt, 'form') && getRawAttribute(elt, 'enctype') === 'multipart/form-data')\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {Element} elt\n   * @param {FormData} filteredParameters\n   * @returns {*|string|null}\n   */\n  function encodeParamsForBody(xhr, elt, filteredParameters) {\n    let encodedParameters = null\n    withExtensions(elt, function(extension) {\n      if (encodedParameters == null) {\n        encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt)\n      }\n    })\n    if (encodedParameters != null) {\n      return encodedParameters\n    } else {\n      if (usesFormData(elt)) {\n        // Force conversion to an actual FormData object in case filteredParameters is a formDataProxy\n        // See https://github.com/bigskysoftware/htmx/issues/2317\n        return overrideFormData(new FormData(), formDataFromObject(filteredParameters))\n      } else {\n        return urlEncode(filteredParameters)\n      }\n    }\n  }\n\n  /**\n *\n * @param {Element} target\n * @returns {HtmxSettleInfo}\n */\n  function makeSettleInfo(target) {\n    return { tasks: [], elts: [target] }\n  }\n\n  /**\n   * @param {Element[]} content\n   * @param {HtmxSwapSpecification} swapSpec\n   */\n  function updateScrollState(content, swapSpec) {\n    const first = content[0]\n    const last = content[content.length - 1]\n    if (swapSpec.scroll) {\n      var target = null\n      if (swapSpec.scrollTarget) {\n        target = asElement(querySelectorExt(first, swapSpec.scrollTarget))\n      }\n      if (swapSpec.scroll === 'top' && (first || target)) {\n        target = target || first\n        target.scrollTop = 0\n      }\n      if (swapSpec.scroll === 'bottom' && (last || target)) {\n        target = target || last\n        target.scrollTop = target.scrollHeight\n      }\n      if (typeof swapSpec.scroll === 'number') {\n        getWindow().setTimeout(function() {\n          window.scrollTo(0, /** @type number */ (swapSpec.scroll))\n        }, 0) // next 'tick', so browser has time to render layout\n      }\n    }\n    if (swapSpec.show) {\n      var target = null\n      if (swapSpec.showTarget) {\n        let targetStr = swapSpec.showTarget\n        if (swapSpec.showTarget === 'window') {\n          targetStr = 'body'\n        }\n        target = asElement(querySelectorExt(first, targetStr))\n      }\n      if (swapSpec.show === 'top' && (first || target)) {\n        target = target || first\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'start', behavior: htmx.config.scrollBehavior })\n      }\n      if (swapSpec.show === 'bottom' && (last || target)) {\n        target = target || last\n        // @ts-ignore For some reason tsc doesn't recognize \"instant\" as a valid option for now\n        target.scrollIntoView({ block: 'end', behavior: htmx.config.scrollBehavior })\n      }\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {string} attr\n * @param {boolean=} evalAsDefault\n * @param {Object=} values\n * @param {Event=} event\n * @returns {Object}\n */\n  function getValuesForElement(elt, attr, evalAsDefault, values, event) {\n    if (values == null) {\n      values = {}\n    }\n    if (elt == null) {\n      return values\n    }\n    const attributeValue = getAttributeValue(elt, attr)\n    if (attributeValue) {\n      let str = attributeValue.trim()\n      let evaluateValue = evalAsDefault\n      if (str === 'unset') {\n        return null\n      }\n      if (str.indexOf('javascript:') === 0) {\n        str = str.slice(11)\n        evaluateValue = true\n      } else if (str.indexOf('js:') === 0) {\n        str = str.slice(3)\n        evaluateValue = true\n      }\n      if (str.indexOf('{') !== 0) {\n        str = '{' + str + '}'\n      }\n      let varsValues\n      if (evaluateValue) {\n        varsValues = maybeEval(elt, function() {\n          if (event) {\n            return Function('event', 'return (' + str + ')').call(elt, event)\n          } else { // allow window.event to be accessible\n            return Function('return (' + str + ')').call(elt)\n          }\n        }, {})\n      } else {\n        varsValues = parseJSON(str)\n      }\n      for (const key of Object.keys(varsValues)) {\n        if (values[key] == null) {\n          values[key] = varsValues[key]\n        }\n      }\n    }\n    return getValuesForElement(asElement(parentElt(elt)), attr, evalAsDefault, values, event)\n  }\n\n  /**\n   * @param {EventTarget|string} elt\n   * @param {() => any} toEval\n   * @param {any=} defaultVal\n   * @returns {any}\n   */\n  function maybeEval(elt, toEval, defaultVal) {\n    if (htmx.config.allowEval) {\n      return toEval()\n    } else {\n      triggerErrorEvent(elt, 'htmx:evalDisallowedError')\n      return defaultVal\n    }\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXVarsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vars', true, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @param {*?=} expressionVars\n * @returns\n */\n  function getHXValsForElement(elt, event, expressionVars) {\n    return getValuesForElement(elt, 'hx-vals', false, expressionVars, event)\n  }\n\n  /**\n * @param {Element} elt\n * @param {Event=} event\n * @returns {FormData}\n */\n  function getExpressionVars(elt, event) {\n    return mergeObjects(getHXVarsForElement(elt, event), getHXValsForElement(elt, event))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} header\n   * @param {string|null} headerValue\n   */\n  function safelySetHeaderValue(xhr, header, headerValue) {\n    if (headerValue !== null) {\n      try {\n        xhr.setRequestHeader(header, headerValue)\n      } catch (e) {\n      // On an exception, try to set the header URI encoded instead\n        xhr.setRequestHeader(header, encodeURIComponent(headerValue))\n        xhr.setRequestHeader(header + '-URI-AutoEncoded', 'true')\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {string}\n   */\n  function getPathFromResponse(xhr) {\n    if (xhr.responseURL) {\n      try {\n        const url = new URL(xhr.responseURL)\n        return url.pathname + url.search\n      } catch (e) {\n        triggerErrorEvent(getDocument().body, 'htmx:badResponseUrl', { url: xhr.responseURL })\n      }\n    }\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @param {string} name\n   * @return {boolean}\n   */\n  function hasHeader(xhr, name) {\n    return xhr.getResponseHeader(name) !== null\n  }\n\n  /**\n   * Issues an htmx-style AJAX request\n   *\n   * @see https://htmx.org/api/#ajax\n   *\n   * @param {HttpVerb} verb\n   * @param {string} path the URL path to make the AJAX\n   * @param {Element|string|HtmxAjaxHelperContext} context the element to target (defaults to the **body**) | a selector for the target | a context object that contains any of the following\n   * @return {Promise<void>} Promise that resolves immediately if no request is sent, or when the request is complete\n   */\n  function ajaxHelper(verb, path, context) {\n    verb = (/** @type HttpVerb */(verb.toLowerCase()))\n    if (context) {\n      if (context instanceof Element || typeof context === 'string') {\n        return issueAjaxRequest(verb, path, null, null, {\n          targetOverride: resolveTarget(context) || DUMMY_ELT,\n          returnPromise: true\n        })\n      } else {\n        let resolvedTarget = resolveTarget(context.target)\n        // If target is supplied but can't resolve OR source is supplied but both target and source can't be resolved\n        // then use DUMMY_ELT to abort the request with htmx:targetError to avoid it replacing body by mistake\n        if ((context.target && !resolvedTarget) || (context.source && !resolvedTarget && !resolveTarget(context.source))) {\n          resolvedTarget = DUMMY_ELT\n        }\n        return issueAjaxRequest(verb, path, resolveTarget(context.source), context.event,\n          {\n            handler: context.handler,\n            headers: context.headers,\n            values: context.values,\n            targetOverride: resolvedTarget,\n            swapOverride: context.swap,\n            select: context.select,\n            returnPromise: true,\n            push: context.push,\n            replace: context.replace,\n            selectOOB: context.selectOOB\n          })\n      }\n    } else {\n      return issueAjaxRequest(verb, path, null, null, {\n        returnPromise: true\n      })\n    }\n  }\n\n  /**\n   * @param {Element} elt\n   * @return {Element[]}\n   */\n  function hierarchyForElt(elt) {\n    const arr = []\n    while (elt) {\n      arr.push(elt)\n      elt = elt.parentElement\n    }\n    return arr\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {string} path\n   * @param {HtmxRequestConfig} requestConfig\n   * @return {boolean}\n   */\n  function verifyPath(elt, path, requestConfig) {\n    const url = new URL(path, location.protocol !== 'about:' ? location.href : window.origin)\n    const origin = location.protocol !== 'about:' ? location.origin : window.origin\n    const sameHost = origin === url.origin\n\n    if (htmx.config.selfRequestsOnly) {\n      if (!sameHost) {\n        return false\n      }\n    }\n    return triggerEvent(elt, 'htmx:validateUrl', mergeObjects({ url, sameHost }, requestConfig))\n  }\n\n  /**\n   * @param {Object|FormData} obj\n   * @return {FormData}\n   */\n  function formDataFromObject(obj) {\n    if (obj instanceof FormData) return obj\n    const formData = new FormData()\n    for (const key of Object.keys(obj)) {\n      if (obj[key] && typeof obj[key].forEach === 'function') {\n        obj[key].forEach(function(v) { formData.append(key, v) })\n      } else if (typeof obj[key] === 'object' && !(obj[key] instanceof Blob)) {\n        formData.append(key, JSON.stringify(obj[key]))\n      } else {\n        formData.append(key, obj[key])\n      }\n    }\n    return formData\n  }\n\n  /**\n   * @param {FormData} formData\n   * @param {string} name\n   * @param {Array} array\n   * @returns {Array}\n   */\n  function formDataArrayProxy(formData, name, array) {\n    // mutating the array should mutate the underlying form data\n    return new Proxy(array, {\n      get: function(target, key) {\n        if (typeof key === 'number') return target[key]\n        if (key === 'length') return target.length\n        if (key === 'push') {\n          return function(value) {\n            target.push(value)\n            formData.append(name, value)\n          }\n        }\n        if (typeof target[key] === 'function') {\n          return function() {\n            target[key].apply(target, arguments)\n            formData.delete(name)\n            target.forEach(function(v) { formData.append(name, v) })\n          }\n        }\n\n        if (target[key] && target[key].length === 1) {\n          return target[key][0]\n        } else {\n          return target[key]\n        }\n      },\n      set: function(target, index, value) {\n        target[index] = value\n        formData.delete(name)\n        target.forEach(function(v) { formData.append(name, v) })\n        return true\n      }\n    })\n  }\n\n  /**\n   * @param {FormData} formData\n   * @returns {Object}\n   */\n  function formDataProxy(formData) {\n    return new Proxy(formData, {\n      get: function(target, name) {\n        if (typeof name === 'symbol') {\n          // Forward symbol calls to the FormData itself directly\n          const result = Reflect.get(target, name)\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof result === 'function') {\n            return function() {\n              return result.apply(formData, arguments)\n            }\n          } else {\n            return result\n          }\n        }\n        if (name === 'toJSON') {\n          // Support JSON.stringify call on proxy\n          return () => Object.fromEntries(formData)\n        }\n        if (name in target) {\n          // Wrap in function with apply to correctly bind the FormData context, as a direct call would result in an illegal invocation error\n          if (typeof target[name] === 'function') {\n            return function() {\n              return formData[name].apply(formData, arguments)\n            }\n          }\n        }\n        const array = formData.getAll(name)\n        // Those 2 undefined & single value returns are for retro-compatibility as we weren't using FormData before\n        if (array.length === 0) {\n          return undefined\n        } else if (array.length === 1) {\n          return array[0]\n        } else {\n          return formDataArrayProxy(target, name, array)\n        }\n      },\n      set: function(target, name, value) {\n        if (typeof name !== 'string') {\n          return false\n        }\n        target.delete(name)\n        if (value && typeof value.forEach === 'function') {\n          value.forEach(function(v) { target.append(name, v) })\n        } else if (typeof value === 'object' && !(value instanceof Blob)) {\n          target.append(name, JSON.stringify(value))\n        } else {\n          target.append(name, value)\n        }\n        return true\n      },\n      deleteProperty: function(target, name) {\n        if (typeof name === 'string') {\n          target.delete(name)\n        }\n        return true\n      },\n      // Support Object.assign call from proxy\n      ownKeys: function(target) {\n        return Reflect.ownKeys(Object.fromEntries(target))\n      },\n      getOwnPropertyDescriptor: function(target, prop) {\n        return Reflect.getOwnPropertyDescriptor(Object.fromEntries(target), prop)\n      }\n    })\n  }\n\n  /**\n   * @param {HttpVerb} verb\n   * @param {string} path\n   * @param {Element} elt\n   * @param {Event} event\n   * @param {HtmxAjaxEtc} [etc]\n   * @param {boolean} [confirmed]\n   * @return {Promise<void>}\n   */\n  function issueAjaxRequest(verb, path, elt, event, etc, confirmed) {\n    let resolve = null\n    let reject = null\n    etc = etc != null ? etc : {}\n    if (etc.returnPromise && typeof Promise !== 'undefined') {\n      var promise = new Promise(function(_resolve, _reject) {\n        resolve = _resolve\n        reject = _reject\n      })\n    }\n    if (elt == null) {\n      elt = getDocument().body\n    }\n    const responseHandler = etc.handler || handleAjaxResponse\n    const select = etc.select || null\n\n    if (!bodyContains(elt)) {\n    // do not issue requests for elements removed from the DOM\n      maybeCall(resolve)\n      return promise\n    }\n    const target = etc.targetOverride || asElement(getTarget(elt))\n    if (target == null || target == DUMMY_ELT) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target: getClosestAttributeValue(elt, 'hx-target') })\n      maybeCall(reject)\n      return promise\n    }\n\n    let eltData = getInternalData(elt)\n    const submitter = eltData.lastButtonClicked\n\n    if (submitter) {\n      const buttonPath = getRawAttribute(submitter, 'formaction')\n      if (buttonPath != null) {\n        path = buttonPath\n      }\n\n      const buttonVerb = getRawAttribute(submitter, 'formmethod')\n      if (buttonVerb != null) {\n        if (VERBS.includes(buttonVerb.toLowerCase())) {\n          verb = (/** @type HttpVerb */(buttonVerb))\n        } else {\n          maybeCall(resolve)\n          return promise\n        }\n      }\n    }\n\n    const confirmQuestion = getClosestAttributeValue(elt, 'hx-confirm')\n    // allow event-based confirmation w/ a callback\n    if (confirmed === undefined) {\n      const issueRequest = function(skipConfirmation) {\n        return issueAjaxRequest(verb, path, elt, event, etc, !!skipConfirmation)\n      }\n      const confirmDetails = { target, elt, path, verb, triggeringEvent: event, etc, issueRequest, question: confirmQuestion }\n      if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) {\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    let syncElt = elt\n    let syncStrategy = getClosestAttributeValue(elt, 'hx-sync')\n    let queueStrategy = null\n    let abortable = false\n    if (syncStrategy) {\n      const syncStrings = syncStrategy.split(':')\n      const selector = syncStrings[0].trim()\n      if (selector === 'this') {\n        syncElt = findThisElement(elt, 'hx-sync')\n      } else {\n        syncElt = asElement(querySelectorExt(elt, selector))\n      }\n      // default to the drop strategy\n      syncStrategy = (syncStrings[1] || 'drop').trim()\n      eltData = getInternalData(syncElt)\n      if (syncStrategy === 'drop' && eltData.xhr && eltData.abortable !== true) {\n        maybeCall(resolve)\n        return promise\n      } else if (syncStrategy === 'abort') {\n        if (eltData.xhr) {\n          maybeCall(resolve)\n          return promise\n        } else {\n          abortable = true\n        }\n      } else if (syncStrategy === 'replace') {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else if (syncStrategy.indexOf('queue') === 0) {\n        const queueStrArray = syncStrategy.split(' ')\n        queueStrategy = (queueStrArray[1] || 'last').trim()\n      }\n    }\n\n    if (eltData.xhr) {\n      if (eltData.abortable) {\n        triggerEvent(syncElt, 'htmx:abort') // abort the current request and continue\n      } else {\n        if (queueStrategy == null) {\n          if (event) {\n            const eventData = getInternalData(event)\n            if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) {\n              queueStrategy = eventData.triggerSpec.queue\n            }\n          }\n          if (queueStrategy == null) {\n            queueStrategy = 'last'\n          }\n        }\n        if (eltData.queuedRequests == null) {\n          eltData.queuedRequests = []\n        }\n        if (queueStrategy === 'first' && eltData.queuedRequests.length === 0) {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'all') {\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        } else if (queueStrategy === 'last') {\n          eltData.queuedRequests = [] // dump existing queue\n          eltData.queuedRequests.push(function() {\n            issueAjaxRequest(verb, path, elt, event, etc)\n          })\n        }\n        maybeCall(resolve)\n        return promise\n      }\n    }\n\n    const xhr = new XMLHttpRequest()\n    eltData.xhr = xhr\n    eltData.abortable = abortable\n    const endRequestLock = function() {\n      eltData.xhr = null\n      eltData.abortable = false\n      if (eltData.queuedRequests != null &&\n      eltData.queuedRequests.length > 0) {\n        const queuedRequest = eltData.queuedRequests.shift()\n        queuedRequest()\n      }\n    }\n    const promptQuestion = getClosestAttributeValue(elt, 'hx-prompt')\n    if (promptQuestion) {\n      var promptResponse = prompt(promptQuestion)\n      // prompt returns null if cancelled and empty string if accepted with no entry\n      if (promptResponse === null ||\n      !triggerEvent(elt, 'htmx:prompt', { prompt: promptResponse, target })) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    if (confirmQuestion && !confirmed) {\n      if (!confirm(confirmQuestion)) {\n        maybeCall(resolve)\n        endRequestLock()\n        return promise\n      }\n    }\n\n    let headers = getHeaders(elt, target, promptResponse)\n\n    if (verb !== 'get' && !usesFormData(elt)) {\n      headers['Content-Type'] = 'application/x-www-form-urlencoded'\n    }\n\n    if (etc.headers) {\n      headers = mergeObjects(headers, etc.headers)\n    }\n    const results = getInputValues(elt, verb)\n    let errors = results.errors\n    const rawFormData = results.formData\n    if (etc.values) {\n      overrideFormData(rawFormData, formDataFromObject(etc.values))\n    }\n    const expressionVars = formDataFromObject(getExpressionVars(elt, event))\n    const allFormData = overrideFormData(rawFormData, expressionVars)\n    let filteredFormData = filterValues(allFormData, elt)\n\n    if (htmx.config.getCacheBusterParam && verb === 'get') {\n      filteredFormData.set('org.htmx.cache-buster', getRawAttribute(target, 'id') || 'true')\n    }\n\n    // behavior of anchors w/ empty href is to use the current URL\n    if (path == null || path === '') {\n      path = location.href\n    }\n\n    /**\n     * @type {Object}\n     * @property {boolean} [credentials]\n     * @property {number} [timeout]\n     * @property {boolean} [noHeaders]\n     */\n    const requestAttrValues = getValuesForElement(elt, 'hx-request')\n\n    const eltIsBoosted = getInternalData(elt).boosted\n\n    let useUrlParams = htmx.config.methodsThatUseUrlParams.indexOf(verb) >= 0\n\n    /** @type HtmxRequestConfig */\n    const requestConfig = {\n      boosted: eltIsBoosted,\n      useUrlParams,\n      formData: filteredFormData,\n      parameters: formDataProxy(filteredFormData),\n      unfilteredFormData: allFormData,\n      unfilteredParameters: formDataProxy(allFormData),\n      headers,\n      elt,\n      target,\n      verb,\n      errors,\n      withCredentials: etc.credentials || requestAttrValues.credentials || htmx.config.withCredentials,\n      timeout: etc.timeout || requestAttrValues.timeout || htmx.config.timeout,\n      path,\n      triggeringEvent: event\n    }\n\n    if (!triggerEvent(elt, 'htmx:configRequest', requestConfig)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    // copy out in case the object was overwritten\n    path = requestConfig.path\n    verb = requestConfig.verb\n    headers = requestConfig.headers\n    filteredFormData = formDataFromObject(requestConfig.parameters)\n    errors = requestConfig.errors\n    useUrlParams = requestConfig.useUrlParams\n\n    if (errors && errors.length > 0) {\n      triggerEvent(elt, 'htmx:validation:halted', requestConfig)\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n\n    const splitPath = path.split('#')\n    const pathNoAnchor = splitPath[0]\n    const anchor = splitPath[1]\n\n    let finalPath = path\n    if (useUrlParams) {\n      finalPath = pathNoAnchor\n      const hasValues = !filteredFormData.keys().next().done\n      if (hasValues) {\n        if (finalPath.indexOf('?') < 0) {\n          finalPath += '?'\n        } else {\n          finalPath += '&'\n        }\n        finalPath += urlEncode(filteredFormData)\n        if (anchor) {\n          finalPath += '#' + anchor\n        }\n      }\n    }\n\n    if (!verifyPath(elt, finalPath, requestConfig)) {\n      triggerErrorEvent(elt, 'htmx:invalidPath', requestConfig)\n      maybeCall(reject)\n      endRequestLock()\n      return promise\n    }\n\n    xhr.open(verb.toUpperCase(), finalPath, true)\n    xhr.overrideMimeType('text/html')\n    xhr.withCredentials = requestConfig.withCredentials\n    xhr.timeout = requestConfig.timeout\n\n    // request headers\n    if (requestAttrValues.noHeaders) {\n    // ignore all headers\n    } else {\n      for (const header of Object.keys(headers)) {\n        safelySetHeaderValue(xhr, header, headers[header])\n      }\n    }\n\n    /** @type {HtmxResponseInfo} */\n    const responseInfo = {\n      xhr,\n      target,\n      requestConfig,\n      etc,\n      boosted: eltIsBoosted,\n      select,\n      pathInfo: {\n        requestPath: path,\n        finalRequestPath: finalPath,\n        responsePath: null,\n        anchor\n      }\n    }\n\n    xhr.onload = function() {\n      try {\n        const hierarchy = hierarchyForElt(elt)\n        responseInfo.pathInfo.responsePath = getPathFromResponse(xhr)\n        responseHandler(elt, responseInfo)\n        if (responseInfo.keepIndicators !== true) {\n          removeRequestIndicators(indicators, disableElts)\n        }\n        triggerEvent(elt, 'htmx:afterRequest', responseInfo)\n        triggerEvent(elt, 'htmx:afterOnLoad', responseInfo)\n        // if the body no longer contains the element, trigger the event on the closest parent\n        // remaining in the DOM\n        if (!bodyContains(elt)) {\n          let secondaryTriggerElt = null\n          while (hierarchy.length > 0 && secondaryTriggerElt == null) {\n            const parentEltInHierarchy = hierarchy.shift()\n            if (bodyContains(parentEltInHierarchy)) {\n              secondaryTriggerElt = parentEltInHierarchy\n            }\n          }\n          if (secondaryTriggerElt) {\n            triggerEvent(secondaryTriggerElt, 'htmx:afterRequest', responseInfo)\n            triggerEvent(secondaryTriggerElt, 'htmx:afterOnLoad', responseInfo)\n          }\n        }\n        maybeCall(resolve)\n      } catch (e) {\n        triggerErrorEvent(elt, 'htmx:onLoadError', mergeObjects({ error: e }, responseInfo))\n        throw e\n      } finally {\n        endRequestLock()\n      }\n    }\n    xhr.onerror = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendError', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.onabort = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    xhr.ontimeout = function() {\n      removeRequestIndicators(indicators, disableElts)\n      triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo)\n      triggerErrorEvent(elt, 'htmx:timeout', responseInfo)\n      maybeCall(reject)\n      endRequestLock()\n    }\n    if (!triggerEvent(elt, 'htmx:beforeRequest', responseInfo)) {\n      maybeCall(resolve)\n      endRequestLock()\n      return promise\n    }\n    var indicators = addRequestIndicatorClasses(elt)\n    var disableElts = disableElements(elt)\n\n    forEach(['loadstart', 'loadend', 'progress', 'abort'], function(eventName) {\n      forEach([xhr, xhr.upload], function(target) {\n        target.addEventListener(eventName, function(event) {\n          triggerEvent(elt, 'htmx:xhr:' + eventName, {\n            lengthComputable: event.lengthComputable,\n            loaded: event.loaded,\n            total: event.total\n          })\n        })\n      })\n    })\n    triggerEvent(elt, 'htmx:beforeSend', responseInfo)\n    const params = useUrlParams ? null : encodeParamsForBody(xhr, elt, filteredFormData)\n    xhr.send(params)\n    return promise\n  }\n\n  /**\n   * @typedef {Object} HtmxHistoryUpdate\n   * @property {string|null} [type]\n   * @property {string|null} [path]\n   */\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   * @return {HtmxHistoryUpdate}\n   */\n  function determineHistoryUpdates(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n\n    //= ==========================================\n    // First consult response headers\n    //= ==========================================\n    let pathFromHeaders = null\n    let typeFromHeaders = null\n    if (hasHeader(xhr, 'HX-Push')) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, 'HX-Push-Url')) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Push-Url')\n      typeFromHeaders = 'push'\n    } else if (hasHeader(xhr, 'HX-Replace-Url')) {\n      pathFromHeaders = xhr.getResponseHeader('HX-Replace-Url')\n      typeFromHeaders = 'replace'\n    }\n\n    // if there was a response header, that has priority\n    if (pathFromHeaders) {\n      if (pathFromHeaders === 'false') {\n        return {}\n      } else {\n        return {\n          type: typeFromHeaders,\n          path: pathFromHeaders\n        }\n      }\n    }\n\n    //= ==========================================\n    // Next resolve via DOM values\n    //= ==========================================\n    const requestPath = responseInfo.pathInfo.finalRequestPath\n    const responsePath = responseInfo.pathInfo.responsePath\n\n    const pushUrl = responseInfo.etc.push || getClosestAttributeValue(elt, 'hx-push-url')\n    let replaceUrl = responseInfo.etc.replace || getClosestAttributeValue(elt, 'hx-replace-url')\n    if (replaceUrl === 'false') replaceUrl = null\n    const elementIsBoosted = getInternalData(elt).boosted\n\n    let saveType = null\n    let path = null\n\n    if (pushUrl) {\n      saveType = 'push'\n      path = pushUrl\n    } else if (replaceUrl) {\n      saveType = 'replace'\n      path = replaceUrl\n    } else if (elementIsBoosted) {\n      saveType = 'push'\n      path = responsePath || requestPath // if there is no response path, go with the original request path\n    }\n\n    if (path) {\n      // false indicates no push, return empty object\n      if (path === 'false') {\n        return {}\n      }\n\n      // true indicates we want to follow wherever the server ended up sending us\n      if (path === 'true') {\n        path = responsePath || requestPath // if there is no response path, go with the original request path\n      }\n\n      // restore any anchor associated with the request\n      if (responseInfo.pathInfo.anchor && path.indexOf('#') === -1) {\n        path = path + '#' + responseInfo.pathInfo.anchor\n      }\n\n      return {\n        type: saveType,\n        path\n      }\n    } else {\n      return {}\n    }\n  }\n\n  /**\n   * @param {HtmxResponseHandlingConfig} responseHandlingConfig\n   * @param {number} status\n   * @return {boolean}\n   */\n  function codeMatches(responseHandlingConfig, status) {\n    var regExp = new RegExp(responseHandlingConfig.code)\n    return regExp.test(status.toString(10))\n  }\n\n  /**\n   * @param {XMLHttpRequest} xhr\n   * @return {HtmxResponseHandlingConfig}\n   */\n  function resolveResponseHandling(xhr) {\n    for (var i = 0; i < htmx.config.responseHandling.length; i++) {\n      /** @type HtmxResponseHandlingConfig */\n      var responseHandlingElement = htmx.config.responseHandling[i]\n      if (codeMatches(responseHandlingElement, xhr.status)) {\n        return responseHandlingElement\n      }\n    }\n    // no matches, return no swap\n    return {\n      swap: false\n    }\n  }\n\n  /**\n   * @param {string} title\n   */\n  function handleTitle(title) {\n    if (title) {\n      const titleElt = find('title')\n      if (titleElt) {\n        titleElt.textContent = title\n      } else {\n        window.document.title = title\n      }\n    }\n  }\n\n  /**\n   * Resove the Retarget selector and throw if not found\n   * @param {Element} elt\n   * @param {String} target\n   * @returns {Element}\n   */\n  function resolveRetarget(elt, target) {\n    if (target === 'this') {\n      return elt\n    }\n    const resolvedTarget = asElement(querySelectorExt(elt, target))\n    if (resolvedTarget == null) {\n      triggerErrorEvent(elt, 'htmx:targetError', { target })\n      throw new Error(`Invalid re-target ${target}`)\n    }\n    return resolvedTarget\n  }\n\n  /**\n   * @param {Element} elt\n   * @param {HtmxResponseInfo} responseInfo\n   */\n  function handleAjaxResponse(elt, responseInfo) {\n    const xhr = responseInfo.xhr\n    let target = responseInfo.target\n    const etc = responseInfo.etc\n    const responseInfoSelect = responseInfo.select\n\n    if (!triggerEvent(elt, 'htmx:beforeOnLoad', responseInfo)) return\n\n    if (hasHeader(xhr, 'HX-Trigger')) {\n      handleTriggerHeader(xhr, 'HX-Trigger', elt)\n    }\n\n    if (hasHeader(xhr, 'HX-Location')) {\n      let redirectPath = xhr.getResponseHeader('HX-Location')\n      /** @type {HtmxAjaxHelperContext&{path?:string}} */\n      var redirectSwapSpec = {}\n      if (redirectPath.indexOf('{') === 0) {\n        redirectSwapSpec = parseJSON(redirectPath)\n        // what's the best way to throw an error if the user didn't include this\n        redirectPath = redirectSwapSpec.path\n        delete redirectSwapSpec.path\n      }\n      redirectSwapSpec.push = redirectSwapSpec.push ?? 'true'\n      ajaxHelper('get', redirectPath, redirectSwapSpec)\n      return\n    }\n\n    const shouldRefresh = hasHeader(xhr, 'HX-Refresh') && xhr.getResponseHeader('HX-Refresh') === 'true'\n\n    if (hasHeader(xhr, 'HX-Redirect')) {\n      responseInfo.keepIndicators = true\n      htmx.location.href = xhr.getResponseHeader('HX-Redirect')\n      shouldRefresh && htmx.location.reload()\n      return\n    }\n\n    if (shouldRefresh) {\n      responseInfo.keepIndicators = true\n      htmx.location.reload()\n      return\n    }\n\n    const historyUpdate = determineHistoryUpdates(elt, responseInfo)\n\n    const responseHandling = resolveResponseHandling(xhr)\n    const shouldSwap = responseHandling.swap\n    let isError = !!responseHandling.error\n    let ignoreTitle = htmx.config.ignoreTitle || responseHandling.ignoreTitle\n    let selectOverride = responseHandling.select\n    if (responseHandling.target) {\n      responseInfo.target = resolveRetarget(elt, responseHandling.target)\n    }\n    var swapOverride = etc.swapOverride\n    if (swapOverride == null && responseHandling.swapOverride) {\n      swapOverride = responseHandling.swapOverride\n    }\n\n    // response headers override response handling config\n    if (hasHeader(xhr, 'HX-Retarget')) {\n      responseInfo.target = resolveRetarget(elt, xhr.getResponseHeader('HX-Retarget'))\n    }\n\n    if (hasHeader(xhr, 'HX-Reswap')) {\n      swapOverride = xhr.getResponseHeader('HX-Reswap')\n    }\n\n    var serverResponse = xhr.response\n    /** @type HtmxBeforeSwapDetails */\n    var beforeSwapDetails = mergeObjects({\n      shouldSwap,\n      serverResponse,\n      isError,\n      ignoreTitle,\n      selectOverride,\n      swapOverride\n    }, responseInfo)\n\n    if (responseHandling.event && !triggerEvent(target, responseHandling.event, beforeSwapDetails)) return\n\n    if (!triggerEvent(target, 'htmx:beforeSwap', beforeSwapDetails)) return\n\n    target = beforeSwapDetails.target // allow re-targeting\n    serverResponse = beforeSwapDetails.serverResponse // allow updating content\n    isError = beforeSwapDetails.isError // allow updating error\n    ignoreTitle = beforeSwapDetails.ignoreTitle // allow updating ignoring title\n    selectOverride = beforeSwapDetails.selectOverride // allow updating select override\n    swapOverride = beforeSwapDetails.swapOverride // allow updating swap override\n\n    responseInfo.target = target // Make updated target available to response events\n    responseInfo.failed = isError // Make failed property available to response events\n    responseInfo.successful = !isError // Make successful property available to response events\n\n    if (beforeSwapDetails.shouldSwap) {\n      if (xhr.status === 286) {\n        cancelPolling(elt)\n      }\n\n      withExtensions(elt, function(extension) {\n        serverResponse = extension.transformResponse(serverResponse, xhr, elt)\n      })\n\n      // Save current page if there will be a history update\n      if (historyUpdate.type) {\n        saveCurrentPageToHistory()\n      }\n\n      var swapSpec = getSwapSpecification(elt, swapOverride)\n\n      if (!swapSpec.hasOwnProperty('ignoreTitle')) {\n        swapSpec.ignoreTitle = ignoreTitle\n      }\n\n      addClassToElement(target, htmx.config.swappingClass)\n\n      if (responseInfoSelect) {\n        selectOverride = responseInfoSelect\n      }\n\n      if (hasHeader(xhr, 'HX-Reselect')) {\n        selectOverride = xhr.getResponseHeader('HX-Reselect')\n      }\n\n      const selectOOB = etc.selectOOB || getClosestAttributeValue(elt, 'hx-select-oob')\n      const select = getClosestAttributeValue(elt, 'hx-select')\n\n      swap(target, serverResponse, swapSpec, {\n        select: selectOverride === 'unset' ? null : selectOverride || select,\n        selectOOB,\n        eventInfo: responseInfo,\n        anchor: responseInfo.pathInfo.anchor,\n        contextElement: elt,\n        afterSwapCallback: function() {\n          if (hasHeader(xhr, 'HX-Trigger-After-Swap')) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Swap', finalElt)\n          }\n        },\n        afterSettleCallback: function() {\n          if (hasHeader(xhr, 'HX-Trigger-After-Settle')) {\n            let finalElt = elt\n            if (!bodyContains(elt)) {\n              finalElt = getDocument().body\n            }\n            handleTriggerHeader(xhr, 'HX-Trigger-After-Settle', finalElt)\n          }\n        },\n        beforeSwapCallback: function() {\n          // if we need to save history, do so, before swapping so that relative resources have the correct base URL\n          if (historyUpdate.type) {\n            triggerEvent(getDocument().body, 'htmx:beforeHistoryUpdate', mergeObjects({ history: historyUpdate }, responseInfo))\n            if (historyUpdate.type === 'push') {\n              pushUrlIntoHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', { path: historyUpdate.path })\n            } else {\n              replaceUrlInHistory(historyUpdate.path)\n              triggerEvent(getDocument().body, 'htmx:replacedInHistory', { path: historyUpdate.path })\n            }\n          }\n        }\n      })\n    }\n    if (isError) {\n      triggerErrorEvent(elt, 'htmx:responseError', mergeObjects({ error: 'Response Status Error Code ' + xhr.status + ' from ' + responseInfo.pathInfo.requestPath }, responseInfo))\n    }\n  }\n\n  //= ===================================================================\n  // Extensions API\n  //= ===================================================================\n\n  /** @type {Object<string, HtmxExtension>} */\n  const extensions = {}\n\n  /**\n   * extensionBase defines the default functions for all extensions.\n   * @returns {HtmxExtension}\n   */\n  function extensionBase() {\n    return {\n      init: function(api) { return null },\n      getSelectors: function() { return null },\n      onEvent: function(name, evt) { return true },\n      transformResponse: function(text, xhr, elt) { return text },\n      isInlineSwap: function(swapStyle) { return false },\n      handleSwap: function(swapStyle, target, fragment, settleInfo) { return false },\n      encodeParameters: function(xhr, parameters, elt) { return null }\n    }\n  }\n\n  /**\n   * defineExtension initializes the extension and adds it to the htmx registry\n   *\n   * @see https://htmx.org/api/#defineExtension\n   *\n   * @param {string} name the extension name\n   * @param {Partial<HtmxExtension>} extension the extension definition\n   */\n  function defineExtension(name, extension) {\n    if (extension.init) {\n      extension.init(internalAPI)\n    }\n    extensions[name] = mergeObjects(extensionBase(), extension)\n  }\n\n  /**\n   * removeExtension removes an extension from the htmx registry\n   *\n   * @see https://htmx.org/api/#removeExtension\n   *\n   * @param {string} name\n   */\n  function removeExtension(name) {\n    delete extensions[name]\n  }\n\n  /**\n   * getExtensions searches up the DOM tree to return all extensions that can be applied to a given element\n   *\n   * @param {Element} elt\n   * @param {HtmxExtension[]=} extensionsToReturn\n   * @param {string[]=} extensionsToIgnore\n   * @returns {HtmxExtension[]}\n   */\n  function getExtensions(elt, extensionsToReturn, extensionsToIgnore) {\n    if (extensionsToReturn == undefined) {\n      extensionsToReturn = []\n    }\n    if (elt == undefined) {\n      return extensionsToReturn\n    }\n    if (extensionsToIgnore == undefined) {\n      extensionsToIgnore = []\n    }\n    const extensionsForElement = getAttributeValue(elt, 'hx-ext')\n    if (extensionsForElement) {\n      forEach(extensionsForElement.split(','), function(extensionName) {\n        extensionName = extensionName.replace(/ /g, '')\n        if (extensionName.slice(0, 7) == 'ignore:') {\n          extensionsToIgnore.push(extensionName.slice(7))\n          return\n        }\n        if (extensionsToIgnore.indexOf(extensionName) < 0) {\n          const extension = extensions[extensionName]\n          if (extension && extensionsToReturn.indexOf(extension) < 0) {\n            extensionsToReturn.push(extension)\n          }\n        }\n      })\n    }\n    return getExtensions(asElement(parentElt(elt)), extensionsToReturn, extensionsToIgnore)\n  }\n\n  //= ===================================================================\n  // Initialization\n  //= ===================================================================\n  var isReady = false\n  getDocument().addEventListener('DOMContentLoaded', function() {\n    isReady = true\n  })\n\n  /**\n   * Execute a function now if DOMContentLoaded has fired, otherwise listen for it.\n   *\n   * This function uses isReady because there is no reliable way to ask the browser whether\n   * the DOMContentLoaded event has already been fired; there's a gap between DOMContentLoaded\n   * firing and readystate=complete.\n   */\n  function ready(fn) {\n    // Checking readyState here is a failsafe in case the htmx script tag entered the DOM by\n    // some means other than the initial page load.\n    if (isReady || getDocument().readyState === 'complete') {\n      fn()\n    } else {\n      getDocument().addEventListener('DOMContentLoaded', fn)\n    }\n  }\n\n  function insertIndicatorStyles() {\n    if (htmx.config.includeIndicatorStyles !== false) {\n      const nonceAttribute = htmx.config.inlineStyleNonce ? ` nonce=\"${htmx.config.inlineStyleNonce}\"` : ''\n      const indicator = htmx.config.indicatorClass\n      const request = htmx.config.requestClass\n      getDocument().head.insertAdjacentHTML('beforeend',\n        `<style${nonceAttribute}>` +\n        `.${indicator}{opacity:0;visibility: hidden} ` +\n        `.${request} .${indicator}, .${request}.${indicator}{opacity:1;visibility: visible;transition: opacity 200ms ease-in}` +\n        '</style>'\n      )\n    }\n  }\n\n  function getMetaConfig() {\n    /** @type HTMLMetaElement */\n    const element = getDocument().querySelector('meta[name=\"htmx-config\"]')\n    if (element) {\n      return parseJSON(element.content)\n    } else {\n      return null\n    }\n  }\n\n  function mergeMetaConfig() {\n    const metaConfig = getMetaConfig()\n    if (metaConfig) {\n      htmx.config = mergeObjects(htmx.config, metaConfig)\n    }\n  }\n\n  // initialize the document\n  ready(function() {\n    mergeMetaConfig()\n    insertIndicatorStyles()\n    let body = getDocument().body\n    processNode(body)\n    const restoredElts = getDocument().querySelectorAll(\n      \"[hx-trigger='restored'],[data-hx-trigger='restored']\"\n    )\n    body.addEventListener('htmx:abort', function(evt) {\n      const target = (/** @type {CustomEvent} */(evt)).detail.elt || evt.target\n      const internalData = getInternalData(target)\n      if (internalData && internalData.xhr) {\n        internalData.xhr.abort()\n      }\n    })\n    /** @type {(ev: PopStateEvent) => any} */\n    const originalPopstate = window.onpopstate ? window.onpopstate.bind(window) : null\n    /** @type {(ev: PopStateEvent) => any} */\n    window.onpopstate = function(event) {\n      if (event.state && event.state.htmx) {\n        restoreHistory()\n        forEach(restoredElts, function(elt) {\n          triggerEvent(elt, 'htmx:restored', {\n            document: getDocument(),\n            triggerEvent\n          })\n        })\n      } else {\n        if (originalPopstate) {\n          originalPopstate(event)\n        }\n      }\n    }\n    getWindow().setTimeout(function() {\n      triggerEvent(body, 'htmx:load', {}) // give ready handlers a chance to load up before firing this event\n      body = null // kill reference for gc\n    }, 0)\n  })\n\n  return htmx\n})()\n\n/** @typedef {'get'|'head'|'post'|'put'|'delete'|'connect'|'options'|'trace'|'patch'} HttpVerb */\n\n/**\n * @typedef {Object} SwapOptions\n * @property {string} [select]\n * @property {string} [selectOOB]\n * @property {*} [eventInfo]\n * @property {string} [anchor]\n * @property {Element} [contextElement]\n * @property {swapCallback} [afterSwapCallback]\n * @property {swapCallback} [afterSettleCallback]\n * @property {swapCallback} [beforeSwapCallback]\n * @property {string} [title]\n * @property {boolean} [historyRequest]\n */\n\n/**\n * @callback swapCallback\n */\n\n/**\n * @typedef {'innerHTML' | 'outerHTML' | 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend' | 'delete' | 'none' | string} HtmxSwapStyle\n */\n\n/**\n * @typedef HtmxSwapSpecification\n * @property {HtmxSwapStyle} swapStyle\n * @property {number} swapDelay\n * @property {number} settleDelay\n * @property {boolean} [transition]\n * @property {boolean} [ignoreTitle]\n * @property {string} [head]\n * @property {'top' | 'bottom' | number } [scroll]\n * @property {string} [scrollTarget]\n * @property {string} [show]\n * @property {string} [showTarget]\n * @property {boolean} [focusScroll]\n */\n\n/**\n * @typedef {((this:Node, evt:Event) => boolean) & {source: string}} ConditionalFunction\n */\n\n/**\n * @typedef {Object} HtmxTriggerSpecification\n * @property {string} trigger\n * @property {number} [pollInterval]\n * @property {ConditionalFunction} [eventFilter]\n * @property {boolean} [changed]\n * @property {boolean} [once]\n * @property {boolean} [consume]\n * @property {number} [delay]\n * @property {string} [from]\n * @property {string} [target]\n * @property {number} [throttle]\n * @property {string} [queue]\n * @property {string} [root]\n * @property {string} [threshold]\n */\n\n/**\n * @typedef {{elt: Element, message: string, validity: ValidityState}} HtmxElementValidationError\n */\n\n/**\n * @typedef {Record<string, string>} HtmxHeaderSpecification\n * @property {'true'} HX-Request\n * @property {string|null} HX-Trigger\n * @property {string|null} HX-Trigger-Name\n * @property {string|null} HX-Target\n * @property {string} HX-Current-URL\n * @property {string} [HX-Prompt]\n * @property {'true'} [HX-Boosted]\n * @property {string} [Content-Type]\n * @property {'true'} [HX-History-Restore-Request]\n */\n\n/**\n * @typedef HtmxAjaxHelperContext\n * @property {Element|string} [source]\n * @property {Event} [event]\n * @property {HtmxAjaxHandler} [handler]\n * @property {Element|string} [target]\n * @property {HtmxSwapStyle} [swap]\n * @property {Object|FormData} [values]\n * @property {Record<string,string>} [headers]\n * @property {string} [select]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxRequestConfig\n * @property {boolean} boosted\n * @property {boolean} useUrlParams\n * @property {FormData} formData\n * @property {Object} parameters formData proxy\n * @property {FormData} unfilteredFormData\n * @property {Object} unfilteredParameters unfilteredFormData proxy\n * @property {HtmxHeaderSpecification} headers\n * @property {Element} elt\n * @property {Element} target\n * @property {HttpVerb} verb\n * @property {HtmxElementValidationError[]} errors\n * @property {boolean} withCredentials\n * @property {number} timeout\n * @property {string} path\n * @property {Event} triggeringEvent\n */\n\n/**\n * @typedef {Object} HtmxResponseInfo\n * @property {XMLHttpRequest} xhr\n * @property {Element} target\n * @property {HtmxRequestConfig} requestConfig\n * @property {HtmxAjaxEtc} etc\n * @property {boolean} boosted\n * @property {string} select\n * @property {{requestPath: string, finalRequestPath: string, responsePath: string|null, anchor: string}} pathInfo\n * @property {boolean} [failed]\n * @property {boolean} [successful]\n * @property {boolean} [keepIndicators]\n */\n\n/**\n * @typedef {Object} HtmxAjaxEtc\n * @property {boolean} [returnPromise]\n * @property {HtmxAjaxHandler} [handler]\n * @property {string} [select]\n * @property {Element} [targetOverride]\n * @property {HtmxSwapStyle} [swapOverride]\n * @property {Record<string,string>} [headers]\n * @property {Object|FormData} [values]\n * @property {boolean} [credentials]\n * @property {number} [timeout]\n * @property {string} [push]\n * @property {string} [replace]\n * @property {string} [selectOOB]\n */\n\n/**\n * @typedef {Object} HtmxResponseHandlingConfig\n * @property {string} [code]\n * @property {boolean} swap\n * @property {boolean} [error]\n * @property {boolean} [ignoreTitle]\n * @property {string} [select]\n * @property {string} [target]\n * @property {string} [swapOverride]\n * @property {string} [event]\n */\n\n/**\n * @typedef {HtmxResponseInfo & {shouldSwap: boolean, serverResponse: any, isError: boolean, ignoreTitle: boolean, selectOverride:string, swapOverride:string}} HtmxBeforeSwapDetails\n */\n\n/**\n * @callback HtmxAjaxHandler\n * @param {Element} elt\n * @param {HtmxResponseInfo} responseInfo\n */\n\n/**\n * @typedef {(() => void)} HtmxSettleTask\n */\n\n/**\n * @typedef {Object} HtmxSettleInfo\n * @property {HtmxSettleTask[]} tasks\n * @property {Element[]} elts\n * @property {string} [title]\n */\n\n/**\n * @see https://github.com/bigskysoftware/htmx-extensions/blob/main/README.md\n * @typedef {Object} HtmxExtension\n * @property {(api: any) => void} init\n * @property {(name: string, event: CustomEvent) => boolean} onEvent\n * @property {(text: string, xhr: XMLHttpRequest, elt: Element) => string} transformResponse\n * @property {(swapStyle: HtmxSwapStyle) => boolean} isInlineSwap\n * @property {(swapStyle: HtmxSwapStyle, target: Node, fragment: Node, settleInfo: HtmxSettleInfo) => boolean|Node[]} handleSwap\n * @property {(xhr: XMLHttpRequest, parameters: FormData, elt: Node) => *|string|null} encodeParameters\n * @property {() => string[]|null} getSelectors\n */\nexport default htmx\n", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    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') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escapes ID selectors to handle special characters in IDs\n * (e.g. forward slashes, periods) so that they work with `document.querySelector`.\n *\n * @param {string} selector the selector to escape\n * @returns {string} the escaped selector\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsely appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation by forcing a reflow.\n *\n * @param {HTMLElement} element the element whose animation should be restarted\n * @returns {void}\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {Element[]} list the list of elements to traverse\n * @param {Element} activeElement the currently active element\n * @param {boolean} shouldGetNext whether to return the next element (`true`) or the previous one (`false`)\n * @param {boolean} isCycleAllowed whether to cycle back to the opposite end of the list when reaching the boundary\n * @returns {Element} the appropriate previous/next element from the list\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.9'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._startX = 0\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    this._deltaX = 0\n\n    if (!this._supportPointerEvents) {\n      this._startX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._startX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._startX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._startX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    if (activeIndicator) {\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n      activeIndicator.removeAttribute('aria-current')\n    }\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://github.com/floating-ui/popper-docs/blob/main/docs/v2/index.md)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://github.com/floating-ui/popper-docs/blob/main/docs/v2/index.md)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    // Read text attributes without coercing their values.\n    const title = this._element.getAttribute('data-bs-title')\n    const content = this._element.getAttribute('data-bs-content')\n\n    if (title !== null) {\n      dataAttributes.title = title\n    }\n\n    if (content !== null) {\n      dataAttributes.content = content\n    }\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.delegateTarget.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "// Marks the delete-confirm submit button (#submit in shared/modal_delete.html) as failed.\n// Only the request of the form that owns the button counts; htmx:responseError bubbles\n// from nested requests too.\nexport function resetDeleteConfirmButton(e) {\n  const submit = document.getElementById(\"submit\");\n  if (submit?.form?.contains(e.detail.elt)) {\n    submit.setAttribute(\"class\", \"btn btn-danger\");\n    submit.innerHTML = \"das geht nicht\";\n  }\n}\n", "function bindDropzone(\n  el,\n  { highlightClass, dropEffect, shouldIgnoreDragLeave, onDrop },\n) {\n  const setActive = (active) => el.classList.toggle(highlightClass, active);\n  const activate = (e) => {\n    e.preventDefault();\n    if (dropEffect) e.dataTransfer.dropEffect = dropEffect;\n    setActive(true);\n  };\n  el.addEventListener(\"dragenter\", activate);\n  el.addEventListener(\"dragover\", activate);\n  el.addEventListener(\"dragleave\", (e) => {\n    if (shouldIgnoreDragLeave?.(e)) return;\n    setActive(false);\n  });\n  el.addEventListener(\"drop\", (e) => {\n    setActive(false);\n    onDrop(e);\n  });\n}\n\nexport { bindDropzone };\n", "// Delegated replacements for htmx attributes that compile through `Function`\n// (`hx-vals=\"js:...\"`, `hx-on:*`): the enforced CSP has no 'unsafe-eval' (doc/csp.md).\n\n// An element marked `data-deal-merge-preview` sends its own value as `deal_id`; the preview\n// view reads that param, while the input's name is the merge form's field (survivor/loser).\nexport function wireDealMergePreview(target) {\n  target.addEventListener(\"htmx:configRequest\", (e) => {\n    const elt = e.detail.elt;\n    if (elt && elt.hasAttribute(\"data-deal-merge-preview\")) {\n      e.detail.parameters.deal_id = elt.value;\n    }\n  });\n}\n", "// A form marked `data-sofort-ausblenden` hides its htmx swap target (the invoice card) and\n// disables its submit buttons when the request starts, not when the server answers (BL-479).\n// The response replaces the card; a request that fails (error status, network, timeout)\n// shows and enables both again.\nfunction markiert(e) {\n  const form = e.detail.elt;\n  return form.hasAttribute(\"data-sofort-ausblenden\") ? form : null;\n}\n\nfunction setzeZustand(form, target, ausgeblendet) {\n  if (target) target.hidden = ausgeblendet;\n  for (const button of form.querySelectorAll(\"button[type=submit]\"))\n    button.disabled = ausgeblendet;\n}\n\nexport function sofortAusblenden(e) {\n  const form = markiert(e);\n  if (form) setzeZustand(form, e.detail.target, true);\n}\n\nexport function nachFehlerEinblenden(e) {\n  const form = markiert(e);\n  if (form && !e.detail.successful) setzeZustand(form, e.detail.target, false);\n}\n\n// The error of a failed step stands on the card, so a dialog the step came from (Originalrechnung)\n// has to go, or it covers the error and leaves its own submit button disabled (BL-1697).\nexport function dialogSchliessen(e) {\n  e.detail.elt?.closest(\"dialog\")?.close();\n}\n\n// A step sent from the Originalrechnung dialog is done once the view answers: the card behind it is\n// already redrawn or gone, so the dialog goes too instead of staying open over a disabled button (BL-2328).\nexport function nachAntwortSchliessen(e) {\n  if (markiert(e) && e.detail.successful) dialogSchliessen(e);\n}\n\n// A step the view refuses comes back as the card with the error on it. A request that gets no such\n// answer (server error, network, timeout) leaves the card as it was and says so here (BL-1697).\nexport function fehlerAufKarte(e) {\n  const karte = e.detail.target;\n  if (e.detail.successful || !karte?.matches(\"[data-karte]\")) return;\n  dialogSchliessen(e);\n  if (karte.querySelector(\"[data-karten-fehler]\")) return;\n  const meldung = document.createElement(\"div\");\n  meldung.className = \"alert alert-danger small py-1 px-2 mb-2\";\n  meldung.dataset.kartenFehler = \"\";\n  meldung.setAttribute(\"role\", \"alert\");\n  meldung.textContent = \"Aktion fehlgeschlagen. Bitte erneut versuchen.\";\n  karte.querySelector(\".card-body\").prepend(meldung);\n}\n", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nlet bfcacheRestoreTime = -1;\nexport const getBFCacheRestoreTime = () => bfcacheRestoreTime;\nexport const onBFCacheRestore = (cb) => {\n    addEventListener('pageshow', (event) => {\n        if (event.persisted) {\n            bfcacheRestoreTime = event.timeStamp;\n            cb(event);\n        }\n    }, true);\n};\n//# sourceMappingURL=bfcache.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getRating = (value, thresholds) => {\n    if (value > thresholds[1]) {\n        return 'poor';\n    }\n    if (value > thresholds[0]) {\n        return 'needs-improvement';\n    }\n    return 'good';\n};\nexport const bindReporter = (callback, metric, thresholds, reportAllChanges) => {\n    let prevValue;\n    let delta;\n    return (forceReport) => {\n        if (metric.value >= 0) {\n            if (forceReport || reportAllChanges) {\n                delta = metric.value - (prevValue ?? 0);\n                // Report the metric if there's a non-zero delta or if no previous\n                // value exists (which can happen in the case of the document becoming\n                // hidden when the metric value is 0).\n                // See: https://github.com/GoogleChrome/web-vitals/issues/14\n                if (delta || prevValue === undefined) {\n                    prevValue = metric.value;\n                    metric.delta = delta;\n                    metric.rating = getRating(metric.value, thresholds);\n                    callback(metric);\n                }\n            }\n        }\n    };\n};\n//# sourceMappingURL=bindReporter.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const doubleRAF = (cb) => {\n    requestAnimationFrame(() => requestAnimationFrame(() => cb()));\n};\n//# sourceMappingURL=doubleRAF.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const getNavigationEntry = () => {\n    const navigationEntry = performance.getEntriesByType('navigation')[0];\n    // Check to ensure the `responseStart` property is present and valid.\n    // In some cases a zero value is reported by the browser (for\n    // privacy/security reasons), and in other cases (bugs) the value is\n    // negative or is larger than the current page time. Ignore these cases:\n    // - https://github.com/GoogleChrome/web-vitals/issues/137\n    // - https://github.com/GoogleChrome/web-vitals/issues/162\n    // - https://github.com/GoogleChrome/web-vitals/issues/275\n    if (navigationEntry &&\n        navigationEntry.responseStart > 0 &&\n        navigationEntry.responseStart < performance.now()) {\n        return navigationEntry;\n    }\n};\n//# sourceMappingURL=getNavigationEntry.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getNavigationEntry } from './getNavigationEntry.js';\nexport const getActivationStart = () => {\n    return getNavigationEntry()?.activationStart ?? 0;\n};\n//# sourceMappingURL=getActivationStart.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { onBFCacheRestore } from './bfcache.js';\nimport { getActivationStart } from './getActivationStart.js';\nlet firstHiddenTime = -1;\nconst onHiddenFunctions = new Set();\nconst initHiddenTime = () => {\n    // If the document is hidden when this code runs, assume it was always\n    // hidden and the page was loaded in the background, with the one exception\n    // that visibility state is always 'hidden' during prerendering, so we have\n    // to ignore that case until prerendering finishes (see: `prerenderingchange`\n    // event logic below).\n    return document.visibilityState === 'hidden' && !document.prerendering\n        ? 0\n        : Infinity;\n};\nconst onVisibilityUpdate = (event) => {\n    // Handle changes to hidden state\n    if (document.visibilityState === 'hidden') {\n        if (event.type === 'visibilitychange') {\n            for (const onHiddenFunction of onHiddenFunctions) {\n                onHiddenFunction();\n            }\n        }\n        // If the document is 'hidden' and no previous hidden timestamp has been\n        // set (so is infinity), update it based on the current event data.\n        if (!isFinite(firstHiddenTime)) {\n            // If the event is a 'visibilitychange' event, it means the page was\n            // visible prior to this change, so the event timestamp is the first\n            // hidden time.\n            // However, if the event is not a 'visibilitychange' event, then it must\n            // be a 'prerenderingchange' event, and the fact that the document is\n            // still 'hidden' from the above check means the tab was activated\n            // in a background state and so has always been hidden.\n            firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n            // We no longer need the `prerenderingchange` event listener now we've\n            // set an initial init time so remove that\n            // (we'll keep the visibilitychange one for onHiddenFunction above)\n            removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n        }\n    }\n};\nexport const getVisibilityWatcher = (reset = false) => {\n    if (reset) {\n        firstHiddenTime = Infinity;\n    }\n    if (firstHiddenTime < 0) {\n        // Check if we have a previous hidden `visibility-state` performance entry.\n        const activationStart = getActivationStart();\n        /* eslint-disable indent */\n        const firstVisibilityStateHiddenTime = !document.prerendering\n            ? globalThis.performance\n                .getEntriesByType('visibility-state')\n                .find((e) => e.name === 'hidden' && e.startTime >= activationStart)\n                ?.startTime\n            : undefined;\n        /* eslint-enable indent */\n        // Prefer that, but if it's not available and the document is hidden when\n        // this code runs, assume it was hidden since navigation start. This isn't\n        // a perfect heuristic, but it's the best we can do until the\n        // `visibility-state` performance entry becomes available in all browsers.\n        firstHiddenTime = firstVisibilityStateHiddenTime ?? initHiddenTime();\n        // Listen for visibility changes so we can handle things like bfcache\n        // restores and/or prerender without having to examine individual\n        // timestamps in detail and also for onHidden function calls.\n        addEventListener('visibilitychange', onVisibilityUpdate, true);\n        // IMPORTANT: when a page is prerendering, its `visibilityState` is\n        // 'hidden', so in order to account for cases where this module checks for\n        // visibility during prerendering, an additional check after prerendering\n        // completes is also required.\n        addEventListener('prerenderingchange', onVisibilityUpdate, true);\n        // Reset the time on bfcache restores.\n        onBFCacheRestore(() => {\n            // Schedule a task in order to track the `visibilityState` once it's\n            // had an opportunity to change to visible in all browsers.\n            // https://bugs.chromium.org/p/chromium/issues/detail?id=1133363\n            setTimeout(() => {\n                firstHiddenTime = initHiddenTime();\n            });\n        });\n    }\n    return {\n        get firstHiddenTime() {\n            return firstHiddenTime;\n        },\n        onHidden(cb) {\n            onHiddenFunctions.add(cb);\n        },\n    };\n};\n//# sourceMappingURL=getVisibilityWatcher.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime } from './bfcache.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\nexport const initMetric = (name, value = -1, navigationType, navigationId = 0, navigationInteractionId, navigationURL, navigationStartTime) => {\n    const hardNavEntry = getNavigationEntry();\n    const hardNavId = hardNavEntry?.navigationId || 0;\n    let _navigationType = 'navigate';\n    if (navigationType) {\n        // If it was passed in, then use that\n        _navigationType = navigationType;\n    }\n    else if (getBFCacheRestoreTime() >= 0) {\n        _navigationType = 'back-forward-cache';\n    }\n    else if (hardNavEntry) {\n        if (document.prerendering || getActivationStart() > 0) {\n            _navigationType = 'prerender';\n        }\n        else if (document.wasDiscarded) {\n            _navigationType = 'restore';\n        }\n        else if (hardNavEntry.type) {\n            _navigationType = hardNavEntry.type.replace(/_/g, '-');\n        }\n    }\n    // Use `entries` type specific for the metric.\n    const entries = [];\n    return {\n        name,\n        value,\n        rating: 'good', // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n        delta: 0,\n        entries,\n        id: generateUniqueID(),\n        navigationType: _navigationType,\n        navigationId: navigationId || hardNavId,\n        navigationInteractionId: navigationInteractionId,\n        navigationURL: navigationURL || hardNavEntry?.name,\n        navigationStartTime: navigationStartTime || 0,\n    };\n};\n//# sourceMappingURL=initMetric.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = () => {\n    return `v6-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n//# sourceMappingURL=generateUniqueID.js.map", "/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst instanceMap = new WeakMap();\n/**\n * A function that accepts and identity object and a class object and returns\n * either a new instance of that class or an existing instance, if the\n * identity object was previously used.\n */\nexport function initUnique(identityObj, ClassObj) {\n    let classInstances = instanceMap.get(ClassObj);\n    if (!classInstances) {\n        classInstances = new WeakMap();\n        instanceMap.set(ClassObj, classInstances);\n    }\n    if (!classInstances.get(identityObj)) {\n        classInstances.set(identityObj, new ClassObj());\n    }\n    return classInstances.get(identityObj);\n}\n//# sourceMappingURL=initUnique.js.map", "/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class LayoutShiftManager {\n    _onAfterProcessingUnexpectedShift;\n    _sessionValue = 0;\n    _sessionEntries = [];\n    _processEntry(entry) {\n        // Only count layout shifts without recent user input.\n        if (entry.hadRecentInput)\n            return;\n        const firstSessionEntry = this._sessionEntries[0];\n        const lastSessionEntry = this._sessionEntries.at(-1);\n        // If the entry occurred less than 1 second after the previous entry\n        // and less than 5 seconds after the first entry in the session,\n        // include the entry in the current session. Otherwise, start a new\n        // session.\n        if (this._sessionValue &&\n            firstSessionEntry &&\n            lastSessionEntry &&\n            entry.startTime - lastSessionEntry.startTime < 1000 &&\n            entry.startTime - firstSessionEntry.startTime < 5000) {\n            this._sessionValue += entry.value;\n            this._sessionEntries.push(entry);\n        }\n        else {\n            this._sessionValue = entry.value;\n            this._sessionEntries = [entry];\n        }\n        this._onAfterProcessingUnexpectedShift?.(entry);\n    }\n}\n//# sourceMappingURL=LayoutShiftManager.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = (types, callback, opts = {}) => {\n    try {\n        const supportedTypes = types.filter((t) => PerformanceObserver.supportedEntryTypes.includes(t));\n        if (supportedTypes.length > 0) {\n            const po = new PerformanceObserver((list) => {\n                // Delay by a microtask to workaround a bug in Safari where the\n                // callback is invoked immediately, rather than in a separate task.\n                // See: https://github.com/GoogleChrome/web-vitals/issues/277\n                queueMicrotask(() => {\n                    const entries = list.getEntries();\n                    // When observing more than one entry type, entries from different\n                    // types can be delivered out of order, so sort by end time\n                    // (startTime + duration) to ensure they're in the right order.\n                    // See: https://github.com/w3c/performance-timeline/issues/224\n                    if (supportedTypes.length > 1) {\n                        entries.sort((a, b) => {\n                            const scoreA = a.startTime + a.duration;\n                            const scoreB = b.startTime + b.duration;\n                            return scoreA - scoreB;\n                        });\n                    }\n                    callback(entries);\n                });\n            });\n            for (const t of supportedTypes) {\n                po.observe({ type: t, buffered: true, ...opts });\n            }\n            return po;\n        }\n    }\n    catch {\n        // Do nothing.\n    }\n    return;\n};\n//# sourceMappingURL=observe.js.map", "/*\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const checkSoftNavsEnabled = (opts) => {\n    return (\n    // Firefox has a preference to disable this, which some people use so add a guard\n    globalThis.PerformanceObserver?.supportedEntryTypes?.includes('soft-navigation') &&\n        // Older implementations expose the value as an attribute rather than the\n        // method. We only support the newer method as that was what was launched\n        // to stable unflagged.\n        typeof globalThis.PerformanceSoftNavigation?.prototype\n            ?.getLargestInteractionContentfulPaint === 'function' &&\n        opts &&\n        opts.reportSoftNavs);\n};\n// Stores a soft navigation entry keyed by its navigationId, keeping only\n// the 2 most recent entries so the map cannot grow unbounded.\nexport const storeSoftNavEntry = (map, entry) => {\n    map.set(entry.navigationId, entry);\n    // Clean up older entries to prevent memory leaks, keeping only\n    // the 2 most recent entries.\n    if (map.size > 2) {\n        const firstKey = map.keys().next().value;\n        if (firstKey !== undefined) {\n            map.delete(firstKey);\n        }\n    }\n};\n//# sourceMappingURL=softNavs.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const runOnce = (cb) => {\n    let called = false;\n    return () => {\n        if (!called) {\n            cb();\n            called = true;\n        }\n    };\n};\n//# sourceMappingURL=runOnce.js.map", "/*\n * Copyright 2026 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class FCPEntryManager {\n    _softNavigationEntryMap;\n}\n//# sourceMappingURL=FCPEntryManager.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const whenActivated = (callback) => {\n    if (document.prerendering) {\n        addEventListener('prerenderingchange', callback, true);\n    }\n    else {\n        callback();\n    }\n};\n//# sourceMappingURL=whenActivated.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter.js';\nimport { checkSoftNavsEnabled, storeSoftNavEntry } from './lib/softNavs.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { FCPEntryManager } from './lib/FCPEntryManager.js';\nimport { observe } from './lib/observe.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { whenActivated } from './lib/whenActivated.js';\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nexport const FCPThresholds = [1800, 3000];\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nexport const onFCP = (onReport, opts = {}) => {\n    const softNavsEnabled = checkSoftNavsEnabled(opts);\n    whenActivated(() => {\n        // Create a new FCP entry manager for each page activation\n        // This allows us to track soft navigations separately\n        // needed when attribution is enabled.\n        const fcpEntryManager = initUnique(opts, FCPEntryManager);\n        const visibilityWatcher = getVisibilityWatcher();\n        let metric = initMetric('FCP');\n        let report;\n        const handleEntries = (entries) => {\n            for (const entry of entries) {\n                if (entry.name === 'first-contentful-paint') {\n                    po.disconnect();\n                    // Only report if the page wasn't hidden prior to FCP.\n                    if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n                        // The activationStart reference is used because FCP should be\n                        // relative to page activation rather than navigation start if the\n                        // page was prerendered. But in cases where `activationStart` occurs\n                        // after the FCP, this time should be clamped at 0.\n                        metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n                        metric.entries.push(entry);\n                        metric.navigationId = entry.navigationId || metric.navigationId;\n                        // FCP should only be reported once so can report right away\n                        report(true);\n                    }\n                }\n            }\n        };\n        const po = observe(['paint'], handleEntries);\n        if (po) {\n            report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n            // Only report after a bfcache restore if the `PerformanceObserver`\n            // successfully registered or the `paint` entry exists.\n            onBFCacheRestore((event) => {\n                metric = initMetric('FCP', -1, 'back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n                report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n                doubleRAF(() => {\n                    metric.value = performance.now() - event.timeStamp;\n                    report(true);\n                });\n            });\n        }\n        if (softNavsEnabled) {\n            // As first-contentful-paint is only reported once, we can handle soft\n            // navigations afterwards on their own for simplicity, as no need to\n            // observe both and sort the entries like for the other metrics\n            const handleSoftNavEntries = (entries) => {\n                entries.forEach((entry) => {\n                    // Store the soft navigation entries in the entry manager so that\n                    // they can be retrieved for attribution if necessary. This code\n                    // is only used when attribution is enabled which sets the\n                    // _softNavigationEntryMap.\n                    if (fcpEntryManager._softNavigationEntryMap && entry.navigationId) {\n                        storeSoftNavEntry(fcpEntryManager._softNavigationEntryMap, entry);\n                    }\n                    // Clamp FCP at 0. It should never be less, but better safe than sorry.\n                    const FCPTime = Math.max((entry.presentationTime || entry.paintTime || 0) - entry.startTime, 0);\n                    metric = initMetric('FCP', FCPTime, 'soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n                    report = bindReporter(onReport, metric, FCPThresholds, opts.reportAllChanges);\n                    report(true);\n                });\n            };\n            observe(['soft-navigation'], handleSoftNavEntries, opts);\n        }\n    });\n};\n//# sourceMappingURL=onFCP.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { LayoutShiftManager } from './lib/LayoutShiftManager.js';\nimport { observe } from './lib/observe.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { runOnce } from './lib/runOnce.js';\nimport { onFCP } from './onFCP.js';\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nexport const CLSThresholds = [0.1, 0.25];\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport, opts = {}) => {\n    const visibilityWatcher = getVisibilityWatcher();\n    // Start monitoring FCP so we can only report CLS if FCP is also reported.\n    // Note: this is done to match the current behavior of CrUX.\n    onFCP(runOnce(() => {\n        let metric = initMetric('CLS', 0);\n        let report;\n        const layoutShiftManager = initUnique(opts, LayoutShiftManager);\n        const initNewCLSMetric = (navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n            metric = initMetric('CLS', 0, navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n            layoutShiftManager._sessionValue = 0;\n            report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n        };\n        const updateAndReportMetric = (forceReport = false) => {\n            // If the current session value is larger than the current CLS value,\n            // update CLS and the entries contributing to it.\n            if (layoutShiftManager._sessionValue > metric.value) {\n                metric.value = layoutShiftManager._sessionValue;\n                metric.entries = layoutShiftManager._sessionEntries;\n            }\n            report(forceReport);\n        };\n        const handleSoftNavEntry = (entry) => {\n            updateAndReportMetric(true);\n            initNewCLSMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n        };\n        const handleEntries = (entries) => {\n            for (const entry of entries) {\n                if (entry.entryType === 'soft-navigation') {\n                    handleSoftNavEntry(entry);\n                    continue;\n                }\n                layoutShiftManager._processEntry(entry);\n            }\n            updateAndReportMetric();\n        };\n        const types = ['layout-shift'];\n        if (checkSoftNavsEnabled(opts)) {\n            types.push('soft-navigation');\n        }\n        const po = observe(types, handleEntries);\n        if (po) {\n            report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n            visibilityWatcher.onHidden(() => {\n                handleEntries(po.takeRecords());\n                report(true);\n            });\n            // Only report after a bfcache restore if the `PerformanceObserver`\n            // successfully registered.\n            onBFCacheRestore(() => {\n                initNewCLSMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n                doubleRAF(report);\n            });\n            // Queue a task to report (if nothing else triggers a report first).\n            // This allows CLS to be reported as soon as FCP fires when\n            // `reportAllChanges` is true.\n            setTimeout(report);\n        }\n    }));\n};\n//# sourceMappingURL=onCLS.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { observe } from '../observe.js';\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\nconst updateEstimate = (entries) => {\n    for (const entry of entries) {\n        if (entry.interactionId) {\n            minKnownInteractionId = Math.min(minKnownInteractionId, entry.interactionId);\n            maxKnownInteractionId = Math.max(maxKnownInteractionId, entry.interactionId);\n            interactionCountEstimate = maxKnownInteractionId\n                ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1\n                : 0;\n        }\n    }\n};\nlet po;\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = () => {\n    return po ? interactionCountEstimate : (performance.interactionCount ?? 0);\n};\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = () => {\n    if ('interactionCount' in performance || po)\n        return;\n    po = observe(['event'], updateEstimate, {\n        durationThreshold: 0,\n    });\n};\n//# sourceMappingURL=interactionCountPolyfill.js.map", "/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getInteractionCount } from './polyfills/interactionCountPolyfill.js';\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\nexport class InteractionManager {\n    /**\n     * The interaction count at the start of the current navigation, so p98\n     * interaction latencies only consider interactions since then.\n     *\n     * This is per-instance rather than module state: `initUnique()` gives every\n     * `onINP()` call its own manager, and a shared counter would let whichever\n     * instance resets first hide the interactions from all the others.\n     */\n    _prevInteractionCount = 0;\n    /**\n     * A list of longest interactions on the page (by latency) sorted so the\n     * longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER\n     * long.\n     */\n    _longestInteractionList = [];\n    /**\n     * A mapping of longest interactions by their interaction ID.\n     * This is used for faster lookup.\n     */\n    _longestInteractionMap = new Map();\n    _onBeforeProcessingEntry;\n    _onAfterProcessingINPCandidate;\n    /**\n     * Returns the interaction count since the start of the current navigation\n     * (or the full page lifecycle if there were no soft navs / bfcache restores).\n     */\n    _getInteractionCountForNavigation() {\n        return getInteractionCount() - this._prevInteractionCount;\n    }\n    _resetInteractions() {\n        this._prevInteractionCount = getInteractionCount();\n        this._longestInteractionList.length = 0;\n        this._longestInteractionMap.clear();\n    }\n    /**\n     * Returns the estimated p98 longest interaction based on the stored\n     * interaction candidates and the interaction count for the current page.\n     */\n    _estimateP98LongestInteraction(navigationType) {\n        const interactionCountForNavigation = this._getInteractionCountForNavigation();\n        const candidateInteractionIndex = Math.min(this._longestInteractionList.length - 1, Math.floor(interactionCountForNavigation / 50));\n        // If we have a non-zero interactionCountForNavigation but no\n        // candidateInteractionIndex, then it's below the 16ms limit\n        // so report a dummy 8ms interaction. This is only needed for\n        // soft-navs and bfcache restores as `first-input` handles the\n        // rest.\n        if (interactionCountForNavigation &&\n            candidateInteractionIndex === -1 &&\n            (navigationType === 'soft-navigation' ||\n                navigationType === 'back-forward-cache')) {\n            return {\n                _latency: 8,\n                id: -1,\n                entries: [],\n            };\n        }\n        return this._longestInteractionList[candidateInteractionIndex];\n    }\n    /**\n     * Takes a performance entry and adds it to the list of worst interactions\n     * if its duration is long enough to make it among the worst. If the\n     * entry is part of an existing interaction, it is merged and the latency\n     * and entries list is updated as needed.\n     */\n    _processEntry(entry) {\n        this._onBeforeProcessingEntry?.(entry);\n        // Skip further processing for entries that cannot be INP candidates.\n        if (!entry.interactionId)\n            return;\n        // The least-long of the 10 longest interactions.\n        const minLongestInteraction = this._longestInteractionList.at(-1);\n        let interaction = this._longestInteractionMap.get(entry.interactionId);\n        // Only process the entry if it's possibly one of the ten longest,\n        // or if it's part of an existing interaction.\n        if (interaction ||\n            this._longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n            // If the above conditions are false, `minLongestInteraction` will be set.\n            entry.duration > minLongestInteraction._latency) {\n            // If the interaction already exists, update it. Otherwise create one.\n            if (interaction) {\n                // If the new entry has a longer duration, replace the old entries,\n                // otherwise add to the array.\n                if (entry.duration > interaction._latency) {\n                    interaction.entries = [entry];\n                    interaction._latency = entry.duration;\n                }\n                else if (entry.duration === interaction._latency &&\n                    entry.startTime === interaction.entries[0].startTime) {\n                    interaction.entries.push(entry);\n                }\n            }\n            else {\n                interaction = {\n                    id: entry.interactionId,\n                    entries: [entry],\n                    _latency: entry.duration,\n                };\n                this._longestInteractionMap.set(interaction.id, interaction);\n                this._longestInteractionList.push(interaction);\n            }\n            // Sort the entries by latency (descending) and keep only the top ten.\n            this._longestInteractionList.sort((a, b) => b._latency - a._latency);\n            if (this._longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n                const removedInteractions = this._longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER);\n                for (const interaction of removedInteractions) {\n                    this._longestInteractionMap.delete(interaction.id);\n                }\n            }\n            // Call any post-processing on the interaction\n            this._onAfterProcessingINPCandidate?.(interaction);\n        }\n    }\n}\n//# sourceMappingURL=InteractionManager.js.map", "/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { runOnce } from './runOnce.js';\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nexport const whenIdleOrHidden = (cb) => {\n    // Cap the requestIdleCallback to 1 sec for very busy apps\n    // https://github.com/GoogleChrome/web-vitals/issues/754\n    // If not using rIC, then the setTimeout timeout should be 0\n    const timeout = 'requestIdleCallback' in globalThis ? 1000 : 0;\n    const rIC = globalThis.requestIdleCallback || setTimeout;\n    const cIC = globalThis.cancelIdleCallback || clearTimeout;\n    // If the document is hidden, run the callback immediately, otherwise\n    // race an idle callback with the next `visibilitychange` event.\n    if (document.visibilityState === 'hidden') {\n        cb();\n    }\n    else {\n        const wrappedCb = runOnce(cb);\n        let idleHandle = -1;\n        const onHidden = () => {\n            cIC(idleHandle);\n            wrappedCb();\n        };\n        addEventListener('visibilitychange', onHidden, { once: true, capture: true });\n        idleHandle = rIC(() => {\n            removeEventListener('visibilitychange', onHidden, { capture: true });\n            wrappedCb();\n        }, { timeout: timeout });\n    }\n};\n//# sourceMappingURL=whenIdleOrHidden.js.map", "/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { InteractionManager } from './lib/InteractionManager.js';\nimport { observe } from './lib/observe.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { whenIdleOrHidden } from './lib/whenIdleOrHidden.js';\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nexport const INPThresholds = [200, 500];\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\n// Event Timing entries have their durations rounded to the nearest 8ms,\n// so a duration of 40ms would be any event that spans 2.5 or more frames\n// at 60Hz. This threshold is chosen to strike a balance between usefulness\n// and performance. Running this callback for any interaction that spans\n// just one or two frames is likely not worth the insight that could be\n// gained.\nconst DEFAULT_DURATION_THRESHOLD = 40;\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed\n * to control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 will not\n * be reported. To avoid reporting no interactions in these cases, the library\n * will fall back to the input delay of the first interaction. Note that this\n * will not affect your 75th percentile INP value unless that value is also\n * less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport, opts = {}) => {\n    // Return if the browser doesn't support all APIs needed to measure INP.\n    if (!(globalThis.PerformanceEventTiming &&\n        'interactionId' in PerformanceEventTiming.prototype)) {\n        return;\n    }\n    const visibilityWatcher = getVisibilityWatcher();\n    whenActivated(() => {\n        // TODO(philipwalton): remove once the polyfill is no longer needed.\n        initInteractionCountPolyfill();\n        let metric = initMetric('INP');\n        let report;\n        const interactionManager = initUnique(opts, InteractionManager);\n        const initNewINPMetric = (navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n            interactionManager._resetInteractions();\n            metric = initMetric('INP', -1, navigationType, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n            report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n        };\n        const updateINPMetric = () => {\n            const inp = interactionManager._estimateP98LongestInteraction(metric.navigationType);\n            if (inp && inp._latency !== metric.value) {\n                metric.value = inp._latency;\n                metric.entries = inp.entries;\n                report();\n            }\n        };\n        const handleSoftNavEntry = (entry) => {\n            updateINPMetric();\n            report(true);\n            initNewINPMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n        };\n        const handleEntries = (entries, forceReport = false) => {\n            // Queue the `handleEntries()` callback in the next idle task.\n            // This is needed to increase the chances that all event entries that\n            // occurred between the user interaction and the next paint\n            // have been dispatched. Note: there is currently an experiment\n            // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n            // 123+ that if rolled out fully may make this no longer necessary.\n            whenIdleOrHidden(() => {\n                for (const entry of entries) {\n                    if (entry.entryType === 'soft-navigation') {\n                        handleSoftNavEntry(entry);\n                        continue;\n                    }\n                    interactionManager._processEntry(entry);\n                }\n                updateINPMetric();\n                if (forceReport) {\n                    report(true);\n                }\n            });\n        };\n        const types = ['event', 'first-input'];\n        if (checkSoftNavsEnabled(opts)) {\n            types.push('soft-navigation');\n        }\n        const po = observe(types, handleEntries, {\n            ...opts,\n            durationThreshold: opts.durationThreshold ?? DEFAULT_DURATION_THRESHOLD,\n        });\n        report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n        if (po) {\n            visibilityWatcher.onHidden(() => {\n                handleEntries(po.takeRecords(), true);\n            });\n            // Only report after a bfcache restore if the `PerformanceObserver`\n            // successfully registered.\n            onBFCacheRestore(() => {\n                initNewINPMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n            });\n        }\n    });\n};\n//# sourceMappingURL=onINP.js.map", "/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class LCPEntryManager {\n    _onBeforeProcessingEntry;\n    _softNavigationEntryMap;\n    _processEntry(entry) {\n        this._onBeforeProcessingEntry?.(entry);\n    }\n}\n//# sourceMappingURL=LCPEntryManager.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LCPEntryManager } from './lib/LCPEntryManager.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { bindReporter } from './lib/bindReporter.js';\nimport { doubleRAF } from './lib/doubleRAF.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { checkSoftNavsEnabled, storeSoftNavEntry } from './lib/softNavs.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { initUnique } from './lib/initUnique.js';\nimport { observe } from './lib/observe.js';\nimport { whenActivated } from './lib/whenActivated.js';\nimport { whenIdleOrHidden } from './lib/whenIdleOrHidden.js';\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nexport const LCPThresholds = [2500, 4000];\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nexport const onLCP = (onReport, opts = {}) => {\n    // As InteractionContentfulPaint entries used by soft navs can emit after\n    // LCP is finalized, we need a flag to know to ignore them.\n    let isFinalized = false;\n    const softNavsEnabled = checkSoftNavsEnabled(opts);\n    whenActivated(() => {\n        let visibilityWatcher = getVisibilityWatcher();\n        let metric = initMetric('LCP');\n        let report;\n        const lcpEntryManager = initUnique(opts, LCPEntryManager);\n        const initNewLCPMetric = (navigation, navigationId, navigationInteractionId, navigationURL, navigationStartTime) => {\n            metric = initMetric('LCP', -1, navigation, navigationId, navigationInteractionId, navigationURL, navigationStartTime);\n            report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n            // Reset the finalized flag\n            isFinalized = false;\n            // If it's a soft nav, then need to reset the visibilityWatcher\n            if (navigation === 'soft-navigation') {\n                visibilityWatcher = getVisibilityWatcher(true);\n            }\n        };\n        const handleSoftNavEntry = (entry) => {\n            if (lcpEntryManager._softNavigationEntryMap && entry.navigationId) {\n                storeSoftNavEntry(lcpEntryManager._softNavigationEntryMap, entry);\n            }\n            if (!isFinalized)\n                report(true);\n            initNewLCPMetric('soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n            // Soft Navs should contain the largest paint until now, so handle that\n            // as if it just happened, then listen for more.\n            // It can however be null in rare circumstances\n            // (see https://github.com/GoogleChrome/web-vitals/issues/725)\n            const largestInteractionContentfulPaint = entry.getLargestInteractionContentfulPaint?.();\n            if (largestInteractionContentfulPaint) {\n                handleEntries([largestInteractionContentfulPaint]);\n            }\n        };\n        const handleEntries = (entries) => {\n            // If reportAllChanges is set or soft navs is enabled then call this\n            // function for each entry, otherwise only consider the last one.\n            if (!opts.reportAllChanges && !softNavsEnabled) {\n                entries = entries.slice(-1);\n            }\n            for (const entry of entries) {\n                if (!entry)\n                    continue;\n                if (entry.entryType === 'soft-navigation') {\n                    handleSoftNavEntry(entry);\n                    continue;\n                }\n                let value = 0;\n                let metricEntries = [];\n                let renderTime = entry.startTime;\n                if (entry.entryType === 'largest-contentful-paint') {\n                    // The startTime attribute returns the value of the renderTime if it is\n                    // not 0, and the value of the loadTime otherwise. The activationStart\n                    // reference is used because LCP should be relative to page activation\n                    // rather than navigation start if the page was prerendered. But in cases\n                    // where `activationStart` occurs after the LCP, this time should be\n                    // clamped at 0.\n                    value = Math.max(entry.startTime - getActivationStart(), 0);\n                    lcpEntryManager._processEntry(entry);\n                    metricEntries = [entry];\n                }\n                else if (entry.entryType === 'interaction-contentful-paint') {\n                    const ICPEntry = entry;\n                    // InteractionContentfulPaints should only happen after a\n                    // PerformanceSoftNavigation so the metric should have been set\n                    // with a non-zero navigationId mapping to a soft nav.\n                    if (!metric.navigationId)\n                        continue;\n                    // Ignore interactions not for this soft nav\n                    // (either paints that have bled into this interaction or paints when\n                    // we should have already finalized)\n                    if ('interactionId' in ICPEntry &&\n                        ICPEntry.interactionId != metric.navigationInteractionId) {\n                        continue;\n                    }\n                    renderTime = ICPEntry.largestContentfulPaint?.renderTime || 0;\n                    // Paints should never be less than 0 but add cap just in case\n                    value = Math.max(renderTime - entry.startTime, 0);\n                    if (ICPEntry.largestContentfulPaint) {\n                        lcpEntryManager._processEntry(ICPEntry.largestContentfulPaint);\n                        metricEntries = [ICPEntry.largestContentfulPaint];\n                    }\n                }\n                // Only report if the page wasn't hidden prior to LCP.\n                if (renderTime < visibilityWatcher.firstHiddenTime) {\n                    metric.value = value;\n                    metric.entries = metricEntries;\n                    report();\n                }\n            }\n        };\n        const types = ['largest-contentful-paint'];\n        if (softNavsEnabled) {\n            types.push('interaction-contentful-paint', 'soft-navigation');\n        }\n        const po = observe(types, handleEntries);\n        if (po) {\n            report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n            const finalizeEventTypes = ['keydown', 'click', 'visibilitychange'];\n            const finalizeLCP = (event) => {\n                if (event.isTrusted && !isFinalized) {\n                    // Wrap the listener in an idle callback so it's run in a separate\n                    // task to reduce potential INP impact.\n                    // https://github.com/GoogleChrome/web-vitals/issues/383\n                    const metricIdToFinalize = metric.id;\n                    whenIdleOrHidden(() => {\n                        if (!isFinalized) {\n                            if (!softNavsEnabled) {\n                                // Do some clean up since these won't be needed anymore.\n                                po.disconnect();\n                                for (const type of finalizeEventTypes) {\n                                    removeEventListener(type, finalizeLCP, { capture: true });\n                                }\n                            }\n                            // As this is in a whenIdleOrHidden check, whether we're still\n                            // on the metric you meant to finalize, and ignore if we've moved\n                            // on in the meantime.\n                            if (metricIdToFinalize === metric.id) {\n                                isFinalized = true;\n                                report(true);\n                            }\n                        }\n                    });\n                }\n            };\n            // Finalize the current LCP after input or visibilitychange.\n            // Although the browser will automatically stop emitting entries in these\n            // cases, we don't know it's finalized, so we track to allow early report.\n            // Note: while scrolling is an input that stops LCP observation, it's\n            // unreliable since it can be programmatically generated.\n            // See: https://github.com/GoogleChrome/web-vitals/issues/75\n            for (const type of finalizeEventTypes) {\n                addEventListener(type, finalizeLCP, {\n                    capture: true,\n                });\n            }\n            // Only report after a bfcache restore if the `PerformanceObserver`\n            // successfully registered.\n            onBFCacheRestore((event) => {\n                initNewLCPMetric('back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n                report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n                doubleRAF(() => {\n                    metric.value = performance.now() - event.timeStamp;\n                    isFinalized = true;\n                    report(true);\n                });\n            });\n        }\n    });\n};\n//# sourceMappingURL=onLCP.js.map", "/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { bindReporter } from './lib/bindReporter.js';\nimport { checkSoftNavsEnabled } from './lib/softNavs.js';\nimport { getNavigationEntry } from './lib/getNavigationEntry.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { getBFCacheRestoreTime, onBFCacheRestore } from './lib/bfcache.js';\nimport { whenActivated } from './lib/whenActivated.js';\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nexport const TTFBThresholds = [800, 1800];\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n    if (document.prerendering) {\n        whenActivated(() => whenReady(callback));\n    }\n    else if (document.readyState !== 'complete') {\n        addEventListener('load', () => whenReady(callback), true);\n    }\n    else {\n        // Queue a task so the callback runs after `loadEventEnd`.\n        setTimeout(callback);\n    }\n};\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport, opts = {}) => {\n    const softNavsEnabled = checkSoftNavsEnabled(opts);\n    let metric = initMetric('TTFB');\n    let report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n    whenReady(() => {\n        const hardNavEntry = getNavigationEntry();\n        if (hardNavEntry) {\n            const responseStart = hardNavEntry.responseStart;\n            // The activationStart reference is used because TTFB should be\n            // relative to page activation rather than navigation start if the\n            // page was prerendered. But in cases where `activationStart` occurs\n            // after the first byte is received, this time should be clamped at 0.\n            metric.value = Math.max(responseStart - getActivationStart(), 0);\n            metric.entries = [hardNavEntry];\n            report(true);\n            // Only report TTFB after bfcache restores if a `navigation` entry\n            // was reported for the initial load.\n            onBFCacheRestore(() => {\n                metric = initMetric('TTFB', 0, 'back-forward-cache', metric.navigationId, metric.navigationInteractionId, metric.navigationURL, getBFCacheRestoreTime());\n                report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n                report(true);\n            });\n            // Listen for soft-navigation entries and emit a dummy 0 TTFB entry\n            if (softNavsEnabled) {\n                const reportSoftNavTTFBs = (entries) => {\n                    entries.forEach((entry) => {\n                        if (entry.navigationId) {\n                            metric = initMetric('TTFB', 0, 'soft-navigation', entry.navigationId, entry.interactionId, entry.name, entry.startTime);\n                            metric.entries = [entry];\n                            report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n                            report(true);\n                        }\n                    });\n                };\n                observe(['soft-navigation'], reportSoftNavTTFBs, opts);\n            }\n        }\n    });\n};\n//# sourceMappingURL=onTTFB.js.map", "// Shared fetch helper: injects the Django CSRF token + JSON default headers.\n//\n// Imported (and inlined by esbuild) into the per-page entry bundles \u2014 it is a\n// shared module, NOT its own esbuild entry. Keep it small and dependency-free.\n\n// Read the CSRF token from the hidden form input rendered by Django's\n// {% csrf_token %}. This is the same source as the page-level `csrftoken`\n// global defined in project_base.html, so behaviour is unchanged.\nexport function getCsrfToken() {\n  return document.querySelector(\"[name=csrfmiddlewaretoken]\")?.value ?? \"\";\n}\n\n// Drop-in replacement for fetch() that adds the CSRF token and JSON default\n// headers. Callers may override any header (or any other fetch option) by\n// passing it in `opts`; caller-supplied headers win over the defaults.\nexport function safeFetch(url, opts = {}) {\n  const { headers, ...rest } = opts;\n  return fetch(url, {\n    ...rest,\n    headers: {\n      Accept: \"application/json\",\n      \"Content-Type\": \"application/json\",\n      \"X-CSRFToken\": getCsrfToken(),\n      ...headers,\n    },\n  });\n}\n", "// Where an interaction's clock starts. htmx raises htmx:confirm with the triggering event before\n// htmx:beforeRequest; a request held there (the native hx-confirm dialog, or a handler that calls\n// detail.issueRequest later: pending autosaves, the checklist upload) starts at htmx:beforeRequest,\n// so the time spent reading the dialog or waiting on that work is not counted as latency.\nconst aufgehalten = new WeakSet();\n\nexport function wireAufgehalten(target = document) {\n  target.addEventListener(\n    \"htmx:confirm\",\n    (e) => {\n      const ausloeser = e.detail?.triggeringEvent;\n      if (!ausloeser) return;\n      if (e.detail.question) aufgehalten.add(ausloeser);\n      const issueRequest = e.detail.issueRequest;\n      e.detail.issueRequest = (skipConfirmation) => {\n        aufgehalten.add(ausloeser);\n        return issueRequest(skipConfirmation);\n      };\n    },\n    true,\n  );\n}\n\nexport function startzeit(ausloeser) {\n  return aufgehalten.has(ausloeser) ? performance.now() : ausloeser.timeStamp;\n}\n", "// Interaction latency (BL-1185, doc/frontend.md \u00A7 \"Interaktionszeiten\"): for every htmx request a user\n// event triggered, the time from that event to the first frame after the request started (feedback)\n// and to the response being swapped in (dauer); plus INP per page. Batched to /interaktionszeit/ via\n// sendBeacon. A failed measurement or beacon is dropped silently; nothing here may reach the user.\nimport htmx from \"htmx.org\";\nimport { onINP } from \"web-vitals\";\nimport { getCsrfToken } from \"./utils/fetch.js\";\nimport { startzeit, wireAufgehalten } from \"./utils/interaktionszeit-start.js\";\n\nconst ENDPUNKT = \"/interaktionszeit/\";\nconst STAPEL = 20;\nconst warteschlange = [];\n\nfunction senden() {\n  if (!warteschlange.length) return;\n  try {\n    const daten = new FormData();\n    daten.append(\"csrfmiddlewaretoken\", getCsrfToken());\n    daten.append(\"messungen\", JSON.stringify(warteschlange.splice(0)));\n    navigator.sendBeacon(ENDPUNKT, daten);\n  } catch {\n    // reporting is best effort\n  }\n}\n\nfunction merken(messung) {\n  warteschlange.push(messung);\n  if (warteschlange.length >= STAPEL || document.visibilityState === \"hidden\") senden();\n}\n\ndocument.addEventListener(\"visibilitychange\", () => {\n  if (document.visibilityState === \"hidden\") senden();\n});\nwindow.addEventListener(\"pagehide\", senden);\nwireAufgehalten();\n\nonINP((metric) =>\n  merken({ art: \"inp\", seite: location.pathname, dauer_ms: Math.round(metric.value) }),\n);\n\nhtmx.on(\"htmx:beforeRequest\", (e) => {\n  const ausloeser = e.detail.requestConfig?.triggeringEvent;\n  const xhr = e.detail.xhr;\n  if (!ausloeser?.isTrusted || !xhr) return;\n  const start = startzeit(ausloeser);\n  const messung = {\n    art: \"htmx\",\n    seite: location.pathname,\n    ziel: e.detail.pathInfo?.requestPath,\n    methode: e.detail.requestConfig.verb,\n    ausloeser: ausloeser.type,\n  };\n  const fertig = () => {\n    if (messung.feedback_ms !== undefined && messung.dauer_ms !== undefined)\n      merken(messung);\n  };\n  requestAnimationFrame(() =>\n    setTimeout(() => {\n      messung.feedback_ms = Math.round(performance.now() - start);\n      fertig();\n    }),\n  );\n  // htmx swaps inside the xhr's load handler, so loadend fires after the swap.\n  xhr.addEventListener(\"loadend\", () => {\n    messung.dauer_ms = Math.round(performance.now() - start);\n    messung.status = xhr.status;\n    fertig();\n  });\n});\n", "// Pure helpers for the Projekt-Picker search-prefix hint. The recognised-term pattern mirrors\n// `_PREFIX_TERM` in dispotool/services/projekt_suche.py.\n\nconst UNBEKANNTES_PRAEFIX = /(?<!\\S)([A-Za-z\u00C4\u00D6\u00DC\u00E4\u00F6\u00FC\u00DF]{2,}):/g;\n\nfunction escapeRegExp(text) {\n  return text.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n// Single regex source for a recognised `prefix:value` / `prefix:\"value with blanks\"` term.\nfunction praefixTerm(prefixes) {\n  const alternation = prefixes.map(escapeRegExp).join(\"|\");\n  return new RegExp(`(?<!\\\\S)(${alternation}):(?:\"([^\"]*)\"|(\\\\S*))`, \"gi\");\n}\n\nexport function parseSuchpraefixe(query, prefixes) {\n  const bekannt = praefixTerm(prefixes);\n  const erkannt = [];\n  const leer = [];\n  const rest = query.replace(bekannt, (_treffer, praefix, quoted, bare) => {\n    const wert = (quoted ?? bare).trim();\n    const name = praefix.toLowerCase();\n    if (wert) erkannt.push({ praefix: name, wert });\n    else if (!leer.includes(name)) leer.push(name);\n    return \" \";\n  });\n  const unbekannt = [];\n  for (const [, name] of rest.matchAll(UNBEKANNTES_PRAEFIX)) {\n    if (!unbekannt.includes(name)) unbekannt.push(name);\n  }\n  return { erkannt, unbekannt, leer };\n}\n\nexport const HINWEIS_EINLEITUNG = \"Eingrenzen mit\";\nexport const HINWEIS_BEISPIEL = '\u2013 z. B. plz:14473 oder ort:\"Bad Belzig\"';\n\nexport function hinweisText(prefixes) {\n  const liste = prefixes.map((praefix) => `${praefix}:`).join(\" \");\n  return `${HINWEIS_EINLEITUNG} ${liste} ${HINWEIS_BEISPIEL}`;\n}\n\nfunction wertZuText(wert) {\n  return /\\s/.test(wert) ? `\"${wert}\"` : wert;\n}\n\n// Serialises chips ({ praefix, wert }) plus the free text into the query string the server parses.\nexport function chipsZuText(chips, rest) {\n  const terme = chips.map(({ praefix, wert }) => `${praefix}:${wertZuText(wert)}`);\n  return [...terme, rest.trim()].filter(Boolean).join(\" \");\n}\n\n// Free text left in the input after a chip was cut out; the trailing space keeps the next word apart.\nexport function restFuerEingabe(rest) {\n  const text = rest.trim();\n  return text ? `${text} ` : \"\";\n}\n\n// Splits a query into chips (recognised prefix terms with a value) and the remaining free text;\n// terms without a value (`plz:`) and unknown prefixes stay in the free text.\nexport function textZuChips(text, prefixes) {\n  const chips = [];\n  const rest = text.replace(praefixTerm(prefixes), (treffer, praefix, quoted, bare) => {\n    const wert = (quoted ?? bare).trim();\n    if (!wert) return treffer;\n    chips.push({ praefix: praefix.toLowerCase(), wert });\n    return \" \";\n  });\n  return { chips, rest: rest.replace(/\\s+/g, \" \").trim() };\n}\n\nexport function rueckmeldung({ erkannt, unbekannt, leer }) {\n  return [\n    ...erkannt.map(({ praefix, wert }) => ({\n      text: `${praefix}: ${wert}`,\n      klasse: \"text-bg-secondary\",\n    })),\n    ...unbekannt.map((name) => ({\n      text: `${name}: als Text gesucht`,\n      klasse: \"text-bg-warning\",\n    })),\n    ...leer.map((praefix) => ({\n      text: `${praefix}: ohne Wert \u2013 ignoriert`,\n      klasse: \"text-bg-warning\",\n    })),\n  ];\n}\n", "// Chip tokenizer for the navbar project search (shared/templates/project/project_search_field.html).\n// `prefix:value` terms become chips; on submit chips and free text are serialised into the hidden\n// `text` field. Without the tokenizer markup (or without JS) the plain visible `text` input submits.\nimport {\n  chipsZuText,\n  HINWEIS_BEISPIEL,\n  HINWEIS_EINLEITUNG,\n  parseSuchpraefixe,\n  restFuerEingabe,\n  rueckmeldung,\n  textZuChips,\n} from \"./projekt-suchpraefix.js\";\n\nfunction element(tag, className, text) {\n  const node = document.createElement(tag);\n  if (className) node.className = className;\n  if (text !== undefined) node.textContent = text;\n  return node;\n}\n\nfunction mountTokenizer(box) {\n  const form = box.closest(\"form\");\n  const input = box.querySelector(\"[data-search-input]\");\n  const hidden = form?.querySelector(\"[data-search-value]\");\n  const prefixes = (box.dataset.searchPrefixes ?? \"\").split(/\\s+/).filter(Boolean);\n  if (!form || !input || !hidden || !prefixes.length || box.dataset.tokenizerReady)\n    return;\n  box.dataset.tokenizerReady = \"true\";\n\n  const placeholder = input.placeholder;\n  let chips = [];\n\n  function focusEnd() {\n    input.focus();\n    input.setSelectionRange(input.value.length, input.value.length);\n  }\n\n  function renderChips() {\n    for (const node of box.querySelectorAll(\".chip\")) node.remove();\n    for (const chip of chips) input.before(chipElement(chip));\n    input.placeholder = chips.length ? \"\" : placeholder;\n  }\n\n  function removeChip(chip) {\n    chips = chips.filter((other) => other !== chip);\n    renderChips();\n    focusEnd();\n  }\n\n  function editChip(chip) {\n    chips = chips.filter((other) => other !== chip);\n    input.value = [input.value.trim(), chipsZuText([chip], \"\")]\n      .filter(Boolean)\n      .join(\" \");\n    renderChips();\n    focusEnd();\n    updateWarnings();\n  }\n\n  function chipElement(chip) {\n    const label = `${chip.praefix} ${chip.wert}`;\n    const node = element(\"span\", \"chip\");\n    node.dataset.praefix = chip.praefix;\n    const edit = element(\"button\", \"chip-edit\");\n    edit.type = \"button\";\n    edit.setAttribute(\"aria-label\", `${label} bearbeiten`);\n    const wert = element(\"span\", \"chip-wert\", chip.wert);\n    wert.title = chip.wert;\n    edit.append(element(\"b\", \"\", `${chip.praefix}:`), wert);\n    edit.addEventListener(\"click\", () => editChip(chip));\n    edit.addEventListener(\"keydown\", (event) => {\n      if (event.key !== \"Delete\" && event.key !== \"Backspace\") return;\n      event.preventDefault();\n      removeChip(chip);\n    });\n    const remove = element(\"button\", \"chip-remove\", \"\u00D7\");\n    remove.type = \"button\";\n    remove.setAttribute(\"aria-label\", `${label} entfernen`);\n    remove.addEventListener(\"click\", () => removeChip(chip));\n    node.append(edit, remove);\n    return node;\n  }\n\n  // An odd number of quotes means a quoted value is still being typed.\n  function commitPending() {\n    if ((input.value.match(/\"/g) ?? []).length % 2) return false;\n    const { chips: neu, rest } = textZuChips(input.value, prefixes);\n    if (!neu.length) return false;\n    chips = [...chips, ...neu];\n    input.value = restFuerEingabe(rest);\n    renderChips();\n    return true;\n  }\n\n  const hint = element(\"div\", \"search-hint small\");\n  hint.id = \"search-hint\";\n  const line = element(\"div\", \"\", `${HINWEIS_EINLEITUNG} `);\n  for (const praefix of prefixes) {\n    const code = element(\"button\", \"search-hint-code\", `${praefix}:`);\n    code.type = \"button\";\n    code.dataset.praefix = praefix;\n    code.setAttribute(\"aria-label\", `Pr\u00E4fix ${praefix}: einf\u00FCgen`);\n    line.append(code, \" \");\n  }\n  line.append(HINWEIS_BEISPIEL);\n  const warnungen = element(\"div\", \"d-flex flex-wrap gap-1 mt-1\");\n  warnungen.setAttribute(\"role\", \"status\");\n  hint.append(line, warnungen);\n  form.append(hint);\n  input.setAttribute(\"aria-describedby\", hint.id);\n\n  function updateWarnings() {\n    const badges = rueckmeldung(parseSuchpraefixe(input.value, prefixes)).filter(\n      ({ klasse }) => klasse === \"text-bg-warning\",\n    );\n    warnungen.replaceChildren(\n      ...badges.map(({ text, klasse }) => element(\"span\", `badge ${klasse}`, text)),\n    );\n  }\n\n  hint.addEventListener(\"mousedown\", (event) => event.preventDefault());\n  hint.addEventListener(\"click\", (event) => {\n    const code = event.target.closest(\".search-hint-code\");\n    if (!code) return;\n    input.value = `${input.value.trim()} ${code.dataset.praefix}:`.trim();\n    focusEnd();\n    updateWarnings();\n  });\n\n  box.addEventListener(\"click\", (event) => {\n    if (event.target === box) focusEnd();\n  });\n  input.addEventListener(\"input\", () => {\n    if (/\\s$/.test(input.value)) commitPending();\n    updateWarnings();\n  });\n  input.addEventListener(\"keydown\", (event) => {\n    if (event.key === \"Enter\" && commitPending()) {\n      event.preventDefault();\n      updateWarnings();\n    } else if (event.key === \"Backspace\" && input.value === \"\" && chips.length) {\n      event.preventDefault();\n      editChip(chips[chips.length - 1]);\n    }\n  });\n  form.addEventListener(\"submit\", () => {\n    commitPending();\n    hidden.value = chipsZuText(chips, input.value);\n  });\n\n  const start = textZuChips(hidden.value || input.value, prefixes);\n  chips = start.chips;\n  input.value = start.rest;\n  renderChips();\n  updateWarnings();\n  input.removeAttribute(\"name\");\n  hidden.disabled = false;\n}\n\nfunction mountAll() {\n  for (const box of document.querySelectorAll(\"[data-search-tokenizer]\")) {\n    try {\n      mountTokenizer(box);\n    } catch (error) {\n      console.error(\"navbar-suche: tokenizer not mounted\", error);\n    }\n  }\n  document\n    .getElementById(\"navbar-search\")\n    ?.addEventListener(\"shown.bs.collapse\", (event) => {\n      event.target.querySelector(\"[data-search-input]\")?.focus();\n    });\n}\n\nif (document.readyState === \"loading\") {\n  document.addEventListener(\"DOMContentLoaded\", mountAll);\n} else {\n  mountAll();\n}\n", "import htmx from \"htmx.org\";\n\nwindow.htmx = htmx;\n\nimport * as bootstrap from \"bootstrap\";\n\nwindow.bootstrap = bootstrap;\n\nimport { resetDeleteConfirmButton } from \"./utils/delete-confirm.js\";\nimport { bindDropzone } from \"./utils/dropzone.js\";\nimport { wireDealMergePreview } from \"./utils/htmx-request-params.js\";\nimport {\n  dialogSchliessen,\n  fehlerAufKarte,\n  nachAntwortSchliessen,\n  nachFehlerEinblenden,\n  sofortAusblenden,\n} from \"./utils/optimistisch.js\";\n\nwindow.bindDropzone = bindDropzone;\n\nimport \"./base.css\";\nimport \"./interaktionszeit.js\";\nimport \"./navbar-suche.js\";\n\n// Opens the bootstrap dropdown that owns a htmx swap target once its content\n// has settled \u2014 used by shared/dropdowns/{documents,projekt_related,stakeholder}.html,\n// whose toggle button id is always the target id with \"target-\" -> \"dropdownMenuLink-\".\nhtmx.on(\"htmx:afterSettle\", (e) => {\n  if (e.detail.target.id && e.detail.target.id.startsWith(\"target-\")) {\n    const btn = document.getElementById(\n      e.detail.target.id.replace(\"target-\", \"dropdownMenuLink-\"),\n    );\n    if (btn) new bootstrap.Dropdown(btn).toggle();\n  }\n});\n\n// Bootstrap has no Popper collision handling inside a navbar, and the user's layout can put the toggle of an\n// end-aligned menu (Supply, Mehr) so far left that the menu would cross the page edge, out of scroll reach.\ndocument.addEventListener(\"shown.bs.dropdown\", ({ target: toggle }) => {\n  const menu = toggle.nextElementSibling;\n  if (toggle.closest(\"#navigation-bar\") && menu.getBoundingClientRect().left < 0) {\n    menu.classList.replace(\"dropdown-menu-end\", \"dropdown-menu-start\");\n  }\n});\n\n// Delegated Bootstrap tooltip initializer. Replaces the identical inline\n// <script> that used to live in checklist.html, card_builder.html,\n// projekt_comment_card.html, modals/appointment.html and the two read_infos.html\n// templates. Dispose+recreate so re-running on htmx-swapped\n// content never leaves duplicate instances.\nfunction initTooltips(root = document) {\n  for (const el of root.querySelectorAll('[data-bs-toggle=\"tooltip\"]')) {\n    bootstrap.Tooltip.getInstance(el)?.dispose();\n    const modal = el.closest(\".modal\");\n    new bootstrap.Tooltip(el, modal ? { container: \"body\" } : {});\n  }\n}\n\n// Clicking any tooltip trigger hides all open tooltips (preserved from the old\n// inline blocks). Bound once, delegated on document.\ndocument.addEventListener(\"click\", (e) => {\n  if (e.target.closest('[data-bs-toggle=\"tooltip\"]')) {\n    for (const el of document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')) {\n      bootstrap.Tooltip.getInstance(el)?.hide();\n    }\n  }\n});\n\nif (document.readyState === \"loading\") {\n  document.addEventListener(\"DOMContentLoaded\", () => initTooltips());\n} else {\n  initTooltips();\n}\n// Give tooltips to any htmx-swapped-in content.\nhtmx.on(\"htmx:afterSettle\", (e) => initTooltips(e.detail.target || document));\n\n// Bootstrap dropdowns inside a `.table-responsive` wrapper get clipped: the\n// wrapper's `overflow-x: auto` creates a clipping context that traps the\n// absolutely-positioned menu. Bootstrap's Dropdown has NO\n// `strategy` option \u2014 its `Default` config is\n// `{autoClose, boundary, display, offset, popperConfig, reference}`, and the\n// config type check silently drops anything else, so `data-bs-strategy=\"fixed\"`\n// was a no-op and Popper kept `strategy: 'absolute'`. `popperConfig` IS a\n// supported option (merged in `Dropdown._getPopperConfig()`) and the data-api\n// JSON-parses `data-bs-*` values, so `data-bs-popper-config='{\"strategy\":\"fixed\"}'`\n// is the real way in: Popper then positions the menu with `position: fixed`, whose\n// containing block is the viewport, so it escapes the wrapper. No CSS/overflow\n// change, so horizontal table scrolling is untouched.\n// Bootstrap's data-api instantiates the Dropdown lazily on click and reads the\n// attribute then, so setting it before the first click is enough. `root` itself\n// is checked too \u2014 `querySelectorAll` only matches descendants, so an htmx swap\n// whose target *is* the toggle would otherwise stay clipped.\nfunction initTableDropdownStrategy(root = document) {\n  const mark = (el) => {\n    if (!el.hasAttribute(\"data-bs-popper-config\")) {\n      el.setAttribute(\"data-bs-popper-config\", '{\"strategy\":\"fixed\"}');\n    }\n  };\n  if (\n    root.nodeType === 1 &&\n    root.matches('[data-bs-toggle=\"dropdown\"]') &&\n    root.closest(\".table-responsive\")\n  ) {\n    mark(root);\n  }\n  for (const el of root.querySelectorAll(\n    '.table-responsive [data-bs-toggle=\"dropdown\"]',\n  )) {\n    mark(el);\n  }\n}\n\nif (document.readyState === \"loading\") {\n  document.addEventListener(\"DOMContentLoaded\", () => initTableDropdownStrategy());\n} else {\n  initTableDropdownStrategy();\n}\n// Same treatment for any htmx-swapped-in content.\nhtmx.on(\"htmx:afterSettle\", (e) =>\n  initTableDropdownStrategy(e.detail.target || document),\n);\n\n// Reset the delete-confirm submit button on a failed htmx delete (moved from the\n// inline <script> in shared/modal_delete.html). No-op when the page\n// has no #submit button, so it is safe to bind globally.\nhtmx.on(\"htmx:responseError\", resetDeleteConfirmButton);\n\nwireDealMergePreview(document);\n\nhtmx.on(\"htmx:beforeRequest\", sofortAusblenden);\nhtmx.on(\"htmx:afterRequest\", nachFehlerEinblenden);\nhtmx.on(\"htmx:afterRequest\", fehlerAufKarte);\nhtmx.on(\"htmx:afterRequest\", nachAntwortSchliessen);\nhtmx.on(\"aktionAbgelehnt\", dialogSchliessen);\n\ndocument.addEventListener(\"click\", (e) => {\n  if (e.target.closest(\"[data-drucken]\")) window.print();\n});\n\n// Unhide #wph-fehler when a request inside the Wochenplan-Historie tab fails (replaces\n// hx-on::response-error / hx-on::send-error on div.wph, which need eval).\nfor (const name of [\"htmx:responseError\", \"htmx:sendError\"]) {\n  htmx.on(name, (e) => {\n    const elt = e.detail && e.detail.elt;\n    const fehler = document.getElementById(\"wph-fehler\");\n    if (fehler && elt && elt.closest(\".wph\")) fehler.hidden = false;\n  });\n}\n\n// Auto-open a <dialog data-autoshow> once it settles in (e.g. the Pipedrive\n// sync-confirm modal swapped into #sync-modal-container). Replaces the inline\n// showModal() <script> in shared/qp/sync_confirm_modal.html.\nfunction autoShowDialogs(root = document) {\n  for (const dialog of root.querySelectorAll(\"dialog[data-autoshow]\")) {\n    if (!dialog.open) dialog.showModal();\n  }\n}\nhtmx.on(\"htmx:afterSettle\", (e) => autoShowDialogs(e.detail.target || document));\n\ndocument.addEventListener(\"click\", (e) => {\n  const closer = e.target.closest(\"[data-close-dialog]\");\n  if (!closer) return;\n  const ziel = closer.dataset.closeDialog;\n  (ziel ? document.getElementById(ziel) : closer.closest(\"dialog\"))?.close();\n});\n\ndocument.addEventListener(\"click\", (e) => {\n  if (e.target.closest(\"[data-history-back]\")) history.back();\n});\n\ndocument.addEventListener(\"submit\", (e) => {\n  const form = e.target.closest(\"form[data-confirm]\");\n  if (form && !confirm(form.dataset.confirm)) e.preventDefault();\n});\n\n// A form marked `data-kommentar-form` (the Eingangsrechnung decision, eingangsrechnung/_entscheidung.html)\n// shows its comment field on its opening button and posts only from the confirm button inside it;\n// \"abbrechen\" hides the field again and clears the text. An opener with `aria-expanded` stays in\n// place and reports the state; opening one field closes the others in the same `[data-entscheidung]`.\n// On the board card the openers sit outside the form, in the split button and its menu, and name\n// the form's id as `data-kommentar-oeffnen=\"<id>\"` (BL-1980).\nfunction kommentarFeld(form, offen) {\n  const feld = form.querySelector(\"[data-kommentar-feld]\");\n  const aussen = form.id\n    ? document.querySelectorAll(`[data-kommentar-oeffnen=\"${form.id}\"]`)\n    : [];\n  feld.hidden = !offen;\n  for (const oeffnen of [\n    ...form.querySelectorAll(\"[data-kommentar-oeffnen]\"),\n    ...aussen,\n  ]) {\n    if (oeffnen.hasAttribute(\"aria-expanded\"))\n      oeffnen.setAttribute(\"aria-expanded\", String(offen));\n    else oeffnen.hidden = offen;\n  }\n  if (!offen) feld.querySelector(\"[name=kommentar]\").value = \"\";\n}\n\ndocument.addEventListener(\"click\", (e) => {\n  const oeffnen = e.target.closest(\"[data-kommentar-oeffnen]\");\n  const abbrechen = e.target.closest(\"[data-kommentar-abbrechen]\");\n  const ziel = oeffnen?.dataset.kommentarOeffnen;\n  const form = ziel\n    ? document.getElementById(ziel)\n    : e.target.closest(\"form[data-kommentar-form]\");\n  if (!form || !(oeffnen || abbrechen)) return;\n  if (oeffnen) {\n    const gruppe = form.closest(\"[data-entscheidung]\");\n    for (const andere of gruppe?.querySelectorAll(\"form[data-kommentar-form]\") ?? [])\n      if (andere !== form) kommentarFeld(andere, false);\n  }\n  kommentarFeld(form, Boolean(oeffnen));\n  if (oeffnen) form.querySelector(\"[data-kommentar-feld] [name=kommentar]\").focus();\n});\n\n// A plain (non-htmx) form marked `data-sofort-sperren` disables its submit buttons once it is\n// sent, so the click shows at once while the page reloads (BL-479, Eingangsrechnung detail page).\ndocument.addEventListener(\"submit\", (e) => {\n  const form = e.target.closest(\"form[data-sofort-sperren]\");\n  if (!form || e.defaultPrevented) return;\n  for (const button of form.querySelectorAll(\"button[type=submit]\"))\n    button.disabled = true;\n});\n\n// Status tabs of the project search page (shared/templates/project/status/project_manager_search.html).\n// Arrow keys/Home/End only move focus; Enter/Space click the button, which shows the panel. The\n// panel content is loaded once by htmx (hx-trigger=\"click once\" on the tab).\nfunction activateStatusTab(tab) {\n  const tabs = tab.closest(\"[data-status-tabs]\");\n  for (const other of tabs.querySelectorAll('[role=\"tab\"]')) {\n    const selected = other === tab;\n    other.setAttribute(\"aria-selected\", String(selected));\n    other.classList.toggle(\"active\", selected);\n    other.tabIndex = selected ? 0 : -1;\n    const panel = document.getElementById(other.getAttribute(\"aria-controls\"));\n    if (panel) panel.hidden = !selected;\n  }\n  document.getElementById(\"panel-placeholder\")?.setAttribute(\"hidden\", \"\");\n  tab.scrollIntoView({ inline: \"nearest\", block: \"nearest\" });\n}\n\ndocument.addEventListener(\"click\", (e) => {\n  const tab = e.target.closest(\"[data-status-tabs] [role='tab']\");\n  if (tab) activateStatusTab(tab);\n});\n\ndocument.addEventListener(\"keydown\", (e) => {\n  const tab = e.target.closest(\"[data-status-tabs] [role='tab']\");\n  if (!tab) return;\n  const tabs = [...tab.closest(\"[data-status-tabs]\").querySelectorAll('[role=\"tab\"]')];\n  const index = tabs.indexOf(tab);\n  const target = {\n    ArrowRight: tabs[(index + 1) % tabs.length],\n    ArrowLeft: tabs[(index - 1 + tabs.length) % tabs.length],\n    Home: tabs[0],\n    End: tabs[tabs.length - 1],\n  }[e.key];\n  if (!target) return;\n  e.preventDefault();\n  for (const other of tabs) other.tabIndex = other === target ? 0 : -1;\n  target.focus();\n  target.scrollIntoView({ inline: \"nearest\", block: \"nearest\" });\n});\n"],
  "mappings": "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",
  "names": ["htmx", "elt", "type", "verb", "str", "interval", "name", "qualifiedName", "parent", "global", "condition", "initialElement", "ancestor", "attributeName", "attributeValue", "disinherit", "inherit", "closestAttr", "e", "selector", "match", "resp", "fragment", "script", "newScript", "attr", "response", "responseWithNoHead", "startTag", "doc", "titleElement", "func", "o", "dataProp", "data", "arr", "returnArr", "i", "el", "rect", "elemTop", "elemBottom", "trigger", "obj1", "obj2", "jString", "error", "test", "path", "url", "callback", "evt", "event", "eltOrSelector", "delay", "value", "clazz", "node", "child", "prefix", "suffix", "trimmedSelector", "parts", "chevronsCount", "offset", "char", "result", "unprocessedParts", "item", "standardSelector", "rootNode", "start", "results", "context", "arg1", "arg2", "arg3", "arg4", "eventArgs", "attrName", "attrTarget", "eltToInheritFrom", "attribute", "targetStr", "mergeTo", "mergeFrom", "swapStyle", "target", "extensions", "extension", "oobValue", "oobElement", "settleInfo", "targets", "oobElementClone", "beforeSwapDetails", "pantry", "preservedElt", "existingElement", "id", "parentNode", "newNode", "parentElt", "oldNode", "newAttributes", "autofocus", "autoFocusedElt", "insertBefore", "string", "hash", "internalData", "handlerInfo", "element", "info", "key", "newElt", "eltBeforeNewContent", "firstChild", "ext", "newElements", "j", "sourceElement", "hxTemplates", "template", "targetSelector", "swapOverride", "swapSpec", "oobElts", "content", "swapOptions", "settleResolve", "settleReject", "doSwap", "activeElt", "selectionInfo", "oobSelectValues", "oobSelectValue", "hasPartials", "newFragment", "newActiveElt", "focusOptions", "doSettle", "task", "anchorTarget", "shouldTransition", "settlePromise", "_resolve", "_reject", "innerDoSwap", "xhr", "header", "triggerBody", "triggers", "eventName", "detail", "eventNames", "tokens", "position", "startPosition", "startChar", "symbol", "token", "last", "paramName", "bracketCount", "conditionalSource", "conditionFunction", "explicitTrigger", "cache", "triggerSpecs", "initialLength", "every", "eventFilter", "triggerSpec", "from_arg", "handler", "spec", "nodeData", "rawAttribute", "btn", "link", "samePageAnchor", "source", "explicitCancel", "elementData", "eltsToListenOn", "eltToListenOn", "eventListener", "eventData", "lastValue", "load", "explicitAction", "observerOptions", "entries", "attributes", "elements", "iter", "boostedSelector", "extensionSelectors", "selectors", "s", "form", "code", "listener", "afterOnPosition", "nextChar", "elementsToInit", "toDo", "extensionsToIgnore", "msg", "eventResult", "kebabName", "kebabedEvent", "rootElt", "innerHTML", "title", "scroll", "historyCache", "newHistoryItem", "className", "clone", "tasks", "request", "details", "cached", "indicators", "ic", "disabledElts", "disabledElement", "disabled", "ele", "processed", "formData", "v", "values", "errors", "validate", "input", "receiver", "donor", "priorityFormData", "button", "includes", "descendant", "returnStr", "realValue", "prompt", "headers", "inputValues", "paramsValue", "newValues", "swapInfoOverride", "swapInfo", "split", "splitSpec", "scrollVal", "selectorVal", "showVal", "focusScrollVal", "filteredParameters", "encodedParameters", "first", "evalAsDefault", "evaluateValue", "varsValues", "toEval", "defaultVal", "expressionVars", "headerValue", "resolvedTarget", "requestConfig", "sameHost", "obj", "array", "index", "prop", "etc", "confirmed", "resolve", "reject", "promise", "responseHandler", "select", "eltData", "submitter", "buttonPath", "buttonVerb", "confirmQuestion", "skipConfirmation", "syncElt", "syncStrategy", "queueStrategy", "abortable", "syncStrings", "endRequestLock", "promptQuestion", "promptResponse", "rawFormData", "allFormData", "filteredFormData", "requestAttrValues", "eltIsBoosted", "useUrlParams", "splitPath", "pathNoAnchor", "anchor", "finalPath", "responseInfo", "hierarchy", "disableElts", "secondaryTriggerElt", "parentEltInHierarchy", "params", "pathFromHeaders", "typeFromHeaders", "requestPath", "responsePath", "pushUrl", "replaceUrl", "elementIsBoosted", "saveType", "responseHandlingConfig", "status", "regExp", "responseHandlingElement", "titleElt", "responseInfoSelect", "redirectPath", "redirectSwapSpec", "shouldRefresh", "historyUpdate", "responseHandling", "shouldSwap", "isError", "ignoreTitle", "selectOverride", "serverResponse", "selectOOB", "finalElt", "api", "text", "parameters", "extensionsToReturn", "extensionsForElement", "extensionName", "fn", "nonceAttribute", "indicator", "metaConfig", "body", "restoredElts", "originalPopstate", "htmx_esm_default", "lib_exports", "__export", "afterMain", "afterRead", "afterWrite", "applyStyles_default", "arrow_default", "auto", "basePlacements", "beforeMain", "beforeRead", "beforeWrite", "bottom", "clippingParents", "computeStyles_default", "createPopper", "detectOverflow", "end", "eventListeners_default", "flip_default", "hide_default", "left", "main", "modifierPhases", "offset_default", "placements", "popper", "popperGenerator", "popperOffsets_default", "preventOverflow_default", "read", "reference", "right", "start", "top", "variationPlacements", "viewport", "write", "top", "bottom", "right", "left", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "acc", "placement", "placements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "getNodeName", "element", "getWindow", "node", "ownerDocument", "isElement", "node", "OwnElement", "getWindow", "isHTMLElement", "isShadowRoot", "applyStyles", "_ref", "state", "name", "style", "attributes", "element", "isHTMLElement", "getNodeName", "value", "effect", "_ref2", "initialStyles", "styleProperties", "property", "attribute", "applyStyles_default", "getBasePlacement", "placement", "max", "min", "round", "getUAString", "uaData", "item", "isLayoutViewport", "getUAString", "getBoundingClientRect", "element", "includeScale", "isFixedStrategy", "clientRect", "scaleX", "scaleY", "isHTMLElement", "round", "_ref", "isElement", "getWindow", "visualViewport", "addVisualOffsets", "isLayoutViewport", "x", "y", "width", "height", "getLayoutRect", "element", "clientRect", "getBoundingClientRect", "width", "height", "contains", "parent", "child", "rootNode", "isShadowRoot", "next", "getComputedStyle", "element", "getWindow", "isTableElement", "element", "getNodeName", "getDocumentElement", "element", "isElement", "getParentNode", "element", "getNodeName", "isShadowRoot", "getDocumentElement", "getTrueOffsetParent", "element", "isHTMLElement", "getComputedStyle", "getContainingBlock", "isFirefox", "getUAString", "isIE", "elementCss", "currentNode", "getParentNode", "isShadowRoot", "getNodeName", "css", "getOffsetParent", "window", "getWindow", "offsetParent", "isTableElement", "getMainAxisFromPlacement", "placement", "within", "min", "value", "max", "withinMaxClamp", "v", "getFreshSideObject", "mergePaddingObject", "paddingObject", "getFreshSideObject", "expandToHashMap", "value", "keys", "hashMap", "key", "toPaddingObject", "padding", "state", "mergePaddingObject", "expandToHashMap", "basePlacements", "arrow", "_ref", "_state$modifiersData$", "name", "options", "arrowElement", "popperOffsets", "basePlacement", "getBasePlacement", "axis", "getMainAxisFromPlacement", "isVertical", "left", "right", "len", "paddingObject", "arrowRect", "getLayoutRect", "minProp", "top", "maxProp", "bottom", "endDiff", "startDiff", "arrowOffsetParent", "getOffsetParent", "clientSize", "centerToReference", "min", "max", "center", "offset", "within", "axisProp", "effect", "_ref2", "_options$element", "contains", "arrow_default", "getVariation", "placement", "unsetSides", "roundOffsetsByDPR", "_ref", "win", "x", "y", "dpr", "round", "mapToStyles", "_ref2", "_Object$assign2", "popper", "popperRect", "placement", "variation", "offsets", "position", "gpuAcceleration", "adaptive", "roundOffsets", "isFixed", "_offsets$x", "_offsets$y", "_ref3", "hasX", "hasY", "sideX", "left", "sideY", "top", "offsetParent", "getOffsetParent", "heightProp", "widthProp", "getWindow", "getDocumentElement", "getComputedStyle", "right", "end", "bottom", "offsetY", "offsetX", "commonStyles", "_ref4", "_Object$assign", "computeStyles", "_ref5", "state", "options", "_options$gpuAccelerat", "_options$adaptive", "_options$roundOffsets", "getBasePlacement", "getVariation", "computeStyles_default", "passive", "effect", "_ref", "state", "instance", "options", "_options$scroll", "scroll", "_options$resize", "resize", "window", "getWindow", "scrollParents", "scrollParent", "eventListeners_default", "hash", "getOppositePlacement", "placement", "matched", "hash", "getOppositeVariationPlacement", "placement", "matched", "getWindowScroll", "node", "win", "getWindow", "scrollLeft", "scrollTop", "getWindowScrollBarX", "element", "getBoundingClientRect", "getDocumentElement", "getWindowScroll", "getViewportRect", "element", "strategy", "win", "getWindow", "html", "getDocumentElement", "visualViewport", "width", "height", "x", "y", "layoutViewport", "isLayoutViewport", "getWindowScrollBarX", "getDocumentRect", "element", "_element$ownerDocumen", "html", "getDocumentElement", "winScroll", "getWindowScroll", "body", "width", "max", "height", "x", "getWindowScrollBarX", "y", "getComputedStyle", "isScrollParent", "element", "_getComputedStyle", "getComputedStyle", "overflow", "overflowX", "overflowY", "getScrollParent", "node", "getNodeName", "isHTMLElement", "isScrollParent", "getParentNode", "listScrollParents", "element", "list", "_element$ownerDocumen", "scrollParent", "getScrollParent", "isBody", "win", "getWindow", "target", "isScrollParent", "updatedList", "getParentNode", "rectToClientRect", "rect", "getInnerBoundingClientRect", "element", "strategy", "rect", "getBoundingClientRect", "getClientRectFromMixedType", "clippingParent", "viewport", "rectToClientRect", "getViewportRect", "isElement", "getDocumentRect", "getDocumentElement", "getClippingParents", "clippingParents", "listScrollParents", "getParentNode", "canEscapeClipping", "getComputedStyle", "clipperElement", "isHTMLElement", "getOffsetParent", "contains", "getNodeName", "getClippingRect", "boundary", "rootBoundary", "mainClippingParents", "firstClippingParent", "clippingRect", "accRect", "max", "min", "computeOffsets", "_ref", "reference", "element", "placement", "basePlacement", "getBasePlacement", "variation", "getVariation", "commonX", "commonY", "offsets", "top", "bottom", "right", "left", "mainAxis", "getMainAxisFromPlacement", "len", "start", "end", "detectOverflow", "state", "options", "_options", "_options$placement", "placement", "_options$strategy", "strategy", "_options$boundary", "boundary", "clippingParents", "_options$rootBoundary", "rootBoundary", "viewport", "_options$elementConte", "elementContext", "popper", "_options$altBoundary", "altBoundary", "_options$padding", "padding", "paddingObject", "mergePaddingObject", "expandToHashMap", "basePlacements", "altContext", "reference", "popperRect", "element", "clippingClientRect", "getClippingRect", "isElement", "getDocumentElement", "referenceClientRect", "getBoundingClientRect", "popperOffsets", "computeOffsets", "popperClientRect", "rectToClientRect", "elementClientRect", "overflowOffsets", "offsetData", "offset", "key", "multiply", "right", "bottom", "axis", "top", "computeAutoPlacement", "state", "options", "_options", "placement", "boundary", "rootBoundary", "padding", "flipVariations", "_options$allowedAutoP", "allowedAutoPlacements", "placements", "variation", "getVariation", "variationPlacements", "basePlacements", "allowedPlacements", "overflows", "acc", "detectOverflow", "getBasePlacement", "a", "b", "getExpandedFallbackPlacements", "placement", "getBasePlacement", "auto", "oppositePlacement", "getOppositePlacement", "getOppositeVariationPlacement", "flip", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "specifiedFallbackPlacements", "padding", "boundary", "rootBoundary", "altBoundary", "_options$flipVariatio", "flipVariations", "allowedAutoPlacements", "preferredPlacement", "basePlacement", "isBasePlacement", "fallbackPlacements", "placements", "acc", "computeAutoPlacement", "referenceRect", "popperRect", "checksMap", "makeFallbackChecks", "firstFittingPlacement", "i", "_basePlacement", "isStartVariation", "getVariation", "start", "isVertical", "top", "bottom", "len", "overflow", "detectOverflow", "mainVariationSide", "right", "left", "altVariationSide", "checks", "check", "numberOfChecks", "_loop", "_i", "fittingPlacement", "_ret", "flip_default", "getSideOffsets", "overflow", "rect", "preventedOffsets", "isAnySideFullyClipped", "top", "right", "bottom", "left", "side", "hide", "_ref", "state", "name", "referenceRect", "popperRect", "referenceOverflow", "detectOverflow", "popperAltOverflow", "referenceClippingOffsets", "popperEscapeOffsets", "isReferenceHidden", "hasPopperEscaped", "hide_default", "distanceAndSkiddingToXY", "placement", "rects", "offset", "basePlacement", "getBasePlacement", "invertDistance", "left", "top", "_ref", "skidding", "distance", "right", "_ref2", "state", "options", "name", "_options$offset", "data", "placements", "acc", "_data$state$placement", "x", "y", "offset_default", "popperOffsets", "_ref", "state", "name", "computeOffsets", "popperOffsets_default", "getAltAxis", "axis", "preventOverflow", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "boundary", "rootBoundary", "altBoundary", "padding", "_options$tether", "tether", "_options$tetherOffset", "tetherOffset", "overflow", "detectOverflow", "basePlacement", "getBasePlacement", "variation", "getVariation", "isBasePlacement", "mainAxis", "getMainAxisFromPlacement", "altAxis", "getAltAxis", "popperOffsets", "referenceRect", "popperRect", "tetherOffsetValue", "normalizedTetherOffsetValue", "offsetModifierState", "data", "_offsetModifierState$", "mainSide", "top", "left", "altSide", "bottom", "right", "len", "offset", "min", "max", "additive", "minLen", "start", "maxLen", "arrowElement", "arrowRect", "getLayoutRect", "arrowPaddingObject", "getFreshSideObject", "arrowPaddingMin", "arrowPaddingMax", "arrowLen", "within", "minOffset", "maxOffset", "arrowOffsetParent", "getOffsetParent", "clientOffset", "offsetModifierValue", "tetherMin", "tetherMax", "preventedOffset", "_offsetModifierState$2", "_mainSide", "_altSide", "_offset", "_len", "_min", "_max", "isOriginSide", "_offsetModifierValue", "_tetherMin", "_tetherMax", "_preventedOffset", "withinMaxClamp", "preventOverflow_default", "getHTMLElementScroll", "element", "getNodeScroll", "node", "getWindow", "isHTMLElement", "getWindowScroll", "getHTMLElementScroll", "isElementScaled", "element", "rect", "scaleX", "round", "scaleY", "getCompositeRect", "elementOrVirtualElement", "offsetParent", "isFixed", "isOffsetParentAnElement", "isHTMLElement", "offsetParentIsScaled", "documentElement", "getDocumentElement", "getBoundingClientRect", "scroll", "offsets", "getNodeName", "isScrollParent", "getNodeScroll", "getWindowScrollBarX", "order", "modifiers", "map", "visited", "result", "modifier", "sort", "requires", "dep", "depModifier", "orderModifiers", "orderedModifiers", "modifierPhases", "acc", "phase", "debounce", "fn", "pending", "resolve", "mergeByName", "modifiers", "merged", "current", "existing", "key", "DEFAULT_OPTIONS", "areValidElements", "_len", "args", "_key", "element", "popperGenerator", "generatorOptions", "_generatorOptions", "_generatorOptions$def", "defaultModifiers", "_generatorOptions$def2", "defaultOptions", "reference", "popper", "options", "state", "effectCleanupFns", "isDestroyed", "instance", "setOptionsAction", "cleanupModifierEffects", "isElement", "listScrollParents", "orderedModifiers", "orderModifiers", "mergeByName", "m", "runModifierEffects", "_state$elements", "getCompositeRect", "getOffsetParent", "getLayoutRect", "modifier", "index", "_state$orderedModifie", "fn", "_state$orderedModifie2", "_options", "name", "debounce", "resolve", "_ref", "_ref$options", "effect", "cleanupFn", "noopFn", "createPopper", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "createPopper", "popperGenerator", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "offset_default", "flip_default", "preventOverflow_default", "arrow_default", "hide_default", "createPopper", "popperGenerator", "elementMap", "Map", "Data", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "_destroyElement", "each", "data", "undefined", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_startX", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "swipeConfig", "_directionToOrder", "endCallBack", "clearTimeout", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "activeInstance", "dimension", "_getDimension", "style", "complete", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "createdDocument", "DOMParser", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "resetDeleteConfirmButton", "e", "submit", "bindDropzone", "el", "highlightClass", "dropEffect", "shouldIgnoreDragLeave", "onDrop", "setActive", "active", "activate", "e", "wireDealMergePreview", "target", "elt", "markiert", "e", "form", "setzeZustand", "target", "ausgeblendet", "button", "sofortAusblenden", "nachFehlerEinblenden", "dialogSchliessen", "nachAntwortSchliessen", "fehlerAufKarte", "karte", "meldung", "bfcacheRestoreTime", "getBFCacheRestoreTime", "onBFCacheRestore", "cb", "addEventListener", "event", "persisted", "timeStamp", "bindReporter", "callback", "metric", "thresholds", "reportAllChanges", "prevValue", "delta", "forceReport", "value", "rating", "getRating", "getNavigationEntry", "navigationEntry", "performance", "getEntriesByType", "responseStart", "now", "getActivationStart", "activationStart", "firstHiddenTime", "onHiddenFunctions", "Set", "initHiddenTime", "document", "visibilityState", "prerendering", "Infinity", "onVisibilityUpdate", "event", "type", "onHiddenFunction", "isFinite", "timeStamp", "removeEventListener", "getVisibilityWatcher", "reset", "globalThis", "find", "e", "name", "startTime", "addEventListener", "onBFCacheRestore", "setTimeout", "onHidden", "cb", "add", "initMetric", "value", "navigationType", "navigationId", "navigationInteractionId", "navigationURL", "navigationStartTime", "hardNavEntry", "hardNavId", "_navigationType", "getBFCacheRestoreTime", "wasDiscarded", "replace", "rating", "delta", "entries", "id", "Date", "Math", "floor", "random", "instanceMap", "WeakMap", "initUnique", "identityObj", "ClassObj", "classInstances", "get", "set", "observe", "types", "callback", "opts", "supportedTypes", "filter", "t", "PerformanceObserver", "supportedEntryTypes", "includes", "length", "po", "list", "queueMicrotask", "entries", "getEntries", "sort", "a", "b", "startTime", "duration", "type", "buffered", "checkSoftNavsEnabled", "globalThis", "PerformanceSoftNavigation", "prototype", "getLargestInteractionContentfulPaint", "reportSoftNavs", "runOnce", "cb", "called", "whenActivated", "callback", "document", "prerendering", "addEventListener", "interactionCountEstimate", "minKnownInteractionId", "Infinity", "maxKnownInteractionId", "updateEstimate", "entries", "entry", "interactionId", "Math", "min", "max", "po", "getInteractionCount", "performance", "interactionCount", "initInteractionCountPolyfill", "observe", "durationThreshold", "InteractionManager", "_prevInteractionCount", "_longestInteractionList", "_longestInteractionMap", "Map", "_onBeforeProcessingEntry", "_onAfterProcessingINPCandidate", "_getInteractionCountForNavigation", "this", "_resetInteractions", "length", "clear", "_estimateP98LongestInteraction", "navigationType", "interactionCountForNavigation", "candidateInteractionIndex", "floor", "_latency", "id", "_processEntry", "minLongestInteraction", "at", "interaction", "get", "duration", "startTime", "push", "set", "sort", "a", "b", "removedInteractions", "splice", "delete", "whenIdleOrHidden", "cb", "timeout", "globalThis", "rIC", "requestIdleCallback", "setTimeout", "cIC", "cancelIdleCallback", "clearTimeout", "document", "visibilityState", "wrappedCb", "runOnce", "idleHandle", "onHidden", "addEventListener", "once", "capture", "removeEventListener", "INPThresholds", "onINP", "onReport", "opts", "PerformanceEventTiming", "prototype", "visibilityWatcher", "getVisibilityWatcher", "whenActivated", "report", "metric", "initMetric", "interactionManager", "initUnique", "initNewINPMetric", "navigationId", "navigationInteractionId", "navigationURL", "navigationStartTime", "bindReporter", "reportAllChanges", "updateINPMetric", "inp", "value", "handleSoftNavEntry", "name", "handleEntries", "forceReport", "entryType", "types", "checkSoftNavsEnabled", "takeRecords", "onBFCacheRestore", "getBFCacheRestoreTime", "getCsrfToken", "aufgehalten", "wireAufgehalten", "target", "ausloeser", "issueRequest", "skipConfirmation", "startzeit", "ENDPUNKT", "STAPEL", "warteschlange", "senden", "daten", "getCsrfToken", "merken", "messung", "wireAufgehalten", "x", "metric", "htmx_esm_default", "e", "ausloeser", "xhr", "start", "startzeit", "fertig", "UNBEKANNTES_PRAEFIX", "escapeRegExp", "text", "praefixTerm", "prefixes", "alternation", "parseSuchpraefixe", "query", "bekannt", "erkannt", "leer", "rest", "_treffer", "praefix", "quoted", "bare", "wert", "name", "unbekannt", "HINWEIS_EINLEITUNG", "HINWEIS_BEISPIEL", "wertZuText", "wert", "chipsZuText", "chips", "rest", "praefix", "restFuerEingabe", "text", "textZuChips", "prefixes", "praefixTerm", "treffer", "quoted", "bare", "rueckmeldung", "erkannt", "unbekannt", "leer", "name", "element", "tag", "className", "text", "node", "mountTokenizer", "box", "form", "input", "hidden", "prefixes", "placeholder", "chips", "focusEnd", "renderChips", "chip", "chipElement", "removeChip", "other", "editChip", "chipsZuText", "updateWarnings", "label", "edit", "wert", "event", "remove", "commitPending", "neu", "rest", "textZuChips", "restFuerEingabe", "hint", "line", "HINWEIS_EINLEITUNG", "praefix", "code", "HINWEIS_BEISPIEL", "warnungen", "badges", "rueckmeldung", "parseSuchpraefixe", "klasse", "start", "mountAll", "error", "htmx_esm_default", "bootstrap_esm_exports", "bindDropzone", "e", "btn", "Dropdown", "toggle", "menu", "initTooltips", "root", "el", "Tooltip", "modal", "initTableDropdownStrategy", "mark", "resetDeleteConfirmButton", "wireDealMergePreview", "sofortAusblenden", "nachFehlerEinblenden", "fehlerAufKarte", "nachAntwortSchliessen", "dialogSchliessen", "name", "elt", "fehler", "autoShowDialogs", "dialog", "closer", "ziel", "form", "kommentarFeld", "offen", "feld", "aussen", "oeffnen", "abbrechen", "gruppe", "andere", "button", "activateStatusTab", "tab", "tabs", "other", "selected", "panel", "index", "target"]
}
