HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/node_modules/bootstrap-vue-next/dist/bootstrap-vue-next.umd.js.map
{"version":3,"file":"bootstrap-vue-next.umd.js","sources":["../src/utils/classes/BvEvent.ts","../src/utils/classes/BvTriggerableEvent.ts","../src/utils/classes/BvCarouselEvent.ts","../src/constants/regex.ts","../src/utils/stringUtils.ts","../src/utils/cssEscape.ts","../src/constants/env.ts","../src/utils/env.ts","../src/utils/dom.ts","../src/utils/filterEvent.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.5.0/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.1.6/node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.5.3/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+vue@1.0.2_vue@3.3.8/node_modules/@floating-ui/vue/dist/floating-ui.vue.esm.js","../src/utils/sanitizer.ts","../../../node_modules/.pnpm/@vueuse+shared@10.6.0_vue@3.3.8/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@10.6.0_vue@3.3.8/node_modules/@vueuse/core/index.mjs","../src/composables/useAlignment.ts","../src/composables/useBooleanish.ts","../src/composables/useAriaInvalid.ts","../src/composables/useBLinkHelper.ts","../src/composables/useBreadcrumb.ts","../src/composables/useColorMode.ts","../src/composables/useColorVariantClasses.ts","../src/composables/useContainerClasses.ts","../src/composables/useCountdown.ts","../src/composables/useStateClass.ts","../src/composables/useFormCheck.ts","../src/composables/useId.ts","../src/composables/useFormInput.ts","../src/composables/useFormSelect.ts","../src/composables/useModalManager.ts","../src/composables/useModal.ts","../src/composables/useModalController.ts","../src/composables/useRadiusElementClasses.ts","../src/composables/useSafeScrollLock.ts","../src/composables/useToast.ts","../src/components/BPopover.vue","../src/utils/floatingUi.ts","../src/utils/getBreakpointProps.ts","../src/utils/getClasses.ts","../src/utils/getTableFieldHeadLabel.ts","../src/utils/getId.ts","../src/utils/getSlotElements.ts","../src/utils/inspect.ts","../src/utils/isLink.ts","../src/utils/keys.ts","../src/utils/normalizeSlot.ts","../src/utils/number.ts","../src/utils/object.ts","../src/utils/parseActiveImports.ts","../src/utils/props.ts","../src/components/BAccordion/BAccordion.vue","../src/components/BCollapse.vue","../src/components/BAccordion/BAccordionItem.vue","../src/components/BTransition/BTransition.vue","../src/components/BButton/BCloseButton.vue","../src/components/BSpinner.vue","../src/components/BLink/BLink.vue","../src/components/BButton/BButton.vue","../src/components/BAlert/BAlert.vue","../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatarGroup.vue","../src/components/BBadge/BBadge.vue","../src/components/BBreadcrumb/BBreadcrumbItem.vue","../src/components/BBreadcrumb/BBreadcrumb.vue","../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonToolbar.vue","../src/components/BImg.vue","../src/components/BCard/BCardImg.vue","../src/components/BCard/BCardHeadFoot.vue","../src/components/BCard/BCardHeader.vue","../src/components/BCard/BCardSubtitle.vue","../src/components/BCard/BCardBody.vue","../src/components/BCard/BCardFooter.vue","../src/components/BCard/BCard.vue","../src/components/BCard/BCardGroup.vue","../src/components/BCarousel/BCarousel.vue","../src/components/BCarousel/BCarouselSlide.vue","../src/components/BCol.vue","../src/components/BContainer.vue","../src/components/BDropdown/BDropdown.vue","../src/components/BDropdown/BDropdownGroup.vue","../src/components/BDropdown/BDropdownItem.vue","../src/components/BDropdown/BDropdownItemButton.vue","../src/components/BForm/BForm.vue","../src/components/BForm/BFormInvalidFeedback.vue","../src/components/BForm/BFormText.vue","../src/components/BForm/BFormValidFeedback.vue","../src/components/RenderComponentOrSkip.vue","../src/components/BFormCheckbox/BFormCheckbox.vue","../src/components/BFormCheckbox/BFormCheckboxGroup.vue","../src/components/BFormFile/BFormFile.vue","../src/components/BFormGroup/BFormGroup.vue","../src/components/BFormInput/BFormInput.vue","../src/components/BFormRadio/BFormRadio.vue","../src/components/BFormRadio/BFormRadioGroup.vue","../src/components/BFormSelect/BFormSelectOption.vue","../src/components/BFormSelect/BFormSelectOptionGroup.vue","../src/components/BFormSelect/BFormSelect.vue","../src/utils/locale.ts","../src/utils/event.ts","../src/constants/codes.ts","../src/components/BFormSpinbutton/BFormSpinbutton.vue","../src/components/BFormTags/BFormTag.vue","../src/components/BFormTags/BFormTags.vue","../src/components/BFormTextarea/BFormTextarea.vue","../src/components/BInputGroup/BInputGroup.vue","../src/components/BInputGroup/BInputGroupAddon.vue","../src/components/BListGroup/BListGroup.vue","../src/components/BListGroup/BListGroupItem.vue","../src/components/BOverlay/BOverlay.vue","../src/components/BModal.vue","../src/components/BNav/BNav.vue","../src/components/BNav/BNavForm.vue","../src/components/BNav/BNavItem.vue","../src/components/BNav/BNavItemDropdown.vue","../src/components/BNavbar/BNavbar.vue","../src/components/BNavbar/BNavbarBrand.vue","../src/components/BNavbar/BNavbarNav.vue","../src/directives/BColorMode.ts","../src/directives/BToggle.ts","../src/directives/BPopover.ts","../src/directives/BTooltip.ts","../src/components/BNavbar/BNavbarToggle.vue","../src/components/BOffcanvas/BOffcanvas.vue","../src/components/BPagination/BPagination.vue","../src/components/BPlaceholder/BPlaceholder.vue","../src/components/BPlaceholder/BPlaceholderButton.vue","../src/components/BPlaceholder/BPlaceholderCard.vue","../src/components/BTable/BTableSimple.vue","../src/components/BPlaceholder/BPlaceholderTable.vue","../src/components/BPlaceholder/BPlaceholderWrapper.vue","../src/components/BProgress/BProgressBar.vue","../src/components/BProgress/BProgress.vue","../src/components/BRow.vue","../src/components/BTable/BTbody.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BTr.vue","../src/components/BTable/BTableLite.vue","../src/components/BTable/BTable.vue","../src/components/BTabs/BTab.vue","../src/components/BTabs/BTabs.vue","../src/components/BToast/BToast.vue","../src/components/BToast/BToaster.vue","../src/components/BTooltip.vue","../src/BootstrapVue.ts"],"sourcesContent":["/**\n * Items that are omitted from the BvEventInit constructor arg\n */\nexport type BvEventConstructorOmittables = 'eventType' | 'defaultPrevented'\n\nexport default class BvEvent {\n  readonly cancelable: boolean = true\n  readonly componentId: string | null = null\n  private _defaultPrevented = false\n  readonly eventType: string = ''\n  readonly nativeEvent: string | null = null\n  private _preventDefault: () => void\n  readonly relatedTarget: EventTarget | null = null\n  readonly target: EventTarget | null = null\n  // Readable by everyone,\n  // But only overwritten by inherrited constructors\n  public get defaultPrevented() {\n    return this._defaultPrevented\n  }\n  protected set defaultPrevented(prop) {\n    this._defaultPrevented = prop\n  }\n  // I think this is right\n  // We want to be able to have it callable to everyone,\n  // But only overwritten by inherrited constructors\n  public get preventDefault() {\n    return this._preventDefault\n  }\n  // This may not be correct, because it doesn't get correct type inferences in children\n  // Ex overwrite this.preventDefault = () => true is valid. Could be a TS issue\n  protected set preventDefault(setter: () => void) {\n    this._preventDefault = setter\n  }\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> = {}\n  ) {\n    if (!eventType) {\n      throw new TypeError(\n        `Failed to construct '${this.constructor.name}'. 1 argument required, ${arguments.length} given.`\n      )\n    }\n\n    // Merge defaults first, the eventInit, and the type last\n    // so, it can't be overwritten\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n\n    this._preventDefault = function _preventDefault() {\n      if (this.cancelable) {\n        this.defaultPrevented = true\n      }\n    }\n  }\n\n  static get Defaults() {\n    return {\n      cancelable: true,\n      componentId: null,\n      eventType: '',\n      nativeEvent: null,\n      relatedTarget: null,\n      target: null,\n    }\n  }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvTriggerableEvent extends BvEvent {\n  readonly trigger: string | null = null\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvTriggerableEvent, BvEventConstructorOmittables>> = {}\n  ) {\n    super(eventType, eventInit)\n\n    // Merge defaults first, the eventInit, and the type last\n    // so, it can't be overwritten\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n  }\n\n  static get Defaults() {\n    return {\n      ...super.Defaults,\n      trigger: null,\n    }\n  }\n}\n","import BvEvent, {type BvEventConstructorOmittables} from './BvEvent'\n\nexport default class BvCarouselEvent extends BvEvent {\n  readonly from: number\n  readonly to: number\n  readonly direction: 'left' | 'right'\n\n  constructor(\n    eventType: string,\n    eventInit: Partial<Omit<BvEvent, BvEventConstructorOmittables>> & {\n      from: number\n      to: number\n      direction: 'left' | 'right'\n    }\n  ) {\n    super(eventType, eventInit)\n    Object.assign(this, BvEvent.Defaults, eventInit, {eventType})\n    const {from, direction, to} = eventInit\n    this.from = from\n    this.to = to\n    this.direction = direction\n  }\n\n  static get Defaults() {\n    return {\n      ...super.Defaults,\n    }\n  }\n}\n","export const RX_UNDERSCORE = /_/g\nexport const RX_LOWER_UPPER = /([a-z])([A-Z])/g\nexport const RX_START_SPACE_WORD = /(\\s|^)(\\w)/g\nexport const RX_FIRST_START_SPACE_WORD = /(\\s|^)(\\w)/\nexport const RX_SPACE_SPLIT = /\\s+/\nexport const RX_HASH = /^#/\nexport const RX_HASH_ID = /^#[A-Za-z]+[\\w\\-:.]*$/\n\nexport const RX_STRIP_LOCALE_MODS = /-u-.+/\nexport const RX_REGEXP_REPLACE = /[-/\\\\^$*+?.()|[\\]{}]/g\nexport const RX_SPACES = /[\\s\\uFEFF\\xA0]+/g\n","import {\n  RX_FIRST_START_SPACE_WORD,\n  RX_LOWER_UPPER,\n  RX_REGEXP_REPLACE,\n  RX_SPACES,\n  RX_START_SPACE_WORD,\n  RX_UNDERSCORE,\n} from '../constants/regex'\n\n/**\n * Convert a value to a string that can be rendered `undefined`/`null` will be converted to `''` Plain objects and arrays will be JSON stringified\n *\n * @param val\n * @param spaces\n * @returns\n * @deprecated\n */\nexport const toString = (val: unknown, spaces = 2): string =>\n  typeof val === 'string'\n    ? val\n    : val === undefined || val === null\n    ? ''\n    : Array.isArray(val) ||\n      (Object.prototype.toString.call(val) === '[object Object]' &&\n        val.toString === Object.prototype.toString)\n    ? JSON.stringify(val, null, spaces)\n    : String(val)\n\n/**\n * @param str\n * @returns\n */\nexport const startCase = (str: string): string =>\n  str\n    .replace(RX_UNDERSCORE, ' ')\n    .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n    .replace(RX_FIRST_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * @param str\n * @returns\n */\nexport const titleCase = (str: string): string =>\n  str\n    .replace(RX_UNDERSCORE, ' ')\n    .replace(RX_LOWER_UPPER, (_, $1, $2) => `${$1} ${$2}`)\n    .replace(RX_START_SPACE_WORD, (_, $1, $2) => $1 + $2.toUpperCase())\n\n/**\n * Uppercases the first letter of a string and returns a new string\n *\n * @param str\n * @returns\n */\nexport const upperFirst = (str: string): string => {\n  const trim = str.trim()\n  return trim.charAt(0).toUpperCase() + trim.slice(1)\n}\n\n/**\n * Escapes a string for RegExp usage.\n *\n * @param str\n * @returns\n */\nexport const escapeRegExp = (str: string): string => str.replace(RX_REGEXP_REPLACE, '\\\\$&')\n\n/**\n * Escapes special chars in string and replaces\n * contiguous spaces with a whitespace match\n *\n * @param str\n * @returns\n */\nexport const escapeRegExpChars = (str: string): string =>\n  escapeRegExp(str).replace(RX_SPACES, '\\\\s')\n","import {toString} from './stringUtils'\n\nconst escapeChar = (value: string) => `\\\\${value}`\n\n/**\n * The `cssEscape()` util is based on this `CSS.escape()` polyfill: https://github.com/mathiasbynens/CSS.escape\n *\n * @param {unknown} value\n * @deprecated\n */\nexport default (value: unknown): string => {\n  const val = toString(value)\n\n  const {length} = val\n  const firstCharCode = val.charCodeAt(0)\n\n  return val.split('').reduce((result: string, char: string, index: number) => {\n    const charCode = val.charCodeAt(index)\n\n    // If the character is NULL (U+0000), use (U+FFFD) as replacement\n    if (charCode === 0x0000) {\n      return `${result}\\uFFFD`\n    }\n\n    // If the character ...\n    if (\n      // ... is U+007F OR\n      charCode === 0x007f ||\n      // ... is in the range [\\1-\\1F] (U+0001 to U+001F) OR ...\n      (charCode >= 0x0001 && charCode <= 0x001f) ||\n      // ... is the first character and is in the range [0-9] (U+0030 to U+0039) OR ...\n      (index === 0 && charCode >= 0x0030 && charCode <= 0x0039) ||\n      // ... is the second character and is in the range [0-9] (U+0030 to U+0039)\n      // and the first character is a `-` (U+002D) ...\n      (index === 1 && charCode >= 0x0030 && charCode <= 0x0039 && firstCharCode === 0x002d)\n    ) {\n      // ... https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n      return result + escapeChar(`${charCode.toString(16)} `)\n    }\n\n    // If the character ...\n    if (\n      // ... is the first character AND ...\n      index === 0 &&\n      // ... is a `-` (U+002D) AND ...\n      charCode === 0x002d &&\n      // ... there is no second character ...\n      length === 1\n    ) {\n      // ... use the escaped character\n      return result + escapeChar(char)\n    }\n\n    // If the character ...\n    if (\n      // ... is greater than or equal to U+0080 OR ...\n      charCode >= 0x0080 ||\n      // ... is `-` (U+002D) OR ...\n      charCode === 0x002d ||\n      // ... is `_` (U+005F) OR ...\n      charCode === 0x005f ||\n      // ... is in the range [0-9] (U+0030 to U+0039) OR ...\n      (charCode >= 0x0030 && charCode <= 0x0039) ||\n      // ... is in the range [A-Z] (U+0041 to U+005A) OR ...\n      (charCode >= 0x0041 && charCode <= 0x005a) ||\n      // ... is in the range [a-z] (U+0061 to U+007A) ...\n      (charCode >= 0x0061 && charCode <= 0x007a)\n    ) {\n      // ... use the character itself\n      return result + char\n    }\n\n    // Otherwise use the escaped character\n    // See: https://drafts.csswg.org/cssom/#escape-a-character\n    return result + escapeChar(char)\n  }, '')\n}\n","/**\n * @deprecated\n */\nexport const HAS_WINDOW_SUPPORT = typeof window !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_DOCUMENT_SUPPORT = typeof document !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_ELEMENT_SUPPORT = typeof Element !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_NAVIGATOR_SUPPORT = typeof navigator !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_PROMISE_SUPPORT = typeof Promise !== 'undefined'\n\n/**\n * @deprecated\n */\nexport const IS_BROWSER = HAS_WINDOW_SUPPORT && HAS_DOCUMENT_SUPPORT && HAS_NAVIGATOR_SUPPORT\n\n/**\n * @deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const WINDOW = HAS_WINDOW_SUPPORT ? window : ({} as Record<string, any>)\n/**\n * @deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DOCUMENT = HAS_DOCUMENT_SUPPORT ? document : ({} as Record<string, any>)\n\n// Determine if the browser supports the option passive for events\n/**\n * @deprecated\n */\nexport const HAS_PASSIVE_EVENT_SUPPORT = (() => {\n  let passiveEventSupported = false\n  if (!IS_BROWSER) return passiveEventSupported\n  try {\n    const options = {\n      // This function will be called when the browser\n      // attempts to access the passive property\n      get passive() {\n        passiveEventSupported = true\n        return passiveEventSupported\n      },\n    }\n    if ('addEventListener' in WINDOW && typeof WINDOW.addEventListener === 'function') {\n      WINDOW.addEventListener('test', options, options)\n    }\n    if ('removeEventListener' in WINDOW && typeof WINDOW.removeEventListener === 'function') {\n      WINDOW.removeEventListener('test', options, options)\n    }\n  } catch {\n    passiveEventSupported = false\n  }\n})()\n","/**\n * @deprecated\n */\nexport const HAS_WINDOW_SUPPORT = typeof window !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_DOCUMENT_SUPPORT = typeof document !== 'undefined'\n/**\n * @deprecated\n */\nexport const HAS_NAVIGATOR_SUPPORT = typeof navigator !== 'undefined'\n/**\n * @deprecated\n */\nexport const IS_BROWSER = HAS_WINDOW_SUPPORT && HAS_DOCUMENT_SUPPORT && HAS_NAVIGATOR_SUPPORT\n/**\n * @deprecated\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const WINDOW = HAS_WINDOW_SUPPORT ? window : ({} as Record<string, any>)\n\n// Determine if the browser supports the option passive for events\n/**\n * @deprecated\n */\nexport const HAS_PASSIVE_EVENT_SUPPORT = (() => {\n  let passiveEventSupported = false\n  if (IS_BROWSER) {\n    try {\n      const options = {\n        // This function will be called when the browser\n        // attempts to access the passive property\n        get passive() {\n          passiveEventSupported = true\n          // eslint-disable-next-line no-useless-return\n          return\n        },\n      }\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      WINDOW.addEventListener('test', options, options)\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      WINDOW.removeEventListener('test', options, options)\n    } catch {\n      passiveEventSupported = false\n    }\n  }\n  return passiveEventSupported\n})()\n","import type {Slot} from 'vue'\nimport {DOCUMENT, HAS_ELEMENT_SUPPORT} from '../constants/env'\nimport type {AnimationFrame} from '../types/safeTypes'\nimport {HAS_WINDOW_SUPPORT} from './env'\nimport {toString} from './stringUtils'\n\n/**\n * @deprecated\n */\nconst ELEMENT_PROTO = HAS_ELEMENT_SUPPORT ? Element.prototype : undefined\n\n/**\n * @deprecated\n */\nexport const isElement = (el: unknown): el is HTMLElement =>\n  !!(el && typeof el === 'object' && 'nodeType' in el && el.nodeType === Node.ELEMENT_NODE)\n\n/**\n * @deprecated\n */\nexport const getBCR = (el: HTMLElement) => (isElement(el) ? el.getBoundingClientRect() : null)\n\n/**\n * @deprecated\n */\nexport const getActiveElement = (excludes = []): Element | null => {\n  const {activeElement} = document\n  return activeElement && !excludes.some((el: HTMLElement) => el === activeElement)\n    ? activeElement\n    : null\n}\n\n/**\n * @deprecated\n */\nexport const isActiveElement = (el: HTMLElement): boolean =>\n  isElement(el) && el === getActiveElement()\n\n/**\n * @deprecated\n */\nexport const attemptFocus = (el: HTMLElement, options = {}): boolean => {\n  try {\n    el.focus(options)\n  } catch (e) {\n    // eslint-disable-next-line no-console\n    console.error(e)\n  }\n  return isActiveElement(el)\n}\n\n/**\n * Attempt to blur an element, and return `true` if successful\n *\n * @param el\n * @returns\n * @deprecated\n */\nexport const attemptBlur = (el: HTMLElement): boolean => {\n  try {\n    el.blur()\n  } catch (e) {\n    // eslint-disable-next-line no-console\n    console.error(e)\n  }\n  return !isActiveElement(el)\n}\n\n/**\n * @deprecated\n */\nexport const getStyle = (el: HTMLElement, prop: string) =>\n  prop && isElement(el) ? el.getAttribute(prop) || null : null\n\n/**\n * @deprecated\n */\nexport const contains = (parent: Node, child: Node): boolean => parent.contains(child)\n\n/**\n * @deprecated\n */\nexport const isVisible = (el: HTMLElement): boolean => {\n  //if (!isElement(el) || !el.parentNode || !contains(DOCUMENT.body, el)) {\n  // Note this can fail for shadow dom elements since they\n  // are not a direct descendant of document.body\n  //return false\n  //}\n  if (getStyle(el, 'display') === 'none') {\n    // We do this check to help with vue-test-utils when using v-show\n    return false\n  }\n  // All browsers support getBoundingClientRect(), except JSDOM as it returns all 0's for values :(\n  // So any tests that need isVisible will fail in JSDOM\n  // Except when we override the getBCR prototype in some tests\n  const bcr = getBCR(el)\n  return !!(bcr && bcr.height > 0 && bcr.width > 0)\n}\n\n/**\n * @deprecated\n */\nexport const isEmptySlot = (el: Slot | undefined): boolean => (el?.() ?? []).length === 0\n\n/**\n * Select a single element, returns `null` if not found\n *\n * @param selector\n * @param root\n * @returns\n * @deprecated\n */\nexport const select = (selector: string, root: Element) =>\n  (isElement(root) ? root : DOCUMENT).querySelector(selector) || null\n\n/**\n * @deprecated\n */\nexport const selectAll = (selector: string, root: Element) =>\n  Array.from([(isElement(root) ? root : DOCUMENT).querySelectorAll(selector)])\n\n/**\n * @deprecated\n */\nexport const getAttr = (el: HTMLElement | Element, attr: string): string | null =>\n  attr && isElement(el) ? el.getAttribute(attr) : null\n\n/**\n * Get an element given an ID\n * @deprecated\n */\nexport const getById = (id: string) =>\n  DOCUMENT.getElementById(/^#/.test(id) ? id.slice(1) : id) || null\n\n/**\n * @deprecated\n */\nexport const setAttr = (el: HTMLElement, attr: string, value: string): void => {\n  if (attr && isElement(el)) {\n    el.setAttribute(attr, value)\n  }\n}\n\n/**\n * Remove an attribute from an element\n *\n * @param el\n * @param attr\n * @deprecated\n */\nexport const removeAttr = (el: HTMLElement, attr: string): void => {\n  if (attr && isElement(el)) {\n    el.removeAttribute(attr)\n  }\n}\n\n/**\n * @deprecated\n */\nexport const isTag = (tag: string, name: string): boolean =>\n  toString(tag).toLowerCase() === toString(name).toLowerCase()\n\n/**\n * @deprecated\n */\nexport const requestAF: AnimationFrame = HAS_WINDOW_SUPPORT\n  ? window.requestAnimationFrame ||\n    window.webkitRequestAnimationFrame ||\n    window.mozRequestAnimationFrame ||\n    window.msRequestAnimationFrame ||\n    window.oRequestAnimationFrame ||\n    // Fallback, but not a true polyfill\n    // Only needed for Opera Mini\n    ((cb) => setTimeout(cb, 16))\n  : (cb) => setTimeout(cb, 0)\n\n/**\n * @deprecated\n */\nexport const matches = (el: Element, selector: string) =>\n  isElement(el) ? el.matches(selector) : false\n\n/**\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n * @deprecated\n */\n/* eslint-disable @typescript-eslint/no-this-alias */\nexport const closestEl =\n  ELEMENT_PROTO?.closest ||\n  function (this: Element, sel: string) {\n    let el: ParentNode | null | Element = this\n    if (!el) return null\n    do {\n      // Use our \"patched\" matches function\n      if (isElement(el) && el.matches(sel)) return el\n\n      el = el.parentElement || el.parentNode\n    } while (el !== null && el.nodeType === Node.ELEMENT_NODE)\n    return null\n  }\n\n/**\n * Finds closest element matching selector. Returns `null` if not found\n *\n * @param selector\n * @param root\n * @param includeRoot\n * @deprecated\n */\nexport const closest = (selector: string, root: Element, includeRoot = false) => {\n  if (!isElement(root)) {\n    return null\n  }\n  const el = closestEl.call(root, selector)\n  // Native closest behaviour when `includeRoot` is truthy,\n  // else emulate jQuery closest and return `null` if match is\n  // the passed in root element when `includeRoot` is falsey\n  return includeRoot ? el : el === root ? null : el\n}\n\n/**\n * @deprecated\n */\nexport const getTransitionDelay = (element: HTMLElement) => {\n  const style = window.getComputedStyle(element)\n  // if multiple durations are defined, we take the first\n  const transitionDelay = style.transitionDelay.split(',')[0] || ''\n  const transitionDuration = style.transitionDuration.split(',')[0] || ''\n  const transitionDelayMs = Number(transitionDelay.slice(0, -1)) * 1000\n  const transitionDurationMs = Number(transitionDuration.slice(0, -1)) * 1000\n  return transitionDelayMs + transitionDurationMs\n}\n","import {closest, getAttr, getById, matches, select} from './dom'\n\nconst TABLE_TAG_NAMES = ['TD', 'TH', 'TR']\n\n// Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\nconst eventFilter = [\n  'a',\n  'a *', // Include content inside links\n  'button',\n  'button *', // Include content inside buttons\n  'input:not(.disabled):not([disabled])',\n  'select:not(.disabled):not([disabled])',\n  'textarea:not(.disabled):not([disabled])',\n  '[role=\"link\"]',\n  '[role=\"link\"] *',\n  '[role=\"button\"]',\n  '[role=\"button\"] *',\n  '[tabindex]:not(.disabled):not([disabled])',\n].join(',')\n\n// Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\nexport default (event: Event) => {\n  // Exit early when we don't have a target element\n  if (!event || !event.target) {\n    return false\n  }\n  const el = event.target as HTMLElement\n  // Exit early when element is disabled or a table element\n  if (('disabled' in el && el.disabled) || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n    return false\n  }\n  // Ignore the click when it was inside a dropdown menu\n  if (closest('.dropdown-menu', el)) {\n    return true\n  }\n  const label = el.tagName === 'LABEL' ? el : closest('label', el)\n  // If the label's form control is not disabled then we don't propagate event\n  // Modern browsers have `label.control` that references the associated input, but IE 11\n  // does not have this property on the label element, so we resort to DOM lookups\n  if (label) {\n    const labelFor = getAttr(label, 'for')\n    const input = labelFor ? getById(labelFor) : select('input, select, textarea', label)\n    if (input && !input.disabled) {\n      return true\n    }\n  }\n  // Otherwise check if the event target matches one of the selectors in the\n  // event filter (i.e. anchors, non disabled inputs, etc.)\n  // Return `true` if we should ignore the event\n  return matches(el, eventFilter)\n}\n","const sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n      continue;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    ...rects.floating,\n    x,\n    y\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$map$so;\n                const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    alignmentAxis: null,\n    ...rawValue\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: diffCoords\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const overflowAvailableHeight = height - overflow[heightSide];\n      const overflowAvailableWidth = width - overflow[widthSide];\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if (isYAxis) {\n        const maximumClippingWidth = width - overflow.left - overflow.right;\n        availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n      } else {\n        const maximumClippingHeight = height - overflow.top - overflow.bottom;\n        availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  // Browsers without `ShadowRoot` support.\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  const webkit = isWebKit();\n  const css = getComputedStyle(element);\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = getParentNode(currentNode);\n    }\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.pageXOffset,\n    scrollTop: element.pageYOffset\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, 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  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  return getCssDimensions(element);\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\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}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (_ref) {\n  let {\n    reference,\n    floating,\n    strategy\n  } = _ref;\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  return {\n    reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      ...(await getDimensionsFn(floating))\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    clearTimeout(timeoutId);\n    io && io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          resizeObserver && resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo && cleanupIo();\n    resizeObserver && resizeObserver.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { autoUpdate, computePosition, platform };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction unwrapElement(element) {\n  var _$el;\n  return (_$el = element == null ? void 0 : element.$el) != null ? _$el : element;\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n  return {\n    name: 'arrow',\n    options,\n    fn(args) {\n      const element = unwrapElement(unref(options.element));\n      if (element == null) {\n        return {};\n      }\n      return arrow$1({\n        element,\n        padding: options.padding\n      }).fn(args);\n    }\n  };\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const whileElementsMountedOption = options.whileElementsMounted;\n  const openOption = computed(() => {\n    var _unref;\n    return (_unref = unref(options.open)) != null ? _unref : true;\n  });\n  const middlewareOption = computed(() => unref(options.middleware));\n  const placementOption = computed(() => {\n    var _unref2;\n    return (_unref2 = unref(options.placement)) != null ? _unref2 : 'bottom';\n  });\n  const strategyOption = computed(() => {\n    var _unref3;\n    return (_unref3 = unref(options.strategy)) != null ? _unref3 : 'absolute';\n  });\n  const transformOption = computed(() => {\n    var _unref4;\n    return (_unref4 = unref(options.transform)) != null ? _unref4 : true;\n  });\n  const referenceElement = computed(() => unwrapElement(reference.value));\n  const floatingElement = computed(() => unwrapElement(floating.value));\n  const x = ref(0);\n  const y = ref(0);\n  const strategy = ref(strategyOption.value);\n  const placement = ref(placementOption.value);\n  const middlewareData = shallowRef({});\n  const isPositioned = ref(false);\n  const floatingStyles = computed(() => {\n    const initialStyles = {\n      position: strategy.value,\n      left: '0',\n      top: '0'\n    };\n    if (!floatingElement.value) {\n      return initialStyles;\n    }\n    const xVal = roundByDPR(floatingElement.value, x.value);\n    const yVal = roundByDPR(floatingElement.value, y.value);\n    if (transformOption.value) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n        ...(getDPR(floatingElement.value) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy.value,\n      left: xVal + \"px\",\n      top: yVal + \"px\"\n    };\n  });\n  let whileElementsMountedCleanup;\n  function update() {\n    if (referenceElement.value == null || floatingElement.value == null) {\n      return;\n    }\n    computePosition(referenceElement.value, floatingElement.value, {\n      middleware: middlewareOption.value,\n      placement: placementOption.value,\n      strategy: strategyOption.value\n    }).then(position => {\n      x.value = position.x;\n      y.value = position.y;\n      strategy.value = position.strategy;\n      placement.value = position.placement;\n      middlewareData.value = position.middlewareData;\n      isPositioned.value = true;\n    });\n  }\n  function cleanup() {\n    if (typeof whileElementsMountedCleanup === 'function') {\n      whileElementsMountedCleanup();\n      whileElementsMountedCleanup = undefined;\n    }\n  }\n  function attach() {\n    cleanup();\n    if (whileElementsMountedOption === undefined) {\n      update();\n      return;\n    }\n    if (referenceElement.value != null && floatingElement.value != null) {\n      whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n      return;\n    }\n  }\n  function reset() {\n    if (!openOption.value) {\n      isPositioned.value = false;\n    }\n  }\n  watch([middlewareOption, placementOption, strategyOption], update, {\n    flush: 'sync'\n  });\n  watch([referenceElement, floatingElement], attach, {\n    flush: 'sync'\n  });\n  watch(openOption, reset, {\n    flush: 'sync'\n  });\n  if (getCurrentScope()) {\n    onScopeDispose(cleanup);\n  }\n  return {\n    x: shallowReadonly(x),\n    y: shallowReadonly(y),\n    strategy: shallowReadonly(strategy),\n    placement: shallowReadonly(placement),\n    middlewareData: shallowReadonly(middlewareData),\n    isPositioned: shallowReadonly(isPositioned),\n    floatingStyles,\n    update\n  };\n}\n\nexport { arrow, useFloating };\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href',\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN =\n  /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute: Attr, allowedAttributeList: (string | RegExp)[]) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(\n        SAFE_URL_PATTERN.test(attribute.nodeValue || '') ||\n          DATA_URL_PATTERN.test(attribute.nodeValue || '')\n      )\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList\n    .filter((attributeRegex): attributeRegex is RegExp => attributeRegex instanceof RegExp)\n    .some((regex) => regex.test(attributeName))\n}\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  'div': [],\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\nexport const sanitizeHtml = (\n  unsafeHtml: string,\n  allowList: Record<string, (string | RegExp)[]>,\n  sanitizeFunction?: (unsafeHtml: string) => string\n) => {\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: NodeListOf<Element> = 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\n      continue\n    }\n\n    const attributeList = element.attributes\n    const allowedAttributes = [...(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","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...options,\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  });\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (param) => {\n    return Promise.all(Array.from(fns).map((fn) => param ? fn(param) : fn()));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"injectLocal must be called in setup\");\n  if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(\"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n    return;\n  }\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...obj };\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction toValue(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /* @__PURE__ */ /iP(ad|hone|od)/.test(window.navigator.userAgent);\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = toValue(ms);\n    const maxDuration = toValue(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = toValue(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue(defaultValue);\n      trigger();\n    }, toValue(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(\n    source,\n    (newValue) => targets.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        var _a;\n        const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true) {\n  if (getCurrentInstance())\n    onBeforeMount(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn) {\n  if (getCurrentInstance())\n    onBeforeUnmount(fn);\n}\n\nfunction tryOnMounted(fn, sync = true) {\n  if (getCurrentInstance())\n    onMounted(fn);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn) {\n  if (getCurrentInstance())\n    onUnmounted(fn);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => toValue(\n    toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => toValue(\n    !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n  return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue(element),\n    toValue(value),\n    index,\n    toValue(array)\n  )));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n  return computed(() => {\n    const resolved = toValue(list);\n    return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue(list).map((element) => toValue(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  let _initialValue = unref(initialValue);\n  const count = ref(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);\n  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = _initialValue) => {\n    _initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(month + 1),\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return {\n      counter,\n      reset,\n      ...controls\n    };\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return {\n      ready,\n      ...controls\n    };\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && Number.isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue(truthyValue);\n      _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: oldList.length });\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\n  const current = ref(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        { ...watchOptions, flush: \"sync\" }\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      immediate: true\n    }\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return {\n    ...res,\n    trigger\n  };\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue(item));\n  return toValue(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  return watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v)\n        cb(v, ov, onInvalidate);\n    },\n    options\n  );\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, computedWithControl, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, notNullish, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, identity, isDef, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, isVue2, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\nimport { useEventListener as useEventListener$1 } from '@vueuse/core';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = true,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nfunction createReusableTemplate(options = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n    return;\n  }\n  const {\n    inheritAttrs = true\n  } = options;\n  const render = shallowRef();\n  const define = /* #__PURE__ */ defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        render.value = slots.default;\n      };\n    }\n  });\n  const reuse = /* #__PURE__ */ defineComponent({\n    inheritAttrs,\n    setup(_, { attrs, slots }) {\n      return () => {\n        var _a;\n        if (!render.value && process.env.NODE_ENV !== \"production\")\n          throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n        const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n        return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\nfunction keysToCamelKebabCase(obj) {\n  const newObj = {};\n  for (const key in obj)\n    newObj[camelize(key)] = obj[key];\n  return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n  if (!isVue3) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n    return;\n  }\n  let index = 0;\n  const instances = ref([]);\n  function create(...args) {\n    const props = shallowReactive({\n      key: index++,\n      args,\n      promise: void 0,\n      resolve: () => {\n      },\n      reject: () => {\n      },\n      isResolving: false,\n      options\n    });\n    instances.value.push(props);\n    props.promise = new Promise((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true;\n        return _resolve(v);\n      };\n      props.reject = _reject;\n    }).finally(() => {\n      props.promise = void 0;\n      const index2 = instances.value.indexOf(props);\n      if (index2 !== -1)\n        instances.value.splice(index2, 1);\n    });\n    return props.promise;\n  }\n  function start(...args) {\n    if (options.singleton && instances.value.length > 0)\n      return instances.value[0].promise;\n    return create(...args);\n  }\n  const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n    const renderList = () => instances.value.map((props) => {\n      var _a;\n      return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n    });\n    if (options.transition)\n      return () => h(TransitionGroup, options.transition, renderList);\n    return renderList;\n  });\n  component.start = start;\n  return component;\n}\n\nfunction createUnrefFn(fn) {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => toValue(i)));\n  };\n}\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.addEventListener(\"click\", noop);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n          handler(event);\n      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    timeout = setTimeout(\n      () => handler(ev),\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions)\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction isFocusedElementEditable() {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  if (keyCode >= 97 && keyCode <= 122)\n    return true;\n  return false;\n}\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const {\n    window = defaultWindow,\n    deep = true\n  } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const getDeepActiveElement = () => {\n    var _a2;\n    let element = document == null ? void 0 : document.activeElement;\n    if (deep) {\n      while (element == null ? void 0 : element.shadowRoot)\n        element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n    }\n    return element;\n  };\n  const activeElement = computedWithControl(\n    () => null,\n    () => getDeepActiveElement()\n  );\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      activeElement.trigger();\n    }, true);\n    useEventListener(window, \"focus\", activeElement.trigger, true);\n  }\n  return activeElement;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  if (getCurrentInstance()) {\n    onMounted(() => {\n      isMounted.value = true;\n    });\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    fpsLimit = void 0,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    const delta = timestamp - (previousFrameTimestamp || timestamp);\n    if (intervalLimit && delta < intervalLimit) {\n      rafId = window.requestAnimationFrame(loop);\n      return;\n    }\n    fn({ delta, timestamp });\n    previousFrameTimestamp = timestamp;\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nfunction useAnimate(target, keyframes, options) {\n  let config;\n  let animateOptions;\n  if (isObject(options)) {\n    config = options;\n    animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n  } else {\n    config = { duration: options };\n    animateOptions = options;\n  }\n  const {\n    window = defaultWindow,\n    immediate = true,\n    commitStyles,\n    persist,\n    playbackRate: _playbackRate = 1,\n    onReady,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = config;\n  const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n  const animate = shallowRef(void 0);\n  const store = shallowReactive({\n    startTime: null,\n    currentTime: null,\n    timeline: null,\n    playbackRate: _playbackRate,\n    pending: false,\n    playState: immediate ? \"idle\" : \"paused\",\n    replaceState: \"active\"\n  });\n  const pending = computed(() => store.pending);\n  const playState = computed(() => store.playState);\n  const replaceState = computed(() => store.replaceState);\n  const startTime = computed({\n    get() {\n      return store.startTime;\n    },\n    set(value) {\n      store.startTime = value;\n      if (animate.value)\n        animate.value.startTime = value;\n    }\n  });\n  const currentTime = computed({\n    get() {\n      return store.currentTime;\n    },\n    set(value) {\n      store.currentTime = value;\n      if (animate.value) {\n        animate.value.currentTime = value;\n        syncResume();\n      }\n    }\n  });\n  const timeline = computed({\n    get() {\n      return store.timeline;\n    },\n    set(value) {\n      store.timeline = value;\n      if (animate.value)\n        animate.value.timeline = value;\n    }\n  });\n  const playbackRate = computed({\n    get() {\n      return store.playbackRate;\n    },\n    set(value) {\n      store.playbackRate = value;\n      if (animate.value)\n        animate.value.playbackRate = value;\n    }\n  });\n  const play = () => {\n    if (animate.value) {\n      try {\n        animate.value.play();\n        syncResume();\n      } catch (e) {\n        syncPause();\n        onError(e);\n      }\n    } else {\n      update();\n    }\n  };\n  const pause = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.pause();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const reverse = () => {\n    var _a;\n    !animate.value && update();\n    try {\n      (_a = animate.value) == null ? void 0 : _a.reverse();\n      syncResume();\n    } catch (e) {\n      syncPause();\n      onError(e);\n    }\n  };\n  const finish = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.finish();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const cancel = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.cancel();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  watch(() => unrefElement(target), (el) => {\n    el && update();\n  });\n  watch(() => keyframes, (value) => {\n    !animate.value && update();\n    if (!unrefElement(target) && animate.value) {\n      animate.value.effect = new KeyframeEffect(\n        unrefElement(target),\n        toValue(value),\n        animateOptions\n      );\n    }\n  }, { deep: true });\n  tryOnMounted(() => {\n    nextTick(() => update(true));\n  });\n  tryOnScopeDispose(cancel);\n  function update(init) {\n    const el = unrefElement(target);\n    if (!isSupported.value || !el)\n      return;\n    animate.value = el.animate(toValue(keyframes), animateOptions);\n    if (commitStyles)\n      animate.value.commitStyles();\n    if (persist)\n      animate.value.persist();\n    if (_playbackRate !== 1)\n      animate.value.playbackRate = _playbackRate;\n    if (init && !immediate)\n      animate.value.pause();\n    else\n      syncResume();\n    onReady == null ? void 0 : onReady(animate.value);\n  }\n  useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n  const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n    if (!animate.value)\n      return;\n    store.pending = animate.value.pending;\n    store.playState = animate.value.playState;\n    store.replaceState = animate.value.replaceState;\n    store.startTime = animate.value.startTime;\n    store.currentTime = animate.value.currentTime;\n    store.timeline = animate.value.timeline;\n    store.playbackRate = animate.value.playbackRate;\n  }, { immediate: false });\n  function syncResume() {\n    if (isSupported.value)\n      resumeRef();\n  }\n  function syncPause() {\n    if (isSupported.value && window)\n      window.requestAnimationFrame(pauseRef);\n  }\n  return {\n    isSupported,\n    animate,\n    // actions\n    play,\n    pause,\n    reverse,\n    finish,\n    cancel,\n    // state\n    pending,\n    playState,\n    replaceState,\n    startTime,\n    currentTime,\n    timeline,\n    playbackRate\n  };\n}\n\nfunction useAsyncQueue(tasks, options) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop,\n    signal\n  } = options || {};\n  const promiseState = {\n    aborted: \"aborted\",\n    fulfilled: \"fulfilled\",\n    pending: \"pending\",\n    rejected: \"rejected\"\n  };\n  const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, new Error(\"aborted\"));\n        return;\n      }\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      const done = curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n      if (!signal)\n        return done;\n      return Promise.race([done, whenAborted(signal)]);\n    }).catch((e) => {\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, e);\n        return e;\n      }\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\nfunction whenAborted(signal) {\n  return new Promise((resolve, reject) => {\n    const error = new Error(\"aborted\");\n    if (signal.aborted)\n      reject(error);\n    else\n      signal.addEventListener(\"abort\", () => reject(error), { once: true });\n  });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = toValue(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || typeof target === \"function\")\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useBattery(options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator);\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      useEventListener(battery, events, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    // Device:\n    device,\n    requestDevice,\n    // Server:\n    server,\n    // Errors:\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  xs: 0,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetify = {\n  xs: 600,\n  sm: 960,\n  md: 1264,\n  lg: 1904\n};\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 600,\n  sm: 1024,\n  md: 1440,\n  lg: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = breakpoints[k];\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(`(min-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => greaterOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  return Object.assign(shortcutMethods, {\n    greater(k) {\n      return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    greaterOrEqual,\n    smaller(k) {\n      return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    smallerOrEqual(k) {\n      return useMediaQuery(`(max-width: ${getValue(k)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    },\n    current() {\n      const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n      return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n    }\n  });\n}\n\nfunction useBroadcastChannel(options) {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = shallowRef(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n}\n\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n  const { window = defaultWindow } = options;\n  const refs = Object.fromEntries(\n    WRITABLE_PROPERTIES.map((key) => [key, ref()])\n  );\n  for (const [key, ref2] of objectEntries(refs)) {\n    watch(ref2, (value) => {\n      if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n        return;\n      window.location[key] = value;\n    });\n  }\n  const buildState = (trigger) => {\n    var _a;\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { origin } = (window == null ? void 0 : window.location) || {};\n    for (const key of WRITABLE_PROPERTIES)\n      refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n    return reactive({\n      trigger,\n      state: state2,\n      length,\n      origin,\n      ...refs\n    });\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const permissionRead = usePermission(\"clipboard-read\");\n  const permissionWrite = usePermission(\"clipboard-write\");\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value && permissionRead.value !== \"denied\") {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateText);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value && permissionWrite.value !== \"denied\")\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nfunction useClipboardItems(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500\n  } = options;\n  const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const content = ref([]);\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateContent() {\n    if (isSupported.value) {\n      navigator.clipboard.read().then((items) => {\n        content.value = items;\n      });\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateContent);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      await navigator.clipboard.write(value);\n      content.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  return {\n    isSupported,\n    content,\n    copied,\n    copy\n  };\n}\n\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    // watch options\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(toValue(source));\n  }\n  if (!manual && (isRef(source) || typeof source === \"function\")) {\n    watch(source, sync, {\n      ...options,\n      deep,\n      immediate\n    });\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  return data;\n  function write(v) {\n    try {\n      if (v == null) {\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        const oldValue = storage.getItem(key);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          if (window) {\n            window.dispatchEvent(new CustomEvent(customStorageEventName, {\n              detail: {\n                key,\n                oldValue,\n                newValue: serialized,\n                storageArea: storage\n              }\n            }));\n          }\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit !== null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\n        window.document.head.appendChild(style);\n      }\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            el.classList.add(v);\n          else\n            el.classList.remove(v);\n        });\n      } else {\n        el.setAttribute(attribute2, value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const stopWatch = watch(\n    () => unrefElement(target),\n    (el) => {\n      cleanup();\n      if (isSupported.value && window && el) {\n        observer = new MutationObserver(callback);\n        observer.observe(el, mutationOptions);\n      }\n    },\n    { immediate: true }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    updateCssVar,\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      if ((_a = elRef.value) == null ? void 0 : _a.style)\n        elRef.value.style.setProperty(toValue(prop), val);\n    }\n  );\n  return variable;\n}\n\nfunction useCurrentElement() {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => vm.proxy.$el\n  );\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  const state = shallowRef(getInitialValue());\n  const listRef = toRef(list);\n  const index = computed({\n    get() {\n      var _a;\n      const targetList = listRef.value;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const targetList = listRef.value;\n    const length = targetList.length;\n    const index2 = (i % length + length) % length;\n    const value = targetList[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  function getInitialValue() {\n    var _a, _b;\n    return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n  }\n  watch(listRef, () => set(index.value));\n  return {\n    state,\n    index,\n    next,\n    prev\n  };\n}\n\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\"\n  } = options;\n  const mode = useColorMode({\n    ...options,\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  });\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      const modeVal = v ? \"dark\" : \"light\";\n      if (mode.system.value === modeVal)\n        mode.value = \"auto\";\n      else\n        mode.value = modeVal;\n    }\n  });\n  return isDark;\n}\n\nfunction fnBypass(v) {\n  return v;\n}\nfunction fnSetSource(source, value) {\n  return source.value = value;\n}\nfunction defaultDump(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(\n    source,\n    commit,\n    { deep, flush, eventFilter: composedFilter }\n  );\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return {\n    ...manualHistory,\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(\n      eventFilter,\n      (event) => {\n        acceleration.value = event.acceleration;\n        accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n        rotationRate.value = event.rotationRate;\n        interval.value = event.interval;\n      }\n    );\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe2 = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup2();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe2, { once: true });\n    }, cleanup2 = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n    };\n    let media;\n    observe2();\n    tryOnScopeDispose(cleanup2);\n  }\n  return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  let stream;\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n    if (stream) {\n      stream.getTracks().forEach((t) => t.stop());\n      stream = null;\n    }\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      stream = await navigator.mediaDevices.getUserMedia(constraints);\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility(options = {}) {\n  const { document = defaultDocument } = options;\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n  var _a, _b;\n  const {\n    pointerTypes,\n    preventDefault,\n    stopPropagation,\n    exact,\n    onMove,\n    onEnd,\n    onStart,\n    initialValue,\n    axis = \"both\",\n    draggingElement = defaultWindow,\n    containerElement,\n    handle: draggingHandle = target\n  } = options;\n  const position = ref(\n    (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n  );\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (pointerTypes)\n      return pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (toValue(preventDefault))\n      e.preventDefault();\n    if (toValue(stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - (container ? targetRect.left - containerRect.left : targetRect.left),\n      y: e.clientY - (container ? targetRect.top - containerRect.top : targetRect.top)\n    };\n    if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    var _a2;\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\") {\n      x = e.clientX - pressedDelta.value.x;\n      if (container)\n        x = Math.min(Math.max(0, x), containerRect.width - targetRect.width);\n    }\n    if (axis === \"y\" || axis === \"both\") {\n      y = e.clientY - pressedDelta.value.y;\n      if (container)\n        y = Math.min(Math.max(0, y), containerRect.height - targetRect.height);\n    }\n    position.value = {\n      x,\n      y\n    };\n    onMove == null ? void 0 : onMove(position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    if (!filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    onEnd == null ? void 0 : onEnd(position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    const config = { capture: (_b = options.capture) != null ? _b : true };\n    useEventListener(draggingHandle, \"pointerdown\", start, config);\n    useEventListener(draggingElement, \"pointermove\", move, config);\n    useEventListener(draggingElement, \"pointerup\", end, config);\n  }\n  return {\n    ...toRefs(position),\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(\n      () => `left:${position.value.x}px;top:${position.value.y}px;`\n    )\n  };\n}\n\nfunction useDropZone(target, options = {}) {\n  const isOverDropZone = ref(false);\n  const files = shallowRef(null);\n  let counter = 0;\n  let isDataTypeIncluded = true;\n  if (isClient) {\n    const _options = typeof options === \"function\" ? { onDrop: options } : options;\n    const getFiles = (event) => {\n      var _a, _b;\n      const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      return files.value = list.length === 0 ? null : list;\n    };\n    useEventListener$1(target, \"dragenter\", (event) => {\n      var _a;\n      if (_options.dataTypes && event.dataTransfer) {\n        const dataTypes = unref(_options.dataTypes);\n        isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(event.dataTransfer.types) : dataTypes ? dataTypes.some((item) => event.dataTransfer.types.includes(item)) : true;\n        if (!isDataTypeIncluded)\n          return;\n      }\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n      (_a = _options.onEnter) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener$1(target, \"dragover\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener$1(target, \"dragleave\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n      (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener$1(target, \"drop\", (event) => {\n      var _a;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n  }\n  return {\n    files,\n    isOverDropZone\n  };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els)\n          _el && observer.observe(_el, observerOptions);\n      }\n    },\n    { immediate: true, flush: \"post\", deep: true }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useElementByPoint(options) {\n  const {\n    x,\n    y,\n    document = defaultDocument,\n    multiple,\n    interval = \"requestAnimationFrame\",\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => {\n    if (toValue(multiple))\n      return document && \"elementsFromPoint\" in document;\n    return document && \"elementFromPoint\" in document;\n  });\n  const element = ref(null);\n  const cb = () => {\n    var _a, _b;\n    element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n  };\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  return {\n    isSupported,\n    element,\n    ...controls\n  };\n}\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const styles = window.getComputedStyle($elem);\n          width.value = Number.parseFloat(styles.width);\n          height.value = Number.parseFloat(styles.height);\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const { window = defaultWindow, scrollTarget } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    ([{ isIntersecting }]) => {\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold: 0\n    }\n  );\n  return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || /* @__PURE__ */ new Set();\n    listeners.add(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    listeners.delete(listener);\n    if (!listeners.size)\n      reset();\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = shallowRef(null);\n  const {\n    withCredentials = false\n  } = options;\n  const close = () => {\n    if (eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n    }\n  };\n  const es = new EventSource(url, { withCredentials });\n  eventSource.value = es;\n  es.onopen = () => {\n    status.value = \"OPEN\";\n    error.value = null;\n  };\n  es.onerror = (e) => {\n    status.value = \"CLOSED\";\n    error.value = e;\n  };\n  es.onmessage = (e) => {\n    event.value = null;\n    data.value = e.data;\n  };\n  for (const event_name of events) {\n    useEventListener(es, event_name, (e) => {\n      event.value = event_name;\n      data.value = e.data || null;\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = toRef(newIcon);\n  const applyIcon = (icon) => {\n    const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n    if (!elements || elements.length === 0) {\n      const link = document == null ? void 0 : document.createElement(\"link\");\n      if (link) {\n        link.rel = rel;\n        link.href = `${baseUrl}${icon}`;\n        link.type = `image/${icon.split(\".\").pop()}`;\n        document == null ? void 0 : document.head.append(link);\n      }\n      return;\n    }\n    elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(\n    favicon,\n    (i, o) => {\n      if (typeof i === \"string\" && i !== o)\n        applyIcon(i);\n    },\n    { immediate: true }\n  );\n  return favicon;\n}\n\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries([...headers.entries()]);\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback)\n        return { ...ctx, ...await callback(ctx) };\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      for (const callback of callbacks) {\n        if (callback)\n          ctx = { ...ctx, ...await callback(ctx) };\n      }\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = toValue(config.baseUrl);\n      const targetUrl = toValue(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = {\n          ...options,\n          ...args[0],\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        };\n      } else {\n        fetchOptions = {\n          ...fetchOptions,\n          ...args[0],\n          headers: {\n            ...headersToObject(fetchOptions.headers) || {},\n            ...headersToObject(args[0].headers) || {}\n          }\n        };\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = {\n        ...options,\n        ...args[1],\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      };\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = {\n    immediate: true,\n    refetch: false,\n    timeout: 0,\n    updateDataOnError: false\n  };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = { ...options, ...args[0] };\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = { ...options, ...args[1] };\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData || null);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort) {\n      controller == null ? void 0 : controller.abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = {\n        ...fetchOptions,\n        signal: controller.signal\n      };\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  let executeCounter = 0;\n  const execute = async (throwOnFailed = false) => {\n    var _a2;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    executeCounter += 1;\n    const currentExecuteCounter = executeCounter;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      const payload = toValue(config.payload);\n      if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n        config.payloadType = \"json\";\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: {\n        ...defaultFetchOptions,\n        ...fetchOptions\n      },\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return new Promise((resolve, reject) => {\n      var _a3;\n      fetch(\n        context.url,\n        {\n          ...defaultFetchOptions,\n          ...context.options,\n          headers: {\n            ...headersToObject(defaultFetchOptions.headers),\n            ...headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers)\n          }\n        }\n      ).then(async (fetchResponse) => {\n        response.value = fetchResponse;\n        statusCode.value = fetchResponse.status;\n        responseData = await fetchResponse[config.type]();\n        if (!fetchResponse.ok) {\n          data.value = initialData || null;\n          throw new Error(fetchResponse.statusText);\n        }\n        if (options.afterFetch) {\n          ({ data: responseData } = await options.afterFetch({\n            data: responseData,\n            response: fetchResponse\n          }));\n        }\n        data.value = responseData;\n        responseEvent.trigger(fetchResponse);\n        return resolve(fetchResponse);\n      }).catch(async (fetchError) => {\n        let errorData = fetchError.message || fetchError.name;\n        if (options.onFetchError) {\n          ({ error: errorData, data: responseData } = await options.onFetchError({\n            data: responseData,\n            error: fetchError,\n            response: response.value\n          }));\n        }\n        error.value = errorData;\n        if (options.updateDataOnError)\n          data.value = responseData;\n        errorEvent.trigger(fetchError);\n        if (throwOnFailed)\n          return reject(fetchError);\n        return resolve(null);\n      }).finally(() => {\n        if (currentExecuteCounter === executeCounter)\n          loading(false);\n        if (timer)\n          timer.stop();\n        finallyEvent.trigger(null);\n      });\n    });\n  };\n  const refetch = toRef(options.refetch);\n  watch(\n    [\n      refetch,\n      toRef(url)\n    ],\n    ([refetch2]) => refetch2 && execute(),\n    { deep: true }\n  );\n  const shell = {\n    isFinished,\n    statusCode,\n    response,\n    error,\n    data,\n    isFetching,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    // method\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    // type\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch(\n            [\n              refetch,\n              toRef(config.payload)\n            ],\n            ([refetch2]) => refetch2 && execute(),\n            { deep: true }\n          );\n        }\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    Promise.resolve().then(() => execute());\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  };\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\",\n  reset: false,\n  directory: false\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  const { on: onChange, trigger } = createEventHook();\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n      trigger(files.value);\n    };\n  }\n  const reset = () => {\n    files.value = null;\n    if (input)\n      input.value = \"\";\n  };\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      ...localOptions\n    };\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    input.webkitdirectory = _options.directory;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    if (_options.reset)\n      reset();\n    input.click();\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onChange\n  };\n}\n\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = options;\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n    fileHandle.value = handle;\n    await updateFile();\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    data.value = void 0;\n    await updateFile();\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    const type = toValue(dataType);\n    if (type === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    else if (type === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    else if (type === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => toValue(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false, focusVisible = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", (event) => {\n    var _a, _b;\n    if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n      innerFocused.value = true;\n  });\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(\n    targetElement,\n    () => {\n      focused.value = initialValue;\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst eventHandlers = [\n  \"fullscreenchange\",\n  \"webkitfullscreenchange\",\n  \"webkitendfullscreen\",\n  \"mozfullscreenchange\",\n  \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n  const {\n    document = defaultDocument,\n    autoExit = false\n  } = options;\n  const targetRef = computed(() => {\n    var _a;\n    return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n  });\n  const isFullscreen = ref(false);\n  const requestMethod = computed(() => {\n    return [\n      \"requestFullscreen\",\n      \"webkitRequestFullscreen\",\n      \"webkitEnterFullscreen\",\n      \"webkitEnterFullScreen\",\n      \"webkitRequestFullScreen\",\n      \"mozRequestFullScreen\",\n      \"msRequestFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const exitMethod = computed(() => {\n    return [\n      \"exitFullscreen\",\n      \"webkitExitFullscreen\",\n      \"webkitExitFullScreen\",\n      \"webkitCancelFullScreen\",\n      \"mozCancelFullScreen\",\n      \"msExitFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenEnabled = computed(() => {\n    return [\n      \"fullScreen\",\n      \"webkitIsFullScreen\",\n      \"webkitDisplayingFullscreen\",\n      \"mozFullScreen\",\n      \"msFullscreenElement\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenElementMethod = [\n    \"fullscreenElement\",\n    \"webkitFullscreenElement\",\n    \"mozFullScreenElement\",\n    \"msFullscreenElement\"\n  ].find((m) => document && m in document);\n  const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n  const isCurrentElementFullScreen = () => {\n    if (fullscreenElementMethod)\n      return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n    return false;\n  };\n  const isElementFullScreen = () => {\n    if (fullscreenEnabled.value) {\n      if (document && document[fullscreenEnabled.value] != null) {\n        return document[fullscreenEnabled.value];\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n          return Boolean(target2[fullscreenEnabled.value]);\n        }\n      }\n    }\n    return false;\n  };\n  async function exit() {\n    if (!isSupported.value || !isFullscreen.value)\n      return;\n    if (exitMethod.value) {\n      if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n        await document[exitMethod.value]();\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n          await target2[exitMethod.value]();\n      }\n    }\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value || isFullscreen.value)\n      return;\n    if (isElementFullScreen())\n      await exit();\n    const target2 = targetRef.value;\n    if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n      await target2[requestMethod.value]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    await (isFullscreen.value ? exit() : enter());\n  }\n  const handlerCallback = () => {\n    const isElementFullScreenValue = isElementFullScreen();\n    if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n      isFullscreen.value = isElementFullScreenValue;\n  };\n  useEventListener(document, eventHandlers, handlerCallback, false);\n  useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      ...gamepad,\n      id: gamepad.id,\n      hapticActuators,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (let i = 0; i < _gamepads.length; ++i) {\n      const gamepad = _gamepads[i];\n      if (gamepad) {\n        const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);\n        if (index > -1)\n          gamepads.value[index] = stateFromGamepad(gamepad);\n      }\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    if (_gamepads) {\n      for (let i = 0; i < _gamepads.length; ++i) {\n        const gamepad = _gamepads[i];\n        if (gamepad)\n          onGamepadConnected(gamepad);\n      }\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = shallowRef(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_INFINITY,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(\n        updatePosition,\n        (err) => error.value = err,\n        {\n          enableHighAccuracy,\n          maximumAge,\n          timeout\n        }\n      );\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const reset = () => {\n    idle.value = false;\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  };\n  const onEvent = createFilterWrapper(\n    eventFilter,\n    () => {\n      lastActive.value = timestamp();\n      reset();\n    }\n  );\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n    reset();\n  }\n  return {\n    idle,\n    lastActive,\n    reset\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = target.document ? target.document.documentElement : (_a = target.documentElement) != null ? _a : target;\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= 0 + (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= 0 + (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    setArrivedState(toValue(element));\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value)\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(/* @__PURE__ */ new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = /* @__PURE__ */ new Set();\n  const usedKeys = /* @__PURE__ */ new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(\n    refs,\n    {\n      get(target2, prop, rec) {\n        if (typeof prop !== \"string\")\n          return Reflect.get(target2, prop, rec);\n        prop = prop.toLowerCase();\n        if (prop in aliasMap)\n          prop = aliasMap[prop];\n        if (!(prop in refs)) {\n          if (/[+_-]/.test(prop)) {\n            const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n            refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n          } else {\n            refs[prop] = ref(false);\n          }\n        }\n        const r = Reflect.get(target2, prop, rec);\n        return useReactive ? toValue(r) : r;\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction usingElRef(source, cb) {\n  if (toValue(source))\n    cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = {\n    ...defaultOptions,\n    ...options\n  };\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = typeof track === \"number\" ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = typeof track === \"number\" ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = toValue(target);\n    if (!el)\n      return;\n    const src = toValue(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (typeof src === \"string\")\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch([target, volume], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.volume = volume.value;\n  });\n  watch([target, muted], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.muted = muted.value;\n  });\n  watch([target, rate], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.playbackRate = rate.value;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = toValue(options.tracks);\n    const el = toValue(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n    waiting.value = true;\n    ignorePlayingUpdates(() => playing.value = false);\n  });\n  useEventListener(target, \"loadeddata\", () => waiting.value = false);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n    ignorePlayingUpdates(() => playing.value = true);\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    // Volume\n    volume,\n    muted,\n    // Tracks\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    // Picture in Picture\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    // Events\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nfunction getMapVue2Compat() {\n  const data = reactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n}\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return reactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return reactive(/* @__PURE__ */ new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n  page: (event) => [event.pageX, event.pageY],\n  client: (event) => [event.clientX, event.clientY],\n  screen: (event) => [event.screenX, event.screenY],\n  movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    target = window,\n    scroll = true,\n    eventFilter\n  } = options;\n  let _prevMouseEvent = null;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    _prevMouseEvent = event;\n    if (result) {\n      [x.value, y.value] = result;\n      sourceType.value = \"mouse\";\n    }\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const result = extractor(event.touches[0]);\n      if (result) {\n        [x.value, y.value] = result;\n        sourceType.value = \"touch\";\n      }\n    }\n  };\n  const scrollHandler = () => {\n    if (!_prevMouseEvent || !window)\n      return;\n    const pos = extractor(_prevMouseEvent);\n    if (_prevMouseEvent instanceof MouseEvent && pos) {\n      x.value = pos[0] + window.scrollX;\n      y.value = pos[1] + window.scrollY;\n    }\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n  const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n  const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n    if (touch && type !== \"movement\") {\n      useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, listenerOptions);\n    }\n    if (scroll && type === \"page\")\n      useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const type = options.type || \"page\";\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch(\n      [targetRef, x, y],\n      () => {\n        const el = unrefElement(targetRef);\n        if (!el)\n          return;\n        const {\n          left,\n          top,\n          width,\n          height\n        } = el.getBoundingClientRect();\n        elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n        elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n        elementHeight.value = height;\n        elementWidth.value = width;\n        const elX = x.value - elementPositionX.value;\n        const elY = y.value - elementPositionY.value;\n        isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n        if (handleOutside || !isOutside.value) {\n          elementX.value = elX;\n          elementY.value = elY;\n        }\n      },\n      { immediate: true }\n    );\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    capture = false,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n    useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n    useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n    useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n}\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(/* @__PURE__ */ new Date());\n  const update = () => now.value = /* @__PURE__ */ new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return {\n      now,\n      ...controls\n    };\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(\n    () => toValue(object),\n    (newObject) => {\n      release();\n      if (newObject)\n        url.value = URL.createObjectURL(newObject);\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (typeof value === \"function\" || isReadonly(value))\n    return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, toValue(min), toValue(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, toValue(min), toValue(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Number.POSITIVE_INFINITY,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n  const pageCount = computed(() => Math.max(\n    1,\n    Math.ceil(toValue(total) / toValue(currentPageSize))\n  ));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page))\n    syncRef(page, currentPage);\n  if (isRef(pageSize))\n    syncRef(pageSize, currentPageSize);\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = -orientation.beta / 90;\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      const value = orientation.gamma / 90;\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n  const parentElement = shallowRef();\n  const update = () => {\n    const el = unrefElement(element);\n    if (el)\n      parentElement.value = el.parentElement;\n  };\n  tryOnMounted(update);\n  watch(() => toValue(element), update);\n  return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n  const {\n    window = defaultWindow,\n    immediate = true,\n    ...performanceOptions\n  } = options;\n  const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n  let observer;\n  const stop = () => {\n    observer == null ? void 0 : observer.disconnect();\n  };\n  const start = () => {\n    if (isSupported.value) {\n      stop();\n      observer = new PerformanceObserver(callback);\n      observer.observe(performanceOptions);\n    }\n  };\n  tryOnScopeDispose(stop);\n  if (immediate)\n    start();\n  return {\n    isSupported,\n    start,\n    stop\n  };\n}\n\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n  }\n  return {\n    ...toRefs(state),\n    isInside\n  };\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument, pointerLockOptions } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e, options2) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = toRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return distanceY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      var _a, _b;\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n      (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"initial\");\n    })\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(\n    toRef(value),\n    (_, oldValue) => {\n      previous.value = oldValue;\n    },\n    { flush: \"sync\" }\n  );\n  return readonly(previous);\n}\n\nfunction useScreenOrientation(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (!isSupported.value)\n      return Promise.reject(new Error(\"Not supported\"));\n    return screenOrientation.lock(type);\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value)\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = toValue(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  let initialOverflow;\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, initialOverflow);\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    var _a;\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = (_a = elInitialOverflow.get(el)) != null ? _a : \"\";\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = {\n        ...toValue(shareOptions),\n        ...toValue(overrideOptions)\n      };\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...toValue(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(toValue(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = toRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = toValue(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = toValue(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = toRef(text || \"\");\n  const lang = toRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = toValue(lang);\n    utterance2.voice = toValue(options.voice) || null;\n    utterance2.pitch = toValue(pitch);\n    utterance2.rate = toValue(rate);\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = toValue(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (typeof mergeDefaults === \"function\")\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = { ...rawInit, ...value };\n        else\n          data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n  if (storage) {\n    watchWithFilter(\n      data,\n      async () => {\n        try {\n          if (data.value == null)\n            await storage.removeItem(key);\n          else\n            await storage.setItem(key, await serializer.write(data.value));\n        } catch (e) {\n          onError(e);\n        }\n      },\n      {\n        flush,\n        deep,\n        eventFilter\n      }\n    );\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(\n      cssRef,\n      (value) => {\n        el.textContent = value;\n      },\n      { immediate: true }\n    );\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return diffY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(\n      document.querySelector(selector),\n      () => dir.value = getValue(),\n      { attributes: true }\n    );\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  const textareaScrollHeight = ref(1);\n  function triggerResize() {\n    var _a, _b;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style.height = \"1px\";\n    textareaScrollHeight.value = (_a = textarea.value) == null ? void 0 : _a.scrollHeight;\n    if (options == null ? void 0 : options.styleTarget)\n      toValue(options.styleTarget).style.height = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style.height = height;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n  return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n  if (exposeControls) {\n    return {\n      timeAgo,\n      ...controls\n    };\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval, { immediate: false });\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return {\n      timestamp: ts,\n      ...controls\n    };\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b;\n  const {\n    document = defaultDocument\n  } = options;\n  const title = toRef((_a = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _a : null);\n  const isReadonly = newTitle && typeof newTitle === \"function\";\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n  }\n  watch(\n    title,\n    (t, o) => {\n      if (t !== o && document)\n        document.title = format(typeof t === \"string\" ? t : \"\");\n    },\n    { immediate: true }\n  );\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver(\n      (_b = document.head) == null ? void 0 : _b.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  return title;\n}\n\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n  return a + alpha * (b - a);\n}\nfunction toVec(t) {\n  return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n  var _a, _b;\n  const fromVal = toValue(from);\n  const toVal = toValue(to);\n  const v1 = toVec(fromVal);\n  const v2 = toVec(toVal);\n  const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n  const startedAt = Date.now();\n  const endAt = Date.now() + duration;\n  const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n  const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n  return new Promise((resolve) => {\n    source.value = fromVal;\n    const tick = () => {\n      var _a2;\n      if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n        resolve();\n        return;\n      }\n      const now = Date.now();\n      const alpha = ease((now - startedAt) / duration);\n      const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n      if (Array.isArray(source.value))\n        source.value = arr.map((n, i) => {\n          var _a3, _b2;\n          return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n        });\n      else if (typeof source.value === \"number\")\n        source.value = arr[0];\n      if (now < endAt) {\n        requestAnimationFrame(tick);\n      } else {\n        source.value = toVal;\n        resolve();\n      }\n    };\n    tick();\n  });\n}\nfunction useTransition(source, options = {}) {\n  let currentId = 0;\n  const sourceVal = () => {\n    const v = toValue(source);\n    return typeof v === \"number\" ? v : v.map(toValue);\n  };\n  const outputRef = ref(sourceVal());\n  watch(sourceVal, async (to) => {\n    var _a, _b;\n    if (toValue(options.disabled))\n      return;\n    const id = ++currentId;\n    if (options.delay)\n      await promiseTimeout(toValue(options.delay));\n    if (id !== currentId)\n      return;\n    const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n    (_a = options.onStarted) == null ? void 0 : _a.call(options);\n    await executeTransition(outputRef, outputRef.value, toVal, {\n      ...options,\n      abort: () => {\n        var _a2;\n        return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n      }\n    });\n    (_b = options.onFinished) == null ? void 0 : _b.call(options);\n  }, { deep: true });\n  watch(() => toValue(options.disabled), (disabled) => {\n    if (disabled) {\n      currentId++;\n      outputRef.value = sourceVal();\n    }\n  });\n  tryOnScopeDispose(() => {\n    currentId++;\n  });\n  return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(\n    state,\n    () => {\n      const params = new URLSearchParams(\"\");\n      Object.keys(state).forEach((key) => {\n        const mapEntry = state[key];\n        if (Array.isArray(mapEntry))\n          mapEntry.forEach((value) => params.append(key, value));\n        else if (removeNullishValues && mapEntry == null)\n          params.delete(key);\n        else if (removeFalsyValues && !mapEntry)\n          params.delete(key);\n        else\n          params.set(key, mapEntry);\n      });\n      write(params);\n    },\n    { deep: true }\n  );\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(\n      window.history.state,\n      window.document.title,\n      window.location.pathname + constructQuery(params)\n    );\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const constraints = ref(options.constraints);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(type) {\n    switch (type) {\n      case \"video\": {\n        if (constraints.value)\n          return constraints.value.video || false;\n        break;\n      }\n      case \"audio\": {\n        if (constraints.value)\n          return constraints.value.audio || false;\n        break;\n      }\n    }\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(\"video\"),\n      audio: getDeviceOptions(\"audio\")\n    });\n    return stream.value;\n  }\n  function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  watch(\n    constraints,\n    () => {\n      if (autoSwitch.value && stream.value)\n        restart();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    constraints,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue,\n    shouldEmit\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  const triggerEmit = (value) => {\n    if (shouldEmit) {\n      if (shouldEmit(value))\n        _emit(event, value);\n    } else {\n      _emit(event, value);\n    }\n  };\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    let isUpdating = false;\n    watch(\n      () => props[key],\n      (v) => {\n        if (!isUpdating) {\n          isUpdating = true;\n          proxy.value = cloneFn(v);\n          nextTick(() => isUpdating = false);\n        }\n      }\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (!isUpdating && (v !== props[key] || deep))\n          triggerEmit(v);\n      },\n      { deep }\n    );\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        triggerEmit(value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props) {\n    ret[key] = useVModel(\n      props,\n      key,\n      emit,\n      options\n    );\n  }\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = toRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(\n      vibrate,\n      interval,\n      {\n        immediate: false,\n        immediateCallback: false\n      }\n    );\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nfunction useWakeLock(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n}\n\nfunction useWebNotification(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions: _requestForPermissions = true\n  } = options;\n  const defaultWebNotificationOptions = options;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n  const notification = ref(null);\n  const ensurePermissions = async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionGranted.value && Notification.permission !== \"denied\") {\n      const result = await Notification.requestPermission();\n      if (result === \"granted\")\n        permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  };\n  const { on: onClick, trigger: clickTrigger } = createEventHook();\n  const { on: onShow, trigger: showTrigger } = createEventHook();\n  const { on: onError, trigger: errorTrigger } = createEventHook();\n  const { on: onClose, trigger: closeTrigger } = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value || !permissionGranted.value)\n      return;\n    const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n    notification.value = new Notification(options2.title || \"\", options2);\n    notification.value.onclick = clickTrigger;\n    notification.value.onshow = showTrigger;\n    notification.value.onerror = errorTrigger;\n    notification.value.onclose = closeTrigger;\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  if (_requestForPermissions)\n    tryOnMounted(ensurePermissions);\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    ensurePermissions,\n    permissionGranted,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = toRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const close = (code = 1e3, reason) => {\n    if (!isClient || !wsRef.value)\n      return;\n    explicitlyClosed = true;\n    resetHeartbeat();\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      wsRef.value = void 0;\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(\n      () => {\n        send(message, false);\n        if (pongTimeoutWait != null)\n          return;\n        pongTimeoutWait = setTimeout(() => {\n          close();\n          explicitlyClosed = false;\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    if (isClient)\n      useEventListener(\"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    if (!isClient && !isWorker)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = (...args) => {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(...args);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (typeof arg0 === \"string\")\n      worker.value = new Worker(arg0, workerOptions);\n    else if (typeof arg0 === \"function\")\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nfunction jobRunner(userFunc) {\n  return (e) => {\n    const userFuncArgs = e.data[0];\n    return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n      postMessage([\"SUCCESS\", result]);\n    }).catch((error) => {\n      postMessage([\"ERROR\", error]);\n    });\n  };\n}\n\nfunction depsParser(deps) {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      e.preventDefault();\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(\n        () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n        timeout\n      );\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\n        \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n      );\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n}\n\nfunction useWindowFocus(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n  const { window = defaultWindow, behavior = \"auto\" } = options;\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const internalX = ref(window.scrollX);\n  const internalY = ref(window.scrollY);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo({ left: x2, behavior });\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo({ top: y2, behavior });\n    }\n  });\n  useEventListener(\n    window,\n    \"scroll\",\n    () => {\n      internalX.value = window.scrollX;\n      internalY.value = window.scrollY;\n    },\n    {\n      capture: false,\n      passive: true\n    }\n  );\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Number.POSITIVE_INFINITY,\n    initialHeight = Number.POSITIVE_INFINITY,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation) {\n    const matches = useMediaQuery(\"(orientation: portrait)\");\n    watch(matches, () => update());\n  }\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {AlignmentJustifyContent} from '../types'\n\nexport default (align: MaybeRefOrGetter<AlignmentJustifyContent | undefined>) =>\n  computed(() => {\n    const value = toValue(align)\n    return !value ? '' : `justify-content-${value}`\n  })\n","import type {Booleanish} from '../types'\nimport {computed, type ComputedRef, type MaybeRefOrGetter, toValue} from 'vue'\n\nconst isBooleanish = (input: unknown): input is Booleanish =>\n  typeof input === 'boolean' || input === '' || input === 'true' || input === 'false'\n\n/**\n * Resolves a Booleanish type reactively to type boolean\n */\nexport default <T>(el: MaybeRefOrGetter<T>): ComputedRef<T extends Booleanish ? boolean : T> =>\n  computed(() => {\n    const value = toValue(el)\n    return (\n      !isBooleanish(value)\n        ? value\n        : typeof value === 'boolean'\n        ? value\n        : value === '' || value === 'true'\n        ? true\n        : false\n    ) as T extends Booleanish ? boolean : T\n  })\n","import useBooleanish from './useBooleanish'\nimport type {AriaInvalid} from '../types'\nimport {computed, type MaybeRefOrGetter, toRef} from 'vue'\n\nexport default (\n  ariaInvalid: MaybeRefOrGetter<AriaInvalid | undefined>,\n  state: MaybeRefOrGetter<boolean | null | undefined>\n) => {\n  const resolvedAriaInvalid = useBooleanish(ariaInvalid)\n  const resolvedState = toRef(state)\n\n  return computed(() =>\n    resolvedAriaInvalid.value === true\n      ? 'true'\n      : typeof resolvedAriaInvalid.value === 'string'\n      ? resolvedAriaInvalid.value\n      : resolvedState.value === false\n      ? 'true'\n      : resolvedAriaInvalid.value === false\n      ? 'false'\n      : undefined\n  )\n}\n","import {computed, type MaybeRefOrGetter, toRef} from 'vue'\nimport {isLink, pick} from '../utils'\n\nexport default <T extends Record<string, unknown>, const B extends ReadonlyArray<PropertyKey>>(\n  props: MaybeRefOrGetter<T>,\n  pickProps?: MaybeRefOrGetter<B | (keyof T)[]>\n) => {\n  const pickPropsResolved = toRef(pickProps)\n  const resolvedProps = toRef(props)\n\n  const computedLink = toRef(() => isLink(resolvedProps.value))\n  const computedLinkProps = computed(() =>\n    computedLink.value\n      ? pick(\n          resolvedProps.value,\n          pickPropsResolved.value ?? [\n            'active',\n            'activeClass',\n            'append',\n            'href',\n            'rel',\n            'replace',\n            'routerComponentName',\n            'target',\n            'to',\n            'variant',\n            'opacity',\n            'opacityHover',\n            'underlineVariant',\n            'underlineOffset',\n            'underlineOffsetHover',\n            'underlineOpacity',\n            'underlineOpacityHover',\n          ]\n        )\n      : {}\n  )\n\n  return {computedLink, computedLinkProps}\n}\n","import {reactive} from 'vue'\nimport type {BreadcrumbItem} from '../types'\nimport {createGlobalState} from '@vueuse/core'\n\nexport default createGlobalState(() => {\n  const items = reactive<BreadcrumbItem[]>([])\n  const reset = (): void => {\n    items.splice(0, items.length)\n  }\n\n  return {items, reset}\n})\n","import {useColorMode, type UseColorModeOptions} from '@vueuse/core'\n\nexport interface ColorModeOptions extends UseColorModeOptions {\n  /**\n   * When set to true, useColorMode will automatically store itself and persist (default localstorage).\n   * @default false\n   */\n  persist?: boolean\n}\n\nexport default (opts: ColorModeOptions = {}) => {\n  const persist = opts.persist ?? false\n  const attribute = 'data-bs-theme'\n  const selector = 'body'\n  return useColorMode({\n    attribute,\n    selector,\n    storageKey:\n      persist === true\n        ? `bv-color-${opts.attribute ?? attribute}-${opts.selector ?? selector}`\n        : null,\n    ...opts,\n  })\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\nimport type {ColorExtendables} from '../types'\n\nexport default (obj: MaybeRefOrGetter<ColorExtendables>) =>\n  computed(() => {\n    const props = toValue(obj)\n    return {\n      [`text-bg-${props.variant}`]: props.variant !== null,\n      [`text-${props.textVariant}`]: props.textVariant !== null && props.variant === null,\n      [`bg-${props.bgVariant}`]: props.bgVariant !== null && props.variant === null,\n    }\n  })\n","import type {Breakpoint} from '../types'\nimport {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | Breakpoint | 'fluid'>) =>\n  computed(() => {\n    const resolvedValue = toValue(value)\n    return {\n      container: resolvedValue === true,\n      [`container-${resolvedValue}`]: typeof resolvedValue === 'string',\n    }\n  })\n","import {useIntervalFn, type UseIntervalFnOptions} from '@vueuse/core'\nimport {type MaybeRefOrGetter, readonly, ref, type Ref, toRef, watch, watchEffect} from 'vue'\n\ntype VoidFn = () => void\n\ninterface CountdownReturn {\n  isActive: Readonly<Ref<boolean>>\n  isPaused: Readonly<Ref<boolean>>\n  restart: VoidFn\n  stop: VoidFn\n  resume: VoidFn\n  pause: VoidFn\n  value: Readonly<Ref<number>>\n}\n\n/**\n * A simple interval timer that counts down the remaining seconds\n *\n * @param {MaybeRefOrGetter<number>} length the total amount of time to loop through in ms\n * @param {MaybeRefOrGetter<number>} interval how often the interval should refresh. Default 1000\n * @param {UseIntervalFnOptions} intervalOpts opts to pass to the interval fn. Default {}\n * @important ensure that you call `stop()` before unmount in the component\n */\nexport default (\n  length: MaybeRefOrGetter<number>,\n  interval: MaybeRefOrGetter<number> = ref(1000),\n  intervalOpts: UseIntervalFnOptions = {}\n): CountdownReturn => {\n  const resolvedLength = readonly(toRef(length))\n\n  const resolvedInterval = readonly(toRef(interval))\n\n  const isPaused = ref(false)\n\n  const intervalsPassed = ref(0)\n\n  const amountOfIntervals = toRef(() => Math.ceil(resolvedLength.value / resolvedInterval.value))\n\n  const value = toRef(() =>\n    isActive.value || isPaused.value\n      ? Math.round(resolvedLength.value - intervalsPassed.value * resolvedInterval.value)\n      : 0\n  )\n\n  const {pause, resume, isActive} = useIntervalFn(\n    () => {\n      intervalsPassed.value = intervalsPassed.value + 1\n    },\n    interval,\n    intervalOpts\n  )\n\n  const restart = () => {\n    isPaused.value = false\n    intervalsPassed.value = 0\n    resume()\n  }\n\n  const stop = () => {\n    isPaused.value = false\n    intervalsPassed.value = amountOfIntervals.value\n    // pause() // Only here for the sake of demonstrating the flow. It will be called in the watchEffect\n  }\n  watchEffect(() => {\n    if (intervalsPassed.value > amountOfIntervals.value) {\n      intervalsPassed.value = amountOfIntervals.value\n    }\n    if (intervalsPassed.value === amountOfIntervals.value) {\n      pause()\n    }\n  })\n\n  watch([resolvedInterval, resolvedLength], () => {\n    stop()\n    restart()\n  })\n\n  const myPause = () => {\n    if (isActive.value === false) return\n    isPaused.value = true\n    pause()\n  }\n\n  const myResume = () => {\n    if (intervalsPassed.value === amountOfIntervals.value) return\n    isPaused.value = false\n    resume()\n  }\n\n  return {\n    isActive: readonly(isActive),\n    isPaused: readonly(isPaused),\n    restart,\n    stop,\n    pause: myPause,\n    resume: myResume,\n    value,\n  }\n}\n","import {computed, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (value: MaybeRefOrGetter<boolean | null>) =>\n  computed(() => {\n    const resolvedValue = toValue(value)\n\n    return resolvedValue === true ? 'is-valid' : resolvedValue === false ? 'is-invalid' : null\n  })\n","import type {AriaInvalid, ButtonVariant, Size} from '../types'\nimport {computed, type MaybeRefOrGetter, toRef, toValue} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useStateClass from './useStateClass'\n\ninterface ClassesItemsInput {\n  plain?: boolean\n  button?: boolean\n  inline?: boolean\n  switch?: boolean\n  size?: Size\n}\n\nconst getClasses = (items: MaybeRefOrGetter<ClassesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'form-check': resolvedItems.plain === false && resolvedItems.button === false,\n      'form-check-inline': resolvedItems.inline === true,\n      'form-switch': resolvedItems.switch === true,\n      [`form-control-${resolvedItems.size}`]:\n        resolvedItems.size !== undefined &&\n        resolvedItems.size !== 'md' &&\n        resolvedItems.button === false,\n    }\n  })\n\ninterface InputClassesItemsInput {\n  plain?: boolean\n  button?: boolean\n  state?: boolean | null\n}\n\nconst getInputClasses = (items: MaybeRefOrGetter<InputClassesItemsInput>) => {\n  const resolvedItems = toRef(items)\n\n  const stateClass = useStateClass(() => resolvedItems.value.state ?? null)\n\n  return computed(() => [\n    stateClass.value,\n    {\n      'form-check-input':\n        resolvedItems.value.plain === false && resolvedItems.value.button === false,\n      'btn-check': resolvedItems.value.button === true,\n    },\n  ])\n}\n\ninterface LabelClasesItemsInput {\n  plain?: boolean\n  button?: boolean\n  buttonVariant?: ButtonVariant | null\n  size?: Size\n}\n\nconst getLabelClasses = (items: MaybeRefOrGetter<LabelClasesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'form-check-label': resolvedItems.plain === false && resolvedItems.button === false,\n      'btn': resolvedItems.button === true,\n      [`btn-${resolvedItems.buttonVariant}`]:\n        resolvedItems.button === true &&\n        resolvedItems.buttonVariant !== undefined &&\n        resolvedItems.buttonVariant !== null,\n      [`btn-${resolvedItems.size}`]:\n        resolvedItems.button && resolvedItems.size && resolvedItems.size !== 'md',\n    }\n  })\n\ninterface GroupAttrItemsInput {\n  required?: boolean\n  ariaInvalid?: AriaInvalid\n  state?: boolean | null\n}\n\nconst getGroupAttr = (items: MaybeRefOrGetter<GroupAttrItemsInput>) => {\n  const resolvedItems = toRef(items)\n  const computedAriaInvalid = useAriaInvalid(\n    () => resolvedItems.value.ariaInvalid,\n    () => resolvedItems.value.state\n  )\n  return computed(() => ({\n    'aria-invalid': computedAriaInvalid.value as Exclude<AriaInvalid, ''> | undefined,\n    'aria-required': resolvedItems.value.required === true ? true : undefined,\n  }))\n}\n\ninterface GroupClassesItemsInput {\n  validated?: boolean\n  buttons?: boolean\n  stacked?: boolean\n  size?: Size\n}\n\nconst getGroupClasses = (items: MaybeRefOrGetter<GroupClassesItemsInput>) =>\n  computed(() => {\n    const resolvedItems = toValue(items)\n    return {\n      'was-validated': resolvedItems.validated === true,\n      'btn-group': resolvedItems.buttons === true && resolvedItems.stacked === false,\n      'btn-group-vertical': resolvedItems.stacked === true && resolvedItems.buttons === true,\n      [`btn-group-${resolvedItems.size}`]: resolvedItems.size !== undefined,\n    }\n  })\n\nexport {getClasses, getInputClasses, getLabelClasses, getGroupAttr, getGroupClasses}\n","import {getId} from '../utils'\nimport {computed, type ComputedRef, type MaybeRefOrGetter, toValue} from 'vue'\n\nexport default (id?: MaybeRefOrGetter<string | undefined>, suffix?: string): ComputedRef<string> =>\n  computed(() => toValue(id) || getId(suffix))\n","import type {AriaInvalid, Booleanish, Size} from '../types'\nimport {nextTick, onActivated, onMounted, ref} from 'vue'\nimport useAriaInvalid from './useAriaInvalid'\nimport useBooleanish from './useBooleanish'\nimport useId from './useId'\nimport {useDebounceFn, useFocus, useToNumber, useVModel} from '@vueuse/core'\n\nexport interface CommonInputProps {\n  ariaInvalid?: AriaInvalid\n  autocomplete?: string\n  autofocus?: Booleanish\n  disabled?: Booleanish\n  form?: string\n  debounce?: string | number\n  debounceMaxWait?: string | number\n  formatter?: (val: string, evt: Event) => string\n  id?: string\n  lazy?: Booleanish\n  lazyFormatter?: Booleanish\n  list?: string\n  modelValue?: string | number\n  name?: string\n  number?: Booleanish\n  placeholder?: string\n  plaintext?: Booleanish\n  readonly?: Booleanish\n  required?: Booleanish\n  size?: Size\n  state?: Booleanish | null | undefined\n  trim?: Booleanish\n}\n\nexport default (\n  props: Readonly<CommonInputProps>,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  emit: ((evt: 'update:modelValue', val: any) => void) &\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ((evt: 'change', val: any) => void) &\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ((evt: 'blur', val: any) => void) &\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ((evt: 'input', val: any) => void)\n) => {\n  const input = ref<HTMLInputElement | null>(null)\n\n  const modelValue = useVModel(props, 'modelValue', emit)\n\n  const computedId = useId(() => props.id, 'input')\n  const autofocusBoolean = useBooleanish(() => props.autofocus)\n  const disabledBoolean = useBooleanish(() => props.disabled)\n  const lazyBoolean = useBooleanish(() => props.lazy)\n  const lazyFormatterBoolean = useBooleanish(() => props.lazyFormatter)\n  const numberBoolean = useBooleanish(() => props.number)\n  const stateBoolean = useBooleanish(() => props.state)\n  const trimBoolean = useBooleanish(() => props.trim)\n  const debounceNumber = useToNumber(() => props.debounce ?? 0)\n  const debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? NaN)\n\n  const internalUpdateModelValue = useDebounceFn(\n    (value: string | number | undefined) => {\n      modelValue.value = value\n    },\n    () => (lazyBoolean.value === true ? 0 : debounceNumber.value),\n    {maxWait: () => (lazyBoolean.value === true ? NaN : debounceMaxWaitNumber.value)}\n  )\n\n  const updateModelValue = (value: string | number | undefined, force = false) => {\n    if (lazyBoolean.value === true && force === false) return\n    internalUpdateModelValue(value)\n  }\n\n  const {focused} = useFocus(input, {\n    initialValue: autofocusBoolean.value,\n  })\n\n  const _formatValue = (value: string, evt: Event, force = false) => {\n    if (props.formatter !== undefined && (!lazyFormatterBoolean.value || force)) {\n      return props.formatter(value, evt)\n    }\n    return value\n  }\n\n  const _getModelValue = (value: string) => {\n    if (trimBoolean.value) return value.trim()\n    if (numberBoolean.value) return Number.parseFloat(value)\n\n    return value\n  }\n\n  onMounted(() => {\n    if (input.value) {\n      input.value.value = modelValue.value?.toString() ?? ''\n    }\n  })\n\n  onActivated(() => {\n    nextTick(() => {\n      if (autofocusBoolean.value) {\n        focused.value = true\n      }\n    })\n  })\n\n  const computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, stateBoolean)\n\n  const onInput = (evt: Event) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = _getModelValue(formattedValue)\n\n    updateModelValue(nextModel)\n\n    emit('input', formattedValue)\n  }\n\n  const onChange = (evt: Event) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = _getModelValue(formattedValue)\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n\n    emit('change', formattedValue)\n  }\n\n  const onBlur = (evt: FocusEvent) => {\n    emit('blur', evt)\n    if (!lazyBoolean.value && !lazyFormatterBoolean.value) return\n\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt, true)\n\n    const nextModel = _getModelValue(formattedValue)\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n  }\n\n  const focus = () => {\n    if (!disabledBoolean.value) {\n      focused.value = true\n    }\n  }\n\n  const blur = () => {\n    if (!disabledBoolean.value) {\n      focused.value = false\n    }\n  }\n\n  return {\n    input,\n    computedId,\n    computedAriaInvalid,\n    onInput,\n    onChange,\n    onBlur,\n    focus,\n    blur,\n  }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _getNested = (obj: any, path: string): any => {\n  if (!obj) return obj\n  if (path in obj) return obj[path]\n\n  const paths = path.split('.')\n\n  return _getNested(obj[paths[0]], paths.splice(1).join('.'))\n}\n\nconst _normalizeOption = (\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  option: any,\n  key: string | null = null,\n  componentName: string,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  props: any\n) => {\n  if (Object.prototype.toString.call(option) === '[object Object]') {\n    const value = _getNested(option, props.valueField)\n    const text = _getNested(option, props.textField)\n    const html = _getNested(option, props.htmlField)\n    const disabled = _getNested(option, props.disabledField)\n\n    const options = option[props.optionsField] || null\n    if (options !== null) {\n      return {\n        label: String(_getNested(option, props.labelField) || text),\n        options: normalizeOptions(options, componentName, props),\n      }\n    }\n\n    return {\n      value: typeof value === 'undefined' ? key || text : value,\n      text: String(typeof text === 'undefined' ? key : text),\n      html,\n      disabled: Boolean(disabled),\n    }\n  }\n  return {\n    value: key || option,\n    text: String(option),\n    disabled: false,\n  }\n}\n\nconst normalizeOptions = (\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  options: any[],\n  componentName: string,\n  props: Record<string, unknown>\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any => {\n  if (Array.isArray(options)) {\n    return options.map((option) => _normalizeOption(option, null, componentName, props))\n  } else if (Object.prototype.toString.call(options) === '[object Object]') {\n    // eslint-disable-next-line no-console\n    console.warn(\n      `[BootstrapVue warn]: ${componentName} - Setting prop \"options\" to an object is deprecated. Use the array format instead.`\n    )\n\n    return Object.keys(options).map((key: string) => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const el: any = options[key]\n      switch (typeof el) {\n        case 'object':\n          return _normalizeOption(el.text, String(el.value), componentName, props)\n        default:\n          return _normalizeOption(el, String(key), componentName, props)\n      }\n    })\n  }\n\n  return []\n}\n\nexport default normalizeOptions\n","import {createSharedComposable, getSSRHandler, tryOnScopeDispose, unrefElement} from '@vueuse/core'\nimport {\n  type ComponentInternalInstance,\n  computed,\n  getCurrentInstance,\n  type Ref,\n  shallowRef,\n  toRef,\n  watch,\n} from 'vue'\n\nconst modalOpenClassName = 'modal-open'\n\nexport const useSharedModalStack = createSharedComposable(() => {\n  /**\n   * A collection of all currently active modals\n   */\n  const stack: Ref<ComponentInternalInstance[]> = shallowRef([])\n\n  const countStack = toRef(() => stack.value.length)\n  const lastStack = toRef(() => stack.value[stack.value.length - 1])\n\n  const pushStack = (modal: ComponentInternalInstance) => {\n    stack.value = [...stack.value, modal]\n  }\n  const removeStack = (modal: ComponentInternalInstance) => {\n    stack.value = stack.value.filter((item) => item.uid !== modal.uid)\n  }\n\n  /**\n   * A collection of all registered modals\n   */\n  const registry: Ref<ComponentInternalInstance[]> = shallowRef([])\n\n  // Utility getters not made, would not be used (count, last)\n\n  const pushRegistry = (modal: ComponentInternalInstance) => {\n    registry.value = [...registry.value, modal]\n  }\n  const removeRegistry = (modal: ComponentInternalInstance) => {\n    registry.value = registry.value.filter((item) => item.uid !== modal.uid)\n  }\n\n  /**\n   * Removes an item from both the stack and registry\n   */\n  const dispose = (modal: ComponentInternalInstance): void => {\n    removeStack(modal)\n    removeRegistry(modal)\n  }\n\n  const updateHTMLAttrs = getSSRHandler('updateHTMLAttrs', (selector, attribute, value) => {\n    const el =\n      typeof selector === 'string'\n        ? window?.document.querySelector(selector)\n        : unrefElement(selector)\n    if (!el) return\n\n    if (attribute === 'class') {\n      el.classList.toggle(modalOpenClassName, value === modalOpenClassName)\n    } else {\n      el.setAttribute(attribute, value)\n    }\n  })\n\n  tryOnScopeDispose(() => {\n    updateHTMLAttrs('body', 'class', '')\n  })\n\n  watch(countStack, (newValue) => {\n    updateHTMLAttrs('body', 'class', newValue > 0 ? modalOpenClassName : '')\n  })\n\n  return {\n    registry,\n    stack,\n    lastStack,\n    countStack,\n    pushStack,\n    removeStack,\n    pushRegistry,\n    removeRegistry,\n    dispose,\n  }\n})\n\nexport default (modalOpen: Ref<boolean>) => {\n  const {pushRegistry, pushStack, removeStack, stack, dispose, countStack} = useSharedModalStack()\n\n  const currentModal = getCurrentInstance()\n\n  if (!currentModal || currentModal.type.__name !== 'BModal') {\n    throw new Error('useModalManager must only use in BModal component')\n  }\n\n  pushRegistry(currentModal)\n\n  tryOnScopeDispose(() => {\n    dispose(currentModal)\n  })\n\n  watch(\n    modalOpen,\n    (newValue, oldValue) => {\n      if (newValue) {\n        pushStack(currentModal)\n      } else if (oldValue && !newValue) {\n        removeStack(currentModal)\n      }\n    },\n    {immediate: true}\n  )\n\n  return {\n    activePosition: computed(() =>\n      stack.value.findIndex((el) => el.exposed?.id === currentModal.exposed?.id)\n    ),\n    activeModalCount: countStack,\n  }\n}\n","import {\n  type ComponentInternalInstance,\n  computed,\n  getCurrentInstance,\n  type MaybeRefOrGetter,\n  toRef,\n  toValue,\n} from 'vue'\nimport {useSharedModalStack} from './useModalManager'\n\nexport default (id: MaybeRefOrGetter<string | undefined> = undefined) => {\n  const {registry} = useSharedModalStack()\n  const instance = getCurrentInstance()\n\n  const modalComponent = computed(() => {\n    const resolvedId = toValue(id)\n    if (resolvedId) {\n      return registry.value.find((modal) => modal.exposed?.id.value === resolvedId) || null\n    }\n\n    if (!instance) {\n      return null\n    }\n\n    return findBModal(instance)\n  })\n\n  const modal = toRef(() => modalComponent.value?.proxy)\n\n  return {\n    show() {\n      modalComponent.value?.exposed?.show()\n    },\n    hide(trigger = '') {\n      modalComponent.value?.exposed?.hide(trigger)\n    },\n    modal,\n  }\n}\n\nconst findBModal = (component: ComponentInternalInstance): ComponentInternalInstance | null => {\n  if (!component.parent) {\n    return null\n  }\n\n  if (component.parent.type.__name === 'BModal') {\n    return component.parent\n  }\n\n  return findBModal(component.parent)\n}\n","import {useSharedModalStack} from './useModalManager'\n\nexport default () => {\n  const {lastStack, stack} = useSharedModalStack()\n\n  const hide = (trigger = '') => {\n    if (lastStack.value) {\n      lastStack.value.exposed?.hide(trigger)\n    }\n  }\n\n  const hideAll = (trigger = '') => {\n    for (const modal of stack.value) {\n      modal.exposed?.hide(trigger)\n    }\n  }\n\n  return {\n    hide,\n    hideAll,\n    // Todo: Supports listening events globally in the future\n  }\n}\n","import {computed, type MaybeRefOrGetter, readonly, toRef} from 'vue'\nimport type {RadiusElement, RadiusElementExtendables} from '../types'\nimport useBooleanish from './useBooleanish'\n\nexport default (obj: MaybeRefOrGetter<RadiusElementExtendables>) => {\n  const resolveRadiusElement = (\n    value: boolean | RadiusElement,\n    str: 'top' | 'bottom' | 'start' | 'end' | null\n  ): string => {\n    const strValue = str === null ? '' : `${str}-`\n\n    return value === 'circle'\n      ? `${strValue}rounded-circle`\n      : value === 'pill'\n      ? `${strValue}rounded-pill`\n      : typeof value === 'number' ||\n        value === '0' ||\n        value === '1' ||\n        value === '2' ||\n        value === '3' ||\n        value === '4' ||\n        value === '5'\n      ? `${strValue}rounded-${value}`\n      : value === 'none'\n      ? `${strValue}rounded-0`\n      : value === 'sm'\n      ? `${strValue}rounded-1`\n      : value === 'lg'\n      ? `${strValue}rounded-5`\n      : `${strValue}rounded` // true is last\n  }\n\n  const props = readonly(toRef(obj))\n  const roundedBoolean = useBooleanish(() => props.value.rounded)\n  const roundedTopBoolean = useBooleanish(() => props.value.roundedTop)\n  const roundedBottomBoolean = useBooleanish(() => props.value.roundedBottom)\n  const roundedStartBoolean = useBooleanish(() => props.value.roundedStart)\n  const roundedEndBoolean = useBooleanish(() => props.value.roundedEnd)\n  return computed(() => ({\n    [`${resolveRadiusElement(roundedBoolean.value as boolean | RadiusElement, null)}`]:\n      !!roundedBoolean.value,\n    [`${resolveRadiusElement(roundedTopBoolean.value as boolean | RadiusElement, 'top')}`]:\n      !!roundedTopBoolean.value,\n    [`${resolveRadiusElement(roundedBottomBoolean.value as boolean | RadiusElement, 'bottom')}`]:\n      !!roundedBottomBoolean.value,\n    [`${resolveRadiusElement(roundedStartBoolean.value as boolean | RadiusElement, 'start')}`]:\n      !!roundedStartBoolean.value,\n    [`${resolveRadiusElement(roundedEndBoolean.value as boolean | RadiusElement, 'end')}`]:\n      !!roundedEndBoolean.value,\n  }))\n}\n","import {type MaybeRefOrGetter, onMounted, readonly, toRef, watch} from 'vue'\nimport {useScrollLock} from '@vueuse/core'\n\nexport default (isOpen: MaybeRefOrGetter<boolean>, bodyScroll: MaybeRefOrGetter<boolean>) => {\n  const resolvedIsOpen = readonly(toRef(isOpen))\n  const resolvedBodyScrolling = readonly(toRef(bodyScroll))\n\n  /**\n   * We use the inverse because bodyScrolling === true means we allow scrolling, while bodyScrolling === false means we disallow\n   */\n  const inverseBodyScrollingValue = toRef(() => !resolvedBodyScrolling.value)\n\n  onMounted(() => {\n    const isLocked = useScrollLock(\n      document.body,\n      resolvedIsOpen.value && inverseBodyScrollingValue.value\n    )\n\n    watch([resolvedIsOpen, inverseBodyScrollingValue], ([modelVal, bodyVal]) => {\n      isLocked.value = modelVal && bodyVal\n    })\n  })\n}\n","import {createGlobalState} from '@vueuse/core'\nimport {ref} from 'vue'\nimport type {Toast} from '../types'\n\nconst posDefault = 'top-right'\n\nexport default createGlobalState(() => {\n  const toasts = ref<(Toast & {self: symbol})[]>([])\n\n  /**\n   * @returns {symbol} A symbol that corresponds to its unique id. You can pass this id to the hide function to force a Toast to hide\n   */\n  const show = (...[el, obj]: [el: string, obj?: Omit<Toast, 'body'>] | [el: Toast]): symbol => {\n    const payload: Toast = {pos: posDefault}\n    if (typeof el === 'string') {\n      Object.assign(payload, obj, {\n        body: el,\n        value: obj?.value || 5000,\n      } satisfies Toast)\n    } else {\n      Object.assign(payload, el, {value: el.value || 5000} satisfies Toast)\n    }\n    const self = Symbol()\n\n    toasts.value.push({...payload, self})\n\n    return self\n  }\n\n  /**\n   * You can get the symbol param from the return value from the show method\n   */\n  const hide = (self: symbol) => {\n    const ind = toasts.value.findIndex((el) => el.self === self)\n    if (ind === -1) return\n    toasts.value.splice(ind, 1)\n  }\n\n  return {toasts, show, hide}\n})\n","<template>\n  <span ref=\"placeholder\" />\n  <slot name=\"target\" :show=\"show\" :hide=\"hide\" :toggle=\"toggle\" :show-state=\"showState\" />\n  <Teleport :to=\"container\" :disabled=\"!container\">\n    <div\n      v-if=\"showStateInternal || persistentBoolean\"\n      :id=\"id\"\n      v-bind=\"$attrs\"\n      ref=\"element\"\n      :class=\"computedClasses\"\n      role=\"tooltip\"\n      tabindex=\"-1\"\n      :style=\"floatingStyles\"\n    >\n      <div\n        ref=\"arrow\"\n        :class=\"`${tooltipBoolean ? 'tooltip' : 'popover'}-arrow`\"\n        :style=\"arrowStyle\"\n        data-popper-arrow\n      />\n      <div class=\"overflow-auto\" :style=\"sizeStyles\">\n        <template v-if=\"title || $slots.title\">\n          <div\n            v-if=\"!isHtml\"\n            class=\"position-sticky top-0\"\n            :class=\"tooltipBoolean ? 'tooltip-inner' : 'popover-header'\"\n          >\n            <slot name=\"title\">\n              {{ title }}\n            </slot>\n          </div>\n          <!-- eslint-disable vue/no-v-html -->\n          <div\n            v-else\n            class=\"position-sticky top-0\"\n            :class=\"tooltipBoolean ? 'tooltip-inner' : 'popover-header'\"\n            v-html=\"sanitizedTitle\"\n          />\n          <!-- eslint-enable vue/no-v-html -->\n        </template>\n        <template v-if=\"(tooltipBoolean && !$slots.title && !title) || !tooltipBoolean\">\n          <div v-if=\"!isHtml\" :class=\"tooltipBoolean ? 'tooltip-inner' : 'popover-body'\">\n            <slot>\n              {{ content }}\n            </slot>\n          </div>\n          <!-- eslint-disable vue/no-v-html -->\n          <div\n            v-else\n            :class=\"tooltipBoolean ? 'tooltip-inner' : 'popover-body'\"\n            v-html=\"sanitizedContent\"\n          />\n          <!-- eslint-enable vue/no-v-html -->\n        </template>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  type Alignment,\n  arrow as arrowMiddleware,\n  autoPlacement,\n  autoUpdate,\n  type Boundary,\n  flip,\n  hide as hideMiddleware,\n  inline as inlineMiddleware,\n  type Middleware,\n  offset as offsetMiddleware,\n  type Placement as OriginalPlacement,\n  type RootBoundary,\n  shift,\n  size as sizeMiddleware,\n  useFloating,\n} from '@floating-ui/vue'\nimport {\n  BvTriggerableEvent,\n  getTransitionDelay,\n  IS_BROWSER,\n  resolveBootstrapPlacement,\n} from '../utils'\nimport {DefaultAllowlist, sanitizeHtml} from '../utils/sanitizer'\nimport {onClickOutside, useMouseInElement, useToNumber} from '@vueuse/core'\nimport {\n  type ComponentPublicInstance,\n  computed,\n  type CSSProperties,\n  type MaybeRef,\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  toRef,\n  unref,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {useBooleanish, useId} from '../composables'\nimport type {BPopoverProps} from '../types'\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<BPopoverProps>(), {\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  click: false,\n  container: undefined,\n  content: undefined,\n  customClass: '',\n  delay: () => ({show: 100, hide: 300}),\n  floatingMiddleware: undefined,\n  hide: undefined,\n  html: false,\n  id: undefined,\n  inline: false,\n  manual: false,\n  modelValue: false,\n  noAutoClose: false,\n  noFade: false,\n  noFlip: false,\n  noHide: false,\n  noShift: false,\n  noSize: false,\n  noninteractive: false,\n  offset: null,\n  placement: 'top',\n  realtime: false,\n  reference: null,\n  strategy: 'absolute',\n  target: null,\n  title: undefined,\n  tooltip: false,\n  variant: null,\n  persistent: false,\n})\n\nconst emit = defineEmits<{\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n  'update:modelValue': [value: boolean]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  target?: (props: {\n    show: () => void\n    hide: (e: Event) => void\n    toggle: (e: Event) => void\n    showState: boolean\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValueBoolean = useBooleanish(() => props.modelValue)\nconst showState = ref(modelValueBoolean.value)\nconst showStateInternal = ref(modelValueBoolean.value)\nwatchEffect(() => {\n  emit('update:modelValue', showState.value)\n})\n\nwatch(modelValueBoolean, () => {\n  if (modelValueBoolean.value === showState.value) return\n  modelValueBoolean.value ? show() : hide(new Event('update:modelValue'))\n})\n\nconst computedId = useId(() => props.id, 'popover')\n\nconst clickBoolean = useBooleanish(() => props.click)\nconst manualBoolean = useBooleanish(() => props.manual)\nconst noShiftBoolean = useBooleanish(() => props.noShift)\nconst noSizeBoolean = useBooleanish(() => props.noSize)\nconst noFlipBoolean = useBooleanish(() => props.noFlip)\nconst noFadeBoolean = useBooleanish(() => props.noFade)\nconst noAutoCloseBoolean = useBooleanish(() => props.noAutoClose)\nconst noHideBoolean = useBooleanish(() => props.noHide)\nconst realtimeBoolean = useBooleanish(() => props.realtime)\nconst inlineBoolean = useBooleanish(() => props.inline)\nconst persistentBoolean = useBooleanish(() => props.persistent)\nconst tooltipBoolean = useBooleanish(() => props.tooltip)\nconst noninteractiveBoolean = useBooleanish(() => props.noninteractive)\nconst isHtml = useBooleanish(() => props.html)\n\nconst hidden = ref(false)\n\nconst element = ref<HTMLElement | null>(null)\nconst targetTrigger = ref<HTMLElement | null>(null)\nconst arrow = ref<HTMLElement | null>(null)\nconst trigger = ref<HTMLElement | null>(null)\nconst placeholder = ref<HTMLElement | null>(null)\n\nconst sanitizedTitle = computed(() =>\n  props.title ? sanitizeHtml(props.title, DefaultAllowlist) : ''\n)\n\nconst sanitizedContent = computed(() =>\n  props.content ? sanitizeHtml(props.content, DefaultAllowlist) : ''\n)\nconst isAutoPlacement = toRef(() => props.placement.startsWith('auto'))\nconst offsetNumber = useToNumber(() => props.offset ?? NaN)\n\nconst boundary = computed<Boundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? undefined : props.boundary\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? props.boundary : undefined\n)\n\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n  if (props.floatingMiddleware !== undefined) {\n    return props.floatingMiddleware\n  }\n  const off = props.offset !== null ? offsetNumber.value : tooltipBoolean.value ? 6 : 8\n  const arr: Middleware[] = [offsetMiddleware(off)]\n  if (noFlipBoolean.value === false && !isAutoPlacement.value) {\n    arr.push(\n      flip({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (isAutoPlacement.value) {\n    arr.push(\n      autoPlacement({\n        alignment: (props.placement.split('-')[1] as Alignment) || undefined,\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (noShiftBoolean.value === false) {\n    arr.push(\n      shift({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (noHideBoolean.value === false) {\n    arr.push(\n      hideMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (inlineBoolean.value === true) {\n    arr.push(inlineMiddleware())\n  }\n  arr.push(arrowMiddleware({element: arrow, padding: 10}))\n  if (noSizeBoolean.value === false) {\n    arr.push(\n      sizeMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n        apply({availableWidth, availableHeight}) {\n          sizeStyles.value = {\n            maxHeight: availableHeight ? `${availableHeight}px` : undefined,\n            maxWidth: availableWidth ? `${availableWidth}px` : undefined,\n          }\n        },\n      })\n    )\n  }\n  return arr\n})\n\nconst placementRef = toRef(() =>\n  isAutoPlacement.value ? undefined : (props.placement as OriginalPlacement)\n)\n\nconst {floatingStyles, middlewareData, placement, update} = useFloating(targetTrigger, element, {\n  placement: placementRef,\n  middleware: floatingMiddleware,\n  strategy: toRef(() => props.strategy),\n  whileElementsMounted: (...args) => {\n    const cleanup = autoUpdate(...args, {animationFrame: realtimeBoolean.value})\n    // Important! Always return the cleanup function.\n    return cleanup\n  },\n})\n\nconst arrowStyle = ref<CSSProperties>({position: 'absolute'})\n\nwatch(middlewareData, () => {\n  if (noHideBoolean.value === false) {\n    if (middlewareData.value.hide?.referenceHidden) {\n      hidden.value = true\n    } else {\n      hidden.value = false\n    }\n  }\n  if (middlewareData.value.arrow) {\n    const {x, y} = middlewareData.value.arrow\n    arrowStyle.value = {\n      position: 'absolute',\n      top: y ? `${y}px` : '',\n      left: x ? `${x}px` : '',\n    }\n  }\n})\n\nconst computedClasses = computed(() => {\n  const type = tooltipBoolean.value ? 'tooltip' : 'popover'\n  return [\n    type,\n    `b-${type}`,\n    {\n      [`b-${type}-${props.variant}`]: props.variant !== null,\n      show: showState.value && !hidden.value,\n      ['pe-none']: !showState.value,\n      fade: !noFadeBoolean.value,\n      ['d-none']: !showState.value && noFadeBoolean.value,\n      [`${props.customClass}`]: props.customClass !== undefined,\n      [`bs-${type}-${resolveBootstrapPlacement(placement.value)}`]: placement.value !== undefined,\n    },\n  ]\n})\n\nconst {isOutside} = useMouseInElement(element)\nconst {isOutside: triggerIsOutside} = useMouseInElement(trigger)\n\nconst toggle = (e: Event) => {\n  const event = e ?? new Event('click')\n  showState.value ? hide(event) : show()\n}\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nlet showTimeout: ReturnType<typeof setTimeout> | undefined\nconst show = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    emit('show-prevented')\n    return\n  }\n  showStateInternal.value = true\n  nextTick(() => {\n    update()\n    showTimeout = setTimeout(\n      () => {\n        update()\n        showState.value = true\n        nextTick(() => {\n          emit('shown', buildTriggerableEvent('shown'))\n        })\n      },\n      typeof props.delay === 'number' ? props.delay : props.delay?.show || 0\n    )\n  })\n}\n\nconst hide = (e: Event) => {\n  const event = buildTriggerableEvent('hide', {cancelable: true})\n  emit('hide', event)\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n  if (showTimeout) {\n    clearTimeout(showTimeout)\n    showTimeout = undefined\n  }\n  const delay = typeof props.delay === 'number' ? props.delay : props.delay?.hide || 0\n  setTimeout(() => {\n    if (\n      e?.type === 'click' ||\n      e?.type === 'forceHide' ||\n      (e?.type === 'update:modelValue' && manualBoolean.value) ||\n      (!noninteractiveBoolean.value &&\n        isOutside.value &&\n        triggerIsOutside.value &&\n        !element.value?.contains(document?.activeElement) &&\n        !trigger.value?.contains(document?.activeElement)) ||\n      (noninteractiveBoolean.value && triggerIsOutside.value)\n    ) {\n      showState.value = false\n      nextTick(() => {\n        setTimeout(\n          () => {\n            showStateInternal.value = false\n          },\n          element.value ? getTransitionDelay(element.value) : 150\n        )\n        emit('hidden', buildTriggerableEvent('hidden'))\n      })\n    } else {\n      setTimeout(\n        () => {\n          hide(e)\n        },\n        delay < 50 ? 50 : delay\n      )\n    }\n  }, delay)\n}\n\ndefineExpose({\n  hide,\n  show,\n  toggle,\n})\n\nconst getElement = (\n  target: MaybeRef<\n    string | ComponentPublicInstance<HTMLElement> | HTMLSpanElement | HTMLElement | null\n  >\n): HTMLElement | undefined => {\n  const element = unref(target)\n  if (!element) return undefined\n  if (typeof element === 'string') {\n    const idElement = document.getElementById(element)\n    return idElement ? idElement : undefined\n  }\n  if ((element as ComponentPublicInstance<HTMLElement>).$el) {\n    return (element as ComponentPublicInstance<HTMLElement>).$el as HTMLElement\n  }\n  return element\n}\n\nconst bind = () => {\n  // TODO: is this the best way to bind the events?\n  // we place a span and get the next element sibling fo rthe listeners\n  if (props.target) {\n    const elem = getElement(props.target)\n    if (elem) {\n      trigger.value = elem\n    } else {\n      // eslint-disable-next-line no-console\n      console.warn('Target element not found', props.target)\n    }\n  } else {\n    trigger.value = placeholder.value?.nextElementSibling as HTMLElement\n  }\n  if (props.reference) {\n    const elem = getElement(props.reference)\n    if (elem) {\n      targetTrigger.value = elem\n    } else {\n      // eslint-disable-next-line no-console\n      console.warn('Reference element not found', props.reference)\n    }\n  } else {\n    targetTrigger.value = trigger.value\n  }\n  if (!trigger.value || manualBoolean.value) {\n    return\n  }\n  if (!IS_BROWSER) return\n  trigger.value.addEventListener('forceHide', hide)\n  if (clickBoolean.value) {\n    trigger.value.addEventListener('click', toggle)\n    return\n  }\n  trigger.value.addEventListener('pointerenter', show)\n  trigger.value.addEventListener('pointerleave', hide)\n  trigger.value.addEventListener('focus', show)\n  trigger.value.addEventListener('blur', hide)\n}\n\nconst unbind = () => {\n  if (trigger.value) {\n    trigger.value.removeEventListener('forceHide', hide)\n    trigger.value.removeEventListener('click', toggle)\n    trigger.value.removeEventListener('pointerenter', show)\n    trigger.value.removeEventListener('pointerleave', hide)\n    trigger.value.removeEventListener('focus', show)\n    trigger.value.removeEventListener('blur', hide)\n  }\n}\n\nonClickOutside(\n  element,\n  () => {\n    if (showState.value && clickBoolean.value && !noAutoCloseBoolean.value && !manualBoolean.value)\n      hide(new Event('clickOutside'))\n  },\n  {ignore: [trigger]}\n)\n\nwatch([() => props.click, () => props.target, () => props.reference], () => {\n  unbind()\n  bind()\n  // update()\n})\n\nonMounted(bind)\n\nonBeforeUnmount(unbind)\n</script>\n","import type {Placement} from '@floating-ui/vue'\nexport {autoUpdate} from '@floating-ui/vue'\n\nimport {type App, createApp, type DirectiveBinding, h, type Ref} from 'vue'\nimport {DefaultAllowlist, sanitizeHtml} from './sanitizer'\nimport BPopover from '../components/BPopover.vue'\n\n// TODO this function doesn't currently resolve with RTL in mind. Once Bootstrap finalizes their RTL, we should make this change here\n/**\n * Configures Bootstrap-like placement props to floating-ui Placement strings.\n * Top drops up, bottom drops down, end drops right, start drops left, dropend will _align_ the drop to the 'end',\n * dropstart will _align_ the drop to the 'start'. Bottom is default, so it is the last in the order. Bottom should essentially be the opposite of top\n * @param {top: boolean; bottom: boolean; start: boolean; end: boolean; dropstart: boolean; dropend: boolean}\n * @returns {Placement} Placement\n */\nexport const resolveFloatingPlacement = ({\n  top,\n  end,\n  start,\n  alignCenter,\n  alignEnd,\n}: {\n  top: boolean\n  start: boolean\n  end: boolean\n  alignCenter: boolean\n  alignEnd: boolean\n}): Placement => {\n  const direction = top ? 'top' : start ? 'left' : end ? 'right' : 'bottom'\n  const align = alignEnd ? 'end' : alignCenter ? null : 'start'\n  return `${direction}${align ? `-${align}` : ''}` as Placement\n}\n\nexport const resolveBootstrapPlacement = (placement: Placement): string => {\n  const [_placement] = placement.split('-')\n  switch (_placement) {\n    case 'left':\n      return 'start'\n    case 'right':\n      return 'end'\n    default:\n      return _placement\n  }\n}\n\nexport const resolveActiveStatus = (values: DirectiveBinding['value']): boolean =>\n  typeof values !== 'object' || values.active !== false\n\nexport const resolveContent = (\n  values: DirectiveBinding['value'],\n  el: HTMLElement\n): {title?: string; content?: string} => {\n  const isActive = resolveActiveStatus(values)\n  if (!isActive) return {}\n\n  const missingBindingValue =\n    typeof values === 'undefined' ||\n    (typeof values === 'object' && !values.title && !values.content)\n  const title = el.getAttribute('title') || el.getAttribute('data-original-title')\n  if (missingBindingValue) {\n    if (title) {\n      el.removeAttribute('title')\n      el.setAttribute('data-original-title', title)\n\n      return {\n        content: sanitizeHtml(title, DefaultAllowlist),\n      }\n    }\n    return {}\n  }\n  if (typeof values === 'string') {\n    return {\n      content: sanitizeHtml(values, DefaultAllowlist),\n    }\n  }\n  return {\n    title: values?.title ? sanitizeHtml(values?.title, DefaultAllowlist) : undefined,\n    content: values?.content ? sanitizeHtml(values?.content, DefaultAllowlist) : undefined,\n  }\n}\n\nexport const resolveDirectiveProps = (binding: DirectiveBinding, el: HTMLElement) => ({\n  target: el,\n  modelValue: binding.modifiers.show,\n  inline: binding.modifiers.inline,\n  click: binding.modifiers.click,\n  realtime: binding.modifiers.realtime,\n  persistent: binding.modifiers.persistent,\n  placement: binding.modifiers.left\n    ? 'left'\n    : binding.modifiers.right\n    ? 'right'\n    : binding.modifiers.bottom\n    ? 'bottom'\n    : binding.modifiers.top\n    ? 'top'\n    : undefined,\n  html: true,\n  ...(typeof binding.value === 'object' ? binding.value : {}),\n  title: null,\n  content: null,\n})\n\nexport interface ElementWithPopper extends HTMLElement {\n  $__state?: Ref<{title: string; target: HTMLElement}>\n  $__app?: App\n  $__element?: HTMLElement\n}\n\nexport const bind = (el: ElementWithPopper, binding: DirectiveBinding) => {\n  const div = document.createElement('span')\n  if (binding.modifiers.body) document.body.appendChild(div)\n  else if (binding.modifiers.child) el.appendChild(div)\n  else el.parentNode?.insertBefore(div, el.nextSibling)\n  el.$__app = createApp({render: () => h(BPopover, {...el.$__state?.value})})\n  el.$__app.mount(div)\n  el.$__element = div\n}\n\nexport const unbind = (el: ElementWithPopper) => {\n  const div = el.$__element\n  el.$__app?.unmount()\n  delete el.$__app\n  delete el.$__state\n  setTimeout(() => {\n    div?.remove()\n  }, 0)\n  delete el.$__element\n}\n","type PropDefinition = {\n  type: unknown[]\n  default: unknown\n}\n\nexport interface ComponentProps {\n  [key: string]: PropDefinition\n}\n\n/**\n * @deprecated\n */\nexport default (\n  prefix: string,\n  breakpoints: string[],\n  definition: PropDefinition\n): ComponentProps =>\n  breakpoints.concat(['sm', 'md', 'lg', 'xl', 'xxl']).reduce((props, breakpoint) => {\n    props[\n      !prefix ? breakpoint : `${prefix}${breakpoint.charAt(0).toUpperCase() + breakpoint.slice(1)}`\n    ] = definition\n    return props\n  }, Object.create(null))\n","import type {ComponentProps} from './getBreakpointProps'\n\n/**\n * @deprecated\n */\nexport default (\n  props: Record<PropertyKey, unknown>,\n  els: ComponentProps,\n  propPrefix: string,\n  classPrefix = propPrefix\n): string[] =>\n  Object.keys(els).reduce((arr: string[], prop) => {\n    if (!props[prop]) return arr\n\n    arr.push(\n      [classPrefix, prop.replace(propPrefix, ''), props[prop]]\n        .filter((e) => e && typeof e !== 'boolean')\n        .join('-')\n        .toLowerCase()\n    )\n\n    return arr\n  }, [])\n","import {titleCase} from './stringUtils'\nimport type {TableField} from '../types'\n\nexport default (field: TableField) =>\n  typeof field === 'string'\n    ? titleCase(field)\n    : field.label !== undefined\n    ? field.label\n    : typeof field.key === 'string'\n    ? titleCase(field.key)\n    : field.key\n","export default (suffix = ''): string =>\n  `__BVID__${Math.random().toString().slice(2, 8)}___BV_${suffix}__`\n","import type {Slot, VNode} from 'vue'\n\nexport default (slot: Slot | undefined, filterBy: string): VNode[] =>\n  (slot?.() ?? [])\n    .reduce((arr: VNode[], slot: VNode) => {\n      if (typeof slot.type === 'symbol') {\n        arr = arr.concat(slot.children as unknown as VNode)\n      } else {\n        arr.push(slot)\n      }\n      return arr\n    }, [])\n    .filter((child) => (child.type as {__name: string} | undefined)?.__name === filterBy)\n","/**\n * @deprecated\n */\nexport const isObject = (obj: unknown): obj is Record<PropertyKey, unknown> =>\n  obj !== null && typeof obj === 'object'\n\n/**\n * @deprecated\n */\nexport const isNumeric = (value: unknown): boolean => /^[0-9]*\\.?[0-9]+$/.test(String(value))\n","import type {RouteLocationRaw} from 'vue-router'\n\nexport default (props: {href?: string; to?: RouteLocationRaw}): boolean =>\n  !!(props.href || props.to)\n","import type {InjectionKey, Ref} from 'vue'\nimport type {\n  ButtonVariant,\n  CheckboxValue,\n  ClassValue,\n  ColorVariant,\n  RadioValue,\n  RadiusElement,\n  Size,\n  TabType,\n  TextColorVariant,\n} from '../types'\n\n// BCarousel\nexport const carouselInjectionKey: InjectionKey<{\n  background: Readonly<Ref<string | undefined>>\n  width: Readonly<Ref<string | undefined>>\n  height: Readonly<Ref<string | undefined>>\n}> = Symbol('carousel')\n\n// BTabs\nexport const tabsInjectionKey: InjectionKey<{\n  lazy: Readonly<Ref<boolean>>\n  card: Readonly<Ref<boolean>>\n  noFade: Readonly<Ref<boolean>>\n  registerTab: (tab: Readonly<Ref<TabType>>) => void\n  unregisterTab: (id: string) => void\n  activateTab: (id: string | undefined) => void\n  activeTabClass: Readonly<Ref<ClassValue>>\n  activeId: Readonly<Ref<string | undefined>>\n}> = Symbol('tabs')\n\n// BProgress\nexport const progressInjectionKey: InjectionKey<{\n  animated: Readonly<Ref<boolean | undefined>>\n  max: Readonly<Ref<number | string>>\n  showProgress: Readonly<Ref<boolean | undefined>>\n  showValue: Readonly<Ref<boolean | undefined>>\n  striped: Readonly<Ref<boolean | undefined>>\n}> = Symbol('progress')\n\n// BListGroup\nexport const listGroupInjectionKey: InjectionKey<{\n  numbered: Readonly<Ref<boolean>>\n}> = Symbol('listGroup')\n\n// BAvatarGroup\nexport const avatarGroupInjectionKey: InjectionKey<{\n  overlapScale: Readonly<Ref<number>>\n  size: Readonly<Ref<Size | string | undefined>>\n  square: Readonly<Ref<boolean>>\n  rounded: Readonly<Ref<RadiusElement | boolean>>\n  roundedTop: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedBottom: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedStart: Readonly<Ref<RadiusElement | boolean | undefined>>\n  roundedEnd: Readonly<Ref<RadiusElement | boolean | undefined>>\n  variant: Readonly<Ref<ColorVariant | null>>\n  bgVariant: Readonly<Ref<ColorVariant | null>>\n  textVariant: Readonly<Ref<TextColorVariant | null>>\n}> = Symbol('avatarGroup')\n\n// BAccordion\nexport const accordionInjectionKey: InjectionKey<{\n  openItem: Readonly<Ref<string | undefined>>\n  free: Readonly<Ref<boolean>>\n  setOpenItem: (id: string) => void\n}> = Symbol('accordion')\n\n// BFormCheckboxGroup\nexport const checkboxGroupKey: InjectionKey<{\n  modelValue: Ref<CheckboxValue[]>\n  switch: Readonly<Ref<boolean>>\n  buttonVariant: Readonly<Ref<ButtonVariant | null>>\n  form: Readonly<Ref<string | undefined>>\n  name: Readonly<Ref<string>>\n  state: Readonly<Ref<boolean | undefined | null>>\n  plain: Readonly<Ref<boolean>>\n  size: Readonly<Ref<Size>>\n  inline: Readonly<Ref<boolean>>\n  required: Readonly<Ref<boolean>>\n  buttons: Readonly<Ref<boolean>>\n  disabled: Readonly<Ref<boolean>>\n}> = Symbol('checkboxGroup')\n\nexport const radioGroupKey: InjectionKey<{\n  modelValue: Ref<RadioValue>\n  buttonVariant: Readonly<Ref<ButtonVariant | null>>\n  form: Readonly<Ref<string | undefined>>\n  name: Readonly<Ref<string>>\n  buttons: Readonly<Ref<boolean>>\n  state: Readonly<Ref<boolean | undefined | null>>\n  plain: Readonly<Ref<boolean>>\n  size: Readonly<Ref<Size>>\n  inline: Readonly<Ref<boolean>>\n  required: Readonly<Ref<boolean>>\n  disabled: Readonly<Ref<boolean>>\n}> = Symbol('radioGroup')\n\n// Collapse\nexport const collapseInjectionKey: InjectionKey<{\n  id?: Readonly<Ref<string>>\n  readonly close?: () => void\n  readonly open?: () => void\n  readonly toggle?: () => void\n  visible?: Readonly<Ref<boolean>>\n  isNav?: Readonly<Ref<boolean>>\n}> = Symbol('collapse')\n\nexport const dropdownInjectionKey: InjectionKey<{\n  id?: Readonly<Ref<string>>\n  readonly close?: () => void\n  readonly open?: () => void\n  readonly toggle?: () => void\n  visible?: Readonly<Ref<boolean>>\n  isNav?: Readonly<Ref<boolean>>\n}> = Symbol('collapse')\n\nexport const navbarInjectionKey: InjectionKey<{\n  tag?: Readonly<Ref<string>>\n  autoClose?: Readonly<Ref<boolean>>\n}> = Symbol('navbar')\n","import type {Slots, VNode} from 'vue'\n\nexport default (name: string, scope = {}, $slots: Slots = {}): VNode => {\n  // Ensure names is an array\n  const names = [name]\n  let slot\n  for (let i = 0; i < names.length && !slot; i++) {\n    const name = names[i]\n    slot = $slots[name]\n  }\n  // Note: in Vue 3.x, slots have been unified. No more scoped slots and all slots are exposed as functions\n  return (slot && typeof slot === 'function' ? slot(scope) : slot) as unknown as VNode\n}\n","/**\n * Validates a number is an integer. If not return NaN\n *\n * @param value\n * @param defaultValue\n * @returns\n * @deprecated\n */\nexport const toInteger = (value: number, defaultValue = NaN): number =>\n  Number.isInteger(value) ? value : defaultValue\n\n/**\n * @param value\n * @param defaultValue\n * @returns\n * @deprecated\n */\nexport const stringToInteger = (value: string, defaultValue = NaN): number => {\n  const integer = Number.parseInt(value, 10)\n  return Number.isNaN(integer) ? defaultValue : integer\n}\n\n/**\n * Validates a number is a float. If not return NaN\n *\n * @param value\n * @param defaultValue\n * @returns\n * @deprecated\n */\nexport const toFloat = (value: number | string, defaultValue = NaN): number => {\n  const float = Number.parseFloat(value.toString())\n  return Number.isNaN(float) ? defaultValue : float\n}\n","/**\n * Removes properties from an object, based on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Omit<>\n */\nexport const omit = <\n  A extends Record<PropertyKey, unknown>,\n  const B extends ReadonlyArray<PropertyKey>,\n>(\n  objToPluck: A,\n  keysToPluck: B | (keyof A)[]\n): Omit<A, B[number]> =>\n  Object.keys(objToPluck)\n    .filter((key) => !keysToPluck.map((el) => el.toString()).includes(key))\n    .reduce((result, key) => ({...result, [key]: objToPluck[key]}), {} as Omit<A, B[number]>)\n\n/**\n * Picks properties from an object, base on the values in an array, and returns the new object.\n * Equivalent to an object version of TS Pick<>\n */\nexport const pick = <\n  A extends Record<PropertyKey, unknown>,\n  const B extends ReadonlyArray<PropertyKey>,\n>(\n  objToPluck: A,\n  keysToPluck: B | (keyof A)[]\n): Pick<A, B[number]> =>\n  [...keysToPluck].reduce(\n    (memo, prop) => {\n      memo[prop] = objToPluck[prop]\n      return memo\n    },\n    {} as Record<PropertyKey, unknown>\n  ) as Pick<A, B[number]>\n\n/**\n * Dynamically get a nested value from an array or\n * object with a string.\n *\n * @example get(person, 'friends[0].name')\n * @link https://github.com/rayepps/radash/blob/master/src/object.ts#L214\n */\nexport const get = <TDefault = unknown>(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  value: any,\n  path: string,\n  defaultValue?: TDefault\n): TDefault => {\n  const segments = path.split(/[.[\\]]/g)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  let current: any = value\n  for (const key of segments) {\n    if (current === null) return defaultValue as TDefault\n    if (current === undefined) return defaultValue as TDefault\n    if (key.trim() === '') continue\n    current = current[key]\n  }\n  if (current === undefined) return defaultValue as TDefault\n  return current\n}\n","import type {ConfigurationOption} from '../types'\n\nexport default <Type extends string, Base extends ConfigurationOption<Type>>(\n  options: Base,\n  values: Type[]\n): Type[] => {\n  const {all, ...others} = options\n  const valuesCopy: Partial<Record<keyof Base, boolean>> = {}\n  if (all) {\n    values.forEach((el) => {\n      valuesCopy[el] = all\n    })\n  }\n  const merge: Record<string, boolean> = {...valuesCopy, ...others}\n  return (\n    Object.entries(merge)\n      // filtering possible invalid keys\n      .filter(([name, value]) => !!value && values.includes(name as Type))\n      .map(([name]) => name as Type)\n  )\n}\n","// Suffix can be a falsey value so nothing is appended to string\n// (helps when looping over props & some shouldn't change)\n\nimport {upperFirst} from './stringUtils'\n\n/**\n * Use data last parameters to allow for currying\n *\n * @param suffix\n * @param value\n * @returns\n */\nexport const suffixPropName = (suffix: string, value: string): string =>\n  value + (suffix ? upperFirst(suffix) : '')\n","<template>\n  <div :id=\"computedId\" class=\"accordion\" :class=\"computedClasses\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish} from '../../types'\nimport {computed, provide, readonly} from 'vue'\nimport {accordionInjectionKey} from '../../utils'\nimport {useBooleanish, useId} from '../../composables'\nimport {useVModel} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    flush?: Booleanish\n    free?: Booleanish\n    id?: string\n    modelValue?: string\n  }>(),\n  {\n    flush: false,\n    free: false,\n    id: undefined,\n    modelValue: undefined,\n  }\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: string]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst computedId = useId(() => props.id, 'accordion')\n\nconst flushBoolean = useBooleanish(() => props.flush)\nconst freeBoolean = useBooleanish(() => props.free)\n\nconst computedClasses = computed(() => ({\n  'accordion-flush': flushBoolean.value,\n}))\n\nprovide(accordionInjectionKey, {\n  openItem: readonly(modelValue),\n  free: freeBoolean,\n  setOpenItem: (id: string) => {\n    modelValue.value = id\n  },\n})\n</script>\n","<template>\n  <slot\n    :id=\"computedId\"\n    name=\"header\"\n    :visible=\"modelValueBoolean\"\n    :toggle=\"toggleFn\"\n    :open=\"open\"\n    :close=\"close\"\n  />\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    ref=\"element\"\n    class=\"collapse\"\n    :class=\"computedClasses\"\n    :is-nav=\"isNavBoolean\"\n    v-bind=\"$attrs\"\n  >\n    <slot :visible=\"modelValueBoolean\" :toggle=\"toggleFn\" :open=\"open\" :close=\"close\" />\n  </component>\n  <slot\n    :id=\"computedId\"\n    name=\"footer\"\n    :visible=\"modelValueBoolean\"\n    :toggle=\"toggleFn\"\n    :open=\"open\"\n    :close=\"close\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, onMounted, provide, readonly, ref, watch} from 'vue'\nimport {useBooleanish, useId} from '../composables'\nimport {useEventListener, useVModel} from '@vueuse/core'\nimport type {Booleanish} from '../types'\nimport {BvTriggerableEvent, collapseInjectionKey, getTransitionDelay} from '../utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    // appear?: Booleanish\n    horizontal?: Booleanish\n    id?: string\n    isNav?: Booleanish\n    modelValue?: Booleanish\n    skipAnimation?: Booleanish\n    tag?: string\n    toggle?: Booleanish\n    visible?: Booleanish\n  }>(),\n  {\n    horizontal: false,\n    id: undefined,\n    isNav: false,\n    modelValue: false,\n    skipAnimation: false,\n    tag: 'div',\n    toggle: false,\n    visible: false,\n  }\n)\n\nconst emit = defineEmits<{\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'update:modelValue': [value: boolean]\n}>()\n\ndefineSlots<{\n  default?: (props: {\n    close: () => void\n    open: () => void\n    toggle: () => void\n    visible: boolean\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  footer?: (props: {\n    close: () => void\n    id: string\n    open: () => void\n    toggle: () => void\n    visible: boolean\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  header?: (props: {\n    close: () => void\n    id: string\n    open: () => void\n    toggle: () => void\n    visible: boolean\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n}>()\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst modelValueBoolean = useBooleanish(modelValue)\nconst toggleBoolean = useBooleanish(() => props.toggle)\nconst horizontalBoolean = useBooleanish(() => props.horizontal)\nconst isNavBoolean = useBooleanish(() => props.isNav)\nconst visibleBoolean = useBooleanish(() => props.visible)\nconst skipAnimationBoolean = useBooleanish(() => props.skipAnimation)\n\nconst computedId = useId(() => props.id, 'collapse')\n\nconst element = ref<HTMLElement | null>(null)\nconst isCollapsing = ref(false)\nconst show = ref(modelValueBoolean.value)\n\nconst computedClasses = computed(() => ({\n  'show': show.value,\n  'navbar-collapse': isNavBoolean.value,\n  'collapsing': isCollapsing.value,\n  'closing': show.value && !modelValueBoolean.value,\n  'collapse-horizontal': horizontalBoolean.value,\n}))\n\nconst close = () => {\n  modelValue.value = false\n}\nconst open = () => {\n  modelValue.value = true\n}\nconst toggleFn = () => {\n  modelValue.value = !modelValueBoolean.value\n}\n\nlet revealTimeout: ReturnType<typeof setTimeout> | undefined\nlet hideTimeout: ReturnType<typeof setTimeout> | undefined\nlet _skipAnimation = skipAnimationBoolean.value\n\nconst reveal = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    emit('show-prevented')\n    return\n  }\n  clearTimeout(hideTimeout)\n  clearTimeout(revealTimeout)\n  show.value = true\n  if (_skipAnimation) return\n  isCollapsing.value = true\n  nextTick(() => {\n    if (element.value === null) return\n    if (horizontalBoolean.value) {\n      element.value.style.width = `${element.value.scrollWidth}px`\n    } else {\n      element.value.style.height = `${element.value.scrollHeight}px`\n    }\n    revealTimeout = setTimeout(() => {\n      isCollapsing.value = false\n      emit('shown')\n      if (element.value === null) return\n      element.value.style.height = ''\n      element.value.style.width = ''\n    }, getTransitionDelay(element.value))\n  })\n}\n\nconst hide = () => {\n  const event = buildTriggerableEvent('hide', {cancelable: true})\n  emit('hide', event)\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n  clearTimeout(revealTimeout)\n  clearTimeout(hideTimeout)\n  if (element.value === null) return\n  if (_skipAnimation) {\n    show.value = false\n    return\n  }\n  if (isCollapsing.value) {\n    element.value.style.height = ``\n    element.value.style.width = ``\n    // return\n  } else {\n    if (horizontalBoolean.value) {\n      element.value.style.width = `${element.value.scrollWidth}px`\n    } else {\n      element.value.style.height = `${element.value.scrollHeight}px`\n    }\n  }\n  // element.value.style.height = `${element.value.scrollHeight}px`\n  element.value.offsetHeight // force reflow\n  isCollapsing.value = true\n  nextTick(() => {\n    if (element.value === null) return\n    element.value.style.height = ``\n    element.value.style.width = ``\n    hideTimeout = setTimeout(() => {\n      show.value = false\n      isCollapsing.value = false\n      emit('hidden')\n    }, getTransitionDelay(element.value))\n  })\n}\n\nwatch(modelValue, () => {\n  modelValueBoolean.value ? reveal() : hide()\n})\n\nonMounted(() => {\n  if (element.value === null) return\n  if (!modelValueBoolean.value && toggleBoolean.value) {\n    nextTick(() => {\n      modelValue.value = true\n    })\n  }\n})\n\nwatch(skipAnimationBoolean, (newval) => {\n  _skipAnimation = newval\n})\n\nif (visibleBoolean.value) {\n  _skipAnimation = true\n  modelValue.value = true\n  nextTick(() => {\n    _skipAnimation = skipAnimationBoolean.value\n  })\n}\n\nwatch(visibleBoolean, (newval) => {\n  _skipAnimation = true\n  newval ? open() : close()\n  nextTick(() => {\n    _skipAnimation = skipAnimationBoolean.value\n  })\n})\n\nuseEventListener(element, 'bv-toggle', () => {\n  modelValue.value = !modelValueBoolean.value\n})\n\ndefineExpose({\n  close,\n  isNav: isNavBoolean,\n  open,\n  toggle: toggleFn,\n  visible: readonly(show),\n})\n\nprovide(collapseInjectionKey, {\n  id: computedId,\n  close,\n  open,\n  toggle: toggleFn,\n  visible: readonly(show),\n  isNav: isNavBoolean,\n})\n</script>\n","<template>\n  <div class=\"accordion-item\" v-bind=\"wrapperAttrs\" :class=\"wrapperClass\">\n    <BCollapse\n      :id=\"computedId\"\n      v-model=\"modelValue\"\n      class=\"accordion-collapse\"\n      :class=\"collapseClass\"\n      :aria-labelledby=\"`${computedId}-heading`\"\n      v-bind=\"collapseAttrs\"\n      :tag=\"tag\"\n      :toggle=\"toggle\"\n      :horizontal=\"horizontal\"\n      :visible=\"visible\"\n      :is-nav=\"isNav\"\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown')\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden')\"\n      @hide-prevented=\"emit('hide-prevented')\"\n      @show-prevented=\"emit('show-prevented')\"\n    >\n      <template #header=\"{visible: toggleVisible, toggle: slotToggle}\">\n        <component\n          :is=\"headerTag\"\n          :id=\"`${computedId}-heading`\"\n          class=\"accordion-header\"\n          :class=\"headerClass\"\n          v-bind=\"headerAttrs\"\n        >\n          <button\n            class=\"accordion-button\"\n            v-bind=\"buttonAttrs\"\n            :class=\"[{collapsed: !toggleVisible}, buttonClass]\"\n            type=\"button\"\n            :aria-expanded=\"toggleVisible ? 'true' : 'false'\"\n            :aria-controls=\"computedId\"\n            @click=\"slotToggle\"\n          >\n            <slot name=\"title\"> {{ title }} </slot>\n          </button>\n        </component>\n      </template>\n      <div class=\"accordion-body\" v-bind=\"bodyAttrs\" :class=\"bodyClass\">\n        <slot />\n      </div>\n    </BCollapse>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {inject, onMounted, useAttrs, watch} from 'vue'\nimport {useVModel} from '@vueuse/core'\nimport BCollapse from '../BCollapse.vue'\nimport {accordionInjectionKey, BvTriggerableEvent} from '../../utils'\nimport {useId} from '../../composables'\nimport type {AttrsValue, Booleanish, ClassValue} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\nconst {class: wrapperClass, ...collapseAttrs} = useAttrs()\n\nconst props = withDefaults(\n  defineProps<{\n    bodyAttrs?: AttrsValue\n    bodyClass?: ClassValue\n    buttonAttrs?: AttrsValue\n    buttonClass?: ClassValue\n    collapseClass?: ClassValue\n    headerAttrs?: AttrsValue\n    headerClass?: ClassValue\n    headerTag?: string\n    horizontal?: Booleanish\n    id?: string\n    isNav?: Booleanish\n    modelValue?: boolean\n    tag?: string\n    title?: string\n    toggle?: Booleanish\n    visible?: Booleanish\n    wrapperAttrs?: AttrsValue\n  }>(),\n  {\n    bodyAttrs: undefined,\n    bodyClass: undefined,\n    buttonAttrs: undefined,\n    buttonClass: undefined,\n    collapseClass: undefined,\n    headerAttrs: undefined,\n    headerClass: undefined,\n    headerTag: 'h2',\n    horizontal: undefined,\n    id: undefined,\n    isNav: undefined,\n    modelValue: false,\n    tag: undefined,\n    title: undefined,\n    toggle: undefined,\n    visible: false,\n    wrapperAttrs: undefined,\n  }\n)\n\nconst emit = defineEmits<{\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'update:modelValue': [value: boolean]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst parentData = inject(accordionInjectionKey, null)\n\nconst computedId = useId(() => props.id, 'accordion_item')\n\nonMounted(() => {\n  if (modelValue.value && !parentData?.free.value) {\n    parentData?.setOpenItem(computedId.value)\n  }\n  if (!modelValue.value && parentData?.openItem.value === computedId.value) {\n    modelValue.value = true\n  }\n})\n\nwatch(\n  () => parentData?.openItem.value,\n  () =>\n    (modelValue.value = parentData?.openItem.value === computedId.value && !parentData?.free.value)\n)\nwatch(modelValue, () => {\n  if (modelValue.value && !parentData?.free.value) parentData?.setOpenItem(computedId.value)\n})\n</script>\n","<template>\n  <Transition v-bind=\"computedAttrs\">\n    <slot />\n  </Transition>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, TransitionMode} from '../../types'\nimport {computed, type TransitionProps} from 'vue'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    appear?: Booleanish\n    mode?: TransitionMode\n    noFade?: Booleanish\n    transProps?: TransitionProps\n  }>(),\n  {\n    appear: false,\n    mode: undefined,\n    noFade: false,\n    transProps: undefined,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst appearBoolean = useBooleanish(() => props.appear)\nconst noFadeBoolean = useBooleanish(() => props.noFade)\n\nconst fadeProperties = computed(() => {\n  const NO_FADE_PROPS = {\n    name: '',\n    enterActiveClass: '',\n    enterToClass: '',\n    leaveActiveClass: '',\n    leaveToClass: 'showing',\n    enterFromClass: 'showing',\n    leaveFromClass: '',\n  }\n  const FADE_PROPS = {\n    ...NO_FADE_PROPS,\n    enterActiveClass: 'fade showing',\n    leaveActiveClass: 'fade showing',\n  }\n  return noFadeBoolean.value ? NO_FADE_PROPS : FADE_PROPS\n})\n\nconst baseProperties = computed(() => ({mode: props.mode, css: true, ...fadeProperties.value}))\n\nconst computedAttrs = computed(() =>\n  props.transProps !== undefined\n    ? {\n        // Order matters here since the props.transProps would get overwritten if it came first\n        // But the goal of props.transProps is to overwrite base properties\n        ...baseProperties.value,\n        ...props.transProps,\n      }\n    : appearBoolean.value\n    ? {\n        ...baseProperties.value,\n        appear: true,\n        appearActiveClass: fadeProperties.value.enterActiveClass,\n        appearToClass: fadeProperties.value.enterToClass,\n      }\n    : baseProperties.value\n)\n</script>\n\n<style lang=\"scss\">\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.25s linear;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","<template>\n  <button\n    :type=\"type\"\n    class=\"btn-close\"\n    :disabled=\"disabledBoolean\"\n    :aria-label=\"ariaLabel\"\n    @click=\"emit('click', $event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, ButtonType} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaLabel?: string\n    disabled?: Booleanish\n    type?: ButtonType\n  }>(),\n  {\n    ariaLabel: 'Close',\n    disabled: false,\n    type: 'button',\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :class=\"computedClasses\"\n    :role=\"label || hasLabelSlot ? role : null\"\n    :aria-hidden=\"label || hasLabelSlot ? null : true\"\n  >\n    <span v-if=\"label || hasLabelSlot\" class=\"visually-hidden\">\n      <slot name=\"label\">{{ label }}</slot>\n    </span>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {Booleanish, ColorVariant, SpinnerType} from '../types'\nimport {useBooleanish} from '../composables'\nimport {isEmptySlot} from '../utils'\n\nconst props = withDefaults(\n  defineProps<{\n    label?: string\n    role?: string\n    small?: Booleanish\n    tag?: string\n    type?: SpinnerType\n    variant?: ColorVariant | null\n  }>(),\n  {\n    label: undefined,\n    role: 'status',\n    small: false,\n    tag: 'span',\n    type: 'border',\n    variant: null,\n  }\n)\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  label?: (props: Record<string, never>) => any\n}>()\n\nconst smallBoolean = useBooleanish(() => props.small)\n\nconst computedClasses = computed(() => [\n  `spinner-${props.type}`,\n  {\n    [`spinner-${props.type}-sm`]: smallBoolean.value,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots.label))\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    v-if=\"tag === 'router-link'\"\n    v-slot=\"//@ts-ignore \n    {href: localHref, navigate, isActive, isExactActive}\"\n    v-bind=\"routerAttr\"\n    custom\n  >\n    <component\n      :is=\"routerTag\"\n      :href=\"localHref\"\n      :class=\"{\n        [defaultActiveClass]: activeBoolean,\n        [activeClass]: isActive,\n        [exactActiveClass]: isExactActive,\n      }\"\n      v-bind=\"$attrs\"\n      @click=\";[navigate($event), clicked($event)]\"\n    >\n      <slot />\n    </component>\n  </component>\n  <component :is=\"tag\" v-else :class=\"computedLinkClasses\" v-bind=\"routerAttr\" @click=\"clicked\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BLinkProps} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {collapseInjectionKey, navbarInjectionKey} from '../../utils'\nimport {computed, getCurrentInstance, inject, useAttrs} from 'vue'\n\n// TODO this component will likely have an issue with inheritAttrs\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(defineProps<BLinkProps>(), {\n  active: undefined,\n  activeClass: 'router-link-active',\n  append: false,\n  disabled: false,\n  event: 'click',\n  exactActiveClass: 'router-link-exact-active',\n  href: undefined,\n  icon: false,\n  opacity: undefined,\n  opacityHover: undefined,\n  // noPrefetch: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n  // prefetch: {type: [Boolean, String] as PropType<Booleanish>, default: null},\n  rel: undefined,\n  replace: false,\n  routerComponentName: 'router-link',\n  routerTag: 'a',\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: null,\n  variant: null,\n})\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst attrs = useAttrs()\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst iconBoolean = useBooleanish(() => props.icon)\n// TODO\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst appendBoolean = useBooleanish(() => props.append)\nconst disabledBoolean = useBooleanish(() => props.disabled)\n// TODO\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst replaceBoolean = useBooleanish(() => props.replace)\nconst collapseData = inject(collapseInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\nconst instance = getCurrentInstance()\n\nconst defaultActiveClass = 'active' as const\n\nconst tag = computed(() => {\n  const routerName = props.routerComponentName\n    .split('-')\n    .map((e) => e.charAt(0).toUpperCase() + e.slice(1))\n    .join('')\n  const hasRouter = instance?.appContext.app.component(routerName) !== undefined\n  if (!hasRouter || disabledBoolean.value || !props.to) {\n    return 'a'\n  }\n  return props.routerComponentName\n})\n\nconst computedHref = computed(() => {\n  const toFallback = '#'\n  if (props.href) return props.href\n\n  if (typeof props.to === 'string') return props.to || toFallback\n\n  const {to} = props\n\n  if (to !== undefined && 'path' in to) {\n    const path = to.path || ''\n    const query = to.query\n      ? `?${Object.keys(to.query)\n          .map((e) => `${e}=${to.query?.[e]}`)\n          .join('=')}`\n      : ''\n    const hash = !to.hash || to.hash.charAt(0) === '#' ? to.hash || '' : `#${to.hash}`\n    return `${path}${query}${hash}` || toFallback\n  }\n  // There is no resolver for `RouteLocationNamedRaw`. Which, I'm not sure there can be one in this context.\n\n  return toFallback\n})\n\nconst computedClasses = computed(() => ({\n  [`link-${props.variant}`]: props.variant !== null,\n  [`link-opacity-${props.opacity}`]: props.opacity !== undefined,\n  [`link-opacity-${props.opacityHover}-hover`]: props.opacityHover !== undefined,\n  [`link-underline-${props.underlineVariant}`]: props.underlineVariant !== null,\n  [`link-offset-${props.underlineOffset}`]: props.underlineOffset !== undefined,\n  [`link-offset-${props.underlineOffsetHover}-hover`]: props.underlineOffsetHover !== undefined,\n  [`link-underline-opacity-${props.underlineOpacity}`]: props.underlineOpacity !== undefined,\n  [`link-underline-opacity-${props.underlineOpacityHover}-hover`]:\n    props.underlineOpacityHover !== undefined,\n  'icon-link': iconBoolean.value === true,\n}))\n\nconst routerAttr = computed(() => ({\n  'class': computedClasses.value,\n  'to': props.to,\n  'href': computedHref.value,\n  'target': props.target,\n  'rel': props.target === '_blank' ? props.rel ?? 'noopener' : undefined,\n  'tabindex': disabledBoolean.value\n    ? '-1'\n    : typeof attrs.tabindex === 'undefined'\n    ? null\n    : attrs.tabindex,\n  'aria-disabled': disabledBoolean.value ? true : null,\n}))\n\nconst computedLinkClasses = computed(() => ({\n  [defaultActiveClass]: activeBoolean.value,\n  disabled: disabledBoolean.value,\n}))\n\nconst clicked = (e: MouseEvent): void => {\n  if (disabledBoolean.value) {\n    e.preventDefault()\n    e.stopImmediatePropagation()\n    return\n  }\n\n  if (\n    (collapseData?.isNav?.value === true && navbarData === null) ||\n    (navbarData !== null && navbarData.autoClose?.value === true)\n  ) {\n    collapseData?.close?.()\n  }\n\n  emit('click', e)\n}\n</script>\n","<template>\n  <component\n    :is=\"computedTag\"\n    class=\"btn\"\n    v-bind=\"linkProps\"\n    :class=\"computedClasses\"\n    :aria-disabled=\"nonStandardTag ? disabledBoolean : null\"\n    :aria-pressed=\"isToggle ? pressedBoolean : null\"\n    :autocomplete=\"isToggle ? 'off' : null\"\n    :disabled=\"isButton ? disabledBoolean : null\"\n    :href=\"href\"\n    :rel=\"computedLink ? rel : null\"\n    :role=\"nonStandardTag || computedLink ? 'button' : null\"\n    :target=\"computedLink ? target : null\"\n    :type=\"isButton ? type : null\"\n    :to=\"!isButton ? to : null\"\n    :append=\"computedLink ? append : null\"\n    @click=\"clicked\"\n  >\n    <template v-if=\"loadingBoolean\">\n      <slot name=\"loading\">\n        <template v-if=\"!loadingFillBoolean\">\n          {{ loadingText }}\n        </template>\n        <slot name=\"loading-spinner\">\n          <BSpinner :small=\"size !== 'lg'\" :label=\"loadingFillBoolean ? loadingText : undefined\" />\n        </slot>\n      </slot>\n    </template>\n    <template v-else>\n      <slot />\n    </template>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport BSpinner from '../BSpinner.vue'\nimport {useBLinkHelper, useBooleanish} from '../../composables'\nimport type {BLinkProps, Booleanish, ButtonType, ButtonVariant, Size} from '../../types'\nimport BLink from '../BLink/BLink.vue'\nimport {useVModel} from '@vueuse/core'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'loading'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'loading-spinner'?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<\n    {\n      loading?: Booleanish\n      loadingFill?: Booleanish\n      loadingText?: string\n      pill?: Booleanish\n      pressed?: Booleanish\n      size?: Size\n      squared?: Booleanish\n      tag?: string\n      type?: ButtonType\n      variant?: ButtonVariant | null\n    } & Omit<BLinkProps, 'variant'>\n  >(),\n  {\n    loading: false,\n    loadingFill: false,\n    loadingText: 'Loading...',\n    pill: false,\n    pressed: undefined,\n    size: 'md',\n    squared: false,\n    tag: 'button',\n    type: 'button',\n    // Link props\n    active: false, // Why is this active: false?\n    variant: 'secondary',\n    // All others use defaults\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    event: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    routerTag: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    // End link props\n  }\n)\n\nconst emit = defineEmits<{\n  'click': [value: MouseEvent]\n  'update:pressed': [value: boolean]\n}>()\n\nconst pressedValue = useVModel(props, 'pressed', emit)\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst pillBoolean = useBooleanish(() => props.pill)\nconst pressedBoolean = useBooleanish(() => props.pressed)\nconst squaredBoolean = useBooleanish(() => props.squared)\nconst loadingBoolean = useBooleanish(() => props.loading)\nconst loadingFillBoolean = useBooleanish(() => props.loadingFill)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active-class',\n  'exact-active-class',\n  'event',\n  'replace',\n  'router-component-name',\n  'router-tag',\n])\n\nconst isToggle = toRef(() => typeof pressedBoolean.value === 'boolean')\nconst isButton = toRef(\n  () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = toRef(() => props.to !== undefined)\nconst nonStandardTag = toRef(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\n\nconst computedClasses = computed(() => [\n  [`btn-${props.size}`],\n  {\n    [`btn-${props.variant}`]: props.variant !== null,\n    'active': activeBoolean.value || pressedBoolean.value,\n    'rounded-pill': pillBoolean.value,\n    'rounded-0': squaredBoolean.value,\n    'disabled': disabledBoolean.value,\n  },\n])\n\nconst computedTag = toRef(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: MouseEvent): void => {\n  if (disabledBoolean.value) {\n    e.preventDefault()\n    e.stopPropagation()\n    return\n  }\n  emit('click', e)\n  if (isToggle.value) {\n    pressedValue.value = !pressedBoolean.value\n  }\n}\n</script>\n","<template>\n  <BTransition :no-fade=\"!fadeBoolean\" :trans-props=\"{enterToClass: 'show'}\">\n    <div\n      v-if=\"isAlertVisible\"\n      ref=\"element\"\n      class=\"alert\"\n      role=\"alert\"\n      aria-live=\"polite\"\n      aria-atomic=\"true\"\n      :class=\"computedClasses\"\n    >\n      <slot />\n      <template v-if=\"dismissibleBoolean\">\n        <BButton v-if=\"hasCloseSlot || closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n          <slot name=\"close\">\n            {{ closeContent }}\n          </slot>\n        </BButton>\n        <BCloseButton v-else :aria-label=\"closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n      </template>\n    </div>\n  </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {Booleanish, ButtonVariant, ClassValue, ColorVariant} from '../../types'\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {useBooleanish, useCountdown} from '../../composables'\nimport {isEmptySlot} from '../../utils'\nimport {useElementHover, useToNumber, useVModel} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    closeClass?: ClassValue\n    closeContent?: string\n    closeLabel?: string\n    closeVariant?: ButtonVariant | null\n    dismissible?: Booleanish\n    fade?: Booleanish\n    immediate?: Booleanish\n    interval?: number | string\n    modelValue?: boolean | number\n    noHoverPause?: Booleanish\n    showOnPause?: Booleanish\n    variant?: ColorVariant | null\n  }>(),\n  {\n    closeClass: undefined,\n    closeContent: undefined,\n    closeLabel: 'Close',\n    closeVariant: 'secondary',\n    dismissible: false,\n    fade: false,\n    immediate: true,\n    interval: 1000,\n    modelValue: false,\n    noHoverPause: false,\n    showOnPause: true,\n    variant: 'info',\n  }\n)\n\nconst emit = defineEmits<{\n  'close': []\n  'close-countdown': [value: number]\n  'closed': []\n  'update:modelValue': [value: boolean | number]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  close?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = useVModel(props, 'modelValue', emit)\nconst isHovering = useElementHover(element)\n\nconst dismissibleBoolean = useBooleanish(() => props.dismissible)\nconst fadeBoolean = useBooleanish(() => props.fade)\nconst immediateBoolean = useBooleanish(() => props.immediate)\nconst showOnPauseBoolean = useBooleanish(() => props.showOnPause)\nconst noHoverPauseBoolean = useBooleanish(() => props.noHoverPause)\nconst intervalNumber = useToNumber(() => props.interval)\n\nconst hasCloseSlot = toRef(() => !isEmptySlot(slots.close))\n\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst computedClasses = computed(() => ({\n  [`alert-${props.variant}`]: props.variant !== null,\n  'alert-dismissible': dismissibleBoolean.value,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n  isActive,\n  pause,\n  restart,\n  resume,\n  stop,\n  isPaused,\n  value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n  immediate: typeof modelValue.value === 'number' && immediateBoolean.value,\n})\n\nconst isAlertVisible = toRef(() =>\n  typeof modelValue.value === 'boolean'\n    ? modelValue.value\n    : isActive.value || (showOnPauseBoolean.value && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n  variant: hasCloseSlot.value ? props.closeVariant : undefined,\n  class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n  emit('close')\n\n  if (typeof modelValue.value === 'boolean') {\n    modelValue.value = false\n  } else {\n    modelValue.value = 0\n    stop()\n  }\n\n  emit('closed')\n}\n\nconst onMouseEnter = () => {\n  if (noHoverPauseBoolean.value) return\n  pause()\n}\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  resume()\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n  pause,\n  restart,\n  resume,\n  stop,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n","<template>\n  <component\n    :is=\"computedTag\"\n    class=\"b-avatar\"\n    :class=\"computedClasses\"\n    :style=\"computedStyle\"\n    v-bind=\"computedLinkProps\"\n    :type=\"buttonBoolean && !computedLink ? props.buttonType : undefined\"\n    :disabled=\"disabledBoolean || null\"\n    @click=\"clicked\"\n  >\n    <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n      <slot />\n    </span>\n    <span v-else-if=\"!!src\" class=\"b-avatar-img\">\n      <img :src=\"src\" :alt=\"alt\" @error=\"onImgError\" />\n    </span>\n    <span v-else-if=\"!!text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n      {{ text }}\n    </span>\n    <span v-if=\"showBadge\" class=\"b-avatar-badge\" :class=\"badgeClasses\" :style=\"badgeStyle\">\n      <slot name=\"badge\">\n        {{ badgeText }}\n      </slot>\n    </span>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey, isEmptySlot, isNumeric, toFloat} from '../../utils'\nimport {computed, type CSSProperties, inject, type StyleValue, toRef} from 'vue'\nimport type {\n  BLinkProps,\n  Booleanish,\n  ButtonType,\n  ColorExtendables,\n  ColorVariant,\n  RadiusElementExtendables,\n  Size,\n  TextColorVariant,\n} from '../../types'\nimport {\n  useBLinkHelper,\n  useBooleanish,\n  useColorVariantClasses,\n  useRadiusElementClasses,\n} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      alt?: string\n      badge?: boolean | string // Can't make this Booleanish. string is valid text\n      badgeBgVariant?: ColorVariant | null\n      badgeOffset?: string\n      badgeStart?: Booleanish\n      badgeTextVariant?: TextColorVariant | null\n      badgeTop?: Booleanish\n      badgeVariant?: ColorVariant | null\n      button?: Booleanish\n      buttonType?: ButtonType\n      icon?: string\n      size?: Size | string // TODO number --> compat\n      square?: Booleanish\n      src?: string\n      text?: string\n    } & Omit<BLinkProps, 'event' | 'routerTag'> &\n      ColorExtendables &\n      RadiusElementExtendables\n  >(),\n  {\n    alt: 'avatar',\n    badge: false,\n    badgeBgVariant: null,\n    badgeOffset: undefined,\n    badgeStart: false,\n    badgeTextVariant: null,\n    badgeTop: false,\n    badgeVariant: 'primary',\n    button: false,\n    buttonType: 'button',\n    size: undefined,\n    square: false,\n    src: undefined,\n    text: undefined,\n    // Link props\n    variant: 'secondary',\n    // All others use defaults\n    active: undefined,\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    // End link props\n    // ColorExtendables props\n    // Variant is here as well\n    bgVariant: null,\n    textVariant: null,\n    // End ColorExtendables props\n    // RadiusElementExtendables props\n    rounded: false,\n    roundedBottom: undefined,\n    roundedEnd: undefined,\n    roundedStart: undefined,\n    roundedTop: undefined,\n    // End RadiusElementExtendables props\n  }\n)\n\nconst emit = defineEmits<{\n  'click': [value: MouseEvent]\n  'img-error': [value: Event]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  badge?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = ['sm', null, 'lg']\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst badgeStartBoolean = useBooleanish(() => props.badgeStart)\nconst badgeTopBoolean = useBooleanish(() => props.badgeTop)\nconst buttonBoolean = useBooleanish(() => props.button)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst squareBoolean = useBooleanish(() => props.square)\nconst roundedBoolean = useBooleanish(() => props.rounded)\nconst roundedTopBoolean = useBooleanish(() => props.roundedTop)\nconst roundedBottomBoolean = useBooleanish(() => props.roundedBottom)\nconst roundedStartBoolean = useBooleanish(() => props.roundedStart)\nconst roundedEndBoolean = useBooleanish(() => props.roundedEnd)\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = toRef(() => !isEmptySlot(slots.badge))\n\nconst showBadge = toRef(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = toRef(() => parentData?.size.value ?? squareBoolean.value)\nconst computedSize = toRef(() => parentData?.size.value ?? computeSize(props.size))\nconst computedVariant = toRef(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = toRef(() => parentData?.rounded.value ?? roundedBoolean.value)\nconst computedRoundedTop = toRef(() => parentData?.roundedTop.value ?? roundedTopBoolean.value)\nconst computedRoundedBottom = toRef(\n  () => parentData?.roundedBottom.value ?? roundedBottomBoolean.value\n)\nconst computedRoundedStart = toRef(\n  () => parentData?.roundedStart.value ?? roundedStartBoolean.value\n)\nconst computedRoundedEnd = toRef(() => parentData?.roundedEnd.value ?? roundedEndBoolean.value)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: computedRounded.value,\n  roundedTop: computedRoundedTop.value,\n  roundedBottom: computedRoundedBottom.value,\n  roundedStart: computedRoundedStart.value,\n  roundedEnd: computedRoundedEnd.value,\n}))\nconst badgeClasses = useColorVariantClasses(() => ({\n  variant: props.badgeVariant,\n  bgVariant: props.badgeBgVariant,\n  textVariant: props.badgeTextVariant,\n}))\n\nconst badgeText = toRef(() => (props.badge === true ? '' : props.badge))\n\nconst computedTextVariant = toRef(() => parentData?.textVariant.value ?? props.textVariant)\nconst computedBgVariant = toRef(() => parentData?.bgVariant.value ?? props.bgVariant)\n\nconst resolvedBackgroundClasses = useColorVariantClasses(() => ({\n  bgVariant: computedBgVariant.value,\n  textVariant: computedTextVariant.value,\n  variant: computedVariant.value,\n}))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  // Square overwrites all else\n  computedSquare.value === true ? undefined : radiusElementClasses.value,\n  {\n    [`b-avatar-${props.size}`]: !!props.size && SIZES.indexOf(computeSize(props.size)) !== -1,\n    [`btn-${computedVariant.value}`]: buttonBoolean.value ? computedVariant.value !== null : false,\n    'badge': !buttonBoolean.value && computedVariant.value !== null && hasDefaultSlot.value,\n    'btn': buttonBoolean.value,\n    // Square is the same as rounded-0 class\n    'rounded-0': computedSquare.value === true,\n  },\n])\n\nconst badgeStyle = computed<StyleValue>(() => {\n  const offset = props.badgeOffset || '0px'\n  const fontSize =\n    SIZES.indexOf(computedSize.value || null) === -1\n      ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n      : ''\n  return {\n    fontSize: fontSize || '',\n    top: badgeTopBoolean.value ? offset : '',\n    bottom: badgeTopBoolean.value ? '' : offset,\n    left: badgeStartBoolean.value ? offset : '',\n    right: badgeStartBoolean.value ? '' : offset,\n  }\n})\n\nconst textFontStyle = computed<StyleValue>(() => {\n  const fontSize =\n    SIZES.indexOf(computedSize.value || null) === -1\n      ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n      : null\n  return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n  const overlapScale = parentData?.overlapScale?.value || 0\n\n  const value =\n    computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n  return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = toRef(() =>\n  computedLink.value ? BLink : buttonBoolean.value ? 'button' : 'span'\n)\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  ...marginStyle.value,\n  width: computedSize.value ?? undefined,\n  height: computedSize.value ?? undefined,\n}))\n\nconst clicked = (e: MouseEvent): void => {\n  if (!disabledBoolean.value && (computedLink.value || buttonBoolean.value)) emit('click', e)\n}\n\nconst onImgError = (e: Event) => {\n  emit('img-error', e)\n}\n</script>\n\n<script lang=\"ts\">\nexport const computeSize = (value: string | undefined): string | null => {\n  const calcValue = typeof value === 'string' && isNumeric(value) ? toFloat(value, 0) : value\n  return typeof calcValue === 'number' ? `${calcValue}px` : calcValue || null\n}\n</script>\n","<template>\n  <component :is=\"tag\" class=\"b-avatar-group\" role=\"group\">\n    <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n      <slot />\n    </div>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {Booleanish, ColorExtendables, RadiusElementExtendables, Size} from '../../types'\nimport {avatarGroupInjectionKey} from '../../utils'\nimport {useBooleanish} from '../../composables'\nimport {computeSize} from './BAvatar.vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      overlap?: number | string\n      size?: Size | string\n      square?: Booleanish\n      tag?: string\n    } & ColorExtendables &\n      RadiusElementExtendables\n  >(),\n  {\n    overlap: 0.3,\n    size: undefined,\n    square: false,\n    tag: 'div',\n    // RadiusElementExtendables props\n    rounded: false,\n    roundedBottom: undefined,\n    roundedEnd: undefined,\n    roundedStart: undefined,\n    roundedTop: undefined,\n    // End RadiusElementExtendables props\n    // ColorExtendables props\n    bgVariant: null,\n    textVariant: null,\n    variant: null,\n    // End ColorExtendables props\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst squareBoolean = useBooleanish(() => props.square)\nconst roundedBoolean = useBooleanish(() => props.rounded)\nconst roundedTopBoolean = useBooleanish(() => props.roundedTop)\nconst roundedBottomBoolean = useBooleanish(() => props.roundedBottom)\nconst roundedStartBoolean = useBooleanish(() => props.roundedStart)\nconst roundedEndBoolean = useBooleanish(() => props.roundedEnd)\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = computed(() => computeSize(props.size))\nconst overlapScale = toRef(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n  const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n  return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n  overlapScale,\n  size: toRef(() => props.size),\n  square: squareBoolean,\n  rounded: roundedBoolean,\n  roundedTop: roundedTopBoolean,\n  roundedBottom: roundedBottomBoolean,\n  roundedStart: roundedStartBoolean,\n  roundedEnd: roundedEndBoolean,\n  variant: toRef(() => props.variant),\n  bgVariant: toRef(() => props.bgVariant),\n  textVariant: toRef(() => props.textVariant),\n})\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"badge\" :class=\"computedClasses\" v-bind=\"computedLinkProps\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useBLinkHelper, useBooleanish, useColorVariantClasses} from '../../composables'\nimport {computed, toRef} from 'vue'\nimport type {BLinkProps, Booleanish, ColorExtendables} from '../../types'\nimport BLink from '../BLink/BLink.vue'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<\n    {\n      dotIndicator?: Booleanish\n      pill?: Booleanish\n      tag?: string\n      textIndicator?: Booleanish\n    } & Omit<BLinkProps, 'event' | 'routerTag'> &\n      ColorExtendables\n  >(),\n  {\n    dotIndicator: false,\n    pill: false,\n    tag: 'span',\n    textIndicator: false,\n    // Link props\n    variant: 'secondary',\n    // All others use defaults\n    active: undefined,\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    // End link props\n    // ColorExtendables props\n    // Variant is here as well\n    textVariant: null,\n    bgVariant: null,\n    // End ColorExtendables props\n  }\n)\n\nconst pillBoolean = useBooleanish(() => props.pill)\nconst textIndicatorBoolean = useBooleanish(() => props.textIndicator)\nconst dotIndicatorBoolean = useBooleanish(() => props.dotIndicator)\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active',\n  'activeClass',\n  'append',\n  'disabled',\n  'href',\n  'rel',\n  'replace',\n  'routerComponentName',\n  'target',\n  'to',\n  'opacity',\n  'opacityHover',\n  'underlineVariant',\n  'underlineOffset',\n  'underlineOffsetHover',\n  'underlineOpacity',\n  'underlineOpacityHover',\n  'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'active': activeBoolean.value,\n    'disabled': disabledBoolean.value,\n    'rounded-pill': pillBoolean.value,\n    'position-absolute top-0 start-100 translate-middle':\n      textIndicatorBoolean.value || dotIndicatorBoolean.value,\n    'p-2 border border-light rounded-circle': dotIndicatorBoolean.value,\n    'text-decoration-none': computedLink.value,\n  },\n])\n</script>\n","<template>\n  <li class=\"breadcrumb-item\" :class=\"computedClasses\">\n    <component\n      :is=\"computedTag\"\n      :aria-current=\"computedAriaCurrent\"\n      v-bind=\"computedLinkProps\"\n      @click=\"clicked\"\n    >\n      <slot>\n        {{ text }}\n      </slot>\n    </component>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {pick} from '../../utils'\nimport {useBooleanish} from '../../composables'\nimport {computed, toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BLinkProps} from '../../types'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<\n    {\n      ariaCurrent?: string\n      text?: string\n    } & Omit<BLinkProps, 'event' | 'routerTag'>\n  >(),\n  {\n    ariaCurrent: 'location',\n    text: undefined,\n    // Link props\n    active: false, // Why is this active: false?\n    // All others use defaults\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    event: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    routerTag: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    variant: undefined,\n    // End link props\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\nconst computedClasses = computed(() => ({\n  active: activeBoolean.value,\n}))\n\nconst computedTag = toRef(() => (activeBoolean.value ? 'span' : BLink))\n\nconst computedAriaCurrent = toRef(() => (activeBoolean.value ? props.ariaCurrent : undefined))\n\nconst computedLinkProps = computed(() =>\n  computedTag.value !== 'span'\n    ? pick(props, [\n        'active',\n        'activeClass',\n        'append',\n        'disabled',\n        'href',\n        'rel',\n        'replace',\n        'routerComponentName',\n        'target',\n        'to',\n        'variant',\n        'opacity',\n        'opacityHover',\n        'underlineVariant',\n        'underlineOffset',\n        'underlineOffsetHover',\n        'underlineOpacity',\n        'underlineOpacityHover',\n        'icon',\n      ])\n    : {}\n)\n\nconst clicked = (e: MouseEvent): void => {\n  if (disabledBoolean.value || activeBoolean.value) {\n    e.preventDefault()\n    e.stopImmediatePropagation()\n    return\n  }\n  if (!disabledBoolean.value) emit('click', e)\n}\n</script>\n","<template>\n  <nav aria-label=\"breadcrumb\">\n    <ol class=\"breadcrumb\">\n      <slot name=\"prepend\" />\n      <BBreadcrumbItem v-for=\"(item, i) in breadcrumbItemObjects\" :key=\"i\" v-bind=\"item\">\n        {{ item.text }}\n      </BBreadcrumbItem>\n      <slot />\n      <slot name=\"append\" />\n    </ol>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useBreadcrumb} from '../../composables'\nimport type {BreadcrumbItem, BreadcrumbItemObject} from '../../types'\nimport BBreadcrumbItem from './BBreadcrumbItem.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    items?: BreadcrumbItem[]\n  }>(),\n  {items: undefined}\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  append?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  prepend?: (props: Record<string, never>) => any\n}>()\n\nconst breadcrumb = useBreadcrumb()\n\nconst breadcrumbItemObjects = computed<BreadcrumbItemObject[]>(() => {\n  const localItems = props.items || breadcrumb?.items || []\n  let activeDefined = false\n  const items = localItems.map((item, idx) => {\n    if (typeof item === 'string') {\n      item = {text: item}\n      if (idx < localItems.length - 1) item.href = '#'\n    }\n    if (item.active) activeDefined = true\n\n    // Auto-detect active by position in list\n    if (!item.active && !activeDefined) {\n      item.active = idx + 1 === localItems.length\n    }\n    return item\n  })\n  return items\n})\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"ariaLabel\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, Size} from '../../types'\nimport {computed} from 'vue'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaLabel?: string\n    size?: Size\n    tag?: string\n    vertical?: Booleanish\n  }>(),\n  {\n    ariaLabel: 'Group',\n    size: 'md',\n    tag: 'div',\n    vertical: false,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst verticalBoolean = useBooleanish(() => props.vertical)\n\nconst computedClasses = computed(() => ({\n  'btn-group': !verticalBoolean.value,\n  [`btn-group-${props.size}`]: props.size !== 'md',\n  'btn-group-vertical': verticalBoolean.value,\n}))\n</script>\n","<template>\n  <div :class=\"computedClasses\" class=\"btn-toolbar\" :role=\"role\" :aria-label=\"ariaLabel\">\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish} from '../../types'\nimport {computed} from 'vue'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaLabel?: string\n    // keyNav?: Booleanish\n    justify?: Booleanish\n    role?: string\n  }>(),\n  {\n    ariaLabel: 'Group',\n    justify: false,\n    role: 'toolbar',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst justifyBoolean = useBooleanish(() => props.justify)\n\nconst computedClasses = computed(() => ({\n  'justify-content-between': justifyBoolean.value,\n}))\n</script>\n","<template>\n  <img\n    :class=\"computedClasses\"\n    :src=\"!blankBoolean ? src : computedBlankImgSrc\"\n    :width=\"computedDimentions.width || undefined\"\n    :height=\"computedDimentions.height || undefined\"\n    :srcset=\"!blankBoolean ? computedSrcset : undefined\"\n    :sizes=\"!blankBoolean ? computedSizes : undefined\"\n    :loading=\"lazyBoolean ? 'lazy' : 'eager'\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {BImgProps} from '../types'\nimport {useBooleanish, useRadiusElementClasses} from '../composables'\nimport {computed, toRef} from 'vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BImgProps>(), {\n  blank: false,\n  blankColor: 'transparent',\n  block: false,\n  center: false,\n  end: false,\n  fluid: false,\n  fluidGrow: false,\n  height: undefined,\n  lazy: false,\n  sizes: undefined,\n  src: undefined,\n  srcset: undefined,\n  start: false,\n  thumbnail: false,\n  width: undefined,\n  // RadiusElementExtendables props\n  rounded: false,\n  roundedBottom: undefined,\n  roundedEnd: undefined,\n  roundedStart: undefined,\n  roundedTop: undefined,\n  // End RadiusElementExtendables props\n})\n\nconst lazyBoolean = useBooleanish(() => props.lazy)\nconst blankBoolean = useBooleanish(() => props.blank)\nconst blockBoolean = useBooleanish(() => props.block)\nconst centerBoolean = useBooleanish(() => props.center)\nconst fluidBoolean = useBooleanish(() => props.fluid)\nconst fluidGrowBoolean = useBooleanish(() => props.fluidGrow)\nconst startBoolean = useBooleanish(() => props.start)\nconst endBoolean = useBooleanish(() => props.end)\nconst thumbnailBoolean = useBooleanish(() => props.thumbnail)\nconst heightNumber = useToNumber(() => props.height ?? NaN)\nconst widthNumber = useToNumber(() => props.width ?? NaN)\nconst roundedBoolean = useBooleanish(() => props.rounded)\nconst roundedTopBoolean = useBooleanish(() => props.roundedTop)\nconst roundedBottomBoolean = useBooleanish(() => props.roundedBottom)\nconst roundedStartBoolean = useBooleanish(() => props.roundedStart)\nconst roundedEndBoolean = useBooleanish(() => props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: roundedBoolean.value,\n  roundedTop: roundedTopBoolean.value,\n  roundedBottom: roundedBottomBoolean.value,\n  roundedStart: roundedStartBoolean.value,\n  roundedEnd: roundedEndBoolean.value,\n}))\n\nconst computedSrcset = computed(() =>\n  typeof props.srcset === 'string'\n    ? props.srcset\n        .split(',')\n        .filter((x) => x)\n        .join(',')\n    : Array.isArray(props.srcset)\n    ? props.srcset.filter((x) => x).join(',')\n    : undefined\n)\n\nconst computedSizes = computed(() =>\n  typeof props.sizes === 'string'\n    ? props.sizes\n        .split(',')\n        .filter((x) => x)\n        .join(',')\n    : Array.isArray(props.sizes)\n    ? props.sizes.filter((x) => x).join(',')\n    : undefined\n)\n\nconst computedDimentions = computed<{height: number | undefined; width: number | undefined}>(() => {\n  const width = Number.isNaN(widthNumber.value) ? undefined : widthNumber.value\n  const height = Number.isNaN(heightNumber.value) ? undefined : heightNumber.value\n  if (blankBoolean.value) {\n    if (width !== undefined && height === undefined) {\n      return {height: width, width}\n    }\n    if (width === undefined && height !== undefined) {\n      return {height, width: height}\n    }\n    return {height: 1, width: 1}\n  }\n  return {\n    width,\n    height,\n  }\n})\n\nconst computedBlankImgSrc = toRef(() =>\n  makeBlankImgSrc(computedDimentions.value.width, computedDimentions.value.height, props.blankColor)\n)\n\nconst alignment = toRef(() =>\n  startBoolean.value\n    ? 'float-start'\n    : endBoolean.value\n    ? 'float-end'\n    : centerBoolean.value\n    ? 'mx-auto'\n    : undefined\n)\n\nconst computedClasses = computed(() => [\n  radiusElementClasses.value,\n  {\n    'img-thumbnail': thumbnailBoolean.value,\n    'img-fluid': fluidBoolean.value || fluidGrowBoolean.value,\n    'w-100': fluidGrowBoolean.value,\n    [`${alignment.value}`]: alignment.value !== undefined,\n    'd-block': blockBoolean.value || centerBoolean.value,\n  },\n])\n\nconst makeBlankImgSrc = (width: number | undefined, height: number | undefined, color: string) =>\n  `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`<svg width=\"${width}\" height=\"${height}\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" preserveAspectRatio=\"none\">\n    <rect width=\"100%\" height=\"100%\" style=\"fill:${color};\"></rect>\n    </svg>`)}`\n</script>\n","<template>\n  <BImg v-bind=\"computedImgProps\" :class=\"baseClass\" />\n</template>\n\n<script setup lang=\"ts\">\nimport BImg from '../BImg.vue'\nimport type {BImgProps, Booleanish} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {omit} from '../../utils'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      bottom?: Booleanish\n      top?: Booleanish\n    } & BImgProps\n  >(),\n  {\n    bottom: false,\n    top: false,\n    // BImg props\n    blank: undefined,\n    blankColor: undefined,\n    block: undefined,\n    center: undefined,\n    end: undefined,\n    fluid: undefined,\n    fluidGrow: undefined,\n    height: undefined,\n    lazy: undefined,\n    rounded: undefined,\n    roundedBottom: undefined,\n    roundedEnd: undefined,\n    roundedStart: undefined,\n    roundedTop: undefined,\n    sizes: undefined,\n    src: undefined,\n    srcset: undefined,\n    start: undefined,\n    thumbnail: undefined,\n    width: undefined,\n    // End BImg props\n  }\n)\n\nconst bottomBoolean = useBooleanish(() => props.bottom)\nconst endBoolean = useBooleanish(() => props.end)\nconst startBoolean = useBooleanish(() => props.start)\nconst topBoolean = useBooleanish(() => props.top)\n\nconst baseClass = toRef(() =>\n  topBoolean.value\n    ? 'card-img-top'\n    : endBoolean.value\n    ? 'card-img-right'\n    : bottomBoolean.value\n    ? 'card-img-bottom'\n    : startBoolean.value\n    ? 'card-img-left'\n    : 'card-img'\n)\n\nconst computedImgProps = computed(() => omit(props, ['bottom', 'top', 'end', 'start']))\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <!-- eslint-disable-next-line vue/no-v-html -->\n    <div v-if=\"!!html\" v-html=\"html\" />\n    <slot v-else>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {BCardHeadFootProps} from '../../types'\nimport {useColorVariantClasses} from '../../composables'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: null,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: null,\n  textVariant: null,\n  variant: null,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n  },\n])\n</script>\n","<template>\n  <BCardHeadFoot class=\"card-header\" v-bind=\"props\">\n    <slot />\n  </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: undefined,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: undefined,\n  textVariant: undefined,\n  variant: undefined,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card-subtitle mb-2\" :class=\"computedClasses\">\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {TextColorVariant} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    text?: string\n    tag?: string\n    textVariant?: TextColorVariant | null\n  }>(),\n  {\n    tag: 'h6',\n    text: undefined,\n    textVariant: 'body-secondary',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`text-${props.textVariant}`]: props.textVariant !== null,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card-body\" :class=\"computedClasses\">\n    <BCardTitle v-if=\"!!title || hasTitleSlot\" :tag=\"titleTag\">\n      <slot name=\"title\">\n        {{ title }}\n      </slot>\n    </BCardTitle>\n\n    <BCardSubtitle\n      v-if=\"!!subtitle || hasSubtitleSlot\"\n      :tag=\"subtitleTag\"\n      :text-variant=\"subtitleTextVariant\"\n    >\n      <slot name=\"subtitle\">\n        {{ subtitle }}\n      </slot>\n    </BCardSubtitle>\n\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport BCardTitle from './BCardTitle.vue'\nimport {isEmptySlot} from '../../utils'\nimport BCardSubtitle from './BCardSubtitle.vue'\nimport type {Booleanish, ColorExtendables, TextColorVariant} from '../../types'\nimport {useBooleanish, useColorVariantClasses} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      overlay?: Booleanish\n      subtitle?: string\n      subtitleTag?: string\n      subtitleTextVariant?: TextColorVariant | null\n      tag?: string\n      text?: string\n      title?: string\n      titleTag?: string\n    } & ColorExtendables\n  >(),\n  {\n    overlay: false,\n    subtitle: undefined,\n    subtitleTag: 'h4',\n    subtitleTextVariant: undefined,\n    tag: 'div',\n    text: undefined,\n    title: undefined,\n    titleTag: 'h4',\n    // ColorExtendables props\n    bgVariant: null,\n    textVariant: null,\n    variant: null,\n    // End ColorExtendables props\n  }\n)\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  subtitle?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst overlayBoolean = useBooleanish(() => props.overlay)\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst hasTitleSlot = toRef(() => !isEmptySlot(slots.title))\nconst hasSubtitleSlot = toRef(() => !isEmptySlot(slots.subtitle))\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'card-img-overlay': overlayBoolean.value,\n  },\n])\n</script>\n","<template>\n  <BCardHeadFoot class=\"card-footer\" v-bind=\"props\">\n    <slot>\n      {{ text }}\n    </slot>\n  </BCardHeadFoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BCardHeadFootProps} from '../../types'\nimport BCardHeadFoot from './BCardHeadFoot.vue'\n\nconst props = withDefaults(defineProps<BCardHeadFootProps>(), {\n  borderVariant: undefined,\n  html: undefined,\n  tag: 'div',\n  text: undefined,\n  // ColorExtendables props\n  bgVariant: undefined,\n  textVariant: undefined,\n  variant: undefined,\n  // End ColorExtendables props\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n</script>\n","<template>\n  <component :is=\"tag\" class=\"card\" :class=\"computedClasses\">\n    <slot v-if=\"!imgBottomBoolean\" name=\"img\">\n      <BCardImg v-if=\"imgSrc\" v-bind=\"imgAttr\" />\n    </slot>\n    <BCardHeader\n      v-if=\"header || hasHeaderSlot || headerHtml\"\n      :bg-variant=\"headerBgVariant\"\n      :variant=\"headerVariant\"\n      :border-variant=\"headerBorderVariant\"\n      :html=\"headerHtml\"\n      :tag=\"headerTag\"\n      :text-variant=\"headerTextVariant\"\n      :class=\"headerClass\"\n    >\n      <slot name=\"header\">\n        {{ header }}\n      </slot>\n    </BCardHeader>\n    <BCardBody\n      v-if=\"!noBodyBoolean\"\n      :overlay=\"overlay\"\n      :bg-variant=\"bodyBgVariant\"\n      :tag=\"bodyTag\"\n      :text-variant=\"bodyTextVariant\"\n      :subtitle=\"subtitle\"\n      :subtitle-tag=\"subtitleTag\"\n      :subtitle-text-variant=\"subtitleTextVariant\"\n      :title=\"title\"\n      :title-tag=\"titleTag\"\n      :class=\"bodyClass\"\n    >\n      <slot>\n        {{ bodyText }}\n      </slot>\n    </BCardBody>\n    <slot v-else>\n      {{ bodyText }}\n    </slot>\n    <BCardFooter\n      v-if=\"footer || hasFooterSlot || footerHtml\"\n      :bg-variant=\"footerBgVariant\"\n      :border-variant=\"footerBorderVariant\"\n      :variant=\"footerVariant\"\n      :html=\"footerHtml\"\n      :tag=\"footerTag\"\n      :text-variant=\"footerTextVariant\"\n      :class=\"footerClass\"\n    >\n      <slot name=\"footer\">\n        {{ footer }}\n      </slot>\n    </BCardFooter>\n    <slot v-if=\"imgBottomBoolean\" name=\"img\">\n      <BCardImg v-if=\"imgSrc\" v-bind=\"imgAttr\" />\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {\n  AlignmentTextHorizontal,\n  Booleanish,\n  ClassValue,\n  ColorExtendables,\n  ColorVariant,\n  TextColorVariant,\n} from '../../types'\nimport {isEmptySlot} from '../../utils'\nimport {computed, toRef} from 'vue'\nimport {useBooleanish, useColorVariantClasses} from '../../composables'\nimport BCardImg from './BCardImg.vue'\nimport BCardHeader from './BCardHeader.vue'\nimport BCardBody from './BCardBody.vue'\nimport BCardFooter from './BCardFooter.vue'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      align?: AlignmentTextHorizontal\n      bodyBgVariant?: ColorVariant | null\n      bodyClass?: ClassValue\n      bodyTag?: string\n      bodyText?: string\n      bodyTextVariant?: TextColorVariant | null\n      borderVariant?: ColorVariant | null\n      footer?: string\n      footerBgVariant?: ColorVariant | null\n      footerBorderVariant?: ColorVariant | null\n      footerClass?: ClassValue\n      footerHtml?: string\n      footerTag?: string\n      footerTextVariant?: TextColorVariant | null\n      footerVariant?: ColorVariant | null\n      header?: string\n      headerBgVariant?: ColorVariant | null\n      headerBorderVariant?: ColorVariant | null\n      headerClass?: ClassValue\n      headerHtml?: string\n      headerTag?: string\n      headerTextVariant?: TextColorVariant | null\n      headerVariant?: ColorVariant | null\n      imgAlt?: string\n      imgBottom?: Booleanish\n      imgEnd?: Booleanish\n      imgHeight?: string | number\n      imgSrc?: string\n      imgStart?: Booleanish\n      imgTop?: Booleanish\n      imgWidth?: string | number\n      noBody?: Booleanish\n      overlay?: Booleanish\n      subtitle?: string\n      subtitleTag?: string\n      subtitleTextVariant?: TextColorVariant | null\n      tag?: string\n      title?: string\n      titleTag?: string\n    } & ColorExtendables\n  >(),\n  {\n    align: undefined,\n    bodyBgVariant: undefined,\n    bodyClass: undefined,\n    bodyTag: 'div',\n    bodyText: '',\n    bodyTextVariant: undefined,\n    borderVariant: null,\n    footer: undefined,\n    footerBgVariant: undefined,\n    footerBorderVariant: undefined,\n    footerClass: undefined,\n    footerHtml: '',\n    footerTag: 'div',\n    footerTextVariant: undefined,\n    footerVariant: null,\n    header: undefined,\n    headerBgVariant: undefined,\n    headerBorderVariant: undefined,\n    headerClass: undefined,\n    headerHtml: '',\n    headerTag: 'div',\n    headerTextVariant: undefined,\n    headerVariant: null,\n    imgAlt: undefined,\n    imgBottom: false,\n    imgEnd: false,\n    imgHeight: undefined,\n    imgSrc: undefined,\n    imgStart: false,\n    imgTop: false,\n    imgWidth: undefined,\n    noBody: false,\n    overlay: false,\n    subtitle: undefined,\n    subtitleTag: 'h6',\n    subtitleTextVariant: 'body-secondary',\n    tag: 'div',\n    title: undefined,\n    titleTag: 'h4',\n    // ColorExtendables props\n    bgVariant: null,\n    textVariant: null,\n    variant: null,\n    // End ColorExtendables props\n  }\n)\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  footer?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n}>()\n\nconst imgBottomBoolean = useBooleanish(() => props.imgBottom)\nconst imgEndBoolean = useBooleanish(() => props.imgEnd)\nconst imgStartBoolean = useBooleanish(() => props.imgStart)\nconst noBodyBoolean = useBooleanish(() => props.noBody)\n\nconst hasHeaderSlot = toRef(() => !isEmptySlot(slots.header))\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\n\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    [`text-${props.align}`]: props.align !== undefined,\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n    'flex-row': imgStartBoolean.value,\n    'flex-row-reverse': imgEndBoolean.value,\n  },\n])\n\nconst imgAttr = computed(() => ({\n  src: props.imgSrc,\n  alt: props.imgAlt,\n  height: props.imgHeight,\n  width: props.imgWidth,\n  bottom: props.imgBottom,\n  end: props.imgEnd,\n  start: props.imgStart,\n  top: props.imgTop,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"cardTypeClass\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport type {Booleanish} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    columns?: Booleanish\n    deck?: Booleanish\n    tag?: string\n  }>(),\n  {\n    columns: false,\n    deck: false,\n    tag: 'div',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst columnsBoolean = useBooleanish(() => props.columns)\nconst deckBoolean = useBooleanish(() => props.deck)\n\nconst cardTypeClass = toRef(() =>\n  deckBoolean.value ? 'card-deck' : columnsBoolean.value ? 'card-columns' : 'card-group'\n)\n</script>\n","<template>\n  <div :id=\"computedId\" ref=\"element\" class=\"carousel slide pointer-event\" :class=\"computedClasses\">\n    <div v-if=\"indicatorsBoolean\" class=\"carousel-indicators\">\n      <!-- :data-bs-target=\"`#${computedId}`\" is required since the classes target elems with that attr -->\n      <button\n        v-for=\"(_, i) in slides.length\"\n        :key=\"i\"\n        type=\"button\"\n        data-bs-target=\"\"\n        :class=\"i === modelValue ? 'active' : ''\"\n        :aria-current=\"i === modelValue ? true : undefined\"\n        :aria-label=\"`${indicatorsButtonLabel} ${i}`\"\n        @click=\"goToValue(i)\"\n      />\n    </div>\n\n    <div ref=\"relatedTarget\" class=\"carousel-inner\">\n      <TransitionGroup\n        :enter-from-class=\"enterClasses\"\n        :enter-active-class=\"enterClasses\"\n        :enter-to-class=\"enterClasses\"\n        :leave-from-class=\"leaveClasses\"\n        :leave-active-class=\"leaveClasses\"\n        :leave-to-class=\"leaveClasses\"\n        @before-leave=\"onBeforeLeave\"\n        @after-leave=\"onAfterLeave\"\n        @after-enter=\"onAfterEnter\"\n      >\n        <component\n          :is=\"slide\"\n          v-for=\"(slide, i) in slides\"\n          v-show=\"i === modelValue\"\n          :key=\"i\"\n          :class=\"{active: i === modelValue && isTransitioning === false}\"\n        />\n      </TransitionGroup>\n    </div>\n\n    <template v-if=\"controlsBoolean\">\n      <button class=\"carousel-control-prev\" type=\"button\" @click=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ controlsPrevText }}</span>\n      </button>\n      <button class=\"carousel-control-next\" type=\"button\" @click=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\" />\n        <span class=\"visually-hidden\">{{ controlsNextText }}</span>\n      </button>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvCarouselEvent, carouselInjectionKey, getSlotElements} from '../../utils'\nimport {computed, provide, ref, toRef, watch} from 'vue'\nimport {useBooleanish, useId} from '../../composables'\nimport type {Booleanish} from '../../types'\nimport {\n  onKeyStroke,\n  useElementHover,\n  useIntervalFn,\n  useSwipe,\n  useToNumber,\n  useVModel,\n} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    background?: string\n    controls?: Booleanish\n    controlsNextText?: string\n    controlsPrevText?: string\n    fade?: Booleanish\n    id?: string\n    imgHeight?: string\n    imgWidth?: string\n    indicators?: Booleanish\n    indicatorsButtonLabel?: string\n    interval?: number | string\n    keyboard?: Booleanish\n    modelValue?: number\n    noHoverPause?: Booleanish\n    noTouch?: Booleanish\n    noWrap?: Booleanish\n    ride?: Booleanish | 'carousel'\n    rideReverse?: Booleanish\n    touchThreshold?: number | string\n  }>(),\n  {\n    background: undefined,\n    controls: false,\n    controlsNextText: 'Next',\n    controlsPrevText: 'Previous',\n    fade: false,\n    id: undefined,\n    imgHeight: undefined,\n    imgWidth: undefined,\n    indicators: false,\n    indicatorsButtonLabel: 'Slide',\n    interval: 5000,\n    keyboard: true,\n    modelValue: 0,\n    noHoverPause: false,\n    noTouch: false,\n    noWrap: false,\n    // eslint-disable-next-line vue/require-valid-default-prop\n    ride: false,\n    rideReverse: false,\n    touchThreshold: 50,\n  }\n)\n\nconst emit = defineEmits<{\n  'slide': [value: BvCarouselEvent]\n  'slid': [value: BvCarouselEvent]\n  'update:modelValue': [value: number]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'carousel')\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst keyboardBoolean = useBooleanish(() => props.keyboard)\nconst rideReverseBoolean = useBooleanish(() => props.rideReverse)\nconst noHoverPauseBoolean = useBooleanish(() => props.noHoverPause)\nconst fadeBoolean = useBooleanish(() => props.fade)\nconst controlsBoolean = useBooleanish(() => props.controls)\nconst indicatorsBoolean = useBooleanish(() => props.indicators)\nconst noTouchBoolean = useBooleanish(() => props.noTouch)\nconst noWrapBoolean = useBooleanish(() => props.noWrap)\nconst touchThresholdNumber = useToNumber(() => props.touchThreshold)\nconst intervalNumber = useToNumber(() => props.interval)\nconst rideResolved = useBooleanish(() => props.ride)\n\nconst isTransitioning = ref(false)\nconst rideStarted = ref(false)\nconst direction = ref(true)\nconst relatedTarget = ref<HTMLElement | null>(null)\nconst element = ref<HTMLElement | null>(null)\nconst previousModelValue = ref(modelValue.value)\n\nconst isHovering = useElementHover(element)\n\n// Class carousel-item is a static property\n// If you make it static, the direction can be reversed -- properly (atm it does the carousel-item-${} logic backwards for entering, a weird hack)\n// So all that would be great. However, when you do this, it will break the transition flow. Something about it breaks and I'm not sure why!\n// Try it by removing carousel-item from below and making `!direction.value` => `direction.value` for enter\n// Then reviewing the behavior\nconst enterClasses = toRef(\n  () =>\n    `carousel-item carousel-item-${!direction.value ? 'next' : 'prev'} carousel-item-${\n      !direction.value ? 'start' : 'end'\n    }`\n)\nconst leaveClasses = toRef(\n  () => `carousel-item active carousel-item-${direction.value ? 'start' : 'end'}`\n)\n\nconst {pause, resume} = useIntervalFn(\n  () => {\n    rideReverseBoolean.value ? prev() : next()\n  },\n  intervalNumber,\n  {immediate: rideResolved.value === 'carousel'}\n)\n\nconst isRiding = toRef(\n  () =>\n    (rideResolved.value === true && rideStarted.value === true) || rideResolved.value === 'carousel'\n)\nconst slides = computed(() => getSlotElements(slots.default, 'BCarouselSlide'))\nconst computedClasses = computed(() => ({'carousel-fade': fadeBoolean.value}))\n// TODO a general idea of showing only slides that are in bounds\n// const localValue = computed(() =>\n//   props.modelValue >= slides.value.length\n//     ? slides.value.length - 1\n//     : props.modelValue < 0\n//     ? 0\n//     : props.modelValue\n// )\n\nconst buildBvCarouselEvent = (event: 'slid' | 'slide') =>\n  new BvCarouselEvent(event, {\n    componentId: computedId.value,\n    cancelable: false,\n    target: element.value,\n    direction: direction.value ? 'right' : 'left',\n    from: previousModelValue.value,\n    to: modelValue.value,\n    relatedTarget: relatedTarget.value?.children[modelValue.value] ?? null,\n  })\n\nconst goToValue = (value: number): void => {\n  if (isTransitioning.value === true) return\n\n  if (rideResolved.value === true) {\n    rideStarted.value = true\n  }\n  if (isRiding.value === true) {\n    resume()\n  }\n  direction.value = value < modelValue.value ? false : true\n  if (value >= slides.value.length) {\n    if (noWrapBoolean.value) return\n    modelValue.value = 0\n    return\n  }\n  if (value < 0) {\n    if (noWrapBoolean.value) return\n    modelValue.value = slides.value.length - 1\n    return\n  }\n  previousModelValue.value = modelValue.value\n  modelValue.value = value\n}\n\nconst prev = (): void => {\n  goToValue(modelValue.value - 1)\n}\nconst next = (): void => {\n  goToValue(modelValue.value + 1)\n}\n\nconst onKeydown = (fn: () => void) => {\n  if (keyboardBoolean.value === false) return\n  fn()\n}\n\nconst onMouseEnter = () => {\n  if (noHoverPauseBoolean.value) return\n  pause()\n}\nconst onMouseLeave = () => {\n  if (!isRiding.value) return\n  resume()\n}\n\nconst {lengthX} = useSwipe(element, {\n  passive: true,\n  onSwipeStart() {\n    if (noTouchBoolean.value === true) return\n    pause()\n  },\n  onSwipeEnd() {\n    if (noTouchBoolean.value === true) return\n    const resumeRiding = () => {\n      if (isRiding.value === false) return\n      resume()\n    }\n    if (lengthX.value >= touchThresholdNumber.value) {\n      next()\n      resumeRiding()\n      return\n    }\n    if (lengthX.value <= -touchThresholdNumber.value) {\n      prev()\n      resumeRiding()\n    }\n  },\n})\n\nconst onBeforeLeave = () => {\n  emit('slide', buildBvCarouselEvent('slide'))\n  isTransitioning.value = true\n}\nconst onAfterLeave = () => {\n  emit('slid', buildBvCarouselEvent('slid'))\n  isTransitioning.value = false\n}\n// carousel-item class is removed from the slide during the transition,\n// as is included within enter classes.\n// The first slide recovers carousel-item class,\nconst onAfterEnter = (el: Element) => {\n  if (modelValue.value !== 0) {\n    el.classList.add('carousel-item')\n  }\n}\n\nonKeyStroke(\n  'ArrowLeft',\n  () => {\n    onKeydown(prev)\n  },\n  {target: element}\n)\nonKeyStroke(\n  'ArrowRight',\n  () => {\n    onKeydown(next)\n  },\n  {target: element}\n)\n\nwatch(rideResolved, () => {\n  rideStarted.value = false\n})\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  onMouseLeave()\n})\n\ndefineExpose({\n  next,\n  pause,\n  prev,\n  resume,\n})\n\nprovide(carouselInjectionKey, {\n  background: toRef(() => props.background),\n  width: toRef(() => props.imgWidth),\n  height: toRef(() => props.imgHeight),\n})\n</script>\n","<template>\n  <div class=\"carousel-item\" :style=\"computedStyle\">\n    <slot name=\"img\">\n      <BImg\n        class=\"d-block w-100\"\n        :alt=\"imgAlt\"\n        :srcset=\"imgSrcset\"\n        :src=\"imgSrc\"\n        :width=\"imgWidth || parentData?.width.value\"\n        :height=\"imgHeight || parentData?.height.value\"\n        :blank=\"imgBlank\"\n        :blank-color=\"imgBlankColor\"\n      />\n    </slot>\n    <component\n      :is=\"contentTag\"\n      v-if=\"hasContent\"\n      class=\"carousel-caption\"\n      :class=\"computedContentClasses\"\n    >\n      <component :is=\"captionTag\" v-if=\"hasCaption\">\n        <slot name=\"caption\">\n          <!-- eslint-disable-next-line vue/no-v-html -->\n          <span v-if=\"captionHtml\" v-html=\"captionHtml\" />\n          <span v-else>{{ caption }}</span>\n        </slot>\n      </component>\n      <component :is=\"textTag\" v-if=\"hasText\">\n        <slot name=\"text\">\n          <!-- eslint-disable-next-line vue/no-v-html -->\n          <span v-if=\"textHtml\" v-html=\"textHtml\" />\n          <span v-else>{{ text }}</span>\n        </slot>\n      </component>\n      <slot />\n    </component>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, inject, toRef} from 'vue'\nimport type {Booleanish} from '../../types'\nimport {carouselInjectionKey, isEmptySlot} from '../../utils'\nimport BImg from '../BImg.vue'\n\n// TODO interval is unused\n// Need to add https://getbootstrap.com/docs/5.3/components/carousel/#individual-carousel-item-interval\n// Perhaps a provide/inject with next/prev values where the component can call those would work.\n\nconst props = withDefaults(\n  defineProps<{\n    background?: string\n    caption?: string\n    captionHtml?: string\n    captionTag?: string\n    contentTag?: string\n    contentVisibleUp?: string\n    id?: string\n    imgAlt?: string\n    imgBlank?: Booleanish\n    imgBlankColor?: string\n    imgHeight?: string | number\n    imgSrc?: string\n    imgSrcset?: string | string[]\n    imgWidth?: string | number\n    interval?: string | number\n    text?: string\n    textHtml?: string\n    textTag?: string\n  }>(),\n  {\n    background: undefined,\n    caption: undefined,\n    captionHtml: undefined,\n    captionTag: 'h3',\n    contentTag: 'div',\n    contentVisibleUp: undefined,\n    id: undefined,\n    imgAlt: undefined,\n    imgBlank: false,\n    imgBlankColor: 'transparent',\n    imgHeight: undefined,\n    imgSrc: undefined,\n    imgSrcset: undefined,\n    imgWidth: undefined,\n    interval: undefined,\n    text: undefined,\n    textHtml: undefined,\n    textTag: 'p',\n  }\n)\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  caption?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  text?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(carouselInjectionKey, null)\n\nconst hasText = toRef(() => props.text || props.textHtml || !isEmptySlot(slots.text))\nconst hasCaption = toRef(() => props.caption || props.captionHtml || !isEmptySlot(slots.caption))\nconst hasContent = toRef(() => hasText.value || hasCaption.value || !isEmptySlot(slots.default))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  background: `${\n    props.background || parentData?.background.value || 'rgb(171, 171, 171)'\n  } none repeat scroll 0% 0%`,\n}))\n\nconst computedContentClasses = computed(() => ({\n  'd-none': props.contentVisibleUp !== undefined,\n  [`d-${props.contentVisibleUp}-block`]: props.contentVisibleUp !== undefined,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script lang=\"ts\">\nimport {computed, defineComponent, type PropType, type SlotsType} from 'vue'\nimport type {AlignmentVertical, Booleanish} from '../types'\nimport {getBreakpointProps, getClasses} from '../utils'\nimport {useBooleanish} from '../composables'\n\nconst breakpointCol = getBreakpointProps('', [], {type: [Boolean, String, Number], default: false})\nconst breakpointOffset = getBreakpointProps('offset', [''], {type: [String, Number], default: null})\nconst breakpointOrder = getBreakpointProps('order', [''], {type: [String, Number], default: null})\n\nexport default defineComponent({\n  name: 'BCol',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    col: {type: [Boolean, String] as PropType<Booleanish>, default: false}, // Generic flexbox .col (xs)\n    cols: {type: [String, Number], default: null}, // .col-[1-12]|auto (xs)\n    ...breakpointCol,\n    offset: {type: [String, Number], default: null},\n    ...breakpointOffset,\n    order: {type: [String, Number], default: null},\n    ...breakpointOrder,\n    alignSelf: {type: String as PropType<AlignmentVertical | 'auto'>, default: null},\n    tag: {type: String, default: 'div'},\n  },\n  setup(props) {\n    const properties = [\n      {content: breakpointCol, propPrefix: 'cols', classPrefix: 'col'},\n      {content: breakpointOffset, propPrefix: 'offset'},\n      {content: breakpointOrder, propPrefix: 'order'},\n    ]\n\n    const colBoolean = useBooleanish(() => props.col)\n\n    const classList = computed(() =>\n      properties.flatMap((el) => getClasses(props, el.content, el.propPrefix, el.classPrefix))\n    )\n\n    const computedClasses = computed(() => [\n      classList.value,\n      {\n        col: colBoolean.value || (!classList.value.some((e) => /^col-/.test(e)) && !props.cols),\n        [`col-${props.cols}`]: !!props.cols,\n        [`offset-${props.offset}`]: !!props.offset,\n        [`order-${props.order}`]: !!props.order,\n        [`align-self-${props.alignSelf}`]: !!props.alignSelf,\n      },\n    ])\n\n    return {\n      computedClasses,\n    }\n  },\n})\n</script>\n","<template>\n  <component :is=\"tag\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, Breakpoint} from '../types'\nimport {computed} from 'vue'\nimport {useToNumber} from '@vueuse/core'\nimport {useBooleanish} from '..//composables'\n\nconst props = withDefaults(\n  defineProps<{\n    fluid?: Booleanish | Breakpoint\n    gutterX?: string | number\n    gutterY?: string | number\n    tag?: string\n  }>(),\n  {\n    fluid: false,\n    gutterX: undefined,\n    gutterY: undefined,\n    tag: 'div',\n  }\n)\n\nconst gutterXToNumber = useToNumber(() => props.gutterX ?? NaN, {method: 'parseInt'})\nconst gutterYToNumber = useToNumber(() => props.gutterY ?? NaN, {method: 'parseInt'})\nconst resolvedFluid = useBooleanish(() => props.fluid)\n\nconst computedClasses = computed(() => ({\n  container: resolvedFluid.value === false,\n  [`container-fluid`]: resolvedFluid.value === true,\n  [`container-${resolvedFluid.value}`]: typeof resolvedFluid.value === 'string',\n  [`gx-${gutterXToNumber.value}`]: !Number.isNaN(gutterXToNumber.value),\n  [`gy-${gutterYToNumber.value}`]: !Number.isNaN(gutterYToNumber.value),\n}))\n</script>\n","<template>\n  <div ref=\"wrapper\" :class=\"computedClasses\" class=\"btn-group\">\n    <BButton\n      :id=\"computedId\"\n      ref=\"splitButton\"\n      :variant=\"splitVariant || variant\"\n      :size=\"size\"\n      :class=\"buttonClasses\"\n      :disabled=\"splitDisabledBoolean || disabled\"\n      :type=\"splitButtonType\"\n      :aria-label=\"ariaLabel\"\n      :aria-expanded=\"splitBoolean ? undefined : modelValueBoolean\"\n      :aria-haspopup=\"splitBoolean ? undefined : 'menu'\"\n      :href=\"splitBoolean ? splitHref : undefined\"\n      :to=\"splitBoolean && splitTo ? splitTo : undefined\"\n      @click=\"onSplitClick\"\n    >\n      <slot name=\"button-content\">\n        {{ text }}\n      </slot>\n    </BButton>\n    <BButton\n      v-if=\"splitBoolean\"\n      ref=\"button\"\n      :variant=\"variant\"\n      :size=\"size\"\n      :disabled=\"disabled\"\n      :class=\"[toggleClass, ...[modelValueBoolean ? 'show' : undefined]]\"\n      class=\"dropdown-toggle-split dropdown-toggle\"\n      :aria-expanded=\"modelValueBoolean\"\n      aria-haspopup=\"menu\"\n      @click=\"onButtonClick\"\n    >\n      <span class=\"visually-hidden\">\n        <slot name=\"toggle-text\">\n          {{ toggleText }}\n        </slot>\n      </span>\n    </BButton>\n    <Teleport :to=\"container\" :disabled=\"!container\">\n      <ul\n        v-if=\"!lazyBoolean || modelValueBoolean\"\n        v-show=\"lazyBoolean || modelValueBoolean\"\n        ref=\"floating\"\n        :style=\"[floatingStyles, sizeStyles]\"\n        class=\"dropdown-menu show overflow-auto\"\n        :class=\"menuClass\"\n        :aria-labelledby=\"computedId\"\n        :role=\"role\"\n        @click=\"onClickInside\"\n      >\n        <slot :hide=\"close\" :show=\"open\" />\n      </ul>\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n  autoUpdate,\n  type Boundary,\n  flip,\n  type Middleware,\n  offset as offsetMiddleware,\n  type RootBoundary,\n  shift,\n  size as sizeMiddleware,\n  useFloating,\n} from '@floating-ui/vue'\nimport {onClickOutside, onKeyStroke, useToNumber, useVModel} from '@vueuse/core'\nimport {computed, type CSSProperties, nextTick, provide, ref, toRef, watch} from 'vue'\nimport {useBooleanish, useId} from '../../composables'\nimport type {BDropdownProps} from '../../types'\nimport {BvTriggerableEvent, dropdownInjectionKey, resolveFloatingPlacement} from '../../utils'\nimport BButton from '../BButton/BButton.vue'\n\n// TODO add navigation through keyboard events\n// TODO standardize keydown vs keyup events globally\n\nconst props = withDefaults(defineProps<BDropdownProps>(), {\n  ariaLabel: undefined,\n  autoClose: true,\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  center: false,\n  container: undefined,\n  disabled: false,\n  dropend: false,\n  dropstart: false,\n  dropup: false,\n  end: false,\n  floatingMiddleware: undefined,\n  id: undefined,\n  isNav: false,\n  lazy: false,\n  menuClass: undefined,\n  modelValue: false,\n  noCaret: false,\n  noFlip: false,\n  noShift: false,\n  noSize: false,\n  offset: 0,\n  role: 'menu',\n  size: 'md',\n  split: false,\n  splitButtonType: 'button',\n  splitClass: undefined,\n  splitDisabled: undefined,\n  splitHref: undefined,\n  splitTo: undefined,\n  splitVariant: undefined,\n  strategy: 'absolute',\n  text: undefined,\n  toggleClass: undefined,\n  toggleText: 'Toggle dropdown',\n  variant: 'secondary',\n})\n\nconst emit = defineEmits<{\n  'click': [event: MouseEvent]\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'toggle': []\n  'update:modelValue': [value: boolean]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'button-content'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: {hide: () => void; show: () => void}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'toggle-text'?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id, 'dropdown')\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst modelValueBoolean = useBooleanish(modelValue)\nconst dropupBoolean = useBooleanish(() => props.dropup)\nconst dropendBoolean = useBooleanish(() => props.dropend)\nconst isNavBoolean = useBooleanish(() => props.isNav)\nconst dropstartBoolean = useBooleanish(() => props.dropstart)\nconst centerBoolean = useBooleanish(() => props.center)\nconst endBoolean = useBooleanish(() => props.end)\nconst splitBoolean = useBooleanish(() => props.split)\nconst noCaretBoolean = useBooleanish(() => props.noCaret)\nconst noFlipBoolean = useBooleanish(() => props.noFlip)\nconst noShiftBoolean = useBooleanish(() => props.noShift)\nconst noSizeBoolean = useBooleanish(() => props.noSize)\nconst lazyBoolean = useBooleanish(() => props.lazy)\nconst splitDisabledBoolean = useBooleanish(() => props.splitDisabled)\n\nconst computedOffset = toRef(() =>\n  typeof props.offset === 'string' || typeof props.offset === 'number' ? props.offset : NaN\n)\nconst offsetToNumber = useToNumber(computedOffset)\n\nconst floating = ref<HTMLElement | null>(null)\nconst button = ref<HTMLElement | null>(null)\nconst splitButton = ref<HTMLElement | null>(null)\nconst wrapper = ref<HTMLElement | null>(null)\n\nconst boundary = computed<Boundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? undefined : props.boundary\n)\nconst rootBoundary = computed<RootBoundary | undefined>(() =>\n  props.boundary === 'document' || props.boundary === 'viewport' ? props.boundary : undefined\n)\n\nconst referencePlacement = toRef(() => (!splitBoolean.value ? splitButton.value : button.value))\n\nonKeyStroke(\n  'Escape',\n  () => {\n    modelValue.value = !modelValueBoolean\n  },\n  {target: referencePlacement}\n)\nonKeyStroke(\n  'Escape',\n  () => {\n    modelValue.value = !modelValueBoolean\n  },\n  {target: floating}\n)\n\nconst keynav = (e: Event, v: number) => {\n  e.preventDefault()\n  if (!modelValueBoolean.value) {\n    open()\n    nextTick(() => keynav(e, v))\n    return\n  }\n  const list = floating.value?.querySelectorAll('.dropdown-item:not(.disabled):not(:disabled)')\n  if (!list) return\n  if (floating.value?.contains(document.activeElement)) {\n    const active = floating.value.querySelector('.dropdown-item:focus')\n    const index = Array.prototype.indexOf.call(list, active) + v\n    if (index >= 0 && index < list?.length) (list[index] as HTMLElement)?.focus()\n  } else {\n    ;(list[v === -1 ? list.length - 1 : 0] as HTMLElement)?.focus()\n  }\n}\n\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: referencePlacement})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: referencePlacement})\nonKeyStroke('ArrowUp', (e) => keynav(e, -1), {target: floating})\nonKeyStroke('ArrowDown', (e) => keynav(e, 1), {target: floating})\n\nconst floatingPlacement = computed(() =>\n  resolveFloatingPlacement({\n    top: dropupBoolean.value,\n    start: dropstartBoolean.value,\n    end: dropendBoolean.value,\n    alignCenter: centerBoolean.value,\n    alignEnd: endBoolean.value,\n  })\n)\nconst sizeStyles = ref<CSSProperties>({})\nconst floatingMiddleware = computed<Middleware[]>(() => {\n  if (props.floatingMiddleware !== undefined) {\n    return props.floatingMiddleware\n  }\n  const localOffset =\n    typeof props.offset === 'string' || typeof props.offset === 'number'\n      ? offsetToNumber.value\n      : props.offset\n  const arr: Middleware[] = [offsetMiddleware(localOffset)]\n  if (noFlipBoolean.value === false) {\n    arr.push(\n      flip({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (noShiftBoolean.value === false) {\n    arr.push(\n      shift({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n      })\n    )\n  }\n  if (noSizeBoolean.value === false) {\n    arr.push(\n      sizeMiddleware({\n        boundary: boundary.value,\n        rootBoundary: rootBoundary.value,\n        padding: props.boundaryPadding,\n        apply({availableWidth, availableHeight}) {\n          sizeStyles.value = {\n            maxHeight: availableHeight ? `${availableHeight}px` : undefined,\n            maxWidth: availableWidth ? `${availableWidth}px` : undefined,\n          }\n        },\n      })\n    )\n  }\n  return arr\n})\nconst {update, floatingStyles} = useFloating(referencePlacement, floating, {\n  placement: floatingPlacement,\n  middleware: floatingMiddleware,\n  strategy: toRef(() => props.strategy),\n  whileElementsMounted: autoUpdate,\n})\n\nconst computedClasses = computed(() => ({\n  'dropup': dropupBoolean.value,\n  'dropend': dropendBoolean.value,\n  'dropstart': dropstartBoolean.value,\n  'position-static': props.boundary !== 'clippingAncestors' && !isNavBoolean.value,\n}))\n\nconst buttonClasses = computed(() => [\n  splitBoolean.value ? props.splitClass : props.toggleClass,\n  {\n    'nav-link': isNavBoolean.value,\n    'dropdown-toggle': !splitBoolean.value,\n    'dropdown-toggle-no-caret': noCaretBoolean.value && !splitBoolean.value,\n    'show': splitBoolean.value ? undefined : modelValueBoolean.value,\n  },\n])\n\nconst onButtonClick = () => {\n  toggle()\n}\n\nconst onSplitClick = (event: MouseEvent) => {\n  splitBoolean.value ? emit('click', event) : onButtonClick()\n}\n\nonClickOutside(\n  floating,\n  () => {\n    if (modelValueBoolean.value && (props.autoClose === true || props.autoClose === 'outside')) {\n      toggle()\n    }\n  },\n  {ignore: [button, splitButton]}\n)\nconst onClickInside = () => {\n  if (modelValueBoolean.value && (props.autoClose === true || props.autoClose === 'inside')) {\n    toggle()\n  }\n}\n\nconst close = () => {\n  modelValue.value && toggle()\n}\nconst open = () => {\n  modelValue.value || toggle()\n}\nconst toggle = () => {\n  emit('toggle')\n  const currentModelValue = modelValueBoolean.value\n  const e = new BvTriggerableEvent(currentModelValue ? 'hide' : 'show')\n  currentModelValue ? emit('hide', e) : emit('show', e)\n  if (e.defaultPrevented) {\n    currentModelValue ? emit('hide-prevented') : emit('show-prevented')\n    return\n  }\n  modelValue.value = !currentModelValue\n  currentModelValue ? emit('hidden') : emit('shown')\n  wrapper.value?.dispatchEvent(new Event('forceHide'))\n}\n\nwatch(modelValueBoolean, () => {\n  update()\n})\n\ndefineExpose({\n  close,\n  open,\n  toggle,\n})\n\nprovide(dropdownInjectionKey, {\n  id: computedId,\n  open,\n  close,\n  toggle,\n  visible: modelValueBoolean,\n  isNav: isNavBoolean,\n})\n</script>\n","<template>\n  <li role=\"presentation\">\n    <component\n      :is=\"headerTag\"\n      :id=\"headerId\"\n      class=\"dropdown-header\"\n      :class=\"computedClasses\"\n      :role=\"headerRole\"\n    >\n      <slot name=\"header\">\n        {{ header }}\n      </slot>\n    </component>\n    <ul\n      :id=\"id\"\n      role=\"group\"\n      class=\"list-unstyled\"\n      v-bind=\"$attrs\"\n      :aria-describedby=\"ariaDescribedby || headerId\"\n    >\n      <slot />\n    </ul>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ClassValue, ColorVariant} from '../../types'\nimport {computed, toRef} from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    ariaDescribedby?: string\n    header?: string\n    headerClass?: ClassValue\n    headerTag?: string\n    headerVariant?: ColorVariant | null\n    id?: string\n  }>(),\n  {\n    ariaDescribedby: undefined,\n    header: undefined,\n    headerClass: undefined,\n    headerTag: 'header',\n    headerVariant: null,\n    id: undefined,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n}>()\n\nconst headerId = toRef(() => (props.id ? `${props.id}_group_dd_header` : undefined))\nconst headerRole = toRef(() => (props.headerTag === 'header' ? undefined : 'heading'))\n\nconst computedClasses = computed(() => [\n  props.headerClass,\n  {\n    [`text-${props.headerVariant}`]: props.headerVariant !== null,\n  },\n])\n</script>\n","<template>\n  <li role=\"presentation\" :class=\"wrapperClass\" v-bind=\"wrapperAttrs\">\n    <component\n      :is=\"computedTag\"\n      class=\"dropdown-item\"\n      :class=\"computedClasses\"\n      :disabled=\"disabledBoolean\"\n      :aria-disabled=\"disabledBoolean ? true : null\"\n      :aria-current=\"activeBoolean ? true : null\"\n      :href=\"computedTag === 'a' ? href : null\"\n      :rel=\"rel\"\n      role=\"menuitem\"\n      :type=\"computedTag === 'button' ? 'button' : null\"\n      :target=\"target\"\n      v-bind=\"{...computedLinkProps, ...attrs}\"\n      @click=\"clicked\"\n    >\n      <slot />\n    </component>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport BLink from '../BLink/BLink.vue'\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {AttrsValue, BLinkProps, ClassValue} from '../../types'\nimport {useBLinkHelper, useBooleanish} from '../../composables'\nimport {collapseInjectionKey, dropdownInjectionKey, navbarInjectionKey} from '../../utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<\n    {\n      linkClass?: ClassValue\n      wrapperAttrs?: AttrsValue\n    } & Omit<BLinkProps, 'event' | 'routerTag'>\n  >(),\n  {\n    wrapperAttrs: undefined,\n    // Link props\n    linkClass: undefined,\n    variant: 'secondary',\n    // All others use defaults\n    active: undefined,\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    // End link props\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst {class: wrapperClass, ...attrs} = useAttrs()\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst computedClasses = computed(() => [\n  props.linkClass,\n  {\n    active: activeBoolean.value,\n    disabled: disabledBoolean.value,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.href ? 'a' : 'button'))\n\nconst collapseData = inject(collapseInjectionKey, null)\nconst dropdownData = inject(dropdownInjectionKey, null)\nconst navbarData = inject(navbarInjectionKey, null)\n\n// Pretty sure this emits if computedTag is not button and is disabled\nconst clicked = (e: MouseEvent): void => {\n  emit('click', e)\n  if (navbarData !== null && navbarData?.autoClose?.value === true) {\n    collapseData?.close?.()\n  }\n  dropdownData?.close?.()\n}\n</script>\n","<template>\n  <li role=\"presentation\">\n    <button\n      role=\"menu\"\n      type=\"button\"\n      class=\"dropdown-item\"\n      :class=\"computedClasses\"\n      :disabled=\"disabledBoolean\"\n      @click=\"clicked\"\n    >\n      <slot />\n    </button>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, ClassValue, ColorVariant} from '../../types'\nimport {computed} from 'vue'\nimport {useBooleanish} from '../../composables'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    active?: Booleanish\n    activeClass?: ClassValue\n    buttonClass?: ClassValue\n    disabled?: Booleanish\n    variant?: ColorVariant | null\n  }>(),\n  {\n    active: false,\n    activeClass: 'active',\n    buttonClass: undefined,\n    disabled: false,\n    variant: null,\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => [\n  props.buttonClass,\n  {\n    [props.activeClass]: activeBoolean.value,\n    disabled: disabledBoolean.value,\n    [`text-${props.variant}`]: props.variant !== null,\n  },\n])\n\nconst clicked = (e: MouseEvent) => {\n  emit('click', e)\n}\n</script>\n","<template>\n  <form\n    :id=\"id\"\n    ref=\"element\"\n    :novalidate=\"novalidateBoolean\"\n    :class=\"computedClasses\"\n    @submit.prevent=\"submitted\"\n  >\n    <slot />\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormProps} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {computed, ref} from 'vue'\n\nconst props = withDefaults(defineProps<BFormProps>(), {\n  floating: false,\n  id: undefined,\n  novalidate: false,\n  validated: false,\n})\n\nconst emit = defineEmits<{\n  submit: [value: Event]\n}>()\n\nconst element = ref<HTMLFormElement | null>(null)\n\nconst floatingBoolean = useBooleanish(() => props.floating)\nconst novalidateBoolean = useBooleanish(() => props.novalidate)\nconst validatedBoolean = useBooleanish(() => props.validated)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  'form-floating': floatingBoolean.value,\n  'was-validated': validatedBoolean.value,\n}))\n\nconst submitted = (e: Event) => {\n  emit('submit', e)\n}\n\ndefineExpose({\n  element,\n})\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"id\"\n    :role=\"role\"\n    :aria-live=\"ariaLive\"\n    :aria-atomic=\"ariaLive ? true : undefined\"\n    :class=\"computedClasses\"\n  >\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\n  ariaLive: undefined,\n  forceShow: false,\n  id: undefined,\n  role: undefined,\n  state: null,\n  tag: 'div',\n  text: undefined,\n  tooltip: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst forceShowBoolean = useBooleanish(() => props.forceShow)\nconst stateBoolean = useBooleanish(() => props.state)\nconst tooltipBoolean = useBooleanish(() => props.tooltip)\n\nconst computedShow = toRef(() => forceShowBoolean.value === true || stateBoolean.value === false)\n\nconst computedClasses = computed(() => ({\n  'd-block': computedShow.value,\n  'invalid-feedback': !tooltipBoolean.value,\n  'invalid-tooltip': tooltipBoolean.value,\n}))\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" :class=\"computedClasses\">\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport type {Booleanish, TextColorVariant} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    id?: string\n    inline?: Booleanish\n    tag?: string\n    text?: string\n    textVariant?: TextColorVariant | null\n  }>(),\n  {\n    id: undefined,\n    inline: false,\n    tag: 'small',\n    text: undefined,\n    textVariant: 'body-secondary',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst inlineBoolean = useBooleanish(() => props.inline)\n\nconst computedClasses = computed(() => ({\n  [`text-${props.textVariant}`]: props.textVariant !== null,\n  'form-text': !inlineBoolean.value,\n}))\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"id\"\n    :role=\"role\"\n    :aria-live=\"ariaLive\"\n    :aria-atomic=\"ariaLive ? true : undefined\"\n    :class=\"computedClasses\"\n  >\n    <slot>\n      {{ text }}\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {BFormFeedbackSharedProps} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(defineProps<BFormFeedbackSharedProps>(), {\n  ariaLive: undefined,\n  forceShow: false,\n  id: undefined,\n  role: undefined,\n  state: null,\n  tag: 'div',\n  text: undefined,\n  tooltip: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst forceShowBoolean = useBooleanish(() => props.forceShow)\nconst stateBoolean = useBooleanish(() => props.state)\nconst tooltipBoolean = useBooleanish(() => props.tooltip)\n\nconst computedShow = toRef(() => forceShowBoolean.value === true || stateBoolean.value === true)\n\nconst computedClasses = computed(() => ({\n  'd-block': computedShow.value,\n  'valid-feedback': !tooltipBoolean.value,\n  'valid-tooltip': tooltipBoolean.value,\n}))\n</script>\n","<script lang=\"ts\">\nimport {\n  defineComponent,\n  h,\n  type PropType,\n  type RendererElement,\n  type SlotsType,\n  Teleport,\n} from 'vue'\n\nexport default defineComponent({\n  name: 'ComponentOrEmpty',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    tag: {\n      type: String,\n      default: 'div',\n    },\n    to: {\n      type: [String, Object] as PropType<string | RendererElement | null | undefined>,\n      default: null,\n    },\n    skip: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  setup(props, {slots, attrs}) {\n    return () =>\n      props.skip\n        ? slots.default?.()\n        : props.tag === 'Teleport'\n        ? h(Teleport, {to: props.to}, [slots.default?.()])\n        : h(props.tag, {...attrs}, [slots.default?.()])\n  },\n})\n</script>\n","<template>\n  <RenderComponentOrSkip :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"checkbox\"\n      :disabled=\"disabledBoolean || parentData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"name || parentData?.name.value\"\n      :form=\"form || parentData?.form.value\"\n      :aria-label=\"ariaLabel\"\n      :aria-labelledby=\"ariaLabelledBy\"\n      :aria-required=\"computedRequired || undefined\"\n      :value=\"value\"\n      :true-value=\"value\"\n      :false-value=\"uncheckedValue\"\n      :indeterminate=\"indeterminateBoolean\"\n      @change=\"modelValue !== undefined && emit('change', modelValue)\"\n      @input=\"modelValue !== undefined && emit('input', modelValue)\"\n    />\n    <label v-if=\"hasDefaultSlot || plainBoolean === false\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus, useVModel} from '@vueuse/core'\nimport {computed, inject, ref, toRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useBooleanish, useId} from '../../composables'\nimport type {Booleanish, ButtonVariant, CheckboxValue, Size} from '../../types'\nimport {checkboxGroupKey, isEmptySlot} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    ariaLabel?: string\n    ariaLabelledBy?: string\n    autofocus?: Booleanish\n    button?: Booleanish\n    buttonGroup?: Booleanish\n    buttonVariant?: ButtonVariant | null\n    disabled?: Booleanish\n    form?: string\n    id?: string\n    indeterminate?: Booleanish\n    inline?: Booleanish\n    modelValue?: CheckboxValue | CheckboxValue[]\n    name?: string\n    plain?: Booleanish\n    required?: Booleanish\n    size?: Size\n    state?: Booleanish | null\n    switch?: Booleanish\n    uncheckedValue?: CheckboxValue\n    value?: CheckboxValue\n  }>(),\n  {\n    ariaLabel: undefined,\n    ariaLabelledBy: undefined,\n    autofocus: false,\n    button: false,\n    buttonGroup: false,\n    buttonVariant: null,\n    disabled: false,\n    form: undefined,\n    id: undefined,\n    indeterminate: undefined,\n    inline: false,\n    modelValue: undefined,\n    name: undefined,\n    plain: false,\n    required: undefined,\n    size: undefined,\n    state: null,\n    switch: false,\n    uncheckedValue: false,\n    value: true,\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: CheckboxValue | CheckboxValue[]]\n  'input': [value: CheckboxValue | CheckboxValue[]]\n  'update:modelValue': [value: CheckboxValue | CheckboxValue[]]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst indeterminateBoolean = useBooleanish(() => props.indeterminate)\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst plainBoolean = useBooleanish(() => props.plain)\nconst buttonBoolean = useBooleanish(() => props.button)\nconst buttonGroupBoolean = useBooleanish(() => props.buttonGroup)\nconst switchBoolean = useBooleanish(() => props.switch)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst inlineBoolean = useBooleanish(() => props.inline)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stateBoolean = useBooleanish(() => props.state)\n\nconst parentData = inject(checkboxGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: autofocusBoolean.value,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n  get: () => parentData?.modelValue.value ?? modelValue.value,\n  set: (newVal) => {\n    if (newVal === undefined) return\n    if (parentData !== null && Array.isArray(newVal)) {\n      // The type cast isn't perfect. Array.isArray detects CheckboxValue.unknown[],\n      // but since it's parentData, it should always be CheckboxValue[]\n      // It doesn't quite work when props.value is an [], but this is more of a Vue issue\n      parentData.modelValue.value = newVal as CheckboxValue[]\n      return\n    }\n    modelValue.value = newVal as CheckboxValue\n  },\n})\n\nconst computedRequired = toRef(\n  () =>\n    !!(props.name ?? parentData?.name.value) &&\n    (requiredBoolean.value || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => buttonGroupBoolean.value || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  plain: plainBoolean.value || (parentData?.plain.value ?? false),\n  button: buttonBoolean.value || (parentData?.buttons.value ?? false),\n  inline: inlineBoolean.value || (parentData?.inline.value ?? false),\n  switch: switchBoolean.value || (parentData?.switch.value ?? false),\n  state: stateBoolean.value || parentData?.state.value,\n  size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n  buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"element\"\n    role=\"group\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormCheckbox v-for=\"item in normalizeOptions\" :key=\"item.self\" v-bind=\"item.props\">\n      <!-- eslint-disable-next-line vue/no-v-html -->\n      <span v-if=\"item.html\" v-html=\"item.html\" />\n      <span v-else v-text=\"item.text\" />\n    </BFormCheckbox>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, provide, ref, toRef, watch} from 'vue'\nimport BFormCheckbox from './BFormCheckbox.vue'\nimport type {AriaInvalid, Booleanish, ButtonVariant, CheckboxValue, Size} from '../../types'\nimport {getGroupAttr, getGroupClasses, useBooleanish, useId} from '../../composables'\nimport {checkboxGroupKey} from '../../utils'\nimport {useFocus, useVModel} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaInvalid?: AriaInvalid\n    autofocus?: Booleanish\n    buttonVariant?: ButtonVariant | null\n    buttons?: Booleanish\n    disabled?: Booleanish\n    disabledField?: string\n    form?: string\n    htmlField?: string\n    id?: string\n    modelValue?: CheckboxValue[]\n    name?: string\n    options?: (string | number | Record<string, unknown>)[]\n    plain?: Booleanish\n    required?: Booleanish\n    size?: Size\n    stacked?: Booleanish\n    state?: Booleanish | null\n    switches?: Booleanish\n    textField?: string\n    validated?: Booleanish\n    valueField?: string\n  }>(),\n  {\n    ariaInvalid: undefined,\n    autofocus: false,\n    buttonVariant: 'secondary',\n    buttons: false,\n    disabled: false,\n    disabledField: 'disabled',\n    form: undefined,\n    htmlField: 'html',\n    id: undefined,\n    modelValue: () => [],\n    name: undefined,\n    options: () => [],\n    plain: false,\n    required: false,\n    size: 'md',\n    stacked: false,\n    state: null,\n    switches: false,\n    textField: 'text',\n    validated: false,\n    valueField: 'value',\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: CheckboxValue[]]\n  'input': [value: CheckboxValue[]]\n  'update:modelValue': [value: CheckboxValue[]]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst computedId = useId(() => props.id, 'checkbox')\nconst computedName = useId(() => props.name, 'checkbox')\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst buttonsBoolean = useBooleanish(() => props.buttons)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst plainBoolean = useBooleanish(() => props.plain)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stackedBoolean = useBooleanish(() => props.stacked)\nconst stateBoolean = useBooleanish(() => props.state)\nconst switchesBoolean = useBooleanish(() => props.switches)\nconst validatedBoolean = useBooleanish(() => props.validated)\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n  initialValue: autofocusBoolean.value,\n})\n\nprovide(checkboxGroupKey, {\n  modelValue,\n  switch: switchesBoolean,\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  state: stateBoolean,\n  plain: plainBoolean,\n  size: toRef(() => props.size),\n  inline: toRef(() => !stackedBoolean.value),\n  required: requiredBoolean,\n  buttons: buttonsBoolean,\n  disabled: disabledBoolean,\n})\n\nwatch(modelValue, (newValue) => {\n  emit('input', newValue)\n  nextTick(() => {\n    emit('change', newValue)\n  })\n})\n\nconst normalizeOptions = computed(() =>\n  props.options.map((el, ind) =>\n    typeof el === 'string' || typeof el === 'number'\n      ? {\n          props: {\n            value: el,\n            disabled: disabledBoolean.value,\n          },\n          text: el.toString(),\n          html: undefined,\n          self: Symbol(`checkboxGroupOptionItem${ind}`),\n        }\n      : {\n          props: {\n            value: el[props.valueField] as string | number | undefined,\n            disabled: el[props.disabledField] as boolean | undefined,\n            ...(el.props ? el.props : {}),\n          },\n          text: el[props.textField] as string | undefined,\n          html: el[props.htmlField] as string | undefined,\n          self: Symbol(`checkboxGroupOptionItem${ind}`),\n        }\n  )\n)\n\nconst classesObject = computed(() => ({\n  required: requiredBoolean.value,\n  ariaInvalid: props.ariaInvalid,\n  state: stateBoolean.value,\n  validated: validatedBoolean.value,\n  buttons: buttonsBoolean.value,\n  stacked: stackedBoolean.value,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <label v-if=\"hasLabelSlot || label\" :for=\"computedId\" class=\"form-label\" :class=\"labelClass\">\n    <slot name=\"label\">\n      {{ label }}\n    </slot>\n  </label>\n  <input\n    :id=\"computedId\"\n    v-bind=\"$attrs\"\n    ref=\"input\"\n    type=\"file\"\n    class=\"form-control\"\n    :class=\"computedClasses\"\n    :form=\"form\"\n    :name=\"name\"\n    :multiple=\"multipleBoolean\"\n    :disabled=\"disabledBoolean\"\n    :capture=\"computedCapture\"\n    :accept=\"computedAccept || undefined\"\n    :required=\"requiredBoolean || undefined\"\n    :aria-required=\"requiredBoolean || undefined\"\n    :directory=\"directoryBoolean\"\n    :webkitdirectory=\"directoryBoolean\"\n    @change=\"onChange\"\n    @drop=\"onDrop\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef, watch} from 'vue'\nimport {useFocus, useVModel} from '@vueuse/core'\nimport type {Booleanish, ClassValue, Size} from '../../types'\nimport {useBooleanish, useId, useStateClass} from '../../composables'\nimport {isEmptySlot} from '../../utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  label?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<{\n    accept?: string | string[]\n    autofocus?: Booleanish\n    capture?: Booleanish | 'user' | 'environment'\n    directory?: Booleanish\n    disabled?: Booleanish\n    form?: string\n    id?: string\n    label?: string\n    labelClass?: ClassValue\n    modelValue?: File[] | File | null\n    multiple?: Booleanish\n    name?: string\n    noDrop?: Booleanish\n    noTraverse?: Booleanish\n    required?: Booleanish\n    size?: Size\n    state?: Booleanish | null\n  }>(),\n  {\n    accept: '',\n    autofocus: false,\n    // eslint-disable-next-line vue/require-valid-default-prop\n    capture: false,\n    directory: false,\n    disabled: false,\n    form: undefined,\n    id: undefined,\n    label: '',\n    labelClass: undefined,\n    modelValue: null,\n    multiple: false,\n    name: undefined,\n    noDrop: false,\n    noTraverse: false,\n    required: false,\n    size: undefined,\n    state: null,\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: Event]\n  'update:modelValue': [value: File | File[] | null]\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\nconst computedId = useId(() => props.id)\n\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst directoryBoolean = useBooleanish(() => props.directory)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst multipleBoolean = useBooleanish(() => props.multiple)\nconst noDropBoolean = useBooleanish(() => props.noDrop)\n// TODO not implemented yet\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst noTraverseBoolean = useBooleanish(() => props.noTraverse)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stateBoolean = useBooleanish(() => props.state)\nconst computedCapture = useBooleanish(() => props.capture)\n\nconst stateClass = useStateClass(stateBoolean)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {initialValue: autofocusBoolean.value})\n\nconst hasLabelSlot = toRef(() => !isEmptySlot(slots['label']))\nconst computedAccept = toRef(() =>\n  typeof props.accept === 'string' ? props.accept : props.accept.join(',')\n)\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    [`form-control-${props.size}`]: props.size !== undefined,\n  },\n])\n\nconst onChange = (e: Event) => {\n  const value =\n    input.value?.files === null || input.value?.files === undefined ? null : [...input.value.files]\n  modelValue.value = value === null ? null : multipleBoolean.value === true ? value : value[0]\n  emit('change', e)\n}\n\nconst onDrop = (e: Event) => {\n  if (noDropBoolean.value === true) {\n    e.preventDefault()\n  }\n}\n\n/**\n * Reset the form input\n */\nconst reset = () => {\n  modelValue.value = null\n}\n\nwatch(modelValue, (newValue) => {\n  if (newValue === null && input.value !== null) {\n    input.value.value = ''\n  }\n})\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n  reset,\n})\n</script>\n","<script lang=\"ts\">\nimport {useAriaInvalid, useBooleanish, useId, useStateClass} from '../../composables'\nimport {RX_SPACE_SPLIT} from '../../constants/regex'\nimport {\n  attemptFocus,\n  cssEscape,\n  getAttr,\n  getId,\n  IS_BROWSER,\n  isVisible,\n  normalizeSlot,\n  removeAttr,\n  select,\n  selectAll,\n  setAttr,\n  stringToInteger,\n  suffixPropName,\n} from '../../utils'\nimport {computed, defineComponent, h, nextTick, onMounted, type PropType, ref, watch} from 'vue'\nimport BCol from '../BCol.vue'\nimport BFormInvalidFeedback from '../BForm/BFormInvalidFeedback.vue'\nimport BFormRow from '../BForm/BFormRow.vue'\nimport BFormText from '../BForm/BFormText.vue'\nimport BFormValidFeedback from '../BForm/BFormValidFeedback.vue'\nimport type {AriaInvalid, Booleanish} from '../../types'\n\nconst INPUTS = ['input', 'select', 'textarea']\n// Selector for finding first input in the form group\nconst INPUT_SELECTOR = INPUTS.map((v) => `${v}:not([disabled])`).join()\n\n// A list of interactive elements (tag names) inside `<BFormGroup>`'s legend\nconst LEGEND_INTERACTIVE_ELEMENTS = [...INPUTS, 'a', 'button', 'label']\n\nexport const SLOT_NAME_LABEL = 'label'\nexport const SLOT_NAME_INVALID_FEEDBACK = 'invalid-feedback'\nexport const SLOT_NAME_VALID_FEEDBACK = 'valid-feedback'\nexport const SLOT_NAME_DESCRIPTION = 'description'\nexport const SLOT_NAME_DEFAULT = 'default'\n\nexport default defineComponent({\n  components: {BCol, BFormInvalidFeedback, BFormRow, BFormText, BFormValidFeedback},\n  props: {\n    ariaInvalid: {type: [Boolean, String] as PropType<AriaInvalid>, default: undefined},\n    contentCols: {type: [Boolean, String, Number], default: undefined},\n    contentColsLg: {type: [Boolean, String, Number], default: undefined},\n    contentColsMd: {type: [Boolean, String, Number], default: undefined},\n    contentColsSm: {type: [Boolean, String, Number], default: undefined},\n    contentColsXl: {type: [Boolean, String, Number], default: undefined},\n    description: {type: [String], default: undefined},\n    disabled: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n    feedbackAriaLive: {type: String, default: 'assertive'},\n    id: {type: String, default: undefined},\n    invalidFeedback: {type: String, default: undefined},\n    label: {type: String, default: undefined},\n    labelAlign: {type: [Boolean, String, Number], default: undefined},\n    labelAlignLg: {type: [Boolean, String, Number], default: undefined},\n    labelAlignMd: {type: [Boolean, String, Number], default: undefined},\n    labelAlignSm: {type: [Boolean, String, Number], default: undefined},\n    labelAlignXl: {type: [Boolean, String, Number], default: undefined},\n    labelClass: {type: [Array, Object, String], default: undefined},\n    labelCols: {type: [Boolean, String, Number], default: undefined},\n    labelColsLg: {type: [Boolean, String, Number], default: undefined},\n    labelColsMd: {type: [Boolean, String, Number], default: undefined},\n    labelColsSm: {type: [Boolean, String, Number], default: undefined},\n    labelColsXl: {type: [Boolean, String, Number], default: undefined},\n    labelFor: {type: String, default: undefined},\n    labelSize: {type: String, default: undefined},\n    labelSrOnly: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n    state: {type: [Boolean, String] as PropType<Booleanish | null>, default: null},\n    tooltip: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n    validFeedback: {type: String, default: undefined},\n    validated: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n    floating: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n  },\n  setup(props) {\n    const disabledBoolean = useBooleanish(() => props.disabled)\n    const labelSrOnlyBoolean = useBooleanish(() => props.labelSrOnly)\n    const stateBoolean = useBooleanish(() => props.state)\n    const tooltipBoolean = useBooleanish(() => props.tooltip)\n    const validatedBoolean = useBooleanish(() => props.validated)\n    const floatingBoolean = useBooleanish(() => props.floating)\n\n    const ariaDescribedby: string | null = null as string | null\n    const breakPoints = ['xs', 'sm', 'md', 'lg', 'xl']\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const getAlignClasses = (props: any, prefix: string) =>\n      breakPoints.reduce((result: string[], breakpoint) => {\n        const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Align`)\n        const propValue: string = props[suffix] || null\n        if (propValue) {\n          breakpoint === 'xs'\n            ? result.push(`text-${propValue}`)\n            : result.push(`text-${breakpoint}-${propValue}`)\n        }\n\n        return result\n      }, [])\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const getColProps = (props: any, prefix: string) =>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      breakPoints.reduce((result: any, breakpoint: string) => {\n        const suffix = suffixPropName(breakpoint === 'xs' ? '' : breakpoint, `${prefix}Cols`)\n        let propValue = props[suffix]\n        // Handle case where the prop's value is an empty string,\n        // which represents `true`\n        propValue = propValue === '' ? true : propValue || false\n\n        if (!(typeof propValue === 'boolean') && propValue !== 'auto') {\n          // Convert to column size to number\n          propValue = stringToInteger(propValue, 0)\n          // Ensure column size is greater than `0`\n          propValue = propValue > 0 ? propValue : false\n        }\n\n        // Add the prop to the list of props to give to `</BCol>`\n        // If breakpoint is '' (`${prefix}Cols` is `true`), then we use\n        // the 'col' prop to make equal width at 'xs'\n        if (propValue) {\n          // Extra care is required for xs since it does not have a BCol breakpoint prop\n          // Xs breakpoint is simply 'cols'\n          if (breakpoint === 'xs') {\n            result[typeof propValue === 'boolean' ? 'col' : 'cols'] = propValue\n          } else {\n            result[breakpoint || (typeof propValue === 'boolean' ? 'col' : 'cols')] = propValue\n          }\n        }\n        return result\n      }, {})\n\n    const content = ref<HTMLElement | null>(null)\n\n    // Sets the `aria-describedby` attribute on the input if `labelFor` is set\n    // Optionally accepts a string of Ids to remove as the second parameter\n    // Preserves any `aria-describedby` value(s) user may have on input\n    const updateAriaDescribedby = (newValue: string | null, oldValue: string | null = null) => {\n      if (IS_BROWSER && props.labelFor && content.value !== null) {\n        // We need to escape `labelFor` since it can be user-provided\n        const $input = select(`#${cssEscape(props.labelFor)}`, content.value)\n        if ($input) {\n          const attr = 'aria-describedby'\n          const newIds = (newValue || '').split(RX_SPACE_SPLIT)\n          const oldIds = (oldValue || '').split(RX_SPACE_SPLIT)\n\n          // Update Id list, preserving any original Ids\n          // and ensuring the Id's are unique\n          const ids = (getAttr($input, attr) || '')\n            .split(RX_SPACE_SPLIT)\n            .filter((id) => !oldIds.includes(id))\n            .concat(newIds)\n            .filter((id, index, ids) => ids.indexOf(id) === index)\n            .filter((x) => x)\n            .join(' ')\n            .trim()\n\n          if (ids) {\n            setAttr($input, attr, ids)\n          } else {\n            removeAttr($input, attr)\n          }\n        }\n      }\n    }\n\n    const contentColProps = computed(() => getColProps(props, 'content'))\n    const labelAlignClasses = computed(() => getAlignClasses(props, 'label'))\n    const labelColProps = computed(() => getColProps(props, 'label'))\n    const isHorizontal = computed(\n      () =>\n        // Determine if the form group will be rendered horizontal\n        // based on the existence of 'content-col' or 'label-col' props\n        Object.keys(contentColProps.value).length > 0 || Object.keys(labelColProps.value).length > 0\n    )\n\n    const stateClass = useStateClass(stateBoolean)\n\n    const computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, stateBoolean)\n\n    watch(\n      () => ariaDescribedby,\n      (newValue: string | null, oldValue: string | null) => {\n        if (newValue !== oldValue) {\n          updateAriaDescribedby(newValue, oldValue)\n        }\n      }\n    )\n\n    onMounted(() => {\n      nextTick(() => {\n        // Set `aria-describedby` on the input specified by `labelFor`\n        // We do this in a `$nextTick()` to ensure the children have finished rendering\n        updateAriaDescribedby(ariaDescribedby)\n      })\n    })\n\n    const onLegendClick = (event: MouseEvent) => {\n      // Don't do anything if `labelFor` is set\n      if (props.labelFor || content.value === null) return\n\n      const {target} = event\n      const tagName = target ? (target as HTMLElement).tagName : ''\n\n      // If clicked an interactive element inside legend,\n      // we just let the default happen\n      if (LEGEND_INTERACTIVE_ELEMENTS.indexOf(tagName) !== -1) return\n\n      // If only a single input, focus it, emulating label behaviour\n      const inputs = selectAll(INPUT_SELECTOR, content.value).filter(isVisible)\n      if (inputs.length === 1) {\n        attemptFocus(inputs[0])\n      }\n    }\n\n    return {\n      disabledBoolean,\n      labelSrOnlyBoolean,\n      stateBoolean,\n      tooltipBoolean,\n      validatedBoolean,\n      floatingBoolean,\n      ariaDescribedby,\n      computedAriaInvalid,\n      contentColProps,\n      isHorizontal,\n      labelAlignClasses,\n      labelColProps,\n      onLegendClick,\n      stateClass,\n    }\n  },\n  render() {\n    const props = this.$props\n    const slots = this.$slots\n\n    const id = useId()\n    const isFieldset = !props.labelFor\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let $label: any = null\n    const labelContent = normalizeSlot(SLOT_NAME_LABEL, {}, slots) || props.label\n    const labelId = labelContent ? getId('_BV_label_') : null\n\n    if (labelContent || this.isHorizontal) {\n      const labelTag: 'legend' | 'label' = isFieldset ? 'legend' : 'label'\n      if (this.labelSrOnlyBoolean) {\n        if (labelContent) {\n          $label = h(\n            labelTag,\n            {\n              class: 'visually-hidden',\n              id: labelId,\n              for: props.labelFor || null,\n            },\n            labelContent\n          )\n        }\n        if (this.isHorizontal) {\n          $label = h(BCol, this.labelColProps, {default: () => $label})\n        } else {\n          $label = h('div', {}, [$label])\n        }\n      } else {\n        const renderProps = {\n          onClick: isFieldset ? this.onLegendClick : null,\n          ...(this.isHorizontal ? this.labelColProps : {}),\n          tag: this.isHorizontal ? labelTag : null,\n          id: labelId,\n          for: props.labelFor || null,\n          tabIndex: isFieldset ? '-1' : null,\n          class: [\n            this.isHorizontal ? 'col-form-label' : 'form-label',\n            {\n              'bv-no-focus-ring': isFieldset,\n              'col-form-label': this.isHorizontal || isFieldset,\n              'pt-0': !this.isHorizontal && isFieldset,\n              'd-block': !this.isHorizontal && !isFieldset,\n              [`col-form-label-${props.labelSize}`]: !!props.labelSize,\n            },\n            this.labelAlignClasses,\n            props.labelClass,\n          ],\n        }\n        if (this.isHorizontal) {\n          $label = h(BCol, renderProps, {default: () => labelContent})\n        } else {\n          $label = h(labelTag, renderProps, labelContent)\n        }\n      }\n    }\n\n    let $invalidFeedback = null\n    const invalidFeedbackContent =\n      normalizeSlot(SLOT_NAME_INVALID_FEEDBACK, {}, slots) || this.invalidFeedback\n    const invalidFeedbackId = invalidFeedbackContent ? getId('_BV_feedback_invalid_') : undefined\n\n    if (invalidFeedbackContent) {\n      $invalidFeedback = h(\n        BFormInvalidFeedback,\n        {\n          ariaLive: props.feedbackAriaLive,\n          id: invalidFeedbackId,\n          state: this.stateBoolean,\n          tooltip: this.tooltipBoolean,\n        },\n        {default: () => invalidFeedbackContent}\n      )\n    }\n\n    let $validFeedback = null\n    const validFeedbackContent =\n      normalizeSlot(SLOT_NAME_VALID_FEEDBACK, {}, slots) || this.validFeedback\n    const validFeedbackId = validFeedbackContent ? getId('_BV_feedback_valid_') : undefined\n\n    if (validFeedbackContent) {\n      $validFeedback = h(\n        BFormValidFeedback,\n        {\n          ariaLive: props.feedbackAriaLive,\n          id: validFeedbackId,\n          state: this.stateBoolean,\n          tooltip: this.tooltipBoolean,\n        },\n        {default: () => validFeedbackContent}\n        // validFeedbackContent\n      )\n    }\n\n    let $description = null\n    const descriptionContent = normalizeSlot(SLOT_NAME_DESCRIPTION, {}, slots) || this.description\n    const descriptionId = descriptionContent ? getId('_BV_description_') : undefined\n    if (descriptionContent) {\n      $description = h(\n        BFormText,\n        {\n          id: descriptionId,\n        },\n        {default: () => descriptionContent}\n      )\n    }\n\n    // Update `ariaDescribedby`\n    // Screen readers will read out any content linked to by `aria-describedby`\n    // even if the content is hidden with `display: none;`, hence we only include\n    // feedback Ids if the form group's state is explicitly valid or invalid\n    const ariaDescribedby = (this.ariaDescribedby =\n      [\n        descriptionId,\n        this.stateBoolean === false ? invalidFeedbackId : null,\n        this.stateBoolean === true ? validFeedbackId : null,\n      ]\n        .filter((x) => x)\n        .join(' ') || null)\n\n    const contentBlocks = [\n      normalizeSlot(SLOT_NAME_DEFAULT, {ariaDescribedby, descriptionId, id, labelId}, slots) || '',\n      $invalidFeedback,\n      $validFeedback,\n      $description,\n    ]\n    if (!this.isHorizontal && this.floatingBoolean) contentBlocks.push($label)\n\n    let $content = h(\n      'div',\n      {\n        ref: 'content',\n        class: [\n          {\n            'form-floating': !this.isHorizontal && this.floatingBoolean,\n          },\n        ],\n      },\n      contentBlocks\n    )\n    if (this.isHorizontal) {\n      $content = h(BCol, {ref: 'content', ...this.contentColProps}, {default: () => contentBlocks})\n    }\n\n    // Return it wrapped in a form group\n    // Note: Fieldsets do not support adding `row` or `form-row` directly\n    // to them due to browser specific render issues, so we move the `form-row`\n    // to an inner wrapper div when horizontal and using a fieldset\n    const rowProps = {\n      'class': [\n        this.stateClass,\n        {\n          'was-validated': this.validatedBoolean,\n        },\n      ],\n      'id': useId(() => props.id).value,\n      'disabled': isFieldset ? this.disabledBoolean : null,\n      'role': isFieldset ? null : 'group',\n      'aria-invalid': this.computedAriaInvalid,\n      // Only apply `aria-labelledby` if we are a horizontal fieldset\n      // as the legend is no longer a direct child of fieldset\n      'aria-labelledby': isFieldset && this.isHorizontal ? labelId : null,\n    }\n\n    if (this.isHorizontal && !isFieldset) {\n      return h(BFormRow, rowProps, {default: () => [$label, $content]})\n    }\n\n    return h(\n      isFieldset ? 'fieldset' : 'div',\n      rowProps,\n      this.isHorizontal && isFieldset\n        ? [h(BFormRow, null, {default: () => [$label, $content]})]\n        : this.isHorizontal || !this.floatingBoolean\n        ? [$label, $content]\n        : [$content]\n    )\n  },\n})\n</script>\n","<template>\n  <input\n    :id=\"computedId\"\n    ref=\"input\"\n    :value=\"modelValue\"\n    :class=\"computedClasses\"\n    :name=\"name || undefined\"\n    :form=\"form || undefined\"\n    :type=\"type\"\n    :disabled=\"disabledBoolean\"\n    :placeholder=\"placeholder\"\n    :required=\"requiredBoolean || undefined\"\n    :autocomplete=\"autocomplete || undefined\"\n    :readonly=\"readonlyBoolean || plaintextBoolean\"\n    :min=\"min\"\n    :max=\"max\"\n    :step=\"step\"\n    :list=\"type !== 'password' ? list : undefined\"\n    :aria-required=\"requiredBoolean || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n    @input=\"onInput($event)\"\n    @change=\"onChange($event)\"\n    @blur=\"onBlur($event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useBooleanish, useFormInput, useStateClass} from '../../composables'\nimport type {CommonInputProps} from '../../composables/useFormInput'\nimport type {InputType} from '../../types'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      max?: string | number\n      min?: string | number\n      // noWheel: {type: [Boolean, String] as PropType<Booleanish>, default: false}, TODO: not implemented yet\n      step?: string | number\n      type?: InputType\n    } & CommonInputProps\n  >(),\n  {\n    max: undefined,\n    min: undefined,\n    step: undefined,\n    type: 'text',\n    // CommonInputProps\n    ariaInvalid: undefined,\n    autocomplete: undefined,\n    autofocus: false,\n    debounce: 0,\n    debounceMaxWait: NaN,\n    disabled: false,\n    form: undefined,\n    formatter: undefined,\n    id: undefined,\n    lazy: false,\n    lazyFormatter: false,\n    list: undefined,\n    modelValue: '',\n    name: undefined,\n    number: false,\n    placeholder: undefined,\n    plaintext: false,\n    readonly: false,\n    required: false,\n    size: undefined,\n    state: null,\n    trim: false,\n    // End CommonInputProps\n  }\n)\n\nconst emit = defineEmits<{\n  'blur': [val: FocusEvent]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'change': [val: any]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'input': [val: any]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'update:modelValue': [val: any]\n}>()\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n  useFormInput(props, emit)\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst readonlyBoolean = useBooleanish(() => props.readonly)\nconst plaintextBoolean = useBooleanish(() => props.plaintext)\nconst stateBoolean = useBooleanish(() => props.state)\n\nconst stateClass = useStateClass(stateBoolean)\n\nconst isHighlighted = ref(false)\n\nconst computedClasses = computed(() => {\n  const isRange = props.type === 'range'\n  const isColor = props.type === 'color'\n  return [\n    stateClass.value,\n    {\n      'form-control-highlighted': isHighlighted.value,\n      'form-range': isRange,\n      'form-control': isColor || (!props.plaintext && !isRange),\n      'form-control-color': isColor,\n      'form-control-plaintext': props.plaintext && !isRange && !isColor,\n      [`form-control-${props.size}`]: !!props.size,\n    },\n  ]\n})\n\ndefineExpose({\n  blur,\n  element: input,\n  focus,\n})\n\n// const highlight = () => {\n//   if (isHighlighted.value === true) return\n//   isHighlighted.value = true\n//   setTimeout(() => {\n//     isHighlighted.value = false\n//   }, 2000)\n// }\n</script>\n","<template>\n  <RenderComponentOrSkip :skip=\"isButtonGroup\" :class=\"computedClasses\">\n    <input\n      :id=\"computedId\"\n      v-bind=\"$attrs\"\n      ref=\"input\"\n      v-model=\"localValue\"\n      :class=\"inputClasses\"\n      type=\"radio\"\n      :disabled=\"disabledBoolean || parentData?.disabled.value\"\n      :required=\"computedRequired || undefined\"\n      :name=\"name || parentData?.name.value\"\n      :form=\"form || parentData?.form.value\"\n      :aria-label=\"ariaLabel\"\n      :aria-labelledby=\"ariaLabelledby\"\n      :value=\"value\"\n      :aria-required=\"computedRequired || undefined\"\n      @change=\"modelValue !== undefined && emit('change', modelValue)\"\n      @input=\"modelValue !== undefined && emit('input', modelValue)\"\n    />\n    <label v-if=\"hasDefaultSlot || plainBoolean === false\" :for=\"computedId\" :class=\"labelClasses\">\n      <slot />\n    </label>\n  </RenderComponentOrSkip>\n</template>\n\n<script setup lang=\"ts\">\nimport {useFocus, useVModel} from '@vueuse/core'\nimport {computed, inject, ref, toRef} from 'vue'\nimport {getClasses, getInputClasses, getLabelClasses, useBooleanish, useId} from '../../composables'\nimport type {Booleanish, ButtonVariant, RadioValue, Size} from '../../types'\nimport {isEmptySlot, radioGroupKey} from '../../utils'\nimport RenderComponentOrSkip from '../RenderComponentOrSkip.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    ariaLabel?: string\n    ariaLabelledby?: string\n    autofocus?: Booleanish\n    button?: Booleanish\n    buttonGroup?: Booleanish\n    buttonVariant?: ButtonVariant | null\n    disabled?: Booleanish\n    form?: string\n    id?: string\n    inline?: Booleanish\n    modelValue?: RadioValue\n    name?: string\n    plain?: Booleanish\n    required?: Booleanish\n    size?: Size\n    state?: Booleanish | null\n    value?: RadioValue\n  }>(),\n  {\n    ariaLabel: undefined,\n    ariaLabelledby: undefined,\n    autofocus: false,\n    button: false,\n    buttonGroup: false,\n    buttonVariant: null,\n    disabled: false,\n    form: undefined,\n    id: undefined,\n    inline: false,\n    modelValue: undefined,\n    name: undefined,\n    plain: false,\n    required: false,\n    size: undefined,\n    state: null,\n    value: true,\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: RadioValue]\n  'input': [value: RadioValue]\n  'update:modelValue': [value: RadioValue]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst computedId = useId(() => props.id, 'form-check')\n\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst plainBoolean = useBooleanish(() => props.plain)\nconst buttonBoolean = useBooleanish(() => props.button)\nconst buttonGroupBoolean = useBooleanish(() => props.buttonGroup)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst inlineBoolean = useBooleanish(() => props.inline)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stateBoolean = useBooleanish(() => props.state)\n\nconst parentData = inject(radioGroupKey, null)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: autofocusBoolean.value,\n})\n\nconst hasDefaultSlot = toRef(() => !isEmptySlot(slots.default))\n\nconst localValue = computed({\n  get: () => parentData?.modelValue.value ?? modelValue.value,\n  set: (newValue) => {\n    if (newValue === undefined) return\n    if (parentData !== null) {\n      parentData.modelValue.value = newValue as RadioValue\n      return\n    }\n    modelValue.value = newValue as RadioValue\n  },\n})\n\nconst computedRequired = toRef(\n  () =>\n    !!(props.name ?? parentData?.name.value) &&\n    (requiredBoolean.value || parentData?.required.value)\n)\n\nconst isButtonGroup = toRef(() => buttonGroupBoolean.value || (parentData?.buttons.value ?? false))\n\nconst classesObject = computed(() => ({\n  plain: plainBoolean.value || (parentData?.plain.value ?? false),\n  button: buttonBoolean.value || (parentData?.buttons.value ?? false),\n  inline: inlineBoolean.value || (parentData?.inline.value ?? false),\n  state: stateBoolean.value || parentData?.state.value,\n  size: props.size ?? parentData?.size.value ?? 'md', // This is where the true default is made\n  buttonVariant: props.buttonVariant ?? parentData?.buttonVariant.value ?? 'secondary', // This is where the true default is made\n}))\nconst computedClasses = getClasses(classesObject)\nconst inputClasses = getInputClasses(classesObject)\nconst labelClasses = getLabelClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <div\n    v-bind=\"computedAttrs\"\n    :id=\"computedId\"\n    ref=\"element\"\n    role=\"radiogroup\"\n    :class=\"computedClasses\"\n    class=\"bv-no-focus-ring\"\n    tabindex=\"-1\"\n  >\n    <slot name=\"first\" />\n    <BFormRadio v-for=\"item in normalizeOptions\" :key=\"item.self\" v-bind=\"item.props\">\n      <!-- eslint-disable-next-line vue/no-v-html -->\n      <span v-if=\"item.html\" v-html=\"item.html\" />\n      <span v-else v-text=\"item.text\" />\n    </BFormRadio>\n    <slot />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {AriaInvalid, Booleanish, ButtonVariant, RadioValue, Size} from '../../types'\nimport {computed, nextTick, provide, ref, toRef, watch} from 'vue'\nimport {radioGroupKey} from '../../utils'\nimport BFormRadio from './BFormRadio.vue'\nimport {getGroupAttr, getGroupClasses, useBooleanish, useId} from '../../composables'\nimport {useFocus, useVModel} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaInvalid?: AriaInvalid\n    autofocus?: Booleanish\n    buttonVariant?: ButtonVariant | null\n    buttons?: Booleanish\n    disabled?: Booleanish\n    disabledField?: string\n    form?: string\n    htmlField?: string\n    id?: string\n    modelValue?: RadioValue\n    name?: string\n    options?: (string | number | Record<string, unknown>)[]\n    plain?: Booleanish\n    required?: Booleanish\n    size?: Size\n    stacked?: Booleanish\n    state?: Booleanish | null\n    textField?: string\n    validated?: Booleanish\n    valueField?: string\n  }>(),\n  {\n    ariaInvalid: undefined,\n    autofocus: false,\n    buttonVariant: 'secondary',\n    buttons: false,\n    disabled: false,\n    disabledField: 'disabled',\n    form: undefined,\n    htmlField: 'html',\n    id: undefined,\n    modelValue: null,\n    name: undefined,\n    options: () => [],\n    plain: false,\n    required: false,\n    size: 'md',\n    stacked: false,\n    state: null,\n    textField: 'text',\n    validated: false,\n    valueField: 'value',\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: RadioValue]\n  'input': [value: RadioValue]\n  'update:modelValue': [value: RadioValue]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst computedId = useId(() => props.id, 'radio')\nconst computedName = useId(() => props.name, 'checkbox')\n\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst buttonsBoolean = useBooleanish(() => props.buttons)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst plainBoolean = useBooleanish(() => props.plain)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stackedBoolean = useBooleanish(() => props.stacked)\nconst stateBoolean = useBooleanish(() => props.state)\nconst validatedBoolean = useBooleanish(() => props.validated)\n\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element, {\n  initialValue: autofocusBoolean.value,\n})\n\nprovide(radioGroupKey, {\n  modelValue,\n  buttonVariant: toRef(() => props.buttonVariant),\n  form: toRef(() => props.form),\n  name: computedName,\n  buttons: buttonsBoolean,\n  state: stateBoolean,\n  plain: plainBoolean,\n  size: toRef(() => props.size),\n  inline: toRef(() => !stackedBoolean.value),\n  required: requiredBoolean,\n  disabled: disabledBoolean,\n})\n\nwatch(modelValue, (newValue) => {\n  emit('input', newValue)\n  nextTick(() => {\n    emit('change', newValue)\n  })\n})\n\nconst normalizeOptions = computed(() =>\n  props.options.map((el, ind) =>\n    typeof el === 'string' || typeof el === 'number'\n      ? {\n          props: {\n            value: el,\n            disabled: disabledBoolean.value,\n          },\n          text: el.toString(),\n          html: undefined,\n          self: Symbol(`radioGroupOptionItem${ind}`),\n        }\n      : {\n          props: {\n            value: el[props.valueField] as string | undefined,\n            disabled: el[props.disabledField] as boolean | undefined,\n            ...(el.props ? el.props : {}),\n          },\n          text: el[props.textField] as string | undefined,\n          html: el[props.htmlField] as string | undefined,\n          self: Symbol(`radioGroupOptionItem${ind}`),\n        }\n  )\n)\n\nconst classesObject = computed(() => ({\n  required: requiredBoolean.value,\n  ariaInvalid: props.ariaInvalid,\n  state: stateBoolean.value,\n  validated: validatedBoolean.value,\n  buttons: buttonsBoolean.value,\n  stacked: stackedBoolean.value,\n  size: props.size,\n}))\nconst computedAttrs = getGroupAttr(classesObject)\nconst computedClasses = getGroupClasses(classesObject)\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <option :value=\"value\" :disabled=\"disabledBoolean\">\n    <slot />\n  </option>\n</template>\n\n<script setup lang=\"ts\">\nimport {useBooleanish} from '../../composables'\nimport type {Booleanish} from '../../types'\n\nconst props = withDefaults(\n  defineProps<{\n    disabled?: Booleanish\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    value?: any\n  }>(),\n  {\n    disabled: false,\n    value: undefined,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\n</script>\n","<template>\n  <optgroup :label=\"label\">\n    <slot name=\"first\" />\n    <!-- eslint-disable vue/no-v-text-v-html-on-component -->\n    <!-- eslint-disable vue/no-v-html -->\n    <!-- TODO these options don't seem right for the component -->\n    <BFormSelectOption\n      v-for=\"(option, index) in formOptions\"\n      :key=\"index\"\n      :value=\"(option as any).value\"\n      :disabled=\"(option as any).disabled\"\n      v-bind=\"$attrs\"\n      v-html=\"(option as any).html || (option as any).text\"\n    />\n    <!--eslint-enable-->\n    <slot />\n  </optgroup>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport {normalizeOptions} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    disabledField?: string\n    htmlField?: string\n    label?: string\n    options?: unknown[] | Record<string, unknown>\n    textField?: string\n    valueField?: string\n  }>(),\n  {\n    disabledField: 'disabled',\n    htmlField: 'html',\n    label: undefined,\n    options: () => [],\n    textField: 'text',\n    valueField: 'value',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\n// TODO this needs to be redone to fit the structure of BFormCheckboxGroup\nconst formOptions = computed(() =>\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  normalizeOptions(props.options as any[], 'BFormSelectOptionGroup', props)\n)\n</script>\n","<template>\n  <select\n    :id=\"computedId\"\n    ref=\"input\"\n    v-model=\"localValue\"\n    :class=\"computedClasses\"\n    :name=\"name\"\n    :form=\"form || undefined\"\n    :multiple=\"multipleBoolean || undefined\"\n    :size=\"computedSelectSize\"\n    :disabled=\"disabledBoolean\"\n    :required=\"requiredBoolean || undefined\"\n    :aria-required=\"requiredBoolean || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n  >\n    <slot name=\"first\" />\n    <template v-for=\"(option, index) in formOptions\" :key=\"index\">\n      <BFormSelectOptionGroup\n        v-if=\"Array.isArray((option as any).options)\"\n        :label=\"(option as any).label\"\n        :options=\"(option as any).options\"\n      />\n      <!-- eslint-disable vue/no-v-text-v-html-on-component -->\n      <!-- eslint-disable vue/no-v-html -->\n      <BFormSelectOption\n        v-else\n        :value=\"(option as any).value\"\n        :disabled=\"(option as any).disabled\"\n        v-html=\"(option as any).html || (option as any).text\"\n      />\n      <!--eslint-enable-->\n    </template>\n    <slot />\n  </select>\n</template>\n\n<script setup lang=\"ts\">\nimport type {AriaInvalid, Booleanish, Size} from '../../types'\nimport {computed, nextTick, ref, toRef} from 'vue'\nimport BFormSelectOption from './BFormSelectOption.vue'\nimport BFormSelectOptionGroup from './BFormSelectOptionGroup.vue'\nimport {\n  normalizeOptions,\n  useAriaInvalid,\n  useBooleanish,\n  useId,\n  useStateClass,\n} from '../../composables'\nimport {useFocus, useToNumber, useVModel} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    ariaInvalid?: AriaInvalid\n    autofocus?: Booleanish\n    disabled?: Booleanish\n    disabledField?: string\n    form?: string\n    htmlField?: string\n    id?: string\n    labelField?: string\n    modelValue?: string | unknown[] | Record<string, unknown> | number | null\n    multiple?: Booleanish\n    name?: string\n    options?: unknown[] | Record<string, unknown> // TODO It was declared deprecated in useFormSelect to use a Record. https://bootstrap-vue.org/docs/components/form-select#options-as-an-object\n    optionsField?: string\n    plain?: Booleanish\n    required?: Booleanish\n    selectSize?: number | string\n    size?: Size\n    state?: Booleanish | null\n    textField?: string\n    valueField?: string\n  }>(),\n  {\n    ariaInvalid: undefined,\n    autofocus: false,\n    disabled: false,\n    disabledField: 'disabled',\n    form: undefined,\n    htmlField: 'html',\n    id: undefined,\n    labelField: 'label',\n    modelValue: '',\n    multiple: false,\n    name: undefined,\n    options: () => [],\n    optionsField: 'options',\n    plain: false,\n    required: false,\n    selectSize: 0,\n    size: 'md',\n    state: null,\n    textField: 'text',\n    valueField: 'value',\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: unknown]\n  'input': [value: unknown]\n  'update:modelValue': [value: unknown]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  first?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst computedId = useId(() => props.id, 'input')\n\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst multipleBoolean = useBooleanish(() => props.multiple)\nconst plainBoolean = useBooleanish(() => props.plain)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stateBoolean = useBooleanish(() => props.state)\nconst selectSizeNumber = useToNumber(() => props.selectSize)\n\nconst stateClass = useStateClass(stateBoolean)\n\nconst input = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: autofocusBoolean.value,\n})\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    'form-control': plainBoolean.value,\n    [`form-control-${props.size}`]: props.size !== 'md' && plainBoolean.value,\n    'form-select': !plainBoolean.value,\n    [`form-select-${props.size}`]: props.size !== 'md' && !plainBoolean.value,\n  },\n])\n\nconst computedSelectSize = toRef(() =>\n  selectSizeNumber.value || plainBoolean.value ? selectSizeNumber.value : undefined\n)\n\nconst computedAriaInvalid = useAriaInvalid(() => props.ariaInvalid, stateBoolean)\n\n// TODO this needs to be redone to fit the structure of BFormCheckboxGroup\n// It also doesn't work for array syntaxes. Review second example from https://bootstrap-vue.org/docs/components/form-select\n// For more info on how it should behave\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst formOptions = computed(() => normalizeOptions(props.options as any[], 'BFormSelect', props))\nconst localValue = computed({\n  get: () => modelValue.value,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  set: (newValue: any) => {\n    emit('input', newValue)\n    modelValue.value = newValue\n    nextTick(() => {\n      emit('change', newValue)\n    })\n  },\n})\n\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","import {RX_STRIP_LOCALE_MODS} from '../constants/regex'\nimport {toString} from './stringUtils'\n\n// Languages that are RTL\nconst RTL_LANGS = [\n  'ar',\n  'az',\n  'ckb',\n  'fa',\n  'he',\n  'ks',\n  'lrc',\n  'mzn',\n  'ps',\n  'sd',\n  'te',\n  'ug',\n  'ur',\n  'yi',\n].map((locale) => locale.toLowerCase())\n\n// Returns true if the locale is RTL\n/**\n * @deprecated -- there's probably a better way to do this, but I also don't know what its for\n */\nexport const isLocaleRTL = (locale: string) => {\n  // Determines if the locale is RTL (only single locale supported)\n  const parts = toString(locale).toLowerCase().replace(RX_STRIP_LOCALE_MODS, '').split('-')\n  const locale1 = parts.slice(0, 2).join('-')\n  const [locale2] = parts\n  return RTL_LANGS.includes(locale1) || RTL_LANGS.includes(locale2)\n}\n","import {HAS_PASSIVE_EVENT_SUPPORT} from './env'\nimport {isObject} from './inspect'\n\n// Normalize event options based on support of passive option\n// Exported only for testing purposes\n/**\n * @deprecated\n */\nexport const parseEventOptions = (\n  options: boolean | EventListenerOptions | undefined\n): boolean | EventListenerOptions | undefined => {\n  if (HAS_PASSIVE_EVENT_SUPPORT) {\n    return isObject(options) ? options : {capture: !!options || false}\n  }\n  // Need to translate to actual Boolean value\n  return !!(isObject(options) ? options.capture : options)\n}\n\n// Attach an event listener to an element\n/**\n * @deprecated\n */\nexport const eventOn = (\n  el: Element,\n  eventName: string,\n  handler: EventListener,\n  options: boolean | EventListenerOptions | undefined\n) => {\n  if (el && el.addEventListener) {\n    el.addEventListener(eventName, handler, parseEventOptions(options))\n  }\n}\n\n// Remove an event listener from an element\n/**\n * @deprecated\n */\nexport const eventOff = (\n  el: Element,\n  eventName: string,\n  handler: EventListener,\n  options: boolean | EventListenerOptions | undefined\n) => {\n  if (el && el.removeEventListener) {\n    el.removeEventListener(eventName, handler, options)\n  }\n}\n\n// Utility method to add/remove a event listener based on first argument (boolean)\n// It passes all other arguments to the `eventOn()` or `eventOff` method\n/**\n * @deprecated\n */\nexport const eventOnOff = (on: boolean, eventParams: Parameters<typeof eventOff>) => {\n  const method = on ? eventOn : eventOff\n  method(...eventParams)\n}\n\n// Utility method to prevent the default event handling and propagation\n/**\n * @deprecated\n */\nexport const stopEvent = (\n  event: Event,\n  {preventDefault = true, propagation = true, immediatePropagation = false} = {}\n) => {\n  if (preventDefault) {\n    event.preventDefault()\n  }\n  if (propagation) {\n    event.stopPropagation()\n  }\n  if (immediatePropagation) {\n    event.stopImmediatePropagation()\n  }\n}\n","export const CODE_BACKSPACE = 'Backspace'\nexport const CODE_BREAK = 19\nexport const CODE_DELETE = 46\nexport const CODE_DOWN = 'ArrowDown'\nexport const CODE_END = 'End'\nexport const CODE_ENTER = 13\nexport const CODE_ESC = 27\nexport const CODE_HOME = 'Home'\nexport const CODE_LEFT = 37\nexport const CODE_PAGEDOWN = 'PageDown'\nexport const CODE_PAGEUP = 'PageUp'\nexport const CODE_RIGHT = 39\nexport const CODE_SPACE = 32\nexport const CODE_UP = 'ArrowUp'\n","<template>\n  <div\n    ref=\"element\"\n    class=\"b-form-spinbutton form-control\"\n    :class=\"computedClasses\"\n    role=\"group\"\n    :lang=\"computedLocale\"\n    :tabindex=\"disabledBoolean ? undefined : '-1'\"\n    :title=\"ariaLabel\"\n    @click=\"focused = true\"\n  >\n    <!-- eslint-disable-next-line prettier/prettier -->\n    <slot :name=\"(buttons.top.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n      <button\n        v-bind=\"buttons.top.button\"\n        @mousedown=\"buttons.top.handler\"\n        @touchstart=\"buttons.top.handler\"\n      >\n        <svg v-bind=\"buttons.top.svg\">\n          <path v-bind=\"buttons.top.path\" />\n        </svg>\n      </button>\n    </slot>\n    <input\n      v-if=\"name && !disabledBoolean\"\n      key=\"hidden\"\n      type=\"hidden\"\n      :name=\"name\"\n      :form=\"form\"\n      :value=\"valueAsFixed\"\n    />\n    <output\n      :id=\"computedId\"\n      key=\"output\"\n      class=\"flex-grow-1\"\n      :class=\"computedSpinClasses\"\n      :dir=\"computedRTL ? 'rtl' : 'ltr'\"\n      :tabindex=\"disabledBoolean ? undefined : '0'\"\n      role=\"spinbutton\"\n      aria-live=\"off\"\n      :aria-label=\"ariaLabel || undefined\"\n      :aria-invalid=\"\n        stateBoolean === false || (!modelValue !== null && requiredBoolean) ? true : undefined\n      \"\n      :aria-required=\"requiredBoolean ? true : undefined\"\n      :aria-valuemin=\"computedMin\"\n      :aria-valuemax=\"computedMax\"\n      :aria-valuenow=\"modelValue !== null ? modelValue : undefined\"\n      :aria-valuetext=\"modelValue !== null ? computedFormatter(modelValue) : undefined\"\n    >\n      <bdi>\n        {{ (modelValue !== null ? computedFormatter(modelValue) : placeholder) || '' }}\n      </bdi>\n    </output>\n    <!-- eslint-disable-next-line prettier/prettier -->\n    <slot :name=\"(buttons.bottom.slot.name as 'increment' | 'decrement')\" :has-focus=\"focused\">\n      <button\n        v-bind=\"buttons.bottom.button\"\n        @mousedown=\"buttons.bottom.handler\"\n        @touchstart=\"buttons.bottom.handler\"\n      >\n        <svg v-bind=\"buttons.bottom.svg\">\n          <path v-bind=\"buttons.bottom.path\" />\n        </svg>\n      </button>\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef} from 'vue'\nimport type {Booleanish, ButtonType, Size} from '../../types'\nimport {isLocaleRTL} from '../../utils/locale'\nimport {eventOnOff, stopEvent} from '../../utils/event'\nimport {\n  CODE_DOWN,\n  CODE_END,\n  CODE_HOME,\n  CODE_PAGEDOWN,\n  CODE_PAGEUP,\n  CODE_UP,\n} from '../../constants/codes'\nimport {onKeyStroke, useFocus, useToNumber, useVModel} from '@vueuse/core'\nimport {useBooleanish, useId} from '../../composables'\n\nconst KEY_CODES = [CODE_UP, CODE_DOWN, CODE_HOME, CODE_END, CODE_PAGEUP, CODE_PAGEDOWN]\n\nconst props = withDefaults(\n  defineProps<{\n    ariaControls?: string\n    ariaLabel?: string\n    disabled?: Booleanish\n    form?: string\n    formatterFn?: (value: number) => string\n    id?: string\n    inline?: Booleanish\n    labelDecrement?: string\n    labelIncrement?: string\n    locale?: string\n    max?: string | number\n    min?: string | number\n    modelValue?: number | null\n    name?: string\n    placeholder?: string\n    readonly?: Booleanish\n    repeatDelay?: string | number\n    repeatInterval?: string | number\n    repeatStepMultiplier?: string | number\n    repeatThreshold?: string | number\n    required?: Booleanish\n    size?: Size\n    state?: Booleanish | null\n    step?: string | number\n    vertical?: Booleanish\n    wrap?: Booleanish\n  }>(),\n  {\n    ariaControls: undefined,\n    ariaLabel: undefined,\n    disabled: false,\n    form: undefined,\n    formatterFn: undefined,\n    id: undefined,\n    inline: false,\n    labelDecrement: 'Decrement',\n    labelIncrement: 'Increment',\n    locale: 'locale',\n    max: defaultValues.max,\n    min: defaultValues.min,\n    modelValue: null,\n    name: undefined,\n    placeholder: undefined,\n    readonly: false,\n    repeatDelay: defaultValues.repeatDelay,\n    repeatInterval: defaultValues.repeatInterval,\n    repeatStepMultiplier: defaultValues.repeatMultiplier,\n    repeatThreshold: defaultValues.repeatThreshold,\n    required: false,\n    size: undefined,\n    state: null,\n    step: defaultValues.step,\n    vertical: false,\n    wrap: false,\n  }\n)\n\nconst emit = defineEmits<{\n  'change': [value: number | null]\n  'update:modelValue': [value: number | null]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  decrement?: (props: {hasFocus: boolean}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  increment?: (props: {hasFocus: boolean}) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\n// TODO focus system\nconst element = ref<HTMLElement | null>(null)\n\nconst {focused} = useFocus(element)\n\nconst computedId = useId(() => props.id, 'spinbutton')\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst inlineBoolean = useBooleanish(() => props.inline)\nconst readonlyBoolean = useBooleanish(() => props.readonly)\nconst verticalBoolean = useBooleanish(() => props.vertical)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst wrapBoolean = useBooleanish(() => props.wrap)\nconst stateBoolean = useBooleanish(() => props.state)\n\nconst computedClasses = computed(() => ({\n  'disabled': disabledBoolean.value,\n  'readonly': readonlyBoolean.value,\n  'focus': focused.value,\n  'd-inline-flex': inlineBoolean.value || verticalBoolean.value,\n  'd-flex': !inlineBoolean.value && !verticalBoolean.value,\n  'align-items-stretch': !verticalBoolean.value,\n  'flex-column': verticalBoolean.value,\n  [`form-control-${props.size}`]: props.size !== undefined,\n}))\n\nconst computedSpinClasses = computed(() => ({\n  'd-flex': verticalBoolean.value,\n  'align-self-center': !verticalBoolean.value,\n  'align-items-center': verticalBoolean.value,\n  'border-top': verticalBoolean.value,\n  'border-bottom': verticalBoolean.value,\n  'border-start': !verticalBoolean.value,\n  'border-end': !verticalBoolean.value,\n}))\n\n//non reactive properties\nlet $_autoDelayTimer: ReturnType<typeof setTimeout> | undefined\nlet $_autoRepeatTimer: ReturnType<typeof setTimeout> | undefined\nlet $_keyIsDown = false\n\n// const computedInline = computed(() => props.inline && !props.vertical)\n\n// const computedReadonly = computed(() => props.readonly && !props.disabled)\n\nconst stepNumber = useToNumber(() => props.step)\nconst computedStep = toRef(() =>\n  Number.isNaN(stepNumber.value) ? defaultValues.step : stepNumber.value\n)\n\nconst minNumber = useToNumber(() => props.min)\nconst computedMin = toRef(() =>\n  Number.isNaN(minNumber.value) ? defaultValues.min : minNumber.value\n)\n\nconst maxNumber = useToNumber(() => props.max)\nconst computedMax = toRef(() => {\n  const step = computedStep.value\n  const min = computedMin.value\n  return Math.floor((maxNumber.value - min) / step) * step + min\n})\n\nconst repeatDelayNumber = useToNumber(() => props.repeatDelay, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedDelay = toRef(() =>\n  repeatDelayNumber.value > 0 ? repeatDelayNumber.value : defaultValues.repeatDelay\n)\n\nconst repeatIntervalNumber = useToNumber(() => props.repeatInterval, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedInterval = toRef(() =>\n  repeatIntervalNumber.value > 0 ? repeatIntervalNumber.value : defaultValues.repeatInterval\n)\n\nconst repeatThresholdNumber = useToNumber(() => props.repeatThreshold, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedThreshold = toRef(() =>\n  Math.max(\n    Number.isNaN(repeatThresholdNumber.value)\n      ? defaultValues.repeatThreshold\n      : repeatThresholdNumber.value,\n    1\n  )\n)\n\nconst repeatStepMultiplierNumber = useToNumber(() => props.repeatStepMultiplier, {\n  nanToZero: true,\n  method: 'parseInt',\n})\nconst computedStepMultiplier = toRef(() =>\n  Math.max(\n    Number.isNaN(repeatStepMultiplierNumber.value)\n      ? defaultValues.repeatMultiplier\n      : repeatStepMultiplierNumber.value,\n    1\n  )\n)\n\nconst computedPrecision = toRef(() => {\n  const step = computedStep.value\n  return Math.floor(step) === step ? 0 : (step.toString().split('.')[1] || '').length\n})\n\nconst computedMultiplier = toRef(() => Math.pow(10, computedPrecision.value || 0))\n\nconst valueAsFixed = toRef(() =>\n  modelValue.value === null ? '' : modelValue.value.toFixed(computedPrecision.value)\n)\n\nconst computedLocale = computed(() => {\n  // TODO\n  const locales = [props.locale]\n  const nf = new Intl.NumberFormat(locales)\n  return nf.resolvedOptions().locale\n})\n\nconst computedRTL = computed(() =>\n  // TODO\n  isLocaleRTL(computedLocale.value)\n)\n\nconst defaultFormatter = () =>\n  new Intl.NumberFormat(computedLocale.value, {\n    style: 'decimal',\n    useGrouping: false,\n    minimumIntegerDigits: 1,\n    minimumFractionDigits: computedPrecision.value,\n    maximumFractionDigits: computedPrecision.value,\n    notation: 'standard',\n  }).format\n\nconst computedFormatter = toRef(() => props.formatterFn ?? defaultFormatter())\n\nconst stepValue = (direction: number) => {\n  // Sets a new incremented or decremented value, supporting optional wrapping\n  // Direction is either +1 or -1 (or a multiple thereof)\n  let {value} = modelValue\n  if (!disabledBoolean.value && value !== null) {\n    const step = computedStep.value * direction\n    const min = computedMin.value\n    const max = computedMax.value\n    const multiplier = computedMultiplier.value\n    const {wrap} = props\n    // We ensure that the value steps like a native input\n    value = Math.round((value - min) / step) * step + min + step\n    // We ensure that precision is maintained (decimals)\n    value = Math.round(value * multiplier) / multiplier\n    // Handle if wrapping is enabled\n    modelValue.value = value > max ? (wrap ? min : max) : value < min ? (wrap ? max : min) : value\n  }\n}\n\nconst stepUp = (multiplier = 1) => {\n  if (modelValue.value === null) {\n    modelValue.value = computedMin.value\n    return\n  }\n  stepValue(+1 * multiplier)\n}\n\nconst stepDown = (multiplier = 1) => {\n  if (modelValue.value === null) {\n    modelValue.value = wrapBoolean.value ? computedMax.value : computedMin.value\n    return\n  }\n  stepValue(-1 * multiplier)\n}\n\nonKeyStroke(\n  KEY_CODES,\n  (event) => {\n    const {code, altKey, ctrlKey, metaKey} = event\n\n    if (disabledBoolean.value || readonlyBoolean.value || altKey || ctrlKey || metaKey) return\n\n    // https://w3c.github.io/aria-practices/#spinbutton\n    stopEvent(event, {propagation: false})\n    if ($_keyIsDown) {\n      // Keypress is already in progress\n      return\n    }\n\n    resetTimers()\n    if ([CODE_UP, CODE_DOWN].includes(code)) {\n      // The following use the custom auto-repeat handling\n\n      $_keyIsDown = true\n      if (code === CODE_UP) {\n        handleStepRepeat(event, stepUp)\n        return\n      }\n      if (code === CODE_DOWN) {\n        handleStepRepeat(event, stepDown)\n      }\n      return\n    }\n    // These use native OS key repeating\n    if (code === CODE_PAGEUP) {\n      stepUp(computedStepMultiplier.value)\n      return\n    }\n    if (code === CODE_PAGEDOWN) {\n      stepDown(computedStepMultiplier.value)\n      return\n    }\n    if (code === CODE_HOME) {\n      modelValue.value = computedMin.value\n      return\n    }\n    if (code === CODE_END) {\n      modelValue.value = computedMax.value\n    }\n  },\n  {target: element, eventName: 'keydown'}\n)\n\nonKeyStroke(\n  KEY_CODES,\n  (event: KeyboardEvent) => {\n    // Emit a change event when the keyup happens\n\n    const {altKey, ctrlKey, metaKey} = event\n\n    if (disabledBoolean.value || readonlyBoolean.value || altKey || ctrlKey || metaKey) return\n\n    stopEvent(event, {propagation: false})\n    resetTimers()\n    $_keyIsDown = false\n    emit('change', modelValue.value)\n  },\n  {target: element, eventName: 'keyup'}\n)\n\n// takes in a mount or Keyboard Event\nconst handleStepRepeat = (event: Event, stepper: (step: number) => void) => {\n  const {type} = event || {}\n\n  if (!disabledBoolean.value && !readonlyBoolean.value) {\n    if (isMouseEvent(event)) {\n      // We only respond to left (main === 0) button clicks\n      if (type === 'mousedown' && event.button) return\n    }\n    resetTimers()\n    // Step the counter initially\n    stepper(1)\n    const threshold = computedThreshold.value\n    const multiplier = computedStepMultiplier.value\n    const delay = computedDelay.value\n    const interval = computedInterval.value\n\n    // Initiate the delay/repeat interval\n    $_autoDelayTimer = setTimeout(() => {\n      let count = 0\n      $_autoRepeatTimer = setInterval(() => {\n        // After N initial repeats, we increase the incrementing step amount\n        // We do this to minimize screen reader announcements of the value\n        // (values are announced every change, which can be chatty for SR users)\n        // And to make it easer to select a value when the range is large\n        stepper(count < threshold ? 1 : multiplier)\n        count++\n      }, interval)\n    }, delay)\n  }\n}\n\nconst isMouseEvent = (evt: Event): evt is MouseEvent =>\n  evt.type === 'mouseup' || evt.type === 'mousedown'\n\nconst onMouseup: EventListener = (event: Event) => {\n  // `<body>` listener, only enabled when mousedown starts\n\n  if (isMouseEvent(event)) {\n    if (event.type === 'mouseup' && event.button) {\n      // Ignore non left button (main === 0) mouse button click\n      return\n    }\n  }\n\n  stopEvent(event, {propagation: false})\n  resetTimers()\n  setMouseup(false)\n  // Trigger the change event\n  emit('change', modelValue.value)\n}\n\nconst setMouseup = (on: boolean) => {\n  // Enable or disabled the body mouseup/touchend handlers\n  // Use try/catch to handle case when called server side\n  try {\n    eventOnOff(on, [document.body, 'mouseup', onMouseup, false])\n    eventOnOff(on, [document.body, 'touchend', onMouseup, false])\n  } catch {\n    /* empty */\n  }\n}\nconst resetTimers = () => {\n  clearTimeout($_autoDelayTimer)\n  clearInterval($_autoRepeatTimer)\n  $_autoDelayTimer = undefined\n  $_autoRepeatTimer = undefined\n}\n\nconst buttons = computed(() => {\n  const incrementSvgAttrs = {\n    svg: {\n      xmlns: 'http://www.w3.org/2000/svg',\n      width: '16',\n      height: '16',\n      fill: 'currentColor',\n      class: 'bi bi-plus',\n      viewBox: '0 0 16 16',\n    },\n    path: {\n      d: 'M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z',\n    },\n  } as const\n\n  const decrementSvgAttrs = {\n    svg: {\n      xmlns: 'http://www.w3.org/2000/svg',\n      width: '16',\n      height: '16',\n      fill: 'currentColor',\n      class: 'bi bi-dash',\n      viewBox: '0 0 16 16',\n    },\n    path: {d: 'M4 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 4 8z'},\n  } as const\n\n  const sharedButtonAttrs = {\n    'class': [{'py-0': !verticalBoolean.value}, 'btn', 'btn-sm', 'border-0', 'rounded-0'],\n    'tabindex': '-1',\n    'type': 'button' as ButtonType,\n    'disabled': disabledBoolean.value || readonlyBoolean.value,\n    'aria-disabled': disabledBoolean.value || readonlyBoolean.value ? true : undefined,\n    'aria-controls': computedId.value,\n  }\n\n  const sharedSvgAttrs = {\n    'aria-hidden': true,\n    'scale': focused.value ? 1.5 : 1.25,\n  }\n\n  const handler = (event: Event, stepper: (multiplier?: number) => void) => {\n    if (!disabledBoolean.value && !readonlyBoolean.value) {\n      stopEvent(event, {propagation: false})\n      setMouseup(true)\n      // Since we `preventDefault()`, we must manually focus the button\n      // Though it's likely captured from the element click focus\n      focused.value = true\n      handleStepRepeat(event, stepper)\n    }\n  }\n\n  const incrementAttrs = {\n    button: {\n      ...sharedButtonAttrs,\n      'aria-label': props.labelIncrement || undefined,\n      'aria-keyshortcuts': 'ArrowUp',\n    },\n    svg: {\n      ...sharedSvgAttrs,\n      ...incrementSvgAttrs.svg,\n    },\n    path: {\n      ...incrementSvgAttrs.path,\n    },\n    slot: {\n      name: 'increment',\n    },\n    handler: (e: Event) => handler(e, stepUp),\n  }\n\n  const decrementAttrs = {\n    button: {\n      ...sharedButtonAttrs,\n      'aria-label': props.labelDecrement || undefined,\n      'aria-keyshortcuts': 'ArrowDown',\n    },\n    svg: {\n      ...sharedSvgAttrs,\n      ...decrementSvgAttrs.svg,\n    },\n    path: {\n      ...decrementSvgAttrs.path,\n    },\n    slot: {\n      name: 'decrement',\n    },\n    handler: (e: Event) => handler(e, stepDown),\n  }\n\n  return {\n    top: {\n      ...(verticalBoolean.value ? incrementAttrs : decrementAttrs),\n    },\n    bottom: {\n      ...(!verticalBoolean.value ? incrementAttrs : decrementAttrs),\n    },\n  }\n})\n</script>\n\n<script lang=\"ts\">\nconst defaultValues = {\n  min: 1,\n  max: 100,\n  step: 1,\n  repeatDelay: 500,\n  repeatInterval: 100,\n  repeatThreshold: 10,\n  repeatMultiplier: 4,\n} as const\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    :title=\"tagText\"\n    class=\"badge b-form-tag d-inline-flex align-items-center mw-100\"\n    :class=\"computedClasses\"\n    :aria-labelledby=\"taglabelId\"\n  >\n    <span :id=\"taglabelId\" class=\"b-form-tag-content flex-grow-1 text-truncate\">\n      <slot>{{ tagText }}</slot>\n    </span>\n    <BCloseButton\n      v-if=\"!disabledBoolean && !noRemoveBoolean\"\n      aria-keyshortcuts=\"Delete\"\n      :aria-label=\"removeLabel\"\n      class=\"b-form-tag-remove\"\n      :aria-describedby=\"taglabelId\"\n      :aria-controls=\"id\"\n      @click=\"emit('remove', tagText)\"\n    />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport {useBooleanish, useId} from '../../composables'\nimport type {Booleanish, ColorVariant} from '../../types'\nimport BCloseButton from '../BButton/BCloseButton.vue'\n\nconst props = withDefaults(\n  defineProps<{\n    disabled?: Booleanish\n    id?: string\n    noRemove?: Booleanish\n    pill?: Booleanish\n    removeLabel?: string\n    tag?: string\n    title?: string\n    variant?: ColorVariant | null\n  }>(),\n  {\n    disabled: false,\n    id: undefined,\n    noRemove: false,\n    pill: false,\n    removeLabel: 'Remove tag',\n    tag: 'span',\n    title: undefined,\n    variant: 'secondary',\n  }\n)\n\nconst emit = defineEmits<{\n  remove: [value: string]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedId = useId(() => props.id)\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst noRemoveBoolean = useBooleanish(() => props.noRemove)\nconst pillBoolean = useBooleanish(() => props.pill)\n\nconst tagText = computed(\n  () => ((slots.default?.({})[0].children ?? '').toString() || props.title) ?? ''\n)\nconst taglabelId = toRef(() => `${computedId.value}taglabel__`)\n\nconst computedClasses = computed(() => ({\n  [`text-bg-${props.variant}`]: props.variant !== null,\n  'rounded-pill': pillBoolean.value,\n  'disabled': disabledBoolean.value,\n}))\n</script>\n","<template>\n  <div\n    :id=\"computedId\"\n    class=\"b-form-tags form-control h-auto\"\n    :class=\"computedClasses\"\n    role=\"group\"\n    tabindex=\"-1\"\n    @focusin=\"onFocusin\"\n    @focusout=\"emit('focusout', $event)\"\n  >\n    <output\n      :id=\"`${computedId}selected_tags__`\"\n      class=\"visually-hidden\"\n      :for=\"_inputId\"\n      :aria-live=\"focused ? 'polite' : 'off'\"\n      aria-atomic=\"true\"\n      aria-relevant=\"additions text\"\n      >{{ tags.join(', ') }}</output\n    >\n    <div\n      :id=\"`${computedId}removed_tags__`\"\n      role=\"status\"\n      :aria-live=\"focused ? 'assertive' : 'off'\"\n      aria-atomic=\"true\"\n      class=\"visually-hidden\"\n    >\n      ({{ tagRemovedLabel }}) {{ lastRemovedTag }}\n    </div>\n\n    <slot v-bind=\"slotAttrs\">\n      <ul\n        :id=\"`${computedId}tag_list__`\"\n        class=\"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center\"\n      >\n        <template v-for=\"(tag, index) in tags\" :key=\"index\">\n          <slot\n            name=\"tag\"\n            :tag=\"tag\"\n            :tag-class=\"tagClass\"\n            :tag-variant=\"tagVariant\"\n            :tag-pills=\"tagPillsBoolean\"\n            :remove-tag=\"removeTag\"\n          >\n            <BFormTag\n              :key=\"tag\"\n              :class=\"tagClass\"\n              tag=\"li\"\n              :variant=\"tagVariant\"\n              :pill=\"tagPills\"\n              @remove=\"removeTag\"\n              >{{ tag }}</BFormTag\n            >\n          </slot>\n        </template>\n        <li\n          role=\"none\"\n          aria-live=\"off\"\n          class=\"b-from-tags-field flex-grow-1\"\n          :aria-controls=\"`${computedId}tag_list__`\"\n        >\n          <div role=\"group\" class=\"d-flex\">\n            <input\n              :id=\"_inputId\"\n              ref=\"input\"\n              :disabled=\"disabledBoolean\"\n              :value=\"inputValue\"\n              :type=\"inputType\"\n              :placeholder=\"placeholder\"\n              class=\"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0\"\n              style=\"outline: currentcolor none 0px; min-width: 5rem\"\n              v-bind=\"inputAttrs\"\n              :form=\"form\"\n              :required=\"requiredBoolean || undefined\"\n              :aria-required=\"requiredBoolean || undefined\"\n              @input=\"onInput\"\n              @change=\"onChange\"\n              @focus=\"onFocus\"\n              @blur=\"onBlur\"\n            />\n            <button\n              v-if=\"disableAddButton\"\n              type=\"button\"\n              class=\"btn b-form-tags-button py-0\"\n              :class=\"[\n                inputClass,\n                {\n                  [`btn-${addButtonVariant}`]: addButtonVariant !== null,\n                  'disabled invisible': inputValue.length === 0,\n                },\n              ]\"\n              style=\"font-size: 90%\"\n              :disabled=\"disabledBoolean || inputValue.length === 0 || isLimitReached\"\n              @click=\"addTag(inputValue)\"\n            >\n              <slot name=\"add-button-text\">{{ addButtonText }}</slot>\n            </button>\n          </div>\n        </li>\n      </ul>\n      <div aria-live=\"polite\" aria-atomic=\"true\">\n        <div v-if=\"isInvalid\" class=\"d-block invalid-feedback\">\n          {{ invalidTagText }}: {{ inputValue }}\n        </div>\n        <small v-if=\"isDuplicate\" class=\"form-text text-body-secondary\"\n          >{{ duplicateTagText }}: {{ inputValue }}</small\n        >\n        <small v-if=\"tags.length === limit\" class=\"form-text text-body-secondary\"\n          >Tag limit reached</small\n        >\n      </div>\n    </slot>\n    <template v-if=\"name\">\n      <input v-for=\"(tag, index) in tags\" :key=\"index\" type=\"hidden\" :name=\"name\" :value=\"tag\" />\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref, toRef, watch} from 'vue'\nimport BFormTag from './BFormTag.vue'\nimport {useBooleanish, useId, useStateClass} from '../../composables'\nimport type {\n  Booleanish,\n  ButtonVariant,\n  ClassValue,\n  ColorVariant,\n  InputType,\n  Size,\n} from '../../types'\nimport {onKeyStroke, useFocus, useToNumber, useVModel} from '@vueuse/core'\nimport {escapeRegExpChars} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<{\n    addButtonText?: string\n    addButtonVariant?: ButtonVariant | null\n    addOnChange?: Booleanish\n    autofocus?: Booleanish\n    disabled?: Booleanish\n    duplicateTagText?: string\n    form?: string\n    inputAttrs?: Record<string, unknown>\n    inputClass?: ClassValue\n    inputId?: string\n    inputType?: InputType\n    invalidTagText?: string\n    limit?: number | string\n    limitTagsText?: string\n    modelValue?: string[]\n    name?: string\n    noAddOnEnter?: Booleanish\n    noOuterFocus?: Booleanish\n    noTagRemove?: Booleanish\n    placeholder?: string\n    removeOnDelete?: Booleanish\n    required?: Booleanish\n    separator?: string | string[]\n    size?: Size\n    state?: Booleanish | null\n    tagClass?: ClassValue\n    tagPills?: Booleanish\n    tagRemoveLabel?: string\n    tagRemovedLabel?: string\n    tagValidator?: (t: string) => boolean\n    tagVariant?: ColorVariant | null\n  }>(),\n  {\n    addButtonText: 'Add',\n    addButtonVariant: 'outline-secondary',\n    addOnChange: false,\n    autofocus: false,\n    disabled: false,\n    duplicateTagText: 'Duplicate tag(s)',\n    form: undefined,\n    inputAttrs: undefined,\n    inputClass: undefined,\n    inputId: undefined,\n    inputType: 'text',\n    invalidTagText: 'Invalid tag(s)',\n    limit: undefined,\n    limitTagsText: 'Tag limit reached',\n    modelValue: () => [],\n    name: undefined,\n    noAddOnEnter: false,\n    noOuterFocus: false,\n    noTagRemove: false,\n    placeholder: 'Add tag...',\n    removeOnDelete: false,\n    required: false,\n    separator: undefined,\n    size: 'md',\n    state: null,\n    tagClass: undefined,\n    tagPills: false,\n    tagRemoveLabel: undefined,\n    tagRemovedLabel: 'Tag removed',\n    tagValidator: () => true,\n    tagVariant: 'secondary',\n  }\n)\n\nconst emit = defineEmits<{\n  'blur': [value: FocusEvent]\n  'focus': [value: FocusEvent]\n  'focusin': [value: FocusEvent]\n  'focusout': [value: FocusEvent]\n  'input': [value: string[]]\n  'tag-state': [...args: string[][]]\n  'update:modelValue': [value: string[]]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'add-button-text'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: typeof slotAttrs.value) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tag'?: (props: {\n    tag: string\n    tagClass: ClassValue\n    tagVariant: ColorVariant | null\n    tagPills: boolean\n    removeTag: (tag?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst computedId = useId()\n\nconst addOnChangeBoolean = useBooleanish(() => props.addOnChange)\nconst autofocusBoolean = useBooleanish(() => props.autofocus)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst noAddOnEnterBoolean = useBooleanish(() => props.noAddOnEnter)\nconst noOuterFocusBoolean = useBooleanish(() => props.noOuterFocus)\nconst noTagRemoveBoolean = useBooleanish(() => props.noTagRemove)\nconst removeOnDeleteBoolean = useBooleanish(() => props.removeOnDelete)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst stateBoolean = useBooleanish(() => props.state)\nconst tagPillsBoolean = useBooleanish(() => props.tagPills)\nconst limitNumber = useToNumber(() => props.limit ?? NaN)\n\nconst stateClass = useStateClass(stateBoolean)\n\nconst input = ref<HTMLInputElement | null>(null)\n\nconst {focused} = useFocus(input, {\n  initialValue: autofocusBoolean.value,\n})\n\nconst _inputId = toRef(() => props.inputId || `${computedId.value}input__`)\nconst tags = ref<string[]>(modelValue.value)\nconst inputValue = ref<string>('')\nconst shouldRemoveOnDelete = ref<boolean>(modelValue.value.length > 0)\nconst lastRemovedTag = ref<string>('')\nconst validTags = ref<string[]>([])\nconst invalidTags = ref<string[]>([])\nconst duplicateTags = ref<string[]>([])\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    [`form-control-${props.size}`]: props.size !== 'md',\n    disabled: disabledBoolean.value,\n    focus: focused.value,\n  },\n])\n\nconst isDuplicate = computed(() => tags.value.includes(inputValue.value))\nconst isInvalid = computed(() =>\n  inputValue.value === '' ? false : !props.tagValidator(inputValue.value)\n)\nconst isLimitReached = toRef(() => tags.value.length === limitNumber.value)\nconst disableAddButton = toRef(() => !isInvalid.value && !isDuplicate.value)\n\nconst slotAttrs = computed(() => ({\n  addButtonText: props.addButtonText,\n  addButtonVariant: props.addButtonVariant,\n  addTag,\n  disableAddButton: disableAddButton.value,\n  disabled: disabledBoolean.value,\n  duplicateTagText: props.duplicateTagText,\n  duplicateTags: duplicateTags.value,\n  form: props.form,\n  inputAttrs: {\n    ...props.inputAttrs,\n    disabled: disabledBoolean.value,\n    form: props.form,\n    id: _inputId,\n    value: inputValue,\n  },\n  inputHandlers: {\n    input: onInput,\n    keydown: onKeydown,\n    change: onChange,\n  },\n  inputId: _inputId,\n  inputType: props.inputType,\n  invalidTagText: props.invalidTagText,\n  invalidTags: invalidTags.value,\n  isDuplicate: isDuplicate.value,\n  isInvalid: isInvalid.value,\n  isLimitReached: isLimitReached.value,\n  limitTagsText: props.limitTagsText,\n  limit: limitNumber.value,\n  noTagRemove: noTagRemoveBoolean.value,\n  placeholder: props.placeholder,\n  removeTag,\n  required: requiredBoolean.value,\n  separator: props.separator,\n  size: props.size,\n  state: stateBoolean.value,\n  tagClass: props.tagClass,\n  tagPills: tagPillsBoolean.value,\n  tagRemoveLabel: props.tagRemoveLabel,\n  tagVariant: props.tagVariant,\n  tags: tags.value,\n}))\n\nwatch(modelValue, (newVal) => {\n  tags.value = newVal\n})\n\nconst onFocusin = (e: FocusEvent): void => {\n  if (disabledBoolean.value) {\n    const target = e.target as HTMLDivElement\n    target.blur()\n    return\n  }\n\n  emit('focusin', e)\n}\n\nconst onFocus = (e: FocusEvent): void => {\n  if (disabledBoolean.value || noOuterFocusBoolean.value) {\n    return\n  }\n\n  focused.value = true\n  emit('focus', e)\n}\n\nconst onBlur = (e: FocusEvent): void => {\n  focused.value = false\n  emit('blur', e)\n}\n\nconst onInput = (e: Event | string): void => {\n  const value = typeof e === 'string' ? e : (e.target as HTMLInputElement).value\n\n  shouldRemoveOnDelete.value = false\n\n  if (props.separator?.includes(value.charAt(0)) && value.length > 0) {\n    if (input.value) {\n      input.value.value = ''\n    }\n    return\n  }\n\n  inputValue.value = value\n\n  if (props.separator?.includes(value.charAt(value.length - 1))) {\n    addTag(value.slice(0, value.length - 1))\n    return\n  }\n\n  validTags.value = props.tagValidator(value) && !isDuplicate.value ? [value] : []\n  invalidTags.value = props.tagValidator(value) ? [] : [value]\n  duplicateTags.value = isDuplicate.value ? [value] : []\n\n  emit('tag-state', validTags.value, invalidTags.value, duplicateTags.value)\n}\n\nconst onChange = (e: Event): void => {\n  if (addOnChangeBoolean.value) {\n    onInput(e)\n\n    if (!isDuplicate.value) {\n      addTag(inputValue.value)\n    }\n  }\n}\n\nconst onKeydown = (e: KeyboardEvent): void => {\n  if (e.key === 'Enter' && !noAddOnEnterBoolean.value) {\n    addTag(inputValue.value)\n    return\n  }\n\n  if (\n    (e.key === 'Backspace' || e.key === 'Delete') &&\n    removeOnDeleteBoolean.value &&\n    inputValue.value === '' &&\n    shouldRemoveOnDelete.value &&\n    tags.value.length > 0\n  ) {\n    removeTag(tags.value[tags.value.length - 1])\n  } else {\n    shouldRemoveOnDelete.value = true\n  }\n}\n\nonKeyStroke(onKeydown, {target: input})\n\nconst separator = computed(() => {\n  if (!props.separator) {\n    return\n  }\n\n  return typeof props.separator === 'string' ? props.separator : props.separator.join('')\n})\n\nconst separatorRegExp = computed(() => {\n  if (!separator.value) {\n    return\n  }\n\n  return new RegExp(`[${escapeRegExpChars(separator.value)}]+`)\n})\n\nconst addTag = (tag?: string): void => {\n  tag = (tag ?? inputValue.value).trim()\n\n  const newTags = separatorRegExp.value\n    ? tag.split(separatorRegExp.value).map((t) => t.trim())\n    : [tag]\n  const validTags: string[] = []\n\n  for (const newTag of newTags) {\n    if (newTag === '' || isDuplicate.value || !props.tagValidator(newTag)) {\n      continue\n    }\n\n    if (limitNumber.value && isLimitReached.value) {\n      break\n    }\n\n    validTags.push(newTag)\n  }\n\n  const newValue = [...modelValue.value, ...validTags]\n  inputValue.value = ''\n  shouldRemoveOnDelete.value = true\n  modelValue.value = newValue\n  emit('input', newValue)\n  focused.value = true\n}\n\nconst removeTag = (tag?: string): void => {\n  const tagIndex = tags.value.indexOf(tag?.toString() ?? '')\n  lastRemovedTag.value = tags.value.splice(tagIndex, 1).toString()\n  modelValue.value = tags.value\n}\n\n// TODO these focus/blur events aren't quite in line with use useFormInput implementation. Perhaps we should bring them together?\ndefineExpose({\n  blur: () => {\n    focused.value = false\n  },\n  element: input,\n  focus: () => {\n    focused.value = true\n  },\n})\n</script>\n","<template>\n  <textarea\n    :id=\"computedId\"\n    ref=\"input\"\n    :class=\"computedClasses\"\n    :name=\"name || undefined\"\n    :form=\"form || undefined\"\n    :value=\"modelValue\"\n    :disabled=\"disabledBoolean\"\n    :placeholder=\"placeholder\"\n    :required=\"requiredBoolean || undefined\"\n    :autocomplete=\"autocomplete || undefined\"\n    :readonly=\"readonlyBoolean || plaintextBoolean\"\n    :aria-required=\"required || undefined\"\n    :aria-invalid=\"computedAriaInvalid\"\n    :rows=\"rows\"\n    :style=\"computedStyles\"\n    :wrap=\"wrap || undefined\"\n    @input=\"onInput($event)\"\n    @change=\"onChange($event)\"\n    @blur=\"onBlur($event)\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish} from '../../types'\nimport {computed, type CSSProperties} from 'vue'\nimport {useBooleanish, useFormInput, useStateClass} from '../../composables'\nimport type {CommonInputProps} from '../../composables/useFormInput'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      noResize?: Booleanish\n      rows?: string | number\n      wrap?: string\n    } & CommonInputProps\n  >(),\n  {\n    // CommonInputProps\n    ariaInvalid: undefined,\n    autocomplete: undefined,\n    autofocus: false,\n    debounce: 0,\n    debounceMaxWait: NaN,\n    disabled: false,\n    form: undefined,\n    formatter: undefined,\n    id: undefined,\n    lazy: false,\n    lazyFormatter: false,\n    list: undefined,\n    modelValue: '',\n    name: undefined,\n    number: false,\n    placeholder: undefined,\n    plaintext: false,\n    readonly: false,\n    required: false,\n    size: undefined,\n    state: null,\n    trim: false,\n    // End CommonInputProps\n    noResize: false,\n    rows: 2,\n    wrap: 'soft',\n  }\n)\n\nconst emit = defineEmits<{\n  'blur': [val: FocusEvent]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'change': [val: any]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'input': [val: any]\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'update:modelValue': [val: any]\n}>()\n\nconst {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =\n  useFormInput(props, emit)\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst requiredBoolean = useBooleanish(() => props.required)\nconst readonlyBoolean = useBooleanish(() => props.readonly)\nconst plaintextBoolean = useBooleanish(() => props.plaintext)\nconst noResizeBoolean = useBooleanish(() => props.noResize)\nconst stateBoolean = useBooleanish(() => props.state)\n\nconst stateClass = useStateClass(stateBoolean)\n\nconst computedClasses = computed(() => [\n  stateClass.value,\n  {\n    'form-control': !props.plaintext,\n    'form-control-plaintext': props.plaintext,\n    [`form-control-${props.size}`]: !!props.size,\n  },\n])\n\nconst computedStyles = computed<CSSProperties>(() => ({\n  resize: noResizeBoolean.value ? 'none' : undefined,\n}))\n\ndefineExpose({\n  blur,\n  element: input,\n  focus,\n})\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" class=\"input-group\" :class=\"computedClasses\" role=\"group\">\n    <slot name=\"prepend\">\n      <span v-if=\"hasPrepend\" class=\"input-group-text\">\n        <!-- eslint-disable-next-line vue/no-v-html -->\n        <span v-if=\"!!prependHtml\" v-html=\"prependHtml\" />\n        <span v-else>{{ prepend }}</span>\n      </span>\n    </slot>\n    <slot />\n    <slot name=\"append\">\n      <span v-if=\"hasAppend\" class=\"input-group-text\">\n        <!-- eslint-disable-next-line vue/no-v-html -->\n        <span v-if=\"!!appendHtml\" v-html=\"appendHtml\" />\n        <span v-else>{{ append }}</span>\n      </span>\n    </slot>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Size} from '../../types'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    append?: string\n    appendHtml?: string\n    id?: string\n    prepend?: string\n    prependHtml?: string\n    size?: Size\n    tag?: string\n  }>(),\n  {\n    append: undefined,\n    appendHtml: undefined,\n    id: undefined,\n    prepend: undefined,\n    prependHtml: undefined,\n    size: 'md',\n    tag: 'div',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  append?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  prepend?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`input-group-${props.size}`]: props.size !== 'md',\n}))\nconst hasAppend = toRef(() => !!props.append || !!props.appendHtml)\nconst hasPrepend = toRef(() => !!props.prepend || !!props.prependHtml)\n</script>\n","<template>\n  <BInputGroupText v-if=\"isTextBoolean\">\n    <slot />\n  </BInputGroupText>\n  <slot v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport {useBooleanish} from '../../composables'\nimport type {BInputGroupAddonProps} from '../../types'\nimport BInputGroupText from './BInputGroupText.vue'\n\nconst props = withDefaults(defineProps<BInputGroupAddonProps>(), {\n  isText: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst isTextBoolean = useBooleanish(() => props.isText)\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"list-group\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport {listGroupInjectionKey} from '../../utils'\nimport type {Booleanish, Breakpoint} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    flush?: Booleanish\n    horizontal?: Booleanish | Breakpoint\n    numbered?: Booleanish\n    tag?: string\n  }>(),\n  {\n    flush: false,\n    horizontal: false,\n    numbered: false,\n    tag: 'div',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst flushBoolean = useBooleanish(() => props.flush)\nconst numberedBoolean = useBooleanish(() => props.numbered)\nconst computedHorizontal = useBooleanish(() => props.horizontal)\n\nconst computedClasses = computed(() => {\n  const horizontal = flushBoolean.value ? false : computedHorizontal.value\n  return {\n    'list-group-flush': flushBoolean.value,\n    'list-group-horizontal': horizontal === true,\n    [`list-group-horizontal-${horizontal}`]: typeof horizontal === 'string',\n    'list-group-numbered': numberedBoolean.value,\n  }\n})\nconst computedTag = toRef(() => (numberedBoolean.value === true ? 'ol' : props.tag))\n\nprovide(listGroupInjectionKey, {\n  numbered: numberedBoolean,\n})\n</script>\n","<template>\n  <component\n    :is=\"tagComputed\"\n    class=\"list-group-item\"\n    :class=\"computedClasses\"\n    :aria-current=\"activeBoolean ? true : undefined\"\n    :aria-disabled=\"disabledBoolean ? true : undefined\"\n    :target=\"isLink ? target : undefined\"\n    :href=\"!buttonBoolean ? href : undefined\"\n    :to=\"!buttonBoolean ? to : undefined\"\n    v-bind=\"computedAttrs\"\n  >\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, toRef, useAttrs} from 'vue'\nimport type {BLinkProps, Booleanish} from '../../types'\nimport {useBLinkHelper, useBooleanish} from '../../composables'\nimport BLink from '../BLink/BLink.vue'\nimport {listGroupInjectionKey} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      action?: Booleanish\n      button?: Booleanish\n      tag?: string\n    } & Omit<BLinkProps, 'event' | 'routerTag'>\n  >(),\n  {\n    action: false,\n    button: false,\n    tag: 'div',\n    // Link props\n    active: false, // Why is this active: false?\n    // All others use defaults\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    variant: undefined,\n    // End link props\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst attrs = useAttrs()\n\nconst parentData = inject(listGroupInjectionKey, null)\n\nconst actionBoolean = useBooleanish(() => props.action)\nconst activeBoolean = useBooleanish(() => props.active)\nconst buttonBoolean = useBooleanish(() => props.button)\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\nconst {computedLink} = useBLinkHelper(props)\n\nconst isLink = toRef(() => !buttonBoolean.value && computedLink.value)\nconst tagComputed = toRef(() =>\n  parentData?.numbered.value\n    ? 'li'\n    : buttonBoolean.value\n    ? 'button'\n    : !isLink.value\n    ? props.tag\n    : BLink\n)\n\nconst isAction = computed(\n  () =>\n    actionBoolean.value ||\n    isLink.value ||\n    buttonBoolean.value ||\n    ['a', 'router-link', 'button', 'b-link'].includes(props.tag)\n)\n\nconst computedClasses = computed(() => ({\n  [`list-group-item-${props.variant}`]: props.variant !== null && props.variant !== undefined,\n  'list-group-item-action': isAction.value,\n  'active': activeBoolean.value,\n  'disabled': disabledBoolean.value,\n}))\n\nconst computedAttrs = computed(() => {\n  const localAttrs = {} as {type?: string; disabled?: boolean}\n  if (buttonBoolean.value) {\n    if (!attrs || !attrs.type) {\n      // Add a type for button is one not provided in passed attributes\n      localAttrs.type = 'button'\n    }\n    if (disabledBoolean.value) {\n      // Set disabled attribute if button and disabled\n      localAttrs.disabled = true\n    }\n  }\n  return localAttrs\n})\n</script>\n","<template>\n  <component :is=\"wrapTag\" class=\"b-overlay-wrap position-relative\" :aria-busy=\"computedAriaBusy\">\n    <slot />\n    <BTransition\n      :no-fade=\"noFade\"\n      :trans-props=\"{enterToClass: 'show'}\"\n      name=\"fade\"\n      @on-after-enter=\"emit('shown')\"\n      @on-after-leave=\"emit('hidden')\"\n    >\n      <component\n        :is=\"overlayTag\"\n        v-if=\"showBoolean\"\n        class=\"b-overlay\"\n        :class=\"overlayClasses\"\n        :style=\"overlayStyles\"\n        @click=\"emit('click', $event)\"\n      >\n        <div class=\"position-absolute\" :class=\"blurClasses\" :style=\"blurStyles\" />\n\n        <div class=\"position-absolute\" :style=\"spinWrapperStyles\">\n          <slot name=\"overlay\" v-bind=\"spinnerAttrs\">\n            <BSpinner v-if=\"!noSpinnerBoolean\" v-bind=\"spinnerAttrs\" />\n          </slot>\n        </div>\n      </component>\n    </BTransition>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport type {Booleanish, ColorVariant, RadiusElementExtendables, SpinnerType} from '../../types'\nimport {useBooleanish, useRadiusElementClasses} from '../../composables'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BSpinner from '../BSpinner.vue'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      bgColor?: string\n      blur?: string | null\n      fixed?: Booleanish\n      noCenter?: Booleanish\n      noFade?: Booleanish\n      noSpinner?: Booleanish\n      noWrap?: Booleanish\n      opacity?: number | string\n      overlayTag?: string\n      show?: Booleanish\n      spinnerSmall?: Booleanish\n      spinnerType?: SpinnerType\n      spinnerVariant?: ColorVariant | null\n      variant?: ColorVariant | 'white' | 'transparent' | null\n      wrapTag?: string\n      zIndex?: number | string\n    } & RadiusElementExtendables\n  >(),\n  {\n    blur: '2px',\n    bgColor: undefined,\n    fixed: false,\n    noCenter: false,\n    noFade: false,\n    noSpinner: false,\n    noWrap: false,\n    opacity: 0.85,\n    overlayTag: 'div',\n    show: false,\n    spinnerSmall: false,\n    spinnerType: 'border',\n    spinnerVariant: undefined,\n    variant: 'light',\n    wrapTag: 'div',\n    zIndex: 10,\n    // RadiusElementExtendables props\n    rounded: false,\n    roundedBottom: undefined,\n    roundedEnd: undefined,\n    roundedStart: undefined,\n    roundedTop: undefined,\n    // End RadiusElementExtendables props\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n  hidden: []\n  shown: []\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  overlay?: (props: typeof spinnerAttrs.value) => any\n}>()\n\nconst positionStyles = {top: 0, left: 0, bottom: 0, right: 0} as const\n\nconst fixedBoolean = useBooleanish(() => props.fixed)\nconst noSpinnerBoolean = useBooleanish(() => props.noSpinner)\nconst noCenterBoolean = useBooleanish(() => props.noCenter)\nconst noWrapBoolean = useBooleanish(() => props.noWrap)\nconst showBoolean = useBooleanish(() => props.show)\nconst spinnerSmallBoolean = useBooleanish(() => props.spinnerSmall)\nconst roundedBoolean = useBooleanish(() => props.rounded)\nconst roundedTopBoolean = useBooleanish(() => props.roundedTop)\nconst roundedBottomBoolean = useBooleanish(() => props.roundedBottom)\nconst roundedStartBoolean = useBooleanish(() => props.roundedStart)\nconst roundedEndBoolean = useBooleanish(() => props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n  rounded: roundedBoolean.value,\n  roundedTop: roundedTopBoolean.value,\n  roundedBottom: roundedBottomBoolean.value,\n  roundedStart: roundedStartBoolean.value,\n  roundedEnd: roundedEndBoolean.value,\n}))\n\nconst computedVariant = toRef(() =>\n  props.variant !== null && !props.bgColor ? `bg-${props.variant}` : ''\n)\n\nconst computedAriaBusy = toRef(() => (showBoolean.value ? true : null))\n\nconst spinnerAttrs = computed(() => ({\n  type: props.spinnerType,\n  variant: props.spinnerVariant,\n  small: spinnerSmallBoolean.value,\n}))\n\nconst overlayStyles = computed(() => ({\n  ...positionStyles,\n  zIndex: props.zIndex || 10,\n}))\n\nconst overlayClasses = computed(() => ({\n  'position-absolute': !noWrapBoolean.value || !fixedBoolean.value,\n  'position-fixed': noWrapBoolean.value && fixedBoolean.value,\n}))\n\nconst blurClasses = computed(() => [computedVariant.value, radiusElementClasses.value])\n\nconst blurStyles = computed(() => ({\n  ...positionStyles,\n  opacity: props.opacity,\n  backgroundColor: props.bgColor || undefined,\n  backdropFilter: props.blur ? `blur(${props.blur})` : undefined,\n}))\n\nconst spinWrapperStyles = computed(() =>\n  noCenterBoolean.value\n    ? positionStyles\n    : {\n        top: '50%',\n        left: '50%',\n        transform: 'translateX(-50%) translateY(-50%)',\n      }\n)\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"teleportDisabledBoolean\">\n    <BTransition\n      :no-fade=\"true\"\n      :trans-props=\"{enterToClass: 'show'}\"\n      @before-enter=\"onBeforeEnter\"\n      @after-enter=\"onAfterEnter\"\n      @leave=\"onLeave\"\n      @after-leave=\"onAfterLeave\"\n    >\n      <div\n        v-show=\"modelValueBoolean\"\n        :id=\"computedId\"\n        ref=\"element\"\n        class=\"modal\"\n        :class=\"modalClasses\"\n        role=\"dialog\"\n        :aria-labelledby=\"!hideHeaderBoolean ? `${computedId}-label` : undefined\"\n        :aria-describedby=\"`${computedId}-body`\"\n        tabindex=\"-1\"\n        v-bind=\"$attrs\"\n        :style=\"computedZIndex\"\n      >\n        <div class=\"modal-dialog\" :class=\"modalDialogClasses\">\n          <div v-if=\"lazyShowing\" class=\"modal-content\" :class=\"contentClass\">\n            <div v-if=\"!hideHeaderBoolean\" class=\"modal-header\" :class=\"headerClasses\">\n              <slot name=\"header\" v-bind=\"sharedSlots\">\n                <component\n                  :is=\"titleTag\"\n                  :id=\"`${computedId}-label`\"\n                  class=\"modal-title\"\n                  :class=\"titleClasses\"\n                >\n                  <slot name=\"title\" v-bind=\"sharedSlots\">\n                    {{ title }}\n                  </slot>\n                </component>\n                <template v-if=\"!hideHeaderCloseBoolean\">\n                  <BButton\n                    v-if=\"hasHeaderCloseSlot\"\n                    v-bind=\"headerCloseAttrs\"\n                    @click=\"hide('close')\"\n                  >\n                    <slot name=\"header-close\" />\n                  </BButton>\n                  <BCloseButton\n                    v-else\n                    :aria-label=\"headerCloseLabel\"\n                    v-bind=\"headerCloseAttrs\"\n                    @click=\"hide('close')\"\n                  />\n                </template>\n              </slot>\n            </div>\n            <div :id=\"`${computedId}-body`\" class=\"modal-body\" :class=\"bodyClasses\">\n              <slot v-bind=\"sharedSlots\" />\n            </div>\n            <div v-if=\"!hideFooterBoolean\" class=\"modal-footer\" :class=\"footerClasses\">\n              <slot name=\"footer\" v-bind=\"sharedSlots\">\n                <slot name=\"cancel\" v-bind=\"sharedSlots\">\n                  <BButton\n                    v-if=\"!okOnlyBoolean\"\n                    ref=\"cancelButton\"\n                    :disabled=\"disableCancel\"\n                    :size=\"buttonSize\"\n                    :variant=\"cancelVariant\"\n                    @click=\"hide('cancel')\"\n                  >\n                    {{ cancelTitle }}\n                  </BButton>\n                </slot>\n                <slot name=\"ok\" v-bind=\"sharedSlots\">\n                  <BButton\n                    ref=\"okButton\"\n                    :disabled=\"disableOk\"\n                    :size=\"buttonSize\"\n                    :variant=\"okVariant\"\n                    @click=\"hide('ok')\"\n                  >\n                    {{ okTitle }}\n                  </BButton>\n                </slot>\n              </slot>\n            </div>\n          </div>\n        </div>\n        <slot name=\"backdrop\">\n          <BOverlay\n            :variant=\"computedBackdropVariant\"\n            :show=\"modelValueBoolean\"\n            no-spinner\n            fixed\n            no-wrap\n            :blur=\"null\"\n            @click=\"hide('backdrop')\"\n          />\n        </slot>\n      </div>\n    </BTransition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, reactive, ref, type RendererElement, toRef, watch} from 'vue'\nimport {\n  useBooleanish,\n  useColorVariantClasses,\n  useId,\n  useModalManager,\n  useSafeScrollLock,\n} from '../composables'\nimport {onKeyStroke, useEventListener, useFocus, useVModel} from '@vueuse/core'\nimport type {\n  Booleanish,\n  Breakpoint,\n  ButtonVariant,\n  ClassValue,\n  ColorVariant,\n  Size,\n  TextColorVariant,\n} from '../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../utils'\nimport BButton from './BButton/BButton.vue'\nimport BCloseButton from './BButton/BCloseButton.vue'\nimport BTransition from './BTransition/BTransition.vue'\nimport BOverlay from './BOverlay/BOverlay.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\n// aria\n// autofocus\n// close on escape when autofocus\n\n// Note, attempt to return focus to item that openned the modal after close\n// Implement auto focus props like autoFocusButton\n\nconst props = withDefaults(\n  defineProps<{\n    autoFocus?: Booleanish\n    autoFocusButton?: 'ok' | 'cancel' | 'close'\n    backdropVariant?: ColorVariant | null\n    bodyBgVariant?: ColorVariant | null\n    bodyClass?: ClassValue\n    bodyScrolling?: Booleanish\n    bodyTextVariant?: TextColorVariant | null\n    bodyVariant?: ColorVariant | null\n    busy?: Booleanish\n    buttonSize?: Size\n    cancelDisabled?: Booleanish\n    cancelTitle?: string\n    cancelVariant?: ButtonVariant | null\n    centered?: Booleanish\n    contentClass?: ClassValue\n    dialogClass?: ClassValue\n    footerBgVariant?: ColorVariant | null\n    footerBorderVariant?: ColorVariant | null\n    footerClass?: ClassValue\n    footerTextVariant?: TextColorVariant | null\n    footerVariant?: ColorVariant | null\n    fullscreen?: Booleanish | Breakpoint\n    headerBgVariant?: ColorVariant | null\n    headerBorderVariant?: ColorVariant | null\n    headerClass?: ClassValue\n    headerCloseClass?: ClassValue\n    headerCloseLabel?: string\n    headerCloseVariant?: ButtonVariant | null\n    headerTextVariant?: TextColorVariant | null\n    headerVariant?: ColorVariant | null\n    hideBackdrop?: Booleanish\n    hideFooter?: Booleanish\n    hideHeader?: Booleanish\n    hideHeaderClose?: Booleanish\n    id?: string\n    lazy?: Booleanish\n    modalClass?: ClassValue\n    modelValue?: Booleanish\n    noCloseOnBackdrop?: Booleanish\n    noCloseOnEsc?: Booleanish\n    noFade?: Booleanish\n    okDisabled?: Booleanish\n    okOnly?: Booleanish\n    okTitle?: string\n    okVariant?: ButtonVariant | null\n    scrollable?: Booleanish\n    size?: Size | 'xl'\n    teleportDisabled?: Booleanish\n    teleportTo?: string | RendererElement | null | undefined\n    title?: string\n    titleClass?: ClassValue\n    titleSrOnly?: Booleanish\n    titleTag?: string\n  }>(),\n  {\n    autoFocus: true,\n    autoFocusButton: undefined,\n    backdropVariant: undefined,\n    bodyBgVariant: null,\n    bodyClass: undefined,\n    bodyScrolling: false,\n    bodyTextVariant: null,\n    bodyVariant: null,\n    busy: false,\n    buttonSize: 'md',\n    cancelDisabled: false,\n    cancelTitle: 'Cancel',\n    cancelVariant: 'secondary',\n    centered: false,\n    contentClass: undefined,\n    dialogClass: undefined,\n    footerBgVariant: null,\n    footerBorderVariant: null,\n    footerClass: undefined,\n    footerTextVariant: null,\n    footerVariant: null,\n    fullscreen: false,\n    headerBgVariant: null,\n    headerBorderVariant: null,\n    headerClass: undefined,\n    headerCloseClass: undefined,\n    headerCloseLabel: 'Close',\n    headerCloseVariant: 'secondary',\n    headerTextVariant: null,\n    headerVariant: null,\n    hideBackdrop: false,\n    hideFooter: false,\n    hideHeader: false,\n    hideHeaderClose: false,\n    id: undefined,\n    lazy: false,\n    modalClass: undefined,\n    modelValue: false,\n    noCloseOnBackdrop: false,\n    noCloseOnEsc: false,\n    noFade: false,\n    okDisabled: false,\n    okOnly: false,\n    okTitle: 'Ok',\n    okVariant: 'primary',\n    scrollable: false,\n    size: 'md',\n    teleportDisabled: false,\n    teleportTo: 'body',\n    title: undefined,\n    titleClass: undefined,\n    titleSrOnly: false,\n    titleTag: 'h5',\n  }\n)\n\nconst emit = defineEmits<{\n  'cancel': [value: BvTriggerableEvent]\n  'close': [value: BvTriggerableEvent]\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'ok': [value: BvTriggerableEvent]\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n  'update:modelValue': [value: boolean]\n}>()\n\ntype SharedSlotsData = {\n  cancel: () => void\n  close: () => void\n  hide: (trigger?: string) => void\n  ok: () => void\n  visible: boolean\n}\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'backdrop'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'cancel'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'footer'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header-close'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'ok'?: (props: SharedSlotsData) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'title'?: (props: SharedSlotsData) => any\n}>()\n\nconst computedId = useId(() => props.id, 'modal')\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst busyBoolean = useBooleanish(() => props.busy)\nconst lazyBoolean = useBooleanish(() => props.lazy)\nconst cancelDisabledBoolean = useBooleanish(() => props.cancelDisabled)\nconst centeredBoolean = useBooleanish(() => props.centered)\nconst hideBackdropBoolean = useBooleanish(() => props.hideBackdrop)\nconst hideFooterBoolean = useBooleanish(() => props.hideFooter)\nconst hideHeaderBoolean = useBooleanish(() => props.hideHeader)\nconst hideHeaderCloseBoolean = useBooleanish(() => props.hideHeaderClose)\nconst modelValueBoolean = useBooleanish(modelValue)\nconst noCloseOnBackdropBoolean = useBooleanish(() => props.noCloseOnBackdrop)\nconst noCloseOnEscBoolean = useBooleanish(() => props.noCloseOnEsc)\nconst noFadeBoolean = useBooleanish(() => props.noFade)\nconst autoFocusBoolean = useBooleanish(() => props.autoFocus)\nconst okDisabledBoolean = useBooleanish(() => props.okDisabled)\nconst okOnlyBoolean = useBooleanish(() => props.okOnly)\nconst scrollableBoolean = useBooleanish(() => props.scrollable)\nconst titleSrOnlyBoolean = useBooleanish(() => props.titleSrOnly)\nconst teleportDisabledBoolean = useBooleanish(() => props.teleportDisabled)\nconst bodyScrollingBoolean = useBooleanish(() => props.bodyScrolling)\nconst computedFullScreen = useBooleanish(() => props.fullscreen)\n\nconst element = ref<HTMLElement | null>(null)\nconst okButton = ref<HTMLElement | null>(null)\nconst cancelButton = ref<HTMLElement | null>(null)\nconst closeButton = ref<HTMLElement | null>(null)\nconst isActive = ref(modelValueBoolean.value)\nconst lazyLoadCompleted = ref(false)\n\nonKeyStroke(\n  'Escape',\n  () => {\n    hide('esc')\n  },\n  {target: element}\n)\nuseSafeScrollLock(modelValueBoolean, bodyScrollingBoolean)\nconst {focused: modalFocus} = useFocus(element, {\n  initialValue: modelValueBoolean.value && props.autoFocusButton === undefined,\n})\nconst {focused: okButtonFocus} = useFocus(okButton, {\n  initialValue: modelValueBoolean.value && props.autoFocusButton === 'ok',\n})\nconst {focused: cancelButtonFocus} = useFocus(cancelButton, {\n  initialValue: modelValueBoolean.value && props.autoFocusButton === 'cancel',\n})\nconst {focused: closeButtonFocus} = useFocus(closeButton, {\n  initialValue: modelValueBoolean.value && props.autoFocusButton === 'close',\n})\n\nconst modalClasses = computed(() => [\n  props.modalClass,\n  {\n    fade: !noFadeBoolean.value,\n    show: isActive.value,\n  },\n])\n\nconst lazyShowing = toRef(\n  () =>\n    lazyBoolean.value === false ||\n    (lazyBoolean.value === true && lazyLoadCompleted.value === true) ||\n    (lazyBoolean.value === true && modelValueBoolean.value === true)\n)\n\nconst computedBackdropVariant = toRef(() =>\n  props.backdropVariant !== undefined\n    ? props.backdropVariant\n    : hideBackdropBoolean.value\n    ? 'transparent'\n    : 'dark'\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\n\nconst modalDialogClasses = computed(() => [\n  props.dialogClass,\n  {\n    'modal-fullscreen': computedFullScreen.value === true,\n    [`modal-fullscreen-${computedFullScreen.value}-down`]:\n      typeof computedFullScreen.value === 'string',\n    [`modal-${props.size}`]: props.size !== 'md',\n    'modal-dialog-centered': centeredBoolean.value,\n    'modal-dialog-scrollable': scrollableBoolean.value,\n  },\n])\n\nconst resolvedBodyBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.bodyBgVariant,\n  textVariant: props.bodyTextVariant,\n  variant: props.bodyVariant,\n}))\n\nconst bodyClasses = computed(() => [props.bodyClass, resolvedBodyBgClasses.value])\n\nconst resolvedHeaderBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.headerBgVariant,\n  textVariant: props.headerTextVariant,\n  variant: props.headerVariant,\n}))\n\nconst headerClasses = computed(() => [\n  props.headerClass,\n  resolvedHeaderBgClasses.value,\n  {\n    [`border-${props.headerBorderVariant}`]: props.headerBorderVariant !== null,\n  },\n])\n\nconst headerCloseAttrs = computed(() => ({\n  variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n  class: props.headerCloseClass,\n}))\n\nconst resolvedFooterBgClasses = useColorVariantClasses(() => ({\n  bgVariant: props.footerBgVariant,\n  textVariant: props.footerTextVariant,\n  variant: props.footerVariant,\n}))\n\nconst footerClasses = computed(() => [\n  props.footerClass,\n  resolvedFooterBgClasses.value,\n  {\n    [`border-${props.footerBorderVariant}`]: props.footerBorderVariant !== null,\n  },\n])\n\nconst titleClasses = computed(() => [\n  props.titleClass,\n  {\n    ['visually-hidden']: titleSrOnlyBoolean.value,\n  },\n])\nconst disableCancel = toRef(() => cancelDisabledBoolean.value || busyBoolean.value)\nconst disableOk = toRef(() => okDisabledBoolean.value || busyBoolean.value)\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nwatch(modelValueBoolean, (newValue, oldValue) => {\n  if (newValue === oldValue) return\n  if (newValue === true) {\n    showFn()\n  } else {\n    hide()\n  }\n})\n\nconst hide = (trigger = '') => {\n  if (\n    (trigger === 'backdrop' && noCloseOnBackdropBoolean.value) ||\n    (trigger === 'esc' && noCloseOnEscBoolean.value)\n  ) {\n    emit('hide-prevented')\n    return\n  }\n\n  const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n  if (trigger === 'ok') {\n    emit(trigger, event)\n  }\n  if (trigger === 'cancel') {\n    emit(trigger, event)\n  }\n  if (trigger === 'close') {\n    emit(trigger, event)\n  }\n  emit('hide', event)\n\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    if (!modelValue.value) modelValue.value = true\n    return\n  }\n  if (modelValue.value) modelValue.value = false\n}\n\n// TODO: If a show is prevented, it will briefly show the animation. This is a bug\n// I'm not sure how to wait for the event to be determined. Before showing\nconst showFn = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    if (modelValue.value) modelValue.value = false\n    emit('show-prevented')\n    return\n  }\n  if (!modelValue.value) modelValue.value = true\n}\n\nconst pickFocusItem = () => {\n  if (autoFocusBoolean.value === false) return\n  props.autoFocusButton === 'ok'\n    ? (okButtonFocus.value = true)\n    : props.autoFocusButton === 'close'\n    ? (closeButtonFocus.value = true)\n    : props.autoFocusButton === 'cancel'\n    ? (cancelButtonFocus.value = true)\n    : (modalFocus.value = true)\n}\n\nconst onBeforeEnter = () => showFn()\nconst onAfterEnter = () => {\n  isActive.value = true\n  pickFocusItem()\n  emit('shown', buildTriggerableEvent('shown'))\n  if (lazyBoolean.value === true) lazyLoadCompleted.value = true\n}\nconst onLeave = () => {\n  isActive.value = false\n}\nconst onAfterLeave = () => {\n  emit('hidden', buildTriggerableEvent('hidden'))\n  if (lazyBoolean.value === true) lazyLoadCompleted.value = false\n}\n\nconst {activePosition, activeModalCount} = useModalManager(isActive)\nconst defaultModalDialogZIndex = 1056\nconst computedZIndex = computed<CSSProperties>(() => ({\n  // Make sure that newly opened modals have a higher z-index than currently active ones.\n  // All active modals have a z-index of ('defaultZIndex' - 'stackSize' - 'positionInStack').\n  //\n  // This means inactive modals will already be higher than active ones when opened.\n  'z-index': isActive.value\n    ? defaultModalDialogZIndex - (activeModalCount.value - activePosition.value)\n    : defaultModalDialogZIndex,\n}))\n\nuseEventListener(element, 'bv-toggle', () => {\n  modelValueBoolean.value ? hide() : showFn()\n})\n\nconst sharedSlots: SharedSlotsData = reactive({\n  cancel: () => {\n    hide('cancel')\n  },\n  close: () => {\n    hide('close')\n  },\n  hide,\n  ok: () => {\n    hide('ok')\n  },\n  visible: modelValueBoolean,\n})\n\ndefineExpose({\n  hide,\n  id: computedId,\n  show: showFn,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.modal {\n  display: block;\n}\n\n.modal-dialog {\n  z-index: 1051;\n}\n</style>\n","<template>\n  <component :is=\"tag\" class=\"nav\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport type {AlignmentJustifyContent, Booleanish} from '../../types'\nimport {useAlignment, useBooleanish} from '../../composables'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    align?: AlignmentJustifyContent\n    cardHeader?: Booleanish\n    fill?: Booleanish\n    justified?: Booleanish\n    pills?: Booleanish\n    small?: Booleanish\n    tabs?: Booleanish\n    tag?: string\n    underline?: Booleanish\n    vertical?: Booleanish\n  }>(),\n  {\n    align: undefined,\n    cardHeader: false,\n    fill: false,\n    justified: false,\n    pills: false,\n    small: false,\n    tabs: false,\n    tag: 'ul',\n    underline: false,\n    vertical: false,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst cardHeaderBoolean = useBooleanish(() => props.cardHeader)\nconst fillBoolean = useBooleanish(() => props.fill)\nconst justifiedBoolean = useBooleanish(() => props.justified)\nconst pillsBoolean = useBooleanish(() => props.pills)\nconst smallBoolean = useBooleanish(() => props.small)\nconst tabsBoolean = useBooleanish(() => props.tabs)\nconst verticalBoolean = useBooleanish(() => props.vertical)\nconst alignment = useAlignment(() => props.align)\nconst underlineBoolean = useBooleanish(() => props.underline)\n\nconst computedClasses = computed(() => ({\n  'nav-tabs': tabsBoolean.value,\n  'nav-pills': pillsBoolean.value && !tabsBoolean.value,\n  'card-header-tabs': !verticalBoolean.value && cardHeaderBoolean.value && tabsBoolean.value,\n  'card-header-pills':\n    !verticalBoolean.value && cardHeaderBoolean.value && pillsBoolean.value && !tabsBoolean.value,\n  'flex-column': verticalBoolean.value,\n  'nav-fill': !verticalBoolean.value && fillBoolean.value,\n  'nav-justified': !verticalBoolean.value && justifiedBoolean.value,\n  [alignment.value]: !verticalBoolean.value && props.align !== undefined,\n  'small': smallBoolean.value,\n  'nav-underline': underlineBoolean.value,\n}))\n</script>\n","<template>\n  <li class=\"d-flex flex-row align-items-center flex-wrap\">\n    <BForm\n      v-bind=\"$attrs\"\n      :id=\"id\"\n      :floating=\"floating\"\n      :role=\"role\"\n      :novalidate=\"novalidate\"\n      :validated=\"validated\"\n      class=\"d-flex\"\n      @submit.prevent=\"submitted\"\n    >\n      <slot />\n    </BForm>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BFormProps} from '../../types'\nimport BForm from '../BForm/BForm.vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nwithDefaults(\n  defineProps<\n    {\n      role?: string\n    } & BFormProps\n  >(),\n  {\n    role: undefined,\n    // BForm props\n    floating: undefined,\n    id: undefined,\n    novalidate: undefined,\n    validated: undefined,\n    // End BForm props\n  }\n)\n\nconst emit = defineEmits<{\n  submit: [value: Event]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst submitted = (e: Event) => {\n  emit('submit', e)\n}\n</script>\n","<template>\n  <li class=\"nav-item\">\n    <BLink\n      class=\"nav-link\"\n      :class=\"linkClass\"\n      :tabindex=\"disabledBoolean ? -1 : undefined\"\n      :aria-disabled=\"disabledBoolean ? true : undefined\"\n      v-bind=\"{...computedLinkProps, ...linkAttrs}\"\n      @click=\"emit('click', $event)\"\n    >\n      <slot />\n    </BLink>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport {useBooleanish} from '../../composables'\nimport type {BLinkProps, ClassValue} from '../../types'\nimport {pick} from '../../utils'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<\n    {\n      linkAttrs?: Record<string, unknown>\n      linkClass?: ClassValue\n    } & Omit<BLinkProps, 'event' | 'routerTag'>\n  >(),\n  {\n    // Link props\n    active: undefined,\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    linkAttrs: undefined,\n    linkClass: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    variant: undefined,\n    // End link props\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\nconst computedLinkProps = computed(() =>\n  pick(props, [\n    'active',\n    'activeClass',\n    'append',\n    'disabled',\n    'href',\n    'icon',\n    'opacity',\n    'opacityHover',\n    'rel',\n    'replace',\n    'routerComponentName',\n    'target',\n    'to',\n    'underlineOffset',\n    'underlineOffsetHover',\n    'underlineOpacity',\n    'underlineOpacityHover',\n    'underlineVariant',\n    'variant',\n  ])\n)\ncomputedLinkProps.value.activeClass\n</script>\n","<template>\n  <li class=\"nav-item dropdown\">\n    <BDropdown\n      ref=\"dropdown\"\n      v-bind=\"props\"\n      is-nav\n      @show=\"emit('show', $event)\"\n      @shown=\"emit('shown')\"\n      @hide=\"emit('hide', $event)\"\n      @hidden=\"emit('hidden')\"\n      @hide-prevented=\"emit('hide-prevented')\"\n      @show-prevented=\"emit('show-prevented')\"\n      @click=\"emit('click', $event)\"\n      @toggle=\"emit('toggle')\"\n      @update:model-value=\"emit('update:modelValue', $event)\"\n    >\n      <template #button-content>\n        <slot name=\"button-content\" />\n      </template>\n      <template #toggle-text>\n        <slot name=\"toggle-text\" />\n      </template>\n      <template #default>\n        <slot :hide=\"close\" :show=\"open\" />\n      </template>\n    </BDropdown>\n  </li>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref} from 'vue'\nimport {BvTriggerableEvent} from '../../utils'\nimport BDropdown from '../BDropdown/BDropdown.vue'\nimport type {BDropdownProps} from '../../types'\n\nconst props = withDefaults(defineProps<BDropdownProps>(), {\n  ariaLabel: undefined,\n  autoClose: true,\n  block: false,\n  boundary: 'clippingAncestors',\n  boundaryPadding: undefined,\n  center: false,\n  container: undefined,\n  disabled: false,\n  dropend: false,\n  dropstart: false,\n  dropup: false,\n  end: false,\n  floatingMiddleware: undefined,\n  id: undefined,\n  isNav: true,\n  lazy: false,\n  menuClass: undefined,\n  modelValue: false,\n  noCaret: false,\n  noFlip: false,\n  noShift: false,\n  noSize: false,\n  offset: 0,\n  role: 'menu',\n  size: 'md',\n  split: false,\n  splitButtonType: 'button',\n  splitClass: undefined,\n  splitDisabled: undefined,\n  splitHref: undefined,\n  splitTo: undefined,\n  splitVariant: undefined,\n  strategy: 'absolute',\n  text: undefined,\n  toggleClass: undefined,\n  toggleText: 'Toggle dropdown',\n  variant: 'link',\n})\n\nconst emit = defineEmits<{\n  'click': [event: MouseEvent]\n  'hidden': []\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': []\n  'toggle': []\n  'update:modelValue': [value: boolean]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'button-content'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: {hide: () => void; show: () => void}) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'toggle-text'?: (props: Record<string, never>) => any\n}>()\nconst dropdown = ref<InstanceType<typeof BDropdown> | null>(null)\n\nconst close = () => {\n  dropdown.value?.close()\n}\nconst open = () => {\n  dropdown.value?.open()\n}\nconst toggle = () => {\n  dropdown.value?.toggle()\n}\n\ndefineExpose({\n  close,\n  open,\n  toggle,\n})\n</script>\n","<template>\n  <component :is=\"tag\" class=\"navbar\" :class=\"computedClasses\" :role=\"computedRole\">\n    <div v-if=\"container !== false\" :class=\"containerClass\">\n      <slot />\n    </div>\n    <slot v-else />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, toRef} from 'vue'\nimport type {Booleanish, Breakpoint, ColorVariant} from '../../types'\nimport {useBooleanish, useContainerClasses} from '../../composables'\nimport {navbarInjectionKey} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<{\n    autoClose?: Booleanish\n    container?: 'fluid' | Booleanish | Breakpoint\n    fixed?: 'top' | 'bottom'\n    print?: Booleanish\n    sticky?: 'top' | 'bottom'\n    tag?: string\n    toggleable?: Booleanish | Breakpoint\n    variant?: ColorVariant | null\n  }>(),\n  {\n    autoClose: true,\n    container: 'fluid',\n    fixed: undefined,\n    print: false,\n    sticky: undefined,\n    tag: 'nav',\n    toggleable: false,\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst containerBoolean = useBooleanish(() => props.container)\nconst autoCloseBoolean = useBooleanish(() => props.autoClose)\nconst printBoolean = useBooleanish(() => props.print)\nconst computedNavbarExpand = useBooleanish(() => props.toggleable)\n\nconst computedRole = toRef(() => (props.tag === 'nav' ? undefined : 'navigation'))\n\nconst containerClass = useContainerClasses(containerBoolean)\n\nconst computedClasses = computed(() => ({\n  'd-print': printBoolean.value,\n  [`sticky-${props.sticky}`]: props.sticky !== undefined,\n  [`bg-${props.variant}`]: props.variant !== null,\n  [`fixed-${props.fixed}`]: props.fixed !== undefined,\n  'navbar-expand': computedNavbarExpand.value === false,\n  [`navbar-expand-${computedNavbarExpand.value}`]: typeof computedNavbarExpand.value === 'string',\n}))\n\nprovide(navbarInjectionKey, {\n  tag: toRef(() => props.tag),\n  autoClose: autoCloseBoolean,\n})\n</script>\n","<template>\n  <component :is=\"computedTag\" class=\"navbar-brand\" v-bind=\"computedLinkProps\">\n    <slot />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport BLink from '../BLink/BLink.vue'\nimport type {BLinkProps} from '../../types'\nimport {useBLinkHelper} from '../../composables'\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst props = withDefaults(\n  defineProps<\n    {\n      tag?: string\n    } & Omit<BLinkProps, 'event' | 'routerTag'>\n  >(),\n  {\n    tag: 'div',\n    // Link props\n    active: undefined,\n    activeClass: undefined,\n    append: undefined,\n    disabled: undefined,\n    exactActiveClass: undefined,\n    href: undefined,\n    icon: undefined,\n    opacity: undefined,\n    opacityHover: undefined,\n    rel: undefined,\n    replace: undefined,\n    routerComponentName: undefined,\n    target: undefined,\n    to: undefined,\n    underlineOffset: undefined,\n    underlineOffsetHover: undefined,\n    underlineOpacity: undefined,\n    underlineOpacityHover: undefined,\n    underlineVariant: undefined,\n    variant: undefined,\n    // End link props\n  }\n)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n  'active',\n  'activeClass',\n  'append',\n  'disabled',\n  'href',\n  'rel',\n  'replace',\n  'routerComponentName',\n  'target',\n  'to',\n  'variant',\n  'opacity',\n  'opacityHover',\n  'underlineVariant',\n  'underlineOffset',\n  'underlineOffsetHover',\n  'underlineOpacity',\n  'underlineOpacityHover',\n  'icon',\n])\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : props.tag))\n</script>\n","<template>\n  <ul class=\"navbar-nav\" :class=\"computedClasses\">\n    <slot />\n  </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport type {AlignmentJustifyContent, Booleanish} from '../../types'\nimport {computed} from 'vue'\nimport {useAlignment, useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    align?: AlignmentJustifyContent\n    fill?: Booleanish\n    justified?: Booleanish\n    small?: Booleanish\n    tag?: string\n  }>(),\n  {\n    align: undefined,\n    fill: false,\n    justified: false,\n    small: false,\n    tag: 'ul',\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst fillBoolean = useBooleanish(() => props.fill)\nconst justifiedBoolean = useBooleanish(() => props.justified)\nconst smallBoolean = useBooleanish(() => props.small)\nconst alignment = useAlignment(() => props.align)\n\nconst computedClasses = computed(() => ({\n  'nav-fill': fillBoolean.value,\n  'nav-justified': justifiedBoolean.value,\n  [alignment.value]: props.align !== undefined,\n  'small': smallBoolean.value,\n}))\n</script>\n","import type {Directive, DirectiveBinding} from 'vue'\n\nconst setTheme = (el: HTMLElement, value: string): void => el.setAttribute('data-bs-theme', value)\nexport default {\n  mounted(el, binding: DirectiveBinding): void {\n    setTheme(el, binding.value)\n  },\n  updated(el, binding: DirectiveBinding): void {\n    setTheme(el, binding.value)\n  },\n} satisfies Directive<HTMLElement>\n","import {RX_HASH, RX_HASH_ID, RX_SPACE_SPLIT} from '../constants/regex'\nimport {getAttr, isTag} from '../utils'\nimport type {Directive, DirectiveBinding} from 'vue'\n\nconst getTargets = (binding: DirectiveBinding<string | string[]>, el: HTMLElement) => {\n  const {modifiers, arg, value} = binding\n  // Any modifiers are considered target Ids\n  const targets = Object.keys(modifiers || {})\n\n  // If value is a string, split out individual targets (if space delimited)\n  const localValue = typeof value === 'string' ? value.split(RX_SPACE_SPLIT) : value\n\n  // Support target Id as link href (`href=\"#id\"`)\n  if (isTag(el.tagName, 'a')) {\n    const href = getAttr(el, 'href') || ''\n    if (RX_HASH_ID.test(href)) {\n      targets.push(href.replace(RX_HASH, ''))\n    }\n  }\n\n  // Add Id from `arg` (if provided), and support value\n  // as a single string Id or an array of string Ids\n  // If `value` is not an array or string, then it gets filtered out\n  Array.prototype.concat\n    .apply([], [arg, localValue])\n    .forEach((t) => typeof t === 'string' && targets.push(t))\n\n  // Return only unique and truthy target Ids\n  return targets.filter((t, index, arr) => t && arr.indexOf(t) === index)\n}\n\nconst toggle = (targetIds: string[], el: HTMLElement) => {\n  targetIds.forEach((targetId) => {\n    const target = document.getElementById(targetId)\n\n    if (target !== null) {\n      target.dispatchEvent(new Event('bv-toggle'))\n    }\n  })\n  setTimeout(() => checkVisibility(targetIds, el), 50)\n}\n\nconst checkVisibility = (targetIds: string[], el: HTMLElement) => {\n  let visible = false\n  targetIds.forEach((targetId) => {\n    const target = document.getElementById(targetId)\n\n    if (target?.classList.contains('show')) {\n      visible = true\n    }\n    if (target?.classList.contains('closing')) {\n      visible = false\n    }\n  })\n  el.setAttribute('aria-expanded', visible ? 'true' : 'false')\n  el.classList.remove(visible ? 'collapsed' : 'not-collapsed')\n  el.classList.add(visible ? 'not-collapsed' : 'collapsed')\n}\n\nconst handleUpdate = (el: WithToggle, binding: DirectiveBinding<string | string[] | undefined>) => {\n  // Determine targets\n  if (binding.value === undefined && Object.keys(binding.modifiers || {}).length === 0) return\n  const targets = getTargets(binding as DirectiveBinding<string | string[]>, el)\n\n  // Set up click handler\n  if (el.__toggle) {\n    el.removeEventListener('click', el.__toggle)\n  }\n  el.__toggle = () => toggle(targets, el)\n  el.addEventListener('click', el.__toggle)\n\n  // Update attributes\n  el.setAttribute('aria-controls', targets.join(' '))\n  checkVisibility(targets, el)\n}\n\nexport interface WithToggle extends HTMLElement {\n  __toggle: () => void\n}\n\nexport default {\n  mounted: handleUpdate,\n  updated: handleUpdate,\n  unmounted(el: WithToggle): void {\n    el.removeEventListener('click', el.__toggle)\n    el.removeAttribute('aria-controls')\n    el.removeAttribute('aria-expanded')\n  },\n} satisfies Directive<WithToggle>\n","import {type Directive, ref} from 'vue'\nimport {\n  bind,\n  type ElementWithPopper,\n  resolveActiveStatus,\n  resolveContent,\n  resolveDirectiveProps,\n  unbind,\n} from '../utils/floatingUi'\n\nexport default {\n  mounted(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    el.$__state = ref({\n      ...resolveDirectiveProps(binding, el),\n      ...text,\n    })\n    bind(el, binding)\n  },\n  updated(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    if (!el.$__state) {\n      // Same binding as above\n      // This happens when mounting occurs, but binding does not happen ie (if (!text.content && !text.title) return)\n      // So mounting occurs without a title or content set\n      el.$__state = ref({\n        ...resolveDirectiveProps(binding, el),\n        ...text,\n      })\n      bind(el, binding)\n      return\n    }\n    el.$__state.value = {\n      ...resolveDirectiveProps(binding, el),\n      ...text,\n    }\n  },\n  beforeUnmount(el) {\n    unbind(el)\n  },\n} satisfies Directive<ElementWithPopper>\n","import {type Directive, ref} from 'vue'\nimport {\n  bind,\n  type ElementWithPopper,\n  resolveActiveStatus,\n  resolveContent,\n  resolveDirectiveProps,\n  unbind,\n} from '../utils/floatingUi'\n\nexport default {\n  mounted(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    el.$__state = ref({\n      noninteractive: true,\n      ...resolveDirectiveProps(binding, el),\n      title: text.title ?? text.content ?? '',\n      tooltip: isActive,\n    })\n    bind(el, binding)\n  },\n  updated(el, binding) {\n    const isActive = resolveActiveStatus(binding.value)\n    if (!isActive) return\n\n    const text = resolveContent(binding.value, el)\n\n    if (!text.content && !text.title) return\n\n    if (!el.$__state) {\n      // Same binding as above\n      // This happens when mounting occurs, but binding does not happen ie (if (!text.content && !text.title) return)\n      // So mounting occurs without a title or content set\n      el.$__state = ref({\n        noninteractive: true,\n        ...resolveDirectiveProps(binding, el),\n        title: text.title ?? text.content ?? '',\n        tooltip: isActive,\n      })\n      bind(el, binding)\n      return\n    }\n    el.$__state.value = {\n      noninteractive: true,\n      ...resolveDirectiveProps(binding, el),\n      title: text.title ?? text.content ?? '',\n      tooltip: isActive,\n    }\n  },\n  beforeUnmount(el) {\n    unbind(el)\n  },\n} satisfies Directive<ElementWithPopper>\n","<template>\n  <button\n    v-b-toggle=\"!disabledBoolean ? target : undefined\"\n    class=\"navbar-toggler\"\n    type=\"button\"\n    :class=\"computedClasses\"\n    :disabled=\"disabledBoolean\"\n    :aria-label=\"label\"\n    @click=\"onClick\"\n  >\n    <slot>\n      <span class=\"navbar-toggler-icon\" />\n    </slot>\n  </button>\n</template>\n\n<script setup lang=\"ts\">\nimport {vBToggle} from '../../directives'\nimport {computed} from 'vue'\nimport type {Booleanish} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    disabled?: Booleanish\n    label?: string\n    target?: string | string[]\n  }>(),\n  {\n    label: 'Toggle navigation',\n    disabled: false,\n    target: undefined,\n  }\n)\n\nconst emit = defineEmits<{\n  click: [value: MouseEvent]\n}>()\n\ndefineSlots<{\n  // TODO this scoped slot is {expanded: boolean}\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\n\nconst computedClasses = computed(() => ({\n  disabled: disabledBoolean.value,\n}))\n\nconst onClick = (e: MouseEvent): void => {\n  if (!disabledBoolean.value) {\n    emit('click', e)\n  }\n}\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"teleportDisabledBoolean\">\n    <BTransition\n      :no-fade=\"true\"\n      :trans-props=\"{\n        enterToClass: 'showing',\n        enterFromClass: '',\n        leaveToClass: 'hiding show',\n        leaveFromClass: 'show',\n      }\"\n      @before-enter=\"OnBeforeEnter\"\n      @after-enter=\"OnAfterEnter\"\n      @leave=\"onLeave\"\n      @after-leave=\"OnAfterLeave\"\n    >\n      <div\n        v-show=\"modelValue\"\n        :id=\"computedId\"\n        ref=\"element\"\n        aria-modal=\"true\"\n        role=\"dialog\"\n        :class=\"computedClasses\"\n        tabindex=\"-1\"\n        :aria-labelledby=\"`${computedId}-offcanvas-label`\"\n        data-bs-backdrop=\"false\"\n        v-bind=\"$attrs\"\n      >\n        <template v-if=\"lazyShowing\">\n          <div v-if=\"!noHeaderBoolean\" class=\"offcanvas-header\" :class=\"headerClass\">\n            <slot name=\"header\" :visible=\"modelValueBoolean\" :placement=\"placement\" :hide=\"hide\">\n              <h5 :id=\"`${computedId}-offcanvas-label`\" class=\"offcanvas-title\">\n                <slot name=\"title\" :visible=\"modelValueBoolean\" :placement=\"placement\" :hide=\"hide\">\n                  {{ title }}\n                </slot>\n              </h5>\n              <template v-if=\"!noHeaderCloseBoolean\">\n                <BButton v-if=\"hasHeaderCloseSlot\" v-bind=\"headerCloseAttrs\" @click=\"hide('close')\">\n                  <slot name=\"header-close\" />\n                </BButton>\n                <BCloseButton\n                  v-else\n                  :aria-label=\"headerCloseLabel\"\n                  v-bind=\"headerCloseAttrs\"\n                  @click=\"hide('close')\"\n                />\n              </template>\n            </slot>\n          </div>\n          <div class=\"offcanvas-body\" :class=\"bodyClass\">\n            <slot :visible=\"modelValueBoolean\" :placement=\"placement\" :hide=\"hide\" />\n          </div>\n          <div v-if=\"hasFooterSlot\" :class=\"footerClass\">\n            <slot name=\"footer\" :visible=\"modelValueBoolean\" :placement=\"placement\" :hide=\"hide\" />\n          </div>\n        </template>\n      </div>\n    </BTransition>\n    <slot name=\"backdrop\">\n      <BOverlay\n        :variant=\"backdropVariant\"\n        :show=\"showBackdrop\"\n        fixed\n        no-wrap\n        no-spinner\n        @click=\"hide('backdrop')\"\n      />\n    </slot>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, ref, type RendererElement, toRef} from 'vue'\nimport {onKeyStroke, useEventListener, useFocus, useVModel} from '@vueuse/core'\nimport {useBooleanish, useId, useSafeScrollLock} from '../../composables'\nimport type {Booleanish, ButtonVariant, ClassValue, ColorVariant} from '../../types'\nimport {BvTriggerableEvent, isEmptySlot} from '../../utils'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BButton from '../BButton/BButton.vue'\n\n// TODO once the responsive stuff may be implemented correctly,\n// What needs to occur is a fixing of the \"body scrolling\".\n// If the offcanvas is on the screen on a large screen, body scrolling is not disabled\n// Even though the modelValue is true\n// When it's a small screen and close, it works, as normal,\n// But then when it opens up on a small screen, it must disable again\n// This is implemented on Layout.vue, but is not officially supported.\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    backdrop?: Booleanish\n    backdropVariant?: ColorVariant | null\n    bodyClass?: string\n    bodyScrolling?: Booleanish\n    footerClass?: string\n    headerClass?: string\n    headerCloseClass?: ClassValue\n    headerCloseLabel?: string\n    headerCloseVariant?: ButtonVariant | null\n    id?: string\n    lazy?: Booleanish\n    modelValue?: Booleanish\n    noCloseOnBackdrop?: Booleanish\n    noCloseOnEsc?: Booleanish\n    noFocus?: Booleanish\n    noHeader?: Booleanish\n    noHeaderClose?: Booleanish\n    // TODO standardize this. Create a dedicated type\n    // Then in components that use individual props (BImg)\n    // Make them just use prop placement\n    placement?: 'top' | 'bottom' | 'start' | 'end'\n    teleportDisabled?: Booleanish\n    teleportTo?: string | RendererElement | null | undefined\n    title?: string\n    // responsive?: Breakpoint\n    // TODO responsive doesn't work\n  }>(),\n  {\n    backdrop: true,\n    backdropVariant: 'dark',\n    bodyClass: undefined,\n    bodyScrolling: false,\n    footerClass: undefined,\n    headerClass: undefined,\n    headerCloseClass: undefined,\n    headerCloseLabel: 'Close',\n    headerCloseVariant: 'secondary',\n    id: undefined,\n    lazy: false,\n    modelValue: false,\n    noCloseOnBackdrop: false,\n    noCloseOnEsc: false,\n    noFocus: false,\n    noHeader: false,\n    noHeaderClose: false,\n    placement: 'start',\n    teleportDisabled: false,\n    teleportTo: 'body',\n    title: undefined,\n  }\n)\n\nconst emit = defineEmits<{\n  'close': [value: BvTriggerableEvent]\n  'esc': [value: BvTriggerableEvent]\n  'hidden': [value: BvTriggerableEvent]\n  'hide': [value: BvTriggerableEvent]\n  'hide-prevented': []\n  'show': [value: BvTriggerableEvent]\n  'show-prevented': []\n  'shown': [value: BvTriggerableEvent]\n  'update:modelValue': [value: boolean]\n}>()\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'backdrop'?: (props: Record<string, never>) => any\n  'default'?: (props: {\n    visible: boolean\n    placement: 'top' | 'bottom' | 'start' | 'end'\n    hide: (trigger?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  'footer'?: (props: {\n    visible: boolean\n    placement: 'top' | 'bottom' | 'start' | 'end'\n    hide: (trigger?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  'header'?: (props: {\n    visible: boolean\n    placement: 'top' | 'bottom' | 'start' | 'end'\n    hide: (trigger?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'header-close'?: (props: Record<string, never>) => any\n  'title'?: (props: {\n    visible: boolean\n    placement: 'top' | 'bottom' | 'start' | 'end'\n    hide: (trigger?: string) => void\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  }) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\n\nconst modelValueBoolean = useBooleanish(modelValue)\nconst bodyScrollingBoolean = useBooleanish(() => props.bodyScrolling)\nconst backdropBoolean = useBooleanish(() => props.backdrop)\nconst noHeaderCloseBoolean = useBooleanish(() => props.noHeaderClose)\nconst noHeaderBoolean = useBooleanish(() => props.noHeader)\nconst noFocusBoolean = useBooleanish(() => props.noFocus)\nconst noCloseOnBackdropBoolean = useBooleanish(() => props.noCloseOnBackdrop)\nconst noCloseOnEscBoolean = useBooleanish(() => props.noCloseOnEsc)\nconst lazyBoolean = useBooleanish(() => props.lazy)\nconst teleportDisabledBoolean = useBooleanish(() => props.teleportDisabled)\n\nconst computedId = useId(() => props.id, 'offcanvas')\nuseSafeScrollLock(modelValueBoolean, bodyScrollingBoolean)\n\nconst element = ref<HTMLElement | null>(null)\n\nonKeyStroke(\n  'Escape',\n  () => {\n    hide('esc')\n  },\n  {target: element}\n)\n\nconst {focused} = useFocus(element, {\n  initialValue: modelValueBoolean.value && noFocusBoolean.value === false,\n})\n\nconst isActive = ref(modelValueBoolean.value)\nconst lazyLoadCompleted = ref(false)\n\nconst showBackdrop = toRef(() => backdropBoolean.value === true && modelValueBoolean.value === true)\n\nconst lazyShowing = toRef(\n  () =>\n    lazyBoolean.value === false ||\n    (lazyBoolean.value === true && lazyLoadCompleted.value === true) ||\n    (lazyBoolean.value === true && modelValueBoolean.value === true)\n)\n\nconst hasHeaderCloseSlot = toRef(() => !isEmptySlot(slots['header-close']))\nconst headerCloseClasses = computed(() => [\n  {'text-reset': !hasHeaderCloseSlot.value},\n  props.headerCloseClass,\n])\nconst headerCloseAttrs = computed(() => ({\n  variant: hasHeaderCloseSlot.value ? props.headerCloseVariant : undefined,\n  class: headerCloseClasses.value,\n}))\n\nconst hasFooterSlot = toRef(() => !isEmptySlot(slots.footer))\nconst computedClasses = computed(() => [\n  // props.responsive === undefined ? 'offcanvas' : `offcanvas-${props.responsive}`,\n  'offcanvas', // Remove when above check is fixed\n  `offcanvas-${props.placement}`,\n  {\n    show: modelValueBoolean.value && isActive.value === true,\n  },\n])\n\nconst buildTriggerableEvent = (\n  type: string,\n  opts: Partial<BvTriggerableEvent> = {}\n): BvTriggerableEvent =>\n  new BvTriggerableEvent(type, {\n    cancelable: false,\n    target: element.value || null,\n    relatedTarget: null,\n    trigger: null,\n    ...opts,\n    componentId: computedId.value,\n  })\n\nconst hide = (trigger = '') => {\n  if (\n    (trigger === 'backdrop' && noCloseOnBackdropBoolean.value) ||\n    (trigger === 'esc' && noCloseOnEscBoolean.value)\n  ) {\n    emit('hide-prevented')\n    return\n  }\n\n  const event = buildTriggerableEvent('hide', {cancelable: trigger !== '', trigger})\n\n  if (trigger === 'close') {\n    emit(trigger, event)\n  }\n  if (trigger === 'esc') {\n    emit(trigger, event)\n  }\n  emit('hide', event)\n\n  if (event.defaultPrevented) {\n    emit('hide-prevented')\n    return\n  }\n\n  modelValue.value = false\n}\n\nconst show = () => {\n  const event = buildTriggerableEvent('show', {cancelable: true})\n  emit('show', event)\n  if (event.defaultPrevented) {\n    modelValue.value = false\n    emit('show-prevented')\n    return\n  }\n  modelValue.value = true\n}\n\nconst focus = () => {\n  nextTick(() => {\n    if (noFocusBoolean.value === false) {\n      focused.value = true\n    }\n  })\n}\n\nconst OnBeforeEnter = () => show()\nconst OnAfterEnter = () => {\n  isActive.value = true\n  focus()\n  emit('shown', buildTriggerableEvent('shown'))\n  if (lazyBoolean.value === true) lazyLoadCompleted.value = true\n}\nconst onLeave = () => {\n  isActive.value = false\n}\nconst OnAfterLeave = () => {\n  emit('hidden', buildTriggerableEvent('hidden'))\n  if (lazyBoolean.value === true) lazyLoadCompleted.value = false\n}\nuseEventListener(element, 'bv-toggle', () => {\n  modelValueBoolean.value ? hide() : show()\n})\n\ndefineExpose({\n  hide,\n  show,\n})\n</script>\n","<template>\n  <ul\n    class=\"pagination\"\n    :class=\"computedWrapperClasses\"\n    role=\"menubar\"\n    :aria-disabled=\"disabledBoolean\"\n    :aria-label=\"ariaLabel || undefined\"\n  >\n    <!-- First -->\n    <li v-if=\"!hideGotoEndButtonsBoolean && !firstNumberBoolean\" v-bind=\"firstButtonProps.li\">\n      <component\n        v-bind=\"firstButtonProps.button\"\n        :is=\"firstButtonProps.button.is\"\n        @click=\"pageClick($event, 1)\"\n      >\n        <slot name=\"first-text\">\n          {{ firstText }}\n        </slot>\n      </component>\n    </li>\n    <!-- Prev -->\n    <li v-bind=\"prevButtonProps.li\">\n      <component\n        v-bind=\"prevButtonProps.button\"\n        :is=\"prevButtonProps.button.is\"\n        @click=\"pageClick($event, modelValueNumber - 1)\"\n      >\n        <slot name=\"prev-text\">\n          {{ prevText }}\n        </slot>\n      </component>\n    </li>\n    <!-- Ellipsis start -->\n    <li v-if=\"showFirstDots\" v-bind=\"ellipsisProps.li\">\n      <span v-bind=\"ellipsisProps.span\">\n        <slot name=\"ellipsis-text\">\n          {{ ellipsisText || '...' }}\n        </slot>\n      </span>\n    </li>\n    <!-- Main -->\n    <li\n      v-for=\"page in pages\"\n      :key=\"`page-${page.number}`\"\n      :class=\"[\n        'page-item',\n        {\n          'disabled': disabledBoolean,\n          'active': isActivePage(page.number),\n          'flex-fill': computedFill,\n          'd-flex': computedFill && !disabledBoolean,\n        },\n        pageClass,\n      ]\"\n      role=\"presentation\"\n      :aria-hidden=\"disabledBoolean || undefined\"\n    >\n      <component\n        :is=\"disabledBoolean ? 'span' : 'button'\"\n        :key=\"`page-${page.number}`\"\n        :class=\"['page-link', {'flex-grow-1': !disabledBoolean && computedFill}]\"\n        :aria-controls=\"ariaControls || undefined\"\n        :aria-disabled=\"disabledBoolean ? true : undefined\"\n        :aria-label=\"labelPage ? `${labelPage} ${page.number}` : undefined\"\n        :aria-posinset=\"page.number\"\n        :aria-checked=\"isActivePage(page.number)\"\n        :aria-setsize=\"numberOfPages\"\n        role=\"menuitemradio\"\n        :type=\"disabledBoolean ? undefined : 'button'\"\n        :tabindex=\"getTabIndex(page.number)\"\n        @click=\"pageClick($event, page.number)\"\n      >\n        <slot\n          name=\"page\"\n          :active=\"isActivePage(page.number)\"\n          :disabled=\"disabledBoolean\"\n          :page=\"page.number\"\n          :index=\"page.number - 1\"\n          :content=\"page.number\"\n        >\n          {{ page.number }}\n        </slot>\n      </component>\n    </li>\n\n    <!-- Ellipsis end -->\n    <li v-if=\"showLastDots\" v-bind=\"ellipsisProps.li\">\n      <span v-bind=\"ellipsisProps.span\">\n        <slot name=\"ellipsis-text\">\n          {{ ellipsisText || '...' }}\n        </slot>\n      </span>\n    </li>\n    <!-- Next -->\n    <li v-bind=\"nextButtonProps.li\">\n      <component\n        v-bind=\"nextButtonProps.button\"\n        :is=\"nextButtonProps.button.is\"\n        @click=\"pageClick($event, modelValueNumber + 1)\"\n      >\n        <slot name=\"next-text\">\n          {{ nextText }}\n        </slot>\n      </component>\n    </li>\n    <!-- Last -->\n    <li v-if=\"!lastNumberBoolean && !hideGotoEndButtonsBoolean\" v-bind=\"lastEndButtonProps.li\">\n      <component\n        v-bind=\"lastEndButtonProps.button\"\n        :is=\"lastEndButtonProps.button.is\"\n        @click=\"pageClick($event, numberOfPages)\"\n      >\n        <slot name=\"last-text\">\n          {{ lastText }}\n        </slot>\n      </component>\n    </li>\n  </ul>\n</template>\n\n<script setup lang=\"ts\">\nimport {BvEvent} from '../../utils'\nimport {computed, toRef, watch} from 'vue'\nimport type {AlignmentJustifyContent, Booleanish, ClassValue, Size} from '../../types'\nimport {useAlignment, useBooleanish} from '../../composables'\nimport {useToNumber, useVModel} from '@vueuse/core'\n\n// Threshold of limit size when we start/stop showing ellipsis\nconst ELLIPSIS_THRESHOLD = 3\n\nconst props = withDefaults(\n  defineProps<{\n    align?: AlignmentJustifyContent | 'fill'\n    ariaControls?: string\n    ariaLabel?: string\n    disabled?: Booleanish\n    ellipsisClass?: ClassValue\n    ellipsisText?: string\n    firstClass?: ClassValue\n    firstNumber?: Booleanish\n    firstText?: string\n    hideEllipsis?: Booleanish\n    hideGotoEndButtons?: Booleanish\n    labelFirstPage?: string\n    labelLastPage?: string\n    labelNextPage?: string\n    labelPage?: string\n    labelPrevPage?: string\n    lastClass?: ClassValue\n    lastNumber?: Booleanish\n    lastText?: string\n    limit?: number\n    modelValue?: string | number\n    nextClass?: ClassValue\n    nextText?: string\n    pageClass?: ClassValue\n    perPage?: string | number\n    pills?: Booleanish\n    prevClass?: ClassValue\n    prevText?: string\n    size?: Size\n    totalRows?: string | number\n  }>(),\n  {\n    align: 'start',\n    ariaControls: undefined,\n    ariaLabel: 'Pagination',\n    disabled: false,\n    ellipsisClass: undefined,\n    ellipsisText: '\\u2026',\n    firstClass: undefined,\n    firstNumber: false,\n    firstText: '\\u00AB',\n    hideEllipsis: false,\n    hideGotoEndButtons: false,\n    labelFirstPage: 'Go to first page',\n    labelLastPage: 'Go to last page',\n    labelNextPage: 'Go to next page',\n    labelPage: 'Go to page',\n    labelPrevPage: 'Go to previous page',\n    lastClass: undefined,\n    lastNumber: false,\n    lastText: '\\u00BB',\n    limit: 5,\n    modelValue: 1,\n    nextClass: undefined,\n    nextText: '\\u203A',\n    pageClass: undefined,\n    perPage: DEFAULT_PER_PAGE,\n    pills: false,\n    prevClass: undefined,\n    prevText: '\\u2039',\n    size: undefined,\n    totalRows: DEFAULT_TOTAL_ROWS,\n  }\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: number]\n  'page-click': [event: BvEvent, pageNumber: number]\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst firstNumberBoolean = useBooleanish(() => props.firstNumber)\nconst hideEllipsisBoolean = useBooleanish(() => props.hideEllipsis)\nconst hideGotoEndButtonsBoolean = useBooleanish(() => props.hideGotoEndButtons)\nconst lastNumberBoolean = useBooleanish(() => props.lastNumber)\nconst pillsBoolean = useBooleanish(() => props.pills)\n\nconst perPageNumber = useToNumber(() => props.perPage, {nanToZero: true, method: 'parseInt'})\nconst totalRowsNumber = useToNumber(() => props.totalRows, {nanToZero: true, method: 'parseInt'})\nconst modelValueNumber = useToNumber(modelValue, {nanToZero: true, method: 'parseInt'})\n\nconst perPageSanitized = toRef(() => Math.max(perPageNumber.value || DEFAULT_PER_PAGE, 1))\nconst totalRowsSanitized = toRef(() => Math.max(totalRowsNumber.value || DEFAULT_TOTAL_ROWS, 0))\n// Use Active to on page-item to denote active tab\nconst numberOfPages = toRef(() => Math.ceil(totalRowsSanitized.value / perPageSanitized.value))\nconst computedFill = toRef(() => props.align === 'fill')\n// This doesn't use the computedFill util because TS cannot infer that it would never be 'fill'\nconst justifyAlign = toRef(() => (props.align === 'fill' ? 'start' : props.align))\n\nconst alignment = useAlignment(justifyAlign)\n\nconst isActivePage = (pageNumber: number) => pageNumber === modelValueNumber.value\nconst getTabIndex = (num: number) => (disabledBoolean.value ? null : isActivePage(num) ? '0' : '-1')\n\nconst checkDisabled = (num: number) =>\n  disabledBoolean.value ||\n  isActivePage(num) ||\n  modelValueNumber.value < 1 ||\n  // Check if the number is out of bounds\n  num < 1 ||\n  num > numberOfPages.value\n\nconst firstDisabled = computed(() => checkDisabled(1))\nconst prevDisabled = computed(() => checkDisabled(modelValueNumber.value - 1))\nconst lastDisabled = computed(() => checkDisabled(numberOfPages.value))\nconst nextDisabled = computed(() => checkDisabled(modelValueNumber.value + 1))\n\nconst getEndButtonProps = (dis: boolean, classVal: ClassValue) => ({\n  li: {\n    class: [\n      'page-item',\n      {\n        'disabled': dis,\n        'flex-fill': computedFill.value,\n        'd-flex': computedFill.value && !dis,\n      },\n      classVal,\n    ],\n  },\n  button: {\n    'is': dis ? 'span' : 'button',\n    'class': ['page-link', {'flex-grow-1': !dis && computedFill.value}],\n    'aria-label': props.labelFirstPage,\n    'aria-controls': props.ariaControls || undefined,\n    'aria-disabled': dis ? true : undefined,\n    'role': 'menuitem',\n    'type': dis ? undefined : 'button',\n    'tabindex': dis ? undefined : '-1',\n  },\n})\n\nconst firstButtonProps = computed(() => getEndButtonProps(firstDisabled.value, props.firstClass))\nconst prevButtonProps = computed(() => getEndButtonProps(prevDisabled.value, props.prevClass))\nconst nextButtonProps = computed(() => getEndButtonProps(nextDisabled.value, props.nextClass))\nconst lastEndButtonProps = computed(() => getEndButtonProps(lastDisabled.value, props.lastClass))\n\nconst ellipsisProps = computed(() => ({\n  li: {\n    class: [\n      'page-item',\n      'disabled',\n      'bv-d-xs-down-none',\n      computedFill.value ? 'flex-fill' : '',\n      props.ellipsisClass,\n    ],\n    role: 'separator',\n  },\n  span: {\n    class: ['page-link'],\n  },\n}))\n\nconst computedWrapperClasses = computed(() => [\n  alignment.value,\n  {\n    [`pagination-${props.size}`]: props.size !== undefined,\n    'b-pagination-pills': pillsBoolean.value,\n  },\n])\n\nconst startNumber = computed(() => {\n  let lStartNumber: number\n  const pagesLeft: number = numberOfPages.value - modelValueNumber.value\n\n  if (pagesLeft + 2 < props.limit && props.limit > ELLIPSIS_THRESHOLD) {\n    lStartNumber = numberOfPages.value - numberOfLinks.value + 1\n  } else {\n    // Middle and beginning calculation.\n    lStartNumber = modelValueNumber.value - Math.floor(numberOfLinks.value / 2)\n  }\n  // Negative due at times\n  if (lStartNumber < 1) {\n    lStartNumber = 1\n  } else if (lStartNumber > numberOfPages.value - numberOfLinks.value) {\n    lStartNumber = numberOfPages.value - numberOfLinks.value + 1\n  }\n  //why check for this?\n  // if (showFirstDots.value && cfirstNumber && lStartNumber < 4) {\n  //   lStartNumber = 1\n  // }\n\n  // Special handling for lower limits (where ellipsis are never shown)\n  if (props.limit <= ELLIPSIS_THRESHOLD) {\n    if (lastNumberBoolean.value && numberOfPages.value === lStartNumber + numberOfLinks.value - 1) {\n      lStartNumber = Math.max(lStartNumber - 1, 1)\n    }\n  }\n  return lStartNumber\n})\n\nconst showFirstDots = computed(() => {\n  const pagesLeft = numberOfPages.value - modelValueNumber.value\n  let rShowDots = false\n\n  if (pagesLeft + 2 < props.limit && props.limit > ELLIPSIS_THRESHOLD) {\n    if (props.limit > ELLIPSIS_THRESHOLD) {\n      rShowDots = true\n    }\n  } else {\n    if (props.limit > ELLIPSIS_THRESHOLD) {\n      rShowDots = !!(!hideEllipsisBoolean.value || firstNumberBoolean.value)\n    }\n  }\n  if (startNumber.value <= 1) {\n    rShowDots = false\n  }\n\n  if (rShowDots && firstNumberBoolean.value && startNumber.value < 4) {\n    rShowDots = false\n  }\n\n  return rShowDots\n})\n\n//Calculate the number of links considering limit\nconst numberOfLinks = computed(() => {\n  let n: number = props.limit\n\n  if (numberOfPages.value <= props.limit) {\n    n = numberOfPages.value\n  } else if (modelValueNumber.value < props.limit - 1 && props.limit > ELLIPSIS_THRESHOLD) {\n    if (!hideEllipsisBoolean.value || lastNumberBoolean.value) {\n      n = props.limit - (firstNumberBoolean.value ? 0 : 1)\n    }\n    n = Math.min(n, props.limit)\n  } else if (\n    numberOfPages.value - modelValueNumber.value + 2 < props.limit &&\n    props.limit > ELLIPSIS_THRESHOLD\n  ) {\n    if (!hideEllipsisBoolean.value || firstNumberBoolean.value) {\n      n = props.limit - (lastNumberBoolean.value ? 0 : 1)\n    }\n  } else {\n    // We consider ellipsis tabs as their own page links\n    if (props.limit > ELLIPSIS_THRESHOLD) {\n      n = props.limit - (hideEllipsisBoolean.value ? 0 : 2)\n    }\n  }\n\n  return n\n})\n\nconst showLastDots = computed(() => {\n  const paginationWindowEnd = numberOfPages.value - numberOfLinks.value // The start of the last window of page links\n\n  let rShowDots = false\n\n  if (modelValueNumber.value < props.limit - 1 && props.limit > ELLIPSIS_THRESHOLD) {\n    if (!hideEllipsisBoolean.value || lastNumberBoolean.value) {\n      rShowDots = true\n    }\n  } else {\n    if (props.limit > ELLIPSIS_THRESHOLD) {\n      rShowDots = !!(!hideEllipsisBoolean.value || lastNumberBoolean.value)\n    }\n  }\n  if (startNumber.value > paginationWindowEnd) {\n    rShowDots = false\n  }\n  const lastPageNumber = startNumber.value + numberOfLinks.value - 1\n\n  if (rShowDots && lastNumberBoolean.value && lastPageNumber > numberOfPages.value - 3) {\n    rShowDots = false\n  }\n\n  return rShowDots\n})\n\nconst pagination = computed(() => ({\n  pageSize: perPageSanitized.value,\n  totalRows: totalRowsNumber.value,\n  numberOfPages: numberOfPages.value,\n}))\n\nconst pageClick = (event: MouseEvent, pageNumber: number) => {\n  if (pageNumber === modelValueNumber.value) return\n\n  const clickEvent = new BvEvent('page-click', {\n    cancelable: true,\n    target: event.target,\n  })\n  emit('page-click', clickEvent, pageNumber)\n\n  if (clickEvent.defaultPrevented) return\n\n  modelValue.value = pageNumber\n\n  //    nextTick(() => {\n  //  if (isVisible(target) && un_element.contains(target)) {\n  //  attemptFocus(target)\n  //} else {\n  //this.focusCurrent()\n  //}\n  // })\n}\n\nwatch(modelValueNumber, (newValue) => {\n  const sanitizeCurrentPage = (value: number, numberOfPages: number) => {\n    const page = value || 1\n    return page > numberOfPages ? numberOfPages : page < 1 ? 1 : page\n  }\n  const calculatedValue = sanitizeCurrentPage(newValue, numberOfPages.value)\n  if (calculatedValue === modelValue.value) return\n  modelValue.value = calculatedValue\n})\n\nwatch(pagination, (oldValue, newValue) => {\n  if (newValue.pageSize !== oldValue.pageSize && newValue.totalRows === oldValue.totalRows) {\n    // If the page size changes, reset to page 1\n    modelValue.value = 1\n  } else if (\n    newValue.numberOfPages !== oldValue.numberOfPages &&\n    modelValueNumber.value > newValue.numberOfPages\n  ) {\n    // If `numberOfPages` changes and is less than\n    // the `currentPage` number, reset to page 1\n    modelValue.value = 1\n  }\n})\n\nconst pages = computed(() =>\n  Array.from({length: numberOfLinks.value}, (_, index) => ({\n    number: startNumber.value + index,\n  }))\n)\n</script>\n\n<script lang=\"ts\">\nconst DEFAULT_PER_PAGE = 20\nconst DEFAULT_TOTAL_ROWS = 0\n</script>\n","<template>\n  <component :is=\"wrapperTag\" :class=\"wrapperClasses\">\n    <component\n      v-bind=\"$attrs\"\n      :is=\"tag\"\n      class=\"placeholder\"\n      :class=\"computedClasses\"\n      :style=\"computedStyle\"\n    />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, type CSSProperties, toRef} from 'vue'\nimport type {ColorVariant, PlaceholderAnimation, PlaceholderSize} from '../../types'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(\n  defineProps<{\n    animation?: PlaceholderAnimation\n    cols?: string | number\n    size?: PlaceholderSize\n    tag?: string\n    variant?: ColorVariant | null\n    width?: string | number\n    wrapperTag?: string\n  }>(),\n  {\n    animation: undefined,\n    cols: 12,\n    size: 'md',\n    tag: 'span',\n    variant: null,\n    width: undefined,\n    wrapperTag: 'span',\n  }\n)\n\nconst widthString = toRef(() =>\n  props.width === undefined\n    ? undefined\n    : typeof props.width === 'number'\n    ? props.width.toString()\n    : props.width.replace('%', '')\n)\n\nconst colsString = toRef(() =>\n  props.cols === undefined\n    ? undefined\n    : typeof props.cols === 'number'\n    ? props.cols.toString()\n    : props.cols\n)\n\nconst computedClasses = computed(() => ({\n  [`col-${colsString.value}`]: colsString.value !== undefined && widthString.value === undefined,\n  [`bg-${props.variant}`]: props.variant !== null,\n  [`placeholder-${props.size}`]: props.size !== 'md',\n}))\n\nconst wrapperClasses = computed(() => ({\n  [`placeholder-${props.animation}`]: props.animation !== undefined,\n}))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n  width: widthString.value === undefined ? undefined : `${widthString.value}%`,\n}))\n</script>\n","<template>\n  <BPlaceholder\n    class=\"btn disabled\"\n    :class=\"computedClasses\"\n    :animation=\"animation\"\n    :width=\"width\"\n    :cols=\"cols\"\n    :tag=\"tag\"\n    :style=\"{'cursor': 'wait', 'pointer-events': 'auto'}\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport BPlaceholder from './BPlaceholder.vue'\nimport type {ColorVariant, PlaceholderAnimation} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    animation?: PlaceholderAnimation\n    cols?: string | number\n    tag?: string\n    variant?: ColorVariant | null\n    width?: string | number\n  }>(),\n  {\n    animation: undefined,\n    cols: undefined,\n    tag: 'div',\n    variant: 'primary',\n    width: undefined,\n  }\n)\n\nconst computedClasses = computed(() => ({\n  [`btn-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <BCard :img-bottom=\"imgBottom\">\n    <template v-if=\"!noImgBoolean\" #img>\n      <slot name=\"img\">\n        <BCardImg\n          :blank=\"!imgSrc ? true : false\"\n          :blank-color=\"imgBlankColor\"\n          :height=\"!imgSrc ? imgHeight : undefined\"\n          :src=\"imgSrc\"\n          :top=\"!imgBottom\"\n          :bottom=\"imgBottom\"\n          :style=\"{cursor: 'wait'}\"\n        />\n      </slot>\n    </template>\n\n    <template v-if=\"!noHeaderBoolean\" #header>\n      <slot name=\"header\">\n        <BPlaceholder\n          :width=\"headerWidth\"\n          :variant=\"headerVariant\"\n          :animation=\"headerAnimation\"\n          :size=\"headerSize\"\n        />\n      </slot>\n    </template>\n    <slot>\n      <BPlaceholder cols=\"7\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"4\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"6\" v-bind=\"defaultAttrs\" />\n      <BPlaceholder cols=\"8\" v-bind=\"defaultAttrs\" />\n    </slot>\n    <template v-if=\"!noFooterBoolean\" #footer>\n      <slot name=\"footer\">\n        <component\n          :is=\"footerComponent\"\n          :width=\"footerWidth\"\n          :animation=\"footerAnimation\"\n          :size=\"noButtonBoolean ? footerSize : undefined\"\n          :variant=\"footerVariant\"\n        />\n      </slot>\n    </template>\n  </BCard>\n</template>\n\n<script setup lang=\"ts\">\nimport BCard from '../BCard/BCard.vue'\nimport BCardImg from '../BCard/BCardImg.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport BPlaceholderButton from './BPlaceholderButton.vue'\nimport type {Booleanish, ColorVariant, PlaceholderAnimation, PlaceholderSize} from '../../types'\nimport {computed, toRef} from 'vue'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    animation?: PlaceholderAnimation\n    footerAnimation?: PlaceholderAnimation\n    footerSize?: PlaceholderSize\n    footerVariant?: ColorVariant | null\n    footerWidth?: string | number\n    headerAnimation?: PlaceholderAnimation\n    headerSize?: PlaceholderSize\n    headerVariant?: ColorVariant | null\n    headerWidth?: string | number\n    imgBlankColor?: string\n    imgBottom?: Booleanish\n    imgHeight?: string | number\n    imgSrc?: string\n    noButton?: Booleanish\n    noFooter?: Booleanish\n    noHeader?: Booleanish\n    noImg?: Booleanish\n    size?: PlaceholderSize\n    variant?: ColorVariant | null\n  }>(),\n  {\n    animation: undefined,\n    footerAnimation: undefined,\n    footerSize: 'md',\n    footerVariant: undefined,\n    footerWidth: 100,\n    headerAnimation: undefined,\n    headerSize: 'md',\n    headerVariant: undefined,\n    headerWidth: 100,\n    imgBlankColor: '#868e96',\n    imgBottom: false,\n    imgHeight: 100,\n    imgSrc: undefined,\n    noButton: false,\n    noFooter: false,\n    noHeader: false,\n    noImg: false,\n    size: 'md',\n    variant: undefined,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  footer?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  header?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  img?: (props: Record<string, never>) => any\n}>()\n\nconst noButtonBoolean = useBooleanish(() => props.noButton)\nconst noHeaderBoolean = useBooleanish(() => props.noHeader)\nconst noFooterBoolean = useBooleanish(() => props.noFooter)\nconst noImgBoolean = useBooleanish(() => props.noImg)\n\nconst defaultAttrs = computed(() => ({\n  animation: props.animation,\n  size: props.size,\n  variant: props.variant,\n}))\n\nconst footerComponent = toRef(() => (!noButtonBoolean.value ? BPlaceholderButton : BPlaceholder))\n</script>\n","<template>\n  <table v-if=\"!responsive\" :class=\"computedClasses\">\n    <slot />\n  </table>\n  <div v-else :class=\"responsiveClasses\">\n    <table :class=\"computedClasses\">\n      <slot />\n    </table>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed} from 'vue'\nimport {useBooleanish} from '../../composables'\nimport type {BTableSimpleProps} from '../../types'\n\n// TODO alphabetize the lists for tables\n// TODO all table things do not declare their props\n// TODO some props are not used. ex id, fixed, etc\n// TODO Attrs fallthrough will attach to either responsive or table, but you can't assign attrs to table if it is responsive. So we will need an attrs & class\nconst props = withDefaults(defineProps<BTableSimpleProps>(), {\n  borderVariant: null,\n  tableClass: undefined,\n  variant: null,\n  bordered: false,\n  borderless: false,\n  captionTop: false,\n  dark: false,\n  hover: false,\n  id: undefined,\n  noBorderCollapse: false,\n  outlined: false,\n  fixed: false,\n  responsive: false,\n  stacked: false,\n  striped: false,\n  stripedColumns: false,\n  small: false,\n  stickyHeader: false,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst captionTopBoolean = useBooleanish(() => props.captionTop)\nconst borderlessBoolean = useBooleanish(() => props.borderless)\nconst borderedBoolean = useBooleanish(() => props.bordered)\nconst darkBoolean = useBooleanish(() => props.dark)\nconst hoverBoolean = useBooleanish(() => props.hover)\nconst smallBoolean = useBooleanish(() => props.small)\nconst stripedBoolean = useBooleanish(() => props.striped)\nconst stickyHeaderBoolean = useBooleanish(() => props.stickyHeader)\nconst stripedColumnsBoolean = useBooleanish(() => props.stripedColumns)\nconst resolvedResponsive = useBooleanish(() => props.responsive)\nconst resolvedStacked = useBooleanish(() => props.stacked)\n\nconst computedClasses = computed(() => [\n  props.tableClass,\n  'table',\n  'b-table',\n  {\n    'table-bordered': borderedBoolean.value,\n    'table-borderless': borderlessBoolean.value,\n    [`border-${props.borderVariant}`]: props.borderVariant !== null,\n    'caption-top': captionTopBoolean.value,\n    'table-dark': darkBoolean.value,\n    'table-hover': hoverBoolean.value,\n    'b-table-stacked': resolvedStacked.value === true,\n    [`b-table-stacked-${resolvedStacked.value}`]: typeof resolvedStacked.value === 'string',\n    'table-striped': stripedBoolean.value,\n    'table-sm': smallBoolean.value,\n    [`table-${props.variant}`]: props.variant !== null,\n    'table-striped-columns': stripedColumnsBoolean.value,\n  },\n])\n\nconst responsiveClasses = computed(() => ({\n  'table-responsive': resolvedResponsive.value === true,\n  [`table-responsive-${resolvedResponsive.value}`]: typeof resolvedResponsive.value === 'string',\n  'b-table-sticky-header': stickyHeaderBoolean.value,\n}))\n</script>\n","<template>\n  <BTableSimple>\n    <slot v-if=\"!hideHeaderBoolean\" name=\"thead\">\n      <thead>\n        <tr>\n          <th v-for=\"(_, i) in computedHeaderColumnsLength\" :key=\"i\">\n            <BPlaceholder\n              :size=\"headerSize\"\n              :variant=\"headerVariant\"\n              :animation=\"headerAnimation\"\n              :width=\"headerCellWidth\"\n            />\n          </th>\n        </tr>\n      </thead>\n    </slot>\n    <slot>\n      <tbody>\n        <tr v-for=\"(_, j) in rowsNumber\" :key=\"j\">\n          <td v-for=\"(__, k) in columnsNumber\" :key=\"k\">\n            <BPlaceholder\n              :size=\"size\"\n              :variant=\"variant\"\n              :animation=\"animation\"\n              :width=\"cellWidth\"\n            />\n          </td>\n        </tr>\n      </tbody>\n    </slot>\n    <slot v-if=\"showFooterBoolean\" name=\"tfoot\">\n      <tfoot>\n        <tr>\n          <th v-for=\"(_, l) in computedFooterColumnsLength\" :key=\"l\">\n            <BPlaceholder\n              :size=\"footerSize\"\n              :variant=\"footerVariant\"\n              :animation=\"footerAnimation\"\n              :width=\"footerCellWidth\"\n            />\n          </th>\n        </tr>\n      </tfoot>\n    </slot>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\">\nimport {toRef} from 'vue'\nimport type {Booleanish, ColorVariant, PlaceholderAnimation, PlaceholderSize} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport BTableSimple from '../BTable/BTableSimple.vue'\nimport BPlaceholder from './BPlaceholder.vue'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(\n  defineProps<{\n    animation?: PlaceholderAnimation\n    cellWidth?: string | number\n    columns?: string | number\n    footerAnimation?: PlaceholderAnimation\n    footerCellWidth?: string | number\n    footerColumns?: string | number\n    footerSize?: PlaceholderSize\n    footerVariant?: ColorVariant | null\n    headerAnimation?: PlaceholderAnimation\n    headerCellWidth?: string | number\n    headerColumns?: string | number\n    headerSize?: PlaceholderSize\n    headerVariant?: ColorVariant | null\n    hideHeader?: Booleanish\n    rows?: string | number\n    showFooter?: Booleanish\n    size?: PlaceholderSize\n    variant?: ColorVariant | null\n  }>(),\n  {\n    animation: undefined,\n    cellWidth: 100,\n    columns: 5,\n    footerAnimation: undefined,\n    footerCellWidth: 100,\n    footerColumns: undefined,\n    footerSize: 'md',\n    footerVariant: undefined,\n    headerAnimation: undefined,\n    headerCellWidth: 100,\n    headerColumns: undefined,\n    headerSize: 'md',\n    headerVariant: undefined,\n    hideHeader: false,\n    rows: 3,\n    showFooter: false,\n    size: 'md',\n    variant: undefined,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  tfoot?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  thead?: (props: Record<string, never>) => any\n}>()\n\nconst columnsToNumber = useToNumber(() => props.columns)\nconst rowsToNumber = useToNumber(() => props.rows)\nconst computedHeaderColumns = toRef(() => props.headerColumns ?? NaN)\nconst computedFooterColumns = toRef(() => props.footerColumns ?? NaN)\nconst headerColumnsNumber = useToNumber(computedHeaderColumns)\nconst footerColumnsNumber = useToNumber(computedFooterColumns)\n\nconst columnsNumber = toRef(() => columnsToNumber.value || 5)\nconst rowsNumber = toRef(() => rowsToNumber.value || 3)\n\nconst computedHeaderColumnsLength = toRef(() =>\n  props.headerColumns === undefined ? columnsNumber.value : headerColumnsNumber.value\n)\nconst computedFooterColumnsLength = toRef(() =>\n  props.footerColumns === undefined ? columnsNumber.value : footerColumnsNumber.value\n)\n\nconst hideHeaderBoolean = useBooleanish(() => props.hideHeader)\nconst showFooterBoolean = useBooleanish(() => props.showFooter)\n</script>\n","<template>\n  <slot v-if=\"loadingBoolean\" name=\"loading\" />\n  <slot v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish} from '../../types'\nimport {useBooleanish} from '../../composables'\n\nconst props = withDefaults(\n  defineProps<{\n    loading?: Booleanish\n  }>(),\n  {\n    loading: false,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  loading?: (props: Record<string, never>) => any\n}>()\n\nconst loadingBoolean = useBooleanish(() => props.loading)\n</script>\n","<template>\n  <div\n    class=\"progress-bar\"\n    :class=\"computedClasses\"\n    role=\"progressbar\"\n    :aria-valuenow=\"value\"\n    aria-valuemin=\"0\"\n    :aria-valuemax=\"max\"\n    :style=\"{width: computedWidth}\"\n  >\n    <slot>\n      {{ computedLabel }}\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BProgressBarProps} from '../../types'\nimport {useBooleanish, useColorVariantClasses} from '../../composables'\nimport {computed, inject} from 'vue'\nimport {progressInjectionKey} from '../../utils'\nimport {useToNumber} from '@vueuse/core'\n\nconst props = withDefaults(defineProps<BProgressBarProps>(), {\n  animated: false,\n  bgVariant: null,\n  label: undefined,\n  labelHtml: undefined,\n  max: undefined,\n  precision: 0,\n  showProgress: false,\n  showValue: false,\n  striped: false,\n  textVariant: null,\n  value: 0,\n  variant: null,\n})\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst parentData = inject(progressInjectionKey, null)\n\nconst animatedBoolean = useBooleanish(() => props.animated)\nconst showProgressBoolean = useBooleanish(() => props.showProgress)\nconst showValueBoolean = useBooleanish(() => props.showValue)\nconst stripedBoolean = useBooleanish(() => props.striped)\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    'progress-bar-animated': animatedBoolean.value || parentData?.animated.value,\n    'progress-bar-striped':\n      stripedBoolean.value ||\n      parentData?.striped.value ||\n      animatedBoolean.value ||\n      parentData?.animated.value,\n  },\n])\n\nconst numberPrecision = useToNumber(() => props.precision)\nconst numberValue = useToNumber(() => props.value)\nconst numberMax = useToNumber(() => props.max ?? NaN)\nconst parentMaxNumber = useToNumber(() => parentData?.max.value ?? NaN)\n\nconst computedLabel = computed(() =>\n  props.labelHtml !== undefined\n    ? props.labelHtml\n    : showValueBoolean.value || parentData?.showValue.value\n    ? numberValue.value.toFixed(numberPrecision.value)\n    : showProgressBoolean.value || parentData?.showProgress.value\n    ? ((numberValue.value * 100) / (numberMax.value || 100)).toFixed(numberPrecision.value)\n    : props.label !== undefined\n    ? props.label\n    : ''\n)\n\nconst computedWidth = computed(() =>\n  parentMaxNumber.value\n    ? `${(numberValue.value * 100) / parentMaxNumber.value}%`\n    : numberMax.value\n    ? `${(numberValue.value * 100) / numberMax.value}%`\n    : typeof props.value === 'string'\n    ? props.value\n    : `${props.value}%`\n)\n</script>\n","<template>\n  <div class=\"progress\" :style=\"{height}\">\n    <slot>\n      <BProgressBar\n        :animated=\"animated\"\n        :max=\"max\"\n        :precision=\"precision\"\n        :show-progress=\"showProgress\"\n        :show-value=\"showValue\"\n        :striped=\"striped\"\n        :value=\"value\"\n        :variant=\"variant\"\n        :text-variant=\"textVariant\"\n        :bg-variant=\"bgVariant\"\n      />\n    </slot>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport BProgressBar from './BProgressBar.vue'\nimport type {BProgressBarProps} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {provide, toRef} from 'vue'\nimport {progressInjectionKey} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<\n    {\n      height?: string\n    } & Omit<BProgressBarProps, 'label' | 'labelHtml'>\n  >(),\n  {\n    height: undefined,\n    // BProgressBar props\n    animated: undefined,\n    bgVariant: undefined,\n    max: 100,\n    precision: undefined,\n    showProgress: undefined,\n    showValue: undefined,\n    striped: undefined,\n    textVariant: undefined,\n    value: undefined,\n    variant: undefined,\n    // End BProgressBar props\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst animatedBoolean = useBooleanish(() => props.animated)\nconst showProgressBoolean = useBooleanish(() => props.showProgress)\nconst showValueBoolean = useBooleanish(() => props.showValue)\nconst stripedBoolean = useBooleanish(() => props.striped)\n\nprovide(progressInjectionKey, {\n  animated: animatedBoolean,\n  max: toRef(() => props.max),\n  showProgress: showProgressBoolean,\n  showValue: showValueBoolean,\n  striped: stripedBoolean,\n})\n</script>\n","<template>\n  <component :is=\"tag\" class=\"row\" :class=\"computedClasses\">\n    <slot />\n  </component>\n</template>\n\n<script lang=\"ts\">\nimport {computed, defineComponent, type PropType, type SlotsType} from 'vue'\nimport {getBreakpointProps, getClasses} from '../utils'\nimport type {\n  AlignmentContent,\n  AlignmentJustifyContent,\n  AlignmentVertical,\n  Booleanish,\n} from '../types'\nimport {useAlignment, useBooleanish} from '../composables'\n\nconst rowColsProps = getBreakpointProps('cols', [''], {type: [String, Number], default: null})\n\nexport default defineComponent({\n  name: 'BRow',\n  slots: Object as SlotsType<{\n    default?: Record<string, never>\n  }>,\n  props: {\n    tag: {type: String, default: 'div'},\n    gutterX: {type: String, default: null},\n    gutterY: {type: String, default: null},\n    noGutters: {type: [Boolean, String] as PropType<Booleanish>, default: false},\n    alignV: {type: String as PropType<AlignmentVertical>, default: null},\n    alignH: {type: String as PropType<AlignmentJustifyContent>, default: null},\n    alignContent: {type: String as PropType<AlignmentContent>, default: null},\n    ...rowColsProps,\n  },\n  setup(props) {\n    const noGuttersBoolean = useBooleanish(() => props.noGutters)\n    const alignment = useAlignment(() => props.alignH)\n\n    const rowColsClasses = computed(() => getClasses(props, rowColsProps, 'cols', 'row-cols'))\n\n    const computedClasses = computed(() => [\n      rowColsClasses.value,\n      {\n        [`gx-${props.gutterX}`]: props.gutterX !== null,\n        [`gy-${props.gutterY}`]: props.gutterY !== null,\n        'g-0': noGuttersBoolean.value,\n        [`align-items-${props.alignV}`]: props.alignV !== null,\n        [alignment.value]: props.alignH !== null,\n        [`align-content-${props.alignContent}`]: props.alignContent !== null,\n      },\n    ])\n\n    return {\n      computedClasses,\n    }\n  },\n})\n</script>\n","<template>\n  <tbody :class=\"computedClasses\">\n    <slot />\n  </tbody>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ColorVariant} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    variant?: ColorVariant | null\n  }>(),\n  {\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <td\n    :scope=\"scope\"\n    :class=\"computedClasses\"\n    :colspan=\"colspan\"\n    :rowspan=\"rowspan\"\n    :data-label=\"stackedHeading\"\n  >\n    <div v-if=\"stackedHeading\">\n      <slot />\n    </div>\n    <slot v-else />\n  </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, ColorVariant} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    colspan?: string | number\n    rowspan?: string | number\n    stackedHeading?: string\n    stickyColumn?: Booleanish\n    variant?: ColorVariant | null\n  }>(),\n  {\n    colspan: undefined,\n    rowspan: undefined,\n    stackedHeading: undefined,\n    stickyColumn: false,\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst stickyColumnBoolean = useBooleanish(() => props.stickyColumn)\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': stickyColumnBoolean.value,\n  'table-b-table-default': stickyColumnBoolean.value && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n  <tfoot :class=\"computedClasses\">\n    <slot />\n  </tfoot>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ColorVariant} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    variant?: ColorVariant | null\n  }>(),\n  {\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <th\n    :scope=\"scope\"\n    :class=\"computedClasses\"\n    :colspan=\"colspan\"\n    :rowspan=\"rowspan\"\n    :data-label=\"stackedHeading\"\n  >\n    <div v-if=\"stackedHeading !== undefined\">\n      <slot />\n    </div>\n    <slot v-else />\n  </th>\n</template>\n\n<script setup lang=\"ts\">\nimport type {Booleanish, ColorVariant} from '../../types'\nimport {useBooleanish} from '../../composables'\nimport {computed, toRef} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    colspan?: string | number\n    rowspan?: string | number\n    stackedHeading?: string\n    stickyColumn?: Booleanish\n    variant?: ColorVariant | null\n  }>(),\n  {\n    colspan: undefined,\n    rowspan: undefined,\n    stackedHeading: undefined,\n    stickyColumn: false,\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst stickyColumnBoolean = useBooleanish(() => props.stickyColumn)\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': stickyColumnBoolean.value,\n  'table-b-table-default': stickyColumnBoolean.value && props.variant === null,\n}))\n\nconst scope = toRef(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n  <thead :class=\"computedClasses\">\n    <slot />\n  </thead>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ColorVariant} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    variant?: ColorVariant | null\n  }>(),\n  {\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tr :class=\"computedClasses\">\n    <slot />\n  </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport type {ColorVariant} from '../../types'\nimport {computed} from 'vue'\n\nconst props = withDefaults(\n  defineProps<{\n    variant?: ColorVariant | null\n  }>(),\n  {\n    variant: null,\n  }\n)\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <BTableSimple\n    :id=\"id\"\n    :bordered=\"bordered\"\n    :borderless=\"borderless\"\n    :border-variant=\"borderVariant\"\n    :caption-top=\"captionTop\"\n    :dark=\"dark\"\n    :fixed=\"fixed\"\n    :hover=\"hover\"\n    :no-border-collapse=\"noBorderCollapse\"\n    :outlined=\"outlined\"\n    :responsive=\"responsive\"\n    :small=\"small\"\n    :stacked=\"computedStacked\"\n    :sticky-header=\"stickyHeader\"\n    :striped=\"striped\"\n    :table-class=\"computedTableClasses\"\n    :variant=\"variant\"\n    :striped-columns=\"stripedColumns\"\n  >\n    <BThead :variant=\"headVariant\" :class=\"theadClass\">\n      <slot v-if=\"$slots['thead-top']\" name=\"thead-top\" />\n      <BTr :variant=\"headRowVariant\" :class=\"theadTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :variant=\"field.variant\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          v-bind=\"field.thAttr\"\n          @click=\"headerClicked(field, $event)\"\n        >\n          <slot\n            :name=\"$slots[`head(${field.key})`] ? `head(${field.key})` : 'head()'\"\n            :label=\"field.label\"\n            :column=\"field.key\"\n            :field=\"field\"\n            :is-foot=\"false\"\n          >\n            {{ getTableFieldHeadLabel(field) }}\n          </slot>\n        </BTh>\n      </BTr>\n      <BTr v-if=\"$slots['thead-sub']\">\n        <BTd\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :variant=\"field.variant\"\n          :class=\"[field.class, field.thClass]\"\n        >\n          <slot name=\"thead-sub\" :items=\"computedFields\" v-bind=\"field\">\n            {{ field.label }}\n          </slot>\n        </BTd>\n      </BTr>\n    </BThead>\n    <BTbody :class=\"tbodyClass\">\n      <slot\n        name=\"custom-body\"\n        :fields=\"computedFields\"\n        :items=\"items\"\n        :columns=\"computedFields.length\"\n      >\n        <BTr v-if=\"!computedStacked && $slots['top-row']\">\n          <slot name=\"top-row\" />\n        </BTr>\n\n        <template v-for=\"(item, itemIndex) in items\" :key=\"itemIndex\">\n          <BTr\n            :class=\"getRowClasses(item, 'row')\"\n            :variant=\"item._rowVariant\"\n            @click=\"!filterEvent($event) && emit('row-clicked', item, itemIndex, $event)\"\n            @dblclick=\"!filterEvent($event) && emit('row-dbl-clicked', item, itemIndex, $event)\"\n            @mouseenter=\"!filterEvent($event) && emit('row-hovered', item, itemIndex, $event)\"\n            @mouseleave=\"!filterEvent($event) && emit('row-unhovered', item, itemIndex, $event)\"\n          >\n            <BTd\n              v-for=\"field in computedFields\"\n              :key=\"field.key\"\n              :variant=\"item._cellVariants?.[field.key] ? null : field.variant\"\n              :class=\"getFieldRowClasses(field, item)\"\n              v-bind=\"field.tdAttr\"\n            >\n              <label v-if=\"computedStacked && labelStackedBoolean\" class=\"b-table-stacked-label\">\n                {{ getTableFieldHeadLabel(field) }}\n              </label>\n              <slot\n                :name=\"$slots[`cell(${field.key})`] ? `cell(${field.key})` : 'cell()'\"\n                :value=\"get(item, field.key)\"\n                :index=\"itemIndex\"\n                :item=\"item\"\n                :field=\"field\"\n                :items=\"items\"\n                :toggle-details=\"\n                  () => {\n                    toggleRowDetails(item)\n                  }\n                \"\n                :details-showing=\"item._showDetails ?? false\"\n              >\n                {{ formatItem(item, field.key, field.formatter) }}\n              </slot>\n            </BTd>\n          </BTr>\n\n          <BTr\n            v-if=\"item._showDetails === true && $slots['row-details']\"\n            :class=\"getRowClasses(item, 'row-details')\"\n            :variant=\"item._rowVariant\"\n          >\n            <BTd :colspan=\"computedFieldsTotal\">\n              <slot\n                name=\"row-details\"\n                :item=\"item\"\n                :toggle-details=\"\n                  () => {\n                    toggleRowDetails(item)\n                  }\n                \"\n                :fields=\"fields\"\n                :index=\"itemIndex\"\n              />\n            </BTd>\n          </BTr>\n        </template>\n        <BTr v-if=\"showEmptyBoolean && items.length === 0\" class=\"b-table-empty-slot\">\n          <BTd :colspan=\"computedFieldsTotal\">\n            <slot name=\"empty\" :items=\"items\">\n              {{ emptyText }}\n            </slot>\n          </BTd>\n        </BTr>\n        <BTr v-if=\"!computedStacked && $slots['bottom-row']\">\n          <slot name=\"bottom-row\" />\n        </BTr>\n      </slot>\n    </BTbody>\n    <BTfoot v-if=\"footCloneBoolean\" :variant=\"footVariant\" :class=\"tfootClass\">\n      <BTr :variant=\"footRowVariant\" :class=\"tfootTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :variant=\"field.variant\"\n          v-bind=\"field.thAttr\"\n          @click=\"headerClicked(field, $event, true)\"\n        >\n          <div class=\"d-inline-flex flex-nowrap align-items-center gap-1\">\n            <div>\n              <slot\n                :name=\"$slots[`foot(${field.key})`] ? `foot(${field.key})` : 'foot()'\"\n                :label=\"field.label\"\n                :column=\"field.key\"\n                :field=\"field\"\n                :is-foot=\"true\"\n              >\n                {{ getTableFieldHeadLabel(field) }}\n              </slot>\n            </div>\n          </div>\n        </BTh>\n      </BTr>\n    </BTfoot>\n    <BTfoot v-else-if=\"$slots['custom-foot']\">\n      <slot\n        name=\"custom-foot\"\n        :fields=\"computedFields\"\n        :items=\"items\"\n        :columns=\"computedFields.length\"\n      />\n    </BTfoot>\n    <caption v-if=\"$slots['table-caption'] || caption\">\n      <slot name=\"table-caption\">\n        {{ caption }}\n      </slot>\n    </caption>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, toRef} from 'vue'\nimport {useBooleanish} from '../../composables'\nimport type {BTableLiteProps, TableField, TableFieldObject, TableItem} from '../../types'\nimport type {TableFieldObjectFormatter} from '../../types/TableFieldObject'\nimport {filterEvent, get, getTableFieldHeadLabel, startCase} from '../../utils'\nimport BTableSimple from './BTableSimple.vue'\nimport BTbody from './BTbody.vue'\nimport BTd from './BTd.vue'\nimport BTfoot from './BTfoot.vue'\nimport BTh from './BTh.vue'\nimport BThead from './BThead.vue'\nimport BTr from './BTr.vue'\n\nconst props = withDefaults(defineProps<BTableLiteProps>(), {\n  caption: undefined,\n  align: undefined,\n  fields: () => [],\n  footClone: false,\n  items: () => [],\n  labelStacked: false,\n  showEmpty: false,\n  emptyText: 'There are no records to show',\n  emptyFilteredText: 'There are no records matching your request', // TODO not implemented\n  fieldColumnClass: undefined,\n  tbodyTrClass: undefined,\n  captionHtml: undefined,\n  detailsTdClass: undefined,\n  headVariant: undefined,\n  headRowVariant: undefined,\n  footRowVariant: undefined,\n  footVariant: undefined,\n  modelValue: undefined,\n  primaryKey: undefined,\n  tbodyClass: undefined,\n  tbodyTrAttr: undefined,\n  tfootClass: undefined,\n  tfootTrClass: undefined,\n  theadClass: undefined,\n  theadTrClass: undefined,\n  // BTableSimpleProps props\n  borderVariant: undefined,\n  tableClass: undefined,\n  variant: undefined,\n  bordered: undefined,\n  borderless: undefined,\n  captionTop: undefined,\n  dark: undefined,\n  hover: undefined,\n  id: undefined,\n  noBorderCollapse: undefined,\n  outlined: undefined,\n  fixed: undefined,\n  responsive: undefined,\n  stacked: undefined,\n  striped: undefined,\n  stripedColumns: undefined,\n  small: undefined,\n  stickyHeader: undefined,\n  // End BTableSimpleProps props\n})\n\nconst emit = defineEmits<{\n  'head-clicked': [\n    key: TableFieldObject['key'],\n    field: TableField,\n    event: MouseEvent,\n    isFooter: boolean,\n  ]\n  'row-clicked': [item: TableItem, index: number, event: MouseEvent]\n  'row-dbl-clicked': [item: TableItem, index: number, event: MouseEvent]\n  'row-hovered': [item: TableItem, index: number, event: MouseEvent]\n  'row-unhovered': [item: TableItem, index: number, event: MouseEvent]\n}>()\n\nconst footCloneBoolean = useBooleanish(() => props.footClone)\nconst labelStackedBoolean = useBooleanish(() => props.labelStacked)\nconst showEmptyBoolean = useBooleanish(() => props.showEmpty)\nconst computedStacked = useBooleanish(() => props.stacked)\n\nconst computedTableClasses = computed(() => [\n  props.tableClass,\n  {\n    [`align-${props.align}`]: props.align !== undefined,\n  },\n])\n\nconst computedFields = computed<TableFieldObject[]>(() => {\n  if (!props.fields.length && props.items.length) {\n    return Object.keys(props.items[0]).map((k) => {\n      const label = startCase(k)\n      return {\n        key: k,\n        label,\n        tdAttr: computedStacked.value === true ? {'data-label': label} : undefined,\n      }\n    })\n  }\n\n  return props.fields.map((f) => {\n    if (typeof f === 'string') {\n      const label = startCase(f)\n      return {\n        key: f,\n        label,\n        tdAttr: computedStacked.value === true ? {'data-label': label} : undefined,\n      }\n    }\n    return {\n      ...f,\n      tdAttr:\n        computedStacked.value === true ? {'data-label': startCase(f.key), ...f.tdAttr} : f.tdAttr,\n    }\n    // TODO handle Shortcut object (i.e. { 'foo_bar': 'This is Foo Bar' }\n  })\n})\nconst computedFieldsTotal = toRef(() => computedFields.value.length)\n\nconst formatItem = (\n  item: TableItem,\n  fieldKey: string,\n  formatter?: TableFieldObjectFormatter<typeof item>\n) => {\n  const val = get(item, fieldKey)\n  return formatter && typeof formatter === 'function' ? formatter(val, fieldKey, item) : val\n}\n\nconst headerClicked = (field: TableField, event: MouseEvent, isFooter = false) => {\n  const fieldKey = typeof field === 'string' ? field : field.key\n  emit('head-clicked', fieldKey, field, event, isFooter)\n}\n\nconst toggleRowDetails = (tr: TableItem) => {\n  tr._showDetails = !tr._showDetails\n}\n\nconst getFieldColumnClasses = (field: TableFieldObject) => [\n  field.class,\n  field.thClass,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n  props.fieldColumnClass\n    ? typeof props.fieldColumnClass === 'function'\n      ? props.fieldColumnClass(field)\n      : props.fieldColumnClass\n    : null,\n]\n\nconst getFieldRowClasses = (field: TableFieldObject, tr: TableItem) => [\n  field.class,\n  field.tdClass,\n  tr._cellVariants?.[field.key] ? `table-${tr._cellVariants[field.key]}` : null,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n]\n\nconst getRowClasses = (item: TableItem, type: 'row-details' | 'row') =>\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null\n</script>\n","<template>\n  <BTableLite\n    v-bind=\"props\"\n    :aria-busy=\"busyBoolean\"\n    :items=\"computedDisplayItems\"\n    :fields=\"computedFields\"\n    :table-class=\"tableClasses\"\n    :tbody-tr-class=\"getRowClasses\"\n    :field-column-class=\"getFieldColumnClasses\"\n    @head-clicked=\"onFieldHeadClick\"\n    @row-clicked=\"onRowClick\"\n  >\n    <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n      <slot :name=\"name\" v-bind=\"slotData\" />\n    </template>\n    <template #head()=\"scope\">\n      {{ getTableFieldHeadLabel(scope.field) }}\n      <template v-if=\"isSortable && scope.field.sortable && noSortableIconBoolean === false\">\n        <slot v-if=\"!sortDescBoolean\" v-bind=\"{...scope}\" name=\"sortAsc\">\n          <svg\n            :style=\"getIconStyle(scope.field)\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"16\"\n            height=\"16\"\n            fill=\"currentColor\"\n            class=\"bi bi-arrow-up-short\"\n            viewBox=\"0 0 16 16\"\n            aria-hidden\n          >\n            <path\n              fill-rule=\"evenodd\"\n              d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n            />\n          </svg>\n        </slot>\n        <slot v-else v-bind=\"{...scope}\" name=\"sortDesc\">\n          <svg\n            :style=\"getIconStyle(scope.field)\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"16\"\n            height=\"16\"\n            fill=\"currentColor\"\n            class=\"bi bi-arrow-down-short\"\n            viewBox=\"0 0 16 16\"\n            aria-hidden\n          >\n            <path\n              fill-rule=\"evenodd\"\n              d=\"M8 4a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L7.5 10.293V4.5A.5.5 0 0 1 8 4z\"\n            />\n          </svg>\n        </slot>\n      </template>\n    </template>\n    <template #custom-body=\"scope\">\n      <BTr v-if=\"busyBoolean\" class=\"b-table-busy-slot\" :class=\"getBusyRowClasses\">\n        <BTd :colspan=\"scope.fields.length\">\n          <slot name=\"table-busy\">\n            <BOverlay show>\n              <template #overlay>\n                <div class=\"d-flex align-items-center gap-2 mt-5\">\n                  <BSpinner />\n                  <strong>{{ busyLoadingText }}</strong>\n                </div>\n              </template>\n            </BOverlay>\n          </slot>\n        </BTd>\n      </BTr>\n    </template>\n  </BTableLite>\n</template>\n\n<script setup lang=\"ts\">\nimport {useToNumber, useVModel} from '@vueuse/core'\nimport {computed, onMounted, ref, type StyleValue, toRef, watch} from 'vue'\nimport {useBooleanish} from '../../composables'\nimport type {\n  Booleanish,\n  BTableLiteProps,\n  BTableProvider,\n  BTableSortCompare,\n  ColorVariant,\n  LiteralUnion,\n  TableField,\n  TableFieldObject,\n  TableItem,\n} from '../../types'\nimport BSpinner from '../BSpinner.vue'\nimport BOverlay from '../BOverlay/BOverlay.vue'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {getTableFieldHeadLabel} from '../../utils'\n\ntype NoProviderTypes = 'paging' | 'sorting' | 'filtering'\n\n// TODO sort props list alphabetically when everything is done\nconst props = withDefaults(\n  defineProps<\n    {\n      provider?: BTableProvider\n      sortCompare?: BTableSortCompare\n      noProvider?: NoProviderTypes[]\n      noProviderPaging?: Booleanish\n      noProviderSorting?: Booleanish\n      noProviderFiltering?: Booleanish\n      sortBy?: string\n      sortDesc?: Booleanish\n      selectable?: Booleanish\n      stickySelect?: Booleanish\n      selectHead?: boolean | string\n      selectMode?: 'multi' | 'single' | 'range'\n      selectionVariant?: ColorVariant | null\n      busy?: Booleanish\n      busyLoadingText?: string\n      perPage?: number | string\n      currentPage?: number | string\n      filter?: string\n      filterable?: string[]\n      // TODO\n      // apiUrl?: string\n      // filterFunction?: () => any\n      // filterIgnoredFields?: any[]\n      // filterIncludedFields?: any[]\n      // headRowVariant?: ColorVariant | null\n      // headVariant?: ColorVariant | null\n      // labelSortAsc?: string\n      // labelSortClear?: string\n      // labelSortDesc?: string\n      // noFooterSorting?: Booleanish\n      // noLocalSorting?: Booleanish\n      // noSelectOnClick?: Booleanish\n      // noSortReset?: Booleanish\n      // selectedVariant?: ColorVariant | null\n      // showEmpty?: Booleanish\n      // sortCompareLocale?: () => any\n      // sortCompareOptions?: Record<string, any> // TODO make this explicit\n      // sortDirection?: 'asc' | 'desc' | 'last'\n      // sortIconLeft?: Booleanish\n      // sortNullLast?: Booleanish\n      selectedItems?: TableItem[]\n      noSortableIcon?: Booleanish\n    } & Omit<BTableLiteProps, 'tableClass'>\n  >(),\n  {\n    noSortableIcon: false,\n    perPage: Infinity,\n    sortBy: undefined,\n    filter: undefined,\n    filterable: undefined,\n    provider: undefined,\n    sortCompare: undefined,\n    noProvider: undefined,\n    noProviderPaging: false,\n    noProviderSorting: false,\n    noProviderFiltering: false,\n    sortDesc: false,\n    selectable: false,\n    stickySelect: false,\n    selectHead: true,\n    selectMode: 'multi',\n    selectionVariant: 'primary',\n    busy: false,\n    busyLoadingText: 'Loading...',\n    currentPage: 1,\n    selectedItems: () => [],\n    // BTableLite props\n    items: () => [],\n    fields: () => [],\n    // All others use defaults\n    caption: undefined,\n    align: undefined,\n    footClone: undefined,\n    labelStacked: undefined,\n    showEmpty: undefined,\n    emptyText: undefined,\n    emptyFilteredText: undefined,\n    fieldColumnClass: undefined,\n    tbodyTrClass: undefined,\n    captionHtml: undefined,\n    detailsTdClass: undefined,\n    headVariant: undefined,\n    headRowVariant: undefined,\n    footRowVariant: undefined,\n    footVariant: undefined,\n    modelValue: undefined,\n    primaryKey: undefined,\n    tbodyClass: undefined,\n    tbodyTrAttr: undefined,\n    tfootClass: undefined,\n    tfootTrClass: undefined,\n    theadClass: undefined,\n    theadTrClass: undefined,\n    // End BTableLite props\n    // BTableSimple props\n    borderVariant: undefined,\n    variant: undefined,\n    bordered: undefined,\n    borderless: undefined,\n    captionTop: undefined,\n    dark: undefined,\n    hover: undefined,\n    id: undefined,\n    noBorderCollapse: undefined,\n    outlined: undefined,\n    fixed: undefined,\n    responsive: undefined,\n    stacked: undefined,\n    striped: undefined,\n    stripedColumns: undefined,\n    small: undefined,\n    stickyHeader: undefined,\n    // End BTableSimple props\n  }\n)\n\nconst emit = defineEmits<{\n  'filtered': [value: TableItem[]]\n  'head-clicked': [\n    key: TableFieldObject['key'],\n    field: TableField,\n    event: MouseEvent,\n    isFooter: boolean,\n  ]\n  'row-clicked': [item: TableItem, index: number, event: MouseEvent]\n  'row-dbl-clicked': [item: TableItem, index: number, event: MouseEvent]\n  'row-hovered': [item: TableItem, index: number, event: MouseEvent]\n  'row-selected': [value: TableItem]\n  'row-unhovered': [item: TableItem, index: number, event: MouseEvent]\n  'row-unselected': [value: TableItem]\n  'selection': [value: TableItem[]]\n  'sorted': [sortBy: string, isDesc: boolean]\n  'update:busy': [value: boolean]\n  'update:selectedItems': [value: TableItem[]]\n  'update:sortDesc': [value: boolean]\n  'update:sortBy': [value: string]\n}>()\n\nconst sortByModel = useVModel(props, 'sortBy', emit, {passive: true})\nconst busyModel = useVModel(props, 'busy', emit, {passive: true})\nconst sortDescModel = useVModel(props, 'sortDesc', emit, {passive: true})\nconst selectedItemsModel = useVModel(props, 'selectedItems', emit, {passive: true})\n\nconst selectedItemsToSet = computed({\n  get: () => new Set([...selectedItemsModel.value]),\n  set: (val) => {\n    selectedItemsModel.value = [...val]\n  },\n})\n/**\n * This is to avoid the issue of directly mutating the array structure and to properly trigger the computed setter.\n * The utils also conveniently emit the proper events after\n */\nconst selectedItemsSetUtilities = {\n  add: (item: TableItem) => {\n    const value = new Set(selectedItemsToSet.value)\n    value.add(item)\n    selectedItemsToSet.value = value\n    emit('row-selected', item)\n  },\n  clear: () => {\n    selectedItemsToSet.value.forEach((item) => {\n      emit('row-unselected', item)\n    })\n    selectedItemsToSet.value = new Set()\n  },\n  delete: (item: TableItem) => {\n    const value = new Set(selectedItemsToSet.value)\n    value.delete(item)\n    selectedItemsToSet.value = value\n    emit('row-unselected', item)\n  },\n  /* TODO\n  This has method and the delete method suffer from an error when using a non-reactive source as the items prop\n  ```ts\n  const items = [{first_name: 'Geneva', last_name: 'Wilson', age: 89},{first_name: 'Jami', last_name: 'Carney', age: 38}]\n  ```\n  For some reason, the reference of the object gets lost. However, when you use an actual ref(), it works just fine\n  Getting the reference properly will fix all outstanding issues\n  */\n  has: (item: TableItem) => selectedItemsToSet.value.has(item),\n} as const\n\n/**\n * Only stores data that is fetched when using the provider\n */\nconst internalItems = ref<TableItem[]>([])\n\nconst sortDescBoolean = useBooleanish(sortDescModel)\nconst busyBoolean = useBooleanish(busyModel)\nconst noProviderPagingBoolean = useBooleanish(() => props.noProviderPaging)\nconst noProviderSortingBoolean = useBooleanish(() => props.noProviderSorting)\nconst noProviderFilteringBoolean = useBooleanish(() => props.noProviderFiltering)\nconst selectableBoolean = useBooleanish(() => props.selectable)\nconst noSortableIconBoolean = useBooleanish(() => props.noSortableIcon)\n\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst currentPageNumber = useToNumber(() => props.currentPage, {method: 'parseInt'})\n\nconst isFilterableTable = toRef(() => !!props.filter)\nconst usesProvider = toRef(() => props.provider !== undefined)\nconst isSelecting = toRef(() => selectedItemsToSet.value.size > 0)\n\nconst isSortable = computed(\n  () =>\n    sortByModel.value !== undefined ||\n    props.fields.some((field) => (typeof field === 'string' ? false : field.sortable))\n)\n\nconst computedFields = computed<TableField[]>(() =>\n  props.fields.map((el) =>\n    typeof el === 'string'\n      ? el\n      : {\n          ...el,\n          thAttr: {\n            'aria-sort':\n              isSortable.value === false\n                ? undefined\n                : sortByModel.value !== el.key\n                ? 'none'\n                : sortDescBoolean.value === true\n                ? 'descending'\n                : 'ascending',\n            ...el.thAttr,\n          },\n        }\n  )\n)\n\nconst tableClasses = computed(() => ({\n  'b-table-busy': busyBoolean.value,\n  'b-table-selectable': selectableBoolean.value,\n  'user-select-none': selectableBoolean.value && isSelecting.value,\n}))\n// All three of these are similar, even though the two following are not computeds\nconst getBusyRowClasses = computed(() => [\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(null, 'table-busy')\n      : props.tbodyTrClass\n    : null,\n])\nconst getFieldColumnClasses = (field: TableFieldObject) => [\n  {\n    'b-table-sortable-column': isSortable.value && field.sortable,\n  },\n]\n// TODO this class has issues if the table has a variant already applied\n// Also the row should technically have aria-selected . Both things could probably just use a function with tbodyTrAttrs\n// But functional tbodyTrAttrs are not supported yet\n// Also the stuff for resolving functions could probably be made a util\nconst getRowClasses = (item: TableItem | null, type: string) => [\n  {\n    [`selected table-${props.selectionVariant}`]:\n      selectableBoolean.value && item && selectedItemsSetUtilities.has(item),\n  },\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null,\n]\nconst getIconStyle = (field: TableFieldObject): StyleValue =>\n  sortByModel.value !== field.key ? {opacity: 0.5} : {}\n\nconst computedItems = computed<TableItem[]>(() => {\n  const sortItems = (items: TableItem[]) => {\n    const sortKey = sortByModel.value\n\n    if (sortKey === undefined) {\n      return items\n    }\n\n    const sortField = computedFields.value.find((el) => {\n      if (typeof el === 'string') return false\n      return el.key === sortKey\n    })\n\n    // Explicit field? === false check because undefined means it's sortable. Only strict === means its not sortable (no falsy)\n    if (typeof sortField !== 'string' && sortField?.sortable === false) {\n      return items\n    }\n\n    return [...items].sort((a, b) => {\n      if (props.sortCompare !== undefined)\n        return props.sortCompare(a, b, sortKey, sortDescBoolean.value)\n\n      const realVal = (ob: unknown): string =>\n        typeof ob === 'object' && ob !== null ? JSON.stringify(ob) : ob?.toString() ?? ''\n\n      if (realVal(a[sortKey]) > realVal(b[sortKey])) {\n        return sortDescBoolean.value ? -1 : 1\n      }\n\n      if (realVal(b[sortKey]) > realVal(a[sortKey])) {\n        return sortDescBoolean.value ? 1 : -1\n      }\n\n      return 0\n    })\n  }\n\n  const filterItems = (items: TableItem[]) =>\n    items.filter((item) =>\n      Object.entries(item).some(([key, val]) => {\n        if (!val || key[0] === '_' || !props.filterable?.includes(key)) return false\n        const itemValue: string =\n          typeof val === 'object' ? JSON.stringify(Object.values(val)) : val.toString()\n        return itemValue.toLowerCase().includes(props.filter?.toLowerCase() ?? '')\n      })\n    )\n\n  let mappedItems = usesProvider.value ? internalItems.value : props.items\n\n  if (\n    (isFilterableTable.value === true && !usesProvider.value) ||\n    (isFilterableTable.value === true && usesProvider.value && noProviderFilteringBoolean.value)\n  ) {\n    mappedItems = filterItems(mappedItems)\n  }\n\n  if (\n    (isSortable.value === true && !usesProvider.value) ||\n    (isSortable.value === true && usesProvider.value && noProviderSortingBoolean.value)\n  ) {\n    mappedItems = sortItems(mappedItems)\n  }\n\n  return mappedItems\n})\n\n// The benefit of this is that it doesn't allow you a page out of bounds even if the user does it manually\n// This does not work due to https://github.com/vueuse/vueuse/issues/3542\n// const {currentPage: resolvedCurrentPage, currentPageSize: resolvedCurrentPageSize} =\n//   useOffsetPagination({\n//     total: () => computedItems.value.length,\n//     page: currentPageNumber,\n//     // If its zero, it does all\n//     pageSize: () => perPageNumber.value || Infinity,\n//   })\n\nconst computedDisplayItems = computed<TableItem[]>(() => {\n  if (Number.isNaN(perPageNumber.value) || (usesProvider.value && !noProviderPagingBoolean.value)) {\n    return computedItems.value\n  }\n\n  return computedItems.value.slice(\n    (currentPageNumber.value - 1) * (perPageNumber.value || Infinity),\n    currentPageNumber.value * (perPageNumber.value || Infinity)\n  )\n})\n\nconst handleRowSelection = (\n  row: TableItem,\n  index: number,\n  shiftClicked = false,\n  ctrlClicked = false,\n  metaClicked = false\n) => {\n  if (!selectableBoolean.value) return\n\n  if (props.selectMode === 'single' || props.selectMode === 'multi') {\n    // Do nothing when these items are held\n    if (shiftClicked || ctrlClicked) return\n    // Delete if item is in\n    if (selectedItemsSetUtilities.has(row)) {\n      selectedItemsSetUtilities.delete(row)\n    } else {\n      // If it is single, we clear out everything first\n      if (props.selectMode === 'single') {\n        selectedItemsSetUtilities.clear()\n      }\n      // Then set the item\n      selectedItemsSetUtilities.add(row)\n    }\n  } else {\n    if (ctrlClicked || metaClicked) {\n      // Delete if in the object\n      if (selectedItemsSetUtilities.has(row)) {\n        selectedItemsSetUtilities.delete(row)\n        // Otherwise add. Functions similarly to 'multi' at this point\n      } else {\n        selectedItemsSetUtilities.add(row)\n      }\n      // This is where range is different, due to the difference in shift\n    } else if (shiftClicked) {\n      const lastSelectedItem = [...selectedItemsToSet.value].pop()\n      const lastSelectedIndex = props.items.findIndex((i) => i === lastSelectedItem)\n      const selectStartIndex = Math.min(lastSelectedIndex, index)\n      const selectEndIndex = Math.max(lastSelectedIndex, index)\n      props.items.slice(selectStartIndex, selectEndIndex + 1).forEach((item) => {\n        if (!selectedItemsSetUtilities.has(item)) {\n          selectedItemsSetUtilities.add(item)\n        }\n      })\n      // If nothing is being held, then we just behave like it's single mode\n    } else {\n      selectedItemsSetUtilities.clear()\n      selectedItemsSetUtilities.add(row)\n    }\n  }\n  // Notify\n  notifySelectionEvent()\n}\n\nconst onRowClick = (row: TableItem, index: number, e: MouseEvent) => {\n  handleRowSelection(row, index, e.shiftKey, e.ctrlKey, e.metaKey)\n  emit('row-clicked', row, index, e)\n}\n\nconst handleFieldSorting = (field: TableField) => {\n  if (!isSortable.value) return\n\n  const fieldKey = typeof field === 'string' ? field : field.key\n  const fieldSortable = typeof field === 'string' ? false : field.sortable\n\n  if (!(isSortable.value === true && fieldSortable === true)) return\n\n  if (sortByModel.value !== fieldKey) {\n    sortByModel.value = fieldKey\n    sortDescModel.value = false\n  } else {\n    if (sortDescBoolean.value === false) {\n      sortDescModel.value = true\n    } else {\n      sortByModel.value = undefined\n      sortDescModel.value = false\n    }\n  }\n  emit('sorted', fieldKey, sortByModel.value === undefined ? false : !sortDescBoolean.value)\n}\n\nconst onFieldHeadClick = (\n  fieldKey: LiteralUnion<string>,\n  field: TableField,\n  event: MouseEvent,\n  isFooter = false\n) => {\n  emit('head-clicked', fieldKey, field, event, isFooter)\n  handleFieldSorting(field)\n}\n\nconst callItemsProvider = async () => {\n  if (!usesProvider.value || props.provider === undefined || busyBoolean.value) return\n  busyModel.value = true\n  const response = props.provider({\n    currentPage: currentPageNumber.value,\n    filter: props.filter,\n    sortBy: sortByModel.value,\n    sortDesc: props.sortDesc,\n    perPage: perPageNumber.value,\n  })\n  try {\n    const items = response instanceof Promise ? await response : response\n\n    if (items === undefined) return\n    internalItems.value = items\n  } finally {\n    busyModel.value = false\n  }\n}\n\nconst notifySelectionEvent = () => {\n  if (!selectableBoolean.value) return\n  emit('selection', [...selectedItemsToSet.value])\n}\nconst notifyFilteredItems = async () => {\n  if (usesProvider.value) {\n    await callItemsProvider()\n    return\n  }\n  emit('filtered', computedItems.value)\n}\n\nconst providerPropsWatch = async (prop: string, val: unknown, oldVal: unknown) => {\n  if (val === oldVal) return\n\n  //stop provide when paging\n  const inNoProvider = (key: NoProviderTypes) => props.noProvider?.includes(key) === true\n  const noProvideWhenPaging =\n    (prop === 'currentPage' || prop === 'perPage') &&\n    (inNoProvider('paging') || noProviderPagingBoolean.value === true)\n  const noProvideWhenFiltering =\n    prop === 'filter' && (inNoProvider('filtering') || noProviderFilteringBoolean.value === true)\n  const noProvideWhenSorting =\n    (prop === 'sortBy' || prop === 'sortDesc') &&\n    (inNoProvider('sorting') || noProviderSortingBoolean.value === true)\n\n  if (noProvideWhenPaging || noProvideWhenFiltering || noProvideWhenSorting) return\n\n  await callItemsProvider()\n\n  if (!(prop === 'currentPage' || prop === 'perPage')) notifyFilteredItems()\n}\n\nwatch(\n  () => props.filter,\n  (filter, oldFilter) => {\n    providerPropsWatch('filter', filter, oldFilter)\n\n    if (filter === oldFilter || usesProvider.value) return\n    if (!filter) {\n      emit('filtered', computedItems.value)\n    }\n  }\n)\nwatch(currentPageNumber, (val, oldVal) => {\n  providerPropsWatch('currentPage', val, oldVal)\n})\nwatch(perPageNumber, (val, oldVal) => {\n  providerPropsWatch('perPage', val, oldVal)\n})\nwatch(sortByModel, (val, oldVal) => {\n  providerPropsWatch('sortBy', val, oldVal)\n})\nwatch(sortDescBoolean, (val, oldVal) => {\n  providerPropsWatch('sortDesc', val, oldVal)\n})\n\nwatch(\n  () => props.provider,\n  (newValue) => {\n    // Reset the internal values if the provider stops getting used\n    if (newValue === undefined) {\n      internalItems.value = []\n      return\n    }\n    // Otherwise we should refresh the table on such a change\n    callItemsProvider()\n  }\n)\n\nonMounted(callItemsProvider)\n\ndefineExpose({\n  // The row selection methods are really for compat. Users should probably use the v-model though\n  clearSelected: () => {\n    if (!selectableBoolean.value) return\n    selectedItemsSetUtilities.clear()\n    notifySelectionEvent()\n  },\n  refresh: callItemsProvider,\n  selectAllRows: () => {\n    if (!selectableBoolean.value) return\n    const unselectableItems = selectedItemsToSet.value.size > 0 ? [...selectedItemsToSet.value] : []\n    selectedItemsToSet.value = new Set([...computedItems.value])\n    selectedItemsToSet.value.forEach((item) => {\n      if (unselectableItems.includes(item)) return\n      emit('row-selected', item)\n    })\n    notifySelectionEvent()\n  },\n  selectRow: (index: number) => {\n    if (!selectableBoolean.value) return\n    const item = computedItems.value[index]\n    if (!item || selectedItemsSetUtilities.has(item)) return\n    selectedItemsSetUtilities.add(item)\n    notifySelectionEvent()\n  },\n  unselectRow: (index: number) => {\n    if (!selectableBoolean.value) return\n    const item = computedItems.value[index]\n    if (!item || !selectedItemsSetUtilities.has(item)) return\n    selectedItemsSetUtilities.delete(item)\n    notifySelectionEvent()\n  },\n})\n</script>\n","<template>\n  <component\n    :is=\"tag\"\n    :id=\"computedId\"\n    ref=\"el\"\n    class=\"tab-pane\"\n    :class=\"computedClasses\"\n    role=\"tabpanel\"\n    :aria-labelledby=\"buttonId\"\n    v-bind=\"attrs\"\n  >\n    <slot v-if=\"showSlot\" />\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, inject, onMounted, onUnmounted, ref, toRef, useAttrs, watch} from 'vue'\nimport {useBooleanish, useId} from '../../composables'\nimport type {Booleanish, ClassValue, TabType} from '../../types'\nimport {tabsInjectionKey} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<{\n    active?: Booleanish\n    buttonId?: string\n    disabled?: Booleanish\n    id?: string\n    lazy?: Booleanish\n    lazyOnce?: Booleanish\n    noBody?: Booleanish\n    tag?: string\n    title?: string\n    titleItemClass?: ClassValue\n    titleLinkAttributes?: Record<string, unknown>\n    titleLinkClass?: ClassValue\n  }>(),\n  {\n    active: false,\n    buttonId: undefined,\n    disabled: false,\n    id: undefined,\n    lazy: undefined,\n    lazyOnce: undefined,\n    noBody: false,\n    tag: 'div',\n    title: undefined,\n    titleItemClass: undefined,\n    titleLinkAttributes: undefined,\n    titleLinkClass: undefined,\n  }\n)\n\nconst slots = defineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  default?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  title?: (props: Record<string, never>) => any\n}>()\n\nconst emit = defineEmits<{\n  'update:active': [value: boolean]\n}>()\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst parentData = inject(tabsInjectionKey, null)\nconst computedId = useId(() => props.id, 'tabpane')\nconst buttonId = useId(() => props.buttonId, 'tab')\n\nconst activeBoolean = useBooleanish(() => props.active)\nconst disabledBoolean = useBooleanish(() => props.disabled)\nconst lazyBoolean = useBooleanish(() => props.lazyOnce ?? props.lazy)\nconst noBodyBoolean = useBooleanish(() => props.noBody)\n\nconst lazyRenderCompleted = ref(false)\nconst el = ref<HTMLElement | null>(null)\n\nconst {onClick, ...attrs} = useAttrs()\n\nconst tab = computed(\n  () =>\n    ({\n      id: computedId.value,\n      buttonId: buttonId.value,\n      disabled: disabledBoolean.value,\n      title: props.title,\n      titleComponent: slots.title,\n      titleItemClass: props.titleItemClass,\n      titleLinkAttributes: props.titleLinkAttributes,\n      titleLinkClass: props.titleLinkClass,\n      onClick,\n      el: el.value,\n    }) as TabType\n)\n\nonMounted(() => {\n  if (!parentData) return\n  parentData.registerTab(tab)\n  if (activeBoolean.value) {\n    parentData.activateTab(computedId.value)\n  }\n})\n\nonUnmounted(() => {\n  if (!parentData) return\n  parentData.unregisterTab(computedId.value)\n})\n\nconst isActive = toRef(() => parentData?.activeId.value === computedId.value)\nconst show = ref(isActive.value)\n\nconst computedLazy = toRef(() => !!(parentData?.lazy.value || lazyBoolean.value))\nconst computedLazyOnce = toRef(() => props.lazyOnce !== undefined)\n\nconst computedActive = toRef(() => isActive.value && !disabledBoolean.value)\nconst showSlot = toRef(\n  () =>\n    computedActive.value ||\n    !computedLazy.value ||\n    (computedLazy.value && computedLazyOnce.value && lazyRenderCompleted.value)\n)\n\nwatch(isActive, (active) => {\n  if (active) {\n    emit('update:active', true)\n    setTimeout(() => {\n      show.value = true\n    }, 0)\n    return\n  }\n  show.value = false\n  emit('update:active', false)\n})\nwatch(activeBoolean, (active) => {\n  if (!parentData) return\n  if (!active) {\n    if (isActive.value) {\n      parentData.activateTab(undefined)\n    }\n    return\n  }\n  parentData.activateTab(computedId.value)\n})\n\nconst computedClasses = computed(() => [\n  {\n    'active': isActive.value,\n    'show': show.value,\n    'card-body': parentData?.card.value && noBodyBoolean.value === false,\n    'fade': !parentData?.noFade.value,\n  },\n  show.value && parentData?.activeTabClass ? parentData.activeTabClass : null,\n])\n\nwatch(showSlot, (shown) => {\n  if (shown && !lazyRenderCompleted.value) lazyRenderCompleted.value = true\n})\n</script>\n","<template>\n  <component :is=\"tag\" :id=\"id\" class=\"tabs\" :class=\"computedClasses\">\n    <div v-if=\"endBoolean\" class=\"tab-content\" :class=\"contentClass\">\n      <slot />\n      <div\n        v-if=\"showEmpty\"\n        key=\"bv-empty-tab\"\n        class=\"tab-pane active\"\n        :class=\"{'card-body': cardBoolean}\"\n      >\n        <slot name=\"empty\" />\n      </div>\n    </div>\n    <div\n      :class=\"[navWrapperClass, {'card-header': cardBoolean, 'ms-auto': vertical && endBoolean}]\"\n    >\n      <ul\n        class=\"nav\"\n        :class=\"[navTabsClasses, navClass]\"\n        role=\"tablist\"\n        :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\"\n      >\n        <slot name=\"tabs-start\" />\n        <li\n          v-for=\"(tab, idx) in tabs\"\n          :key=\"tab.id\"\n          class=\"nav-item\"\n          :class=\"tab.titleItemClass\"\n          role=\"presentation\"\n        >\n          <button\n            :id=\"tab.buttonId\"\n            class=\"nav-link\"\n            :class=\"tab.navItemClasses\"\n            role=\"tab\"\n            :aria-controls=\"tab.id\"\n            :aria-selected=\"tab.active\"\n            v-bind=\"tab.titleLinkAttributes\"\n            @keydown.left.stop.prevent=\"keynav(-1)\"\n            @keydown.right.stop.prevent=\"keynav(1)\"\n            @keydown.page-up.stop.prevent=\"keynav(-999)\"\n            @keydown.page-down.stop.prevent=\"keynav(999)\"\n            @click.stop.prevent=\"(e) => handleClick(e, idx)\"\n          >\n            <component :is=\"tab.titleComponent\" v-if=\"tab.titleComponent\" />\n            <template v-else>\n              {{ tab.title }}\n            </template>\n          </button>\n        </li>\n        <slot name=\"tabs-end\" />\n      </ul>\n    </div>\n    <!-- Tab Content Below Tabs-->\n    <div v-if=\"!endBoolean\" class=\"tab-content\" :class=\"contentClass\">\n      <slot />\n      <div\n        v-if=\"showEmpty\"\n        key=\"bv-empty-tab\"\n        class=\"tab-pane active\"\n        :class=\"{'card-body': cardBoolean}\"\n      >\n        <slot name=\"empty\" />\n      </div>\n    </div>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, nextTick, provide, type Ref, ref, toRef, unref, watch} from 'vue'\nimport {BvEvent, tabsInjectionKey} from '../../utils'\nimport {useAlignment, useBooleanish} from '../../composables'\nimport type {AlignmentJustifyContent, Booleanish, ClassValue, TabType} from '../../types'\nimport {useVModel} from '@vueuse/core'\n// TODO this component needs a desperate refactoring to use provide/inject and not the complicated slot manipulation logic it's doing now\n\nconst props = withDefaults(\n  defineProps<{\n    activeId?: string\n    activeNavItemClass?: ClassValue\n    activeTabClass?: ClassValue\n    align?: AlignmentJustifyContent\n    card?: Booleanish\n    contentClass?: ClassValue\n    end?: Booleanish\n    fill?: Booleanish\n    id?: string\n    justified?: Booleanish\n    lazy?: Booleanish\n    modelValue?: number\n    navClass?: ClassValue\n    navWrapperClass?: ClassValue\n    noFade?: Booleanish\n    // noKeyNav?: Booleanish,\n    noNavStyle?: Booleanish\n    pills?: Booleanish\n    small?: Booleanish\n    tag?: string\n    vertical?: Booleanish\n  }>(),\n  {\n    activeId: undefined,\n    activeNavItemClass: undefined,\n    activeTabClass: undefined,\n    align: undefined,\n    card: false,\n    contentClass: undefined,\n    end: false,\n    fill: false,\n    id: undefined,\n    justified: false,\n    lazy: false,\n    modelValue: -1,\n    navClass: undefined,\n    navWrapperClass: undefined,\n    noFade: false,\n    // noKeyNav: false,\n    noNavStyle: false,\n    pills: false,\n    small: false,\n    tag: 'div',\n    vertical: false,\n  }\n)\n\nconst emit = defineEmits<{\n  'activate-tab': [v1: number, v2: number, v3: BvEvent]\n  'click': [] // TODO click event is never used\n  'update:activeId': [value: string]\n  'update:modelValue': [value: number]\n}>()\n\ndefineSlots<{\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'default'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'empty'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tabs-end'?: (props: Record<string, never>) => any\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  'tabs-start'?: (props: Record<string, never>) => any\n}>()\n\nconst modelValue = useVModel(props, 'modelValue', emit, {passive: true})\nconst activeId = useVModel(props, 'activeId', emit, {passive: true})\n\nconst cardBoolean = useBooleanish(() => props.card)\nconst endBoolean = useBooleanish(() => props.end)\nconst fillBoolean = useBooleanish(() => props.fill)\nconst justifiedBoolean = useBooleanish(() => props.justified)\nconst lazyBoolean = useBooleanish(() => props.lazy)\nconst noFadeBoolean = useBooleanish(() => props.noFade)\nconst noNavStyleBoolean = useBooleanish(() => props.noNavStyle)\nconst pillsBoolean = useBooleanish(() => props.pills)\nconst smallBoolean = useBooleanish(() => props.small)\nconst verticalBoolean = useBooleanish(() => props.vertical)\n\nconst tabsInternal = ref<Ref<TabType>[]>([])\n\nconst tabs = computed(() =>\n  tabsInternal.value.map((_tab) => {\n    const tab = unref(_tab)\n    const active = tab.id === activeId.value\n\n    return {\n      ...tab,\n      active,\n      navItemClasses: [\n        {\n          active,\n          disabled: tab.disabled,\n        },\n        active && props.activeNavItemClass ? props.activeNavItemClass : null,\n        tab.titleLinkClass,\n      ],\n    }\n  })\n)\n\nconst showEmpty = toRef(() => !(tabs?.value && tabs.value.length > 0))\n\nconst computedClasses = computed(() => ({\n  'd-flex': verticalBoolean.value,\n  'align-items-start': verticalBoolean.value,\n}))\n\nconst alignment = useAlignment(() => props.align)\n\nconst navTabsClasses = computed(() => ({\n  'nav-pills': pillsBoolean.value,\n  'flex-column me-3': verticalBoolean.value,\n  [alignment.value]: props.align !== undefined,\n  'nav-fill': fillBoolean.value,\n  'card-header-tabs': cardBoolean.value,\n  'nav-justified': justifiedBoolean.value,\n  'nav-tabs': !noNavStyleBoolean.value && !pillsBoolean.value,\n  'small': smallBoolean.value,\n}))\n\nconst activateTab = (index: number): void => {\n  if (index !== undefined) {\n    const id = tabs.value[index]?.id\n    if (\n      index > -1 &&\n      index < tabs.value.length &&\n      !tabs.value[index].disabled &&\n      (modelValue.value < 0 || activeId.value !== id || modelValue.value !== index)\n    ) {\n      const tabEvent = new BvEvent('activate-tab', {cancelable: true})\n      emit('activate-tab', index, modelValue.value, tabEvent)\n      if (!tabEvent.defaultPrevented) {\n        if (activeId.value !== id) activeId.value = id\n        if (modelValue.value !== index) modelValue.value = index\n      }\n    }\n  }\n}\n\nconst handleClick = (event: MouseEvent, index: number) => {\n  activateTab(index)\n  if (\n    index >= 0 &&\n    !tabs.value[index].disabled &&\n    tabs.value[index]?.onClick &&\n    typeof tabs.value[index].onClick === 'function'\n  ) {\n    tabs.value[index].onClick?.(event)\n  }\n}\n\nconst keynav = (direction: number) => {\n  if (tabs.value.length <= 0) return\n  modelValue.value = nextIndex(modelValue.value + direction, direction)\n  document.getElementById(tabs.value[modelValue.value]?.buttonId)?.focus()\n}\n\nconst nextIndex = (start: number, direction: number) => {\n  if (tabs.value.length <= 0) return -1\n  let index = start\n  const maxIdx = tabs.value.map((tab) => !tab.disabled).lastIndexOf(true)\n  const minIdx = tabs.value.map((tab) => !tab.disabled).indexOf(true)\n  while (index >= minIdx && index <= maxIdx && tabs.value[index].disabled) {\n    index += direction\n  }\n  if (index < minIdx) index = minIdx\n  if (index >= maxIdx) index = maxIdx\n  return index\n}\n\nwatch(modelValue, (newValue, oldValue) => {\n  if (newValue === oldValue) return\n  if (tabs.value.length <= 0) {\n    return\n  }\n\n  const index = nextIndex(newValue, newValue > oldValue ? 1 : -1)\n  nextTick(() => {\n    activateTab(index)\n  })\n})\n\nwatch(activeId, (newValue, oldValue) => {\n  const index = tabs.value.findIndex((t) => t.id === newValue)\n  if (newValue === oldValue) return\n  if (tabs.value.length <= 0) {\n    return\n  }\n  if (index === -1) {\n    activateTab(nextIndex(0, 1))\n    return\n  }\n  activateTab(index)\n})\n\nconst registerTab = (tab: Ref<TabType>) => {\n  if (!tabsInternal.value.find((t) => t.value.id === tab.value.id)) {\n    tabsInternal.value.push(tab)\n  } else {\n    tabsInternal.value[tabsInternal.value.findIndex((t) => t.value.id === tab.value.id)] = tab\n  }\n  tabsInternal.value = tabsInternal.value.sort((a, b) => {\n    if (!Node || !a.value.el || !b.value.el) return 0\n    const position = a.value.el.compareDocumentPosition(b.value.el)\n    if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1\n    if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1\n    return 0\n  })\n}\nconst unregisterTab = (id: string) => {\n  if (tabsInternal.value.find((t) => t.value.id === id)) {\n    tabsInternal.value.splice(\n      tabsInternal.value.findIndex((t) => t.value.id === id),\n      1\n    )\n  }\n}\n\nwatch(\n  tabsInternal,\n  () => {\n    findActive()\n  },\n  {deep: true}\n)\n\nconst findActive = () => {\n  if (tabs.value.length === 0) {\n    modelValue.value = -1\n    activeId.value = undefined\n    return\n  }\n  if (modelValue.value >= 0 && !activeId.value) {\n    activeId.value = tabs.value[modelValue.value]?.id\n  }\n  if (tabs.value.find((t) => t.id === activeId.value)) {\n    activateTab(tabs.value.findIndex((t) => t.id === activeId.value))\n    return\n  }\n  activateTab(tabs.value.map((tab) => !tab.disabled).indexOf(true))\n}\n\nprovide(tabsInjectionKey, {\n  lazy: lazyBoolean,\n  card: cardBoolean,\n  noFade: noFadeBoolean,\n  activeTabClass: toRef(() => props.activeTabClass),\n  registerTab,\n  unregisterTab,\n  activeId,\n  activateTab: (id) => {\n    const idx = tabs.value.findIndex((t) => t.id === id)\n    if (id === undefined || idx === -1) {\n      activateTab(nextIndex(0, 1))\n      return\n    }\n    activateTab(idx)\n  },\n})\n</script>\n","<template>\n  <BTransition :no-fade=\"noFadeBoolean\">\n    <div\n      v-if=\"isToastVisible\"\n      :id=\"id\"\n      ref=\"element\"\n      class=\"toast\"\n      :class=\"[toastClass, computedClasses]\"\n      tabindex=\"0\"\n      :role=\"!isToastVisible ? undefined : isStatusBoolean ? 'status' : 'alert'\"\n      :aria-live=\"!isToastVisible ? undefined : isStatusBoolean ? 'polite' : 'assertive'\"\n      :aria-atomic=\"!isToastVisible ? undefined : true\"\n    >\n      <component :is=\"headerTag\" v-if=\"$slots.title || title\" class=\"toast-header\">\n        <slot name=\"title\" :hide=\"hide\">\n          <strong class=\"me-auto\">\n            {{ title }}\n          </strong>\n        </slot>\n        <BCloseButton v-if=\"!noCloseButtonBoolean\" @click=\"hide\" />\n      </component>\n      <template v-if=\"$slots.default || body\">\n        <component\n          :is=\"computedTag\"\n          class=\"toast-body\"\n          style=\"display: block\"\n          :class=\"bodyClass\"\n          v-bind=\"computedLinkProps\"\n          @click=\"computedLink ? hide : () => {}\"\n        >\n          <slot :hide=\"hide\">\n            {{ body }}\n          </slot>\n        </component>\n      </template>\n      <BProgress\n        v-if=\"typeof modelValue === 'number' && progressProps !== undefined\"\n        :animated=\"progressProps.animated\"\n        :precision=\"progressProps.precision\"\n        :show-progress=\"progressProps.showProgress\"\n        :show-value=\"progressProps.showValue\"\n        :striped=\"progressProps.striped\"\n        :variant=\"progressProps.variant\"\n        :max=\"modelValue\"\n        :value=\"remainingMs\"\n        height=\"4px\"\n      />\n    </div>\n  </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, onBeforeUnmount, ref, toRef, watch, watchEffect} from 'vue'\nimport {\n  useBLinkHelper,\n  useBooleanish,\n  useColorVariantClasses,\n  useCountdown,\n} from '../../composables'\nimport type {BToastProps} from '../../types'\nimport BTransition from '../BTransition/BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BLink from '../BLink/BLink.vue'\nimport {useElementHover, useToNumber, useVModel} from '@vueuse/core'\nimport BProgress from '../BProgress/BProgress.vue'\n\n// TODO scheduling issue -- when multiple are opened in quick succession, and closed in quick succession,\n// Find index can get lost, leading to one or multiple staying orphaned\n// TODO appendToast from BToaster\n\nconst props = withDefaults(defineProps<BToastProps>(), {\n  animation: true,\n  autoHide: true,\n  bgVariant: null,\n  body: undefined,\n  bodyClass: undefined,\n  delay: 5000,\n  headerClass: undefined,\n  headerTag: 'div',\n  id: undefined,\n  interval: 1000,\n  isStatus: false,\n  modelValue: false,\n  noCloseButton: false,\n  noFade: false,\n  noHoverPause: false,\n  progressProps: undefined,\n  showOnPause: true,\n  solid: false,\n  textVariant: null,\n  title: undefined,\n  toastClass: undefined,\n  // Link props\n  // All others use defaults\n  active: undefined,\n  activeClass: undefined,\n  append: undefined,\n  disabled: undefined,\n  exactActiveClass: undefined,\n  href: undefined,\n  icon: undefined,\n  opacity: undefined,\n  opacityHover: undefined,\n  rel: undefined,\n  replace: undefined,\n  routerComponentName: undefined,\n  target: undefined,\n  to: undefined,\n  underlineOffset: undefined,\n  underlineOffsetHover: undefined,\n  underlineOpacity: undefined,\n  underlineOpacityHover: undefined,\n  underlineVariant: undefined,\n  variant: undefined,\n  // End link props\n})\n\nconst emit = defineEmits<{\n  'close': []\n  'close-countdown': [value: number]\n  'closed': []\n  'destroyed': []\n  'update:modelValue': [value: boolean | number]\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst isHovering = useElementHover(element)\nconst modelValue = useVModel(props, 'modelValue', emit)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\n// TODO animation is never used\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst animationBoolean = useBooleanish(() => props.animation)\nconst isStatusBoolean = useBooleanish(() => props.isStatus)\n// TODO autohide is never used\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst autoHideBoolean = useBooleanish(() => props.autoHide)\nconst noCloseButtonBoolean = useBooleanish(() => props.noCloseButton)\nconst noFadeBoolean = useBooleanish(() => props.noFade)\nconst noHoverPauseBoolean = useBooleanish(() => props.noHoverPause)\nconst showOnPauseBoolean = useBooleanish(() => props.showOnPause)\nconst intervalNumber = useToNumber(() => props.interval)\n// TODO solid is never used\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst solidBoolean = useBooleanish(() => props.solid)\nconst resolvedBackgroundClasses = useColorVariantClasses(props)\nconst countdownLength = toRef(() => (typeof modelValue.value === 'boolean' ? 0 : modelValue.value))\n\nconst {\n  isActive,\n  pause,\n  restart,\n  resume,\n  stop,\n  isPaused,\n  value: remainingMs,\n} = useCountdown(countdownLength, intervalNumber, {\n  immediate: typeof modelValue.value === 'number',\n})\n\nwatchEffect(() => {\n  emit('close-countdown', remainingMs.value)\n})\n\nconst computedTag = toRef(() => (computedLink.value ? BLink : 'div'))\n\nconst isToastVisible = toRef(() =>\n  typeof modelValue.value === 'boolean'\n    ? modelValue.value\n    : isActive.value || (showOnPauseBoolean.value && isPaused.value)\n)\n\n// Unlike the Alert counterpart, we actually want to emit to fully destroy our Toast (handled by the toaster)\nwatch(isActive, (newValue) => {\n  if (newValue === false && isPaused.value === false) {\n    emit('destroyed')\n  }\n})\n\nconst computedClasses = computed(() => [\n  resolvedBackgroundClasses.value,\n  {\n    show: isToastVisible.value,\n  },\n])\n\nconst hide = () => {\n  emit('close')\n\n  if (typeof modelValue.value === 'boolean') {\n    modelValue.value = false\n  } else {\n    modelValue.value = 0\n    stop()\n  }\n\n  emit('closed')\n}\n\nconst onMouseEnter = () => {\n  if (noHoverPauseBoolean.value) return\n  pause()\n}\n\nwatch(isHovering, (newValue) => {\n  if (newValue) {\n    onMouseEnter()\n    return\n  }\n  resume()\n})\n\nonBeforeUnmount(stop)\n\ndefineExpose({\n  pause,\n  restart,\n  resume,\n  stop,\n})\n</script>\n","<template>\n  <Teleport :to=\"teleportTo\" :disabled=\"teleportDisabledBoolean\">\n    <div id=\"__BVID__toaster-container\">\n      <div\n        v-for=\"(value, key) in toastPositions\"\n        :key=\"key\"\n        :class=\"value\"\n        class=\"toast-container position-fixed p-3\"\n      >\n        <BToast\n          v-for=\"toast in toasts.filter((el) => el.pos === key)\"\n          :key=\"toast.self\"\n          v-model=\"toast.value\"\n          v-bind=\"pluckToastItem(toast)\"\n          @destroyed=\"hide(toast.self)\"\n        />\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport type {RendererElement} from 'vue'\nimport {useBooleanish, useToast} from '../../composables'\nimport type {Booleanish, Toast} from '../../types'\nimport BToast from './BToast.vue'\nimport {omit} from '../../utils'\n\nconst props = withDefaults(\n  defineProps<{\n    teleportDisabled?: Booleanish\n    teleportTo?: string | RendererElement | null | undefined\n    // TODO this\n    // appendToast?: Booleanish\n  }>(),\n  {\n    teleportDisabled: false,\n    teleportTo: 'body',\n  }\n)\n\nconst teleportDisabledBoolean = useBooleanish(() => props.teleportDisabled)\n\nconst toastPositions = {\n  'top-left': 'top-0 start-0',\n  'top-center': 'top-0 start-50 translate-middle-x',\n  'top-right': 'top-0 end-0',\n  'middle-left': 'top-50 start-0 translate-middle-y',\n  'middle-center': 'top-50 start-50 translate-middle',\n  'middle-right': 'top-50 end-0 translate-middle-y',\n  'bottom-left': 'bottom-0 start-0',\n  'bottom-center': 'bottom-0 start-50 translate-middle-x',\n  'bottom-right': 'bottom-0 end-0',\n} as const\n\nconst {hide, toasts, show} = useToast()\n\nconst pluckToastItem = (payload: Toast & {self: symbol}) => omit(payload, ['value', 'self', 'pos'])\n\ndefineExpose({\n  hide,\n  show,\n})\n</script>\n","<template>\n  <BPopover ref=\"popover\" tooltip v-bind=\"$props\">\n    <template v-for=\"(_, name) in $slots\" #[name]=\"slotData\">\n      <slot :name=\"name\" v-bind=\"slotData\" />\n    </template>\n  </BPopover>\n</template>\n\n<script setup lang=\"ts\">\nimport {ref} from 'vue'\nimport BPopover from './BPopover.vue'\nimport type {BPopoverProps} from '../types'\n\nwithDefaults(defineProps<Omit<BPopoverProps, 'tooltip'>>(), {\n  click: undefined,\n  container: undefined,\n  content: undefined,\n  customClass: undefined,\n  delay: undefined,\n  floatingMiddleware: undefined,\n  hide: undefined,\n  html: undefined,\n  id: undefined,\n  inline: undefined,\n  manual: undefined,\n  modelValue: undefined,\n  noAutoClose: undefined,\n  noFade: undefined,\n  noFlip: undefined,\n  noHide: undefined,\n  noShift: undefined,\n  noninteractive: true,\n  offset: undefined,\n  placement: undefined,\n  realtime: undefined,\n  reference: undefined,\n  strategy: undefined,\n  target: undefined,\n  title: undefined,\n  variant: undefined,\n})\n\nconst popover = ref<null | InstanceType<typeof BPopover>>(null)\n\ndefineExpose({\n  hide: popover.value?.hide,\n  show: popover.value?.show,\n  toggle: popover.value?.toggle,\n})\n</script>\n","import type {App, Plugin} from 'vue'\nimport type {BootstrapVueOptions} from './types'\n\nimport './styles/styles.scss'\n\nimport * as Components from './components'\nimport * as Directives from './directives'\nimport type {ComponentType, DirectiveType} from './types/BootstrapVueOptions'\nimport parseActiveImports from './utils/parseActiveImports'\n\ndeclare module '@vue/runtime-core' {\n  export interface GlobalComponents {\n    BFormFile: typeof Components.BFormFile\n    BAccordion: typeof Components.BAccordion\n    BAccordionItem: typeof Components.BAccordionItem\n    BAlert: typeof Components.BAlert\n    BAvatar: typeof Components.BAvatar\n    BAvatarGroup: typeof Components.BAvatarGroup\n    BBadge: typeof Components.BBadge\n    BBreadcrumb: typeof Components.BBreadcrumb\n    BBreadcrumbItem: typeof Components.BBreadcrumbItem\n    BButton: typeof Components.BButton\n    BButtonGroup: typeof Components.BButtonGroup\n    BButtonToolbar: typeof Components.BButtonToolbar\n    BCard: typeof Components.BCard\n    BCardBody: typeof Components.BCardBody\n    BCardFooter: typeof Components.BCardFooter\n    BCardGroup: typeof Components.BCardGroup\n    BCardHeader: typeof Components.BCardHeader\n    BCardImg: typeof Components.BCardImg\n    BCardSubtitle: typeof Components.BCardSubtitle\n    BCardText: typeof Components.BCardText\n    BCardTitle: typeof Components.BCardTitle\n    BCarousel: typeof Components.BCarousel\n    BCarouselSlide: typeof Components.BCarouselSlide\n    BCloseButton: typeof Components.BCloseButton\n    BCol: typeof Components.BCol\n    BCollapse: typeof Components.BCollapse\n    BContainer: typeof Components.BContainer\n    BDropdown: typeof Components.BDropdown\n    BDropdownDivider: typeof Components.BDropdownDivider\n    BDropdownForm: typeof Components.BDropdownForm\n    BDropdownGroup: typeof Components.BDropdownGroup\n    BDropdownHeader: typeof Components.BDropdownHeader\n    BDropdownItem: typeof Components.BDropdownItem\n    BDropdownItemButton: typeof Components.BDropdownItemButton\n    BDropdownText: typeof Components.BDropdownText\n    BForm: typeof Components.BForm\n    BFormCheckbox: typeof Components.BFormCheckbox\n    BFormCheckboxGroup: typeof Components.BFormCheckboxGroup\n    BFormFloatingLabel: typeof Components.BFormFloatingLabel\n    BFormGroup: typeof Components.BFormGroup\n    BFormInput: typeof Components.BFormInput\n    BFormInvalidFeedback: typeof Components.BFormInvalidFeedback\n    BFormRadio: typeof Components.BFormRadio\n    BFormRadioGroup: typeof Components.BFormRadioGroup\n    BFormRow: typeof Components.BFormRow\n    BFormSelect: typeof Components.BFormSelect\n    BFormSelectOption: typeof Components.BFormSelectOption\n    BFormSelectOptionGroup: typeof Components.BFormSelectOptionGroup\n    BFormText: typeof Components.BFormText\n    BFormTextarea: typeof Components.BFormTextarea\n    BFormTag: typeof Components.BFormTag\n    BFormTags: typeof Components.BFormTags\n    BFormSpinbutton: typeof Components.BFormSpinbutton\n    BFormValidFeedback: typeof Components.BFormValidFeedback\n    BImg: typeof Components.BImg\n    BInputGroup: typeof Components.BInputGroup\n    BInputGroupAddon: typeof Components.BInputGroupAddon\n    BInputGroupAppend: typeof Components.BInputGroupAppend\n    BInputGroupPrepend: typeof Components.BInputGroupPrepend\n    BInputGroupText: typeof Components.BInputGroupText\n    BLink: typeof Components.BLink\n    BListGroup: typeof Components.BListGroup\n    BListGroupItem: typeof Components.BListGroupItem\n    BModal: typeof Components.BModal\n    BNav: typeof Components.BNav\n    BNavForm: typeof Components.BNavForm\n    BNavText: typeof Components.BNavText\n    BNavbar: typeof Components.BNavbar\n    BNavbarBrand: typeof Components.BNavbarBrand\n    BNavbarNav: typeof Components.BNavbarNav\n    BNavbarToggle: typeof Components.BNavbarToggle\n    BNavItem: typeof Components.BNavItem\n    BNavItemDropdown: typeof Components.BNavItemDropdown\n    BOffcanvas: typeof Components.BOffcanvas\n    BOverlay: typeof Components.BOverlay\n    BPagination: typeof Components.BPagination\n    BPlaceholder: typeof Components.BPlaceholder\n    BPlaceholderButton: typeof Components.BPlaceholderButton\n    BPlaceholderCard: typeof Components.BPlaceholderCard\n    BPlaceholderTable: typeof Components.BPlaceholderTable\n    BPlaceholderWrapper: typeof Components.BPlaceholderWrapper\n    BPopover: typeof Components.BPopover\n    BProgress: typeof Components.BProgress\n    BProgressBar: typeof Components.BProgressBar\n    BRow: typeof Components.BRow\n    BSpinner: typeof Components.BSpinner\n    BTab: typeof Components.BTab\n    BTable: typeof Components.BTable\n    BTableSimple: typeof Components.BTableSimple\n    BTbody: typeof Components.BTbody\n    BTd: typeof Components.BTd\n    BTfoot: typeof Components.BTfoot\n    BTh: typeof Components.BTh\n    BThead: typeof Components.BThead\n    BTr: typeof Components.BTr\n    BToast: typeof Components.BToast\n    BToaster: typeof Components.BToaster\n    BTooltip: typeof Components.BTooltip\n    BTabs: typeof Components.BTabs\n    BTransition: typeof Components.BTransition\n  }\n}\n\n// Main app plugin\nconst plugin: Plugin = {\n  install(app: App, options: BootstrapVueOptions = {components: true, directives: true}) {\n    const selectedComponents =\n      typeof options.components === 'boolean' || typeof options.components === 'undefined'\n        ? {all: true}\n        : options.components\n\n    const componentKeys = Object.keys(Components) as unknown as ComponentType[]\n    parseActiveImports(selectedComponents, componentKeys).forEach((name) => {\n      const component = Components[name]\n      app.component(name, component)\n    })\n\n    const selectedDirectives =\n      typeof options?.directives === 'boolean' || typeof options.directives === 'undefined'\n        ? {all: true}\n        : options?.directives\n\n    const directiveKeys = Object.keys(Directives) as unknown as DirectiveType[]\n    parseActiveImports(selectedDirectives, directiveKeys).forEach((name) => {\n      const parsedName = name.toLowerCase().startsWith('v') ? name.slice(1) : name\n      const directive = Directives[name]\n      app.directive(parsedName, directive)\n    })\n  },\n}\n\nexport * from './components'\nexport * as Components from './components'\nexport * from './directives'\nexport * as Directives from './directives'\nexport * from './composables/exports'\nexport * as Composables from './composables/exports'\nexport * from './utils/exports'\nexport * as Utils from './utils/exports'\nexport * from './types/exports'\nexport * as Types from './types/exports'\n\nexport {plugin as BootstrapVueNext}\nexport default plugin\n"],"names":["BvEvent","eventType","eventInit","__publicField","prop","setter","BvTriggerableEvent","BvCarouselEvent","from","direction","to","RX_UNDERSCORE","RX_LOWER_UPPER","RX_START_SPACE_WORD","RX_FIRST_START_SPACE_WORD","RX_SPACE_SPLIT","RX_HASH","RX_HASH_ID","RX_STRIP_LOCALE_MODS","RX_REGEXP_REPLACE","RX_SPACES","toString","val","spaces","startCase","str","_","$1","$2","titleCase","upperFirst","trim","escapeRegExp","escapeRegExpChars","escapeChar","value","cssEscape","length","firstCharCode","result","char","index","charCode","HAS_WINDOW_SUPPORT","HAS_DOCUMENT_SUPPORT","HAS_ELEMENT_SUPPORT","IS_BROWSER","WINDOW","DOCUMENT","passiveEventSupported","options","HAS_PASSIVE_EVENT_SUPPORT","ELEMENT_PROTO","isElement","el","getBCR","getActiveElement","excludes","activeElement","isActiveElement","attemptFocus","e","getStyle","isVisible","bcr","isEmptySlot","select","selector","root","selectAll","getAttr","attr","getById","id","setAttr","removeAttr","isTag","tag","name","matches","closestEl","sel","closest","includeRoot","getTransitionDelay","element","style","transitionDelay","transitionDuration","transitionDelayMs","transitionDurationMs","TABLE_TAG_NAMES","eventFilter","filterEvent","event","label","labelFor","input","sides","alignments","placements","acc","side","min","max","round","floor","createCoords","v","oppositeSideMap","oppositeAlignmentMap","clamp","start","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","isStart","lr","rl","tb","bt","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","config","strategy","middleware","platform","validMiddleware","x","y","statefulPlacement","middlewareData","resetCount","i","fn","nextX","nextY","data","reset","detectOverflow","state","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","getPlacementList","autoAlignment","allowedPlacements","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_placementsThatFitOnE","crossAxis","detectOverflowOptions","placements$1","overflow","currentIndex","currentPlacement","alignmentSides","currentOverflows","allOverflows","nextPlacement","placementsSortedByMostSpace","d","a","b","resetPlacement","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","isBasePlacement","fallbackPlacements","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","_overflowsData$map$so","getSideOffsets","isAnySideFullyClipped","hide","offsets","getBoundingRect","minX","minY","maxX","maxY","getRectsByLine","sortedRects","groups","prevRect","inline","nativeClientRects","clientRects","fallback","getBoundingClientRect","firstRect","lastRect","isTop","top","bottom","left","right","width","height","isLeftSide","maxRight","minLeft","measureRects","resetRects","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","apply","heightSide","widthSide","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","maximumClippingWidth","maximumClippingHeight","xMin","xMax","yMin","yMax","nextDimensions","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isContainingBlock","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentIFrame","iframeScale","iframeRect","convertOffsetParentRelativeRectToViewportRelativeRect","isOffsetParentAnElement","documentElement","scroll","offsetRect","getClientRects","getWindowScrollBarX","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","getTrueOffsetParent","polyfill","getOffsetParent","window","getElementRects","getOffsetParentFn","getDimensionsFn","isRTL","observeMove","onMove","io","timeoutId","cleanup","refresh","skip","threshold","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","frameId","prevRefRect","frameLoop","nextRefRect","mergedOptions","platformWithCache","computePosition$1","_$el","args","unref","arrow$1","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","computed","_unref","middlewareOption","placementOption","_unref2","strategyOption","_unref3","transformOption","_unref4","referenceElement","floatingElement","ref","shallowRef","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","position","attach","watch","getCurrentScope","onScopeDispose","shallowReadonly","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","attributeRegex","regex","DefaultAllowlist","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","elementName","attributeList","allowedAttributes","tryOnScopeDispose","createGlobalState","stateFactory","initialized","scope","effectScope","createSharedComposable","composable","subscribers","dispose","toValue","r","isClient","isDef","isObject","noop","isIOS","getIsIOS","_a","createFilterWrapper","filter","wrapper","resolve","reject","bypassFilter","invoke","debounceFilter","ms","timer","maxTimer","lastRejector","_clearTimeout","timer2","duration","maxDuration","pausableFilter","extendFilter","isActive","pause","resume","readonly","toRef","toRef$1","customRef","useDebounceFn","watchWithFilter","source","cb","watchOptions","watchPausable","tryOnMounted","sync","getCurrentInstance","onMounted","nextTick","useIntervalFn","interval","immediate","immediateCallback","clean","intervalValue","isRef","stopWatch","useToNumber","method","radix","nanToZero","resolved","unrefElement","elRef","plain","defaultWindow","useEventListener","target","events","listeners","cleanups","register","listener","options2","optionsClone","stop","_iOSWorkaround","onClickOutside","handler","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","createKeyPredicate","keyFilter","onKeyStroke","key","eventName","passive","dedupe","predicate","useMounted","isMounted","useSupported","callback","useMediaQuery","query","isSupported","mediaQuery","watchEffect","cloneFnJSON","_global","globalKey","handlers","getHandlers","getSSRHandler","guessSerializerType","rawInit","StorageSerializers","customStorageEventName","useStorage","defaults","storage","flush","deep","listenToStorageChanges","writeDefaults","mergeDefaults","shallow","onError","initOnMounted","_a2","type","serializer","pauseWatch","resumeWatch","pausableWatch","write","updateFromCustomEvent","serialized","oldValue","read","usePreferredDark","useColorMode","initialValue","storageKey","storageRef","emitAuto","disableTransition","modes","preferredDark","system","store","updateHTMLAttrs","selector2","attribute2","styleString","current","defaultOnChanged","mode","onChanged","auto","useElementHover","delayEnter","delayLeave","isHovered","toggle","entering","delay","useFocus","focusVisible","innerFocused","targetElement","_b","focused","resolveElement","UseMouseBuiltinExtractors","useMouse","touch","resetOnTouchEnds","_prevMouseEvent","sourceType","extractor","mouseHandler","touchHandler","scrollHandler","pos","mouseHandlerWrapper","touchHandlerWrapper","scrollHandlerWrapper","listenerOptions","useMouseInElement","handleOutside","targetRef","elementX","elementY","elementPositionX","elementPositionY","elementHeight","elementWidth","isOutside","elX","elY","checkOverflowScroll","ele","parent","preventDefault","rawEvent","_target","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","initialOverflow","lock","unlock","useSwipe","onSwipe","onSwipeEnd","onSwipeStart","coordsStart","reactive","coordsEnd","diffX","diffY","abs","isThresholdExceeded","isSwiping","getTouchEventCoords","updateCoordsStart","updateCoordsEnd","isPassiveEventSupported","checkPassiveEventSupport","onTouchEnd","stops","s","document","supportsPassive","optionsBlock","useVModel","props","emit","_c","clone","defaultValue","shouldEmit","vm","_emit","cloneFn","getValue","triggerEmit","proxy","isUpdating","useAlignment","align","isBooleanish","useBooleanish","useAriaInvalid","ariaInvalid","resolvedAriaInvalid","resolvedState","useBLinkHelper","pickProps","pickPropsResolved","resolvedProps","computedLink","isLink","computedLinkProps","pick","useBreadcrumb","items","opts","persist","useColorVariantClasses","obj","useContainerClasses","resolvedValue","useCountdown","intervalOpts","resolvedLength","resolvedInterval","isPaused","intervalsPassed","amountOfIntervals","restart","myPause","myResume","useStateClass","getClasses","resolvedItems","getInputClasses","stateClass","getLabelClasses","getGroupAttr","computedAriaInvalid","getGroupClasses","useId","suffix","getId","useFormInput","modelValue","computedId","autofocusBoolean","disabledBoolean","lazyBoolean","lazyFormatterBoolean","numberBoolean","stateBoolean","trimBoolean","debounceNumber","debounceMaxWaitNumber","internalUpdateModelValue","updateModelValue","force","_formatValue","evt","_getModelValue","onActivated","formattedValue","nextModel","_getNested","path","paths","_normalizeOption","option","componentName","text","disabled","normalizeOptions","modalOpenClassName","useSharedModalStack","stack","countStack","lastStack","pushStack","modal","removeStack","item","registry","pushRegistry","removeRegistry","newValue","useModalManager","modalOpen","currentModal","useModal","instance","modalComponent","resolvedId","findBModal","trigger","component","useModalController","useRadiusElementClasses","resolveRadiusElement","strValue","roundedBoolean","roundedTopBoolean","roundedBottomBoolean","roundedStartBoolean","roundedEndBoolean","useSafeScrollLock","isOpen","bodyScroll","resolvedIsOpen","resolvedBodyScrolling","inverseBodyScrollingValue","modelVal","bodyVal","posDefault","useToast","toasts","payload","self","ind","__props","__emit","modelValueBoolean","showState","showStateInternal","show","clickBoolean","manualBoolean","noShiftBoolean","noSizeBoolean","noFlipBoolean","noFadeBoolean","noAutoCloseBoolean","noHideBoolean","realtimeBoolean","inlineBoolean","persistentBoolean","tooltipBoolean","noninteractiveBoolean","isHtml","hidden","targetTrigger","placeholder","sanitizedTitle","sanitizedContent","isAutoPlacement","offsetNumber","sizeStyles","floatingMiddleware","off","arr","offsetMiddleware","hideMiddleware","inlineMiddleware","arrowMiddleware","sizeMiddleware","placementRef","arrowStyle","computedClasses","resolveBootstrapPlacement","triggerIsOutside","buildTriggerableEvent","showTimeout","__expose","getElement","idElement","bind","elem","unbind","onBeforeUnmount","resolveFloatingPlacement","alignCenter","alignEnd","_placement","resolveActiveStatus","values","resolveContent","missingBindingValue","title","resolveDirectiveProps","binding","div","createApp","h","BPopover","getBreakpointProps","prefix","breakpoints","definition","breakpoint","els","propPrefix","classPrefix","getTableFieldHeadLabel","field","getSlotElements","slot","filterBy","child","isNumeric","carouselInjectionKey","tabsInjectionKey","progressInjectionKey","listGroupInjectionKey","avatarGroupInjectionKey","accordionInjectionKey","checkboxGroupKey","radioGroupKey","collapseInjectionKey","dropdownInjectionKey","navbarInjectionKey","normalizeSlot","$slots","names","stringToInteger","integer","toFloat","float","omit","objToPluck","keysToPluck","memo","get","segments","parseActiveImports","all","others","valuesCopy","merge","suffixPropName","flushBoolean","freeBoolean","provide","toggleBoolean","horizontalBoolean","isNavBoolean","visibleBoolean","skipAnimationBoolean","isCollapsing","close","open","toggleFn","revealTimeout","hideTimeout","_skipAnimation","reveal","newval","wrapperClass","collapseAttrs","useAttrs","parentData","inject","appearBoolean","fadeProperties","NO_FADE_PROPS","FADE_PROPS","baseProperties","computedAttrs","slots","_useSlots","smallBoolean","hasLabelSlot","defaultActiveClass","attrs","activeBoolean","iconBoolean","collapseData","navbarData","routerName","computedHref","toFallback","hash","routerAttr","computedLinkClasses","clicked","pressedValue","pillBoolean","pressedBoolean","squaredBoolean","loadingBoolean","loadingFillBoolean","isToggle","isButton","isBLink","nonStandardTag","linkProps","computedTag","BLink","isHovering","dismissibleBoolean","fadeBoolean","immediateBoolean","showOnPauseBoolean","noHoverPauseBoolean","intervalNumber","hasCloseSlot","countdownLength","closeClasses","remainingMs","isAlertVisible","closeAttrs","onMouseEnter","computeSize","calcValue","SIZES","FONT_SIZE_SCALE","BADGE_FONT_SIZE_SCALE","badgeStartBoolean","badgeTopBoolean","buttonBoolean","squareBoolean","hasDefaultSlot","hasBadgeSlot","showBadge","computedSquare","computedSize","computedVariant","computedRounded","computedRoundedTop","computedRoundedBottom","computedRoundedStart","computedRoundedEnd","radiusElementClasses","badgeClasses","badgeText","computedTextVariant","computedBgVariant","resolvedBackgroundClasses","badgeStyle","textFontStyle","fontSize","marginStyle","overlapScale","onImgError","overlapNumber","paddingStyle","textIndicatorBoolean","dotIndicatorBoolean","computedAriaCurrent","breadcrumb","breadcrumbItemObjects","localItems","activeDefined","idx","verticalBoolean","justifyBoolean","blankBoolean","blockBoolean","centerBoolean","fluidBoolean","fluidGrowBoolean","startBoolean","endBoolean","thumbnailBoolean","heightNumber","widthNumber","computedSrcset","computedSizes","computedDimentions","computedBlankImgSrc","makeBlankImgSrc","color","bottomBoolean","topBoolean","baseClass","computedImgProps","overlayBoolean","hasTitleSlot","hasSubtitleSlot","imgBottomBoolean","imgEndBoolean","imgStartBoolean","noBodyBoolean","hasHeaderSlot","hasFooterSlot","imgAttr","columnsBoolean","deckBoolean","cardTypeClass","keyboardBoolean","rideReverseBoolean","controlsBoolean","indicatorsBoolean","noTouchBoolean","noWrapBoolean","touchThresholdNumber","rideResolved","isTransitioning","rideStarted","relatedTarget","previousModelValue","enterClasses","leaveClasses","prev","next","isRiding","slides","buildBvCarouselEvent","goToValue","onKeydown","onMouseLeave","lengthX","resumeRiding","onBeforeLeave","onAfterLeave","onAfterEnter","hasText","hasCaption","hasContent","computedContentClasses","breakpointCol","breakpointOffset","breakpointOrder","_sfc_main$18","defineComponent","properties","colBoolean","classList","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_normalizeClass","gutterXToNumber","gutterYToNumber","resolvedFluid","dropupBoolean","dropendBoolean","dropstartBoolean","splitBoolean","noCaretBoolean","splitDisabledBoolean","computedOffset","offsetToNumber","button","splitButton","referencePlacement","keynav","active","_d","floatingPlacement","localOffset","buttonClasses","onButtonClick","onSplitClick","onClickInside","currentModelValue","headerId","headerRole","dropdownData","floatingBoolean","novalidateBoolean","validatedBoolean","submitted","forceShowBoolean","computedShow","_sfc_main$U","Teleport","indeterminateBoolean","plainBoolean","buttonGroupBoolean","switchBoolean","requiredBoolean","localValue","newVal","computedRequired","isButtonGroup","classesObject","inputClasses","labelClasses","computedName","buttonsBoolean","stackedBoolean","switchesBoolean","directoryBoolean","multipleBoolean","noDropBoolean","computedCapture","computedAccept","onChange","onDrop","INPUTS","INPUT_SELECTOR","LEGEND_INTERACTIVE_ELEMENTS","SLOT_NAME_LABEL","SLOT_NAME_INVALID_FEEDBACK","SLOT_NAME_VALID_FEEDBACK","SLOT_NAME_DESCRIPTION","SLOT_NAME_DEFAULT","_sfc_main$Q","BCol","BFormInvalidFeedback","BFormRow","BFormText","BFormValidFeedback","labelSrOnlyBoolean","ariaDescribedby","breakPoints","getAlignClasses","propValue","getColProps","content","updateAriaDescribedby","$input","newIds","oldIds","ids","contentColProps","labelAlignClasses","labelColProps","isHorizontal","tagName","inputs","isFieldset","$label","labelContent","labelId","labelTag","renderProps","$invalidFeedback","invalidFeedbackContent","invalidFeedbackId","$validFeedback","validFeedbackContent","validFeedbackId","$description","descriptionContent","descriptionId","contentBlocks","$content","rowProps","onInput","onBlur","focus","blur","readonlyBoolean","plaintextBoolean","isHighlighted","isRange","isColor","formOptions","selectSizeNumber","computedSelectSize","RTL_LANGS","locale","isLocaleRTL","parts","locale1","locale2","parseEventOptions","eventOn","eventOff","eventOnOff","on","eventParams","stopEvent","propagation","immediatePropagation","CODE_DOWN","CODE_END","CODE_HOME","CODE_PAGEDOWN","CODE_PAGEUP","CODE_UP","defaultValues","KEY_CODES","wrapBoolean","computedSpinClasses","$_autoDelayTimer","$_autoRepeatTimer","$_keyIsDown","stepNumber","computedStep","minNumber","computedMin","maxNumber","computedMax","step","repeatDelayNumber","computedDelay","repeatIntervalNumber","computedInterval","repeatThresholdNumber","computedThreshold","repeatStepMultiplierNumber","computedStepMultiplier","computedPrecision","computedMultiplier","valueAsFixed","computedLocale","locales","computedRTL","defaultFormatter","computedFormatter","stepValue","multiplier","wrap","stepUp","stepDown","code","altKey","ctrlKey","metaKey","resetTimers","handleStepRepeat","stepper","isMouseEvent","count","onMouseup","setMouseup","buttons","incrementSvgAttrs","decrementSvgAttrs","sharedButtonAttrs","sharedSvgAttrs","incrementAttrs","decrementAttrs","noRemoveBoolean","tagText","taglabelId","addOnChangeBoolean","noAddOnEnterBoolean","noOuterFocusBoolean","noTagRemoveBoolean","removeOnDeleteBoolean","tagPillsBoolean","limitNumber","_inputId","tags","inputValue","shouldRemoveOnDelete","lastRemovedTag","validTags","invalidTags","duplicateTags","isDuplicate","isInvalid","isLimitReached","disableAddButton","slotAttrs","addTag","removeTag","onFocusin","onFocus","separator","separatorRegExp","newTags","t","newTag","tagIndex","noResizeBoolean","computedStyles","hasAppend","hasPrepend","isTextBoolean","numberedBoolean","computedHorizontal","horizontal","actionBoolean","tagComputed","isAction","localAttrs","positionStyles","fixedBoolean","noSpinnerBoolean","noCenterBoolean","showBoolean","spinnerSmallBoolean","computedAriaBusy","spinnerAttrs","overlayStyles","overlayClasses","blurClasses","blurStyles","spinWrapperStyles","defaultModalDialogZIndex","busyBoolean","cancelDisabledBoolean","centeredBoolean","hideBackdropBoolean","hideFooterBoolean","hideHeaderBoolean","hideHeaderCloseBoolean","noCloseOnBackdropBoolean","noCloseOnEscBoolean","autoFocusBoolean","okDisabledBoolean","okOnlyBoolean","scrollableBoolean","titleSrOnlyBoolean","teleportDisabledBoolean","bodyScrollingBoolean","computedFullScreen","okButton","cancelButton","closeButton","lazyLoadCompleted","modalFocus","okButtonFocus","cancelButtonFocus","closeButtonFocus","modalClasses","lazyShowing","computedBackdropVariant","hasHeaderCloseSlot","modalDialogClasses","resolvedBodyBgClasses","bodyClasses","resolvedHeaderBgClasses","headerClasses","headerCloseAttrs","resolvedFooterBgClasses","footerClasses","titleClasses","disableCancel","disableOk","showFn","pickFocusItem","onBeforeEnter","onLeave","activePosition","activeModalCount","computedZIndex","sharedSlots","cardHeaderBoolean","fillBoolean","justifiedBoolean","pillsBoolean","tabsBoolean","underlineBoolean","dropdown","containerBoolean","autoCloseBoolean","printBoolean","computedNavbarExpand","computedRole","containerClass","setTheme","BColorMode","getTargets","modifiers","arg","targets","href","targetIds","targetId","checkVisibility","visible","handleUpdate","vBToggle","BTooltip","onClick","backdropBoolean","noHeaderCloseBoolean","noHeaderBoolean","noFocusBoolean","showBackdrop","headerCloseClasses","OnBeforeEnter","OnAfterEnter","OnAfterLeave","DEFAULT_PER_PAGE","DEFAULT_TOTAL_ROWS","firstNumberBoolean","hideEllipsisBoolean","hideGotoEndButtonsBoolean","lastNumberBoolean","perPageNumber","totalRowsNumber","modelValueNumber","perPageSanitized","totalRowsSanitized","numberOfPages","computedFill","justifyAlign","isActivePage","pageNumber","getTabIndex","num","checkDisabled","firstDisabled","prevDisabled","lastDisabled","nextDisabled","getEndButtonProps","dis","classVal","firstButtonProps","prevButtonProps","nextButtonProps","lastEndButtonProps","ellipsisProps","computedWrapperClasses","startNumber","lStartNumber","numberOfLinks","showFirstDots","pagesLeft","rShowDots","n","showLastDots","paginationWindowEnd","lastPageNumber","pagination","pageClick","clickEvent","calculatedValue","page","pages","widthString","colsString","wrapperClasses","noButtonBoolean","noFooterBoolean","noImgBoolean","defaultAttrs","footerComponent","BPlaceholder","BPlaceholderButton","captionTopBoolean","borderlessBoolean","borderedBoolean","darkBoolean","hoverBoolean","stripedBoolean","stickyHeaderBoolean","stripedColumnsBoolean","resolvedResponsive","resolvedStacked","responsiveClasses","columnsToNumber","rowsToNumber","computedHeaderColumns","computedFooterColumns","headerColumnsNumber","footerColumnsNumber","columnsNumber","rowsNumber","computedHeaderColumnsLength","computedFooterColumnsLength","showFooterBoolean","animatedBoolean","showProgressBoolean","showValueBoolean","numberPrecision","numberValue","numberMax","parentMaxNumber","computedLabel","computedWidth","rowColsProps","_sfc_main$d","noGuttersBoolean","rowColsClasses","stickyColumnBoolean","footCloneBoolean","labelStackedBoolean","showEmptyBoolean","computedStacked","computedTableClasses","computedFields","k","computedFieldsTotal","formatItem","fieldKey","formatter","headerClicked","isFooter","toggleRowDetails","tr","getFieldColumnClasses","getFieldRowClasses","getRowClasses","sortByModel","busyModel","sortDescModel","selectedItemsModel","selectedItemsToSet","selectedItemsSetUtilities","internalItems","sortDescBoolean","noProviderPagingBoolean","noProviderSortingBoolean","noProviderFilteringBoolean","selectableBoolean","noSortableIconBoolean","currentPageNumber","isFilterableTable","usesProvider","isSelecting","isSortable","tableClasses","getBusyRowClasses","getIconStyle","computedItems","sortItems","sortKey","sortField","realVal","ob","filterItems","mappedItems","computedDisplayItems","handleRowSelection","row","shiftClicked","ctrlClicked","metaClicked","lastSelectedItem","lastSelectedIndex","selectStartIndex","selectEndIndex","notifySelectionEvent","onRowClick","handleFieldSorting","fieldSortable","onFieldHeadClick","callItemsProvider","response","notifyFilteredItems","providerPropsWatch","oldVal","inNoProvider","noProvideWhenPaging","noProvideWhenFiltering","noProvideWhenSorting","oldFilter","unselectableItems","buttonId","lazyRenderCompleted","tab","onUnmounted","computedLazy","computedLazyOnce","computedActive","showSlot","shown","activeId","cardBoolean","noNavStyleBoolean","tabsInternal","tabs","_tab","showEmpty","navTabsClasses","activateTab","tabEvent","handleClick","maxIdx","minIdx","registerTab","unregisterTab","findActive","isStatusBoolean","noCloseButtonBoolean","isToastVisible","toastPositions","pluckToastItem","popover","plugin","app","selectedComponents","componentKeys","Components","selectedDirectives","directiveKeys","Directives","parsedName","directive"],"mappings":"ycAKA,MAAqBA,EAAQ,CA6B3B,YACEC,EACAC,EAAkE,GAClE,CA/BOC,GAAA,kBAAsB,IACtBA,GAAA,mBAA6B,MAC9BA,GAAA,yBAAoB,IACnBA,GAAA,iBAAoB,IACpBA,GAAA,mBAA6B,MAC9BA,GAAA,wBACCA,GAAA,qBAAoC,MACpCA,GAAA,cAA6B,MAyBpC,GAAI,CAACF,EACH,MAAM,IAAI,UACR,wBAAwB,KAAK,YAAY,IAAI,2BAA2B,UAAU,MAAM,SAAA,EAM5F,OAAO,OAAO,KAAMD,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,EAEvD,KAAA,gBAAkB,UAA2B,CAC5C,KAAK,aACP,KAAK,iBAAmB,GAC1B,CAEJ,CArCA,IAAW,kBAAmB,CAC5B,OAAO,KAAK,iBACd,CACA,IAAc,iBAAiBG,EAAM,CACnC,KAAK,kBAAoBA,CAC3B,CAIA,IAAW,gBAAiB,CAC1B,OAAO,KAAK,eACd,CAGA,IAAc,eAAeC,EAAoB,CAC/C,KAAK,gBAAkBA,CACzB,CAuBA,WAAW,UAAW,CACb,MAAA,CACL,WAAY,GACZ,YAAa,KACb,UAAW,GACX,YAAa,KACb,cAAe,KACf,OAAQ,IAAA,CAEZ,CACF,CC/DA,MAAqBC,WAA2BN,EAAQ,CAGtD,YACEC,EACAC,EAA6E,GAC7E,CACA,MAAMD,EAAWC,CAAS,EANnBC,GAAA,eAAyB,MAUhC,OAAO,OAAO,KAAMH,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,CAC9D,CAEA,WAAW,UAAW,CACb,MAAA,CACL,GAAG,MAAM,SACT,QAAS,IAAA,CAEb,CACF,CCpBA,MAAqBM,WAAwBP,EAAQ,CAKnD,YACEC,EACAC,EAKA,CACA,MAAMD,EAAWC,CAAS,EAZnBC,GAAA,aACAA,GAAA,WACAA,GAAA,kBAWP,OAAO,OAAO,KAAMH,GAAQ,SAAUE,EAAW,CAAC,UAAAD,EAAU,EAC5D,KAAM,CAAC,KAAAO,EAAM,UAAAC,EAAW,GAAAC,CAAA,EAAMR,EAC9B,KAAK,KAAOM,EACZ,KAAK,GAAKE,EACV,KAAK,UAAYD,CACnB,CAEA,WAAW,UAAW,CACb,MAAA,CACL,GAAG,MAAM,QAAA,CAEb,CACF,CC5BO,MAAME,GAAgB,KAChBC,GAAiB,kBACjBC,GAAsB,cACtBC,GAA4B,aAC5BC,GAAiB,MACjBC,GAAU,KACVC,GAAa,wBAEbC,GAAuB,QACvBC,GAAoB,wBACpBC,GAAY,mBCOZC,GAAW,CAACC,EAAcC,EAAS,IAC9C,OAAOD,GAAQ,SACXA,EACqBA,GAAQ,KAC7B,GACA,MAAM,QAAQA,CAAG,GAChB,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAM,mBACvCA,EAAI,WAAa,OAAO,UAAU,SACpC,KAAK,UAAUA,EAAK,KAAMC,CAAM,EAChC,OAAOD,CAAG,EAMHE,GAAaC,GACxBA,EACG,QAAQd,GAAe,GAAG,EAC1B,QAAQC,GAAgB,CAACc,EAAGC,EAAIC,IAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQd,GAA2B,CAACY,EAAGC,EAAIC,IAAOD,EAAKC,EAAG,YAAa,CAAA,EAM/DC,GAAaJ,GACxBA,EACG,QAAQd,GAAe,GAAG,EAC1B,QAAQC,GAAgB,CAACc,EAAGC,EAAIC,IAAO,GAAGD,CAAE,IAAIC,CAAE,EAAE,EACpD,QAAQf,GAAqB,CAACa,EAAGC,EAAIC,IAAOD,EAAKC,EAAG,YAAa,CAAA,EAQzDE,GAAcL,GAAwB,CAC3C,MAAAM,EAAON,EAAI,OACV,OAAAM,EAAK,OAAO,CAAC,EAAE,cAAgBA,EAAK,MAAM,CAAC,CACpD,EAQaC,GAAgBP,GAAwBA,EAAI,QAAQN,GAAmB,MAAM,EAS7Ec,GAAqBR,GAChCO,GAAaP,CAAG,EAAE,QAAQL,GAAW,KAAK,ECzEtCc,GAAcC,GAAkB,KAAKA,CAAK,GAQjCC,GAACD,GAA2B,CACnC,MAAAb,EAAMD,GAASc,CAAK,EAEpB,CAAC,OAAAE,CAAU,EAAAf,EACXgB,EAAgBhB,EAAI,WAAW,CAAC,EAE/B,OAAAA,EAAI,MAAM,EAAE,EAAE,OAAO,CAACiB,EAAgBC,EAAcC,IAAkB,CACrE,MAAAC,EAAWpB,EAAI,WAAWmB,CAAK,EAGrC,OAAIC,IAAa,EACR,GAAGH,CAAM,IAMhBG,IAAa,KAEZA,GAAY,GAAUA,GAAY,IAElCD,IAAU,GAAKC,GAAY,IAAUA,GAAY,IAGjDD,IAAU,GAAKC,GAAY,IAAUA,GAAY,IAAUJ,IAAkB,GAGvEC,EAASL,GAAW,GAAGQ,EAAS,SAAS,EAAE,CAAC,GAAG,EAMtDD,IAAU,GAEVC,IAAa,IAEbL,IAAW,EAGJE,EAASL,GAAWM,CAAI,EAM/BE,GAAY,KAEZA,IAAa,IAEbA,IAAa,IAEZA,GAAY,IAAUA,GAAY,IAElCA,GAAY,IAAUA,GAAY,IAElCA,GAAY,IAAUA,GAAY,IAG5BH,EAASC,EAKXD,EAASL,GAAWM,CAAI,GAC9B,EAAE,CACP,ECzEaG,GAAqB,OAAO,OAAW,IAIvCC,GAAuB,OAAO,SAAa,IAI3CC,GAAsB,OAAO,QAAY,IAazCC,GAAaH,IAAsBC,IATX,OAAO,UAAc,IAe7CG,GAASJ,GAAqB,OAAU,GAKxCK,GAAWJ,GAAuB,SAAY,IAMjB,IAAM,CAC9C,IAAIK,EAAwB,GAC5B,GAAI,CAACH,GAAmB,OAAAG,EACpB,GAAA,CACF,MAAMC,EAAU,CAGd,IAAI,SAAU,CACY,OAAAD,EAAA,GACjBA,CACT,CAAA,EAEE,qBAAsBF,IAAU,OAAOA,GAAO,kBAAqB,YAC9DA,GAAA,iBAAiB,OAAQG,EAASA,CAAO,EAE9C,wBAAyBH,IAAU,OAAOA,GAAO,qBAAwB,YACpEA,GAAA,oBAAoB,OAAQG,EAASA,CAAO,CACrD,MACM,CACkBD,EAAA,EAC1B,CACF,GAAG,EC3DU,MAAAN,GAAqB,OAAO,OAAW,IAYvCG,GAAaH,IARU,OAAO,SAAa,KAInB,OAAO,UAAc,IAS7CI,GAASJ,GAAqB,OAAU,GAMxCQ,IAA6B,IAAM,CAC9C,IAAIF,EAAwB,GAC5B,GAAIH,GACE,GAAA,CACF,MAAMI,EAAU,CAGd,IAAI,SAAU,CACYD,EAAA,EAG1B,CAAA,EAIKF,GAAA,iBAAiB,OAAQG,EAASA,CAAO,EAGzCH,GAAA,oBAAoB,OAAQG,EAASA,CAAO,CAAA,MAC7C,CACkBD,EAAA,EAC1B,CAEK,OAAAA,CACT,GAAG,ECzCGG,GAAgBP,GAAsB,QAAQ,UAAY,OAKnDQ,GAAaC,GACxB,CAAC,EAAEA,GAAM,OAAOA,GAAO,UAAY,aAAcA,GAAMA,EAAG,WAAa,KAAK,cAKjEC,GAAUD,GAAqBD,GAAUC,CAAE,EAAIA,EAAG,sBAA0B,EAAA,KAK5EE,GAAmB,CAACC,EAAW,KAAuB,CAC3D,KAAA,CAAC,cAAAC,CAAiB,EAAA,SACjB,OAAAA,GAAiB,CAACD,EAAS,KAAMH,GAAoBA,IAAOI,CAAa,EAC5EA,EACA,IACN,EAKaC,GAAmBL,GAC9BD,GAAUC,CAAE,GAAKA,IAAOE,KAKbI,GAAe,CAACN,EAAiBJ,EAAU,KAAgB,CAClE,GAAA,CACFI,EAAG,MAAMJ,CAAO,QACTW,EAAG,CAEV,QAAQ,MAAMA,CAAC,CACjB,CACA,OAAOF,GAAgBL,CAAE,CAC3B,EAsBaQ,GAAW,CAACR,EAAiBlD,IACxCA,GAAQiD,GAAUC,CAAE,GAAIA,EAAG,aAAalD,CAAI,GAAK,KAUtC2D,GAAaT,GAA6B,CAMrD,GAAIQ,GAASR,EAAI,SAAS,IAAM,OAEvB,MAAA,GAKH,MAAAU,EAAMT,GAAOD,CAAE,EACrB,MAAO,CAAC,EAAEU,GAAOA,EAAI,OAAS,GAAKA,EAAI,MAAQ,EACjD,EAKaC,GAAeX,KAAmCA,GAAA,YAAAA,MAAU,IAAI,SAAW,EAU3EY,GAAS,CAACC,EAAkBC,KACtCf,GAAUe,CAAI,EAAIA,EAAOpB,IAAU,cAAcmB,CAAQ,GAAK,KAKpDE,GAAY,CAACF,EAAkBC,IAC1C,MAAM,KAAK,EAAEf,GAAUe,CAAI,EAAIA,EAAOpB,IAAU,iBAAiBmB,CAAQ,CAAC,CAAC,EAKhEG,GAAU,CAAChB,EAA2BiB,IACjDA,GAAQlB,GAAUC,CAAE,EAAIA,EAAG,aAAaiB,CAAI,EAAI,KAMrCC,GAAWC,GACtBzB,GAAS,eAAe,KAAK,KAAKyB,CAAE,EAAIA,EAAG,MAAM,CAAC,EAAIA,CAAE,GAAK,KAKlDC,GAAU,CAACpB,EAAiBiB,EAAcpC,IAAwB,CACzEoC,GAAQlB,GAAUC,CAAE,GACnBA,EAAA,aAAaiB,EAAMpC,CAAK,CAE/B,EASawC,GAAa,CAACrB,EAAiBiB,IAAuB,CAC7DA,GAAQlB,GAAUC,CAAE,GACtBA,EAAG,gBAAgBiB,CAAI,CAE3B,EAKaK,GAAQ,CAACC,EAAaC,IACjCzD,GAASwD,CAAG,EAAE,YAAA,IAAkBxD,GAASyD,CAAI,EAAE,YAAY,EAmBhDC,GAAU,CAACzB,EAAaa,IACnCd,GAAUC,CAAE,EAAIA,EAAG,QAAQa,CAAQ,EAAI,GAO5Ba,IACX5B,IAAA,YAAAA,GAAe,UACf,SAAyB6B,EAAa,CACpC,IAAI3B,EAAkC,KACtC,GAAI,CAACA,EAAW,OAAA,KACb,EAAA,CAED,GAAID,GAAUC,CAAE,GAAKA,EAAG,QAAQ2B,CAAG,EAAU,OAAA3B,EAExCA,EAAAA,EAAG,eAAiBA,EAAG,UAAA,OACrBA,IAAO,MAAQA,EAAG,WAAa,KAAK,cACtC,OAAA,IACT,EAUW4B,GAAU,CAACf,EAAkBC,EAAee,EAAc,KAAU,CAC3E,GAAA,CAAC9B,GAAUe,CAAI,EACV,OAAA,KAET,MAAMd,EAAK0B,GAAU,KAAKZ,EAAMD,CAAQ,EAIxC,OAAOgB,EAAc7B,EAAKA,IAAOc,EAAO,KAAOd,CACjD,EAKa8B,GAAsBC,GAAyB,CACpD,MAAAC,EAAQ,OAAO,iBAAiBD,CAAO,EAEvCE,EAAkBD,EAAM,gBAAgB,MAAM,GAAG,EAAE,CAAC,GAAK,GACzDE,EAAqBF,EAAM,mBAAmB,MAAM,GAAG,EAAE,CAAC,GAAK,GAC/DG,EAAoB,OAAOF,EAAgB,MAAM,EAAG,EAAE,CAAC,EAAI,IAC3DG,EAAuB,OAAOF,EAAmB,MAAM,EAAG,EAAE,CAAC,EAAI,IACvE,OAAOC,EAAoBC,CAC7B,ECrOMC,GAAkB,CAAC,KAAM,KAAM,IAAI,EAInCC,GAAc,CAClB,IACA,MACA,SACA,WACA,uCACA,wCACA,0CACA,gBACA,kBACA,kBACA,oBACA,2CACF,EAAE,KAAK,GAAG,EAIKC,GAACC,GAAiB,CAE/B,GAAI,CAACA,GAAS,CAACA,EAAM,OACZ,MAAA,GAET,MAAMxC,EAAKwC,EAAM,OAEZ,GAAA,aAAcxC,GAAMA,EAAG,UAAaqC,GAAgB,QAAQrC,EAAG,OAAO,IAAM,GACxE,MAAA,GAGL,GAAA4B,GAAQ,iBAAkB5B,CAAE,EACvB,MAAA,GAET,MAAMyC,EAAQzC,EAAG,UAAY,QAAUA,EAAK4B,GAAQ,QAAS5B,CAAE,EAI/D,GAAIyC,EAAO,CACH,MAAAC,EAAW1B,GAAQyB,EAAO,KAAK,EAC/BE,EAAQD,EAAWxB,GAAQwB,CAAQ,EAAI9B,GAAO,0BAA2B6B,CAAK,EAChF,GAAAE,GAAS,CAACA,EAAM,SACX,MAAA,EAEX,CAIO,OAAAlB,GAAQzB,EAAIsC,EAAW,CAChC,ECpDMM,GAAQ,CAAC,MAAO,QAAS,SAAU,MAAM,EACzCC,GAAa,CAAC,QAAS,KAAK,EAC5BC,GAA0BF,GAAM,OAAO,CAACG,EAAKC,IAASD,EAAI,OAAOC,EAAMA,EAAO,IAAMH,GAAW,CAAC,EAAGG,EAAO,IAAMH,GAAW,CAAC,CAAC,EAAG,CAAA,CAAE,EAClII,GAAM,KAAK,IACXC,GAAM,KAAK,IACXC,GAAQ,KAAK,MACbC,GAAQ,KAAK,MACbC,GAAeC,IAAM,CACzB,EAAGA,EACH,EAAGA,CACL,GACMC,GAAkB,CACtB,KAAM,QACN,MAAO,OACP,OAAQ,MACR,IAAK,QACP,EACMC,GAAuB,CAC3B,MAAO,MACP,IAAK,OACP,EACA,SAASC,GAAMC,EAAO7E,EAAO8E,EAAK,CAChC,OAAOT,GAAIQ,EAAOT,GAAIpE,EAAO8E,CAAG,CAAC,CACnC,CACA,SAASC,GAAS/E,EAAOgF,EAAO,CAC9B,OAAO,OAAOhF,GAAU,WAAaA,EAAMgF,CAAK,EAAIhF,CACtD,CACA,SAASiF,GAAQC,EAAW,CAC1B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASC,GAAaD,EAAW,CAC/B,OAAOA,EAAU,MAAM,GAAG,EAAE,CAAC,CAC/B,CACA,SAASE,GAAgBC,EAAM,CAC7B,OAAOA,IAAS,IAAM,IAAM,GAC9B,CACA,SAASC,GAAcD,EAAM,CAC3B,OAAOA,IAAS,IAAM,SAAW,OACnC,CACA,SAASE,GAAYL,EAAW,CAC9B,MAAO,CAAC,MAAO,QAAQ,EAAE,SAASD,GAAQC,CAAS,CAAC,EAAI,IAAM,GAChE,CACA,SAASM,GAAiBN,EAAW,CACnC,OAAOE,GAAgBG,GAAYL,CAAS,CAAC,CAC/C,CACA,SAASO,GAAkBP,EAAWQ,EAAOC,EAAK,CAC5CA,IAAQ,SACVA,EAAM,IAER,MAAMC,EAAYT,GAAaD,CAAS,EAClCW,EAAgBL,GAAiBN,CAAS,EAC1ChF,EAASoF,GAAcO,CAAa,EAC1C,IAAIC,EAAoBD,IAAkB,IAAMD,KAAeD,EAAM,MAAQ,SAAW,QAAU,OAASC,IAAc,QAAU,SAAW,MAC9I,OAAIF,EAAM,UAAUxF,CAAM,EAAIwF,EAAM,SAASxF,CAAM,IACjD4F,EAAoBC,GAAqBD,CAAiB,GAErD,CAACA,EAAmBC,GAAqBD,CAAiB,CAAC,CACpE,CACA,SAASE,GAAsBd,EAAW,CACxC,MAAMe,EAAoBF,GAAqBb,CAAS,EACxD,MAAO,CAACgB,GAA8BhB,CAAS,EAAGe,EAAmBC,GAA8BD,CAAiB,CAAC,CACvH,CACA,SAASC,GAA8BhB,EAAW,CAChD,OAAOA,EAAU,QAAQ,aAAcU,GAAajB,GAAqBiB,CAAS,CAAC,CACrF,CACA,SAASO,GAAYhC,EAAMiC,EAAST,EAAK,CACvC,MAAMU,EAAK,CAAC,OAAQ,OAAO,EACrBC,EAAK,CAAC,QAAS,MAAM,EACrBC,EAAK,CAAC,MAAO,QAAQ,EACrBC,EAAK,CAAC,SAAU,KAAK,EAC3B,OAAQrC,EAAI,CACV,IAAK,MACL,IAAK,SACH,OAAIwB,EAAYS,EAAUE,EAAKD,EACxBD,EAAUC,EAAKC,EACxB,IAAK,OACL,IAAK,QACH,OAAOF,EAAUG,EAAKC,EACxB,QACE,MAAO,EACV,CACH,CACA,SAASC,GAA0BvB,EAAWwB,EAAepI,EAAWqH,EAAK,CAC3E,MAAMC,EAAYT,GAAaD,CAAS,EACxC,IAAIyB,EAAOR,GAAYlB,GAAQC,CAAS,EAAG5G,IAAc,QAASqH,CAAG,EACrE,OAAIC,IACFe,EAAOA,EAAK,IAAIxC,GAAQA,EAAO,IAAMyB,CAAS,EAC1Cc,IACFC,EAAOA,EAAK,OAAOA,EAAK,IAAIT,EAA6B,CAAC,IAGvDS,CACT,CACA,SAASZ,GAAqBb,EAAW,CACvC,OAAOA,EAAU,QAAQ,yBAA0Bf,GAAQO,GAAgBP,CAAI,CAAC,CAClF,CACA,SAASyC,GAAoBC,EAAS,CACpC,MAAO,CACL,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,GAAGA,CACP,CACA,CACA,SAASC,GAAiBD,EAAS,CACjC,OAAO,OAAOA,GAAY,SAAWD,GAAoBC,CAAO,EAAI,CAClE,IAAKA,EACL,MAAOA,EACP,OAAQA,EACR,KAAMA,CACV,CACA,CACA,SAASE,GAAiBC,EAAM,CAC9B,MAAO,CACL,GAAGA,EACH,IAAKA,EAAK,EACV,KAAMA,EAAK,EACX,MAAOA,EAAK,EAAIA,EAAK,MACrB,OAAQA,EAAK,EAAIA,EAAK,MAC1B,CACA,CCtHA,SAASC,GAA2BC,EAAMhC,EAAWS,EAAK,CACxD,GAAI,CACF,UAAAwB,EACA,SAAAC,CACD,EAAGF,EACJ,MAAMG,EAAW9B,GAAYL,CAAS,EAChCW,EAAgBL,GAAiBN,CAAS,EAC1CoC,EAAchC,GAAcO,CAAa,EACzC1B,EAAOc,GAAQC,CAAS,EACxBqC,EAAaF,IAAa,IAC1BG,EAAUL,EAAU,EAAIA,EAAU,MAAQ,EAAIC,EAAS,MAAQ,EAC/DK,EAAUN,EAAU,EAAIA,EAAU,OAAS,EAAIC,EAAS,OAAS,EACjEM,EAAcP,EAAUG,CAAW,EAAI,EAAIF,EAASE,CAAW,EAAI,EACzE,IAAIK,EACJ,OAAQxD,EAAI,CACV,IAAK,MACHwD,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIC,EAAS,MAClC,EACM,MACF,IAAK,SACHO,EAAS,CACP,EAAGH,EACH,EAAGL,EAAU,EAAIA,EAAU,MACnC,EACM,MACF,IAAK,QACHQ,EAAS,CACP,EAAGR,EAAU,EAAIA,EAAU,MAC3B,EAAGM,CACX,EACM,MACF,IAAK,OACHE,EAAS,CACP,EAAGR,EAAU,EAAIC,EAAS,MAC1B,EAAGK,CACX,EACM,MACF,QACEE,EAAS,CACP,EAAGR,EAAU,EACb,EAAGA,EAAU,CACrB,CACG,CACD,OAAQhC,GAAaD,CAAS,EAAC,CAC7B,IAAK,QACHyC,EAAO9B,CAAa,GAAK6B,GAAe/B,GAAO4B,EAAa,GAAK,GACjE,MACF,IAAK,MACHI,EAAO9B,CAAa,GAAK6B,GAAe/B,GAAO4B,EAAa,GAAK,GACjE,KACH,CACD,OAAOI,CACT,CASA,MAAMC,GAAkB,MAAOT,EAAWC,EAAUS,IAAW,CAC7D,KAAM,CACJ,UAAA3C,EAAY,SACZ,SAAA4C,EAAW,WACX,WAAAC,EAAa,CAAE,EACf,SAAAC,CACD,EAAGH,EACEI,EAAkBF,EAAW,OAAO,OAAO,EAC3CpC,EAAM,MAAOqC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMZ,CAAQ,GAC5E,IAAI1B,EAAQ,MAAMsC,EAAS,gBAAgB,CACzC,UAAAb,EACA,SAAAC,EACA,SAAAU,CACJ,CAAG,EACG,CACF,EAAAI,EACA,EAAAC,CACD,EAAGlB,GAA2BvB,EAAOR,EAAWS,CAAG,EAChDyC,EAAoBlD,EACpBmD,EAAiB,CAAA,EACjBC,EAAa,EACjB,QAASC,EAAI,EAAGA,EAAIN,EAAgB,OAAQM,IAAK,CAC/C,KAAM,CACJ,KAAA5F,EACA,GAAA6F,CACN,EAAQP,EAAgBM,CAAC,EACf,CACJ,EAAGE,EACH,EAAGC,EACH,KAAAC,EACA,MAAAC,CACD,EAAG,MAAMJ,EAAG,CACX,EAAAN,EACA,EAAAC,EACA,iBAAkBjD,EAClB,UAAWkD,EACX,SAAAN,EACA,eAAAO,EACA,MAAA3C,EACA,SAAAsC,EACA,SAAU,CACR,UAAAb,EACA,SAAAC,CACD,CACP,CAAK,EAUD,GATAc,EAAIO,GAAwBP,EAC5BC,EAAIO,GAAwBP,EAC5BE,EAAiB,CACf,GAAGA,EACH,CAAC1F,CAAI,EAAG,CACN,GAAG0F,EAAe1F,CAAI,EACtB,GAAGgG,CACJ,CACP,EACQC,GAASN,GAAc,GAAI,CAC7BA,IACI,OAAOM,GAAU,WACfA,EAAM,YACRR,EAAoBQ,EAAM,WAExBA,EAAM,QACRlD,EAAQkD,EAAM,QAAU,GAAO,MAAMZ,EAAS,gBAAgB,CAC5D,UAAAb,EACA,SAAAC,EACA,SAAAU,CACZ,CAAW,EAAIc,EAAM,OAEZ,CACC,EAAAV,EACA,EAAAC,CACD,EAAGlB,GAA2BvB,EAAO0C,EAAmBzC,CAAG,GAE9D4C,EAAI,GACJ,QACD,CACF,CACD,MAAO,CACL,EAAAL,EACA,EAAAC,EACA,UAAWC,EACX,SAAAN,EACA,eAAAO,CACJ,CACA,EAUA,eAAeQ,GAAeC,EAAO/H,EAAS,CAC5C,IAAIgI,EACAhI,IAAY,SACdA,EAAU,CAAA,GAEZ,KAAM,CACJ,EAAAmH,EACA,EAAAC,EACA,SAAAH,EACA,MAAAtC,EACA,SAAAsD,EACA,SAAAlB,CACD,EAAGgB,EACE,CACJ,SAAAG,EAAW,oBACX,aAAAC,EAAe,WACf,eAAAC,EAAiB,WACjB,YAAAC,EAAc,GACd,QAAAvC,EAAU,CACd,EAAM9B,GAAShE,EAAS+H,CAAK,EACrBO,EAAgBvC,GAAiBD,CAAO,EAExC3D,EAAU8F,EAASI,EADND,IAAmB,WAAa,YAAc,WACbA,CAAc,EAC5DG,EAAqBvC,GAAiB,MAAMiB,EAAS,gBAAgB,CACzE,SAAWe,EAAwB,MAAOf,EAAS,WAAa,KAAO,OAASA,EAAS,UAAU9E,CAAO,KAAO,MAAO6F,EAAgC7F,EAAUA,EAAQ,gBAAmB,MAAO8E,EAAS,oBAAsB,KAAO,OAASA,EAAS,mBAAmBgB,EAAS,QAAQ,GAChS,SAAAC,EACA,aAAAC,EACA,SAAApB,CACD,CAAA,CAAC,EACId,EAAOmC,IAAmB,WAAa,CAC3C,GAAGzD,EAAM,SACT,EAAAwC,EACA,EAAAC,CACJ,EAAMzC,EAAM,UACJ6D,EAAe,MAAOvB,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgBgB,EAAS,QAAQ,GAC5GQ,EAAe,MAAOxB,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUuB,CAAY,GAAO,MAAOvB,EAAS,UAAY,KAAO,OAASA,EAAS,SAASuB,CAAY,IAAO,CACvL,EAAG,EACH,EAAG,CACP,EAAM,CACF,EAAG,EACH,EAAG,CACP,EACQE,EAAoB1C,GAAiBiB,EAAS,sDAAwD,MAAMA,EAAS,sDAAsD,CAC/K,KAAAhB,EACA,aAAAuC,EACA,SAAAzB,CACJ,CAAG,EAAId,CAAI,EACT,MAAO,CACL,KAAMsC,EAAmB,IAAMG,EAAkB,IAAMJ,EAAc,KAAOG,EAAY,EACxF,QAASC,EAAkB,OAASH,EAAmB,OAASD,EAAc,QAAUG,EAAY,EACpG,MAAOF,EAAmB,KAAOG,EAAkB,KAAOJ,EAAc,MAAQG,EAAY,EAC5F,OAAQC,EAAkB,MAAQH,EAAmB,MAAQD,EAAc,OAASG,EAAY,CACpG,CACA,CAOA,MAAME,GAAQ3I,IAAY,CACxB,KAAM,QACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,EAAAZ,EACA,EAAAC,EACA,UAAAjD,EACA,MAAAQ,EACA,SAAAsC,EACA,SAAAgB,EACA,eAAAX,CACD,EAAGS,EAEE,CACJ,QAAA5F,EACA,QAAA2D,EAAU,CACX,EAAG9B,GAAShE,EAAS+H,CAAK,GAAK,CAAA,EAChC,GAAI5F,GAAW,KACb,MAAO,GAET,MAAMmG,EAAgBvC,GAAiBD,CAAO,EACxCc,EAAS,CACb,EAAAO,EACA,EAAAC,CACN,EACU9C,EAAOG,GAAiBN,CAAS,EACjChF,EAASoF,GAAcD,CAAI,EAC3BsE,EAAkB,MAAM3B,EAAS,cAAc9E,CAAO,EACtD0G,EAAUvE,IAAS,IACnBwE,EAAUD,EAAU,MAAQ,OAC5BE,EAAUF,EAAU,SAAW,QAC/BG,EAAaH,EAAU,eAAiB,cACxCI,EAAUtE,EAAM,UAAUxF,CAAM,EAAIwF,EAAM,UAAUL,CAAI,EAAIsC,EAAOtC,CAAI,EAAIK,EAAM,SAASxF,CAAM,EAChG+J,EAAYtC,EAAOtC,CAAI,EAAIK,EAAM,UAAUL,CAAI,EAC/C6E,EAAoB,MAAOlC,EAAS,iBAAmB,KAAO,OAASA,EAAS,gBAAgB9E,CAAO,GAC7G,IAAIiH,EAAaD,EAAoBA,EAAkBH,CAAU,EAAI,GAGjE,CAACI,GAAc,CAAE,MAAOnC,EAAS,WAAa,KAAO,OAASA,EAAS,UAAUkC,CAAiB,MACpGC,EAAanB,EAAS,SAASe,CAAU,GAAKrE,EAAM,SAASxF,CAAM,GAErE,MAAMkK,EAAoBJ,EAAU,EAAIC,EAAY,EAI9CI,EAAyBF,EAAa,EAAIR,EAAgBzJ,CAAM,EAAI,EAAI,EACxEoK,EAAalG,GAAIiF,EAAcQ,CAAO,EAAGQ,CAAsB,EAC/DE,EAAanG,GAAIiF,EAAcS,CAAO,EAAGO,CAAsB,EAI/DG,EAAQF,EACRjG,EAAM8F,EAAaR,EAAgBzJ,CAAM,EAAIqK,EAC7CE,EAASN,EAAa,EAAIR,EAAgBzJ,CAAM,EAAI,EAAIkK,EACxDM,EAAS9F,GAAM4F,EAAOC,EAAQpG,CAAG,EAMjCsG,EAAkB,CAACtC,EAAe,OAASlD,GAAaD,CAAS,GAAK,MAAQuF,GAAUC,GAAUhF,EAAM,UAAUxF,CAAM,EAAI,GAAKuK,EAASD,EAAQF,EAAaC,GAAcZ,EAAgBzJ,CAAM,EAAI,EAAI,EAC3M0K,EAAkBD,EAAkBF,EAASD,EAAQC,EAASD,EAAQC,EAASpG,EAAM,EAC3F,MAAO,CACL,CAACgB,CAAI,EAAGsC,EAAOtC,CAAI,EAAIuF,EACvB,KAAM,CACJ,CAACvF,CAAI,EAAGqF,EACR,aAAcD,EAASC,EAASE,EAChC,GAAID,GAAmB,CACrB,gBAAAC,CACV,CACO,EACD,MAAOD,CACb,CACG,CACH,GAEA,SAASE,GAAiBjF,EAAWkF,EAAeC,EAAmB,CAErE,OAD2CnF,EAAY,CAAC,GAAGmF,EAAkB,OAAO7F,GAAaC,GAAaD,CAAS,IAAMU,CAAS,EAAG,GAAGmF,EAAkB,OAAO7F,GAAaC,GAAaD,CAAS,IAAMU,CAAS,CAAC,EAAImF,EAAkB,OAAO7F,GAAaD,GAAQC,CAAS,IAAMA,CAAS,GACxP,OAAOA,GAC3CU,EACKT,GAAaD,CAAS,IAAMU,IAAckF,EAAgB5E,GAA8BhB,CAAS,IAAMA,EAAY,IAErH,EACR,CACH,CAOA,MAAM8F,GAAgB,SAAUjK,EAAS,CACvC,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,gBACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,IAAImC,EAAuBC,EAAwBC,EACnD,KAAM,CACJ,MAAAzF,EACA,eAAA2C,EACA,UAAAnD,EACA,SAAA8C,EACA,SAAAgB,CACD,EAAGF,EACE,CACJ,UAAAsC,EAAY,GACZ,UAAAxF,EACA,kBAAAmF,EAAoB9G,GACpB,cAAA6G,EAAgB,GAChB,GAAGO,CACX,EAAUtG,GAAShE,EAAS+H,CAAK,EACrBwC,EAAe1F,IAAc,QAAamF,IAAsB9G,GAAa4G,GAAiBjF,GAAa,KAAMkF,EAAeC,CAAiB,EAAIA,EACrJQ,EAAW,MAAM1C,GAAeC,EAAOuC,CAAqB,EAC5DG,IAAiBP,EAAwB5C,EAAe,gBAAkB,KAAO,OAAS4C,EAAsB,QAAU,EAC1HQ,EAAmBH,EAAaE,CAAY,EAClD,GAAIC,GAAoB,KACtB,MAAO,GAET,MAAMC,EAAiBjG,GAAkBgG,EAAkB/F,EAAO,MAAOsC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,EAAE,EAG7I,GAAI9D,IAAcuG,EAChB,MAAO,CACL,MAAO,CACL,UAAWH,EAAa,CAAC,CAC1B,CACX,EAEM,MAAMK,EAAmB,CAACJ,EAAStG,GAAQwG,CAAgB,CAAC,EAAGF,EAASG,EAAe,CAAC,CAAC,EAAGH,EAASG,EAAe,CAAC,CAAC,CAAC,EACjHE,EAAe,CAAC,KAAMV,EAAyB7C,EAAe,gBAAkB,KAAO,OAAS6C,EAAuB,YAAc,CAAE,EAAG,CAC9I,UAAWO,EACX,UAAWE,CACnB,CAAO,EACKE,EAAgBP,EAAaE,EAAe,CAAC,EAGnD,GAAIK,EACF,MAAO,CACL,KAAM,CACJ,MAAOL,EAAe,EACtB,UAAWI,CACZ,EACD,MAAO,CACL,UAAWC,CACZ,CACX,EAEM,MAAMC,EAA8BF,EAAa,IAAIG,GAAK,CACxD,MAAMnG,EAAYT,GAAa4G,EAAE,SAAS,EAC1C,MAAO,CAACA,EAAE,UAAWnG,GAAawF,EAElCW,EAAE,UAAU,MAAM,EAAG,CAAC,EAAE,OAAO,CAAC7H,EAAKO,IAAMP,EAAMO,EAAG,CAAC,EAErDsH,EAAE,UAAU,CAAC,EAAGA,EAAE,SAAS,CACnC,CAAO,EAAE,KAAK,CAACC,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAKvBC,IAAmBf,EAJWW,EAA4B,OAAOC,GAAKA,EAAE,CAAC,EAAE,MAAM,EAGvF5G,GAAa4G,EAAE,CAAC,CAAC,EAAI,EAAI,CAAC,EAAE,MAAMtH,GAAKA,GAAK,CAAC,CAAC,EAC+B,CAAC,IAAM,KAAO,OAAS0G,EAAsB,CAAC,IAAMW,EAA4B,CAAC,EAAE,CAAC,EACjK,OAAII,IAAmBhH,EACd,CACL,KAAM,CACJ,MAAOsG,EAAe,EACtB,UAAWI,CACZ,EACD,MAAO,CACL,UAAWM,CACZ,CACX,EAEa,EACR,CACL,CACA,EAQMC,GAAO,SAAUpL,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,IAAIsD,EAAuBC,EAC3B,KAAM,CACJ,UAAAnH,EACA,eAAAmD,EACA,MAAA3C,EACA,iBAAA4G,EACA,SAAAtE,EACA,SAAAgB,CACD,EAAGF,EACE,CACJ,SAAUyD,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,mBAAoBC,EACpB,iBAAAC,EAAmB,UACnB,0BAAAC,EAA4B,OAC5B,cAAAjG,EAAgB,GAChB,GAAG2E,CACX,EAAUtG,GAAShE,EAAS+H,CAAK,EAM3B,IAAKsD,EAAwB/D,EAAe,QAAU,MAAQ+D,EAAsB,gBAClF,MAAO,GAET,MAAMjI,EAAOc,GAAQC,CAAS,EACxB0H,EAAkB3H,GAAQqH,CAAgB,IAAMA,EAChD3G,EAAM,MAAOqC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAC/E6D,EAAqBJ,IAAgCG,GAAmB,CAAClG,EAAgB,CAACX,GAAqBuG,CAAgB,CAAC,EAAItG,GAAsBsG,CAAgB,GAC5K,CAACG,GAA+BE,IAA8B,QAChEE,EAAmB,KAAK,GAAGpG,GAA0B6F,EAAkB5F,EAAeiG,EAA2BhH,CAAG,CAAC,EAEvH,MAAM1B,EAAa,CAACqI,EAAkB,GAAGO,CAAkB,EACrDtB,EAAW,MAAM1C,GAAeC,EAAOuC,CAAqB,EAC5DyB,EAAY,CAAA,EAClB,IAAIC,IAAkBV,EAAuBhE,EAAe,OAAS,KAAO,OAASgE,EAAqB,YAAc,CAAA,EAIxH,GAHIE,GACFO,EAAU,KAAKvB,EAASpH,CAAI,CAAC,EAE3BqI,EAAgB,CAClB,MAAMzI,EAAQ0B,GAAkBP,EAAWQ,EAAOC,CAAG,EACrDmH,EAAU,KAAKvB,EAASxH,EAAM,CAAC,CAAC,EAAGwH,EAASxH,EAAM,CAAC,CAAC,CAAC,CACtD,CAOD,GANAgJ,EAAgB,CAAC,GAAGA,EAAe,CACjC,UAAA7H,EACA,UAAA4H,CACR,CAAO,EAGG,CAACA,EAAU,MAAM3I,GAAQA,GAAQ,CAAC,EAAG,CACvC,IAAI6I,EAAuBC,EAC3B,MAAMC,KAAeF,EAAwB3E,EAAe,OAAS,KAAO,OAAS2E,EAAsB,QAAU,GAAK,EACpHnB,EAAgB5H,EAAWiJ,CAAS,EAC1C,GAAIrB,EAEF,MAAO,CACL,KAAM,CACJ,MAAOqB,EACP,UAAWH,CACZ,EACD,MAAO,CACL,UAAWlB,CACZ,CACb,EAKQ,IAAIK,GAAkBe,EAAwBF,EAAc,OAAOhB,GAAKA,EAAE,UAAU,CAAC,GAAK,CAAC,EAAE,KAAK,CAACC,EAAGC,IAAMD,EAAE,UAAU,CAAC,EAAIC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASgB,EAAsB,UAG1L,GAAI,CAACf,EACH,OAAQQ,EAAgB,CACtB,IAAK,UACH,CACE,IAAIS,EACJ,MAAMjI,GAAaiI,EAAwBJ,EAAc,IAAIhB,GAAK,CAACA,EAAE,UAAWA,EAAE,UAAU,OAAOR,GAAYA,EAAW,CAAC,EAAE,OAAO,CAACrH,EAAKqH,IAAarH,EAAMqH,EAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAACS,EAAGC,IAAMD,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAM,KAAO,OAASkB,EAAsB,CAAC,EAClPjI,IACFgH,EAAiBhH,GAEnB,KACD,CACH,IAAK,mBACHgH,EAAiBI,EACjB,KACH,CAEH,GAAIpH,IAAcgH,EAChB,MAAO,CACL,MAAO,CACL,UAAWA,CACZ,CACb,CAEO,CACD,MAAO,EACR,CACL,CACA,EAEA,SAASkB,GAAe7B,EAAUvE,EAAM,CACtC,MAAO,CACL,IAAKuE,EAAS,IAAMvE,EAAK,OACzB,MAAOuE,EAAS,MAAQvE,EAAK,MAC7B,OAAQuE,EAAS,OAASvE,EAAK,OAC/B,KAAMuE,EAAS,KAAOvE,EAAK,KAC/B,CACA,CACA,SAASqG,GAAsB9B,EAAU,CACvC,OAAOxH,GAAM,KAAKI,GAAQoH,EAASpH,CAAI,GAAK,CAAC,CAC/C,CAMA,MAAMmJ,GAAO,SAAUvM,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,MAAApD,CACD,EAAGoD,EACE,CACJ,SAAAhB,EAAW,kBACX,GAAGuD,CACX,EAAUtG,GAAShE,EAAS+H,CAAK,EAC3B,OAAQhB,EAAQ,CACd,IAAK,kBACH,CACE,MAAMyD,EAAW,MAAM1C,GAAeC,EAAO,CAC3C,GAAGuC,EACH,eAAgB,WAC9B,CAAa,EACKkC,EAAUH,GAAe7B,EAAU7F,EAAM,SAAS,EACxD,MAAO,CACL,KAAM,CACJ,uBAAwB6H,EACxB,gBAAiBF,GAAsBE,CAAO,CAC/C,CACf,CACW,CACH,IAAK,UACH,CACE,MAAMhC,EAAW,MAAM1C,GAAeC,EAAO,CAC3C,GAAGuC,EACH,YAAa,EAC3B,CAAa,EACKkC,EAAUH,GAAe7B,EAAU7F,EAAM,QAAQ,EACvD,MAAO,CACL,KAAM,CACJ,eAAgB6H,EAChB,QAASF,GAAsBE,CAAO,CACvC,CACf,CACW,CACH,QAEI,MAAO,EAEZ,CACF,CACL,CACA,EAEA,SAASC,GAAgB9H,EAAO,CAC9B,MAAM+H,EAAOrJ,GAAI,GAAGsB,EAAM,IAAIsB,GAAQA,EAAK,IAAI,CAAC,EAC1C0G,EAAOtJ,GAAI,GAAGsB,EAAM,IAAIsB,GAAQA,EAAK,GAAG,CAAC,EACzC2G,EAAOtJ,GAAI,GAAGqB,EAAM,IAAIsB,GAAQA,EAAK,KAAK,CAAC,EAC3C4G,EAAOvJ,GAAI,GAAGqB,EAAM,IAAIsB,GAAQA,EAAK,MAAM,CAAC,EAClD,MAAO,CACL,EAAGyG,EACH,EAAGC,EACH,MAAOC,EAAOF,EACd,OAAQG,EAAOF,CACnB,CACA,CACA,SAASG,GAAenI,EAAO,CAC7B,MAAMoI,EAAcpI,EAAM,MAAK,EAAG,KAAK,CAACsG,EAAGC,IAAMD,EAAE,EAAIC,EAAE,CAAC,EACpD8B,EAAS,CAAA,EACf,IAAIC,EAAW,KACf,QAASzF,EAAI,EAAGA,EAAIuF,EAAY,OAAQvF,IAAK,CAC3C,MAAMvB,EAAO8G,EAAYvF,CAAC,EACtB,CAACyF,GAAYhH,EAAK,EAAIgH,EAAS,EAAIA,EAAS,OAAS,EACvDD,EAAO,KAAK,CAAC/G,CAAI,CAAC,EAElB+G,EAAOA,EAAO,OAAS,CAAC,EAAE,KAAK/G,CAAI,EAErCgH,EAAWhH,CACZ,CACD,OAAO+G,EAAO,IAAI/G,GAAQD,GAAiByG,GAAgBxG,CAAI,CAAC,CAAC,CACnE,CAMA,MAAMiH,GAAS,SAAUlN,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,UAAA5D,EACA,SAAA8D,EACA,MAAAtD,EACA,SAAAsC,EACA,SAAAF,CACD,EAAGgB,EAIE,CACJ,QAAAjC,EAAU,EACV,EAAAqB,EACA,EAAAC,CACR,EAAUpD,GAAShE,EAAS+H,CAAK,EACrBoF,EAAoB,MAAM,KAAM,MAAOlG,EAAS,gBAAkB,KAAO,OAASA,EAAS,eAAegB,EAAS,SAAS,IAAO,CAAA,CAAE,EACrImF,EAAcN,GAAeK,CAAiB,EAC9CE,EAAWrH,GAAiByG,GAAgBU,CAAiB,CAAC,EAC9D7E,EAAgBvC,GAAiBD,CAAO,EAC9C,SAASwH,GAAwB,CAE/B,GAAIF,EAAY,SAAW,GAAKA,EAAY,CAAC,EAAE,KAAOA,EAAY,CAAC,EAAE,OAASjG,GAAK,MAAQC,GAAK,KAE9F,OAAOgG,EAAY,KAAKnH,GAAQkB,EAAIlB,EAAK,KAAOqC,EAAc,MAAQnB,EAAIlB,EAAK,MAAQqC,EAAc,OAASlB,EAAInB,EAAK,IAAMqC,EAAc,KAAOlB,EAAInB,EAAK,OAASqC,EAAc,MAAM,GAAK+E,EAI/L,GAAID,EAAY,QAAU,EAAG,CAC3B,GAAI5I,GAAYL,CAAS,IAAM,IAAK,CAClC,MAAMoJ,EAAYH,EAAY,CAAC,EACzBI,EAAWJ,EAAYA,EAAY,OAAS,CAAC,EAC7CK,EAAQvJ,GAAQC,CAAS,IAAM,MAC/BuJ,EAAMH,EAAU,IAChBI,EAASH,EAAS,OAClBI,EAAOH,EAAQF,EAAU,KAAOC,EAAS,KACzCK,EAAQJ,EAAQF,EAAU,MAAQC,EAAS,MAC3CM,EAAQD,EAAQD,EAChBG,EAASJ,EAASD,EACxB,MAAO,CACL,IAAAA,EACA,OAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,OAAAC,EACA,EAAGH,EACH,EAAGF,CACjB,CACW,CACD,MAAMM,EAAa9J,GAAQC,CAAS,IAAM,OACpC8J,EAAW3K,GAAI,GAAG8J,EAAY,IAAInH,GAAQA,EAAK,KAAK,CAAC,EACrDiI,EAAU7K,GAAI,GAAG+J,EAAY,IAAInH,GAAQA,EAAK,IAAI,CAAC,EACnDkI,EAAef,EAAY,OAAOnH,GAAQ+H,EAAa/H,EAAK,OAASiI,EAAUjI,EAAK,QAAUgI,CAAQ,EACtGP,EAAMS,EAAa,CAAC,EAAE,IACtBR,EAASQ,EAAaA,EAAa,OAAS,CAAC,EAAE,OAC/CP,EAAOM,EACPL,EAAQI,EACRH,EAAQD,EAAQD,EAChBG,EAASJ,EAASD,EACxB,MAAO,CACL,IAAAA,EACA,OAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,OAAAC,EACA,EAAGH,EACH,EAAGF,CACf,CACS,CACD,OAAOL,CACR,CACD,MAAMe,EAAa,MAAMnH,EAAS,gBAAgB,CAChD,UAAW,CACT,sBAAAqG,CACD,EACD,SAAUrF,EAAS,SACnB,SAAAlB,CACR,CAAO,EACD,OAAIpC,EAAM,UAAU,IAAMyJ,EAAW,UAAU,GAAKzJ,EAAM,UAAU,IAAMyJ,EAAW,UAAU,GAAKzJ,EAAM,UAAU,QAAUyJ,EAAW,UAAU,OAASzJ,EAAM,UAAU,SAAWyJ,EAAW,UAAU,OACnM,CACL,MAAO,CACL,MAAOA,CACR,CACX,EAEa,EACR,CACL,CACA,EAIA,eAAeC,GAAqBtG,EAAO/H,EAAS,CAClD,KAAM,CACJ,UAAAmE,EACA,SAAA8C,EACA,SAAAgB,CACD,EAAGF,EACEnD,EAAM,MAAOqC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAC/E7E,EAAOc,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClCqC,EAAahC,GAAYL,CAAS,IAAM,IACxCmK,EAAgB,CAAC,OAAQ,KAAK,EAAE,SAASlL,CAAI,EAAI,GAAK,EACtDmL,EAAiB3J,GAAO4B,EAAa,GAAK,EAC1CgI,EAAWxK,GAAShE,EAAS+H,CAAK,EAGxC,GAAI,CACF,SAAA0G,EACA,UAAApE,EACA,cAAAvF,CACJ,EAAM,OAAO0J,GAAa,SAAW,CACjC,SAAUA,EACV,UAAW,EACX,cAAe,IACnB,EAAM,CACF,SAAU,EACV,UAAW,EACX,cAAe,KACf,GAAGA,CACP,EACE,OAAI3J,GAAa,OAAOC,GAAkB,WACxCuF,EAAYxF,IAAc,MAAQC,EAAgB,GAAKA,GAElD0B,EAAa,CAClB,EAAG6D,EAAYkE,EACf,EAAGE,EAAWH,CAClB,EAAM,CACF,EAAGG,EAAWH,EACd,EAAGjE,EAAYkE,CACnB,CACA,CASA,MAAM5E,GAAS,SAAU3J,EAAS,CAChC,OAAIA,IAAY,SACdA,EAAU,GAEL,CACL,KAAM,SACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,EAAAZ,EACA,EAAAC,CACD,EAAGW,EACE2G,EAAa,MAAML,GAAqBtG,EAAO/H,CAAO,EAC5D,MAAO,CACL,EAAGmH,EAAIuH,EAAW,EAClB,EAAGtH,EAAIsH,EAAW,EAClB,KAAMA,CACd,CACK,CACL,CACA,EAOMC,GAAQ,SAAU3O,EAAS,CAC/B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,QACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,EAAAZ,EACA,EAAAC,EACA,UAAAjD,CACD,EAAG4D,EACE,CACJ,SAAUyD,EAAgB,GAC1B,UAAWC,EAAiB,GAC5B,QAAAmD,EAAU,CACR,GAAIzI,GAAQ,CACV,GAAI,CACF,EAAAgB,EACA,EAAAC,CACD,EAAGjB,EACJ,MAAO,CACL,EAAAgB,EACA,EAAAC,CACd,CACW,CACF,EACD,GAAGkD,CACX,EAAUtG,GAAShE,EAAS+H,CAAK,EACrBnB,EAAS,CACb,EAAAO,EACA,EAAAC,CACR,EACYoD,EAAW,MAAM1C,GAAeC,EAAOuC,CAAqB,EAC5DD,EAAY7F,GAAYN,GAAQC,CAAS,CAAC,EAC1CsK,EAAWpK,GAAgBgG,CAAS,EAC1C,IAAIwE,EAAgBjI,EAAO6H,CAAQ,EAC/BK,EAAiBlI,EAAOyD,CAAS,EACrC,GAAImB,EAAe,CACjB,MAAMuD,EAAUN,IAAa,IAAM,MAAQ,OACrCO,EAAUP,IAAa,IAAM,SAAW,QACxCpL,EAAMwL,EAAgBrE,EAASuE,CAAO,EACtCzL,EAAMuL,EAAgBrE,EAASwE,CAAO,EAC5CH,EAAgBhL,GAAMR,EAAKwL,EAAevL,CAAG,CAC9C,CACD,GAAImI,EAAgB,CAClB,MAAMsD,EAAU1E,IAAc,IAAM,MAAQ,OACtC2E,EAAU3E,IAAc,IAAM,SAAW,QACzChH,EAAMyL,EAAiBtE,EAASuE,CAAO,EACvCzL,EAAMwL,EAAiBtE,EAASwE,CAAO,EAC7CF,EAAiBjL,GAAMR,EAAKyL,EAAgBxL,CAAG,CAChD,CACD,MAAM2L,EAAgBL,EAAQ,GAAG,CAC/B,GAAG7G,EACH,CAAC0G,CAAQ,EAAGI,EACZ,CAACxE,CAAS,EAAGyE,CACrB,CAAO,EACD,MAAO,CACL,GAAGG,EACH,KAAM,CACJ,EAAGA,EAAc,EAAI9H,EACrB,EAAG8H,EAAc,EAAI7H,CACtB,CACT,CACK,CACL,CACA,EA4EM8H,GAAO,SAAUlP,EAAS,CAC9B,OAAIA,IAAY,SACdA,EAAU,CAAA,GAEL,CACL,KAAM,OACN,QAAAA,EACA,MAAM,GAAG+H,EAAO,CACd,KAAM,CACJ,UAAA5D,EACA,MAAAQ,EACA,SAAAsC,EACA,SAAAgB,CACD,EAAGF,EACE,CACJ,MAAAoH,EAAQ,IAAM,CAAE,EAChB,GAAG7E,CACX,EAAUtG,GAAShE,EAAS+H,CAAK,EACrByC,EAAW,MAAM1C,GAAeC,EAAOuC,CAAqB,EAC5DlH,EAAOc,GAAQC,CAAS,EACxBU,EAAYT,GAAaD,CAAS,EAClC0E,EAAUrE,GAAYL,CAAS,IAAM,IACrC,CACJ,MAAA2J,EACA,OAAAC,CACR,EAAUpJ,EAAM,SACV,IAAIyK,EACAC,EACAjM,IAAS,OAASA,IAAS,UAC7BgM,EAAahM,EACbiM,EAAYxK,KAAgB,MAAOoC,EAAS,OAAS,KAAO,OAASA,EAAS,MAAMgB,EAAS,QAAQ,GAAM,QAAU,OAAS,OAAS,UAEvIoH,EAAYjM,EACZgM,EAAavK,IAAc,MAAQ,MAAQ,UAE7C,MAAMyK,EAA0BvB,EAASvD,EAAS4E,CAAU,EACtDG,EAAyBzB,EAAQtD,EAAS6E,CAAS,EACnDG,EAAU,CAACzH,EAAM,eAAe,MACtC,IAAI0H,EAAkBH,EAClBI,EAAiBH,EACrB,GAAI1G,EAAS,CACX,MAAM8G,EAAuB7B,EAAQtD,EAAS,KAAOA,EAAS,MAC9DkF,EAAiB7K,GAAa2K,EAAUnM,GAAIkM,EAAwBI,CAAoB,EAAIA,CACpG,KAAa,CACL,MAAMC,EAAwB7B,EAASvD,EAAS,IAAMA,EAAS,OAC/DiF,EAAkB5K,GAAa2K,EAAUnM,GAAIiM,EAAyBM,CAAqB,EAAIA,CAChG,CACD,GAAIJ,GAAW,CAAC3K,EAAW,CACzB,MAAMgL,EAAOvM,GAAIkH,EAAS,KAAM,CAAC,EAC3BsF,EAAOxM,GAAIkH,EAAS,MAAO,CAAC,EAC5BuF,EAAOzM,GAAIkH,EAAS,IAAK,CAAC,EAC1BwF,EAAO1M,GAAIkH,EAAS,OAAQ,CAAC,EAC/B3B,EACF6G,EAAiB5B,EAAQ,GAAK+B,IAAS,GAAKC,IAAS,EAAID,EAAOC,EAAOxM,GAAIkH,EAAS,KAAMA,EAAS,KAAK,GAExGiF,EAAkB1B,EAAS,GAAKgC,IAAS,GAAKC,IAAS,EAAID,EAAOC,EAAO1M,GAAIkH,EAAS,IAAKA,EAAS,MAAM,EAE7G,CACD,MAAM2E,EAAM,CACV,GAAGpH,EACH,eAAA2H,EACA,gBAAAD,CACR,CAAO,EACD,MAAMQ,EAAiB,MAAMhJ,EAAS,cAAcgB,EAAS,QAAQ,EACrE,OAAI6F,IAAUmC,EAAe,OAASlC,IAAWkC,EAAe,OACvD,CACL,MAAO,CACL,MAAO,EACR,CACX,EAEa,EACR,CACL,CACA,ECh/BA,SAASC,GAAYC,EAAM,CACzB,OAAIC,GAAOD,CAAI,GACLA,EAAK,UAAY,IAAI,YAAW,EAKnC,WACT,CACA,SAASE,GAAUF,EAAM,CACvB,IAAIG,EACJ,OAAQH,GAAQ,OAAiBG,EAAsBH,EAAK,gBAAkB,KAAvD,OAAuEG,EAAoB,cAAgB,MACpI,CACA,SAASC,GAAmBJ,EAAM,CAChC,IAAIhK,EACJ,OAAQA,GAAQiK,GAAOD,CAAI,EAAIA,EAAK,cAAgBA,EAAK,WAAa,OAAO,WAAa,KAAO,OAAShK,EAAK,eACjH,CACA,SAASiK,GAAOnR,EAAO,CACrB,OAAOA,aAAiB,MAAQA,aAAiBoR,GAAUpR,CAAK,EAAE,IACpE,CACA,SAASkB,GAAUlB,EAAO,CACxB,OAAOA,aAAiB,SAAWA,aAAiBoR,GAAUpR,CAAK,EAAE,OACvE,CACA,SAASuR,GAAcvR,EAAO,CAC5B,OAAOA,aAAiB,aAAeA,aAAiBoR,GAAUpR,CAAK,EAAE,WAC3E,CACA,SAASwR,GAAaxR,EAAO,CAE3B,OAAI,OAAO,WAAe,IACjB,GAEFA,aAAiB,YAAcA,aAAiBoR,GAAUpR,CAAK,EAAE,UAC1E,CACA,SAASyR,GAAkBvO,EAAS,CAClC,KAAM,CACJ,SAAAqI,EACA,UAAAmG,EACA,UAAAC,EACA,QAAAC,CACJ,EAAMC,GAAiB3O,CAAO,EAC5B,MAAO,kCAAkC,KAAKqI,EAAWoG,EAAYD,CAAS,GAAK,CAAC,CAAC,SAAU,UAAU,EAAE,SAASE,CAAO,CAC7H,CACA,SAASE,GAAe5O,EAAS,CAC/B,MAAO,CAAC,QAAS,KAAM,IAAI,EAAE,SAAS+N,GAAY/N,CAAO,CAAC,CAC5D,CACA,SAAS6O,GAAkB7O,EAAS,CAClC,MAAM8O,EAASC,KACTC,EAAML,GAAiB3O,CAAO,EAGpC,OAAOgP,EAAI,YAAc,QAAUA,EAAI,cAAgB,SAAWA,EAAI,cAAgBA,EAAI,gBAAkB,SAAW,KAAU,CAACF,IAAWE,EAAI,eAAiBA,EAAI,iBAAmB,OAAS,KAAU,CAACF,IAAWE,EAAI,OAASA,EAAI,SAAW,OAAS,KAAU,CAAC,YAAa,cAAe,QAAQ,EAAE,KAAKlS,IAAUkS,EAAI,YAAc,IAAI,SAASlS,CAAK,CAAC,GAAK,CAAC,QAAS,SAAU,SAAU,SAAS,EAAE,KAAKA,IAAUkS,EAAI,SAAW,IAAI,SAASlS,CAAK,CAAC,CACnc,CACA,SAASmS,GAAmBjP,EAAS,CACnC,IAAIkP,EAAcC,GAAcnP,CAAO,EACvC,KAAOqO,GAAca,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACxE,GAAIL,GAAkBK,CAAW,EAC/B,OAAOA,EAEPA,EAAcC,GAAcD,CAAW,CAE1C,CACD,OAAO,IACT,CACA,SAASH,IAAW,CAClB,OAAI,OAAO,IAAQ,KAAe,CAAC,IAAI,SAAiB,GACjD,IAAI,SAAS,0BAA2B,MAAM,CACvD,CACA,SAASK,GAAsBpB,EAAM,CACnC,MAAO,CAAC,OAAQ,OAAQ,WAAW,EAAE,SAASD,GAAYC,CAAI,CAAC,CACjE,CACA,SAASW,GAAiB3O,EAAS,CACjC,OAAOkO,GAAUlO,CAAO,EAAE,iBAAiBA,CAAO,CACpD,CACA,SAASqP,GAAcrP,EAAS,CAC9B,OAAIhC,GAAUgC,CAAO,EACZ,CACL,WAAYA,EAAQ,WACpB,UAAWA,EAAQ,SACzB,EAES,CACL,WAAYA,EAAQ,YACpB,UAAWA,EAAQ,WACvB,CACA,CACA,SAASmP,GAAcnB,EAAM,CAC3B,GAAID,GAAYC,CAAI,IAAM,OACxB,OAAOA,EAET,MAAM9Q,EAEN8Q,EAAK,cAELA,EAAK,YAELM,GAAaN,CAAI,GAAKA,EAAK,MAE3BI,GAAmBJ,CAAI,EACvB,OAAOM,GAAapR,CAAM,EAAIA,EAAO,KAAOA,CAC9C,CACA,SAASoS,GAA2BtB,EAAM,CACxC,MAAMuB,EAAaJ,GAAcnB,CAAI,EACrC,OAAIoB,GAAsBG,CAAU,EAC3BvB,EAAK,cAAgBA,EAAK,cAAc,KAAOA,EAAK,KAEzDK,GAAckB,CAAU,GAAKhB,GAAkBgB,CAAU,EACpDA,EAEFD,GAA2BC,CAAU,CAC9C,CACA,SAASC,GAAqBxB,EAAMvK,EAAMgM,EAAiB,CACzD,IAAIC,EACAjM,IAAS,SACXA,EAAO,CAAA,GAELgM,IAAoB,SACtBA,EAAkB,IAEpB,MAAME,EAAqBL,GAA2BtB,CAAI,EACpD4B,EAASD,MAAyBD,EAAuB1B,EAAK,gBAAkB,KAAO,OAAS0B,EAAqB,MACrHG,EAAM3B,GAAUyB,CAAkB,EACxC,OAAIC,EACKnM,EAAK,OAAOoM,EAAKA,EAAI,gBAAkB,CAAE,EAAEtB,GAAkBoB,CAAkB,EAAIA,EAAqB,GAAIE,EAAI,cAAgBJ,EAAkBD,GAAqBK,EAAI,YAAY,EAAI,CAAA,CAAE,EAE/LpM,EAAK,OAAOkM,EAAoBH,GAAqBG,EAAoB,CAAE,EAAEF,CAAe,CAAC,CACtG,CCvHA,SAASK,GAAiB9P,EAAS,CACjC,MAAMgP,EAAML,GAAiB3O,CAAO,EAGpC,IAAI2L,EAAQ,WAAWqD,EAAI,KAAK,GAAK,EACjCpD,EAAS,WAAWoD,EAAI,MAAM,GAAK,EACvC,MAAMe,EAAY1B,GAAcrO,CAAO,EACjCgQ,EAAcD,EAAY/P,EAAQ,YAAc2L,EAChDsE,EAAeF,EAAY/P,EAAQ,aAAe4L,EAClDsE,EAAiB9O,GAAMuK,CAAK,IAAMqE,GAAe5O,GAAMwK,CAAM,IAAMqE,EACzE,OAAIC,IACFvE,EAAQqE,EACRpE,EAASqE,GAEJ,CACL,MAAAtE,EACA,OAAAC,EACA,EAAGsE,CACP,CACA,CAEA,SAASC,GAAcnQ,EAAS,CAC9B,OAAQhC,GAAUgC,CAAO,EAA6BA,EAAzBA,EAAQ,cACvC,CAEA,SAASoQ,GAASpQ,EAAS,CACzB,MAAMqQ,EAAaF,GAAcnQ,CAAO,EACxC,GAAI,CAACqO,GAAcgC,CAAU,EAC3B,OAAO/O,GAAa,CAAC,EAEvB,MAAMwC,EAAOuM,EAAW,wBAClB,CACJ,MAAA1E,EACA,OAAAC,EACA,EAAA0E,CACJ,EAAMR,GAAiBO,CAAU,EAC/B,IAAIrL,GAAKsL,EAAIlP,GAAM0C,EAAK,KAAK,EAAIA,EAAK,OAAS6H,EAC3C1G,GAAKqL,EAAIlP,GAAM0C,EAAK,MAAM,EAAIA,EAAK,QAAU8H,EAIjD,OAAI,CAAC5G,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,IAEF,CAACC,GAAK,CAAC,OAAO,SAASA,CAAC,KAC1BA,EAAI,GAEC,CACL,EAAAD,EACA,EAAAC,CACJ,CACA,CAEA,MAAMsL,GAAyBjP,GAAa,CAAC,EAC7C,SAASkP,GAAiBxQ,EAAS,CACjC,MAAM6P,EAAM3B,GAAUlO,CAAO,EAC7B,MAAI,CAAC+O,GAAQ,GAAM,CAACc,EAAI,eACfU,GAEF,CACL,EAAGV,EAAI,eAAe,WACtB,EAAGA,EAAI,eAAe,SAC1B,CACA,CACA,SAASY,GAAuBzQ,EAAS0Q,EAASC,EAAsB,CAItE,OAHID,IAAY,SACdA,EAAU,IAER,CAACC,GAAwBD,GAAWC,IAAyBzC,GAAUlO,CAAO,EACzE,GAEF0Q,CACT,CAEA,SAASvF,GAAsBnL,EAAS4Q,EAAcC,EAAiBxK,EAAc,CAC/EuK,IAAiB,SACnBA,EAAe,IAEbC,IAAoB,SACtBA,EAAkB,IAEpB,MAAMC,EAAa9Q,EAAQ,wBACrBqQ,EAAaF,GAAcnQ,CAAO,EACxC,IAAI+Q,EAAQzP,GAAa,CAAC,EACtBsP,IACEvK,EACErI,GAAUqI,CAAY,IACxB0K,EAAQX,GAAS/J,CAAY,GAG/B0K,EAAQX,GAASpQ,CAAO,GAG5B,MAAMgR,EAAgBP,GAAuBJ,EAAYQ,EAAiBxK,CAAY,EAAImK,GAAiBH,CAAU,EAAI/O,GAAa,CAAC,EACvI,IAAI0D,GAAK8L,EAAW,KAAOE,EAAc,GAAKD,EAAM,EAChD9L,GAAK6L,EAAW,IAAME,EAAc,GAAKD,EAAM,EAC/CpF,EAAQmF,EAAW,MAAQC,EAAM,EACjCnF,EAASkF,EAAW,OAASC,EAAM,EACvC,GAAIV,EAAY,CACd,MAAMR,EAAM3B,GAAUmC,CAAU,EAC1BY,EAAY5K,GAAgBrI,GAAUqI,CAAY,EAAI6H,GAAU7H,CAAY,EAAIA,EACtF,IAAI6K,EAAgBrB,EAAI,aACxB,KAAOqB,GAAiB7K,GAAgB4K,IAAcpB,GAAK,CACzD,MAAMsB,EAAcf,GAASc,CAAa,EACpCE,EAAaF,EAAc,wBAC3BlC,EAAML,GAAiBuC,CAAa,EACpCzF,EAAO2F,EAAW,MAAQF,EAAc,WAAa,WAAWlC,EAAI,WAAW,GAAKmC,EAAY,EAChG5F,EAAM6F,EAAW,KAAOF,EAAc,UAAY,WAAWlC,EAAI,UAAU,GAAKmC,EAAY,EAClGnM,GAAKmM,EAAY,EACjBlM,GAAKkM,EAAY,EACjBxF,GAASwF,EAAY,EACrBvF,GAAUuF,EAAY,EACtBnM,GAAKyG,EACLxG,GAAKsG,EACL2F,EAAgBhD,GAAUgD,CAAa,EAAE,YAC1C,CACF,CACD,OAAOrN,GAAiB,CACtB,MAAA8H,EACA,OAAAC,EACA,EAAA5G,EACA,EAAAC,CACJ,CAAG,CACH,CAEA,SAASoM,GAAsDrN,EAAM,CACnE,GAAI,CACF,KAAAF,EACA,aAAAuC,EACA,SAAAzB,CACD,EAAGZ,EACJ,MAAMsN,EAA0BjD,GAAchI,CAAY,EACpDkL,EAAkBnD,GAAmB/H,CAAY,EACvD,GAAIA,IAAiBkL,EACnB,OAAOzN,EAET,IAAI0N,EAAS,CACX,WAAY,EACZ,UAAW,CACf,EACMT,EAAQzP,GAAa,CAAC,EAC1B,MAAM+I,EAAU/I,GAAa,CAAC,EAC9B,IAAIgQ,GAA2B,CAACA,GAA2B1M,IAAa,YAClEmJ,GAAY1H,CAAY,IAAM,QAAUkI,GAAkBgD,CAAe,KAC3EC,EAASnC,GAAchJ,CAAY,GAEjCgI,GAAchI,CAAY,GAAG,CAC/B,MAAMoL,EAAatG,GAAsB9E,CAAY,EACrD0K,EAAQX,GAAS/J,CAAY,EAC7BgE,EAAQ,EAAIoH,EAAW,EAAIpL,EAAa,WACxCgE,EAAQ,EAAIoH,EAAW,EAAIpL,EAAa,SACzC,CAEH,MAAO,CACL,MAAOvC,EAAK,MAAQiN,EAAM,EAC1B,OAAQjN,EAAK,OAASiN,EAAM,EAC5B,EAAGjN,EAAK,EAAIiN,EAAM,EAAIS,EAAO,WAAaT,EAAM,EAAI1G,EAAQ,EAC5D,EAAGvG,EAAK,EAAIiN,EAAM,EAAIS,EAAO,UAAYT,EAAM,EAAI1G,EAAQ,CAC/D,CACA,CAEA,SAASqH,GAAe1R,EAAS,CAC/B,OAAO,MAAM,KAAKA,EAAQ,eAAgB,CAAA,CAC5C,CAEA,SAAS2R,GAAoB3R,EAAS,CAGpC,OAAOmL,GAAsBiD,GAAmBpO,CAAO,CAAC,EAAE,KAAOqP,GAAcrP,CAAO,EAAE,UAC1F,CAIA,SAAS4R,GAAgB5R,EAAS,CAChC,MAAM6R,EAAOzD,GAAmBpO,CAAO,EACjCwR,EAASnC,GAAcrP,CAAO,EAC9B8R,EAAO9R,EAAQ,cAAc,KAC7B2L,EAAQxK,GAAI0Q,EAAK,YAAaA,EAAK,YAAaC,EAAK,YAAaA,EAAK,WAAW,EAClFlG,EAASzK,GAAI0Q,EAAK,aAAcA,EAAK,aAAcC,EAAK,aAAcA,EAAK,YAAY,EAC7F,IAAI9M,EAAI,CAACwM,EAAO,WAAaG,GAAoB3R,CAAO,EACxD,MAAMiF,EAAI,CAACuM,EAAO,UAClB,OAAI7C,GAAiBmD,CAAI,EAAE,YAAc,QACvC9M,GAAK7D,GAAI0Q,EAAK,YAAaC,EAAK,WAAW,EAAInG,GAE1C,CACL,MAAAA,EACA,OAAAC,EACA,EAAA5G,EACA,EAAAC,CACJ,CACA,CAEA,SAAS8M,GAAgB/R,EAAS4E,EAAU,CAC1C,MAAMiL,EAAM3B,GAAUlO,CAAO,EACvB6R,EAAOzD,GAAmBpO,CAAO,EACjCgS,EAAiBnC,EAAI,eAC3B,IAAIlE,EAAQkG,EAAK,YACbjG,EAASiG,EAAK,aACd7M,EAAI,EACJC,EAAI,EACR,GAAI+M,EAAgB,CAClBrG,EAAQqG,EAAe,MACvBpG,EAASoG,EAAe,OACxB,MAAMC,EAAsBlD,MACxB,CAACkD,GAAuBA,GAAuBrN,IAAa,WAC9DI,EAAIgN,EAAe,WACnB/M,EAAI+M,EAAe,UAEtB,CACD,MAAO,CACL,MAAArG,EACA,OAAAC,EACA,EAAA5G,EACA,EAAAC,CACJ,CACA,CAGA,SAASiN,GAA2BlS,EAAS4E,EAAU,CACrD,MAAMkM,EAAa3F,GAAsBnL,EAAS,GAAM4E,IAAa,OAAO,EACtE2G,EAAMuF,EAAW,IAAM9Q,EAAQ,UAC/ByL,EAAOqF,EAAW,KAAO9Q,EAAQ,WACjC+Q,EAAQ1C,GAAcrO,CAAO,EAAIoQ,GAASpQ,CAAO,EAAIsB,GAAa,CAAC,EACnEqK,EAAQ3L,EAAQ,YAAc+Q,EAAM,EACpCnF,EAAS5L,EAAQ,aAAe+Q,EAAM,EACtC/L,EAAIyG,EAAOsF,EAAM,EACjB9L,EAAIsG,EAAMwF,EAAM,EACtB,MAAO,CACL,MAAApF,EACA,OAAAC,EACA,EAAA5G,EACA,EAAAC,CACJ,CACA,CACA,SAASkN,GAAkCnS,EAASoS,EAAkBxN,EAAU,CAC9E,IAAId,EACJ,GAAIsO,IAAqB,WACvBtO,EAAOiO,GAAgB/R,EAAS4E,CAAQ,UAC/BwN,IAAqB,WAC9BtO,EAAO8N,GAAgBxD,GAAmBpO,CAAO,CAAC,UACzChC,GAAUoU,CAAgB,EACnCtO,EAAOoO,GAA2BE,EAAkBxN,CAAQ,MACvD,CACL,MAAMoM,EAAgBR,GAAiBxQ,CAAO,EAC9C8D,EAAO,CACL,GAAGsO,EACH,EAAGA,EAAiB,EAAIpB,EAAc,EACtC,EAAGoB,EAAiB,EAAIpB,EAAc,CAC5C,CACG,CACD,OAAOnN,GAAiBC,CAAI,CAC9B,CACA,SAASuO,GAAyBrS,EAASsS,EAAU,CACnD,MAAM/C,EAAaJ,GAAcnP,CAAO,EACxC,OAAIuP,IAAe+C,GAAY,CAACtU,GAAUuR,CAAU,GAAKH,GAAsBG,CAAU,EAChF,GAEFZ,GAAiBY,CAAU,EAAE,WAAa,SAAW8C,GAAyB9C,EAAY+C,CAAQ,CAC3G,CAKA,SAASC,GAA4BvS,EAASwS,EAAO,CACnD,MAAMC,EAAeD,EAAM,IAAIxS,CAAO,EACtC,GAAIyS,EACF,OAAOA,EAET,IAAIvV,EAASsS,GAAqBxP,EAAS,CAAA,EAAI,EAAK,EAAE,OAAO/B,GAAMD,GAAUC,CAAE,GAAK8P,GAAY9P,CAAE,IAAM,MAAM,EAC1GyU,EAAsC,KAC1C,MAAMC,EAAiBhE,GAAiB3O,CAAO,EAAE,WAAa,QAC9D,IAAIkP,EAAcyD,EAAiBxD,GAAcnP,CAAO,EAAIA,EAG5D,KAAOhC,GAAUkR,CAAW,GAAK,CAACE,GAAsBF,CAAW,GAAG,CACpE,MAAM0D,EAAgBjE,GAAiBO,CAAW,EAC5C2D,EAA0BhE,GAAkBK,CAAW,EACzD,CAAC2D,GAA2BD,EAAc,WAAa,UACzDF,EAAsC,OAEVC,EAAiB,CAACE,GAA2B,CAACH,EAAsC,CAACG,GAA2BD,EAAc,WAAa,UAAY,CAAC,CAACF,GAAuC,CAAC,WAAY,OAAO,EAAE,SAASA,EAAoC,QAAQ,GAAKnE,GAAkBW,CAAW,GAAK,CAAC2D,GAA2BR,GAAyBrS,EAASkP,CAAW,GAGvZhS,EAASA,EAAO,OAAO4V,GAAYA,IAAa5D,CAAW,EAG3DwD,EAAsCE,EAExC1D,EAAcC,GAAcD,CAAW,CACxC,CACD,OAAAsD,EAAM,IAAIxS,EAAS9C,CAAM,EAClBA,CACT,CAIA,SAAS6V,GAAgB/O,EAAM,CAC7B,GAAI,CACF,QAAAhE,EACA,SAAA+F,EACA,aAAAC,EACA,SAAApB,CACD,EAAGZ,EAEJ,MAAMgP,EAAoB,CAAC,GADMjN,IAAa,oBAAsBwM,GAA4BvS,EAAS,KAAK,EAAE,EAAI,CAAA,EAAG,OAAO+F,CAAQ,EAC9EC,CAAY,EAC9DiN,EAAwBD,EAAkB,CAAC,EAC3CE,EAAeF,EAAkB,OAAO,CAACG,EAASf,IAAqB,CAC3E,MAAMtO,EAAOqO,GAAkCnS,EAASoS,EAAkBxN,CAAQ,EAClF,OAAAuO,EAAQ,IAAMhS,GAAI2C,EAAK,IAAKqP,EAAQ,GAAG,EACvCA,EAAQ,MAAQjS,GAAI4C,EAAK,MAAOqP,EAAQ,KAAK,EAC7CA,EAAQ,OAASjS,GAAI4C,EAAK,OAAQqP,EAAQ,MAAM,EAChDA,EAAQ,KAAOhS,GAAI2C,EAAK,KAAMqP,EAAQ,IAAI,EACnCA,CACR,EAAEhB,GAAkCnS,EAASiT,EAAuBrO,CAAQ,CAAC,EAC9E,MAAO,CACL,MAAOsO,EAAa,MAAQA,EAAa,KACzC,OAAQA,EAAa,OAASA,EAAa,IAC3C,EAAGA,EAAa,KAChB,EAAGA,EAAa,GACpB,CACA,CAEA,SAASE,GAAcpT,EAAS,CAC9B,OAAO8P,GAAiB9P,CAAO,CACjC,CAEA,SAASqT,GAA8BrT,EAASqG,EAAczB,EAAU,CACtE,MAAM0M,EAA0BjD,GAAchI,CAAY,EACpDkL,EAAkBnD,GAAmB/H,CAAY,EACjDqK,EAAU9L,IAAa,QACvBd,EAAOqH,GAAsBnL,EAAS,GAAM0Q,EAASrK,CAAY,EACvE,IAAImL,EAAS,CACX,WAAY,EACZ,UAAW,CACf,EACE,MAAMnH,EAAU/I,GAAa,CAAC,EAC9B,GAAIgQ,GAA2B,CAACA,GAA2B,CAACZ,EAI1D,IAHI3C,GAAY1H,CAAY,IAAM,QAAUkI,GAAkBgD,CAAe,KAC3EC,EAASnC,GAAchJ,CAAY,GAEjCiL,EAAyB,CAC3B,MAAMG,EAAatG,GAAsB9E,EAAc,GAAMqK,EAASrK,CAAY,EAClFgE,EAAQ,EAAIoH,EAAW,EAAIpL,EAAa,WACxCgE,EAAQ,EAAIoH,EAAW,EAAIpL,EAAa,SACzC,MAAUkL,IACTlH,EAAQ,EAAIsH,GAAoBJ,CAAe,GAGnD,MAAO,CACL,EAAGzN,EAAK,KAAO0N,EAAO,WAAanH,EAAQ,EAC3C,EAAGvG,EAAK,IAAM0N,EAAO,UAAYnH,EAAQ,EACzC,MAAOvG,EAAK,MACZ,OAAQA,EAAK,MACjB,CACA,CAEA,SAASwP,GAAoBtT,EAASuT,EAAU,CAC9C,MAAI,CAAClF,GAAcrO,CAAO,GAAK2O,GAAiB3O,CAAO,EAAE,WAAa,QAC7D,KAELuT,EACKA,EAASvT,CAAO,EAElBA,EAAQ,YACjB,CAIA,SAASwT,GAAgBxT,EAASuT,EAAU,CAC1C,MAAME,EAASvF,GAAUlO,CAAO,EAChC,GAAI,CAACqO,GAAcrO,CAAO,EACxB,OAAOyT,EAET,IAAIpN,EAAeiN,GAAoBtT,EAASuT,CAAQ,EACxD,KAAOlN,GAAgBuI,GAAevI,CAAY,GAAKsI,GAAiBtI,CAAY,EAAE,WAAa,UACjGA,EAAeiN,GAAoBjN,EAAckN,CAAQ,EAE3D,OAAIlN,IAAiB0H,GAAY1H,CAAY,IAAM,QAAU0H,GAAY1H,CAAY,IAAM,QAAUsI,GAAiBtI,CAAY,EAAE,WAAa,UAAY,CAACwI,GAAkBxI,CAAY,GACnLoN,EAEFpN,GAAgB4I,GAAmBjP,CAAO,GAAKyT,CACxD,CAEA,MAAMC,GAAkB,eAAgB1P,EAAM,CAC5C,GAAI,CACF,UAAAC,EACA,SAAAC,EACA,SAAAU,CACD,EAAGZ,EACJ,MAAM2P,EAAoB,KAAK,iBAAmBH,GAC5CI,EAAkB,KAAK,cAC7B,MAAO,CACL,UAAWP,GAA8BpP,EAAW,MAAM0P,EAAkBzP,CAAQ,EAAGU,CAAQ,EAC/F,SAAU,CACR,EAAG,EACH,EAAG,EACH,GAAI,MAAMgP,EAAgB1P,CAAQ,CACnC,CACL,CACA,EAEA,SAAS2P,GAAM7T,EAAS,CACtB,OAAO2O,GAAiB3O,CAAO,EAAE,YAAc,KACjD,CAEA,MAAM8E,GAAW,CACf,sDAAAuM,GACA,mBAAAjD,GACA,gBAAA2E,GACA,gBAAAS,GACA,gBAAAE,GACA,eAAAhC,GACA,cAAA0B,GACA,SAAAhD,GACA,UAAApS,GACA,MAAA6V,EACF,EAGA,SAASC,GAAY9T,EAAS+T,EAAQ,CACpC,IAAIC,EAAK,KACLC,EACJ,MAAMlV,EAAOqP,GAAmBpO,CAAO,EACvC,SAASkU,GAAU,CACjB,aAAaD,CAAS,EACtBD,GAAMA,EAAG,aACTA,EAAK,IACN,CACD,SAASG,EAAQC,EAAMC,EAAW,CAC5BD,IAAS,SACXA,EAAO,IAELC,IAAc,SAChBA,EAAY,GAEdH,IACA,KAAM,CACJ,KAAAzI,EACA,IAAAF,EACA,MAAAI,EACA,OAAAC,CACN,EAAQ5L,EAAQ,wBAIZ,GAHKoU,GACHL,IAEE,CAACpI,GAAS,CAACC,EACb,OAEF,MAAM0I,EAAWjT,GAAMkK,CAAG,EACpBgJ,EAAalT,GAAMtC,EAAK,aAAe0M,EAAOE,EAAM,EACpD6I,EAAcnT,GAAMtC,EAAK,cAAgBwM,EAAMK,EAAO,EACtD6I,EAAYpT,GAAMoK,CAAI,EAEtB5N,EAAU,CACd,WAFiB,CAACyW,EAAW,MAAQ,CAACC,EAAa,MAAQ,CAACC,EAAc,MAAQ,CAACC,EAAY,KAG/F,UAAWtT,GAAI,EAAGD,GAAI,EAAGmT,CAAS,CAAC,GAAK,CAC9C,EACI,IAAIK,EAAgB,GACpB,SAASC,EAAcC,EAAS,CAC9B,MAAMC,EAAQD,EAAQ,CAAC,EAAE,kBACzB,GAAIC,IAAUR,EAAW,CACvB,GAAI,CAACK,EACH,OAAOP,EAAO,EAEXU,EAKHV,EAAQ,GAAOU,CAAK,EAJpBZ,EAAY,WAAW,IAAM,CAC3BE,EAAQ,GAAO,IAAI,CACpB,EAAE,GAAG,CAIT,CACDO,EAAgB,EACjB,CAID,GAAI,CACFV,EAAK,IAAI,qBAAqBW,EAAe,CAC3C,GAAG9W,EAEH,KAAMkB,EAAK,aACnB,CAAO,CACF,MAAW,CACViV,EAAK,IAAI,qBAAqBW,EAAe9W,CAAO,CACrD,CACDmW,EAAG,QAAQhU,CAAO,CACnB,CACD,OAAAmU,EAAQ,EAAI,EACLD,CACT,CAUA,SAASY,GAAW7Q,EAAWC,EAAU6Q,EAAQlX,EAAS,CACpDA,IAAY,SACdA,EAAU,CAAA,GAEZ,KAAM,CACJ,eAAAmX,EAAiB,GACjB,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,OAAO,gBAAmB,WAC1C,YAAAC,EAAc,OAAO,sBAAyB,WAC9C,eAAAC,EAAiB,EAClB,EAAGvX,EACEwX,EAAclF,GAAclM,CAAS,EACrCqR,EAAYN,GAAkBC,EAAiB,CAAC,GAAII,EAAc7F,GAAqB6F,CAAW,EAAI,CAAA,EAAK,GAAG7F,GAAqBtL,CAAQ,CAAC,EAAI,CAAA,EACtJoR,EAAU,QAAQxC,GAAY,CAC5BkC,GAAkBlC,EAAS,iBAAiB,SAAUiC,EAAQ,CAC5D,QAAS,EACf,CAAK,EACDE,GAAkBnC,EAAS,iBAAiB,SAAUiC,CAAM,CAChE,CAAG,EACD,MAAMQ,EAAYF,GAAeF,EAAcrB,GAAYuB,EAAaN,CAAM,EAAI,KAClF,IAAIS,EAAiB,GACjBC,EAAiB,KACjBP,IACFO,EAAiB,IAAI,eAAezR,GAAQ,CAC1C,GAAI,CAAC0R,CAAU,EAAI1R,EACf0R,GAAcA,EAAW,SAAWL,GAAeI,IAGrDA,EAAe,UAAUvR,CAAQ,EACjC,qBAAqBsR,CAAc,EACnCA,EAAiB,sBAAsB,IAAM,CAC3CC,GAAkBA,EAAe,QAAQvR,CAAQ,CAC3D,CAAS,GAEH6Q,GACN,CAAK,EACGM,GAAe,CAACD,GAClBK,EAAe,QAAQJ,CAAW,EAEpCI,EAAe,QAAQvR,CAAQ,GAEjC,IAAIyR,EACAC,EAAcR,EAAiBjK,GAAsBlH,CAAS,EAAI,KAClEmR,GACFS,IAEF,SAASA,GAAY,CACnB,MAAMC,EAAc3K,GAAsBlH,CAAS,EAC/C2R,IAAgBE,EAAY,IAAMF,EAAY,GAAKE,EAAY,IAAMF,EAAY,GAAKE,EAAY,QAAUF,EAAY,OAASE,EAAY,SAAWF,EAAY,SACtKb,IAEFa,EAAcE,EACdH,EAAU,sBAAsBE,CAAS,CAC1C,CACD,OAAAd,IACO,IAAM,CACXO,EAAU,QAAQxC,GAAY,CAC5BkC,GAAkBlC,EAAS,oBAAoB,SAAUiC,CAAM,EAC/DE,GAAkBnC,EAAS,oBAAoB,SAAUiC,CAAM,CACrE,CAAK,EACDQ,GAAaA,EAAS,EACtBE,GAAkBA,EAAe,aACjCA,EAAiB,KACbL,GACF,qBAAqBO,CAAO,CAElC,CACA,CAOA,MAAMjR,GAAkB,CAACT,EAAWC,EAAUrG,IAAY,CAIxD,MAAM2U,EAAQ,IAAI,IACZuD,EAAgB,CACpB,SAAAjR,GACA,GAAGjH,CACP,EACQmY,EAAoB,CACxB,GAAGD,EAAc,SACjB,GAAIvD,CACR,EACE,OAAOyD,GAAkBhS,EAAWC,EAAU,CAC5C,GAAG6R,EACH,SAAUC,CACd,CAAG,CACH,ECjlBA,SAAS7F,GAAcnQ,EAAS,CAC9B,IAAIkW,EACJ,OAAQA,EAAOlW,GAAW,KAAO,OAASA,EAAQ,MAAQ,KAAOkW,EAAOlW,CAC1E,CAOA,SAASwG,GAAM3I,EAAS,CACtB,MAAO,CACL,KAAM,QACN,QAAAA,EACA,GAAGsY,EAAM,CACP,MAAMnW,EAAUmQ,GAAciG,EAAAA,MAAMvY,EAAQ,OAAO,CAAC,EACpD,OAAImC,GAAW,KACN,GAEFqW,GAAQ,CACb,QAAArW,EACA,QAASnC,EAAQ,OACzB,CAAO,EAAE,GAAGsY,CAAI,CACX,CACL,CACA,CAEA,SAASG,GAAOtW,EAAS,CACvB,OAAI,OAAO,OAAW,IACb,GAEGA,EAAQ,cAAc,aAAe,QACtC,kBAAoB,CACjC,CAEA,SAASuW,GAAWvW,EAASlD,EAAO,CAClC,MAAM0Z,EAAMF,GAAOtW,CAAO,EAC1B,OAAO,KAAK,MAAMlD,EAAQ0Z,CAAG,EAAIA,CACnC,CASA,SAASC,GAAYxS,EAAWC,EAAUrG,EAAS,CAC7CA,IAAY,SACdA,EAAU,CAAA,GAEZ,MAAM6Y,EAA6B7Y,EAAQ,qBACrC8Y,EAAaC,EAAAA,SAAS,IAAM,CAChC,IAAIC,EACJ,OAAQA,EAAST,EAAAA,MAAMvY,EAAQ,IAAI,IAAM,KAAOgZ,EAAS,EAC7D,CAAG,EACKC,EAAmBF,EAAAA,SAAS,IAAMR,EAAK,MAACvY,EAAQ,UAAU,CAAC,EAC3DkZ,EAAkBH,EAAAA,SAAS,IAAM,CACrC,IAAII,EACJ,OAAQA,EAAUZ,EAAAA,MAAMvY,EAAQ,SAAS,IAAM,KAAOmZ,EAAU,QACpE,CAAG,EACKC,EAAiBL,EAAAA,SAAS,IAAM,CACpC,IAAIM,EACJ,OAAQA,EAAUd,EAAAA,MAAMvY,EAAQ,QAAQ,IAAM,KAAOqZ,EAAU,UACnE,CAAG,EACKC,EAAkBP,EAAAA,SAAS,IAAM,CACrC,IAAIQ,EACJ,OAAQA,EAAUhB,EAAAA,MAAMvY,EAAQ,SAAS,IAAM,KAAOuZ,EAAU,EACpE,CAAG,EACKC,EAAmBT,EAAAA,SAAS,IAAMzG,GAAclM,EAAU,KAAK,CAAC,EAChEqT,EAAkBV,EAAAA,SAAS,IAAMzG,GAAcjM,EAAS,KAAK,CAAC,EAC9Dc,EAAIuS,MAAI,CAAC,EACTtS,EAAIsS,MAAI,CAAC,EACT3S,EAAW2S,EAAAA,IAAIN,EAAe,KAAK,EACnCjV,EAAYuV,EAAAA,IAAIR,EAAgB,KAAK,EACrC5R,EAAiBqS,aAAW,CAAA,CAAE,EAC9BC,EAAeF,MAAI,EAAK,EACxBG,EAAiBd,EAAAA,SAAS,IAAM,CACpC,MAAMe,EAAgB,CACpB,SAAU/S,EAAS,MACnB,KAAM,IACN,IAAK,GACX,EACI,GAAI,CAAC0S,EAAgB,MACnB,OAAOK,EAET,MAAMC,EAAOrB,GAAWe,EAAgB,MAAOtS,EAAE,KAAK,EAChD6S,EAAOtB,GAAWe,EAAgB,MAAOrS,EAAE,KAAK,EACtD,OAAIkS,EAAgB,MACX,CACL,GAAGQ,EACH,UAAW,aAAeC,EAAO,OAASC,EAAO,MACjD,GAAIvB,GAAOgB,EAAgB,KAAK,GAAK,KAAO,CAC1C,WAAY,WACtB,CACA,EAEW,CACL,SAAU1S,EAAS,MACnB,KAAMgT,EAAO,KACb,IAAKC,EAAO,IAClB,CACA,CAAG,EACD,IAAIC,EACJ,SAAS/C,GAAS,CACZsC,EAAiB,OAAS,MAAQC,EAAgB,OAAS,MAG/D5S,GAAgB2S,EAAiB,MAAOC,EAAgB,MAAO,CAC7D,WAAYR,EAAiB,MAC7B,UAAWC,EAAgB,MAC3B,SAAUE,EAAe,KAC/B,CAAK,EAAE,KAAKc,GAAY,CAClB/S,EAAE,MAAQ+S,EAAS,EACnB9S,EAAE,MAAQ8S,EAAS,EACnBnT,EAAS,MAAQmT,EAAS,SAC1B/V,EAAU,MAAQ+V,EAAS,UAC3B5S,EAAe,MAAQ4S,EAAS,eAChCN,EAAa,MAAQ,EAC3B,CAAK,CACF,CACD,SAASvD,GAAU,CACb,OAAO4D,GAAgC,aACzCA,IACAA,EAA8B,OAEjC,CACD,SAASE,GAAS,CAEhB,GADA9D,IACIwC,IAA+B,OAAW,CAC5C3B,IACA,MACD,CACD,GAAIsC,EAAiB,OAAS,MAAQC,EAAgB,OAAS,KAAM,CACnEQ,EAA8BpB,EAA2BW,EAAiB,MAAOC,EAAgB,MAAOvC,CAAM,EAC9G,MACD,CACF,CACD,SAASrP,GAAQ,CACViR,EAAW,QACdc,EAAa,MAAQ,GAExB,CACDQ,OAAAA,EAAAA,MAAM,CAACnB,EAAkBC,EAAiBE,CAAc,EAAGlC,EAAQ,CACjE,MAAO,MACX,CAAG,EACDkD,EAAAA,MAAM,CAACZ,EAAkBC,CAAe,EAAGU,EAAQ,CACjD,MAAO,MACX,CAAG,EACDC,EAAK,MAACtB,EAAYjR,EAAO,CACvB,MAAO,MACX,CAAG,EACGwS,EAAe,gBAAA,GACjBC,EAAc,eAACjE,CAAO,EAEjB,CACL,EAAGkE,EAAe,gBAACpT,CAAC,EACpB,EAAGoT,EAAe,gBAACnT,CAAC,EACpB,SAAUmT,EAAe,gBAACxT,CAAQ,EAClC,UAAWwT,EAAe,gBAACpW,CAAS,EACpC,eAAgBoW,EAAe,gBAACjT,CAAc,EAC9C,aAAciT,EAAe,gBAACX,CAAY,EAC1C,eAAAC,EACA,OAAA3C,CACJ,CACA,CClKA,MAAMsD,OAAoB,IAAI,CAC5B,aACA,OACA,OACA,WACA,WACA,SACA,MACA,YACF,CAAC,EAEKC,GAAyB,iBAOzBC,GAAmB,iEAOnBC,GACJ,qIAEIC,GAAmB,CAACC,EAAiBC,IAA8C,CACjF,MAAAC,EAAgBF,EAAU,SAAS,YAAY,EAEjD,OAAAC,EAAqB,SAASC,CAAa,EACzCP,GAAc,IAAIO,CAAa,EAC1B,GACLL,GAAiB,KAAKG,EAAU,WAAa,EAAE,GAC7CF,GAAiB,KAAKE,EAAU,WAAa,EAAE,GAI9C,GAIFC,EACJ,OAAQE,GAA6CA,aAA0B,MAAM,EACrF,KAAMC,GAAUA,EAAM,KAAKF,CAAa,CAAC,CAC9C,EAEaG,GAAmB,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQT,EAAsB,EAClE,EAAK,CAAC,SAAU,OAAQ,QAAS,KAAK,EACtC,KAAQ,CAAC,EACT,EAAK,CAAC,EACN,GAAM,CAAC,EACP,IAAO,CAAC,EACR,KAAQ,CAAC,EACT,IAAO,CAAC,EACR,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,GAAM,CAAC,EACP,EAAK,CAAC,EACN,IAAO,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,QAAQ,EAC1D,GAAM,CAAC,EACP,GAAM,CAAC,EACP,EAAK,CAAC,EACN,IAAO,CAAC,EACR,EAAK,CAAC,EACN,MAAS,CAAC,EACV,KAAQ,CAAC,EACT,IAAO,CAAC,EACR,IAAO,CAAC,EACR,OAAU,CAAC,EACX,EAAK,CAAC,EACN,GAAM,CAAC,CACT,EAEaU,GAAe,CAC1BC,EACAC,EACAC,IACG,CACC,GAAA,CAACF,EAAW,OACP,OAAAA,EAGL,GAAAE,GAAoB,OAAOA,GAAqB,WAClD,OAAOA,EAAiBF,CAAU,EAIpC,MAAMG,EADY,IAAI,OAAO,YACK,gBAAgBH,EAAY,WAAW,EACnEnT,EAAgCsT,EAAgB,KAAK,iBAAiB,GAAG,EAE/E,UAAWpZ,KAAW8F,EAAU,CACxB,MAAAuT,EAAcrZ,EAAQ,SAAS,YAAY,EAEjD,GAAI,CAAC,OAAO,KAAKkZ,CAAS,EAAE,SAASG,CAAW,EAAG,CACjDrZ,EAAQ,OAAO,EAEf,QACF,CAEA,MAAMsZ,EAAgBtZ,EAAQ,WACxBuZ,EAAoB,CAAC,GAAIL,EAAU,GAAG,GAAK,GAAK,GAAIA,EAAUG,CAAW,GAAK,CAAA,CAAG,EAEvF,UAAWX,KAAaY,EACjBb,GAAiBC,EAAWa,CAAiB,GACxCvZ,EAAA,gBAAgB0Y,EAAU,QAAQ,CAGhD,CAEA,OAAOU,EAAgB,KAAK,SAC9B,EC9EA,SAASI,GAAkBlU,EAAI,CAC7B,OAAI4S,EAAe,gBAAA,GACjBC,EAAc,eAAC7S,CAAE,EACV,IAEF,EACT,CAyBA,SAASmU,GAAkBC,EAAc,CACvC,IAAIC,EAAc,GACd/T,EACJ,MAAMgU,EAAQC,cAAY,EAAI,EAC9B,MAAO,IAAI1D,KACJwD,IACH/T,EAAQgU,EAAM,IAAI,IAAMF,EAAa,GAAGvD,CAAI,CAAC,EAC7CwD,EAAc,IAET/T,EAEX,CAsCA,SAASkU,GAAuBC,EAAY,CAC1C,IAAIC,EAAc,EACdpU,EACAgU,EACJ,MAAMK,EAAU,IAAM,CACpBD,GAAe,EACXJ,GAASI,GAAe,IAC1BJ,EAAM,KAAI,EACVhU,EAAQ,OACRgU,EAAQ,OAEd,EACE,MAAO,IAAIzD,KACT6D,GAAe,EACVpU,IACHgU,EAAQC,EAAAA,YAAY,EAAI,EACxBjU,EAAQgU,EAAM,IAAI,IAAMG,EAAW,GAAG5D,CAAI,CAAC,GAE7CqD,GAAkBS,CAAO,EAClBrU,EAEX,CA2DA,SAASsU,GAAQC,EAAG,CAClB,OAAO,OAAOA,GAAM,WAAaA,EAAC,EAAK/D,EAAAA,MAAM+D,CAAC,CAChD,CA4EA,MAAMC,GAAW,OAAO,OAAW,KAAe,OAAO,SAAa,IACrD,OAAO,kBAAsB,KAAe,sBAAsB,kBACnF,MAAMC,GAASpe,GAAQ,OAAOA,EAAQ,IAMhCD,GAAW,OAAO,UAAU,SAC5Bse,GAAYre,GAAQD,GAAS,KAAKC,CAAG,IAAM,kBAI3Cse,GAAO,IAAM,CACnB,EAOMC,GAAwBC,GAAQ,EACtC,SAASA,IAAW,CAClB,IAAIC,EACJ,OAAON,MAAcM,EAAK,QAAU,KAAO,OAAS,OAAO,YAAc,KAAO,OAASA,EAAG,YAA8B,iBAAiB,KAAK,OAAO,UAAU,SAAS,CAC5K,CAEA,SAASC,GAAoBC,EAAQtV,EAAI,CACvC,SAASuV,KAAW1E,EAAM,CACxB,OAAO,IAAI,QAAQ,CAAC2E,EAASC,IAAW,CACtC,QAAQ,QAAQH,EAAO,IAAMtV,EAAG,MAAM,KAAM6Q,CAAI,EAAG,CAAE,GAAA7Q,EAAI,QAAS,KAAM,KAAA6Q,CAAI,CAAE,CAAC,EAAE,KAAK2E,CAAO,EAAE,MAAMC,CAAM,CACjH,CAAK,CACF,CACD,OAAOF,CACT,CACA,MAAMG,GAAgBC,GACbA,EAAM,EAEf,SAASC,GAAeC,EAAItd,EAAU,GAAI,CACxC,IAAIud,EACAC,EACAC,EAAef,GACnB,MAAMgB,EAAiBC,GAAW,CAChC,aAAaA,CAAM,EACnBF,IACAA,EAAef,EACnB,EA+BE,OA9BgBU,GAAW,CACzB,MAAMQ,EAAWvB,GAAQiB,CAAE,EACrBO,EAAcxB,GAAQrc,EAAQ,OAAO,EAG3C,OAFIud,GACFG,EAAcH,CAAK,EACjBK,GAAY,GAAKC,IAAgB,QAAUA,GAAe,GACxDL,IACFE,EAAcF,CAAQ,EACtBA,EAAW,MAEN,QAAQ,QAAQJ,EAAM,CAAE,GAE1B,IAAI,QAAQ,CAACH,EAASC,IAAW,CACtCO,EAAezd,EAAQ,eAAiBkd,EAASD,EAC7CY,GAAe,CAACL,IAClBA,EAAW,WAAW,IAAM,CACtBD,GACFG,EAAcH,CAAK,EACrBC,EAAW,KACXP,EAAQG,EAAM,CAAE,CACjB,EAAES,CAAW,GAEhBN,EAAQ,WAAW,IAAM,CACnBC,GACFE,EAAcF,CAAQ,EACxBA,EAAW,KACXP,EAAQG,EAAM,CAAE,CACjB,EAAEQ,CAAQ,CACjB,CAAK,CACL,CAEA,CA+CA,SAASE,GAAeC,EAAeZ,GAAc,CACnD,MAAMa,EAAWtE,MAAI,EAAI,EACzB,SAASuE,GAAQ,CACfD,EAAS,MAAQ,EAClB,CACD,SAASE,GAAS,CAChBF,EAAS,MAAQ,EAClB,CACD,MAAMtb,EAAc,IAAI4V,IAAS,CAC3B0F,EAAS,OACXD,EAAa,GAAGzF,CAAI,CAC1B,EACE,MAAO,CAAE,SAAU6F,WAASH,CAAQ,EAAG,MAAAC,EAAO,OAAAC,EAAQ,YAAAxb,EACxD,CAmFA,SAAS0b,MAAS9F,EAAM,CACtB,GAAIA,EAAK,SAAW,EAClB,OAAO+F,EAAO,MAAC,GAAG/F,CAAI,EACxB,MAAMgE,EAAIhE,EAAK,CAAC,EAChB,OAAO,OAAOgE,GAAM,WAAa6B,EAAQ,SAACG,EAAS,UAAC,KAAO,CAAE,IAAKhC,EAAG,IAAKI,EAAI,EAAG,CAAC,EAAIhD,EAAG,IAAC4C,CAAC,CAC7F,CAmCA,SAASiC,GAAc9W,EAAI6V,EAAK,IAAKtd,EAAU,CAAA,EAAI,CACjD,OAAO8c,GACLO,GAAeC,EAAItd,CAAO,EAC1ByH,CACJ,CACA,CA4GA,SAAS+W,GAAgBC,EAAQC,EAAI1e,EAAU,CAAA,EAAI,CACjD,KAAM,CACJ,YAAA0C,EAAcya,GACd,GAAGwB,CACJ,EAAG3e,EACJ,OAAOoa,EAAK,MACVqE,EACA3B,GACEpa,EACAgc,CACD,EACDC,CACJ,CACA,CAEA,SAASC,GAAcH,EAAQC,EAAI1e,EAAU,CAAA,EAAI,CAC/C,KAAM,CACJ,YAAa+c,EACb,GAAG4B,CACJ,EAAG3e,EACE,CAAE,YAAA0C,EAAa,MAAAub,EAAO,OAAAC,EAAQ,SAAAF,GAAaF,GAAef,CAAM,EAStE,MAAO,CAAE,KARIyB,GACXC,EACAC,EACA,CACE,GAAGC,EACH,YAAAjc,CACD,CACL,EACiB,MAAAub,EAAO,OAAAC,EAAQ,SAAAF,CAAQ,CACxC,CAqGA,SAASa,GAAapX,EAAIqX,EAAO,GAAM,CACjCC,qBAAoB,EACtBC,EAAS,UAACvX,CAAE,EACLqX,EACPrX,IAEAwX,EAAQ,SAACxX,CAAE,CACf,CAkVA,SAASyX,GAAcR,EAAIS,EAAW,IAAKnf,EAAU,CAAA,EAAI,CACvD,KAAM,CACJ,UAAAof,EAAY,GACZ,kBAAAC,EAAoB,EACrB,EAAGrf,EACJ,IAAIud,EAAQ,KACZ,MAAMS,EAAWtE,MAAI,EAAK,EAC1B,SAAS4F,GAAQ,CACX/B,IACF,cAAcA,CAAK,EACnBA,EAAQ,KAEX,CACD,SAASU,GAAQ,CACfD,EAAS,MAAQ,GACjBsB,GACD,CACD,SAASpB,GAAS,CAChB,MAAMqB,EAAgBlD,GAAQ8C,CAAQ,EAClCI,GAAiB,IAErBvB,EAAS,MAAQ,GACbqB,GACFX,IACFY,IACA/B,EAAQ,YAAYmB,EAAIa,CAAa,EACtC,CAGD,GAFIH,GAAa7C,IACf2B,IACEsB,EAAK,MAACL,CAAQ,GAAK,OAAOA,GAAa,WAAY,CACrD,MAAMM,EAAYrF,QAAM+E,EAAU,IAAM,CAClCnB,EAAS,OAASzB,IACpB2B,GACR,CAAK,EACDvC,GAAkB8D,CAAS,CAC5B,CACD,OAAA9D,GAAkBsC,CAAK,EAChB,CACL,SAAAD,EACA,MAAAC,EACA,OAAAC,CACJ,CACA,CAsGA,SAASwB,GAAYzgB,EAAOe,EAAU,GAAI,CACxC,KAAM,CACJ,OAAA2f,EAAS,aACT,MAAAC,EACA,UAAAC,CACD,EAAG7f,EACJ,OAAO+Y,EAAQ,SAAC,IAAM,CACpB,IAAI+G,EAAWzD,GAAQpd,CAAK,EAC5B,OAAI,OAAO6gB,GAAa,WACtBA,EAAW,OAAOH,CAAM,EAAEG,EAAUF,CAAK,GACvCC,GAAa,OAAO,MAAMC,CAAQ,IACpCA,EAAW,GACNA,CACX,CAAG,CACH,CC3lCA,SAASC,GAAaC,EAAO,CAC3B,IAAInD,EACJ,MAAMoD,EAAQ5D,GAAQ2D,CAAK,EAC3B,OAAQnD,EAAKoD,GAAS,KAAO,OAASA,EAAM,MAAQ,KAAOpD,EAAKoD,CAClE,CAEA,MAAMC,GAAgB3D,GAAW,OAAS,OAK1C,SAAS4D,MAAoB7H,EAAM,CACjC,IAAI8H,EACAC,EACAC,EACAtgB,EAOJ,GANI,OAAOsY,EAAK,CAAC,GAAM,UAAY,MAAM,QAAQA,EAAK,CAAC,CAAC,GACtD,CAAC+H,EAAQC,EAAWtgB,CAAO,EAAIsY,EAC/B8H,EAASF,IAET,CAACE,EAAQC,EAAQC,EAAWtgB,CAAO,EAAIsY,EAErC,CAAC8H,EACH,OAAO1D,GACJ,MAAM,QAAQ2D,CAAM,IACvBA,EAAS,CAACA,CAAM,GACb,MAAM,QAAQC,CAAS,IAC1BA,EAAY,CAACA,CAAS,GACxB,MAAMC,EAAW,CAAA,EACXlK,EAAU,IAAM,CACpBkK,EAAS,QAAS9Y,GAAOA,EAAI,CAAA,EAC7B8Y,EAAS,OAAS,CACtB,EACQC,EAAW,CAACpgB,EAAIwC,EAAO6d,EAAUC,KACrCtgB,EAAG,iBAAiBwC,EAAO6d,EAAUC,CAAQ,EACtC,IAAMtgB,EAAG,oBAAoBwC,EAAO6d,EAAUC,CAAQ,GAEzDjB,EAAYrF,EAAK,MACrB,IAAM,CAAC2F,GAAaK,CAAM,EAAG/D,GAAQrc,CAAO,CAAC,EAC7C,CAAC,CAACI,EAAIsgB,CAAQ,IAAM,CAElB,GADArK,IACI,CAACjW,EACH,OACF,MAAMugB,EAAelE,GAASiE,CAAQ,EAAI,CAAE,GAAGA,CAAU,EAAGA,EAC5DH,EAAS,KACP,GAAGF,EAAO,QAASzd,GACV0d,EAAU,IAAKG,GAAaD,EAASpgB,EAAIwC,EAAO6d,EAAUE,CAAY,CAAC,CAC/E,CACT,CACK,EACD,CAAE,UAAW,GAAM,MAAO,MAAQ,CACtC,EACQC,EAAO,IAAM,CACjBnB,IACApJ,GACJ,EACE,OAAAsF,GAAkBiF,CAAI,EACfA,CACT,CAEA,IAAIC,GAAiB,GACrB,SAASC,GAAeV,EAAQW,EAAS/gB,EAAU,CAAA,EAAI,CACrD,KAAM,CAAE,OAAA4V,EAASsK,GAAe,OAAAc,EAAS,CAAE,EAAE,QAAAC,EAAU,GAAM,aAAAC,EAAe,EAAO,EAAGlhB,EACtF,GAAI,CAAC4V,EACH,OACE+G,IAAS,CAACkE,KACZA,GAAiB,GACjB,MAAM,KAAKjL,EAAO,SAAS,KAAK,QAAQ,EAAE,QAASxV,GAAOA,EAAG,iBAAiB,QAASsc,EAAI,CAAC,EAC5F9G,EAAO,SAAS,gBAAgB,iBAAiB,QAAS8G,EAAI,GAEhE,IAAIyE,EAAe,GACnB,MAAMC,EAAgBxe,GACboe,EAAO,KAAMK,GAAY,CAC9B,GAAI,OAAOA,GAAY,SACrB,OAAO,MAAM,KAAKzL,EAAO,SAAS,iBAAiByL,CAAO,CAAC,EAAE,KAAMjhB,GAAOA,IAAOwC,EAAM,QAAUA,EAAM,aAAY,EAAG,SAASxC,CAAE,CAAC,EAC7H,CACL,MAAMA,EAAK2f,GAAasB,CAAO,EAC/B,OAAOjhB,IAAOwC,EAAM,SAAWxC,GAAMwC,EAAM,eAAe,SAASxC,CAAE,EACtE,CACP,CAAK,EAcGiW,EAAU,CACd8J,GAAiBvK,EAAQ,QAbThT,GAAU,CAC1B,MAAMxC,EAAK2f,GAAaK,CAAM,EAC9B,GAAI,GAAChgB,GAAMA,IAAOwC,EAAM,QAAUA,EAAM,aAAY,EAAG,SAASxC,CAAE,GAIlE,IAFIwC,EAAM,SAAW,IACnBue,EAAe,CAACC,EAAaxe,CAAK,GAChC,CAACue,EAAc,CACjBA,EAAe,GACf,MACD,CACDJ,EAAQne,CAAK,EACjB,EAEgD,CAAE,QAAS,GAAM,QAAAqe,EAAS,EACtEd,GAAiBvK,EAAQ,cAAgBjV,GAAM,CAC7C,MAAMP,EAAK2f,GAAaK,CAAM,EAC9Be,EAAe,CAACC,EAAazgB,CAAC,GAAK,CAAC,EAAEP,GAAM,CAACO,EAAE,aAAc,EAAC,SAASP,CAAE,EAC/E,EAAO,CAAE,QAAS,GAAM,EACpB8gB,GAAgBf,GAAiBvK,EAAQ,OAAShT,GAAU,CAC1D,WAAW,IAAM,CACf,IAAIia,EACJ,MAAMzc,EAAK2f,GAAaK,CAAM,IACxBvD,EAAKjH,EAAO,SAAS,gBAAkB,KAAO,OAASiH,EAAG,WAAa,UAAY,EAAEzc,GAAM,MAAgBA,EAAG,SAASwV,EAAO,SAAS,aAAa,IACxJmL,EAAQne,CAAK,CAChB,EAAE,CAAC,CACV,CAAK,CACL,EAAI,OAAO,OAAO,EAEhB,MADa,IAAMyT,EAAQ,QAAS5O,GAAOA,EAAE,CAAE,CAEjD,CAEA,SAAS6Z,GAAmBC,EAAW,CACrC,OAAI,OAAOA,GAAc,WAChBA,EACA,OAAOA,GAAc,SACpB3e,GAAUA,EAAM,MAAQ2e,EACzB,MAAM,QAAQA,CAAS,EACtB3e,GAAU2e,EAAU,SAAS3e,EAAM,GAAG,EACzC,IAAM,EACf,CACA,SAAS4e,MAAelJ,EAAM,CAC5B,IAAImJ,EACAV,EACA/gB,EAAU,CAAA,EACVsY,EAAK,SAAW,GAClBmJ,EAAMnJ,EAAK,CAAC,EACZyI,EAAUzI,EAAK,CAAC,EAChBtY,EAAUsY,EAAK,CAAC,GACPA,EAAK,SAAW,EACrB,OAAOA,EAAK,CAAC,GAAM,UACrBmJ,EAAM,GACNV,EAAUzI,EAAK,CAAC,EAChBtY,EAAUsY,EAAK,CAAC,IAEhBmJ,EAAMnJ,EAAK,CAAC,EACZyI,EAAUzI,EAAK,CAAC,IAGlBmJ,EAAM,GACNV,EAAUzI,EAAK,CAAC,GAElB,KAAM,CACJ,OAAA8H,EAASF,GACT,UAAAwB,EAAY,UACZ,QAAAC,EAAU,GACV,OAAAC,EAAS,EACV,EAAG5hB,EACE6hB,EAAYP,GAAmBG,CAAG,EAOxC,OAAOtB,GAAiBC,EAAQsB,EANd/gB,GAAM,CAClBA,EAAE,QAAU0b,GAAQuF,CAAM,GAE1BC,EAAUlhB,CAAC,GACbogB,EAAQpgB,CAAC,CACf,EACuDghB,CAAO,CAC9D,CA0IA,SAASG,IAAa,CACpB,MAAMC,EAAYrI,MAAI,EAAK,EAC3B,OAAIqF,EAAkB,mBAAA,GACpBC,EAAAA,UAAU,IAAM,CACd+C,EAAU,MAAQ,EACxB,CAAK,EAEIA,CACT,CAEA,SAASC,GAAaC,EAAU,CAC9B,MAAMF,EAAYD,KAClB,OAAO/I,EAAQ,SAAC,KACdgJ,EAAU,MACH,EAAQE,EAAQ,EACxB,CACH,CAokBA,SAASC,GAAcC,EAAOniB,EAAU,GAAI,CAC1C,KAAM,CAAE,OAAA4V,EAASsK,EAAe,EAAGlgB,EAC7BoiB,EAAcJ,GAAa,IAAMpM,GAAU,eAAgBA,GAAU,OAAOA,EAAO,YAAe,UAAU,EAClH,IAAIyM,EACJ,MAAMxgB,EAAU6X,MAAI,EAAK,EACnBqH,EAAWne,GAAU,CACzBf,EAAQ,MAAQe,EAAM,OAC1B,EACQyT,EAAU,IAAM,CACfgM,IAED,wBAAyBA,EAC3BA,EAAW,oBAAoB,SAAUtB,CAAO,EAEhDsB,EAAW,eAAetB,CAAO,EACvC,EACQtB,EAAY6C,EAAAA,YAAY,IAAM,CAC7BF,EAAY,QAEjB/L,IACAgM,EAAazM,EAAO,WAAWyG,GAAQ8F,CAAK,CAAC,EACzC,qBAAsBE,EACxBA,EAAW,iBAAiB,SAAUtB,CAAO,EAE7CsB,EAAW,YAAYtB,CAAO,EAChClf,EAAQ,MAAQwgB,EAAW,QAC/B,CAAG,EACD,OAAA1G,GAAkB,IAAM,CACtB8D,IACApJ,IACAgM,EAAa,MACjB,CAAG,EACMxgB,CACT,CA0WA,SAAS0gB,GAAY9D,EAAQ,CAC3B,OAAO,KAAK,MAAM,KAAK,UAAUA,CAAM,CAAC,CAC1C,CAyBA,MAAM+D,GAAU,OAAO,WAAe,IAAc,WAAa,OAAO,OAAW,IAAc,OAAS,OAAO,OAAW,IAAc,OAAS,OAAO,KAAS,IAAc,KAAO,GAClLC,GAAY,0BACZC,GAA2BC,GAAW,EAC5C,SAASA,IAAc,CACrB,OAAMF,MAAaD,KACjBA,GAAQC,EAAS,EAAID,GAAQC,EAAS,GAAK,CAAA,GACtCD,GAAQC,EAAS,CAC1B,CACA,SAASG,GAAcnB,EAAKpU,EAAU,CACpC,OAAOqV,GAASjB,CAAG,GAAKpU,CAC1B,CAKA,SAASwV,GAAoBC,EAAS,CACpC,OAAOA,GAAW,KAAO,MAAQA,aAAmB,IAAM,MAAQA,aAAmB,IAAM,MAAQA,aAAmB,KAAO,OAAS,OAAOA,GAAY,UAAY,UAAY,OAAOA,GAAY,SAAW,SAAW,OAAOA,GAAY,SAAW,SAAY,OAAO,MAAMA,CAAO,EAAe,MAAX,QAC9R,CAEA,MAAMC,GAAqB,CACzB,QAAS,CACP,KAAOrf,GAAMA,IAAM,OACnB,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,OAAQ,CACN,KAAOA,GAAM,KAAK,MAAMA,CAAC,EACzB,MAAQA,GAAM,KAAK,UAAUA,CAAC,CAC/B,EACD,OAAQ,CACN,KAAOA,GAAM,OAAO,WAAWA,CAAC,EAChC,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,IAAK,CACH,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,OAAQ,CACN,KAAOA,GAAMA,EACb,MAAQA,GAAM,OAAOA,CAAC,CACvB,EACD,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,EAAE,QAAO,CAAE,CAAC,CACrD,EACD,IAAK,CACH,KAAOA,GAAM,IAAI,IAAI,KAAK,MAAMA,CAAC,CAAC,EAClC,MAAQA,GAAM,KAAK,UAAU,MAAM,KAAKA,CAAC,CAAC,CAC3C,EACD,KAAM,CACJ,KAAOA,GAAM,IAAI,KAAKA,CAAC,EACvB,MAAQA,GAAMA,EAAE,YAAa,CAC9B,CACH,EACMsf,GAAyB,iBAC/B,SAASC,GAAWxB,EAAKyB,EAAUC,EAASnjB,EAAU,CAAA,EAAI,CACxD,IAAI6c,EACJ,KAAM,CACJ,MAAAuG,EAAQ,MACR,KAAAC,EAAO,GACP,uBAAAC,EAAyB,GACzB,cAAAC,EAAgB,GAChB,cAAAC,EAAgB,GAChB,QAAAC,EACA,OAAA7N,EAASsK,GACT,YAAAxd,EACA,QAAAghB,EAAW/iB,GAAM,CACf,QAAQ,MAAMA,CAAC,CAChB,EACD,cAAAgjB,CACD,EAAG3jB,EACE4H,GAAQ6b,EAAU9J,EAAAA,WAAaD,EAAG,KAAE,OAAOwJ,GAAa,WAAaA,IAAaA,CAAQ,EAChG,GAAI,CAACC,EACH,GAAI,CACFA,EAAUP,GAAc,oBAAqB,IAAM,CACjD,IAAIgB,EACJ,OAAQA,EAAM1D,KAAkB,KAAO,OAAS0D,EAAI,YACrD,CAAA,GACF,OAAQjjB,EAAG,CACV+iB,EAAQ/iB,CAAC,CACV,CAEH,GAAI,CAACwiB,EACH,OAAOvb,EACT,MAAMkb,EAAUzG,GAAQ6G,CAAQ,EAC1BW,EAAOhB,GAAoBC,CAAO,EAClCgB,GAAcjH,EAAK7c,EAAQ,aAAe,KAAO6c,EAAKkG,GAAmBc,CAAI,EAC7E,CAAE,MAAOE,EAAY,OAAQC,CAAa,EAAGC,GACjDrc,EACA,IAAMsc,EAAMtc,EAAK,KAAK,EACtB,CAAE,MAAAwb,EAAO,KAAAC,EAAM,YAAA3gB,CAAa,CAChC,EACE,OAAIkT,GAAU0N,GACZzE,GAAa,IAAM,CACjBsB,GAAiBvK,EAAQ,UAAWsB,CAAM,EAC1CiJ,GAAiBvK,EAAQoN,GAAwBmB,CAAqB,EAClER,GACFzM,GACR,CAAK,EAEEyM,GACHzM,IACKtP,EACP,SAASsc,EAAMxgB,EAAG,CAChB,GAAI,CACF,GAAIA,GAAK,KACPyf,EAAQ,WAAW1B,CAAG,MACjB,CACL,MAAM2C,EAAaN,EAAW,MAAMpgB,CAAC,EAC/B2gB,EAAWlB,EAAQ,QAAQ1B,CAAG,EAChC4C,IAAaD,IACfjB,EAAQ,QAAQ1B,EAAK2C,CAAU,EAC3BxO,GACFA,EAAO,cAAc,IAAI,YAAYoN,GAAwB,CAC3D,OAAQ,CACN,IAAAvB,EACA,SAAA4C,EACA,SAAUD,EACV,YAAajB,CACd,CACF,CAAA,CAAC,EAGP,CACF,OAAQxiB,EAAG,CACV+iB,EAAQ/iB,CAAC,CACV,CACF,CACD,SAAS2jB,EAAK1hB,EAAO,CACnB,MAAM4L,EAAW5L,EAAQA,EAAM,SAAWugB,EAAQ,QAAQ1B,CAAG,EAC7D,GAAIjT,GAAY,KACd,OAAI+U,GAAiBT,IAAY,MAC/BK,EAAQ,QAAQ1B,EAAKqC,EAAW,MAAMhB,CAAO,CAAC,EACzCA,EACF,GAAI,CAAClgB,GAAS4gB,EAAe,CAClC,MAAMvkB,EAAQ6kB,EAAW,KAAKtV,CAAQ,EACtC,OAAI,OAAOgV,GAAkB,WACpBA,EAAcvkB,EAAO6jB,CAAO,EAC5Be,IAAS,UAAY,CAAC,MAAM,QAAQ5kB,CAAK,EACzC,CAAE,GAAG6jB,EAAS,GAAG7jB,GACnBA,CACb,KAAW,QAAI,OAAOuP,GAAa,SACtBA,EAEAsV,EAAW,KAAKtV,CAAQ,CAElC,CACD,SAAS2V,EAAsBvhB,EAAO,CACpCsU,EAAOtU,EAAM,MAAM,CACpB,CACD,SAASsU,EAAOtU,EAAO,CACrB,GAAI,EAAAA,GAASA,EAAM,cAAgBugB,GAEnC,IAAIvgB,GAASA,EAAM,KAAO,KAAM,CAC9BgF,EAAK,MAAQkb,EACb,MACD,CACD,GAAI,EAAAlgB,GAASA,EAAM,MAAQ6e,GAE3B,CAAAsC,IACA,GAAI,EACGnhB,GAAS,KAAO,OAASA,EAAM,YAAckhB,EAAW,MAAMlc,EAAK,KAAK,IAC3EA,EAAK,MAAQ0c,EAAK1hB,CAAK,EAC1B,OAAQjC,EAAG,CACV+iB,EAAQ/iB,CAAC,CACf,QAAc,CACJiC,EACFqc,EAAQ,SAAC+E,CAAW,EAEpBA,GACH,GACF,CACH,CAEA,SAASO,GAAiBvkB,EAAS,CACjC,OAAOkiB,GAAc,+BAAgCliB,CAAO,CAC9D,CAEA,SAASwkB,GAAaxkB,EAAU,GAAI,CAClC,KAAM,CACJ,SAAAiB,EAAW,OACX,UAAA4Z,EAAY,QACZ,aAAA4J,EAAe,OACf,OAAA7O,EAASsK,GACT,QAAAiD,EACA,WAAAuB,EAAa,sBACb,uBAAApB,EAAyB,GACzB,WAAAqB,EACA,SAAAC,EACA,kBAAAC,EAAoB,EACrB,EAAG7kB,EACE8kB,EAAQ,CACZ,KAAM,GACN,MAAO,QACP,KAAM,OACN,GAAG9kB,EAAQ,OAAS,CAAE,CAC1B,EACQ+kB,EAAgBR,GAAiB,CAAE,OAAA3O,CAAQ,CAAA,EAC3CoP,EAASjM,EAAAA,SAAS,IAAMgM,EAAc,MAAQ,OAAS,OAAO,EAC9DE,EAAQN,IAAeD,GAAc,KAAOtG,GAAMqG,CAAY,EAAIxB,GAAWyB,EAAYD,EAActB,EAAS,CAAE,OAAAvN,EAAQ,uBAAA0N,CAAwB,CAAA,GAClJvb,EAAQgR,EAAAA,SAAS,IAAMkM,EAAM,QAAU,OAASD,EAAO,MAAQC,EAAM,KAAK,EAC1EC,EAAkBtC,GACtB,kBACA,CAACuC,EAAWC,EAAYnmB,IAAU,CAChC,MAAMmB,EAAK,OAAO+kB,GAAc,SAAWvP,GAAU,KAAO,OAASA,EAAO,SAAS,cAAcuP,CAAS,EAAIpF,GAAaoF,CAAS,EACtI,GAAI,CAAC/kB,EACH,OACF,IAAIgC,EACJ,GAAIyiB,EAAmB,CACrBziB,EAAQwT,EAAO,SAAS,cAAc,OAAO,EAC7C,MAAMyP,EAAc,8KACpBjjB,EAAM,YAAY,SAAS,eAAeijB,CAAW,CAAC,EACtDzP,EAAO,SAAS,KAAK,YAAYxT,CAAK,CACvC,CACD,GAAIgjB,IAAe,QAAS,CAC1B,MAAME,EAAUrmB,EAAM,MAAM,KAAK,EACjC,OAAO,OAAO6lB,CAAK,EAAE,QAAStd,IAAOA,GAAK,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,QAAS9D,GAAM,CACrF4hB,EAAQ,SAAS5hB,CAAC,EACpBtD,EAAG,UAAU,IAAIsD,CAAC,EAElBtD,EAAG,UAAU,OAAOsD,CAAC,CACjC,CAAS,CACT,MACQtD,EAAG,aAAaglB,EAAYnmB,CAAK,EAE/B4lB,IACFjP,EAAO,iBAAiBxT,CAAK,EAAE,QAC/B,SAAS,KAAK,YAAYA,CAAK,EAElC,CACL,EACE,SAASmjB,EAAiBC,EAAM,CAC9B,IAAI3I,EACJqI,EAAgBjkB,EAAU4Z,GAAYgC,EAAKiI,EAAMU,CAAI,IAAM,KAAO3I,EAAK2I,CAAI,CAC5E,CACD,SAASC,EAAUD,EAAM,CACnBxlB,EAAQ,UACVA,EAAQ,UAAUwlB,EAAMD,CAAgB,EAExCA,EAAiBC,CAAI,CACxB,CACDpL,QAAMrS,EAAO0d,EAAW,CAAE,MAAO,OAAQ,UAAW,EAAI,CAAE,EAC1D5G,GAAa,IAAM4G,EAAU1d,EAAM,KAAK,CAAC,EACzC,MAAM2d,EAAO3M,EAAAA,SAAS,CACpB,KAAM,CACJ,OAAO6L,EAAWK,EAAM,MAAQld,EAAM,KACvC,EACD,IAAIrE,EAAG,CACLuhB,EAAM,MAAQvhB,CACf,CACL,CAAG,EACD,GAAI,CACF,OAAO,OAAO,OAAOgiB,EAAM,CAAE,MAAAT,EAAO,OAAAD,EAAQ,MAAAjd,CAAK,CAAE,CACpD,MAAW,CACV,OAAO2d,CACR,CACH,CA6zBA,SAASC,GAAgBvlB,EAAIJ,EAAU,GAAI,CACzC,KAAM,CACJ,WAAA4lB,EAAa,EACb,WAAAC,EAAa,EACb,OAAAjQ,EAASsK,EACV,EAAGlgB,EACE8lB,EAAYpM,MAAI,EAAK,EAC3B,IAAI6D,EACJ,MAAMwI,EAAUC,GAAa,CAC3B,MAAMC,EAAQD,EAAWJ,EAAaC,EAClCtI,IACF,aAAaA,CAAK,EAClBA,EAAQ,QAEN0I,EACF1I,EAAQ,WAAW,IAAMuI,EAAU,MAAQE,EAAUC,CAAK,EAE1DH,EAAU,MAAQE,CACxB,EACE,OAAKpQ,IAELuK,GAAiB/f,EAAI,aAAc,IAAM2lB,EAAO,EAAI,EAAG,CAAE,QAAS,EAAI,CAAE,EACxE5F,GAAiB/f,EAAI,aAAc,IAAM2lB,EAAO,EAAK,EAAG,CAAE,QAAS,EAAI,CAAE,GAClED,CACT,CA8uBA,SAASI,GAAS9F,EAAQpgB,EAAU,GAAI,CACtC,KAAM,CAAE,aAAAykB,EAAe,GAAO,aAAA0B,EAAe,EAAK,EAAKnmB,EACjDomB,EAAe1M,MAAI,EAAK,EACxB2M,EAAgBtN,EAAQ,SAAC,IAAMgH,GAAaK,CAAM,CAAC,EACzDD,GAAiBkG,EAAe,QAAUzjB,GAAU,CAClD,IAAIia,EAAIyJ,GACJ,CAACH,IAAkBG,GAAMzJ,EAAKja,EAAM,QAAQ,UAAY,MAAgB0jB,EAAG,KAAKzJ,EAAI,gBAAgB,KACtGuJ,EAAa,MAAQ,GAC3B,CAAG,EACDjG,GAAiBkG,EAAe,OAAQ,IAAMD,EAAa,MAAQ,EAAK,EACxE,MAAMG,EAAUxN,EAAAA,SAAS,CACvB,IAAK,IAAMqN,EAAa,MACxB,IAAInnB,EAAO,CACT,IAAI4d,EAAIyJ,EACJ,CAACrnB,GAASmnB,EAAa,OACxBvJ,EAAKwJ,EAAc,QAAU,MAAgBxJ,EAAG,OAC1C5d,GAAS,CAACmnB,EAAa,SAC7BE,EAAKD,EAAc,QAAU,MAAgBC,EAAG,QACpD,CACL,CAAG,EACDlM,OAAAA,EAAK,MACHiM,EACA,IAAM,CACJE,EAAQ,MAAQ9B,CACjB,EACD,CAAE,UAAW,GAAM,MAAO,MAAQ,CACtC,EACS,CAAE,QAAA8B,CAAO,CAClB,CAsiBA,SAASC,GAAepmB,EAAI,CAC1B,OAAI,OAAO,OAAW,KAAeA,aAAc,OAC1CA,EAAG,SAAS,gBACjB,OAAO,SAAa,KAAeA,aAAc,SAC5CA,EAAG,gBACLA,CACT,CAkdA,MAAMqmB,GAA4B,CAChC,KAAO7jB,GAAU,CAACA,EAAM,MAAOA,EAAM,KAAK,EAC1C,OAASA,GAAU,CAACA,EAAM,QAASA,EAAM,OAAO,EAChD,OAASA,GAAU,CAACA,EAAM,QAASA,EAAM,OAAO,EAChD,SAAWA,GAAUA,aAAiB,MAAQ,KAAO,CAACA,EAAM,UAAWA,EAAM,SAAS,CACxF,EACA,SAAS8jB,GAAS1mB,EAAU,GAAI,CAC9B,KAAM,CACJ,KAAA6jB,EAAO,OACP,MAAA8C,EAAQ,GACR,iBAAAC,EAAmB,GACnB,aAAAnC,EAAe,CAAE,EAAG,EAAG,EAAG,CAAG,EAC7B,OAAA7O,EAASsK,GACT,OAAAE,EAASxK,EACT,OAAAjC,EAAS,GACT,YAAAjR,CACD,EAAG1C,EACJ,IAAI6mB,EAAkB,KACtB,MAAM1f,EAAIuS,EAAAA,IAAI+K,EAAa,CAAC,EACtBrd,EAAIsS,EAAAA,IAAI+K,EAAa,CAAC,EACtBqC,EAAapN,MAAI,IAAI,EACrBqN,EAAY,OAAOlD,GAAS,WAAaA,EAAO4C,GAA0B5C,CAAI,EAC9EmD,EAAgBpkB,GAAU,CAC9B,MAAMvD,EAAS0nB,EAAUnkB,CAAK,EAC9BikB,EAAkBjkB,EACdvD,IACF,CAAC8H,EAAE,MAAOC,EAAE,KAAK,EAAI/H,EACrBynB,EAAW,MAAQ,QAEzB,EACQG,EAAgBrkB,GAAU,CAC9B,GAAIA,EAAM,QAAQ,OAAS,EAAG,CAC5B,MAAMvD,EAAS0nB,EAAUnkB,EAAM,QAAQ,CAAC,CAAC,EACrCvD,IACF,CAAC8H,EAAE,MAAOC,EAAE,KAAK,EAAI/H,EACrBynB,EAAW,MAAQ,QAEtB,CACL,EACQI,EAAgB,IAAM,CAC1B,GAAI,CAACL,GAAmB,CAACjR,EACvB,OACF,MAAMuR,EAAMJ,EAAUF,CAAe,EACjCA,aAA2B,YAAcM,IAC3ChgB,EAAE,MAAQggB,EAAI,CAAC,EAAIvR,EAAO,QAC1BxO,EAAE,MAAQ+f,EAAI,CAAC,EAAIvR,EAAO,QAEhC,EACQ/N,EAAQ,IAAM,CAClBV,EAAE,MAAQsd,EAAa,EACvBrd,EAAE,MAAQqd,EAAa,CAC3B,EACQ2C,EAAsB1kB,EAAeE,GAAUF,EAAY,IAAMskB,EAAapkB,CAAK,EAAG,CAAE,CAAA,EAAKA,GAAUokB,EAAapkB,CAAK,EACzHykB,EAAsB3kB,EAAeE,GAAUF,EAAY,IAAMukB,EAAarkB,CAAK,EAAG,CAAE,CAAA,EAAKA,GAAUqkB,EAAarkB,CAAK,EACzH0kB,EAAuB5kB,EAAc,IAAMA,EAAY,IAAMwkB,EAAa,EAAI,CAAE,CAAA,EAAI,IAAMA,IAChG,GAAI9G,EAAQ,CACV,MAAMmH,EAAkB,CAAE,QAAS,IACnCpH,GAAiBC,EAAQ,CAAC,YAAa,UAAU,EAAGgH,EAAqBG,CAAe,EACpFZ,GAAS9C,IAAS,aACpB1D,GAAiBC,EAAQ,CAAC,aAAc,WAAW,EAAGiH,EAAqBE,CAAe,EACtFX,GACFzG,GAAiBC,EAAQ,WAAYvY,EAAO0f,CAAe,GAE3D5T,GAAUkQ,IAAS,QACrB1D,GAAiBvK,EAAQ,SAAU0R,EAAsB,CAAE,QAAS,EAAI,CAAE,CAC7E,CACD,MAAO,CACL,EAAAngB,EACA,EAAAC,EACA,WAAA0f,CACJ,CACA,CAEA,SAASU,GAAkBpH,EAAQpgB,EAAU,GAAI,CAC/C,KAAM,CACJ,cAAAynB,EAAgB,GAChB,OAAA7R,EAASsK,EACV,EAAGlgB,EACE6jB,EAAO7jB,EAAQ,MAAQ,OACvB,CAAE,EAAAmH,EAAG,EAAAC,EAAG,WAAA0f,CAAU,EAAKJ,GAAS1mB,CAAO,EACvC0nB,EAAYhO,EAAG,IAAC0G,IAA0BxK,GAAU,KAAO,OAASA,EAAO,SAAS,KAAI,EACxF+R,EAAWjO,MAAI,CAAC,EAChBkO,EAAWlO,MAAI,CAAC,EAChBmO,EAAmBnO,MAAI,CAAC,EACxBoO,EAAmBpO,MAAI,CAAC,EACxBqO,EAAgBrO,MAAI,CAAC,EACrBsO,EAAetO,MAAI,CAAC,EACpBuO,EAAYvO,MAAI,EAAI,EAC1B,IAAIkH,EAAO,IAAM,CACnB,EACE,OAAIhL,IACFgL,EAAOxG,EAAK,MACV,CAACsN,EAAWvgB,EAAGC,CAAC,EAChB,IAAM,CACJ,MAAMhH,EAAK2f,GAAa2H,CAAS,EACjC,GAAI,CAACtnB,EACH,OACF,KAAM,CACJ,KAAAwN,EACA,IAAAF,EACA,MAAAI,EACA,OAAAC,CACV,EAAY3N,EAAG,wBACPynB,EAAiB,MAAQja,GAAQiW,IAAS,OAASjO,EAAO,YAAc,GACxEkS,EAAiB,MAAQpa,GAAOmW,IAAS,OAASjO,EAAO,YAAc,GACvEmS,EAAc,MAAQha,EACtBia,EAAa,MAAQla,EACrB,MAAMoa,EAAM/gB,EAAE,MAAQ0gB,EAAiB,MACjCM,EAAM/gB,EAAE,MAAQ0gB,EAAiB,MACvCG,EAAU,MAAQna,IAAU,GAAKC,IAAW,GAAKma,EAAM,GAAKC,EAAM,GAAKD,EAAMpa,GAASqa,EAAMpa,GACxF0Z,GAAiB,CAACQ,EAAU,SAC9BN,EAAS,MAAQO,EACjBN,EAAS,MAAQO,EAEpB,EACD,CAAE,UAAW,EAAM,CACzB,EACIhI,GAAiB,SAAU,aAAc,IAAM,CAC7C8H,EAAU,MAAQ,EACxB,CAAK,GAEI,CACL,EAAA9gB,EACA,EAAAC,EACA,WAAA0f,EACA,SAAAa,EACA,SAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,UAAAC,EACA,KAAArH,CACJ,CACA,CAosBA,SAASwH,GAAoBC,EAAK,CAChC,MAAMjmB,EAAQ,OAAO,iBAAiBimB,CAAG,EACzC,GAAIjmB,EAAM,YAAc,UAAYA,EAAM,YAAc,UAAYA,EAAM,YAAc,QAAUimB,EAAI,YAAcA,EAAI,aAAejmB,EAAM,YAAc,QAAUimB,EAAI,aAAeA,EAAI,aAC1L,MAAO,GACF,CACL,MAAMC,EAASD,EAAI,WACnB,MAAI,CAACC,GAAUA,EAAO,UAAY,OACzB,GACFF,GAAoBE,CAAM,CAClC,CACH,CACA,SAASC,GAAeC,EAAU,CAChC,MAAM7nB,EAAI6nB,GAAY,OAAO,MACvBC,EAAU9nB,EAAE,OAClB,OAAIynB,GAAoBK,CAAO,EACtB,GACL9nB,EAAE,QAAQ,OAAS,EACd,IACLA,EAAE,gBACJA,EAAE,eAAc,EACX,GACT,CACA,MAAM+nB,GAAoC,IAAI,QAC9C,SAASC,GAAcxmB,EAASymB,EAAe,GAAO,CACpD,MAAMC,EAAWnP,MAAIkP,CAAY,EACjC,IAAIE,EAAwB,KACxBC,EACJ3O,EAAAA,MAAMgE,GAAMjc,CAAO,EAAI/B,GAAO,CAC5B,MAAMggB,EAASoG,GAAenK,GAAQjc,CAAE,CAAC,EACzC,GAAIggB,EAAQ,CACV,MAAMiI,EAAMjI,EACPsI,GAAkB,IAAIL,CAAG,GAC5BK,GAAkB,IAAIL,EAAKU,CAAe,EACxCF,EAAS,QACXR,EAAI,MAAM,SAAW,SACxB,CACL,EAAK,CACD,UAAW,EACf,CAAG,EACD,MAAMW,EAAO,IAAM,CACjB,MAAM5oB,EAAKomB,GAAenK,GAAQla,CAAO,CAAC,EACtC,CAAC/B,GAAMyoB,EAAS,QAEhBlM,KACFmM,EAAwB3I,GACtB/f,EACA,YACCO,GAAM,CACL4nB,GAAe5nB,CAAC,CACjB,EACD,CAAE,QAAS,EAAO,CAC1B,GAEIP,EAAG,MAAM,SAAW,SACpByoB,EAAS,MAAQ,GACrB,EACQI,EAAS,IAAM,CACnB,IAAIpM,EACJ,MAAMzc,EAAKomB,GAAenK,GAAQla,CAAO,CAAC,EACtC,CAAC/B,GAAM,CAACyoB,EAAS,QAErBlM,KAAUmM,GAAyB,MAAgBA,EAAuB,GAC1E1oB,EAAG,MAAM,UAAYyc,EAAK6L,GAAkB,IAAItoB,CAAE,IAAM,KAAOyc,EAAK,GACpE6L,GAAkB,OAAOtoB,CAAE,EAC3ByoB,EAAS,MAAQ,GACrB,EACE,OAAAlN,GAAkBsN,CAAM,EACjBlQ,WAAS,CACd,KAAM,CACJ,OAAO8P,EAAS,KACjB,EACD,IAAInlB,EAAG,CACDA,EACFslB,IAEAC,GACH,CACL,CAAG,CACH,CAmbA,SAASC,GAAS9I,EAAQpgB,EAAU,GAAI,CACtC,KAAM,CACJ,UAAAwW,EAAY,GACZ,QAAA2S,EACA,WAAAC,EACA,aAAAC,EACA,QAAA1H,EAAU,GACV,OAAA/L,EAASsK,EACV,EAAGlgB,EACEspB,EAAcC,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACrCC,EAAYD,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,CAAC,CAAE,EACnCE,EAAQ1Q,EAAAA,SAAS,IAAMuQ,EAAY,EAAIE,EAAU,CAAC,EAClDE,EAAQ3Q,EAAAA,SAAS,IAAMuQ,EAAY,EAAIE,EAAU,CAAC,EAClD,CAAE,IAAAlmB,EAAK,IAAAqmB,CAAK,EAAG,KACfC,EAAsB7Q,EAAQ,SAAC,IAAMzV,EAAIqmB,EAAIF,EAAM,KAAK,EAAGE,EAAID,EAAM,KAAK,CAAC,GAAKlT,CAAS,EACzFqT,EAAYnQ,MAAI,EAAK,EACrBnc,EAAYwb,EAAAA,SAAS,IACpB6Q,EAAoB,MAErBD,EAAIF,EAAM,KAAK,EAAIE,EAAID,EAAM,KAAK,EAC7BD,EAAM,MAAQ,EAAI,OAAS,QAE3BC,EAAM,MAAQ,EAAI,KAAO,OAJzB,MAMV,EACKI,EAAuBnpB,GAAM,CAACA,EAAE,QAAQ,CAAC,EAAE,QAASA,EAAE,QAAQ,CAAC,EAAE,OAAO,EACxEopB,EAAoB,CAAC5iB,EAAGC,IAAM,CAClCkiB,EAAY,EAAIniB,EAChBmiB,EAAY,EAAIliB,CACpB,EACQ4iB,EAAkB,CAAC7iB,EAAGC,IAAM,CAChCoiB,EAAU,EAAIriB,EACdqiB,EAAU,EAAIpiB,CAClB,EACE,IAAImgB,EACJ,MAAM0C,EAA0BC,GAAyBtU,GAAU,KAAO,OAASA,EAAO,QAAQ,EAC7F+L,EAGH4F,EAAkB0C,EAA0B,CAAE,QAAS,EAAI,EAAK,CAAE,QAAS,IAF3E1C,EAAkB0C,EAA0B,CAAE,QAAS,GAAO,QAAS,IAAS,CAAE,QAAS,IAG7F,MAAME,EAAcxpB,GAAM,CACpBkpB,EAAU,QACZT,GAAc,MAAgBA,EAAWzoB,EAAGpD,EAAU,KAAK,GAC7DssB,EAAU,MAAQ,EACtB,EACQO,EAAQ,CACZjK,GAAiBC,EAAQ,aAAezf,GAAM,CAC5C,GAAIA,EAAE,QAAQ,SAAW,EACvB,OACE4mB,EAAgB,SAAW,CAACA,EAAgB,SAC9C5mB,EAAE,eAAc,EAClB,KAAM,CAACwG,EAAGC,CAAC,EAAI0iB,EAAoBnpB,CAAC,EACpCopB,EAAkB5iB,EAAGC,CAAC,EACtB4iB,EAAgB7iB,EAAGC,CAAC,EACpBiiB,GAAgB,MAAgBA,EAAa1oB,CAAC,CAC/C,EAAE4mB,CAAe,EAClBpH,GAAiBC,EAAQ,YAAczf,GAAM,CAC3C,GAAIA,EAAE,QAAQ,SAAW,EACvB,OACF,KAAM,CAACwG,EAAGC,CAAC,EAAI0iB,EAAoBnpB,CAAC,EACpCqpB,EAAgB7iB,EAAGC,CAAC,EAChB,CAACyiB,EAAU,OAASD,EAAoB,QAC1CC,EAAU,MAAQ,IAChBA,EAAU,QACZV,GAAW,MAAgBA,EAAQxoB,CAAC,EACvC,EAAE4mB,CAAe,EAClBpH,GAAiBC,EAAQ,CAAC,WAAY,aAAa,EAAG+J,EAAY5C,CAAe,CACrF,EAEE,MAAO,CACL,wBAAA0C,EACA,UAAAJ,EACA,UAAAtsB,EACA,YAAA+rB,EACA,UAAAE,EACA,QAASC,EACT,QAASC,EACT,KATW,IAAMU,EAAM,QAASC,GAAMA,EAAC,CAAE,CAU7C,CACA,CACA,SAASH,GAAyBI,EAAU,CAC1C,GAAI,CAACA,EACH,MAAO,GACT,IAAIC,EAAkB,GACtB,MAAMC,EAAe,CACnB,IAAI,SAAU,CACZ,OAAAD,EAAkB,GACX,EACR,CACL,EACE,OAAAD,EAAS,iBAAiB,IAAK5N,GAAM8N,CAAY,EACjDF,EAAS,oBAAoB,IAAK5N,EAAI,EAC/B6N,CACT,CAwlBA,SAASE,GAAUC,EAAOjJ,EAAKkJ,EAAM3qB,EAAU,CAAA,EAAI,CAC9C,IAAC6c,EAAIyJ,EAAIsE,EACZ,KAAM,CACJ,MAAAC,EAAQ,GACR,QAAAlJ,EAAU,GACV,UAAAD,EACA,KAAA2B,EAAO,GACP,aAAAyH,EACA,WAAAC,CACD,EAAG/qB,EACEgrB,EAAKjM,EAAAA,qBACLkM,EAAQN,IAASK,GAAM,KAAO,OAASA,EAAG,SAAWnO,EAAKmO,GAAM,KAAO,OAASA,EAAG,QAAU,KAAO,OAASnO,EAAG,KAAKmO,CAAE,MAAQJ,GAAMtE,EAAK0E,GAAM,KAAO,OAASA,EAAG,QAAU,KAAO,OAAS1E,EAAG,QAAU,KAAO,OAASsE,EAAG,KAAKI,GAAM,KAAO,OAASA,EAAG,KAAK,GACtQ,IAAIpoB,EAAQ8e,EACPD,IAODA,EAAM,cAGV7e,EAAQA,GAAS,UAAU6e,EAAI,SAAU,CAAA,GACzC,MAAMyJ,EAAW9sB,GAASysB,EAAc,OAAOA,GAAU,WAAaA,EAAMzsB,CAAG,EAAImkB,GAAYnkB,CAAG,EAAhEA,EAC5B+sB,EAAW,IAAM3O,GAAMkO,EAAMjJ,CAAG,CAAC,EAAIyJ,EAAQR,EAAMjJ,CAAG,CAAC,EAAIqJ,EAC3DM,EAAensB,GAAU,CACzB8rB,EACEA,EAAW9rB,CAAK,GAClBgsB,EAAMroB,EAAO3D,CAAK,EAEpBgsB,EAAMroB,EAAO3D,CAAK,CAExB,EACE,GAAI0iB,EAAS,CACX,MAAM8C,EAAe0G,IACfE,EAAQ3R,MAAI+K,CAAY,EAC9B,IAAI6G,EAAa,GACjBlR,OAAAA,EAAK,MACH,IAAMsQ,EAAMjJ,CAAG,EACd,GAAM,CACA6J,IACHA,EAAa,GACbD,EAAM,MAAQH,EAAQ,CAAC,EACvBjM,WAAS,IAAMqM,EAAa,EAAK,EAEpC,CACP,EACIlR,EAAK,MACHiR,EACC,GAAM,CACD,CAACC,IAAe,IAAMZ,EAAMjJ,CAAG,GAAK4B,IACtC+H,EAAY,CAAC,CAChB,EACD,CAAE,KAAA/H,CAAM,CACd,EACWgI,CACX,KACI,QAAOtS,WAAS,CACd,KAAM,CACJ,OAAOoS,EAAQ,CAChB,EACD,IAAIlsB,EAAO,CACTmsB,EAAYnsB,CAAK,CAClB,CACP,CAAK,CAEL,CC/2MA,MAAAssB,GAAgBC,GACdzS,EAAAA,SAAS,IAAM,CACP,MAAA9Z,EAAQod,UAAQmP,CAAK,EAC3B,OAAQvsB,EAAa,mBAAmBA,CAAK,GAA7B,EAClB,CAAC,ECJGwsB,GAAgB1oB,GACpB,OAAOA,GAAU,WAAaA,IAAU,IAAMA,IAAU,QAAUA,IAAU,QAK9E2oB,EAAmBtrB,GACjB2Y,EAAAA,SAAS,IAAM,CACP,MAAA9Z,EAAQod,UAAQjc,CAAE,EACxB,OACGqrB,GAAaxsB,CAAK,EAEf,OAAOA,GAAU,UACjBA,EACAA,IAAU,IAAMA,IAAU,OAH1BA,CAOR,CAAC,ECjBH0sB,GAAe,CACbC,EACA7jB,IACG,CACG,MAAA8jB,EAAsBH,EAAcE,CAAW,EAC/CE,EAAgB1N,QAAMrW,CAAK,EAE1B,OAAAgR,EAAA,SAAS,IACd8S,EAAoB,QAAU,GAC1B,OACA,OAAOA,EAAoB,OAAU,SACrCA,EAAoB,MACpBC,EAAc,QAAU,GACxB,OACAD,EAAoB,QAAU,GAC9B,QACA,MAAA,CAER,ECnBAE,GAAe,CACbrB,EACAsB,IACG,CACG,MAAAC,EAAoB7N,QAAM4N,CAAS,EACnCE,EAAgB9N,QAAMsM,CAAK,EAE3ByB,EAAe/N,EAAAA,MAAM,IAAMgO,GAAOF,EAAc,KAAK,CAAC,EACtDG,EAAoBtT,EAAA,SAAS,IACjCoT,EAAa,MACTG,GACEJ,EAAc,MACdD,EAAkB,OAAS,CACzB,SACA,cACA,SACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,uBACF,CAAA,EAEF,CAAC,CAAA,EAGA,MAAA,CAAC,aAAAE,EAAc,kBAAAE,EACxB,ECnCeE,GAAA3Q,GAAkB,IAAM,CAC/B,MAAA4Q,EAAQjD,WAA2B,CAAA,CAAE,EAKpC,MAAA,CAAC,MAAAiD,EAAO,MAJD,IAAY,CAClBA,EAAA,OAAO,EAAGA,EAAM,MAAM,CAAA,EAIhC,CAAC,ECDDhI,GAAe,CAACiI,EAAyB,CAAA,IAAO,CACxC,MAAAC,EAAUD,EAAK,SAAW,GAC1B5R,EAAY,gBACZ5Z,EAAW,OACjB,OAAOujB,GAAa,CAClB,UAAA3J,EACA,SAAA5Z,EACA,WACEyrB,IAAY,GACR,YAAYD,EAAK,WAAa5R,CAAS,IAAI4R,EAAK,UAAYxrB,CAAQ,GACpE,KACN,GAAGwrB,CAAA,CACJ,CACH,ECpBAE,GAAgBC,GACd7T,EAAAA,SAAS,IAAM,CACP,MAAA2R,EAAQrO,UAAQuQ,CAAG,EAClB,MAAA,CACL,CAAC,WAAWlC,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAChD,CAAC,QAAQA,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,MAAQA,EAAM,UAAY,KAC/E,CAAC,MAAMA,EAAM,SAAS,EAAE,EAAGA,EAAM,YAAc,MAAQA,EAAM,UAAY,IAAA,CAE7E,CAAC,ECRHmC,GAAgB5tB,GACd8Z,EAAAA,SAAS,IAAM,CACP,MAAA+T,EAAgBzQ,UAAQpd,CAAK,EAC5B,MAAA,CACL,UAAW6tB,IAAkB,GAC7B,CAAC,aAAaA,CAAa,EAAE,EAAG,OAAOA,GAAkB,QAAA,CAE7D,CAAC,ECaHC,GAAe,CACb5tB,EACAggB,EAAqCzF,EAAAA,IAAI,GAAI,EAC7CsT,EAAqC,KACjB,CACpB,MAAMC,EAAiB9O,EAAA,SAASC,QAAMjf,CAAM,CAAC,EAEvC+tB,EAAmB/O,EAAA,SAASC,QAAMe,CAAQ,CAAC,EAE3CgO,EAAWzT,MAAI,EAAK,EAEpB0T,EAAkB1T,MAAI,CAAC,EAEvB2T,EAAoBjP,QAAM,IAAM,KAAK,KAAK6O,EAAe,MAAQC,EAAiB,KAAK,CAAC,EAExFjuB,EAAQmf,EAAA,MAAM,IAClBJ,EAAS,OAASmP,EAAS,MACvB,KAAK,MAAMF,EAAe,MAAQG,EAAgB,MAAQF,EAAiB,KAAK,EAChF,CAAA,EAGA,CAAC,MAAAjP,EAAO,OAAAC,EAAQ,SAAAF,CAAY,EAAAkB,GAChC,IAAM,CACYkO,EAAA,MAAQA,EAAgB,MAAQ,CAClD,EACAjO,EACA6N,CAAA,EAGIM,EAAU,IAAM,CACpBH,EAAS,MAAQ,GACjBC,EAAgB,MAAQ,EACjBlP,GAAA,EAGH0C,EAAO,IAAM,CACjBuM,EAAS,MAAQ,GACjBC,EAAgB,MAAQC,EAAkB,KAAA,EAG5C/K,EAAAA,YAAY,IAAM,CACZ8K,EAAgB,MAAQC,EAAkB,QAC5CD,EAAgB,MAAQC,EAAkB,OAExCD,EAAgB,QAAUC,EAAkB,OACxCpP,GACR,CACD,EAED7D,EAAAA,MAAM,CAAC8S,EAAkBD,CAAc,EAAG,IAAM,CACzCrM,IACG0M,GAAA,CACT,EAED,MAAMC,EAAU,IAAM,CAChBvP,EAAS,QAAU,KACvBmP,EAAS,MAAQ,GACXlP,IAAA,EAGFuP,EAAW,IAAM,CACjBJ,EAAgB,QAAUC,EAAkB,QAChDF,EAAS,MAAQ,GACVjP,IAAA,EAGF,MAAA,CACL,SAAUC,WAASH,CAAQ,EAC3B,SAAUG,WAASgP,CAAQ,EAC3B,QAAAG,EACA,KAAA1M,EACA,MAAO2M,EACP,OAAQC,EACR,MAAAvuB,CAAA,CAEJ,EChGAwuB,GAAgBxuB,GACd8Z,EAAAA,SAAS,IAAM,CACP,MAAA+T,EAAgBzQ,UAAQpd,CAAK,EAEnC,OAAO6tB,IAAkB,GAAO,WAAaA,IAAkB,GAAQ,aAAe,IACxF,CAAC,ECMGY,GAAclB,GAClBzT,EAAAA,SAAS,IAAM,CACP,MAAA4U,EAAgBtR,UAAQmQ,CAAK,EAC5B,MAAA,CACL,aAAcmB,EAAc,QAAU,IAASA,EAAc,SAAW,GACxE,oBAAqBA,EAAc,SAAW,GAC9C,cAAeA,EAAc,SAAW,GACxC,CAAC,gBAAgBA,EAAc,IAAI,EAAE,EACnCA,EAAc,OAAS,QACvBA,EAAc,OAAS,MACvBA,EAAc,SAAW,EAAA,CAE/B,CAAC,EAQGC,GAAmBpB,GAAoD,CACrE,MAAAmB,EAAgBvP,QAAMoO,CAAK,EAE3BqB,EAAaJ,GAAc,IAAME,EAAc,MAAM,OAAS,IAAI,EAExE,OAAO5U,WAAS,IAAM,CACpB8U,EAAW,MACX,CACE,mBACEF,EAAc,MAAM,QAAU,IAASA,EAAc,MAAM,SAAW,GACxE,YAAaA,EAAc,MAAM,SAAW,EAC9C,CAAA,CACD,CACH,EASMG,GAAmBtB,GACvBzT,EAAAA,SAAS,IAAM,CACP,MAAA4U,EAAgBtR,UAAQmQ,CAAK,EAC5B,MAAA,CACL,mBAAoBmB,EAAc,QAAU,IAASA,EAAc,SAAW,GAC9E,IAAOA,EAAc,SAAW,GAChC,CAAC,OAAOA,EAAc,aAAa,EAAE,EACnCA,EAAc,SAAW,IACzBA,EAAc,gBAAkB,QAChCA,EAAc,gBAAkB,KAClC,CAAC,OAAOA,EAAc,IAAI,EAAE,EAC1BA,EAAc,QAAUA,EAAc,MAAQA,EAAc,OAAS,IAAA,CAE3E,CAAC,EAQGI,GAAgBvB,GAAiD,CAC/D,MAAAmB,EAAgBvP,QAAMoO,CAAK,EAC3BwB,EAAsBrC,GAC1B,IAAMgC,EAAc,MAAM,YAC1B,IAAMA,EAAc,MAAM,KAAA,EAE5B,OAAO5U,WAAS,KAAO,CACrB,eAAgBiV,EAAoB,MACpC,gBAAiBL,EAAc,MAAM,WAAa,GAAO,GAAO,MAChE,EAAA,CACJ,EASMM,GAAmBzB,GACvBzT,EAAAA,SAAS,IAAM,CACP,MAAA4U,EAAgBtR,UAAQmQ,CAAK,EAC5B,MAAA,CACL,gBAAiBmB,EAAc,YAAc,GAC7C,YAAaA,EAAc,UAAY,IAAQA,EAAc,UAAY,GACzE,qBAAsBA,EAAc,UAAY,IAAQA,EAAc,UAAY,GAClF,CAAC,aAAaA,EAAc,IAAI,EAAE,EAAGA,EAAc,OAAS,MAAA,CAEhE,CAAC,ECrGHO,GAAe,CAAC3sB,EAA2C4sB,IACzDpV,WAAS,IAAMsD,UAAQ9a,CAAE,GAAK6sB,GAAMD,CAAM,CAAC,EC4B7CE,GAAe,CACb3D,EAEAC,IAOG,CACG,MAAA5nB,EAAQ2W,MAA6B,IAAI,EAEzC4U,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,OAAO,EAC1C8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDgE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5CiE,EAAuBjD,EAAc,IAAMhB,EAAM,aAAa,EAC9DkE,EAAgBlD,EAAc,IAAMhB,EAAM,MAAM,EAChDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9CoE,EAAcpD,EAAc,IAAMhB,EAAM,IAAI,EAC5CqE,EAAiBrP,GAAY,IAAMgL,EAAM,UAAY,CAAC,EACtDsE,EAAwBtP,GAAY,IAAMgL,EAAM,iBAAmB,GAAG,EAEtEuE,EAA2B1Q,GAC9Btf,GAAuC,CACtCqvB,EAAW,MAAQrvB,CACrB,EACA,IAAOyvB,EAAY,QAAU,GAAO,EAAIK,EAAe,MACvD,CAAC,QAAS,IAAOL,EAAY,QAAU,GAAO,IAAMM,EAAsB,KAAM,CAAA,EAG5EE,EAAmB,CAACjwB,EAAoCkwB,EAAQ,KAAU,CAC1ET,EAAY,QAAU,IAAQS,IAAU,IAC5CF,EAAyBhwB,CAAK,CAAA,EAG1B,CAAC,QAAAsnB,CAAA,EAAWL,GAASnjB,EAAO,CAChC,aAAcyrB,EAAiB,KAAA,CAChC,EAEKY,EAAe,CAACnwB,EAAeowB,EAAYF,EAAQ,KACnDzE,EAAM,YAAc,SAAc,CAACiE,EAAqB,OAASQ,GAC5DzE,EAAM,UAAUzrB,EAAOowB,CAAG,EAE5BpwB,EAGHqwB,EAAkBrwB,GAClB6vB,EAAY,MAAc7vB,EAAM,OAChC2vB,EAAc,MAAc,OAAO,WAAW3vB,CAAK,EAEhDA,EAGT+f,EAAAA,UAAU,IAAM,OACVjc,EAAM,QACRA,EAAM,MAAM,QAAQ8Z,EAAAyR,EAAW,QAAX,YAAAzR,EAAkB,aAAc,GACtD,CACD,EAED0S,EAAAA,YAAY,IAAM,CAChBtQ,EAAAA,SAAS,IAAM,CACTuP,EAAiB,QACnBjI,EAAQ,MAAQ,GAClB,CACD,CAAA,CACF,EAED,MAAMyH,EAAsBrC,GAAe,IAAMjB,EAAM,YAAamE,CAAY,EA0DzE,MAAA,CACL,MAAA9rB,EACA,WAAAwrB,EACA,oBAAAP,EACA,QA5DeqB,GAAe,CACxB,KAAA,CAAC,MAAApwB,CAAK,EAAIowB,EAAI,OACdG,EAAiBJ,EAAanwB,EAAOowB,CAAG,EAC9C,GAAIA,EAAI,iBAAkB,CACxBA,EAAI,eAAe,EACnB,MACF,CAEM,MAAAI,EAAYH,EAAeE,CAAc,EAE/CN,EAAiBO,CAAS,EAE1B9E,EAAK,QAAS6E,CAAc,CAAA,EAiD5B,SA9CgBH,GAAe,CACzB,KAAA,CAAC,MAAApwB,CAAK,EAAIowB,EAAI,OACdG,EAAiBJ,EAAanwB,EAAOowB,CAAG,EAC9C,GAAIA,EAAI,iBAAkB,CACxBA,EAAI,eAAe,EACnB,MACF,CAEM,MAAAI,EAAYH,EAAeE,CAAc,EAC3ClB,EAAW,QAAUmB,GACvBP,EAAiBM,EAAgB,EAAI,EAGvC7E,EAAK,SAAU6E,CAAc,CAAA,EAkC7B,OA/BcH,GAAoB,CAElC,GADA1E,EAAK,OAAQ0E,CAAG,EACZ,CAACX,EAAY,OAAS,CAACC,EAAqB,MAAO,OAEjD,KAAA,CAAC,MAAA1vB,CAAK,EAAIowB,EAAI,OACdG,EAAiBJ,EAAanwB,EAAOowB,EAAK,EAAI,EAE9CI,EAAYH,EAAeE,CAAc,EAC3ClB,EAAW,QAAUmB,GACvBP,EAAiBM,EAAgB,EAAI,CACvC,EAsBA,MAnBY,IAAM,CACbf,EAAgB,QACnBlI,EAAQ,MAAQ,GAClB,EAiBA,KAdW,IAAM,CACZkI,EAAgB,QACnBlI,EAAQ,MAAQ,GAClB,CAWA,CAEJ,EC1KMmJ,GAAa,CAAC9C,EAAU+C,IAAsB,CAClD,GAAI,CAAC/C,EAAY,OAAAA,EACjB,GAAI+C,KAAQ/C,EAAK,OAAOA,EAAI+C,CAAI,EAE1B,MAAAC,EAAQD,EAAK,MAAM,GAAG,EAE5B,OAAOD,GAAW9C,EAAIgD,EAAM,CAAC,CAAC,EAAGA,EAAM,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,CAC5D,EAEMC,GAAmB,CAEvBC,EACArO,EAAqB,KACrBsO,EAEArF,IACG,CACH,GAAI,OAAO,UAAU,SAAS,KAAKoF,CAAM,IAAM,kBAAmB,CAChE,MAAM7wB,EAAQywB,GAAWI,EAAQpF,EAAM,UAAU,EAC3CsF,EAAON,GAAWI,EAAQpF,EAAM,SAAS,EACzC1W,EAAO0b,GAAWI,EAAQpF,EAAM,SAAS,EACzCuF,EAAWP,GAAWI,EAAQpF,EAAM,aAAa,EAEjD1qB,EAAU8vB,EAAOpF,EAAM,YAAY,GAAK,KAC9C,OAAI1qB,IAAY,KACP,CACL,MAAO,OAAO0vB,GAAWI,EAAQpF,EAAM,UAAU,GAAKsF,CAAI,EAC1D,QAASE,GAAiBlwB,EAAS+vB,EAAerF,CAAK,CAAA,EAIpD,CACL,MAAO,OAAOzrB,EAAU,IAAcwiB,GAAOuO,EAAO/wB,EACpD,KAAM,OAAO,OAAO+wB,EAAS,IAAcvO,EAAMuO,CAAI,EACrD,KAAAhc,EACA,SAAU,EAAQic,CAAQ,CAE9B,CACO,MAAA,CACL,MAAOxO,GAAOqO,EACd,KAAM,OAAOA,CAAM,EACnB,SAAU,EAAA,CAEd,EAEMI,GAAmB,CAEvBlwB,EACA+vB,EACArF,IAGI,MAAM,QAAQ1qB,CAAO,EAChBA,EAAQ,IAAK8vB,GAAWD,GAAiBC,EAAQ,KAAMC,EAAerF,CAAK,CAAC,EAC1E,OAAO,UAAU,SAAS,KAAK1qB,CAAO,IAAM,mBAE7C,QAAA,KACN,wBAAwB+vB,CAAa,qFAAA,EAGhC,OAAO,KAAK/vB,CAAO,EAAE,IAAKyhB,GAAgB,CAEzC,MAAArhB,EAAUJ,EAAQyhB,CAAG,EAC3B,OAAQ,OAAOrhB,EAAI,CACjB,IAAK,SACI,OAAAyvB,GAAiBzvB,EAAG,KAAM,OAAOA,EAAG,KAAK,EAAG2vB,EAAerF,CAAK,EACzE,QACE,OAAOmF,GAAiBzvB,EAAI,OAAOqhB,CAAG,EAAGsO,EAAerF,CAAK,CACjE,CAAA,CACD,GAGI,GC9DHyF,GAAqB,aAEdC,GAAsBnU,GAAuB,IAAM,CAIxD,MAAAoU,EAA0C1W,aAAW,CAAA,CAAE,EAEvD2W,EAAalS,EAAAA,MAAM,IAAMiS,EAAM,MAAM,MAAM,EAC3CE,EAAYnS,QAAM,IAAMiS,EAAM,MAAMA,EAAM,MAAM,OAAS,CAAC,CAAC,EAE3DG,EAAaC,GAAqC,CACtDJ,EAAM,MAAQ,CAAC,GAAGA,EAAM,MAAOI,CAAK,CAAA,EAEhCC,EAAeD,GAAqC,CAClDJ,EAAA,MAAQA,EAAM,MAAM,OAAQM,GAASA,EAAK,MAAQF,EAAM,GAAG,CAAA,EAM7DG,EAA6CjX,aAAW,CAAA,CAAE,EAI1DkX,EAAgBJ,GAAqC,CACzDG,EAAS,MAAQ,CAAC,GAAGA,EAAS,MAAOH,CAAK,CAAA,EAEtCK,EAAkBL,GAAqC,CAClDG,EAAA,MAAQA,EAAS,MAAM,OAAQD,GAASA,EAAK,MAAQF,EAAM,GAAG,CAAA,EAMnErU,EAAWqU,GAA2C,CAC1DC,EAAYD,CAAK,EACjBK,EAAeL,CAAK,CAAA,EAGhBvL,EAAkBtC,GAAc,kBAAmB,CAAC3hB,EAAU4Z,EAAW5b,IAAU,CACjF,MAAAmB,EACJ,OAAOa,GAAa,SAChB,2BAAQ,SAAS,cAAcA,GAC/B8e,GAAa9e,CAAQ,EACtBb,IAEDya,IAAc,QAChBza,EAAG,UAAU,OAAO+vB,GAAoBlxB,IAAUkxB,EAAkB,EAEjE/vB,EAAA,aAAaya,EAAW5b,CAAK,EAClC,CACD,EAED,OAAA0c,GAAkB,IAAM,CACNuJ,EAAA,OAAQ,QAAS,EAAE,CAAA,CACpC,EAEK9K,QAAAkW,EAAaS,GAAa,CAC9B7L,EAAgB,OAAQ,QAAS6L,EAAW,EAAIZ,GAAqB,EAAE,CAAA,CACxE,EAEM,CACL,SAAAS,EACA,MAAAP,EACA,UAAAE,EACA,WAAAD,EACA,UAAAE,EACA,YAAAE,EACA,aAAAG,EACA,eAAAC,EACA,QAAA1U,CAAA,CAEJ,CAAC,EAEc4U,GAACC,GAA4B,CACpC,KAAA,CAAC,aAAAJ,EAAc,UAAAL,EAAW,YAAAE,EAAa,MAAAL,EAAO,QAAAjU,EAAS,WAAAkU,GAAcF,KAErEc,EAAenS,EAAAA,qBAErB,GAAI,CAACmS,GAAgBA,EAAa,KAAK,SAAW,SAC1C,MAAA,IAAI,MAAM,mDAAmD,EAGrE,OAAAL,EAAaK,CAAY,EAEzBvV,GAAkB,IAAM,CACtBS,EAAQ8U,CAAY,CAAA,CACrB,EAED9W,EAAA,MACE6W,EACA,CAACF,EAAU1M,IAAa,CAClB0M,EACFP,EAAUU,CAAY,EACb7M,GAAY,CAAC0M,GACtBL,EAAYQ,CAAY,CAE5B,EACA,CAAC,UAAW,EAAI,CAAA,EAGX,CACL,eAAgBnY,EAAA,SAAS,IACvBsX,EAAM,MAAM,UAAWjwB,GAAO,SAAA,QAAAyc,EAAAzc,EAAG,UAAH,YAAAyc,EAAY,QAAOyJ,EAAA4K,EAAa,UAAb,YAAA5K,EAAsB,IAAE,CAC3E,EACA,iBAAkBgK,CAAA,CAEtB,EC7GAa,GAAe,CAAC5vB,EAA2C,SAAc,CACjE,KAAA,CAAC,SAAAqvB,GAAYR,KACbgB,EAAWrS,EAAAA,qBAEXsS,EAAiBtY,EAAAA,SAAS,IAAM,CAC9B,MAAAuY,EAAajV,UAAQ9a,CAAE,EAC7B,OAAI+vB,EACKV,EAAS,MAAM,KAAMH,GAAUA,OAAAA,QAAAA,EAAAA,EAAM,UAANA,YAAAA,EAAe,GAAG,SAAUa,EAAU,GAAK,KAG9EF,EAIEG,GAAWH,CAAQ,EAHjB,IAGiB,CAC3B,EAEKX,EAAQrS,EAAAA,MAAM,IAAA,OAAM,OAAAvB,EAAAwU,EAAe,QAAf,YAAAxU,EAAsB,MAAK,EAE9C,MAAA,CACL,MAAO,UACUyJ,GAAAzJ,EAAAwU,EAAA,QAAA,YAAAxU,EAAO,UAAP,MAAAyJ,EAAgB,MACjC,EACA,KAAKkL,EAAU,GAAI,UACFlL,GAAAzJ,EAAAwU,EAAA,QAAA,YAAAxU,EAAO,UAAP,MAAAyJ,EAAgB,KAAKkL,EACtC,EACA,MAAAf,CAAA,CAEJ,EAEMc,GAAcE,GACbA,EAAU,OAIXA,EAAU,OAAO,KAAK,SAAW,SAC5BA,EAAU,OAGZF,GAAWE,EAAU,MAAM,EAPzB,KCxCXC,GAAe,IAAM,CACnB,KAAM,CAAC,UAAAnB,EAAW,MAAAF,CAAK,EAAID,GAAoB,EAcxC,MAAA,CACL,KAbW,CAACoB,EAAU,KAAO,OACzBjB,EAAU,SACF1T,EAAA0T,EAAA,MAAM,UAAN,MAAA1T,EAAe,KAAK2U,GAChC,EAWA,QARc,CAACA,EAAU,KAAO,OACrB,UAAAf,KAASJ,EAAM,OAClBxT,EAAA4T,EAAA,UAAA,MAAA5T,EAAS,KAAK2U,EACtB,CAKA,CAGJ,EClBeG,GAAC/E,GAAoD,CAC5D,MAAAgF,EAAuB,CAC3B3yB,EACAV,IACW,CACX,MAAMszB,EAAWtzB,IAAQ,KAAO,GAAK,GAAGA,CAAG,IAEpC,OAAAU,IAAU,SACb,GAAG4yB,CAAQ,iBACX5yB,IAAU,OACV,GAAG4yB,CAAQ,eACX,OAAO5yB,GAAU,UACjBA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,KACVA,IAAU,IACV,GAAG4yB,CAAQ,WAAW5yB,CAAK,GAC3BA,IAAU,OACV,GAAG4yB,CAAQ,YACX5yB,IAAU,KACV,GAAG4yB,CAAQ,YACX5yB,IAAU,KACV,GAAG4yB,CAAQ,YACX,GAAGA,CAAQ,SAAA,EAGXnH,EAAQvM,EAAA,SAASC,QAAMwO,CAAG,CAAC,EAC3BkF,EAAiBpG,EAAc,IAAMhB,EAAM,MAAM,OAAO,EACxDqH,EAAoBrG,EAAc,IAAMhB,EAAM,MAAM,UAAU,EAC9DsH,EAAuBtG,EAAc,IAAMhB,EAAM,MAAM,aAAa,EACpEuH,EAAsBvG,EAAc,IAAMhB,EAAM,MAAM,YAAY,EAClEwH,EAAoBxG,EAAc,IAAMhB,EAAM,MAAM,UAAU,EACpE,OAAO3R,WAAS,KAAO,CACrB,CAAC,GAAG6Y,EAAqBE,EAAe,MAAkC,IAAI,CAAC,EAAE,EAC/E,CAAC,CAACA,EAAe,MACnB,CAAC,GAAGF,EAAqBG,EAAkB,MAAkC,KAAK,CAAC,EAAE,EACnF,CAAC,CAACA,EAAkB,MACtB,CAAC,GAAGH,EAAqBI,EAAqB,MAAkC,QAAQ,CAAC,EAAE,EACzF,CAAC,CAACA,EAAqB,MACzB,CAAC,GAAGJ,EAAqBK,EAAoB,MAAkC,OAAO,CAAC,EAAE,EACvF,CAAC,CAACA,EAAoB,MACxB,CAAC,GAAGL,EAAqBM,EAAkB,MAAkC,KAAK,CAAC,EAAE,EACnF,CAAC,CAACA,EAAkB,KACtB,EAAA,CACJ,EC/CAC,GAAe,CAACC,EAAmCC,IAA0C,CAC3F,MAAMC,EAAiBnU,EAAA,SAASC,QAAMgU,CAAM,CAAC,EACvCG,EAAwBpU,EAAA,SAASC,QAAMiU,CAAU,CAAC,EAKlDG,EAA4BpU,EAAA,MAAM,IAAM,CAACmU,EAAsB,KAAK,EAE1EvT,EAAAA,UAAU,IAAM,CACd,MAAM6J,EAAWF,GACf,SAAS,KACT2J,EAAe,OAASE,EAA0B,KAAA,EAG9CpY,EAAA,MAAA,CAACkY,EAAgBE,CAAyB,EAAG,CAAC,CAACC,EAAUC,CAAO,IAAM,CAC1E7J,EAAS,MAAQ4J,GAAYC,CAAA,CAC9B,CAAA,CACF,CACH,EClBMC,GAAa,YAEJC,GAAAhX,GAAkB,IAAM,CAC/B,MAAAiX,EAASnZ,MAAgC,CAAA,CAAE,EA+B1C,MAAA,CAAC,OAAAmZ,EAAQ,KA1BH,IAAI,CAACzyB,EAAIwsB,CAAG,IAAqE,CACtF,MAAAkG,EAAiB,CAAC,IAAKH,IACzB,OAAOvyB,GAAO,SACT,OAAA,OAAO0yB,EAASlG,EAAK,CAC1B,KAAMxsB,EACN,OAAOwsB,GAAA,YAAAA,EAAK,QAAS,GAAA,CACN,EAEV,OAAA,OAAOkG,EAAS1yB,EAAI,CAAC,MAAOA,EAAG,OAAS,IAAqB,EAEtE,MAAM2yB,EAAO,SAEb,OAAAF,EAAO,MAAM,KAAK,CAAC,GAAGC,EAAS,KAAAC,EAAK,EAE7BA,CAAA,EAYa,KANRA,GAAiB,CACvB,MAAAC,EAAMH,EAAO,MAAM,UAAWzyB,GAAOA,EAAG,OAAS2yB,CAAI,EACvDC,IAAQ,IACLH,EAAA,MAAM,OAAOG,EAAK,CAAC,CAAA,EAI9B,CAAC,g0CCkED,MAAMtI,EAAQuI,EAkCRtI,EAAOuI,EAwBPC,EAAoBzH,EAAc,IAAMhB,EAAM,UAAU,EACxD0I,EAAY1Z,EAAAA,IAAIyZ,EAAkB,KAAK,EACvCE,EAAoB3Z,EAAAA,IAAIyZ,EAAkB,KAAK,EACrD7Q,EAAAA,YAAY,IAAM,CACXqI,EAAA,oBAAqByI,EAAU,KAAK,CAAA,CAC1C,EAEDhZ,EAAA,MAAM+Y,EAAmB,IAAM,CACzBA,EAAkB,QAAUC,EAAU,QAC1CD,EAAkB,MAAQG,EAAK,EAAI/mB,EAAK,IAAI,MAAM,mBAAmB,CAAC,EAAA,CACvE,EAED,MAAMgiB,EAAaL,GAAM,IAAMxD,EAAM,GAAI,SAAS,EAE5C6I,EAAe7H,EAAc,IAAMhB,EAAM,KAAK,EAC9C8I,EAAgB9H,EAAc,IAAMhB,EAAM,MAAM,EAChD+I,EAAiB/H,EAAc,IAAMhB,EAAM,OAAO,EAClDgJ,EAAgBhI,EAAc,IAAMhB,EAAM,MAAM,EAChDiJ,EAAgBjI,EAAc,IAAMhB,EAAM,MAAM,EAChDkJ,EAAgBlI,EAAc,IAAMhB,EAAM,MAAM,EAChDmJ,EAAqBnI,EAAc,IAAMhB,EAAM,WAAW,EAC1DoJ,EAAgBpI,EAAc,IAAMhB,EAAM,MAAM,EAChDqJ,EAAkBrI,EAAc,IAAMhB,EAAM,QAAQ,EACpDsJ,EAAgBtI,EAAc,IAAMhB,EAAM,MAAM,EAChDuJ,EAAoBvI,EAAc,IAAMhB,EAAM,UAAU,EACxDwJ,EAAiBxI,EAAc,IAAMhB,EAAM,OAAO,EAClDyJ,EAAwBzI,EAAc,IAAMhB,EAAM,cAAc,EAChE0J,EAAS1I,EAAc,IAAMhB,EAAM,IAAI,EAEvC2J,EAAS3a,MAAI,EAAK,EAElBvX,EAAUuX,MAAwB,IAAI,EACtC4a,EAAgB5a,MAAwB,IAAI,EAC5C/Q,EAAQ+Q,MAAwB,IAAI,EACpC8X,EAAU9X,MAAwB,IAAI,EACtC6a,EAAc7a,MAAwB,IAAI,EAE1C8a,EAAiBzb,EAAA,SAAS,IAC9B2R,EAAM,MAAQvP,GAAauP,EAAM,MAAOxP,EAAgB,EAAI,EAAA,EAGxDuZ,EAAmB1b,EAAA,SAAS,IAChC2R,EAAM,QAAUvP,GAAauP,EAAM,QAASxP,EAAgB,EAAI,EAAA,EAE5DwZ,EAAkBtW,EAAAA,MAAM,IAAMsM,EAAM,UAAU,WAAW,MAAM,CAAC,EAChEiK,EAAejV,GAAY,IAAMgL,EAAM,QAAU,GAAG,EAEpDxiB,EAAW6Q,EAAA,SAA+B,IAC9C2R,EAAM,WAAa,YAAcA,EAAM,WAAa,WAAa,OAAYA,EAAM,QAAA,EAE/EviB,EAAe4Q,EAAA,SAAmC,IACtD2R,EAAM,WAAa,YAAcA,EAAM,WAAa,WAAaA,EAAM,SAAW,MAAA,EAG9EkK,GAAalb,MAAmB,CAAA,CAAE,EAClCmb,GAAqB9b,EAAAA,SAAuB,IAAM,CAClD,GAAA2R,EAAM,qBAAuB,OAC/B,OAAOA,EAAM,mBAET,MAAAoK,EAAMpK,EAAM,SAAW,KAAOiK,EAAa,MAAQT,EAAe,MAAQ,EAAI,EAC9Ea,EAAoB,CAACC,GAAiBF,CAAG,CAAC,EAChD,OAAInB,EAAc,QAAU,IAAS,CAACe,EAAgB,OAChDK,EAAA,KACF3pB,GAAK,CACH,SAAUlD,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGDgK,EAAgB,OACdK,EAAA,KACF9qB,GAAc,CACZ,UAAYygB,EAAM,UAAU,MAAM,GAAG,EAAE,CAAC,GAAmB,OAC3D,SAAUxiB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGD+I,EAAe,QAAU,IACvBsB,EAAA,KACFpmB,GAAM,CACJ,SAAUzG,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGDoJ,EAAc,QAAU,IACtBiB,EAAA,KACFE,GAAe,CACb,SAAU/sB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGDsJ,EAAc,QAAU,IACtBe,EAAA,KAAKG,IAAkB,EAEzBH,EAAA,KAAKI,GAAgB,CAAC,QAASxsB,EAAO,QAAS,EAAG,CAAA,CAAC,EACnD+qB,EAAc,QAAU,IACtBqB,EAAA,KACFK,GAAe,CACb,SAAUltB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,gBACf,MAAM,CAAC,eAAAhb,GAAgB,gBAAAD,IAAkB,CACvCmlB,GAAW,MAAQ,CACjB,UAAWnlB,GAAkB,GAAGA,EAAe,KAAO,OACtD,SAAUC,GAAiB,GAAGA,EAAc,KAAO,MAAA,CAEvD,CAAA,CACD,CAAA,EAGEqlB,CAAA,CACR,EAEKM,EAAejX,EAAA,MAAM,IACzBsW,EAAgB,MAAQ,OAAahK,EAAM,SAAA,EAGvC,CAAC,eAAA7Q,EAAgB,eAAAvS,GAAgB,UAAAnD,GAAW,OAAA+S,GAAU0B,GAAY0b,EAAenyB,EAAS,CAC9F,UAAWkzB,EACX,WAAYR,GACZ,SAAUzW,EAAA,MAAM,IAAMsM,EAAM,QAAQ,EACpC,qBAAsB,IAAIpS,IACRrB,GAAW,GAAGqB,EAAM,CAAC,eAAgByb,EAAgB,MAAM,CAG7E,CACD,EAEKuB,EAAa5b,EAAA,IAAmB,CAAC,SAAU,UAAW,CAAA,EAE5DU,EAAA,MAAM9S,GAAgB,IAAM,OAQtB,GAPAwsB,EAAc,QAAU,MACtBjX,EAAAvV,GAAe,MAAM,OAArB,MAAAuV,EAA2B,gBAC7BwX,EAAO,MAAQ,GAEfA,EAAO,MAAQ,IAGf/sB,GAAe,MAAM,MAAO,CAC9B,KAAM,CAAC,EAAAH,EAAG,EAAAC,EAAC,EAAIE,GAAe,MAAM,MACpCguB,EAAW,MAAQ,CACjB,SAAU,WACV,IAAKluB,GAAI,GAAGA,EAAC,KAAO,GACpB,KAAMD,EAAI,GAAGA,CAAC,KAAO,EAAA,CAEzB,CAAA,CACD,EAEK,MAAAouB,EAAkBxc,EAAAA,SAAS,IAAM,CAC/B,MAAA8K,EAAOqQ,EAAe,MAAQ,UAAY,UACzC,MAAA,CACLrQ,EACA,KAAKA,CAAI,GACT,CACE,CAAC,KAAKA,CAAI,IAAI6G,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAClD,KAAM0I,EAAU,OAAS,CAACiB,EAAO,MAChC,UAAY,CAACjB,EAAU,MACxB,KAAM,CAACQ,EAAc,MACpB,SAAW,CAACR,EAAU,OAASQ,EAAc,MAC9C,CAAC,GAAGlJ,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,OAChD,CAAC,MAAM7G,CAAI,IAAI2R,GAA0BrxB,GAAU,KAAK,CAAC,EAAE,EAAGA,GAAU,QAAU,MACpF,CAAA,CACF,CACD,EAEK,CAAC,UAAA8jB,CAAA,EAAaT,GAAkBrlB,CAAO,EACvC,CAAC,UAAWszB,CAAgB,EAAIjO,GAAkBgK,CAAO,EAEzDzL,EAAUplB,GAAa,CAC3B,MAAMiC,EAAQjC,GAAK,IAAI,MAAM,OAAO,EACpCyyB,EAAU,MAAQ7mB,EAAK3J,CAAK,EAAI0wB,EAAK,CAAA,EAGjCoC,EAAwB,CAC5B7R,EACA4I,EAAoC,CAAA,IAEpC,IAAIrvB,GAAmBymB,EAAM,CAC3B,WAAY,GACZ,OAAQ1hB,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGsqB,EACH,YAAa8B,EAAW,KAAA,CACzB,EAEC,IAAAoH,GACJ,MAAMrC,EAAO,IAAM,CACjB,MAAM1wB,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EACrB,MACF,CACA0I,EAAkB,MAAQ,GAC1BpU,EAAAA,SAAS,IAAM,OACN/H,IACOye,GAAA,WACZ,IAAM,CACGze,IACPkc,EAAU,MAAQ,GAClBnU,EAAAA,SAAS,IAAM,CACR0L,EAAA,QAAS+K,EAAsB,OAAO,CAAC,CAAA,CAC7C,CACH,EACA,OAAOhL,EAAM,OAAU,SAAWA,EAAM,QAAQ7N,EAAA6N,EAAM,QAAN,YAAA7N,EAAa,OAAQ,CAAA,CACvE,CACD,CAAA,EAGGtQ,EAAQ5L,GAAa,QACzB,MAAMiC,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EACrB,MACF,CACIgL,KACF,aAAaA,EAAW,EACVA,GAAA,QAEV,MAAA1P,GAAQ,OAAOyE,EAAM,OAAU,SAAWA,EAAM,QAAQ7N,GAAA6N,EAAM,QAAN,YAAA7N,GAAa,OAAQ,EACnF,WAAW,IAAM,YAEblc,GAAA,YAAAA,EAAG,QAAS,UACZA,GAAA,YAAAA,EAAG,QAAS,cACXA,GAAA,YAAAA,EAAG,QAAS,qBAAuB6yB,EAAc,OACjD,CAACW,EAAsB,OACtBlM,EAAU,OACVwN,EAAiB,OACjB,GAAC5Y,GAAA1a,EAAQ,QAAR,MAAA0a,GAAe,SAAS,+BAAU,iBACnC,GAACyJ,GAAAkL,EAAQ,QAAR,MAAAlL,GAAe,SAAS,+BAAU,iBACpC6N,EAAsB,OAASsB,EAAiB,OAEjDrC,EAAU,MAAQ,GAClBnU,EAAAA,SAAS,IAAM,CACb,WACE,IAAM,CACJoU,EAAkB,MAAQ,EAC5B,EACAlxB,EAAQ,MAAQD,GAAmBC,EAAQ,KAAK,EAAI,GAAA,EAEjDwoB,EAAA,SAAU+K,EAAsB,QAAQ,CAAC,CAAA,CAC/C,GAED,WACE,IAAM,CACJnpB,EAAK5L,CAAC,CACR,EACAslB,GAAQ,GAAK,GAAKA,EAAA,GAGrBA,EAAK,CAAA,EAGG2P,EAAA,CAAA,KACXrpB,EACA,KAAA+mB,EACA,OAAAvN,CAAA,CACD,EAEK,MAAA8P,EACJzV,GAG4B,CACtBje,MAAAA,EAAUoW,QAAM6H,CAAM,EAC5B,GAAKje,EACD,IAAA,OAAOA,GAAY,SAAU,CACzB,MAAA2zB,GAAY,SAAS,eAAe3zB,CAAO,EACjD,OAAO2zB,IAAwB,MACjC,CACA,OAAK3zB,EAAiD,IAC5CA,EAAiD,IAEpDA,EAAA,EAGH4zB,EAAO,IAAM,OAGjB,GAAIrL,EAAM,OAAQ,CACV,MAAAsL,EAAOH,EAAWnL,EAAM,MAAM,EAChCsL,EACFxE,EAAQ,MAAQwE,EAGR,QAAA,KAAK,2BAA4BtL,EAAM,MAAM,CACvD,MAEQ8G,EAAA,OAAQ3U,EAAA0X,EAAY,QAAZ,YAAA1X,EAAmB,mBAErC,GAAI6N,EAAM,UAAW,CACb,MAAAsL,EAAOH,EAAWnL,EAAM,SAAS,EACnCsL,EACF1B,EAAc,MAAQ0B,EAGd,QAAA,KAAK,8BAA+BtL,EAAM,SAAS,CAC7D,MAEA4J,EAAc,MAAQ9C,EAAQ,MAEhC,GAAI,GAACA,EAAQ,OAASgC,EAAc,QAG/B5zB,GAEL,IADQ4xB,EAAA,MAAM,iBAAiB,YAAajlB,CAAI,EAC5CgnB,EAAa,MAAO,CACd/B,EAAA,MAAM,iBAAiB,QAASzL,CAAM,EAC9C,MACF,CACQyL,EAAA,MAAM,iBAAiB,eAAgB8B,CAAI,EAC3C9B,EAAA,MAAM,iBAAiB,eAAgBjlB,CAAI,EAC3CilB,EAAA,MAAM,iBAAiB,QAAS8B,CAAI,EACpC9B,EAAA,MAAM,iBAAiB,OAAQjlB,CAAI,EAAA,EAGvC0pB,GAAS,IAAM,CACfzE,EAAQ,QACFA,EAAA,MAAM,oBAAoB,YAAajlB,CAAI,EAC3CilB,EAAA,MAAM,oBAAoB,QAASzL,CAAM,EACzCyL,EAAA,MAAM,oBAAoB,eAAgB8B,CAAI,EAC9C9B,EAAA,MAAM,oBAAoB,eAAgBjlB,CAAI,EAC9CilB,EAAA,MAAM,oBAAoB,QAAS8B,CAAI,EACvC9B,EAAA,MAAM,oBAAoB,OAAQjlB,CAAI,EAChD,EAGF,OAAAuU,GACE3e,EACA,IAAM,CACAixB,EAAU,OAASG,EAAa,OAAS,CAACM,EAAmB,OAAS,CAACL,EAAc,OAClFjnB,EAAA,IAAI,MAAM,cAAc,CAAC,CAClC,EACA,CAAC,OAAQ,CAACilB,CAAO,CAAC,CAAA,EAGdpX,QAAA,CAAC,IAAMsQ,EAAM,MAAO,IAAMA,EAAM,OAAQ,IAAMA,EAAM,SAAS,EAAG,IAAM,CACnEuL,KACFF,GAAA,CAEN,EAED/W,EAAA,UAAU+W,CAAI,EAEdG,EAAA,gBAAgBD,EAAM,s0DCrfTE,GAA2B,CAAC,CACvC,IAAAzoB,EACA,IAAA3J,EACA,MAAAD,EACA,YAAAsyB,EACA,SAAAC,CACF,IAMiB,CACf,MAAM94B,EAAYmQ,EAAM,MAAQ5J,EAAQ,OAASC,EAAM,QAAU,SAC3DynB,EAAQ6K,EAAW,MAAQD,EAAc,KAAO,QACtD,MAAO,GAAG74B,CAAS,GAAGiuB,EAAQ,IAAIA,CAAK,GAAK,EAAE,EAChD,EAEagK,GAA6BrxB,GAAiC,CACzE,KAAM,CAACmyB,CAAU,EAAInyB,EAAU,MAAM,GAAG,EACxC,OAAQmyB,EAAY,CAClB,IAAK,OACI,MAAA,QACT,IAAK,QACI,MAAA,MACT,QACS,OAAAA,CACX,CACF,EAEaC,GAAuBC,GAClC,OAAOA,GAAW,UAAYA,EAAO,SAAW,GAErCC,GAAiB,CAC5BD,EACAp2B,IACuC,CAEvC,GAAI,CADam2B,GAAoBC,CAAM,EAC5B,MAAO,GAEhB,MAAAE,EACJ,OAAOF,EAAW,KACjB,OAAOA,GAAW,UAAY,CAACA,EAAO,OAAS,CAACA,EAAO,QACpDG,EAAQv2B,EAAG,aAAa,OAAO,GAAKA,EAAG,aAAa,qBAAqB,EAC/E,OAAIs2B,EACEC,GACFv2B,EAAG,gBAAgB,OAAO,EACvBA,EAAA,aAAa,sBAAuBu2B,CAAK,EAErC,CACL,QAASxb,GAAawb,EAAOzb,EAAgB,CAAA,GAG1C,GAEL,OAAOsb,GAAW,SACb,CACL,QAASrb,GAAaqb,EAAQtb,EAAgB,CAAA,EAG3C,CACL,MAAOsb,GAAA,MAAAA,EAAQ,MAAQrb,GAAaqb,GAAA,YAAAA,EAAQ,MAAOtb,EAAgB,EAAI,OACvE,QAASsb,GAAA,MAAAA,EAAQ,QAAUrb,GAAaqb,GAAA,YAAAA,EAAQ,QAAStb,EAAgB,EAAI,MAAA,CAEjF,EAEa0b,GAAwB,CAACC,EAA2Bz2B,KAAqB,CACpF,OAAQA,EACR,WAAYy2B,EAAQ,UAAU,KAC9B,OAAQA,EAAQ,UAAU,OAC1B,MAAOA,EAAQ,UAAU,MACzB,SAAUA,EAAQ,UAAU,SAC5B,WAAYA,EAAQ,UAAU,WAC9B,UAAWA,EAAQ,UAAU,KACzB,OACAA,EAAQ,UAAU,MAClB,QACAA,EAAQ,UAAU,OAClB,SACAA,EAAQ,UAAU,IAClB,MACA,OACJ,KAAM,GACN,GAAI,OAAOA,EAAQ,OAAU,SAAWA,EAAQ,MAAQ,CAAC,EACzD,MAAO,KACP,QAAS,IACX,GAQad,GAAO,CAAC31B,EAAuBy2B,IAA8B,OAClE,MAAAC,EAAM,SAAS,cAAc,MAAM,EACrCD,EAAQ,UAAU,KAAe,SAAA,KAAK,YAAYC,CAAG,EAChDD,EAAQ,UAAU,MAAOz2B,EAAG,YAAY02B,CAAG,GAC/Cja,EAAAzc,EAAG,aAAH,MAAAyc,EAAe,aAAaia,EAAK12B,EAAG,aACzCA,EAAG,OAAS22B,EAAAA,UAAU,CAAC,OAAQ,IAAA,OAAMC,OAAAA,EAAE,EAAAC,GAAU,CAAC,IAAGpa,EAAAzc,EAAG,WAAH,YAAAyc,EAAa,KAAM,CAAA,EAAE,CAAA,EACvEzc,EAAA,OAAO,MAAM02B,CAAG,EACnB12B,EAAG,WAAa02B,CAClB,EAEab,GAAU71B,GAA0B,OAC/C,MAAM02B,EAAM12B,EAAG,YACfyc,EAAAzc,EAAG,SAAH,MAAAyc,EAAW,UACX,OAAOzc,EAAG,OACV,OAAOA,EAAG,SACV,WAAW,IAAM,CACf02B,GAAA,MAAAA,EAAK,UACJ,CAAC,EACJ,OAAO12B,EAAG,UACZ,ECpHA82B,GAAe,CACbC,EACAC,EACAC,IAEAD,EAAY,OAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAK,CAAC,EAAE,OAAO,CAAC1M,EAAO4M,KACjE5M,EACGyM,EAAsB,GAAGA,CAAM,GAAGG,EAAW,OAAO,CAAC,EAAE,YAAgB,EAAAA,EAAW,MAAM,CAAC,CAAC,GAAjFA,CACZ,EAAID,EACG3M,GACN,OAAO,OAAO,IAAI,CAAC,ECjBTgD,GAAA,CACbhD,EACA6M,EACAC,EACAC,EAAcD,IAEd,OAAO,KAAKD,CAAG,EAAE,OAAO,CAACxC,EAAe73B,KACjCwtB,EAAMxtB,CAAI,GAEX63B,EAAA,KACF,CAAC0C,EAAav6B,EAAK,QAAQs6B,EAAY,EAAE,EAAG9M,EAAMxtB,CAAI,CAAC,EACpD,OAAQyD,GAAMA,GAAK,OAAOA,GAAM,SAAS,EACzC,KAAK,GAAG,EACR,YAAY,CAAA,EAGVo0B,GACN,EAAE,ECnBP2C,GAAgBC,GACd,OAAOA,GAAU,SACbh5B,GAAUg5B,CAAK,EACfA,EAAM,QAAU,OAChBA,EAAM,MACN,OAAOA,EAAM,KAAQ,SACrBh5B,GAAUg5B,EAAM,GAAG,EACnBA,EAAM,ICVZvJ,GAAe,CAACD,EAAS,KACvB,WAAW,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,EAAG,CAAC,CAAC,SAASA,CAAM,KCChEyJ,GAAe,CAACC,EAAwBC,MACrCD,GAAA,YAAAA,MAAY,CAAA,GACV,OAAO,CAAC9C,EAAc8C,KACjB,OAAOA,EAAK,MAAS,SACjB9C,EAAAA,EAAI,OAAO8C,EAAK,QAA4B,EAElD9C,EAAI,KAAK8C,CAAI,EAER9C,GACN,CAAE,CAAA,EACJ,OAAQgD,GAAW,OAAA,QAAAlb,EAAAkb,EAAM,OAAN,YAAAlb,EAA6C,UAAWib,EAAQ,ECT3Erb,GAAYmQ,GACvBA,IAAQ,MAAQ,OAAOA,GAAQ,SAKpBoL,GAAa/4B,GAA4B,oBAAoB,KAAK,OAAOA,CAAK,CAAC,ECP5FmtB,GAAgB1B,GACd,CAAC,EAAEA,EAAM,MAAQA,EAAM,ICWZuN,GAIR,OAAO,UAAU,EAGTC,GASR,OAAO,MAAM,EAGLC,GAMR,OAAO,UAAU,EAGTC,GAER,OAAO,WAAW,EAGVC,GAYR,OAAO,aAAa,EAGZC,GAIR,OAAO,WAAW,EAGVC,GAaR,OAAO,eAAe,EAEdC,GAYR,OAAO,YAAY,EAGXC,GAOR,OAAO,UAAU,EAETC,GAOR,OAAO,UAAU,EAETC,GAGR,OAAO,QAAQ,ECtHLC,GAAA,CAACh3B,EAAcma,EAAQ,GAAI8c,EAAgB,CAAA,IAAc,CAEhE,MAAAC,EAAQ,CAACl3B,CAAI,EACf,IAAAi2B,EACJ,QAASrwB,EAAI,EAAGA,EAAIsxB,EAAM,QAAU,CAACjB,EAAMrwB,IAAK,CACxC5F,MAAAA,EAAOk3B,EAAMtxB,CAAC,EACpBqwB,EAAOgB,EAAOj3B,CAAI,CACpB,CAEA,OAAQi2B,GAAQ,OAAOA,GAAS,WAAaA,EAAK9b,CAAK,EAAI8b,CAC7D,ECKakB,GAAkB,CAAC95B,EAAe6rB,EAAe,MAAgB,CAC5E,MAAMkO,EAAU,OAAO,SAAS/5B,EAAO,EAAE,EACzC,OAAO,OAAO,MAAM+5B,CAAO,EAAIlO,EAAekO,CAChD,EAUaC,GAAU,CAACh6B,EAAwB6rB,EAAe,MAAgB,CAC7E,MAAMoO,EAAQ,OAAO,WAAWj6B,EAAM,SAAU,CAAA,EAChD,OAAO,OAAO,MAAMi6B,CAAK,EAAIpO,EAAeoO,CAC9C,EC7BaC,GAAO,CAIlBC,EACAC,IAEA,OAAO,KAAKD,CAAU,EACnB,OAAQ3X,GAAQ,CAAC4X,EAAY,IAAKj5B,GAAOA,EAAG,SAAS,CAAC,EAAE,SAASqhB,CAAG,CAAC,EACrE,OAAO,CAACpiB,EAAQoiB,KAAS,CAAC,GAAGpiB,EAAQ,CAACoiB,CAAG,EAAG2X,EAAW3X,CAAG,CAAC,GAAI,CAAA,CAAwB,EAM/E6K,GAAO,CAIlB8M,EACAC,IAEA,CAAC,GAAGA,CAAW,EAAE,OACf,CAACC,EAAMp8B,KACAo8B,EAAAp8B,CAAI,EAAIk8B,EAAWl8B,CAAI,EACrBo8B,GAET,CAAC,CACH,EASWC,GAAM,CAEjBt6B,EACA0wB,EACA7E,IACa,CACP,MAAA0O,EAAW7J,EAAK,MAAM,SAAS,EAErC,IAAIrK,EAAermB,EACnB,UAAWwiB,KAAO+X,EAAU,CAE1B,GADIlU,IAAY,MACZA,IAAY,OAAkB,OAAAwF,EAC9BrJ,EAAI,SAAW,KACnB6D,EAAUA,EAAQ7D,CAAG,EACvB,CACA,OAAI6D,IAAY,OAAkBwF,EAC3BxF,CACT,ECxDAmU,GAAe,CACbz5B,EACAw2B,IACW,CACX,KAAM,CAAC,IAAAkD,EAAK,GAAGC,CAAA,EAAU35B,EACnB45B,EAAmD,CAAA,EACrDF,GACKlD,EAAA,QAASp2B,GAAO,CACrBw5B,EAAWx5B,CAAE,EAAIs5B,CAAA,CAClB,EAEH,MAAMG,EAAiC,CAAC,GAAGD,EAAY,GAAGD,CAAM,EAE9D,OAAA,OAAO,QAAQE,CAAK,EAEjB,OAAO,CAAC,CAACj4B,EAAM3C,CAAK,IAAM,CAAC,CAACA,GAASu3B,EAAO,SAAS50B,CAAY,CAAC,EAClE,IAAI,CAAC,CAACA,CAAI,IAAMA,CAAY,CAEnC,ECRak4B,GAAiB,CAAC3L,EAAgBlvB,IAC7CA,GAASkvB,EAASvvB,GAAWuvB,CAAM,EAAI,+OCAzC,MAAMzD,EAAQuI,EAwBR3E,EAAa7D,GAAUC,EAAO,aATvBwI,EAS2C,CAAC,QAAS,GAAK,EAEjE3E,EAAaL,GAAM,IAAMxD,EAAM,GAAI,WAAW,EAE9CqP,EAAerO,EAAc,IAAMhB,EAAM,KAAK,EAC9CsP,EAActO,EAAc,IAAMhB,EAAM,IAAI,EAE5C6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,kBAAmBghB,EAAa,KAChC,EAAA,EAEFE,OAAAA,EAAAA,QAAQ3B,GAAuB,CAC7B,SAAUna,WAASmQ,CAAU,EAC7B,KAAM0L,EACN,YAAcz4B,GAAe,CAC3B+sB,EAAW,MAAQ/sB,CACrB,CAAA,CACD,2oBCbD,MAAMmpB,EAAQuI,EAwBRtI,EAAOuI,EAoCPwC,EAAwB,CAC5B7R,EACA4I,EAAoC,CAAA,IAEpC,IAAIrvB,GAAmBymB,EAAM,CAC3B,WAAY,GACZ,OAAQ1hB,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGsqB,EACH,YAAa8B,EAAW,KAAA,CACzB,EAEGD,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEwI,EAAoBzH,EAAc4C,CAAU,EAC5C4L,EAAgBxO,EAAc,IAAMhB,EAAM,MAAM,EAChDyP,EAAoBzO,EAAc,IAAMhB,EAAM,UAAU,EACxD0P,EAAe1O,EAAc,IAAMhB,EAAM,KAAK,EAC9C2P,EAAiB3O,EAAc,IAAMhB,EAAM,OAAO,EAClD4P,EAAuB5O,EAAc,IAAMhB,EAAM,aAAa,EAE9D6D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,UAAU,EAE7CvoB,EAAUuX,MAAwB,IAAI,EACtC6gB,EAAe7gB,MAAI,EAAK,EACxB4Z,EAAO5Z,EAAAA,IAAIyZ,EAAkB,KAAK,EAElCoC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,KAAQua,EAAK,MACb,kBAAmB8G,EAAa,MAChC,WAAcG,EAAa,MAC3B,QAAWjH,EAAK,OAAS,CAACH,EAAkB,MAC5C,sBAAuBgH,EAAkB,KACzC,EAAA,EAEIK,EAAQ,IAAM,CAClBlM,EAAW,MAAQ,EAAA,EAEfmM,EAAO,IAAM,CACjBnM,EAAW,MAAQ,EAAA,EAEfoM,EAAW,IAAM,CACVpM,EAAA,MAAQ,CAAC6E,EAAkB,KAAA,EAGpC,IAAAwH,EACAC,EACAC,EAAiBP,EAAqB,MAE1C,MAAMQ,EAAS,IAAM,CACnB,MAAMl4B,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EACrB,MACF,CACA,aAAaiQ,CAAW,EACxB,aAAaD,CAAa,EAC1BrH,EAAK,MAAQ,GACT,CAAAuH,IACJN,EAAa,MAAQ,GACrBtb,EAAAA,SAAS,IAAM,CACT9c,EAAQ,QAAU,OAClBg4B,EAAkB,MACpBh4B,EAAQ,MAAM,MAAM,MAAQ,GAAGA,EAAQ,MAAM,WAAW,KAExDA,EAAQ,MAAM,MAAM,OAAS,GAAGA,EAAQ,MAAM,YAAY,KAE5Dw4B,EAAgB,WAAW,IAAM,CAC/BJ,EAAa,MAAQ,GACrB5P,EAAK,OAAO,EACRxoB,EAAQ,QAAU,OACdA,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,GAC3B,EAAAD,GAAmBC,EAAQ,KAAK,CAAC,EAAA,CACrC,EAAA,EAGGoK,EAAO,IAAM,CACjB,MAAM3J,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EACrB,MACF,CAGA,GAFA,aAAagQ,CAAa,EAC1B,aAAaC,CAAW,EACpBz4B,EAAQ,QAAU,KACtB,IAAI04B,EAAgB,CAClBvH,EAAK,MAAQ,GACb,MACF,CACIiH,EAAa,OACPp4B,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,IAGxBg4B,EAAkB,MACpBh4B,EAAQ,MAAM,MAAM,MAAQ,GAAGA,EAAQ,MAAM,WAAW,KAExDA,EAAQ,MAAM,MAAM,OAAS,GAAGA,EAAQ,MAAM,YAAY,KAI9DA,EAAQ,MAAM,aACdo4B,EAAa,MAAQ,GACrBtb,EAAAA,SAAS,IAAM,CACT9c,EAAQ,QAAU,OACdA,EAAA,MAAM,MAAM,OAAS,GACrBA,EAAA,MAAM,MAAM,MAAQ,GAC5By4B,EAAc,WAAW,IAAM,CAC7BtH,EAAK,MAAQ,GACbiH,EAAa,MAAQ,GACrB5P,EAAK,QAAQ,CACZ,EAAAzoB,GAAmBC,EAAQ,KAAK,CAAC,EAAA,CACrC,EAAA,EAGHiY,OAAAA,EAAA,MAAMkU,EAAY,IAAM,CACJ6E,EAAA,MAAQ2H,EAAO,EAAIvuB,EAAK,CAAA,CAC3C,EAEDyS,EAAAA,UAAU,IAAM,CACV7c,EAAQ,QAAU,MAClB,CAACgxB,EAAkB,OAAS+G,EAAc,OAC5Cjb,EAAAA,SAAS,IAAM,CACbqP,EAAW,MAAQ,EAAA,CACpB,CACH,CACD,EAEKlU,QAAAkgB,EAAuBS,GAAW,CACrBF,EAAAE,CAAA,CAClB,EAEGV,EAAe,QACAQ,EAAA,GACjBvM,EAAW,MAAQ,GACnBrP,EAAAA,SAAS,IAAM,CACb4b,EAAiBP,EAAqB,KAAA,CACvC,GAGGlgB,QAAAigB,EAAiBU,GAAW,CACfF,EAAA,GACRE,EAAAN,IAASD,IAClBvb,EAAAA,SAAS,IAAM,CACb4b,EAAiBP,EAAqB,KAAA,CACvC,CAAA,CACF,EAEgBna,GAAAhe,EAAS,YAAa,IAAM,CAChCmsB,EAAA,MAAQ,CAAC6E,EAAkB,KAAA,CACvC,EAEYyC,EAAA,CACX,MAAA4E,EACA,MAAOJ,EACP,KAAAK,EACA,OAAQC,EACR,QAASvc,WAASmV,CAAI,CAAA,CACvB,EAED2G,EAAAA,QAAQxB,GAAsB,CAC5B,GAAIlK,EACJ,MAAAiM,EACA,KAAAC,EACA,OAAQC,EACR,QAASvc,WAASmV,CAAI,EACtB,MAAO8G,CAAA,CACR,ozCCpND,KAAM,CAAC,MAAOY,EAAc,GAAGC,GAAiBC,EAAS,SAAA,EAEnDxQ,EAAQuI,EAyCRtI,EAAOuI,EAiBP5E,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEwQ,EAAaC,EAAAA,OAAO9C,GAAuB,IAAI,EAE/C/J,EAAaL,GAAM,IAAMxD,EAAM,GAAI,gBAAgB,EAEzD1L,OAAAA,EAAAA,UAAU,IAAM,CACVsP,EAAW,OAAS,EAAC6M,GAAA,MAAAA,EAAY,KAAK,SAC5BA,GAAA,MAAAA,EAAA,YAAY5M,EAAW,QAEjC,CAACD,EAAW,QAAS6M,GAAA,YAAAA,EAAY,SAAS,SAAU5M,EAAW,QACjED,EAAW,MAAQ,GACrB,CACD,EAEDlU,EAAA,MACE,IAAM+gB,GAAA,YAAAA,EAAY,SAAS,MAC3B,IACG7M,EAAW,OAAQ6M,GAAA,YAAAA,EAAY,SAAS,SAAU5M,EAAW,OAAS,EAAC4M,GAAA,MAAAA,EAAY,KAAK,MAAA,EAE7F/gB,EAAA,MAAMkU,EAAY,IAAM,CAClBA,EAAW,OAAS,EAAC6M,GAAA,MAAAA,EAAY,KAAK,SAAmBA,GAAA,MAAAA,EAAA,YAAY5M,EAAW,OAAK,CAC1F,orDCnID,MAAM7D,EAAQuI,EAoBRoI,EAAgB3P,EAAc,IAAMhB,EAAM,MAAM,EAChDkJ,EAAgBlI,EAAc,IAAMhB,EAAM,MAAM,EAEhD4Q,EAAiBviB,EAAAA,SAAS,IAAM,CACpC,MAAMwiB,EAAgB,CACpB,KAAM,GACN,iBAAkB,GAClB,aAAc,GACd,iBAAkB,GAClB,aAAc,UACd,eAAgB,UAChB,eAAgB,EAAA,EAEZC,EAAa,CACjB,GAAGD,EACH,iBAAkB,eAClB,iBAAkB,cAAA,EAEb,OAAA3H,EAAc,MAAQ2H,EAAgBC,CAAA,CAC9C,EAEKC,EAAiB1iB,EAAA,SAAS,KAAO,CAAC,KAAM2R,EAAM,KAAM,IAAK,GAAM,GAAG4Q,EAAe,KAAA,EAAO,EAExFI,EAAgB3iB,EAAA,SAAS,IAC7B2R,EAAM,aAAe,OACjB,CAGE,GAAG+Q,EAAe,MAClB,GAAG/Q,EAAM,UAAA,EAEX2Q,EAAc,MACd,CACE,GAAGI,EAAe,MAClB,OAAQ,GACR,kBAAmBH,EAAe,MAAM,iBACxC,cAAeA,EAAe,MAAM,cAEtCG,EAAe,KAAA,iZCvDrB,MAAM/Q,EAAQuI,EAaRtI,EAAOuI,EAIPzE,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,qbCZ1D,MAAMA,EAAQuI,EAmBR0I,EAAQC,EAAAA,WAKRC,EAAenQ,EAAc,IAAMhB,EAAM,KAAK,EAE9C6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC,WAAW2R,EAAM,IAAI,GACrB,CACE,CAAC,WAAWA,EAAM,IAAI,KAAK,EAAGmR,EAAa,MAC3C,CAAC,QAAQnR,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEKoR,EAAe1d,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,KAAK,CAAC,obCkCpDI,GAAqB,i0BA/C3B,MAAMrR,EAAQuI,EA2BRtI,EAAOuI,EAIP8I,EAAQd,EAAAA,WAERe,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChDwR,EAAcxQ,EAAc,IAAMhB,EAAM,IAAI,EAG5BgB,EAAc,IAAMhB,EAAM,MAAM,EACtD,MAAM+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAGnCgB,EAAc,IAAMhB,EAAM,OAAO,EAClD,MAAAyR,EAAef,EAAAA,OAAO3C,GAAsB,IAAI,EAChD2D,EAAahB,EAAAA,OAAOzC,GAAoB,IAAI,EAE5CvH,EAAWrS,EAAAA,qBAIXpd,EAAMoX,EAAAA,SAAS,IAAM,CACnB,MAAAsjB,EAAa3R,EAAM,oBACtB,MAAM,GAAG,EACT,IAAK/pB,GAAMA,EAAE,OAAO,CAAC,EAAE,YAAgB,EAAAA,EAAE,MAAM,CAAC,CAAC,EACjD,KAAK,EAAE,EAEV,MAAI,GADcywB,GAAA,YAAAA,EAAU,WAAW,IAAI,UAAUiL,MAAgB,SACnD5N,EAAgB,OAAS,CAAC/D,EAAM,GACzC,IAEFA,EAAM,mBAAA,CACd,EAEK4R,EAAevjB,EAAAA,SAAS,IAAM,CAClC,MAAMwjB,EAAa,IACnB,GAAI7R,EAAM,KAAM,OAAOA,EAAM,KAEzB,GAAA,OAAOA,EAAM,IAAO,SAAU,OAAOA,EAAM,IAAM6R,EAE/C,KAAA,CAAC,GAAA/+B,CAAM,EAAAktB,EAET,GAAAltB,IAAO,QAAa,SAAUA,EAAI,CAC9B,MAAAmyB,EAAOnyB,EAAG,MAAQ,GAClB2kB,EAAQ3kB,EAAG,MACb,IAAI,OAAO,KAAKA,EAAG,KAAK,EACrB,IAAKmD,GAAA,OAAM,SAAGA,CAAC,KAAIkc,EAAArf,EAAG,QAAH,YAAAqf,EAAWlc,EAAE,GAAE,EAClC,KAAK,GAAG,CAAC,GACZ,GACE67B,EAAO,CAACh/B,EAAG,MAAQA,EAAG,KAAK,OAAO,CAAC,IAAM,IAAMA,EAAG,MAAQ,GAAK,IAAIA,EAAG,IAAI,GAChF,MAAO,GAAGmyB,CAAI,GAAGxN,CAAK,GAAGqa,CAAI,IAAMD,CACrC,CAGO,OAAAA,CAAA,CACR,EAEKhH,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,QAAQ2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC7C,CAAC,gBAAgBA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,OACrD,CAAC,gBAAgBA,EAAM,YAAY,QAAQ,EAAGA,EAAM,eAAiB,OACrE,CAAC,kBAAkBA,EAAM,gBAAgB,EAAE,EAAGA,EAAM,mBAAqB,KACzE,CAAC,eAAeA,EAAM,eAAe,EAAE,EAAGA,EAAM,kBAAoB,OACpE,CAAC,eAAeA,EAAM,oBAAoB,QAAQ,EAAGA,EAAM,uBAAyB,OACpF,CAAC,0BAA0BA,EAAM,gBAAgB,EAAE,EAAGA,EAAM,mBAAqB,OACjF,CAAC,0BAA0BA,EAAM,qBAAqB,QAAQ,EAC5DA,EAAM,wBAA0B,OAClC,YAAawR,EAAY,QAAU,EACnC,EAAA,EAEIO,EAAa1jB,EAAAA,SAAS,KAAO,CACjC,MAASwc,EAAgB,MACzB,GAAM7K,EAAM,GACZ,KAAQ4R,EAAa,MACrB,OAAU5R,EAAM,OAChB,IAAOA,EAAM,SAAW,SAAWA,EAAM,KAAO,WAAa,OAC7D,SAAY+D,EAAgB,MACxB,KACA,OAAOuN,EAAM,SAAa,IAC1B,KACAA,EAAM,SACV,gBAAiBvN,EAAgB,MAAQ,GAAO,IAChD,EAAA,EAEIiO,EAAsB3jB,EAAAA,SAAS,KAAO,CAC1C,CAACgjB,EAAkB,EAAGE,EAAc,MACpC,SAAUxN,EAAgB,KAC1B,EAAA,EAEIkO,EAAWh8B,GAAwB,WACvC,GAAI8tB,EAAgB,MAAO,CACzB9tB,EAAE,eAAe,EACjBA,EAAE,yBAAyB,EAC3B,MACF,IAGGkc,EAAAsf,GAAA,YAAAA,EAAc,QAAd,YAAAtf,EAAqB,SAAU,IAAQuf,IAAe,MACtDA,IAAe,QAAQ9V,EAAA8V,EAAW,YAAX,YAAA9V,EAAsB,SAAU,OAExDsE,EAAAuR,GAAA,YAAAA,EAAc,QAAd,MAAAvR,EAAA,KAAAuR,IAGFxR,EAAK,QAAShqB,CAAC,CAAA,w0DCtHjB,MAAM+pB,EAAQuI,EAqDRtI,EAAOuI,EAKP0J,EAAenS,GAAUC,EAAO,UAAWC,CAAI,EAE/CsR,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDmS,EAAcnR,EAAc,IAAMhB,EAAM,IAAI,EAC5CoS,EAAiBpR,EAAc,IAAMhB,EAAM,OAAO,EAClDqS,EAAiBrR,EAAc,IAAMhB,EAAM,OAAO,EAClDsS,EAAiBtR,EAAc,IAAMhB,EAAM,OAAO,EAClDuS,EAAqBvR,EAAc,IAAMhB,EAAM,WAAW,EAE1D,CAAC,aAAAyB,EAAc,kBAAAE,GAAqBN,GAAerB,EAAO,CAC9D,eACA,qBACA,QACA,UACA,wBACA,YAAA,CACD,EAEKwS,EAAW9e,EAAAA,MAAM,IAAM,OAAO0e,EAAe,OAAU,SAAS,EAChEK,EAAW/e,EAAA,MACf,IAAMsM,EAAM,MAAQ,UAAYA,EAAM,OAAS,QAAaA,EAAM,KAAO,MAAA,EAErE0S,EAAUhf,EAAAA,MAAM,IAAMsM,EAAM,KAAO,MAAS,EAC5C2S,EAAiBjf,EAAAA,MAAM,IAAOsM,EAAM,OAAS,OAAY,GAAQ,CAACyS,EAAS,KAAM,EAEjFG,EAAYvkB,WAAS,IAAOqkB,EAAQ,MAAQ/Q,EAAkB,MAAQ,CAAA,CAAG,EAEzEkJ,EAAkBxc,EAAAA,SAAS,IAAM,CACrC,CAAC,OAAO2R,EAAM,IAAI,EAAE,EACpB,CACE,CAAC,OAAOA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC5C,OAAUuR,EAAc,OAASa,EAAe,MAChD,eAAgBD,EAAY,MAC5B,YAAaE,EAAe,MAC5B,SAAYtO,EAAgB,KAC9B,CAAA,CACD,EAEK8O,EAAcnf,EAAAA,MAAM,IAAOgf,EAAQ,MAAQI,GAAQ9S,EAAM,KAAO,IAAMA,EAAM,GAAI,EAEhFiS,EAAWh8B,GAAwB,CACvC,GAAI8tB,EAAgB,MAAO,CACzB9tB,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB,MACF,CACAgqB,EAAK,QAAShqB,CAAC,EACXu8B,EAAS,QACEN,EAAA,MAAQ,CAACE,EAAe,MACvC,8kDC9HF,MAAMpS,EAAQuI,EA+BRtI,EAAOuI,EAOPyI,EAAQC,EAAAA,WAORz5B,EAAUuX,MAAwB,IAAI,EAEtC4U,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAChD8S,EAAa9X,GAAgBxjB,CAAO,EAEpCu7B,EAAqBhS,EAAc,IAAMhB,EAAM,WAAW,EAC1DiT,EAAcjS,EAAc,IAAMhB,EAAM,IAAI,EAC5CkT,EAAmBlS,EAAc,IAAMhB,EAAM,SAAS,EACtDmT,EAAqBnS,EAAc,IAAMhB,EAAM,WAAW,EAC1DoT,EAAsBpS,EAAc,IAAMhB,EAAM,YAAY,EAC5DqT,EAAiBre,GAAY,IAAMgL,EAAM,QAAQ,EAEjDsT,EAAe5f,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,KAAK,CAAC,EAEpDsC,EAAkB7f,QAAM,IAAO,OAAOkQ,EAAW,OAAU,UAAY,EAAIA,EAAW,KAAM,EAE5FiH,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,oBAAqBgT,EAAmB,KACxC,EAAA,EAEIQ,EAAenlB,EAAAA,SAAS,IAAM,CAAC2R,EAAM,WAAY,CAAC,mBAAoBsT,EAAa,KAAM,CAAA,CAAC,EAE1F,CACJ,SAAAhgB,EACA,MAAAC,EACA,QAAAqP,EACA,OAAApP,EACA,KAAA0C,EACA,SAAAuM,EACA,MAAOgR,CAAA,EACLpR,GAAakR,EAAiBF,EAAgB,CAChD,UAAW,OAAOzP,EAAW,OAAU,UAAYsP,EAAiB,KAAA,CACrE,EAEKQ,EAAiBhgB,EAAA,MAAM,IAC3B,OAAOkQ,EAAW,OAAU,UACxBA,EAAW,MACXtQ,EAAS,OAAU6f,EAAmB,OAAS1Q,EAAS,KAAA,EAGxDkR,EAAatlB,EAAAA,SAAS,KAAO,CACjC,QAASilB,EAAa,MAAQtT,EAAM,aAAe,OACnD,MAAOwT,EAAa,KACpB,EAAA,EAEF5b,EAAAA,YAAY,IAAM,CACXqI,EAAA,kBAAmBwT,EAAY,KAAK,CAAA,CAC1C,EAED,MAAM5xB,EAAO,IAAM,CACjBoe,EAAK,OAAO,EAER,OAAO2D,EAAW,OAAU,UAC9BA,EAAW,MAAQ,IAEnBA,EAAW,MAAQ,EACd1N,KAGP+J,EAAK,QAAQ,CAAA,EAGT2T,EAAe,IAAM,CACrBR,EAAoB,OAClB7f,GAAA,EAGF7D,OAAAA,QAAAqjB,EAAa1M,GAAa,CAC9B,GAAIA,EAAU,CACCuN,IACb,MACF,CACOpgB,GAAA,CACR,EAEDgY,EAAA,gBAAgBtV,CAAI,EAEPgV,EAAA,CACX,MAAA3X,EACA,QAAAqP,EACA,OAAApP,EACA,KAAA0C,CAAA,CACD,gjCCmGY2d,GAAet/B,GAA6C,CACjE,MAAAu/B,EAAY,OAAOv/B,GAAU,UAAY+4B,GAAU/4B,CAAK,EAAIg6B,GAAQh6B,EAAO,CAAC,EAAIA,EACtF,OAAO,OAAOu/B,GAAc,SAAW,GAAGA,CAAS,KAAOA,GAAa,IACzE,giDAvNA,MAAM9T,EAAQuI,EA2ERtI,EAAOuI,EAKPyI,EAAQC,EAAAA,WAOR,CAAC,aAAAzP,EAAc,kBAAAE,CAAiB,EAAIN,GAAerB,CAAK,EAExDyQ,EAAaC,EAAAA,OAAO/C,GAAyB,IAAI,EAEjDoG,EAAQ,CAAC,KAAM,KAAM,IAAI,EACzBC,EAAkB,GAClBC,EAAwBD,EAAkB,GAE1CE,EAAoBlT,EAAc,IAAMhB,EAAM,UAAU,EACxDmU,EAAkBnT,EAAc,IAAMhB,EAAM,QAAQ,EACpDoU,EAAgBpT,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDqU,EAAgBrT,EAAc,IAAMhB,EAAM,MAAM,EAChDoH,EAAiBpG,EAAc,IAAMhB,EAAM,OAAO,EAClDqH,EAAoBrG,EAAc,IAAMhB,EAAM,UAAU,EACxDsH,EAAuBtG,EAAc,IAAMhB,EAAM,aAAa,EAC9DuH,EAAsBvG,EAAc,IAAMhB,EAAM,YAAY,EAC5DwH,EAAoBxG,EAAc,IAAMhB,EAAM,UAAU,EAExDsU,EAAiB5gB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,OAAO,CAAC,EACxDsD,EAAe7gB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,KAAK,CAAC,EAEpDuD,EAAY9gB,EAAAA,MAAM,IAAM,CAAC,CAACsM,EAAM,OAASA,EAAM,QAAU,IAAMuU,EAAa,KAAK,EACjFE,EAAiB/gB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,KAAK,QAAS4D,EAAc,KAAK,EAC1EK,EAAehhB,QAAM,KAAM+c,GAAA,YAAAA,EAAY,KAAK,QAASoD,GAAY7T,EAAM,IAAI,CAAC,EAC5E2U,EAAkBjhB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,QAAQ,QAASzQ,EAAM,OAAO,EACxE4U,EAAkBlhB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,QAAQ,QAASrJ,EAAe,KAAK,EAC/EyN,EAAqBnhB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,WAAW,QAASpJ,EAAkB,KAAK,EACxFyN,EAAwBphB,EAAA,MAC5B,KAAM+c,GAAA,YAAAA,EAAY,cAAc,QAASnJ,EAAqB,KAAA,EAE1DyN,EAAuBrhB,EAAA,MAC3B,KAAM+c,GAAA,YAAAA,EAAY,aAAa,QAASlJ,EAAoB,KAAA,EAExDyN,EAAqBthB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,WAAW,QAASjJ,EAAkB,KAAK,EAExFyN,EAAuBhO,GAAwB,KAAO,CAC1D,QAAS2N,EAAgB,MACzB,WAAYC,EAAmB,MAC/B,cAAeC,EAAsB,MACrC,aAAcC,EAAqB,MACnC,WAAYC,EAAmB,KAC/B,EAAA,EACIE,EAAejT,GAAuB,KAAO,CACjD,QAASjC,EAAM,aACf,UAAWA,EAAM,eACjB,YAAaA,EAAM,gBACnB,EAAA,EAEImV,EAAYzhB,QAAM,IAAOsM,EAAM,QAAU,GAAO,GAAKA,EAAM,KAAM,EAEjEoV,GAAsB1hB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,YAAY,QAASzQ,EAAM,WAAW,EACpFqV,GAAoB3hB,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,UAAU,QAASzQ,EAAM,SAAS,EAE9EsV,EAA4BrT,GAAuB,KAAO,CAC9D,UAAWoT,GAAkB,MAC7B,YAAaD,GAAoB,MACjC,QAAST,EAAgB,KACzB,EAAA,EAEI9J,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAE1Bb,EAAe,QAAU,GAAO,OAAYQ,EAAqB,MACjE,CACE,CAAC,YAAYjV,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,MAAQ+T,EAAM,QAAQF,GAAY7T,EAAM,IAAI,CAAC,IAAM,GACvF,CAAC,OAAO2U,EAAgB,KAAK,EAAE,EAAGP,EAAc,MAAQO,EAAgB,QAAU,KAAO,GACzF,MAAS,CAACP,EAAc,OAASO,EAAgB,QAAU,MAAQL,EAAe,MAClF,IAAOF,EAAc,MAErB,YAAaK,EAAe,QAAU,EACxC,CAAA,CACD,EAEKc,GAAalnB,EAAAA,SAAqB,IAAM,CACtC,MAAApP,EAAS+gB,EAAM,aAAe,MAK7B,MAAA,CACL,UAJA+T,EAAM,QAAQW,EAAa,OAAS,IAAI,IAAM,GAC1C,QAAQA,EAAa,KAAK,MAAMT,CAAqB,IACrD,KAEkB,GACtB,IAAKE,EAAgB,MAAQl1B,EAAS,GACtC,OAAQk1B,EAAgB,MAAQ,GAAKl1B,EACrC,KAAMi1B,EAAkB,MAAQj1B,EAAS,GACzC,MAAOi1B,EAAkB,MAAQ,GAAKj1B,CAAA,CACxC,CACD,EAEKu2B,GAAgBnnB,EAAAA,SAAqB,IAAM,CAC/C,MAAMonB,EACJ1B,EAAM,QAAQW,EAAa,OAAS,IAAI,IAAM,GAC1C,QAAQA,EAAa,KAAK,MAAMV,CAAe,IAC/C,KACN,OAAOyB,EAAW,CAAC,SAAAA,CAAQ,EAAI,EAAC,CACjC,EAEKC,EAAcrnB,EAAAA,SAAS,IAAM,QAC3B,MAAAsnB,IAAexjB,GAAAse,GAAA,YAAAA,EAAY,eAAZ,YAAAte,GAA0B,QAAS,EAElD5d,EACJmgC,EAAa,OAASiB,EAAe,QAAQjB,EAAa,KAAK,OAAOiB,CAAY,IAAM,KAC1F,OAAOphC,EAAQ,CAAC,WAAYA,EAAO,YAAaA,GAAS,EAAC,CAC3D,EAEKs+B,EAAcnf,EAAA,MAAM,IACxB+N,EAAa,MAAQqR,GAAQsB,EAAc,MAAQ,SAAW,MAAA,EAG1D/pB,EAAgBgE,EAAAA,SAAwB,KAAO,CACnD,GAAGqnB,EAAY,MACf,MAAOhB,EAAa,OAAS,OAC7B,OAAQA,EAAa,OAAS,MAC9B,EAAA,EAEIzC,EAAWh8B,GAAwB,CACnC,CAAC8tB,EAAgB,QAAUtC,EAAa,OAAS2S,EAAc,QAAQnU,EAAK,QAAShqB,CAAC,CAAA,EAGtF2/B,EAAc3/B,GAAa,CAC/BgqB,EAAK,YAAahqB,CAAC,CAAA,k9CChPrB,MAAM+pB,EAAQuI,EAmCR8L,EAAgBrT,EAAc,IAAMhB,EAAM,MAAM,EAChDoH,EAAiBpG,EAAc,IAAMhB,EAAM,OAAO,EAClDqH,EAAoBrG,EAAc,IAAMhB,EAAM,UAAU,EACxDsH,EAAuBtG,EAAc,IAAMhB,EAAM,aAAa,EAC9DuH,EAAsBvG,EAAc,IAAMhB,EAAM,YAAY,EAC5DwH,EAAoBxG,EAAc,IAAMhB,EAAM,UAAU,EACxD6V,EAAgB7gB,GAAY,IAAMgL,EAAM,OAAO,EAE/C0U,EAAermB,EAAAA,SAAS,IAAMwlB,GAAY7T,EAAM,IAAI,CAAC,EACrD2V,EAAejiB,EAAA,MAAM,IAAM,KAAK,IAAI,KAAK,IAAImiB,EAAc,MAAO,CAAC,EAAG,CAAC,EAAI,CAAC,EAE5EC,EAAeznB,EAAAA,SAAqB,IAAM,CACxC,MAAA9Z,EAAQmgC,EAAa,MAAQ,QAAQA,EAAa,KAAK,MAAMiB,EAAa,KAAK,IAAM,KAC3F,OAAOphC,EAAQ,CAAC,YAAaA,EAAO,aAAcA,GAAS,EAAC,CAC7D,EAEDg7B,OAAAA,EAAAA,QAAQ5B,GAAyB,CAC/B,aAAAgI,EACA,KAAMjiB,EAAA,MAAM,IAAMsM,EAAM,IAAI,EAC5B,OAAQqU,EACR,QAASjN,EACT,WAAYC,EACZ,cAAeC,EACf,aAAcC,EACd,WAAYC,EACZ,QAAS9T,EAAA,MAAM,IAAMsM,EAAM,OAAO,EAClC,UAAWtM,EAAA,MAAM,IAAMsM,EAAM,SAAS,EACtC,YAAatM,EAAA,MAAM,IAAMsM,EAAM,WAAW,CAAA,CAC3C,msCC9DD,MAAMA,EAAQuI,EA8CR4J,EAAcnR,EAAc,IAAMhB,EAAM,IAAI,EAC5C+V,EAAuB/U,EAAc,IAAMhB,EAAM,aAAa,EAC9DgW,EAAsBhV,EAAc,IAAMhB,EAAM,YAAY,EAC5DuR,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDsV,EAA4BrT,GAAuBjC,CAAK,EAExD,CAAC,aAAAyB,EAAc,kBAAAE,GAAqBN,GAAerB,EAAO,CAC9D,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MAAA,CACD,EAEK6S,EAAcnf,EAAM,MAAA,IAAO+N,EAAa,MAAQqR,GAAQ9S,EAAM,GAAI,EAElE6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,OAAU/D,EAAc,MACxB,SAAYxN,EAAgB,MAC5B,eAAgBoO,EAAY,MAC5B,qDACE4D,EAAqB,OAASC,EAAoB,MACpD,yCAA0CA,EAAoB,MAC9D,uBAAwBvU,EAAa,KACvC,CAAA,CACD,ogCC7ED,MAAMzB,EAAQuI,EAsCRtI,EAAOuI,EAIP+I,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAEpD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,OAAQkjB,EAAc,KACtB,EAAA,EAEIsB,EAAcnf,EAAAA,MAAM,IAAO6d,EAAc,MAAQ,OAASuB,EAAM,EAEhEmD,EAAsBviB,EAAM,MAAA,IAAO6d,EAAc,MAAQvR,EAAM,YAAc,MAAU,EAEvF2B,EAAoBtT,EAAA,SAAS,IACjCwkB,EAAY,QAAU,OAClBjR,GAAK5B,EAAO,CACV,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MACD,CAAA,EACD,CAAC,CAAA,EAGDiS,EAAWh8B,GAAwB,CACnC,GAAA8tB,EAAgB,OAASwN,EAAc,MAAO,CAChDt7B,EAAE,eAAe,EACjBA,EAAE,yBAAyB,EAC3B,MACF,CACK8tB,EAAgB,OAAO9D,EAAK,QAAShqB,CAAC,CAAA,0gBC7F7C,MAAM+pB,EAAQuI,EAgBR2N,EAAarU,KAEbsU,EAAwB9nB,EAAAA,SAAiC,IAAM,CACnE,MAAM+nB,EAAapW,EAAM,QAASkW,GAAA,YAAAA,EAAY,QAAS,CAAA,EACvD,IAAIG,EAAgB,GAcb,OAbOD,EAAW,IAAI,CAACnQ,EAAMqQ,KAC9B,OAAOrQ,GAAS,WACXA,EAAA,CAAC,KAAMA,GACVqQ,EAAMF,EAAW,OAAS,IAAGnQ,EAAK,KAAO,MAE3CA,EAAK,SAAwBoQ,EAAA,IAG7B,CAACpQ,EAAK,QAAU,CAACoQ,IACdpQ,EAAA,OAASqQ,EAAM,IAAMF,EAAW,QAEhCnQ,EACR,CACM,CACR,wlBC3CD,MAAMjG,EAAQuI,EAoBRgO,EAAkBvV,EAAc,IAAMhB,EAAM,QAAQ,EAEpD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,YAAa,CAACkoB,EAAgB,MAC9B,CAAC,aAAavW,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KAC5C,qBAAsBuW,EAAgB,KACtC,EAAA,2aC1BF,MAAMvW,EAAQuI,EAmBRiO,EAAiBxV,EAAc,IAAMhB,EAAM,OAAO,EAElD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,0BAA2BmoB,EAAe,KAC1C,EAAA,klCChBF,MAAMxW,EAAQuI,EAyBRvE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5CyW,EAAezV,EAAc,IAAMhB,EAAM,KAAK,EAC9C0W,EAAe1V,EAAc,IAAMhB,EAAM,KAAK,EAC9C2W,EAAgB3V,EAAc,IAAMhB,EAAM,MAAM,EAChD4W,EAAe5V,EAAc,IAAMhB,EAAM,KAAK,EAC9C6W,EAAmB7V,EAAc,IAAMhB,EAAM,SAAS,EACtD8W,EAAe9V,EAAc,IAAMhB,EAAM,KAAK,EAC9C+W,EAAa/V,EAAc,IAAMhB,EAAM,GAAG,EAC1CgX,EAAmBhW,EAAc,IAAMhB,EAAM,SAAS,EACtDiX,EAAejiB,GAAY,IAAMgL,EAAM,QAAU,GAAG,EACpDkX,EAAcliB,GAAY,IAAMgL,EAAM,OAAS,GAAG,EAClDoH,EAAiBpG,EAAc,IAAMhB,EAAM,OAAO,EAClDqH,EAAoBrG,EAAc,IAAMhB,EAAM,UAAU,EACxDsH,EAAuBtG,EAAc,IAAMhB,EAAM,aAAa,EAC9DuH,EAAsBvG,EAAc,IAAMhB,EAAM,YAAY,EAC5DwH,EAAoBxG,EAAc,IAAMhB,EAAM,UAAU,EAExDiV,EAAuBhO,GAAwB,KAAO,CAC1D,QAASG,EAAe,MACxB,WAAYC,EAAkB,MAC9B,cAAeC,EAAqB,MACpC,aAAcC,EAAoB,MAClC,WAAYC,EAAkB,KAC9B,EAAA,EAEI2P,EAAiB9oB,EAAA,SAAS,IAC9B,OAAO2R,EAAM,QAAW,SACpBA,EAAM,OACH,MAAM,GAAG,EACT,OAAQvjB,GAAMA,CAAC,EACf,KAAK,GAAG,EACX,MAAM,QAAQujB,EAAM,MAAM,EAC1BA,EAAM,OAAO,OAAQvjB,GAAMA,CAAC,EAAE,KAAK,GAAG,EACtC,MAAA,EAGA26B,EAAgB/oB,EAAA,SAAS,IAC7B,OAAO2R,EAAM,OAAU,SACnBA,EAAM,MACH,MAAM,GAAG,EACT,OAAQvjB,GAAMA,CAAC,EACf,KAAK,GAAG,EACX,MAAM,QAAQujB,EAAM,KAAK,EACzBA,EAAM,MAAM,OAAQvjB,GAAMA,CAAC,EAAE,KAAK,GAAG,EACrC,MAAA,EAGA46B,EAAqBhpB,EAAAA,SAAkE,IAAM,CACjG,MAAMjL,EAAQ,OAAO,MAAM8zB,EAAY,KAAK,EAAI,OAAYA,EAAY,MAClE7zB,EAAS,OAAO,MAAM4zB,EAAa,KAAK,EAAI,OAAYA,EAAa,MAC3E,OAAIR,EAAa,MACXrzB,IAAU,QAAaC,IAAW,OAC7B,CAAC,OAAQD,EAAO,MAAAA,GAErBA,IAAU,QAAaC,IAAW,OAC7B,CAAC,OAAAA,EAAQ,MAAOA,GAElB,CAAC,OAAQ,EAAG,MAAO,CAAC,EAEtB,CACL,MAAAD,EACA,OAAAC,CAAA,CACF,CACD,EAEKi0B,EAAsB5jB,EAAA,MAAM,IAChC6jB,EAAgBF,EAAmB,MAAM,MAAOA,EAAmB,MAAM,OAAQrX,EAAM,UAAU,CAAA,EAG7F7lB,EAAYuZ,EAAA,MAAM,IACtBojB,EAAa,MACT,cACAC,EAAW,MACX,YACAJ,EAAc,MACd,UACA,MAAA,EAGA9L,EAAkBxc,EAAAA,SAAS,IAAM,CACrC4mB,EAAqB,MACrB,CACE,gBAAiB+B,EAAiB,MAClC,YAAaJ,EAAa,OAASC,EAAiB,MACpD,QAASA,EAAiB,MAC1B,CAAC,GAAG18B,EAAU,KAAK,EAAE,EAAGA,EAAU,QAAU,OAC5C,UAAWu8B,EAAa,OAASC,EAAc,KACjD,CAAA,CACD,EAEKY,EAAkB,CAACn0B,EAA2BC,EAA4Bm0B,IAC9E,oCAAoC,mBAAmB,eAAep0B,CAAK,aAAaC,CAAM,qDAAqDD,CAAK,IAAIC,CAAM;AAAA,mDACjHm0B,CAAK;AAAA,WAC7C,CAAC,yvCC7HZ,MAAMxX,EAAQuI,EAmCRkP,EAAgBzW,EAAc,IAAMhB,EAAM,MAAM,EAChD+W,EAAa/V,EAAc,IAAMhB,EAAM,GAAG,EAC1C8W,EAAe9V,EAAc,IAAMhB,EAAM,KAAK,EAC9C0X,EAAa1W,EAAc,IAAMhB,EAAM,GAAG,EAE1C2X,EAAYjkB,EAAA,MAAM,IACtBgkB,EAAW,MACP,eACAX,EAAW,MACX,iBACAU,EAAc,MACd,kBACAX,EAAa,MACb,gBACA,UAAA,EAGAc,EAAmBvpB,EAAAA,SAAS,IAAMogB,GAAKzO,EAAO,CAAC,SAAU,MAAO,MAAO,OAAO,CAAC,CAAC,mWChDtF,MAAMA,EAAQuI,EAiBR+M,EAA4BrT,GAAuBjC,CAAK,EAExD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,CAAC,UAAUtV,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,IAC7D,CAAA,CACD,+jBC7BD,MAAMA,EAAQuI,4mBCEd,MAAMvI,EAAQuI,EAkBRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,QAAQ2R,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,IACrD,EAAA,knBCAF,MAAMA,EAAQuI,EA8BR0I,EAAQC,EAAAA,WASR2G,EAAiB7W,EAAc,IAAMhB,EAAM,OAAO,EAClDsV,EAA4BrT,GAAuBjC,CAAK,EAExD8X,EAAepkB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,KAAK,CAAC,EACpD8G,EAAkBrkB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,QAAQ,CAAC,EAE1DpG,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,mBAAoBuC,EAAe,KACrC,CAAA,CACD,ggCCtED,MAAM7X,EAAQuI,2/CCgEd,MAAMvI,EAAQuI,EA4FR0I,EAAQC,EAAAA,WAWR8G,EAAmBhX,EAAc,IAAMhB,EAAM,SAAS,EACtDiY,EAAgBjX,EAAc,IAAMhB,EAAM,MAAM,EAChDkY,EAAkBlX,EAAc,IAAMhB,EAAM,QAAQ,EACpDmY,EAAgBnX,EAAc,IAAMhB,EAAM,MAAM,EAEhDoY,EAAgB1kB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,MAAM,CAAC,EACtDoH,EAAgB3kB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,MAAM,CAAC,EAEtDqE,EAA4BrT,GAAuBjC,CAAK,EAExD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,CAAC,QAAQtV,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,OACzC,CAAC,UAAUA,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,KAC3D,WAAYkY,EAAgB,MAC5B,mBAAoBD,EAAc,KACpC,CAAA,CACD,EAEKK,EAAUjqB,EAAAA,SAAS,KAAO,CAC9B,IAAK2R,EAAM,OACX,IAAKA,EAAM,OACX,OAAQA,EAAM,UACd,MAAOA,EAAM,SACb,OAAQA,EAAM,UACd,IAAKA,EAAM,OACX,MAAOA,EAAM,SACb,IAAKA,EAAM,MACX,EAAA,m3ECrMF,MAAMA,EAAQuI,EAkBRgQ,EAAiBvX,EAAc,IAAMhB,EAAM,OAAO,EAClDwY,EAAcxX,EAAc,IAAMhB,EAAM,IAAI,EAE5CyY,EAAgB/kB,EAAA,MAAM,IAC1B8kB,EAAY,MAAQ,YAAcD,EAAe,MAAQ,eAAiB,YAAA,wnDCgC5E,MAAMvY,EAAQuI,EA8CRtI,EAAOuI,EAMPyI,EAAQC,EAAAA,WAKRrN,EAAaL,GAAM,IAAMxD,EAAM,GAAI,UAAU,EAE7C4D,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEyY,EAAkB1X,EAAc,IAAMhB,EAAM,QAAQ,EACpD2Y,EAAqB3X,EAAc,IAAMhB,EAAM,WAAW,EAC1DoT,EAAsBpS,EAAc,IAAMhB,EAAM,YAAY,EAC5DiT,EAAcjS,EAAc,IAAMhB,EAAM,IAAI,EAC5C4Y,EAAkB5X,EAAc,IAAMhB,EAAM,QAAQ,EACpD6Y,EAAoB7X,EAAc,IAAMhB,EAAM,UAAU,EACxD8Y,EAAiB9X,EAAc,IAAMhB,EAAM,OAAO,EAClD+Y,EAAgB/X,EAAc,IAAMhB,EAAM,MAAM,EAChDgZ,EAAuBhkB,GAAY,IAAMgL,EAAM,cAAc,EAC7DqT,EAAiBre,GAAY,IAAMgL,EAAM,QAAQ,EACjDiZ,EAAejY,EAAc,IAAMhB,EAAM,IAAI,EAE7CkZ,EAAkBlqB,MAAI,EAAK,EAC3BmqB,EAAcnqB,MAAI,EAAK,EACvBnc,EAAYmc,MAAI,EAAI,EACpBoqB,EAAgBpqB,MAAwB,IAAI,EAC5CvX,EAAUuX,MAAwB,IAAI,EACtCqqB,EAAqBrqB,EAAAA,IAAI4U,EAAW,KAAK,EAEzCmP,EAAa9X,GAAgBxjB,CAAO,EAOpC6hC,EAAe5lB,EAAA,MACnB,IACE,+BAAgC7gB,EAAU,MAAiB,OAAT,MAAe,kBAC9DA,EAAU,MAAkB,MAAV,OACrB,EAAA,EAEE0mC,EAAe7lB,EAAA,MACnB,IAAM,sCAAsC7gB,EAAU,MAAQ,QAAU,KAAK,EAAA,EAGzE,CAAC,MAAA0gB,EAAO,OAAAC,CAAA,EAAUgB,GACtB,IAAM,CACemkB,EAAA,MAAQa,GAAK,EAAIC,GAAK,CAC3C,EACApG,EACA,CAAC,UAAW4F,EAAa,QAAU,UAAU,CAAA,EAGzCS,EAAWhmB,EAAA,MACf,IACGulB,EAAa,QAAU,IAAQE,EAAY,QAAU,IAASF,EAAa,QAAU,UAAA,EAEpFU,EAAStrB,EAAAA,SAAS,IAAM6e,GAAgB+D,EAAM,QAAS,gBAAgB,CAAC,EACxEpG,EAAkBxc,EAAAA,SAAS,KAAO,CAAC,gBAAiB4kB,EAAY,KAAO,EAAA,EAUvE2G,EAAwB1hC,UAC5B,WAAIvF,GAAgBuF,EAAO,CACzB,YAAa2rB,EAAW,MACxB,WAAY,GACZ,OAAQpsB,EAAQ,MAChB,UAAW5E,EAAU,MAAQ,QAAU,OACvC,KAAMwmC,EAAmB,MACzB,GAAIzV,EAAW,MACf,gBAAezR,EAAAinB,EAAc,QAAd,YAAAjnB,EAAqB,SAASyR,EAAW,SAAU,IAAA,CACnE,GAEGiW,EAAatlC,GAAwB,CACzC,GAAI2kC,EAAgB,QAAU,GAS1B,IAPAD,EAAa,QAAU,KACzBE,EAAY,MAAQ,IAElBO,EAAS,QAAU,IACdlmB,IAET3gB,EAAU,MAAQ,EAAA0B,EAAQqvB,EAAW,OACjCrvB,GAASolC,EAAO,MAAM,OAAQ,CAChC,GAAIZ,EAAc,MAAO,OACzBnV,EAAW,MAAQ,EACnB,MACF,CACA,GAAIrvB,EAAQ,EAAG,CACb,GAAIwkC,EAAc,MAAO,OACdnV,EAAA,MAAQ+V,EAAO,MAAM,OAAS,EACzC,MACF,CACAN,EAAmB,MAAQzV,EAAW,MACtCA,EAAW,MAAQrvB,EAAA,EAGfilC,GAAO,IAAY,CACbK,EAAAjW,EAAW,MAAQ,CAAC,CAAA,EAE1B6V,GAAO,IAAY,CACbI,EAAAjW,EAAW,MAAQ,CAAC,CAAA,EAG1BkW,EAAa/8B,GAAmB,CAChC27B,EAAgB,QAAU,IAC3B37B,GAAA,EAGC62B,EAAe,IAAM,CACrBR,EAAoB,OAClB7f,GAAA,EAEFwmB,GAAe,IAAM,CACpBL,EAAS,OACPlmB,GAAA,EAGH,CAAC,QAAAwmB,EAAA,EAAWxb,GAAS/mB,EAAS,CAClC,QAAS,GACT,cAAe,CACTqhC,EAAe,QAAU,IACvBvlB,GACR,EACA,YAAa,CACX,GAAIulB,EAAe,QAAU,GAAM,OACnC,MAAMmB,EAAe,IAAM,CACrBP,EAAS,QAAU,IAChBlmB,GAAA,EAEL,GAAAwmB,GAAQ,OAAShB,EAAqB,MAAO,CAC1CS,KACQQ,IACb,MACF,CACID,GAAQ,OAAS,CAAChB,EAAqB,QACpCQ,KACQS,IAEjB,CAAA,CACD,EAEKC,EAAgB,IAAM,CACrBja,EAAA,QAAS2Z,EAAqB,OAAO,CAAC,EAC3CV,EAAgB,MAAQ,EAAA,EAEpBiB,EAAe,IAAM,CACpBla,EAAA,OAAQ2Z,EAAqB,MAAM,CAAC,EACzCV,EAAgB,MAAQ,EAAA,EAKpBkB,EAAgB1kC,GAAgB,CAChCkuB,EAAW,QAAU,GACpBluB,EAAA,UAAU,IAAI,eAAe,CAClC,EAGF,OAAAohB,GACE,YACA,IAAM,CACJgjB,EAAUN,EAAI,CAChB,EACA,CAAC,OAAQ/hC,CAAO,CAAA,EAElBqf,GACE,aACA,IAAM,CACJgjB,EAAUL,EAAI,CAChB,EACA,CAAC,OAAQhiC,CAAO,CAAA,EAGlBiY,EAAA,MAAMupB,EAAc,IAAM,CACxBE,EAAY,MAAQ,EAAA,CACrB,EAEKzpB,QAAAqjB,EAAa1M,GAAa,CAC9B,GAAIA,EAAU,CACCuN,IACb,MACF,CACamG,IAAA,CACd,EAEY7O,EAAA,CACX,KAAAuO,GACA,MAAAlmB,EACA,KAAAimB,GACA,OAAAhmB,CAAA,CACD,EAED+b,EAAAA,QAAQhC,GAAsB,CAC5B,WAAY7Z,EAAA,MAAM,IAAMsM,EAAM,UAAU,EACxC,MAAOtM,EAAA,MAAM,IAAMsM,EAAM,QAAQ,EACjC,OAAQtM,EAAA,MAAM,IAAMsM,EAAM,SAAS,CAAA,CACpC,+2EC/QD,MAAMA,EAAQuI,EA2CR0I,EAAQC,EAAAA,WAWRT,EAAaC,EAAAA,OAAOnD,GAAsB,IAAI,EAE9C8M,EAAU3mB,EAAAA,MAAM,IAAMsM,EAAM,MAAQA,EAAM,UAAY,CAAC3pB,GAAY46B,EAAM,IAAI,CAAC,EAC9EqJ,EAAa5mB,EAAAA,MAAM,IAAMsM,EAAM,SAAWA,EAAM,aAAe,CAAC3pB,GAAY46B,EAAM,OAAO,CAAC,EAC1FsJ,EAAa7mB,EAAAA,MAAM,IAAM2mB,EAAQ,OAASC,EAAW,OAAS,CAACjkC,GAAY46B,EAAM,OAAO,CAAC,EAEzF5mB,EAAgBgE,EAAAA,SAAwB,KAAO,CACnD,WAAY,GACV2R,EAAM,aAAcyQ,GAAA,YAAAA,EAAY,WAAW,QAAS,oBACtD,2BACA,EAAA,EAEI+J,EAAyBnsB,EAAAA,SAAS,KAAO,CAC7C,SAAU2R,EAAM,mBAAqB,OACrC,CAAC,KAAKA,EAAM,gBAAgB,QAAQ,EAAGA,EAAM,mBAAqB,MAClE,EAAA,+7CC1GIya,GAAgBjO,GAAmB,GAAI,GAAI,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,EAAM,CAAA,EAC5FkO,GAAmBlO,GAAmB,SAAU,CAAC,EAAE,EAAG,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAK,CAAA,EAC7FmO,GAAkBnO,GAAmB,QAAS,CAAC,EAAE,EAAG,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAK,CAAA,EAEjGoO,GAAeC,kBAAgB,CAC7B,KAAM,OACN,MAAO,OAGP,MAAO,CACL,IAAK,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EACrE,KAAM,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAI,EAC5C,GAAGJ,GACH,OAAQ,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAI,EAC9C,GAAGC,GACH,MAAO,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAI,EAC7C,GAAGC,GACH,UAAW,CAAC,KAAM,OAAgD,QAAS,IAAI,EAC/E,IAAK,CAAC,KAAM,OAAQ,QAAS,KAAK,CACpC,EACA,MAAM3a,EAAO,CACX,MAAM8a,EAAa,CACjB,CAAC,QAASL,GAAe,WAAY,OAAQ,YAAa,KAAK,EAC/D,CAAC,QAASC,GAAkB,WAAY,QAAQ,EAChD,CAAC,QAASC,GAAiB,WAAY,OAAO,CAAA,EAG1CI,EAAa/Z,EAAc,IAAMhB,EAAM,GAAG,EAE1Cgb,EAAY3sB,EAAA,SAAS,IACzBysB,EAAW,QAASplC,GAAOstB,GAAWhD,EAAOtqB,EAAG,QAASA,EAAG,WAAYA,EAAG,WAAW,CAAC,CAAA,EAclF,MAAA,CACL,gBAZsB2Y,EAAAA,SAAS,IAAM,CACrC2sB,EAAU,MACV,CACE,IAAKD,EAAW,OAAU,CAACC,EAAU,MAAM,KAAM/kC,GAAM,QAAQ,KAAKA,CAAC,CAAC,GAAK,CAAC+pB,EAAM,KAClF,CAAC,OAAOA,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,KAC/B,CAAC,UAAUA,EAAM,MAAM,EAAE,EAAG,CAAC,CAACA,EAAM,OACpC,CAAC,SAASA,EAAM,KAAK,EAAE,EAAG,CAAC,CAACA,EAAM,MAClC,CAAC,cAAcA,EAAM,SAAS,EAAE,EAAG,CAAC,CAACA,EAAM,SAC7C,CAAA,CACD,CAGC,CAEJ,CACF,CAAC,EA3D4B,SAAAib,GAAAC,EAAEC,EAAeC,EAAAC,EAAAC,EAAAC,EAAA,sEAClC,MAAAC,EAAAA,eAAAN,EAAA,eAAA,CAAA,EAAA,uRCUZ,MAAMlb,EAAQuI,EAeRkT,EAAkBzmB,GAAY,IAAMgL,EAAM,SAAW,IAAK,CAAC,OAAQ,UAAA,CAAW,EAC9E0b,EAAkB1mB,GAAY,IAAMgL,EAAM,SAAW,IAAK,CAAC,OAAQ,UAAA,CAAW,EAC9E2b,EAAgB3a,EAAc,IAAMhB,EAAM,KAAK,EAE/C6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,UAAWstB,EAAc,QAAU,GAClC,kBAAoBA,EAAc,QAAU,GAC7C,CAAC,aAAaA,EAAc,KAAK,EAAE,EAAG,OAAOA,EAAc,OAAU,SACrE,CAAC,MAAMF,EAAgB,KAAK,EAAE,EAAG,CAAC,OAAO,MAAMA,EAAgB,KAAK,EACpE,CAAC,MAAMC,EAAgB,KAAK,EAAE,EAAG,CAAC,OAAO,MAAMA,EAAgB,KAAK,CACpE,EAAA,6pDC0CF,MAAM1b,EAAQuI,EAuCRtI,EAAOuI,EAqBP3E,EAAaL,GAAM,IAAMxD,EAAM,GAAI,UAAU,EAE7C4D,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEwI,EAAoBzH,EAAc4C,CAAU,EAC5CgY,EAAgB5a,EAAc,IAAMhB,EAAM,MAAM,EAChD6b,EAAiB7a,EAAc,IAAMhB,EAAM,OAAO,EAClD0P,EAAe1O,EAAc,IAAMhB,EAAM,KAAK,EAC9C8b,EAAmB9a,EAAc,IAAMhB,EAAM,SAAS,EACtD2W,EAAgB3V,EAAc,IAAMhB,EAAM,MAAM,EAChD+W,EAAa/V,EAAc,IAAMhB,EAAM,GAAG,EAC1C+b,EAAe/a,EAAc,IAAMhB,EAAM,KAAK,EAC9Cgc,EAAiBhb,EAAc,IAAMhB,EAAM,OAAO,EAClDiJ,EAAgBjI,EAAc,IAAMhB,EAAM,MAAM,EAChD+I,EAAiB/H,EAAc,IAAMhB,EAAM,OAAO,EAClDgJ,EAAgBhI,EAAc,IAAMhB,EAAM,MAAM,EAChDgE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5Cic,EAAuBjb,EAAc,IAAMhB,EAAM,aAAa,EAE9Dkc,EAAiBxoB,EAAA,MAAM,IAC3B,OAAOsM,EAAM,QAAW,UAAY,OAAOA,EAAM,QAAW,SAAWA,EAAM,OAAS,GAAA,EAElFmc,EAAiBnnB,GAAYknB,CAAc,EAE3CvgC,EAAWqT,MAAwB,IAAI,EACvCotB,EAASptB,MAAwB,IAAI,EACrCqtB,EAAcrtB,MAAwB,IAAI,EAC1CsD,EAAUtD,MAAwB,IAAI,EAEtCxR,EAAW6Q,EAAA,SAA+B,IAC9C2R,EAAM,WAAa,YAAcA,EAAM,WAAa,WAAa,OAAYA,EAAM,QAAA,EAE/EviB,EAAe4Q,EAAA,SAAmC,IACtD2R,EAAM,WAAa,YAAcA,EAAM,WAAa,WAAaA,EAAM,SAAW,MAAA,EAG9Esc,EAAqB5oB,QAAM,IAAQqoB,EAAa,MAA4BK,EAAO,MAA3BC,EAAY,KAAqB,EAE/FvlB,GACE,SACA,IAAM,CACJ8M,EAAW,MAAQ,CAAC6E,CACtB,EACA,CAAC,OAAQ6T,CAAkB,CAAA,EAE7BxlB,GACE,SACA,IAAM,CACJ8M,EAAW,MAAQ,CAAC6E,CACtB,EACA,CAAC,OAAQ9sB,CAAQ,CAAA,EAGb,MAAA4gC,EAAS,CAACtmC,EAAU+C,IAAc,cAElC,GADJ/C,EAAE,eAAe,EACb,CAACwyB,EAAkB,MAAO,CACvBsH,IACLxb,EAAAA,SAAS,IAAMgoB,EAAOtmC,EAAG+C,CAAC,CAAC,EAC3B,MACF,CACA,MAAMkC,GAAOiX,EAAAxW,EAAS,QAAT,YAAAwW,EAAgB,iBAAiB,gDAC9C,GAAKjX,EACL,IAAI0gB,GAAAjgB,EAAS,QAAT,MAAAigB,GAAgB,SAAS,SAAS,eAAgB,CACpD,MAAM4gB,EAAS7gC,EAAS,MAAM,cAAc,sBAAsB,EAC5D9G,EAAQ,MAAM,UAAU,QAAQ,KAAKqG,EAAMshC,CAAM,EAAIxjC,EACvDnE,GAAS,GAAKA,GAAQqG,GAAA,YAAAA,EAAM,WAASglB,EAAAhlB,EAAKrG,CAAK,IAAV,MAAAqrB,EAA6B,QAAM,MAE1Euc,EAAAvhC,EAAKlC,IAAM,GAAKkC,EAAK,OAAS,EAAI,CAAC,IAAnC,MAAAuhC,EAAsD,OAC1D,EAGU3lB,GAAA,UAAY7gB,GAAMsmC,EAAOtmC,EAAG,EAAE,EAAG,CAAC,OAAQqmC,CAAmB,CAAA,EAC7DxlB,GAAA,YAAc7gB,GAAMsmC,EAAOtmC,EAAG,CAAC,EAAG,CAAC,OAAQqmC,CAAA,CAAmB,EAC9DxlB,GAAA,UAAY7gB,GAAMsmC,EAAOtmC,EAAG,EAAE,EAAG,CAAC,OAAQ0F,CAAS,CAAA,EACnDmb,GAAA,YAAc7gB,GAAMsmC,EAAOtmC,EAAG,CAAC,EAAG,CAAC,OAAQ0F,CAAA,CAAS,EAEhE,MAAM+gC,EAAoBruB,EAAA,SAAS,IACjCod,GAAyB,CACvB,IAAKmQ,EAAc,MACnB,MAAOE,EAAiB,MACxB,IAAKD,EAAe,MACpB,YAAalF,EAAc,MAC3B,SAAUI,EAAW,KAAA,CACtB,CAAA,EAEG7M,EAAalb,MAAmB,CAAA,CAAE,EAClCmb,EAAqB9b,EAAAA,SAAuB,IAAM,CAClD,GAAA2R,EAAM,qBAAuB,OAC/B,OAAOA,EAAM,mBAET,MAAA2c,EACJ,OAAO3c,EAAM,QAAW,UAAY,OAAOA,EAAM,QAAW,SACxDmc,EAAe,MACfnc,EAAM,OACNqK,EAAoB,CAACC,GAAiBqS,CAAW,CAAC,EACpD,OAAA1T,EAAc,QAAU,IACtBoB,EAAA,KACF3pB,GAAK,CACH,SAAUlD,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGD+I,EAAe,QAAU,IACvBsB,EAAA,KACFpmB,GAAM,CACJ,SAAUzG,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,eAAA,CAChB,CAAA,EAGDgJ,EAAc,QAAU,IACtBqB,EAAA,KACFK,GAAe,CACb,SAAUltB,EAAS,MACnB,aAAcC,EAAa,MAC3B,QAASuiB,EAAM,gBACf,MAAM,CAAC,eAAAhb,EAAgB,gBAAAD,GAAkB,CACvCmlB,EAAW,MAAQ,CACjB,UAAWnlB,EAAkB,GAAGA,CAAe,KAAO,OACtD,SAAUC,EAAiB,GAAGA,CAAc,KAAO,MAAA,CAEvD,CAAA,CACD,CAAA,EAGEqlB,CAAA,CACR,EACK,CAAC,OAAA7d,EAAQ,eAAA2C,EAAA,EAAkBjB,GAAYouB,EAAoB3gC,EAAU,CACzE,UAAW+gC,EACX,WAAYvS,EACZ,SAAUzW,EAAA,MAAM,IAAMsM,EAAM,QAAQ,EACpC,qBAAsBzT,EAAA,CACvB,EAEKse,GAAkBxc,EAAAA,SAAS,KAAO,CACtC,OAAUutB,EAAc,MACxB,QAAWC,EAAe,MAC1B,UAAaC,EAAiB,MAC9B,kBAAmB9b,EAAM,WAAa,qBAAuB,CAAC0P,EAAa,KAC3E,EAAA,EAEIkN,EAAgBvuB,EAAAA,SAAS,IAAM,CACnC0tB,EAAa,MAAQ/b,EAAM,WAAaA,EAAM,YAC9C,CACE,WAAY0P,EAAa,MACzB,kBAAmB,CAACqM,EAAa,MACjC,2BAA4BC,EAAe,OAAS,CAACD,EAAa,MAClE,KAAQA,EAAa,MAAQ,OAAYtT,EAAkB,KAC7D,CAAA,CACD,EAEKoU,EAAgB,IAAM,CACnBxhB,GAAA,EAGHyhB,GAAgB5kC,GAAsB,CAC1C6jC,EAAa,MAAQ9b,EAAK,QAAS/nB,CAAK,EAAI2kC,GAAc,EAG5DzmB,GACEza,EACA,IAAM,CACA8sB,EAAkB,QAAUzI,EAAM,YAAc,IAAQA,EAAM,YAAc,YACvE3E,GAEX,EACA,CAAC,OAAQ,CAAC+gB,EAAQC,CAAW,CAAC,CAAA,EAEhC,MAAMU,GAAgB,IAAM,CACtBtU,EAAkB,QAAUzI,EAAM,YAAc,IAAQA,EAAM,YAAc,WACvE3E,GACT,EAGIyU,EAAQ,IAAM,CAClBlM,EAAW,OAASvI,GAAO,EAEvB0U,EAAO,IAAM,CACjBnM,EAAW,OAASvI,GAAO,EAEvBA,EAAS,IAAM,OACnB4E,EAAK,QAAQ,EACb,MAAM+c,EAAoBvU,EAAkB,MACtCxyB,EAAI,IAAIvD,GAAmBsqC,EAAoB,OAAS,MAAM,EAEpE,GADoB/c,EAApB+c,EAAyB,OAAkB,OAAV/mC,CAAC,EAC9BA,EAAE,iBAAkB,CACFgqB,EAApB+c,EAAyB,iBAAyB,gBAAT,EACzC,MACF,CACApZ,EAAW,MAAQ,CAACoZ,EACA/c,EAApB+c,EAAyB,SAAiB,OAAT,GACjC7qB,EAAAG,EAAQ,QAAR,MAAAH,EAAe,cAAc,IAAI,MAAM,WAAW,EAAC,EAGrDzC,OAAAA,EAAA,MAAM+Y,EAAmB,IAAM,CACtBjc,GAAA,CACR,EAEY0e,EAAA,CACX,MAAA4E,EACA,KAAAC,EACA,OAAA1U,CAAA,CACD,EAEDkU,EAAAA,QAAQvB,GAAsB,CAC5B,GAAInK,EACJ,KAAAkM,EACA,MAAAD,EACA,OAAAzU,EACA,QAASoN,EACT,MAAOiH,CAAA,CACR,mmFChUD,MAAM1P,EAAQuI,EA0BR0U,EAAWvpB,EAAAA,MAAM,IAAOsM,EAAM,GAAK,GAAGA,EAAM,EAAE,mBAAqB,MAAU,EAC7Ekd,EAAaxpB,EAAM,MAAA,IAAOsM,EAAM,YAAc,SAAW,OAAY,SAAU,EAE/E6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC2R,EAAM,YACN,CACE,CAAC,QAAQA,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,IAC3D,CAAA,CACD,gkDClCD,MAAMA,EAAQuI,EAoCRtI,EAAOuI,EAIP,CAAC,MAAO8H,EAAc,GAAGgB,GAASd,EAAS,SAAA,EAE3Ce,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAOpD,CAAC,aAAAyB,EAAc,kBAAAE,CAAiB,EAAIN,GAAerB,CAAK,EAExD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC2R,EAAM,UACN,CACE,OAAQuR,EAAc,MACtB,SAAUxN,EAAgB,MAC1B,CAAC,QAAQ/D,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEK6S,EAAcnf,EAAAA,MAAM,IAAO+N,EAAa,MAAQqR,GAAQ9S,EAAM,KAAO,IAAM,QAAS,EAEpFyR,EAAef,EAAAA,OAAO3C,GAAsB,IAAI,EAChDoP,EAAezM,EAAAA,OAAO1C,GAAsB,IAAI,EAChD0D,EAAahB,EAAAA,OAAOzC,GAAoB,IAAI,EAG5CgE,EAAWh8B,GAAwB,WACvCgqB,EAAK,QAAShqB,CAAC,EACXy7B,IAAe,QAAQvf,EAAAuf,GAAA,YAAAA,EAAY,YAAZ,YAAAvf,EAAuB,SAAU,MAC1DyJ,EAAA6V,GAAA,YAAAA,EAAc,QAAd,MAAA7V,EAAA,KAAA6V,KAEFvR,EAAAid,GAAA,YAAAA,EAAc,QAAd,MAAAjd,EAAA,KAAAid,EAAsB,o7BClFxB,MAAMnd,EAAQuI,EAiBRtI,EAAOuI,EAIP+I,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAOpD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC2R,EAAM,YACN,CACE,CAACA,EAAM,WAAW,EAAGuR,EAAc,MACnC,SAAUxN,EAAgB,MAC1B,CAAC,QAAQ/D,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC/C,CAAA,CACD,EAEKiS,EAAWh8B,GAAkB,CACjCgqB,EAAK,QAAShqB,CAAC,CAAA,61BC9CjB,MAAM+pB,EAAQuI,EAORtI,EAAOuI,EAIP/wB,EAAUuX,MAA4B,IAAI,EAE1CouB,EAAkBpc,EAAc,IAAMhB,EAAM,QAAQ,EACpDqd,EAAoBrc,EAAc,IAAMhB,EAAM,UAAU,EACxDsd,EAAmBtc,EAAc,IAAMhB,EAAM,SAAS,EAOtD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,gBAAiB+uB,EAAgB,MACjC,gBAAiBE,EAAiB,KAClC,EAAA,EAEIC,EAAatnC,GAAa,CAC9BgqB,EAAK,SAAUhqB,CAAC,CAAA,EAGL,OAAAi1B,EAAA,CACX,QAAAzzB,CAAA,CACD,q/BC9BD,MAAMuoB,EAAQuI,EAgBRiV,EAAmBxc,EAAc,IAAMhB,EAAM,SAAS,EACtDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9CwJ,EAAiBxI,EAAc,IAAMhB,EAAM,OAAO,EAElDyd,EAAe/pB,QAAM,IAAM8pB,EAAiB,QAAU,IAAQrZ,EAAa,QAAU,EAAK,EAE1F0G,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,UAAWovB,EAAa,MACxB,mBAAoB,CAACjU,EAAe,MACpC,kBAAmBA,EAAe,KAClC,EAAA,mzBCjCF,MAAMxJ,EAAQuI,EAsBRe,EAAgBtI,EAAc,IAAMhB,EAAM,MAAM,EAEhD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,QAAQ2R,EAAM,WAAW,EAAE,EAAGA,EAAM,cAAgB,KACrD,YAAa,CAACsJ,EAAc,KAC5B,EAAA,8jBCpBF,MAAMtJ,EAAQuI,EAgBRiV,EAAmBxc,EAAc,IAAMhB,EAAM,SAAS,EACtDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9CwJ,EAAiBxI,EAAc,IAAMhB,EAAM,OAAO,EAElDyd,EAAe/pB,QAAM,IAAM8pB,EAAiB,QAAU,IAAQrZ,EAAa,QAAU,EAAI,EAEzF0G,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,UAAWovB,EAAa,MACxB,iBAAkB,CAACjU,EAAe,MAClC,gBAAiBA,EAAe,KAChC,EAAA,4WCpCFkU,GAAe7C,kBAAgB,CAC7B,KAAM,mBACN,MAAO,OAGP,MAAO,CACL,IAAK,CACH,KAAM,OACN,QAAS,KACX,EACA,GAAI,CACF,KAAM,CAAC,OAAQ,MAAM,EACrB,QAAS,IACX,EACA,KAAM,CACJ,KAAM,QACN,QAAS,EACX,CACF,EACA,MAAM7a,EAAO,CAAC,MAAAiR,EAAO,MAAAK,GAAQ,CAC3B,MAAO,IACL,WAAA,OAAAtR,EAAM,MACF7N,EAAA8e,EAAM,UAAN,YAAA9e,EAAA,KAAA8e,GACAjR,EAAM,MAAQ,WACdsM,EAAE,EAAAqR,EAAA,SAAU,CAAC,GAAI3d,EAAM,IAAK,EAACpE,EAAAqV,EAAM,UAAN,YAAArV,EAAA,KAAAqV,EAAiB,CAAC,EAC/C3E,EAAAA,EAAEtM,EAAM,IAAK,CAAC,GAAGsR,GAAQ,EAACpR,EAAA+Q,EAAM,UAAN,YAAA/Q,EAAA,KAAA+Q,EAAiB,CAAC,EACpD,CACF,CAAC,goCCID,MAAMjR,EAAQuI,EA+CRtI,EAAOuI,EAMPyI,EAAQC,EAAAA,WAKRtN,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjE4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,YAAY,EAE/C4d,EAAuB5c,EAAc,IAAMhB,EAAM,aAAa,EAC9D8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD6d,EAAe7c,EAAc,IAAMhB,EAAM,KAAK,EAC9CoU,EAAgBpT,EAAc,IAAMhB,EAAM,MAAM,EAChD8d,EAAqB9c,EAAc,IAAMhB,EAAM,WAAW,EAC1D+d,EAAgB/c,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDsJ,EAAgBtI,EAAc,IAAMhB,EAAM,MAAM,EAChDge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAE9CyQ,EAAaC,EAAAA,OAAO7C,GAAkB,IAAI,EAE1Cx1B,EAAQ2W,MAAwB,IAAI,EAEpC,CAAC,QAAA6M,CAAA,EAAWL,GAASnjB,EAAO,CAChC,aAAcyrB,EAAiB,KAAA,CAChC,EAEKwQ,EAAiB5gB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,OAAO,CAAC,EAExDgN,EAAa5vB,EAAAA,SAAS,CAC1B,IAAK,KAAMoiB,GAAA,YAAAA,EAAY,WAAW,QAAS7M,EAAW,MACtD,IAAMsa,GAAW,CACf,GAAIA,IAAW,OACf,IAAIzN,IAAe,MAAQ,MAAM,QAAQyN,CAAM,EAAG,CAIhDzN,EAAW,WAAW,MAAQyN,EAC9B,MACF,CACAta,EAAW,MAAQsa,EACrB,CAAA,CACD,EAEKC,EAAmBzqB,EAAA,MACvB,IACE,CAAC,EAAEsM,EAAM,OAAQyQ,GAAA,YAAAA,EAAY,KAAK,UACjCuN,EAAgB,QAASvN,GAAA,YAAAA,EAAY,SAAS,OAAA,EAG7C2N,EAAgB1qB,QAAM,IAAMoqB,EAAmB,SAAUrN,GAAA,YAAAA,EAAY,QAAQ,QAAS,GAAM,EAE5F4N,EAAgBhwB,EAAAA,SAAS,KAAO,CACpC,MAAOwvB,EAAa,SAAUpN,GAAA,YAAAA,EAAY,MAAM,QAAS,IACzD,OAAQ2D,EAAc,SAAU3D,GAAA,YAAAA,EAAY,QAAQ,QAAS,IAC7D,OAAQnH,EAAc,SAAUmH,GAAA,YAAAA,EAAY,OAAO,QAAS,IAC5D,OAAQsN,EAAc,SAAUtN,GAAA,YAAAA,EAAY,OAAO,QAAS,IAC5D,MAAOtM,EAAa,QAASsM,GAAA,YAAAA,EAAY,MAAM,OAC/C,KAAMzQ,EAAM,OAAQyQ,GAAA,YAAAA,EAAY,KAAK,QAAS,KAC9C,cAAezQ,EAAM,gBAAiByQ,GAAA,YAAAA,EAAY,cAAc,QAAS,WACzE,EAAA,EACI5F,EAAkB7H,GAAWqb,CAAa,EAC1CC,EAAepb,GAAgBmb,CAAa,EAC5CE,EAAenb,GAAgBib,CAAa,EAErC,OAAAnT,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,QAASxjB,EACT,MAAO,IAAM,CACXwjB,EAAQ,MAAQ,EAClB,CAAA,CACD,i/DC5ID,MAAMmE,EAAQuI,EAiDRtI,EAAOuI,EAaP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,UAAU,EAC7Cwe,EAAehb,GAAM,IAAMxD,EAAM,KAAM,UAAU,EACjD8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtDye,EAAiBzd,EAAc,IAAMhB,EAAM,OAAO,EAClD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD6d,EAAe7c,EAAc,IAAMhB,EAAM,KAAK,EAC9Cge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpD0e,EAAiB1d,EAAc,IAAMhB,EAAM,OAAO,EAClDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9C2e,EAAkB3d,EAAc,IAAMhB,EAAM,QAAQ,EACpDsd,EAAmBtc,EAAc,IAAMhB,EAAM,SAAS,EAEtDvoB,EAAUuX,MAAwB,IAAI,EAEtC,CAAC,QAAA6M,CAAA,EAAWL,GAAS/jB,EAAS,CAClC,aAAcqsB,EAAiB,KAAA,CAChC,EAEDyL,EAAAA,QAAQ1B,GAAkB,CACxB,WAAAjK,EACA,OAAQ+a,EACR,cAAejrB,EAAA,MAAM,IAAMsM,EAAM,aAAa,EAC9C,KAAMtM,EAAA,MAAM,IAAMsM,EAAM,IAAI,EAC5B,KAAMwe,EACN,MAAOra,EACP,MAAO0Z,EACP,KAAMnqB,EAAA,MAAM,IAAMsM,EAAM,IAAI,EAC5B,OAAQtM,EAAA,MAAM,IAAM,CAACgrB,EAAe,KAAK,EACzC,SAAUV,EACV,QAASS,EACT,SAAU1a,CAAA,CACX,EAEKrU,QAAAkU,EAAayC,GAAa,CAC9BpG,EAAK,QAASoG,CAAQ,EACtB9R,EAAAA,SAAS,IAAM,CACb0L,EAAK,SAAUoG,CAAQ,CAAA,CACxB,CAAA,CACF,EAED,MAAMb,EAAmBnX,EAAA,SAAS,IAChC2R,EAAM,QAAQ,IAAI,CAACtqB,EAAI4yB,IACrB,OAAO5yB,GAAO,UAAY,OAAOA,GAAO,SACpC,CACE,MAAO,CACL,MAAOA,EACP,SAAUquB,EAAgB,KAC5B,EACA,KAAMruB,EAAG,SAAS,EAClB,KAAM,OACN,KAAM,OAAO,0BAA0B4yB,CAAG,EAAE,CAAA,EAE9C,CACE,MAAO,CACL,MAAO5yB,EAAGsqB,EAAM,UAAU,EAC1B,SAAUtqB,EAAGsqB,EAAM,aAAa,EAChC,GAAItqB,EAAG,MAAQA,EAAG,MAAQ,CAAC,CAC7B,EACA,KAAMA,EAAGsqB,EAAM,SAAS,EACxB,KAAMtqB,EAAGsqB,EAAM,SAAS,EACxB,KAAM,OAAO,0BAA0BsI,CAAG,EAAE,CAC9C,CACN,CAAA,EAGI+V,EAAgBhwB,EAAAA,SAAS,KAAO,CACpC,SAAU2vB,EAAgB,MAC1B,YAAahe,EAAM,YACnB,MAAOmE,EAAa,MACpB,UAAWmZ,EAAiB,MAC5B,QAASmB,EAAe,MACxB,QAASC,EAAe,MACxB,KAAM1e,EAAM,IACZ,EAAA,EACIgR,EAAgB3N,GAAagb,CAAa,EAC1CxT,EAAkBtH,GAAgB8a,CAAa,EAExC,OAAAnT,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,MAAO,IAAM,CACXA,EAAQ,MAAQ,EAClB,CAAA,CACD,s8CCzID,MAAMoV,EAAQC,EAAAA,WAKRlR,EAAQuI,EA0CRtI,EAAOuI,EAKP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAChD4D,EAAaL,GAAM,IAAMxD,EAAM,EAAE,EAEjC8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD4e,EAAmB5d,EAAc,IAAMhB,EAAM,SAAS,EACtD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD6e,EAAkB7d,EAAc,IAAMhB,EAAM,QAAQ,EACpD8e,EAAgB9d,EAAc,IAAMhB,EAAM,MAAM,EAG5BgB,EAAc,IAAMhB,EAAM,UAAU,EAC9D,MAAMge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9C+e,EAAkB/d,EAAc,IAAMhB,EAAM,OAAO,EAEnDmD,EAAaJ,GAAcoB,CAAY,EAEvC9rB,EAAQ2W,MAA6B,IAAI,EAEzC,CAAC,QAAA6M,CAAW,EAAAL,GAASnjB,EAAO,CAAC,aAAcyrB,EAAiB,KAAA,CAAM,EAElEsN,EAAe1d,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,KAAQ,CAAC,EACvD+N,EAAiBtrB,EAAA,MAAM,IAC3B,OAAOsM,EAAM,QAAW,SAAWA,EAAM,OAASA,EAAM,OAAO,KAAK,GAAG,CAAA,EAGnE6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC8U,EAAW,MACX,CACE,CAAC,gBAAgBnD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MACjD,CAAA,CACD,EAEKif,EAAYhpC,GAAa,SAC7B,MAAM1B,IACJ4d,EAAA9Z,EAAM,QAAN,YAAA8Z,EAAa,SAAU,QAAQyJ,EAAAvjB,EAAM,QAAN,YAAAujB,EAAa,SAAU,OAAY,KAAO,CAAC,GAAGvjB,EAAM,MAAM,KAAK,EACrFurB,EAAA,MAAQrvB,IAAU,KAAO,KAAOsqC,EAAgB,QAAU,GAAOtqC,EAAQA,EAAM,CAAC,EAC3F0rB,EAAK,SAAUhqB,CAAC,CAAA,EAGZipC,EAAUjpC,GAAa,CACvB6oC,EAAc,QAAU,IAC1B7oC,EAAE,eAAe,CACnB,EAMIkH,EAAQ,IAAM,CAClBymB,EAAW,MAAQ,IAAA,EAGflU,OAAAA,QAAAkU,EAAayC,GAAa,CAC1BA,IAAa,MAAQhuB,EAAM,QAAU,OACvCA,EAAM,MAAM,MAAQ,GACtB,CACD,EAEY6yB,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,QAASxjB,EACT,MAAO,IAAM,CACXwjB,EAAQ,MAAQ,EAClB,EACA,MAAA1e,CAAA,CACD,6sBCrIKgiC,GAAS,CAAC,QAAS,SAAU,UAAU,EAEvCC,GAAiBD,GAAO,IAAKnmC,GAAM,GAAGA,CAAC,kBAAkB,EAAE,OAG3DqmC,GAA8B,CAAC,GAAGF,GAAQ,IAAK,SAAU,OAAO,EAEzDG,GAAkB,QAClBC,GAA6B,mBAC7BC,GAA2B,iBAC3BC,GAAwB,cACxBC,GAAoB,UAEjCC,GAAe9E,kBAAgB,CAC7B,WAAY,CAAC,KAAA+E,GAAMC,qBAAAA,GAAsBC,SAAAA,GAAUC,UAAAA,GAAWC,mBAAAA,EAAkB,EAChF,MAAO,CACL,YAAa,CAAC,KAAM,CAAC,QAAS,MAAM,EAA4B,QAAS,MAAS,EAClF,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,cAAe,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACnE,YAAa,CAAC,KAAM,CAAC,MAAM,EAAG,QAAS,MAAS,EAChD,SAAU,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EAC1E,iBAAkB,CAAC,KAAM,OAAQ,QAAS,WAAW,EACrD,GAAI,CAAC,KAAM,OAAQ,QAAS,MAAS,EACrC,gBAAiB,CAAC,KAAM,OAAQ,QAAS,MAAS,EAClD,MAAO,CAAC,KAAM,OAAQ,QAAS,MAAS,EACxC,WAAY,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAChE,aAAc,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAClE,aAAc,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAClE,aAAc,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAClE,aAAc,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAClE,WAAY,CAAC,KAAM,CAAC,MAAO,OAAQ,MAAM,EAAG,QAAS,MAAS,EAC9D,UAAW,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EAC/D,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,YAAa,CAAC,KAAM,CAAC,QAAS,OAAQ,MAAM,EAAG,QAAS,MAAS,EACjE,SAAU,CAAC,KAAM,OAAQ,QAAS,MAAS,EAC3C,UAAW,CAAC,KAAM,OAAQ,QAAS,MAAS,EAC5C,YAAa,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EAC7E,MAAO,CAAC,KAAM,CAAC,QAAS,MAAM,EAAkC,QAAS,IAAI,EAC7E,QAAS,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EACzE,cAAe,CAAC,KAAM,OAAQ,QAAS,MAAS,EAChD,UAAW,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EAC3E,SAAU,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,CAC5E,EACA,MAAMhgB,EAAO,CACX,MAAM+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDigB,EAAqBjf,EAAc,IAAMhB,EAAM,WAAW,EAC1DmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9CwJ,EAAiBxI,EAAc,IAAMhB,EAAM,OAAO,EAClDsd,EAAmBtc,EAAc,IAAMhB,EAAM,SAAS,EACtDod,EAAkBpc,EAAc,IAAMhB,EAAM,QAAQ,EAEpDkgB,EAAiC,KACjCC,EAAc,CAAC,KAAM,KAAM,KAAM,KAAM,IAAI,EAG3CC,EAAkB,CAACpgB,EAAYyM,IACnC0T,EAAY,OAAO,CAACxrC,EAAkBi4B,IAAe,CAC7C,MAAAnJ,EAAS2L,GAAexC,IAAe,KAAO,GAAKA,EAAY,GAAGH,CAAM,OAAO,EAC/E4T,EAAoBrgB,EAAMyD,CAAM,GAAK,KAC3C,OAAI4c,IACFzT,IAAe,KACXj4B,EAAO,KAAK,QAAQ0rC,CAAS,EAAE,EAC/B1rC,EAAO,KAAK,QAAQi4B,CAAU,IAAIyT,CAAS,EAAE,GAG5C1rC,CACT,EAAG,CAAE,CAAA,EAGD2rC,EAAc,CAACtgB,EAAYyM,IAE/B0T,EAAY,OAAO,CAACxrC,EAAai4B,IAAuB,CAChD,MAAAnJ,EAAS2L,GAAexC,IAAe,KAAO,GAAKA,EAAY,GAAGH,CAAM,MAAM,EAChF,IAAA4T,EAAYrgB,EAAMyD,CAAM,EAGhB,OAAA4c,EAAAA,IAAc,GAAK,GAAOA,GAAa,GAE7C,OAAOA,GAAc,WAAcA,IAAc,SAEzCA,EAAAhS,GAAgBgS,EAAW,CAAC,EAE5BA,EAAAA,EAAY,EAAIA,EAAY,IAMtCA,IAGEzT,IAAe,KACjBj4B,EAAO,OAAO0rC,GAAc,UAAY,MAAQ,MAAM,EAAIA,EAE1D1rC,EAAOi4B,IAAe,OAAOyT,GAAc,UAAY,MAAQ,OAAO,EAAIA,GAGvE1rC,CACT,EAAG,EAAE,EAED4rC,EAAUvxB,MAAwB,IAAI,EAKtCwxB,EAAwB,CAACna,EAAyB1M,EAA0B,OAAS,CACzF,GAAIzkB,IAAc8qB,EAAM,UAAYugB,EAAQ,QAAU,KAAM,CAEpD,MAAAE,EAASnqC,GAAO,IAAI9B,GAAUwrB,EAAM,QAAQ,CAAC,GAAIugB,EAAQ,KAAK,EACpE,GAAIE,EAAQ,CACV,MAAM9pC,EAAO,mBACP+pC,GAAUra,GAAY,IAAI,MAAMlzB,EAAc,EAC9CwtC,GAAUhnB,GAAY,IAAI,MAAMxmB,EAAc,EAI9CytC,GAAOlqC,GAAQ+pC,EAAQ9pC,CAAI,GAAK,IACnC,MAAMxD,EAAc,EACpB,OAAQ0D,GAAO,CAAC8pC,EAAO,SAAS9pC,CAAE,CAAC,EACnC,OAAO6pC,CAAM,EACb,OAAO,CAAC7pC,EAAIhC,EAAO+rC,IAAQA,EAAI,QAAQ/pC,CAAE,IAAMhC,CAAK,EACpD,OAAQ4H,GAAMA,CAAC,EACf,KAAK,GAAG,EACR,OAECmkC,EACM9pC,GAAA2pC,EAAQ9pC,EAAMiqC,CAAG,EAEzB7pC,GAAW0pC,EAAQ9pC,CAAI,CAE3B,CACF,CAAA,EAGIkqC,EAAkBxyB,EAAAA,SAAS,IAAMiyB,EAAYtgB,EAAO,SAAS,CAAC,EAC9D8gB,EAAoBzyB,EAAAA,SAAS,IAAM+xB,EAAgBpgB,EAAO,OAAO,CAAC,EAClE+gB,EAAgB1yB,EAAAA,SAAS,IAAMiyB,EAAYtgB,EAAO,OAAO,CAAC,EAC1DghB,EAAe3yB,EAAA,SACnB,IAGE,OAAO,KAAKwyB,EAAgB,KAAK,EAAE,OAAS,GAAK,OAAO,KAAKE,EAAc,KAAK,EAAE,OAAS,CAAA,EAGzF5d,EAAaJ,GAAcoB,CAAY,EAEvCb,EAAsBrC,GAAe,IAAMjB,EAAM,YAAamE,CAAY,EAEhFzU,OAAAA,EAAA,MACE,IAAMwwB,EACN,CAAC7Z,EAAyB1M,IAA4B,CAChD0M,IAAa1M,GACf6mB,EAAsBna,EAAU1M,CAAQ,CAE5C,CAAA,EAGFrF,EAAAA,UAAU,IAAM,CACdC,EAAAA,SAAS,IAAM,CAGbisB,EAAsBN,CAAe,CAAA,CACtC,CAAA,CACF,EAoBM,CACL,gBAAAnc,EACA,mBAAAkc,EACA,aAAA9b,EACA,eAAAqF,EACA,iBAAA8T,EACA,gBAAAF,EACA,gBAAA8C,EACA,oBAAA5c,EACA,gBAAAud,EACA,aAAAG,EACA,kBAAAF,EACA,cAAAC,EACA,cA/BqB7oC,GAAsB,CAEvC,GAAA8nB,EAAM,UAAYugB,EAAQ,QAAU,KAAM,OAExC,KAAA,CAAC,OAAA7qB,CAAU,EAAAxd,EACX+oC,EAAUvrB,EAAUA,EAAuB,QAAU,GAIvD,GAAA2pB,GAA4B,QAAQ4B,CAAO,IAAM,GAAI,OAGzD,MAAMC,EAASzqC,GAAU2oC,GAAgBmB,EAAQ,KAAK,EAAE,OAAOpqC,EAAS,EACpE+qC,EAAO,SAAW,GACPlrC,GAAAkrC,EAAO,CAAC,CAAC,CACxB,EAiBA,WAAA/d,CAAA,CAEJ,EACA,QAAS,CACP,MAAMnD,EAAQ,KAAK,OACbiR,EAAQ,KAAK,OAEbp6B,EAAK2sB,KACL2d,EAAa,CAACnhB,EAAM,SAG1B,IAAIohB,EAAc,KAClB,MAAMC,EAAenT,GAAcoR,GAAiB,CAAI,EAAArO,CAAK,GAAKjR,EAAM,MAClEshB,EAAUD,EAAe3d,GAAM,YAAY,EAAI,KAEjD,GAAA2d,GAAgB,KAAK,aAAc,CAC/B,MAAAE,EAA+BJ,EAAa,SAAW,QAC7D,GAAI,KAAK,mBACHE,IACOD,EAAA9U,EAAA,EACPiV,EACA,CACE,MAAO,kBACP,GAAID,EACJ,IAAKthB,EAAM,UAAY,IACzB,EACAqhB,CAAA,GAGA,KAAK,aACED,EAAA9U,EAAAA,EAAEsT,GAAM,KAAK,cAAe,CAAC,QAAS,IAAMwB,EAAO,EAE5DA,EAAS9U,IAAE,MAAO,CAAI,EAAA,CAAC8U,CAAM,CAAC,MAE3B,CACL,MAAMI,EAAc,CAClB,QAASL,EAAa,KAAK,cAAgB,KAC3C,GAAI,KAAK,aAAe,KAAK,cAAgB,CAAC,EAC9C,IAAK,KAAK,aAAeI,EAAW,KACpC,GAAID,EACJ,IAAKthB,EAAM,UAAY,KACvB,SAAUmhB,EAAa,KAAO,KAC9B,MAAO,CACL,KAAK,aAAe,iBAAmB,aACvC,CACE,mBAAoBA,EACpB,iBAAkB,KAAK,cAAgBA,EACvC,OAAQ,CAAC,KAAK,cAAgBA,EAC9B,UAAW,CAAC,KAAK,cAAgB,CAACA,EAClC,CAAC,kBAAkBnhB,EAAM,SAAS,EAAE,EAAG,CAAC,CAACA,EAAM,SACjD,EACA,KAAK,kBACLA,EAAM,UACR,CAAA,EAEE,KAAK,aACPohB,EAAS9U,IAAEsT,GAAM4B,EAAa,CAAC,QAAS,IAAMH,EAAa,EAElDD,EAAA9U,EAAAA,EAAEiV,EAAUC,EAAaH,CAAY,CAElD,CACF,CAEA,IAAII,EAAmB,KACvB,MAAMC,EACJxT,GAAcqR,GAA4B,CAAI,EAAAtO,CAAK,GAAK,KAAK,gBACzD0Q,EAAoBD,EAAyBhe,GAAM,uBAAuB,EAAI,OAEhFge,IACiBD,EAAAnV,EAAA,EACjBuT,GACA,CACE,SAAU7f,EAAM,iBAChB,GAAI2hB,EACJ,MAAO,KAAK,aACZ,QAAS,KAAK,cAChB,EACA,CAAC,QAAS,IAAMD,CAAsB,CAAA,GAI1C,IAAIE,EAAiB,KACrB,MAAMC,EACJ3T,GAAcsR,GAA0B,CAAI,EAAAvO,CAAK,GAAK,KAAK,cACvD6Q,EAAkBD,EAAuBne,GAAM,qBAAqB,EAAI,OAE1Eme,IACeD,EAAAtV,EAAA,EACf0T,GACA,CACE,SAAUhgB,EAAM,iBAChB,GAAI8hB,EACJ,MAAO,KAAK,aACZ,QAAS,KAAK,cAChB,EACA,CAAC,QAAS,IAAMD,CAAoB,CAAA,GAKxC,IAAIE,EAAe,KACnB,MAAMC,EAAqB9T,GAAcuR,GAAuB,CAAI,EAAAxO,CAAK,GAAK,KAAK,YAC7EgR,EAAgBD,EAAqBte,GAAM,kBAAkB,EAAI,OACnEse,IACaD,EAAAzV,EAAA,EACbyT,GACA,CACE,GAAIkC,CACN,EACA,CAAC,QAAS,IAAMD,CAAkB,CAAA,GAQhC,MAAA9B,EAAmB,KAAK,gBAC5B,CACE+B,EACA,KAAK,eAAiB,GAAQN,EAAoB,KAClD,KAAK,eAAiB,GAAOG,EAAkB,IAAA,EAE9C,OAAQrlC,GAAMA,CAAC,EACf,KAAK,GAAG,GAAK,KAEZylC,EAAgB,CACpBhU,GAAcwR,GAAmB,CAAC,gBAAAQ,EAAiB,cAAA+B,EAAe,GAAAprC,EAAI,QAAAyqC,CAAA,EAAUrQ,CAAK,GAAK,GAC1FwQ,EACAG,EACAG,CAAA,EAEE,CAAC,KAAK,cAAgB,KAAK,iBAAiBG,EAAc,KAAKd,CAAM,EAEzE,IAAIe,EAAW7V,EAAA,EACb,MACA,CACE,IAAK,UACL,MAAO,CACL,CACE,gBAAiB,CAAC,KAAK,cAAgB,KAAK,eAC9C,CACF,CACF,EACA4V,CAAA,EAEE,KAAK,eACPC,EAAW7V,EAAAA,EAAEsT,GAAM,CAAC,IAAK,UAAW,GAAG,KAAK,eAAkB,EAAA,CAAC,QAAS,IAAMsC,CAAc,CAAA,GAO9F,MAAME,EAAW,CACf,MAAS,CACP,KAAK,WACL,CACE,gBAAiB,KAAK,gBACxB,CACF,EACA,GAAM5e,GAAM,IAAMxD,EAAM,EAAE,EAAE,MAC5B,SAAYmhB,EAAa,KAAK,gBAAkB,KAChD,KAAQA,EAAa,KAAO,QAC5B,eAAgB,KAAK,oBAGrB,kBAAmBA,GAAc,KAAK,aAAeG,EAAU,IAAA,EAG7D,OAAA,KAAK,cAAgB,CAACH,EACjB7U,EAAA,EAAEwT,GAAUsC,EAAU,CAAC,QAAS,IAAM,CAAChB,EAAQe,CAAQ,CAAA,CAAE,EAG3D7V,EAAA,EACL6U,EAAa,WAAa,MAC1BiB,EACA,KAAK,cAAgBjB,EACjB,CAAC7U,EAAA,EAAEwT,GAAU,KAAM,CAAC,QAAS,IAAM,CAACsB,EAAQe,CAAQ,CAAE,CAAA,CAAC,EACvD,KAAK,cAAgB,CAAC,KAAK,gBAC3B,CAACf,EAAQe,CAAQ,EACjB,CAACA,CAAQ,CAAA,CAEjB,CACF,CAAC,8nCC5XD,MAAMniB,EAAQuI,EA0CRtI,EAAOuI,EAUP,CAAC,MAAAnwB,EAAO,WAAAwrB,EAAY,oBAAAP,EAAqB,QAAA+e,EAAS,SAAApD,EAAU,OAAAqD,EAAQ,MAAAC,EAAO,KAAAC,CAAI,EACnF7e,GAAa3D,EAAOC,CAAI,EAEpB8D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDyiB,EAAkBzhB,EAAc,IAAMhB,EAAM,QAAQ,EACpD0iB,EAAmB1hB,EAAc,IAAMhB,EAAM,SAAS,EACtDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAE9CmD,EAAaJ,GAAcoB,CAAY,EAEvCwe,EAAgB3zB,MAAI,EAAK,EAEzB6b,EAAkBxc,EAAAA,SAAS,IAAM,CAC/B,MAAAu0B,EAAU5iB,EAAM,OAAS,QACzB6iB,EAAU7iB,EAAM,OAAS,QACxB,MAAA,CACLmD,EAAW,MACX,CACE,2BAA4Bwf,EAAc,MAC1C,aAAcC,EACd,eAAgBC,GAAY,CAAC7iB,EAAM,WAAa,CAAC4iB,EACjD,qBAAsBC,EACtB,yBAA0B7iB,EAAM,WAAa,CAAC4iB,GAAW,CAACC,EAC1D,CAAC,gBAAgB7iB,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,IAC1C,CAAA,CACF,CACD,EAEY,OAAAkL,EAAA,CACX,KAAAsX,EACA,QAASnqC,EACT,MAAAkqC,CAAA,CACD,4+CC/ED,MAAMviB,EAAQuI,EAyCRtI,EAAOuI,EAMPyI,EAAQC,EAAAA,WAKRtN,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjE4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,YAAY,EAE/C8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD6d,EAAe7c,EAAc,IAAMhB,EAAM,KAAK,EAC9CoU,EAAgBpT,EAAc,IAAMhB,EAAM,MAAM,EAChD8d,EAAqB9c,EAAc,IAAMhB,EAAM,WAAW,EAC1D+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDsJ,EAAgBtI,EAAc,IAAMhB,EAAM,MAAM,EAChDge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAE9CyQ,EAAaC,EAAAA,OAAO5C,GAAe,IAAI,EAEvCz1B,EAAQ2W,MAAwB,IAAI,EAEpC,CAAC,QAAA6M,CAAA,EAAWL,GAASnjB,EAAO,CAChC,aAAcyrB,EAAiB,KAAA,CAChC,EAEKwQ,EAAiB5gB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,OAAO,CAAC,EAExDgN,EAAa5vB,EAAAA,SAAS,CAC1B,IAAK,KAAMoiB,GAAA,YAAAA,EAAY,WAAW,QAAS7M,EAAW,MACtD,IAAMyC,GAAa,CACjB,GAAIA,IAAa,OACjB,IAAIoK,IAAe,KAAM,CACvBA,EAAW,WAAW,MAAQpK,EAC9B,MACF,CACAzC,EAAW,MAAQyC,EACrB,CAAA,CACD,EAEK8X,EAAmBzqB,EAAA,MACvB,IACE,CAAC,EAAEsM,EAAM,OAAQyQ,GAAA,YAAAA,EAAY,KAAK,UACjCuN,EAAgB,QAASvN,GAAA,YAAAA,EAAY,SAAS,OAAA,EAG7C2N,EAAgB1qB,QAAM,IAAMoqB,EAAmB,SAAUrN,GAAA,YAAAA,EAAY,QAAQ,QAAS,GAAM,EAE5F4N,EAAgBhwB,EAAAA,SAAS,KAAO,CACpC,MAAOwvB,EAAa,SAAUpN,GAAA,YAAAA,EAAY,MAAM,QAAS,IACzD,OAAQ2D,EAAc,SAAU3D,GAAA,YAAAA,EAAY,QAAQ,QAAS,IAC7D,OAAQnH,EAAc,SAAUmH,GAAA,YAAAA,EAAY,OAAO,QAAS,IAC5D,MAAOtM,EAAa,QAASsM,GAAA,YAAAA,EAAY,MAAM,OAC/C,KAAMzQ,EAAM,OAAQyQ,GAAA,YAAAA,EAAY,KAAK,QAAS,KAC9C,cAAezQ,EAAM,gBAAiByQ,GAAA,YAAAA,EAAY,cAAc,QAAS,WACzE,EAAA,EACI5F,EAAkB7H,GAAWqb,CAAa,EAC1CC,EAAepb,GAAgBmb,CAAa,EAC5CE,EAAenb,GAAgBib,CAAa,EAErC,OAAAnT,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,QAASxjB,EACT,MAAO,IAAM,CACXwjB,EAAQ,MAAQ,EAClB,CAAA,CACD,45DC7HD,MAAMmE,EAAQuI,EA+CRtI,EAAOuI,EAaP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,OAAO,EAC1Cwe,EAAehb,GAAM,IAAMxD,EAAM,KAAM,UAAU,EAEjD8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtDye,EAAiBzd,EAAc,IAAMhB,EAAM,OAAO,EAClD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD6d,EAAe7c,EAAc,IAAMhB,EAAM,KAAK,EAC9Cge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpD0e,EAAiB1d,EAAc,IAAMhB,EAAM,OAAO,EAClDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9Csd,EAAmBtc,EAAc,IAAMhB,EAAM,SAAS,EAEtDvoB,EAAUuX,MAAwB,IAAI,EAEtC,CAAC,QAAA6M,CAAA,EAAWL,GAAS/jB,EAAS,CAClC,aAAcqsB,EAAiB,KAAA,CAChC,EAEDyL,EAAAA,QAAQzB,GAAe,CACrB,WAAAlK,EACA,cAAelQ,EAAA,MAAM,IAAMsM,EAAM,aAAa,EAC9C,KAAMtM,EAAA,MAAM,IAAMsM,EAAM,IAAI,EAC5B,KAAMwe,EACN,QAASC,EACT,MAAOta,EACP,MAAO0Z,EACP,KAAMnqB,EAAA,MAAM,IAAMsM,EAAM,IAAI,EAC5B,OAAQtM,EAAA,MAAM,IAAM,CAACgrB,EAAe,KAAK,EACzC,SAAUV,EACV,SAAUja,CAAA,CACX,EAEKrU,QAAAkU,EAAayC,GAAa,CAC9BpG,EAAK,QAASoG,CAAQ,EACtB9R,EAAAA,SAAS,IAAM,CACb0L,EAAK,SAAUoG,CAAQ,CAAA,CACxB,CAAA,CACF,EAED,MAAMb,EAAmBnX,EAAA,SAAS,IAChC2R,EAAM,QAAQ,IAAI,CAACtqB,EAAI4yB,IACrB,OAAO5yB,GAAO,UAAY,OAAOA,GAAO,SACpC,CACE,MAAO,CACL,MAAOA,EACP,SAAUquB,EAAgB,KAC5B,EACA,KAAMruB,EAAG,SAAS,EAClB,KAAM,OACN,KAAM,OAAO,uBAAuB4yB,CAAG,EAAE,CAAA,EAE3C,CACE,MAAO,CACL,MAAO5yB,EAAGsqB,EAAM,UAAU,EAC1B,SAAUtqB,EAAGsqB,EAAM,aAAa,EAChC,GAAItqB,EAAG,MAAQA,EAAG,MAAQ,CAAC,CAC7B,EACA,KAAMA,EAAGsqB,EAAM,SAAS,EACxB,KAAMtqB,EAAGsqB,EAAM,SAAS,EACxB,KAAM,OAAO,uBAAuBsI,CAAG,EAAE,CAC3C,CACN,CAAA,EAGI+V,EAAgBhwB,EAAAA,SAAS,KAAO,CACpC,SAAU2vB,EAAgB,MAC1B,YAAahe,EAAM,YACnB,MAAOmE,EAAa,MACpB,UAAWmZ,EAAiB,MAC5B,QAASmB,EAAe,MACxB,QAASC,EAAe,MACxB,KAAM1e,EAAM,IACZ,EAAA,EACIgR,EAAgB3N,GAAagb,CAAa,EAC1CxT,EAAkBtH,GAAgB8a,CAAa,EAExC,OAAAnT,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,MAAO,IAAM,CACXA,EAAQ,MAAQ,EAClB,CAAA,CACD,8xBCnKD,MAAMmE,EAAQuI,EAiBRxE,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,uYCH1D,MAAMA,EAAQuI,EA2BRua,EAAcz0B,EAAA,SAAS,IAE3BmX,GAAiBxF,EAAM,QAAkB,yBAA0BA,CAAK,CAAA,iwCCH1E,MAAMA,EAAQuI,EA+CRtI,EAAOuI,EAaP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD4D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,OAAO,EAE1C8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD6e,EAAkB7d,EAAc,IAAMhB,EAAM,QAAQ,EACpD6d,EAAe7c,EAAc,IAAMhB,EAAM,KAAK,EAC9Cge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9C+iB,EAAmB/tB,GAAY,IAAMgL,EAAM,UAAU,EAErDmD,EAAaJ,GAAcoB,CAAY,EAEvC9rB,EAAQ2W,MAAwB,IAAI,EAEpC,CAAC,QAAA6M,CAAA,EAAWL,GAASnjB,EAAO,CAChC,aAAcyrB,EAAiB,KAAA,CAChC,EAEK+G,EAAkBxc,EAAAA,SAAS,IAAM,CACrC8U,EAAW,MACX,CACE,eAAgB0a,EAAa,MAC7B,CAAC,gBAAgB7d,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAAQ6d,EAAa,MACpE,cAAe,CAACA,EAAa,MAC7B,CAAC,eAAe7d,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAAQ,CAAC6d,EAAa,KACtE,CAAA,CACD,EAEKmF,EAAqBtvB,EAAA,MAAM,IAC/BqvB,EAAiB,OAASlF,EAAa,MAAQkF,EAAiB,MAAQ,MAAA,EAGpEzf,EAAsBrC,GAAe,IAAMjB,EAAM,YAAamE,CAAY,EAM1E2e,EAAcz0B,WAAS,IAAMmX,GAAiBxF,EAAM,QAAkB,cAAeA,CAAK,CAAC,EAC3Fie,EAAa5vB,EAAAA,SAAS,CAC1B,IAAK,IAAMuV,EAAW,MAEtB,IAAMyC,GAAkB,CACtBpG,EAAK,QAASoG,CAAQ,EACtBzC,EAAW,MAAQyC,EACnB9R,EAAAA,SAAS,IAAM,CACb0L,EAAK,SAAUoG,CAAQ,CAAA,CACxB,CACH,CAAA,CACD,EAEY,OAAA6E,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,QAASxjB,EACT,MAAO,IAAM,CACXwjB,EAAQ,MAAQ,EAClB,CAAA,CACD,83BCvKKonB,GAAY,CAChB,KACA,KACA,MACA,KACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,KACA,KACA,IACF,EAAE,IAAKC,GAAWA,EAAO,YAAa,CAAA,EAMzBC,GAAeD,GAAmB,CAEvC,MAAAE,EAAQ3vC,GAASyvC,CAAM,EAAE,YAAc,EAAA,QAAQ5vC,GAAsB,EAAE,EAAE,MAAM,GAAG,EAClF+vC,EAAUD,EAAM,MAAM,EAAG,CAAC,EAAE,KAAK,GAAG,EACpC,CAACE,CAAO,EAAIF,EAClB,OAAOH,GAAU,SAASI,CAAO,GAAKJ,GAAU,SAASK,CAAO,CAClE,ECvBaC,GACXjuC,GAEIC,GACKwc,GAASzc,CAAO,EAAIA,EAAU,CAAC,QAAS,CAAC,CAACA,GAAW,IAGvD,CAAC,EAAEyc,GAASzc,CAAO,EAAIA,EAAQ,QAAUA,GAOrCkuC,GAAU,CACrB9tC,EACAshB,EACAX,EACA/gB,IACG,CACCI,GAAMA,EAAG,kBACXA,EAAG,iBAAiBshB,EAAWX,EAASktB,GAAkBjuC,CAAO,CAAC,CAEtE,EAMamuC,GAAW,CACtB/tC,EACAshB,EACAX,EACA/gB,IACG,CACCI,GAAMA,EAAG,qBACRA,EAAA,oBAAoBshB,EAAWX,EAAS/gB,CAAO,CAEtD,EAOaouC,GAAa,CAACC,EAAaC,IAA6C,EACpED,EAAKH,GAAUC,IACvB,GAAGG,CAAW,CACvB,EAMaC,GAAY,CACvB3rC,EACA,CAAC,eAAA2lB,EAAiB,GAAM,YAAAimB,EAAc,GAAM,qBAAAC,EAAuB,EAAS,EAAA,KACzE,CACClmB,GACF3lB,EAAM,eAAe,EAEnB4rC,GACF5rC,EAAM,gBAAgB,EAEpB6rC,GACF7rC,EAAM,yBAAyB,CAEnC,ECxEa8rC,GAAY,YACZC,GAAW,MAGXC,GAAY,OAEZC,GAAgB,WAChBC,GAAc,SAGdC,GAAU,4MC6iBjBC,GAAgB,CACpB,IAAK,EACL,IAAK,IACL,KAAM,EACN,YAAa,IACb,eAAgB,IAChB,gBAAiB,GACjB,iBAAkB,CACpB,w+BA7eA,MAAMC,EAAY,CAACF,GAASL,GAAWE,GAAWD,GAAUG,GAAaD,EAAa,EAEhFnkB,EAAQuI,EA2DRtI,EAAOuI,EAYP5E,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAGjExoB,EAAUuX,MAAwB,IAAI,EAEtC,CAAC,QAAA6M,CAAA,EAAWL,GAAS/jB,CAAO,EAE5BosB,EAAaL,GAAM,IAAMxD,EAAM,GAAI,YAAY,EAE/C+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDsJ,EAAgBtI,EAAc,IAAMhB,EAAM,MAAM,EAChDyiB,EAAkBzhB,EAAc,IAAMhB,EAAM,QAAQ,EACpDuW,EAAkBvV,EAAc,IAAMhB,EAAM,QAAQ,EACpDge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDwkB,EAAcxjB,EAAc,IAAMhB,EAAM,IAAI,EAC5CmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAE9C6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,SAAY0V,EAAgB,MAC5B,SAAY0e,EAAgB,MAC5B,MAAS5mB,EAAQ,MACjB,gBAAiByN,EAAc,OAASiN,EAAgB,MACxD,SAAU,CAACjN,EAAc,OAAS,CAACiN,EAAgB,MACnD,sBAAuB,CAACA,EAAgB,MACxC,cAAeA,EAAgB,MAC/B,CAAC,gBAAgBvW,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,MAC/C,EAAA,EAEIykB,EAAsBp2B,EAAAA,SAAS,KAAO,CAC1C,SAAUkoB,EAAgB,MAC1B,oBAAqB,CAACA,EAAgB,MACtC,qBAAsBA,EAAgB,MACtC,aAAcA,EAAgB,MAC9B,gBAAiBA,EAAgB,MACjC,eAAgB,CAACA,EAAgB,MACjC,aAAc,CAACA,EAAgB,KAC/B,EAAA,EAGE,IAAAmO,EACAC,EACAC,EAAc,GAMlB,MAAMC,EAAa7vB,GAAY,IAAMgL,EAAM,IAAI,EACzC8kB,EAAepxB,EAAA,MAAM,IACzB,OAAO,MAAMmxB,EAAW,KAAK,EAAIP,GAAc,KAAOO,EAAW,KAAA,EAG7DE,EAAY/vB,GAAY,IAAMgL,EAAM,GAAG,EACvCglB,EAActxB,EAAA,MAAM,IACxB,OAAO,MAAMqxB,EAAU,KAAK,EAAIT,GAAc,IAAMS,EAAU,KAAA,EAG1DE,EAAYjwB,GAAY,IAAMgL,EAAM,GAAG,EACvCklB,EAAcxxB,EAAAA,MAAM,IAAM,CAC9B,MAAMyxB,EAAOL,EAAa,MACpBnsC,EAAMqsC,EAAY,MACxB,OAAO,KAAK,OAAOC,EAAU,MAAQtsC,GAAOwsC,CAAI,EAAIA,EAAOxsC,CAAA,CAC5D,EAEKysC,EAAoBpwB,GAAY,IAAMgL,EAAM,YAAa,CAC7D,UAAW,GACX,OAAQ,UAAA,CACT,EACKqlB,EAAgB3xB,EAAA,MAAM,IAC1B0xB,EAAkB,MAAQ,EAAIA,EAAkB,MAAQd,GAAc,WAAA,EAGlEgB,EAAuBtwB,GAAY,IAAMgL,EAAM,eAAgB,CACnE,UAAW,GACX,OAAQ,UAAA,CACT,EACKulB,EAAmB7xB,EAAA,MAAM,IAC7B4xB,EAAqB,MAAQ,EAAIA,EAAqB,MAAQhB,GAAc,cAAA,EAGxEkB,EAAwBxwB,GAAY,IAAMgL,EAAM,gBAAiB,CACrE,UAAW,GACX,OAAQ,UAAA,CACT,EACKylB,EAAoB/xB,EAAA,MAAM,IAC9B,KAAK,IACH,OAAO,MAAM8xB,EAAsB,KAAK,EACpClB,GAAc,gBACdkB,EAAsB,MAC1B,CACF,CAAA,EAGIE,EAA6B1wB,GAAY,IAAMgL,EAAM,qBAAsB,CAC/E,UAAW,GACX,OAAQ,UAAA,CACT,EACK2lB,EAAyBjyB,EAAA,MAAM,IACnC,KAAK,IACH,OAAO,MAAMgyB,EAA2B,KAAK,EACzCpB,GAAc,iBACdoB,EAA2B,MAC/B,CACF,CAAA,EAGIE,GAAoBlyB,EAAAA,MAAM,IAAM,CACpC,MAAMyxB,EAAOL,EAAa,MAC1B,OAAO,KAAK,MAAMK,CAAI,IAAMA,EAAO,GAAKA,EAAK,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,IAAI,MAAA,CAC9E,EAEKU,GAAqBnyB,QAAM,IAAM,KAAK,IAAI,GAAIkyB,GAAkB,OAAS,CAAC,CAAC,EAE3EE,EAAepyB,EAAA,MAAM,IACzBkQ,EAAW,QAAU,KAAO,GAAKA,EAAW,MAAM,QAAQgiB,GAAkB,KAAK,CAAA,EAG7EG,EAAiB13B,EAAAA,SAAS,IAAM,CAE9B,MAAA23B,EAAU,CAAChmB,EAAM,MAAM,EAEtB,OADI,IAAI,KAAK,aAAagmB,CAAO,EAC9B,gBAAkB,EAAA,MAAA,CAC7B,EAEKC,GAAc53B,EAAA,SAAS,IAE3B80B,GAAY4C,EAAe,KAAK,CAAA,EAG5BG,GAAmB,IACvB,IAAI,KAAK,aAAaH,EAAe,MAAO,CAC1C,MAAO,UACP,YAAa,GACb,qBAAsB,EACtB,sBAAuBH,GAAkB,MACzC,sBAAuBA,GAAkB,MACzC,SAAU,UACX,CAAA,EAAE,OAECO,EAAoBzyB,EAAAA,MAAM,IAAMsM,EAAM,aAAekmB,IAAkB,EAEvEE,EAAavzC,GAAsB,CAGnC,GAAA,CAAC,MAAA0B,CAAS,EAAAqvB,EACd,GAAI,CAACG,EAAgB,OAASxvB,IAAU,KAAM,CACtC,MAAA4wC,GAAOL,EAAa,MAAQjyC,EAC5B8F,EAAMqsC,EAAY,MAClBpsC,EAAMssC,EAAY,MAClBmB,GAAaR,GAAmB,MAChC,CAAC,KAAAS,EAAQ,EAAAtmB,EAEfzrB,EAAQ,KAAK,OAAOA,EAAQoE,GAAOwsC,EAAI,EAAIA,GAAOxsC,EAAMwsC,GAExD5wC,EAAQ,KAAK,MAAMA,EAAQ8xC,EAAU,EAAIA,GAE9BziB,EAAA,MAAQrvB,EAAQqE,EAAO0tC,GAAO3tC,EAAMC,EAAOrE,EAAQoE,EAAO2tC,GAAO1tC,EAAMD,EAAOpE,CAC3F,CAAA,EAGIgyC,EAAS,CAACF,EAAa,IAAM,CAC7B,GAAAziB,EAAW,QAAU,KAAM,CAC7BA,EAAW,MAAQohB,EAAY,MAC/B,MACF,CACAoB,EAAU,EAAKC,CAAU,CAAA,EAGrBG,EAAW,CAACH,EAAa,IAAM,CAC/B,GAAAziB,EAAW,QAAU,KAAM,CAC7BA,EAAW,MAAQ4gB,EAAY,MAAQU,EAAY,MAAQF,EAAY,MACvE,MACF,CACAoB,EAAU,GAAKC,CAAU,CAAA,EAG3BvvB,GACEytB,EACCrsC,GAAU,CACT,KAAM,CAAC,KAAAuuC,EAAM,OAAAC,GAAQ,QAAAC,EAAS,QAAAC,GAAW1uC,EAEzC,GAAI,EAAA6rB,EAAgB,OAAS0e,EAAgB,OAASiE,IAAUC,GAAWC,KAG3E/C,GAAU3rC,EAAO,CAAC,YAAa,EAAM,CAAA,EACjC,CAAA0sC,GAMJ,IADYiC,IACR,CAACxC,GAASL,EAAS,EAAE,SAASyC,CAAI,EAAG,CAIvC,GADc7B,EAAA,GACV6B,IAASpC,GAAS,CACpByC,EAAiB5uC,EAAOquC,CAAM,EAC9B,MACF,CACIE,IAASzC,IACX8C,EAAiB5uC,EAAOsuC,CAAQ,EAElC,MACF,CAEA,GAAIC,IAASrC,GAAa,CACxBmC,EAAOZ,EAAuB,KAAK,EACnC,MACF,CACA,GAAIc,IAAStC,GAAe,CAC1BqC,EAASb,EAAuB,KAAK,EACrC,MACF,CACA,GAAIc,IAASvC,GAAW,CACtBtgB,EAAW,MAAQohB,EAAY,MAC/B,MACF,CACIyB,IAASxC,KACXrgB,EAAW,MAAQshB,EAAY,OAEnC,EACA,CAAC,OAAQztC,EAAS,UAAW,SAAS,CAAA,EAGxCqf,GACEytB,EACCrsC,GAAyB,CAGxB,KAAM,CAAC,OAAAwuC,EAAQ,QAAAC,GAAS,QAAAC,CAAA,EAAW1uC,EAE/B6rB,EAAgB,OAAS0e,EAAgB,OAASiE,GAAUC,IAAWC,IAE3E/C,GAAU3rC,EAAO,CAAC,YAAa,EAAM,CAAA,EACzB2uC,IACEjC,EAAA,GACT3kB,EAAA,SAAU2D,EAAW,KAAK,EACjC,EACA,CAAC,OAAQnsB,EAAS,UAAW,OAAO,CAAA,EAIhC,MAAAqvC,EAAmB,CAAC5uC,EAAc6uC,IAAoC,CAC1E,KAAM,CAAC,KAAA5tB,EAAA,EAAQjhB,GAAS,GAExB,GAAI,CAAC6rB,EAAgB,OAAS,CAAC0e,EAAgB,MAAO,CAChD,GAAAuE,EAAa9uC,CAAK,GAEhBihB,KAAS,aAAejhB,EAAM,OAAQ,OAEhC2uC,IAEZE,EAAQ,CAAC,EACT,MAAMj7B,EAAY25B,EAAkB,MAC9BY,EAAaV,EAAuB,MACpCpqB,GAAQ8pB,EAAc,MACtB5wB,GAAW8wB,EAAiB,MAGlCb,EAAmB,WAAW,IAAM,CAClC,IAAIuC,GAAQ,EACZtC,EAAoB,YAAY,IAAM,CAK5BoC,EAAAE,GAAQn7B,EAAY,EAAIu6B,CAAU,EAC1CY,MACCxyB,EAAQ,GACV8G,EAAK,CACV,CAAA,EAGIyrB,EAAgBriB,GACpBA,EAAI,OAAS,WAAaA,EAAI,OAAS,YAEnCuiB,EAA4BhvC,GAAiB,CAG7C8uC,EAAa9uC,CAAK,GAChBA,EAAM,OAAS,WAAaA,EAAM,SAMxC2rC,GAAU3rC,EAAO,CAAC,YAAa,EAAM,CAAA,EACzB2uC,IACZM,GAAW,EAAK,EAEXlnB,EAAA,SAAU2D,EAAW,KAAK,EAAA,EAG3BujB,GAAcxD,GAAgB,CAG9B,GAAA,CACFD,GAAWC,EAAI,CAAC,SAAS,KAAM,UAAWuD,EAAW,EAAK,CAAC,EAC3DxD,GAAWC,EAAI,CAAC,SAAS,KAAM,WAAYuD,EAAW,EAAK,CAAC,CAAA,MACtD,CAER,CAAA,EAEIL,EAAc,IAAM,CACxB,aAAanC,CAAgB,EAC7B,cAAcC,CAAiB,EACZD,EAAA,OACCC,EAAA,MAAA,EAGhByC,EAAU/4B,EAAAA,SAAS,IAAM,CAC7B,MAAMg5B,EAAoB,CACxB,IAAK,CACH,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,KAAM,eACN,MAAO,aACP,QAAS,WACX,EACA,KAAM,CACJ,EAAG,uGACL,CAAA,EAGIC,EAAoB,CACxB,IAAK,CACH,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,KAAM,eACN,MAAO,aACP,QAAS,WACX,EACA,KAAM,CAAC,EAAG,2DAA2D,CAAA,EAGjEC,GAAoB,CACxB,MAAS,CAAC,CAAC,OAAQ,CAAChR,EAAgB,KAAQ,EAAA,MAAO,SAAU,WAAY,WAAW,EACpF,SAAY,KACZ,KAAQ,SACR,SAAYxS,EAAgB,OAAS0e,EAAgB,MACrD,gBAAiB1e,EAAgB,OAAS0e,EAAgB,MAAQ,GAAO,OACzE,gBAAiB5e,EAAW,KAAA,EAGxB2jB,EAAiB,CACrB,cAAe,GACf,MAAS3rB,EAAQ,MAAQ,IAAM,IAAA,EAG3BxF,EAAU,CAACne,GAAc6uC,KAA2C,CACpE,CAAChjB,EAAgB,OAAS,CAAC0e,EAAgB,QAC7CoB,GAAU3rC,GAAO,CAAC,YAAa,EAAM,CAAA,EACrCivC,GAAW,EAAI,EAGftrB,EAAQ,MAAQ,GAChBirB,EAAiB5uC,GAAO6uC,EAAO,EACjC,EAGIU,GAAiB,CACrB,OAAQ,CACN,GAAGF,GACH,aAAcvnB,EAAM,gBAAkB,OACtC,oBAAqB,SACvB,EACA,IAAK,CACH,GAAGwnB,EACH,GAAGH,EAAkB,GACvB,EACA,KAAM,CACJ,GAAGA,EAAkB,IACvB,EACA,KAAM,CACJ,KAAM,WACR,EACA,QAAUpxC,IAAaogB,EAAQpgB,GAAGswC,CAAM,CAAA,EAGpCmB,GAAiB,CACrB,OAAQ,CACN,GAAGH,GACH,aAAcvnB,EAAM,gBAAkB,OACtC,oBAAqB,WACvB,EACA,IAAK,CACH,GAAGwnB,EACH,GAAGF,EAAkB,GACvB,EACA,KAAM,CACJ,GAAGA,EAAkB,IACvB,EACA,KAAM,CACJ,KAAM,WACR,EACA,QAAUrxC,IAAaogB,EAAQpgB,GAAGuwC,CAAQ,CAAA,EAGrC,MAAA,CACL,IAAK,CACH,GAAIjQ,EAAgB,MAAQkR,GAAiBC,EAC/C,EACA,OAAQ,CACN,GAAKnR,EAAgB,MAAyBmR,GAAjBD,EAC/B,CAAA,CACF,CACD,65ECxhBD,MAAMznB,EAAQuI,EAuBRtI,EAAOuI,EAIPyI,EAAQC,EAAAA,WAKRrN,EAAaL,GAAM,IAAMxD,EAAM,EAAE,EAEjC+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD2nB,EAAkB3mB,EAAc,IAAMhB,EAAM,QAAQ,EACpDmS,EAAcnR,EAAc,IAAMhB,EAAM,IAAI,EAE5C4nB,EAAUv5B,EAAA,SACd,IAAA,OAAQ,UAAA8D,EAAA8e,EAAM,UAAN,YAAA9e,EAAA,KAAA8e,EAAgB,CAAA,GAAI,GAAG,WAAY,IAAI,SAAS,GAAKjR,EAAM,QAAU,GAAA,EAEzE6nB,EAAan0B,EAAAA,MAAM,IAAM,GAAGmQ,EAAW,KAAK,YAAY,EAExDgH,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,WAAW2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAChD,eAAgBmS,EAAY,MAC5B,SAAYpO,EAAgB,KAC5B,EAAA,s/ECuDF,MAAM/D,EAAQuI,EAqERtI,EAAOuI,EA0BP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD4D,EAAaL,KAEbskB,EAAqB9mB,EAAc,IAAMhB,EAAM,WAAW,EAC1D8D,EAAmB9C,EAAc,IAAMhB,EAAM,SAAS,EACtD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD+nB,EAAsB/mB,EAAc,IAAMhB,EAAM,YAAY,EAC5DgoB,EAAsBhnB,EAAc,IAAMhB,EAAM,YAAY,EAC5DioB,EAAqBjnB,EAAc,IAAMhB,EAAM,WAAW,EAC1DkoB,EAAwBlnB,EAAc,IAAMhB,EAAM,cAAc,EAChEge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAC9CmoB,EAAkBnnB,EAAc,IAAMhB,EAAM,QAAQ,EACpDooB,EAAcpzB,GAAY,IAAMgL,EAAM,OAAS,GAAG,EAElDmD,EAAaJ,GAAcoB,CAAY,EAEvC9rB,EAAQ2W,MAA6B,IAAI,EAEzC,CAAC,QAAA6M,CAAA,EAAWL,GAASnjB,EAAO,CAChC,aAAcyrB,EAAiB,KAAA,CAChC,EAEKukB,EAAW30B,QAAM,IAAMsM,EAAM,SAAW,GAAG6D,EAAW,KAAK,SAAS,EACpEykB,EAAOt5B,EAAAA,IAAc4U,EAAW,KAAK,EACrC2kB,EAAav5B,MAAY,EAAE,EAC3Bw5B,EAAuBx5B,EAAAA,IAAa4U,EAAW,MAAM,OAAS,CAAC,EAC/D6kB,EAAiBz5B,MAAY,EAAE,EAC/B05B,EAAY15B,MAAc,CAAA,CAAE,EAC5B25B,EAAc35B,MAAc,CAAA,CAAE,EAC9B45B,EAAgB55B,MAAc,CAAA,CAAE,EAEhC6b,EAAkBxc,EAAAA,SAAS,IAAM,CACrC8U,EAAW,MACX,CACE,CAAC,gBAAgBnD,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KAC/C,SAAU+D,EAAgB,MAC1B,MAAOlI,EAAQ,KACjB,CAAA,CACD,EAEKgtB,EAAcx6B,WAAS,IAAMi6B,EAAK,MAAM,SAASC,EAAW,KAAK,CAAC,EAClEO,EAAYz6B,EAAA,SAAS,IACzBk6B,EAAW,QAAU,GAAK,GAAQ,CAACvoB,EAAM,aAAauoB,EAAW,KAAK,CAAA,EAElEQ,EAAiBr1B,EAAM,MAAA,IAAM40B,EAAK,MAAM,SAAWF,EAAY,KAAK,EACpEY,EAAmBt1B,QAAM,IAAM,CAACo1B,EAAU,OAAS,CAACD,EAAY,KAAK,EAErEI,EAAY56B,EAAAA,SAAS,KAAO,CAChC,cAAe2R,EAAM,cACrB,iBAAkBA,EAAM,iBACxB,OAAAkpB,EACA,iBAAkBF,EAAiB,MACnC,SAAUjlB,EAAgB,MAC1B,iBAAkB/D,EAAM,iBACxB,cAAe4oB,EAAc,MAC7B,KAAM5oB,EAAM,KACZ,WAAY,CACV,GAAGA,EAAM,WACT,SAAU+D,EAAgB,MAC1B,KAAM/D,EAAM,KACZ,GAAIqoB,EACJ,MAAOE,CACT,EACA,cAAe,CACb,MAAOlG,EACP,QAASvI,GACT,OAAQmF,EACV,EACA,QAASoJ,EACT,UAAWroB,EAAM,UACjB,eAAgBA,EAAM,eACtB,YAAa2oB,EAAY,MACzB,YAAaE,EAAY,MACzB,UAAWC,EAAU,MACrB,eAAgBC,EAAe,MAC/B,cAAe/oB,EAAM,cACrB,MAAOooB,EAAY,MACnB,YAAaH,EAAmB,MAChC,YAAajoB,EAAM,YACnB,UAAAmpB,EACA,SAAUnL,EAAgB,MAC1B,UAAWhe,EAAM,UACjB,KAAMA,EAAM,KACZ,MAAOmE,EAAa,MACpB,SAAUnE,EAAM,SAChB,SAAUmoB,EAAgB,MAC1B,eAAgBnoB,EAAM,eACtB,WAAYA,EAAM,WAClB,KAAMsoB,EAAK,KACX,EAAA,EAEI54B,QAAAkU,EAAasa,GAAW,CAC5BoK,EAAK,MAAQpK,CAAA,CACd,EAEK,MAAAkL,GAAanzC,GAAwB,CACzC,GAAI8tB,EAAgB,MAAO,CACV9tB,EAAE,OACV,KAAK,EACZ,MACF,CAEAgqB,EAAK,UAAWhqB,CAAC,CAAA,EAGbozC,GAAWpzC,GAAwB,CACnC8tB,EAAgB,OAASikB,EAAoB,QAIjDnsB,EAAQ,MAAQ,GAChBoE,EAAK,QAAShqB,CAAC,EAAA,EAGXqsC,EAAUrsC,GAAwB,CACtC4lB,EAAQ,MAAQ,GAChBoE,EAAK,OAAQhqB,CAAC,CAAA,EAGVosC,EAAWpsC,GAA4B,UAC3C,MAAM1B,EAAQ,OAAO0B,GAAM,SAAWA,EAAKA,EAAE,OAA4B,MAIrE,GAFJuyC,EAAqB,MAAQ,IAEzBr2B,EAAA6N,EAAM,YAAN,MAAA7N,EAAiB,SAAS5d,EAAM,OAAO,CAAC,IAAMA,EAAM,OAAS,EAAG,CAC9D8D,EAAM,QACRA,EAAM,MAAM,MAAQ,IAEtB,MACF,CAII,GAFJkwC,EAAW,MAAQh0C,GAEfqnB,GAAAoE,EAAM,YAAN,MAAApE,GAAiB,SAASrnB,EAAM,OAAOA,EAAM,OAAS,CAAC,GAAI,CAC7D20C,EAAO30C,EAAM,MAAM,EAAGA,EAAM,OAAS,CAAC,CAAC,EACvC,MACF,CAEUm0C,EAAA,MAAQ1oB,EAAM,aAAazrB,CAAK,GAAK,CAACs0C,EAAY,MAAQ,CAACt0C,CAAK,EAAI,CAAA,EAClEo0C,EAAA,MAAQ3oB,EAAM,aAAazrB,CAAK,EAAI,CAAC,EAAI,CAACA,CAAK,EAC3Dq0C,EAAc,MAAQC,EAAY,MAAQ,CAACt0C,CAAK,EAAI,GAEpD0rB,EAAK,YAAayoB,EAAU,MAAOC,EAAY,MAAOC,EAAc,KAAK,CAAA,EAGrE3J,GAAYhpC,GAAmB,CAC/B6xC,EAAmB,QACrBzF,EAAQpsC,CAAC,EAEJ4yC,EAAY,OACfK,EAAOX,EAAW,KAAK,EAE3B,EAGIzO,GAAa7jC,GAA2B,CAC5C,GAAIA,EAAE,MAAQ,SAAW,CAAC8xC,EAAoB,MAAO,CACnDmB,EAAOX,EAAW,KAAK,EACvB,MACF,EAGGtyC,EAAE,MAAQ,aAAeA,EAAE,MAAQ,WACpCiyC,EAAsB,OACtBK,EAAW,QAAU,IACrBC,EAAqB,OACrBF,EAAK,MAAM,OAAS,EAEpBa,EAAUb,EAAK,MAAMA,EAAK,MAAM,OAAS,CAAC,CAAC,EAE3CE,EAAqB,MAAQ,EAC/B,EAGF1xB,GAAYgjB,GAAW,CAAC,OAAQzhC,CAAM,CAAA,EAEhC,MAAAixC,EAAYj7B,EAAAA,SAAS,IAAM,CAC3B,GAAC2R,EAAM,UAIJ,OAAA,OAAOA,EAAM,WAAc,SAAWA,EAAM,UAAYA,EAAM,UAAU,KAAK,EAAE,CAAA,CACvF,EAEKupB,EAAkBl7B,EAAAA,SAAS,IAAM,CACjC,GAACi7B,EAAU,MAIf,OAAO,IAAI,OAAO,IAAIj1C,GAAkBi1C,EAAU,KAAK,CAAC,IAAI,CAAA,CAC7D,EAEKJ,EAAUjyC,GAAuB,CAC9BA,GAAAA,GAAOsxC,EAAW,OAAO,KAAK,EAErC,MAAMiB,EAAUD,EAAgB,MAC5BtyC,EAAI,MAAMsyC,EAAgB,KAAK,EAAE,IAAKE,GAAMA,EAAE,KAAA,CAAM,EACpD,CAACxyC,CAAG,EACFyxC,EAAsB,CAAA,EAE5B,UAAWgB,KAAUF,EACf,GAAA,EAAAE,IAAW,IAAMb,EAAY,OAAS,CAAC7oB,EAAM,aAAa0pB,CAAM,GAIhE,IAAAtB,EAAY,OAASW,EAAe,MACtC,MAGFL,EAAU,KAAKgB,CAAM,EAGvB,MAAMrjB,GAAW,CAAC,GAAGzC,EAAW,MAAO,GAAG8kB,CAAS,EACnDH,EAAW,MAAQ,GACnBC,EAAqB,MAAQ,GAC7B5kB,EAAW,MAAQyC,GACnBpG,EAAK,QAASoG,EAAQ,EACtBxK,EAAQ,MAAQ,EAAA,EAGZstB,EAAalyC,GAAuB,CACxC,MAAM0yC,EAAWrB,EAAK,MAAM,SAAQrxC,GAAA,YAAAA,EAAK,aAAc,EAAE,EACzDwxC,EAAe,MAAQH,EAAK,MAAM,OAAOqB,EAAU,CAAC,EAAE,WACtD/lB,EAAW,MAAQ0kB,EAAK,KAAA,EAIb,OAAApd,EAAA,CACX,KAAM,IAAM,CACVrP,EAAQ,MAAQ,EAClB,EACA,QAASxjB,EACT,MAAO,IAAM,CACXwjB,EAAQ,MAAQ,EAClB,CAAA,CACD,0uIClbD,MAAMmE,EAAQuI,EAuCRtI,EAAOuI,EAUP,CAAC,MAAAnwB,EAAO,WAAAwrB,EAAY,oBAAAP,EAAqB,QAAA+e,EAAS,SAAApD,EAAU,OAAAqD,EAAQ,MAAAC,EAAO,KAAAC,CAAI,EACnF7e,GAAa3D,EAAOC,CAAI,EAEpB8D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDge,EAAkBhd,EAAc,IAAMhB,EAAM,QAAQ,EACpDyiB,EAAkBzhB,EAAc,IAAMhB,EAAM,QAAQ,EACpD0iB,EAAmB1hB,EAAc,IAAMhB,EAAM,SAAS,EACtD4pB,EAAkB5oB,EAAc,IAAMhB,EAAM,QAAQ,EACpDmE,EAAenD,EAAc,IAAMhB,EAAM,KAAK,EAE9CmD,EAAaJ,GAAcoB,CAAY,EAEvC0G,EAAkBxc,EAAAA,SAAS,IAAM,CACrC8U,EAAW,MACX,CACE,eAAgB,CAACnD,EAAM,UACvB,yBAA0BA,EAAM,UAChC,CAAC,gBAAgBA,EAAM,IAAI,EAAE,EAAG,CAAC,CAACA,EAAM,IAC1C,CAAA,CACD,EAEK6pB,EAAiBx7B,EAAAA,SAAwB,KAAO,CACpD,OAAQu7B,EAAgB,MAAQ,OAAS,MACzC,EAAA,EAEW,OAAA1e,EAAA,CACX,KAAAsX,EACA,QAASnqC,EACT,MAAAkqC,CAAA,CACD,w6BCpFD,MAAMviB,EAAQuI,EA8BRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,eAAe2R,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,IAC9C,EAAA,EACI8pB,EAAYp2B,QAAM,IAAM,CAAC,CAACsM,EAAM,QAAU,CAAC,CAACA,EAAM,UAAU,EAC5D+pB,EAAar2B,QAAM,IAAM,CAAC,CAACsM,EAAM,SAAW,CAAC,CAACA,EAAM,WAAW,swCC9CrE,MAAMA,EAAQuI,EASRyhB,EAAgBhpB,EAAc,IAAMhB,EAAM,MAAM,u6BCTtD,MAAMA,EAAQuI,EAoBR8G,EAAerO,EAAc,IAAMhB,EAAM,KAAK,EAC9CiqB,EAAkBjpB,EAAc,IAAMhB,EAAM,QAAQ,EACpDkqB,EAAqBlpB,EAAc,IAAMhB,EAAM,UAAU,EAEzD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC,MAAM87B,EAAa9a,EAAa,MAAQ,GAAQ6a,EAAmB,MAC5D,MAAA,CACL,mBAAoB7a,EAAa,MACjC,wBAAyB8a,IAAe,GACxC,CAAC,yBAAyBA,CAAU,EAAE,EAAG,OAAOA,GAAe,SAC/D,sBAAuBF,EAAgB,KAAA,CACzC,CACD,EACKpX,EAAcnf,QAAM,IAAOu2B,EAAgB,QAAU,GAAO,KAAOjqB,EAAM,GAAI,EAEnFuP,OAAAA,EAAAA,QAAQ7B,GAAuB,CAC7B,SAAUuc,CAAA,CACX,khCC1BD,MAAMjqB,EAAQuI,EA2CR+I,EAAQd,EAAAA,WAERC,EAAaC,EAAAA,OAAOhD,GAAuB,IAAI,EAE/C0c,EAAgBppB,EAAc,IAAMhB,EAAM,MAAM,EAChDuR,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChDoU,EAAgBpT,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAEpD,CAAC,aAAAyB,CAAA,EAAgBJ,GAAerB,CAAK,EAErC0B,EAAShO,EAAAA,MAAM,IAAM,CAAC0gB,EAAc,OAAS3S,EAAa,KAAK,EAC/D4oB,EAAc32B,EAAA,MAAM,IACxB+c,GAAA,MAAAA,EAAY,SAAS,MACjB,KACA2D,EAAc,MACd,SACC1S,EAAO,MAERoR,GADA9S,EAAM,GACN,EAGAsqB,EAAWj8B,EAAA,SACf,IACE+7B,EAAc,OACd1oB,EAAO,OACP0S,EAAc,OACd,CAAC,IAAK,cAAe,SAAU,QAAQ,EAAE,SAASpU,EAAM,GAAG,CAAA,EAGzD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,mBAAmB2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,MAAQA,EAAM,UAAY,OAClF,yBAA0BsqB,EAAS,MACnC,OAAU/Y,EAAc,MACxB,SAAYxN,EAAgB,KAC5B,EAAA,EAEIiN,EAAgB3iB,EAAAA,SAAS,IAAM,CACnC,MAAMk8B,EAAa,CAAA,EACnB,OAAInW,EAAc,SACZ,CAAC9C,GAAS,CAACA,EAAM,QAEnBiZ,EAAW,KAAO,UAEhBxmB,EAAgB,QAElBwmB,EAAW,SAAW,KAGnBA,CAAA,CACR,+zCC/ED,MAAMvqB,EAAQuI,EAgDRtI,EAAOuI,EAaPgiB,EAAiB,CAAC,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,GAErDC,EAAezpB,EAAc,IAAMhB,EAAM,KAAK,EAC9C0qB,EAAmB1pB,EAAc,IAAMhB,EAAM,SAAS,EACtD2qB,EAAkB3pB,EAAc,IAAMhB,EAAM,QAAQ,EACpD+Y,EAAgB/X,EAAc,IAAMhB,EAAM,MAAM,EAChD4qB,EAAc5pB,EAAc,IAAMhB,EAAM,IAAI,EAC5C6qB,EAAsB7pB,EAAc,IAAMhB,EAAM,YAAY,EAC5DoH,EAAiBpG,EAAc,IAAMhB,EAAM,OAAO,EAClDqH,EAAoBrG,EAAc,IAAMhB,EAAM,UAAU,EACxDsH,EAAuBtG,EAAc,IAAMhB,EAAM,aAAa,EAC9DuH,EAAsBvG,EAAc,IAAMhB,EAAM,YAAY,EAC5DwH,EAAoBxG,EAAc,IAAMhB,EAAM,UAAU,EAExDiV,EAAuBhO,GAAwB,KAAO,CAC1D,QAASG,EAAe,MACxB,WAAYC,EAAkB,MAC9B,cAAeC,EAAqB,MACpC,aAAcC,EAAoB,MAClC,WAAYC,EAAkB,KAC9B,EAAA,EAEImN,EAAkBjhB,EAAA,MAAM,IAC5BsM,EAAM,UAAY,MAAQ,CAACA,EAAM,QAAU,MAAMA,EAAM,OAAO,GAAK,EAAA,EAG/D8qB,EAAmBp3B,EAAAA,MAAM,IAAOk3B,EAAY,MAAQ,GAAO,IAAK,EAEhEG,EAAe18B,EAAAA,SAAS,KAAO,CACnC,KAAM2R,EAAM,YACZ,QAASA,EAAM,eACf,MAAO6qB,EAAoB,KAC3B,EAAA,EAEIG,EAAgB38B,EAAAA,SAAS,KAAO,CACpC,GAAGm8B,EACH,OAAQxqB,EAAM,QAAU,EACxB,EAAA,EAEIirB,EAAiB58B,EAAAA,SAAS,KAAO,CACrC,oBAAqB,CAAC0qB,EAAc,OAAS,CAAC0R,EAAa,MAC3D,iBAAkB1R,EAAc,OAAS0R,EAAa,KACtD,EAAA,EAEIS,EAAc78B,WAAS,IAAM,CAACsmB,EAAgB,MAAOM,EAAqB,KAAK,CAAC,EAEhFkW,EAAa98B,EAAAA,SAAS,KAAO,CACjC,GAAGm8B,EACH,QAASxqB,EAAM,QACf,gBAAiBA,EAAM,SAAW,OAClC,eAAgBA,EAAM,KAAO,QAAQA,EAAM,IAAI,IAAM,MACrD,EAAA,EAEIorB,EAAoB/8B,EAAA,SAAS,IACjCs8B,EAAgB,MACZH,EACA,CACE,IAAK,MACL,KAAM,MACN,UAAW,mCACb,CAAA,ksCC6WAa,GAA2B,okEAjYjC,MAAMrrB,EAAQuI,EAiHRtI,EAAOuI,EAqBPyI,EAAQC,EAAAA,WAmBRrN,EAAaL,GAAM,IAAMxD,EAAM,GAAI,OAAO,EAE1C4D,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEqrB,EAActqB,EAAc,IAAMhB,EAAM,IAAI,EAC5CgE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5CurB,EAAwBvqB,EAAc,IAAMhB,EAAM,cAAc,EAChEwrB,EAAkBxqB,EAAc,IAAMhB,EAAM,QAAQ,EACpDyrB,EAAsBzqB,EAAc,IAAMhB,EAAM,YAAY,EAC5D0rB,EAAoB1qB,EAAc,IAAMhB,EAAM,UAAU,EACxD2rB,EAAoB3qB,EAAc,IAAMhB,EAAM,UAAU,EACxD4rB,EAAyB5qB,EAAc,IAAMhB,EAAM,eAAe,EAClEyI,EAAoBzH,EAAc4C,CAAU,EAC5CioB,EAA2B7qB,EAAc,IAAMhB,EAAM,iBAAiB,EACtE8rB,EAAsB9qB,EAAc,IAAMhB,EAAM,YAAY,EAC5DkJ,EAAgBlI,EAAc,IAAMhB,EAAM,MAAM,EAChD+rB,EAAmB/qB,EAAc,IAAMhB,EAAM,SAAS,EACtDgsB,EAAoBhrB,EAAc,IAAMhB,EAAM,UAAU,EACxDisB,EAAgBjrB,EAAc,IAAMhB,EAAM,MAAM,EAChDksB,EAAoBlrB,EAAc,IAAMhB,EAAM,UAAU,EACxDmsB,EAAqBnrB,EAAc,IAAMhB,EAAM,WAAW,EAC1DosB,EAA0BprB,EAAc,IAAMhB,EAAM,gBAAgB,EACpEqsB,EAAuBrrB,EAAc,IAAMhB,EAAM,aAAa,EAC9DssB,EAAqBtrB,EAAc,IAAMhB,EAAM,UAAU,EAEzDvoB,EAAUuX,MAAwB,IAAI,EACtCu9B,EAAWv9B,MAAwB,IAAI,EACvCw9B,EAAex9B,MAAwB,IAAI,EAC3Cy9B,EAAcz9B,MAAwB,IAAI,EAC1CsE,EAAWtE,EAAAA,IAAIyZ,EAAkB,KAAK,EACtCikB,EAAoB19B,MAAI,EAAK,EAEnC8H,GACE,SACA,IAAM,CACJjV,EAAK,KAAK,CACZ,EACA,CAAC,OAAQpK,CAAO,CAAA,EAElBgwB,GAAkBgB,EAAmB4jB,CAAoB,EACzD,KAAM,CAAC,QAASM,GAAcnxB,GAAS/jB,EAAS,CAC9C,aAAcgxB,EAAkB,OAASzI,EAAM,kBAAoB,MAAA,CACpE,EACK,CAAC,QAAS4sB,IAAiBpxB,GAAS+wB,EAAU,CAClD,aAAc9jB,EAAkB,OAASzI,EAAM,kBAAoB,IAAA,CACpE,EACK,CAAC,QAAS6sB,IAAqBrxB,GAASgxB,EAAc,CAC1D,aAAc/jB,EAAkB,OAASzI,EAAM,kBAAoB,QAAA,CACpE,EACK,CAAC,QAAS8sB,GAAoBtxB,GAASixB,EAAa,CACxD,aAAchkB,EAAkB,OAASzI,EAAM,kBAAoB,OAAA,CACpE,EAEK+sB,EAAe1+B,EAAAA,SAAS,IAAM,CAClC2R,EAAM,WACN,CACE,KAAM,CAACkJ,EAAc,MACrB,KAAM5V,EAAS,KACjB,CAAA,CACD,EAEK05B,GAAct5B,EAAA,MAClB,IACEsQ,EAAY,QAAU,IACrBA,EAAY,QAAU,IAAQ0oB,EAAkB,QAAU,IAC1D1oB,EAAY,QAAU,IAAQyE,EAAkB,QAAU,EAAA,EAGzDwkB,GAA0Bv5B,EAAA,MAAM,IACpCsM,EAAM,kBAAoB,OACtBA,EAAM,gBACNyrB,EAAoB,MACpB,cACA,MAAA,EAGAyB,EAAqBx5B,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,cAAc,CAAC,CAAC,EAEpEkc,EAAqB9+B,EAAAA,SAAS,IAAM,CACxC2R,EAAM,YACN,CACE,mBAAoBssB,EAAmB,QAAU,GACjD,CAAC,oBAAoBA,EAAmB,KAAK,OAAO,EAClD,OAAOA,EAAmB,OAAU,SACtC,CAAC,SAAStsB,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,KACxC,wBAAyBwrB,EAAgB,MACzC,0BAA2BU,EAAkB,KAC/C,CAAA,CACD,EAEKkB,EAAwBnrB,GAAuB,KAAO,CAC1D,UAAWjC,EAAM,cACjB,YAAaA,EAAM,gBACnB,QAASA,EAAM,WACf,EAAA,EAEIqtB,EAAch/B,WAAS,IAAM,CAAC2R,EAAM,UAAWotB,EAAsB,KAAK,CAAC,EAE3EE,EAA0BrrB,GAAuB,KAAO,CAC5D,UAAWjC,EAAM,gBACjB,YAAaA,EAAM,kBACnB,QAASA,EAAM,aACf,EAAA,EAEIutB,EAAgBl/B,EAAAA,SAAS,IAAM,CACnC2R,EAAM,YACNstB,EAAwB,MACxB,CACE,CAAC,UAAUttB,EAAM,mBAAmB,EAAE,EAAGA,EAAM,sBAAwB,IACzE,CAAA,CACD,EAEKwtB,EAAmBn/B,EAAAA,SAAS,KAAO,CACvC,QAAS6+B,EAAmB,MAAQltB,EAAM,mBAAqB,OAC/D,MAAOA,EAAM,gBACb,EAAA,EAEIytB,GAA0BxrB,GAAuB,KAAO,CAC5D,UAAWjC,EAAM,gBACjB,YAAaA,EAAM,kBACnB,QAASA,EAAM,aACf,EAAA,EAEI0tB,EAAgBr/B,EAAAA,SAAS,IAAM,CACnC2R,EAAM,YACNytB,GAAwB,MACxB,CACE,CAAC,UAAUztB,EAAM,mBAAmB,EAAE,EAAGA,EAAM,sBAAwB,IACzE,CAAA,CACD,EAEK2tB,EAAet/B,EAAAA,SAAS,IAAM,CAClC2R,EAAM,WACN,CACG,kBAAoBmsB,EAAmB,KAC1C,CAAA,CACD,EACKyB,EAAgBl6B,EAAAA,MAAM,IAAM63B,EAAsB,OAASD,EAAY,KAAK,EAC5EuC,EAAYn6B,EAAAA,MAAM,IAAMs4B,EAAkB,OAASV,EAAY,KAAK,EAEpEtgB,GAAwB,CAC5B7R,EACA4I,GAAoC,CAAA,IAEpC,IAAIrvB,GAAmBymB,EAAM,CAC3B,WAAY,GACZ,OAAQ1hB,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGsqB,GACH,YAAa8B,EAAW,KAAA,CACzB,EAEGnU,EAAAA,MAAA+Y,EAAmB,CAACpC,EAAU1M,KAAa,CAC3C0M,IAAa1M,KACb0M,IAAa,GACRynB,IAEFjsC,IACP,CACD,EAEK,MAAAA,EAAO,CAACilB,EAAU,KAAO,CAC7B,GACGA,IAAY,YAAc+kB,EAAyB,OACnD/kB,IAAY,OAASglB,EAAoB,MAC1C,CACA7rB,EAAK,gBAAgB,EACrB,MACF,CAEM,MAAA/nB,GAAQ8yB,GAAsB,OAAQ,CAAC,WAAYlE,IAAY,GAAI,QAAAA,EAAQ,EAajF,GAXIA,IAAY,MACd7G,EAAK6G,EAAS5uB,EAAK,EAEjB4uB,IAAY,UACd7G,EAAK6G,EAAS5uB,EAAK,EAEjB4uB,IAAY,SACd7G,EAAK6G,EAAS5uB,EAAK,EAErB+nB,EAAK,OAAQ/nB,EAAK,EAEdA,GAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EAChB2D,EAAW,QAAOA,EAAW,MAAQ,IAC1C,MACF,CACIA,EAAW,QAAOA,EAAW,MAAQ,GAAA,EAKrCkqB,EAAS,IAAM,CACnB,MAAM51C,EAAQ8yB,GAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CACtB0rB,EAAW,QAAOA,EAAW,MAAQ,IACzC3D,EAAK,gBAAgB,EACrB,MACF,CACK2D,EAAW,QAAOA,EAAW,MAAQ,GAAA,EAGtCmqB,GAAgB,IAAM,CACtBhC,EAAiB,QAAU,KAC/B/rB,EAAM,kBAAoB,KACrB4sB,GAAc,MAAQ,GACvB5sB,EAAM,kBAAoB,QACzB8sB,EAAiB,MAAQ,GAC1B9sB,EAAM,kBAAoB,SACzB6sB,GAAkB,MAAQ,GAC1BF,EAAW,MAAQ,GAAA,EAGpBqB,GAAgB,IAAMF,IACtB1T,GAAe,IAAM,CACzB9mB,EAAS,MAAQ,GACHy6B,KACT9tB,EAAA,QAAS+K,GAAsB,OAAO,CAAC,EACxChH,EAAY,QAAU,KAAM0oB,EAAkB,MAAQ,GAAA,EAEtDuB,GAAU,IAAM,CACpB36B,EAAS,MAAQ,EAAA,EAEb6mB,GAAe,IAAM,CACpBla,EAAA,SAAU+K,GAAsB,QAAQ,CAAC,EAC1ChH,EAAY,QAAU,KAAM0oB,EAAkB,MAAQ,GAAA,EAGtD,CAAC,eAAAwB,GAAgB,iBAAAC,EAAgB,EAAI7nB,GAAgBhT,CAAQ,EAE7D86B,GAAiB//B,EAAAA,SAAwB,KAAO,CAKpD,UAAWiF,EAAS,MAChB+3B,IAA4B8C,GAAiB,MAAQD,GAAe,OACpE7C,EACJ,EAAA,EAEe51B,GAAAhe,EAAS,YAAa,IAAM,CACzBgxB,EAAA,MAAQ5mB,EAAK,EAAIisC,EAAO,CAAA,CAC3C,EAED,MAAMO,GAA+BxvB,EAAAA,SAAS,CAC5C,OAAQ,IAAM,CACZhd,EAAK,QAAQ,CACf,EACA,MAAO,IAAM,CACXA,EAAK,OAAO,CACd,EACA,KAAAA,EACA,GAAI,IAAM,CACRA,EAAK,IAAI,CACX,EACA,QAAS4mB,CAAA,CACV,EAEY,OAAAyC,EAAA,CACX,KAAArpB,EACA,GAAIgiB,EACJ,KAAMiqB,CAAA,CACP,omHCjiBD,MAAM9tB,EAAQuI,EAgCR+lB,EAAoBttB,EAAc,IAAMhB,EAAM,UAAU,EACxDuuB,EAAcvtB,EAAc,IAAMhB,EAAM,IAAI,EAC5CwuB,EAAmBxtB,EAAc,IAAMhB,EAAM,SAAS,EACtDyuB,EAAeztB,EAAc,IAAMhB,EAAM,KAAK,EAC9CmR,EAAenQ,EAAc,IAAMhB,EAAM,KAAK,EAC9C0uB,EAAc1tB,EAAc,IAAMhB,EAAM,IAAI,EAC5CuW,EAAkBvV,EAAc,IAAMhB,EAAM,QAAQ,EACpD7lB,EAAY0mB,GAAa,IAAMb,EAAM,KAAK,EAC1C2uB,EAAmB3tB,EAAc,IAAMhB,EAAM,SAAS,EAEtD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,WAAYqgC,EAAY,MACxB,YAAaD,EAAa,OAAS,CAACC,EAAY,MAChD,mBAAoB,CAACnY,EAAgB,OAAS+X,EAAkB,OAASI,EAAY,MACrF,oBACE,CAACnY,EAAgB,OAAS+X,EAAkB,OAASG,EAAa,OAAS,CAACC,EAAY,MAC1F,cAAenY,EAAgB,MAC/B,WAAY,CAACA,EAAgB,OAASgY,EAAY,MAClD,gBAAiB,CAAChY,EAAgB,OAASiY,EAAiB,MAC5D,CAACr0C,EAAU,KAAK,EAAG,CAACo8B,EAAgB,OAASvW,EAAM,QAAU,OAC7D,MAASmR,EAAa,MACtB,gBAAiBwd,EAAiB,KAClC,EAAA,kiBCvBF,MAAM1uB,EAAOuI,EASP+U,EAAatnC,GAAa,CAC9BgqB,EAAK,SAAUhqB,CAAC,CAAA,4rCCzBlB,MAAM+pB,EAAQuI,EAmCRtI,EAAOuI,EAIPzE,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAEpD2B,EAAoBtT,EAAA,SAAS,IACjCuT,GAAK5B,EAAO,CACV,SACA,cACA,SACA,WACA,OACA,OACA,UACA,eACA,MACA,UACA,sBACA,SACA,KACA,kBACA,uBACA,mBACA,wBACA,mBACA,SAAA,CACD,CAAA,EAEH,OAAA2B,EAAkB,MAAM,wzDCxDxB,MAAM3B,EAAQuI,EAwCRtI,EAAOuI,EAoBPomB,EAAW5/B,MAA2C,IAAI,EAE1D8gB,EAAQ,IAAM,QAClB3d,EAAAy8B,EAAS,QAAT,MAAAz8B,EAAgB,OAAM,EAElB4d,EAAO,IAAM,QACjB5d,EAAAy8B,EAAS,QAAT,MAAAz8B,EAAgB,MAAK,EAMV,OAAA+Y,EAAA,CACX,MAAA4E,EACA,KAAAC,EACA,OAPa,IAAM,QACnB5d,EAAAy8B,EAAS,QAAT,MAAAz8B,EAAgB,QAAO,CAMvB,CACD,gzCChGD,MAAM6N,EAAQuI,EA4BRsmB,EAAmB7tB,EAAc,IAAMhB,EAAM,SAAS,EACtD8uB,EAAmB9tB,EAAc,IAAMhB,EAAM,SAAS,EACtD+uB,EAAe/tB,EAAc,IAAMhB,EAAM,KAAK,EAC9CgvB,EAAuBhuB,EAAc,IAAMhB,EAAM,UAAU,EAE3DivB,EAAev7B,EAAM,MAAA,IAAOsM,EAAM,MAAQ,MAAQ,OAAY,YAAa,EAE3EkvB,EAAiB/sB,GAAoB0sB,CAAgB,EAErDhkB,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,UAAW0gC,EAAa,MACxB,CAAC,UAAU/uB,EAAM,MAAM,EAAE,EAAGA,EAAM,SAAW,OAC7C,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,CAAC,SAASA,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,OAC1C,gBAAiBgvB,EAAqB,QAAU,GAChD,CAAC,iBAAiBA,EAAqB,KAAK,EAAE,EAAG,OAAOA,EAAqB,OAAU,QACvF,EAAA,EAEFzf,OAAAA,EAAAA,QAAQtB,GAAoB,CAC1B,IAAKva,EAAA,MAAM,IAAMsM,EAAM,GAAG,EAC1B,UAAW8uB,CAAA,CACZ,mmCC/CD,MAAM9uB,EAAQuI,EAiCR,CAAC,aAAA9G,EAAc,kBAAAE,GAAqBN,GAAerB,EAAO,CAC9D,SACA,cACA,SACA,WACA,OACA,MACA,UACA,sBACA,SACA,KACA,UACA,UACA,eACA,mBACA,kBACA,uBACA,mBACA,wBACA,MAAA,CACD,EAEK6S,EAAcnf,EAAM,MAAA,IAAO+N,EAAa,MAAQqR,GAAQ9S,EAAM,GAAI,0aC7DxE,MAAMA,EAAQuI,EAsBRgmB,EAAcvtB,EAAc,IAAMhB,EAAM,IAAI,EAC5CwuB,EAAmBxtB,EAAc,IAAMhB,EAAM,SAAS,EACtDmR,EAAenQ,EAAc,IAAMhB,EAAM,KAAK,EAC9C7lB,EAAY0mB,GAAa,IAAMb,EAAM,KAAK,EAE1C6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,WAAYkgC,EAAY,MACxB,gBAAiBC,EAAiB,MAClC,CAACr0C,EAAU,KAAK,EAAG6lB,EAAM,QAAU,OACnC,MAASmR,EAAa,KACtB,EAAA,mJCzCIge,GAAW,CAACz5C,EAAiBnB,IAAwBmB,EAAG,aAAa,gBAAiBnB,CAAK,EAClF66C,GAAA,CACb,QAAQ15C,EAAIy2B,EAAiC,CAClCgjB,GAAAz5C,EAAIy2B,EAAQ,KAAK,CAC5B,EACA,QAAQz2B,EAAIy2B,EAAiC,CAClCgjB,GAAAz5C,EAAIy2B,EAAQ,KAAK,CAC5B,CACF,ECNMkjB,GAAa,CAACljB,EAA8Cz2B,IAAoB,CACpF,KAAM,CAAC,UAAA45C,EAAW,IAAAC,EAAK,MAAAh7C,CAAA,EAAS43B,EAE1BqjB,EAAU,OAAO,KAAKF,GAAa,CAAE,CAAA,EAGrCrR,EAAa,OAAO1pC,GAAU,SAAWA,EAAM,MAAMpB,EAAc,EAAIoB,EAG7E,GAAIyC,GAAMtB,EAAG,QAAS,GAAG,EAAG,CAC1B,MAAM+5C,EAAO/4C,GAAQhB,EAAI,MAAM,GAAK,GAChCrC,GAAW,KAAKo8C,CAAI,GACtBD,EAAQ,KAAKC,EAAK,QAAQr8C,GAAS,EAAE,CAAC,CAE1C,CAKA,aAAM,UAAU,OACb,MAAM,CAAA,EAAI,CAACm8C,EAAKtR,CAAU,CAAC,EAC3B,QAASwL,GAAM,OAAOA,GAAM,UAAY+F,EAAQ,KAAK/F,CAAC,CAAC,EAGnD+F,EAAQ,OAAO,CAAC/F,EAAG50C,EAAOw1B,IAAQof,GAAKpf,EAAI,QAAQof,CAAC,IAAM50C,CAAK,CACxE,EAEMwmB,GAAS,CAACq0B,EAAqBh6C,IAAoB,CAC7Cg6C,EAAA,QAASC,GAAa,CACxB,MAAAj6B,EAAS,SAAS,eAAei6B,CAAQ,EAE3Cj6B,IAAW,MACbA,EAAO,cAAc,IAAI,MAAM,WAAW,CAAC,CAC7C,CACD,EACD,WAAW,IAAMk6B,GAAgBF,EAAWh6C,CAAE,EAAG,EAAE,CACrD,EAEMk6C,GAAkB,CAACF,EAAqBh6C,IAAoB,CAChE,IAAIm6C,EAAU,GACJH,EAAA,QAASC,GAAa,CACxB,MAAAj6B,EAAS,SAAS,eAAei6B,CAAQ,EAE3Cj6B,GAAA,MAAAA,EAAQ,UAAU,SAAS,UACnBm6B,EAAA,IAERn6B,GAAA,MAAAA,EAAQ,UAAU,SAAS,aACnBm6B,EAAA,GACZ,CACD,EACDn6C,EAAG,aAAa,gBAAiBm6C,EAAU,OAAS,OAAO,EAC3Dn6C,EAAG,UAAU,OAAOm6C,EAAU,YAAc,eAAe,EAC3Dn6C,EAAG,UAAU,IAAIm6C,EAAU,gBAAkB,WAAW,CAC1D,EAEMC,GAAe,CAACp6C,EAAgBy2B,IAA6D,CAE7F,GAAAA,EAAQ,QAAU,QAAa,OAAO,KAAKA,EAAQ,WAAa,EAAE,EAAE,SAAW,EAAG,OAChF,MAAAqjB,EAAUH,GAAWljB,EAAgDz2B,CAAE,EAGzEA,EAAG,UACFA,EAAA,oBAAoB,QAASA,EAAG,QAAQ,EAE7CA,EAAG,SAAW,IAAM2lB,GAAOm0B,EAAS95C,CAAE,EACnCA,EAAA,iBAAiB,QAASA,EAAG,QAAQ,EAGxCA,EAAG,aAAa,gBAAiB85C,EAAQ,KAAK,GAAG,CAAC,EAClDI,GAAgBJ,EAAS95C,CAAE,CAC7B,EAMeq6C,GAAA,CACb,QAASD,GACT,QAASA,GACT,UAAUp6C,EAAsB,CAC3BA,EAAA,oBAAoB,QAASA,EAAG,QAAQ,EAC3CA,EAAG,gBAAgB,eAAe,EAClCA,EAAG,gBAAgB,eAAe,CACpC,CACF,EC9Ee62B,GAAA,CACb,QAAQ72B,EAAIy2B,EAAS,CAEnB,GAAI,CADaN,GAAoBM,EAAQ,KAAK,EACnC,OAEf,MAAM7G,EAAOyG,GAAeI,EAAQ,MAAOz2B,CAAE,EAEzC,CAAC4vB,EAAK,SAAW,CAACA,EAAK,QAE3B5vB,EAAG,SAAWsZ,MAAI,CAChB,GAAGkd,GAAsBC,EAASz2B,CAAE,EACpC,GAAG4vB,CAAA,CACJ,EACD+F,GAAK31B,EAAIy2B,CAAO,EAClB,EACA,QAAQz2B,EAAIy2B,EAAS,CAEnB,GAAI,CADaN,GAAoBM,EAAQ,KAAK,EACnC,OAEf,MAAM7G,EAAOyG,GAAeI,EAAQ,MAAOz2B,CAAE,EAE7C,GAAI,GAAC4vB,EAAK,SAAW,CAACA,EAAK,OAEvB,IAAA,CAAC5vB,EAAG,SAAU,CAIhBA,EAAG,SAAWsZ,MAAI,CAChB,GAAGkd,GAAsBC,EAASz2B,CAAE,EACpC,GAAG4vB,CAAA,CACJ,EACD+F,GAAK31B,EAAIy2B,CAAO,EAChB,MACF,CACAz2B,EAAG,SAAS,MAAQ,CAClB,GAAGw2B,GAAsBC,EAASz2B,CAAE,EACpC,GAAG4vB,CAAA,EAEP,EACA,cAAc5vB,EAAI,CAChB61B,GAAO71B,CAAE,CACX,CACF,EC1Ces6C,GAAA,CACb,QAAQt6C,EAAIy2B,EAAS,CACb,MAAA7Y,EAAWuY,GAAoBM,EAAQ,KAAK,EAClD,GAAI,CAAC7Y,EAAU,OAEf,MAAMgS,EAAOyG,GAAeI,EAAQ,MAAOz2B,CAAE,EAEzC,CAAC4vB,EAAK,SAAW,CAACA,EAAK,QAE3B5vB,EAAG,SAAWsZ,MAAI,CAChB,eAAgB,GAChB,GAAGkd,GAAsBC,EAASz2B,CAAE,EACpC,MAAO4vB,EAAK,OAASA,EAAK,SAAW,GACrC,QAAShS,CAAA,CACV,EACD+X,GAAK31B,EAAIy2B,CAAO,EAClB,EACA,QAAQz2B,EAAIy2B,EAAS,CACb,MAAA7Y,EAAWuY,GAAoBM,EAAQ,KAAK,EAClD,GAAI,CAAC7Y,EAAU,OAEf,MAAMgS,EAAOyG,GAAeI,EAAQ,MAAOz2B,CAAE,EAE7C,GAAI,GAAC4vB,EAAK,SAAW,CAACA,EAAK,OAEvB,IAAA,CAAC5vB,EAAG,SAAU,CAIhBA,EAAG,SAAWsZ,MAAI,CAChB,eAAgB,GAChB,GAAGkd,GAAsBC,EAASz2B,CAAE,EACpC,MAAO4vB,EAAK,OAASA,EAAK,SAAW,GACrC,QAAShS,CAAA,CACV,EACD+X,GAAK31B,EAAIy2B,CAAO,EAChB,MACF,CACAz2B,EAAG,SAAS,MAAQ,CAClB,eAAgB,GAChB,GAAGw2B,GAAsBC,EAASz2B,CAAE,EACpC,MAAO4vB,EAAK,OAASA,EAAK,SAAW,GACrC,QAAShS,CAAA,EAEb,EACA,cAAc5d,EAAI,CAChB61B,GAAO71B,CAAE,CACX,CACF,kcCpCA,MAAMsqB,EAAQuI,EAaRtI,EAAOuI,EAUPzE,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EAEpD6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,SAAU0V,EAAgB,KAC1B,EAAA,EAEIksB,EAAWh6C,GAAwB,CAClC8tB,EAAgB,OACnB9D,EAAK,QAAShqB,CAAC,CACjB,kzCCuCF,MAAM+pB,EAAQuI,EAsDRtI,EAAOuI,EAYPyI,EAAQC,EAAAA,WA+BRtN,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EAEjEwI,EAAoBzH,EAAc4C,CAAU,EAC5CyoB,EAAuBrrB,EAAc,IAAMhB,EAAM,aAAa,EAC9DkwB,EAAkBlvB,EAAc,IAAMhB,EAAM,QAAQ,EACpDmwB,EAAuBnvB,EAAc,IAAMhB,EAAM,aAAa,EAC9DowB,EAAkBpvB,EAAc,IAAMhB,EAAM,QAAQ,EACpDqwB,EAAiBrvB,EAAc,IAAMhB,EAAM,OAAO,EAClD6rB,EAA2B7qB,EAAc,IAAMhB,EAAM,iBAAiB,EACtE8rB,EAAsB9qB,EAAc,IAAMhB,EAAM,YAAY,EAC5DgE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5CosB,EAA0BprB,EAAc,IAAMhB,EAAM,gBAAgB,EAEpE6D,EAAaL,GAAM,IAAMxD,EAAM,GAAI,WAAW,EACpDyH,GAAkBgB,EAAmB4jB,CAAoB,EAEnD,MAAA50C,EAAUuX,MAAwB,IAAI,EAE5C8H,GACE,SACA,IAAM,CACJjV,EAAK,KAAK,CACZ,EACA,CAAC,OAAQpK,CAAO,CAAA,EAGlB,KAAM,CAAC,QAAAokB,CAAA,EAAWL,GAAS/jB,EAAS,CAClC,aAAcgxB,EAAkB,OAAS4nB,EAAe,QAAU,EAAA,CACnE,EAEK/8B,EAAWtE,EAAAA,IAAIyZ,EAAkB,KAAK,EACtCikB,EAAoB19B,MAAI,EAAK,EAE7BshC,EAAe58B,QAAM,IAAMw8B,EAAgB,QAAU,IAAQznB,EAAkB,QAAU,EAAI,EAE7FukB,EAAct5B,EAAA,MAClB,IACEsQ,EAAY,QAAU,IACrBA,EAAY,QAAU,IAAQ0oB,EAAkB,QAAU,IAC1D1oB,EAAY,QAAU,IAAQyE,EAAkB,QAAU,EAAA,EAGzDykB,EAAqBx5B,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,cAAc,CAAC,CAAC,EACpEsf,EAAqBliC,EAAAA,SAAS,IAAM,CACxC,CAAC,aAAc,CAAC6+B,EAAmB,KAAK,EACxCltB,EAAM,gBAAA,CACP,EACKwtB,EAAmBn/B,EAAAA,SAAS,KAAO,CACvC,QAAS6+B,EAAmB,MAAQltB,EAAM,mBAAqB,OAC/D,MAAOuwB,EAAmB,KAC1B,EAAA,EAEIlY,EAAgB3kB,EAAAA,MAAM,IAAM,CAACrd,GAAY46B,EAAM,MAAM,CAAC,EACtDpG,EAAkBxc,EAAAA,SAAS,IAAM,CAErC,YACA,aAAa2R,EAAM,SAAS,GAC5B,CACE,KAAMyI,EAAkB,OAASnV,EAAS,QAAU,EACtD,CAAA,CACD,EAEK0X,EAAwB,CAC5B7R,EACA4I,EAAoC,CAAA,IAEpC,IAAIrvB,GAAmBymB,EAAM,CAC3B,WAAY,GACZ,OAAQ1hB,EAAQ,OAAS,KACzB,cAAe,KACf,QAAS,KACT,GAAGsqB,EACH,YAAa8B,EAAW,KAAA,CACzB,EAEGhiB,EAAO,CAACilB,EAAU,KAAO,CAC7B,GACGA,IAAY,YAAc+kB,EAAyB,OACnD/kB,IAAY,OAASglB,EAAoB,MAC1C,CACA7rB,EAAK,gBAAgB,EACrB,MACF,CAEM,MAAA/nB,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAYlE,IAAY,GAAI,QAAAA,EAAQ,EAUjF,GARIA,IAAY,SACd7G,EAAK6G,EAAS5uB,CAAK,EAEjB4uB,IAAY,OACd7G,EAAK6G,EAAS5uB,CAAK,EAErB+nB,EAAK,OAAQ/nB,CAAK,EAEdA,EAAM,iBAAkB,CAC1B+nB,EAAK,gBAAgB,EACrB,MACF,CAEA2D,EAAW,MAAQ,EAAA,EAGfgF,EAAO,IAAM,CACjB,MAAM1wB,EAAQ8yB,EAAsB,OAAQ,CAAC,WAAY,GAAK,EAE9D,GADA/K,EAAK,OAAQ/nB,CAAK,EACdA,EAAM,iBAAkB,CAC1B0rB,EAAW,MAAQ,GACnB3D,EAAK,gBAAgB,EACrB,MACF,CACA2D,EAAW,MAAQ,EAAA,EAGf2e,EAAQ,IAAM,CAClBhuB,EAAAA,SAAS,IAAM,CACT87B,EAAe,QAAU,KAC3Bx0B,EAAQ,MAAQ,GAClB,CACD,CAAA,EAGG20B,EAAgB,IAAM5nB,IACtB6nB,EAAe,IAAM,CACzBn9B,EAAS,MAAQ,GACXivB,IACDtiB,EAAA,QAAS+K,EAAsB,OAAO,CAAC,EACxChH,EAAY,QAAU,KAAM0oB,EAAkB,MAAQ,GAAA,EAEtDuB,GAAU,IAAM,CACpB36B,EAAS,MAAQ,EAAA,EAEbo9B,GAAe,IAAM,CACpBzwB,EAAA,SAAU+K,EAAsB,QAAQ,CAAC,EAC1ChH,EAAY,QAAU,KAAM0oB,EAAkB,MAAQ,GAAA,EAE3C,OAAAj3B,GAAAhe,EAAS,YAAa,IAAM,CACzBgxB,EAAA,MAAQ5mB,EAAK,EAAI+mB,EAAK,CAAA,CACzC,EAEYsC,EAAA,CACX,KAAArpB,EACA,KAAA+mB,CAAA,CACD,iuECkIK+nB,GAAmB,GACnBC,GAAqB,wjCA7U3B,MAAM5wB,EAAQuI,EAmERtI,EAAOuI,EAKP5E,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD8D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpD6wB,EAAqB7vB,EAAc,IAAMhB,EAAM,WAAW,EAC1D8wB,EAAsB9vB,EAAc,IAAMhB,EAAM,YAAY,EAC5D+wB,EAA4B/vB,EAAc,IAAMhB,EAAM,kBAAkB,EACxEgxB,EAAoBhwB,EAAc,IAAMhB,EAAM,UAAU,EACxDyuB,EAAeztB,EAAc,IAAMhB,EAAM,KAAK,EAE9CixB,EAAgBj8B,GAAY,IAAMgL,EAAM,QAAS,CAAC,UAAW,GAAM,OAAQ,UAAA,CAAW,EACtFkxB,EAAkBl8B,GAAY,IAAMgL,EAAM,UAAW,CAAC,UAAW,GAAM,OAAQ,UAAA,CAAW,EAC1FmxB,EAAmBn8B,GAAY4O,EAAY,CAAC,UAAW,GAAM,OAAQ,WAAW,EAEhFwtB,EAAmB19B,QAAM,IAAM,KAAK,IAAIu9B,EAAc,OAASN,GAAkB,CAAC,CAAC,EACnFU,EAAqB39B,QAAM,IAAM,KAAK,IAAIw9B,EAAgB,OAASN,GAAoB,CAAC,CAAC,EAEzFU,EAAgB59B,QAAM,IAAM,KAAK,KAAK29B,EAAmB,MAAQD,EAAiB,KAAK,CAAC,EACxFG,EAAe79B,EAAAA,MAAM,IAAMsM,EAAM,QAAU,MAAM,EAEjDwxB,EAAe99B,QAAM,IAAOsM,EAAM,QAAU,OAAS,QAAUA,EAAM,KAAM,EAE3E7lB,EAAY0mB,GAAa2wB,CAAY,EAErCC,EAAgBC,GAAuBA,IAAeP,EAAiB,MACvEQ,EAAeC,GAAiB7tB,EAAgB,MAAQ,KAAO0tB,EAAaG,CAAG,EAAI,IAAM,KAEzFC,EAAiBD,GACrB7tB,EAAgB,OAChB0tB,EAAaG,CAAG,GAChBT,EAAiB,MAAQ,GAEzBS,EAAM,GACNA,EAAMN,EAAc,MAEhBQ,EAAgBzjC,EAAA,SAAS,IAAMwjC,EAAc,CAAC,CAAC,EAC/CE,EAAe1jC,EAAAA,SAAS,IAAMwjC,EAAcV,EAAiB,MAAQ,CAAC,CAAC,EACvEa,EAAe3jC,EAAAA,SAAS,IAAMwjC,EAAcP,EAAc,KAAK,CAAC,EAChEW,EAAe5jC,EAAAA,SAAS,IAAMwjC,EAAcV,EAAiB,MAAQ,CAAC,CAAC,EAEvEe,EAAoB,CAACC,EAAcC,KAA0B,CACjE,GAAI,CACF,MAAO,CACL,YACA,CACE,SAAYD,EACZ,YAAaZ,EAAa,MAC1B,SAAUA,EAAa,OAAS,CAACY,CACnC,EACAC,CACF,CACF,EACA,OAAQ,CACN,GAAMD,EAAM,OAAS,SACrB,MAAS,CAAC,YAAa,CAAC,cAAe,CAACA,GAAOZ,EAAa,MAAM,EAClE,aAAcvxB,EAAM,eACpB,gBAAiBA,EAAM,cAAgB,OACvC,gBAAiBmyB,EAAM,GAAO,OAC9B,KAAQ,WACR,KAAQA,EAAM,OAAY,SAC1B,SAAYA,EAAM,OAAY,IAChC,CAAA,GAGIE,EAAmBhkC,WAAS,IAAM6jC,EAAkBJ,EAAc,MAAO9xB,EAAM,UAAU,CAAC,EAC1FsyB,EAAkBjkC,WAAS,IAAM6jC,EAAkBH,EAAa,MAAO/xB,EAAM,SAAS,CAAC,EACvFuyB,EAAkBlkC,WAAS,IAAM6jC,EAAkBD,EAAa,MAAOjyB,EAAM,SAAS,CAAC,EACvFwyB,EAAqBnkC,WAAS,IAAM6jC,EAAkBF,EAAa,MAAOhyB,EAAM,SAAS,CAAC,EAE1FyyB,EAAgBpkC,EAAAA,SAAS,KAAO,CACpC,GAAI,CACF,MAAO,CACL,YACA,WACA,oBACAkjC,EAAa,MAAQ,YAAc,GACnCvxB,EAAM,aACR,EACA,KAAM,WACR,EACA,KAAM,CACJ,MAAO,CAAC,WAAW,CACrB,CACA,EAAA,EAEI0yB,EAAyBrkC,EAAAA,SAAS,IAAM,CAC5ClU,EAAU,MACV,CACE,CAAC,cAAc6lB,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,OAC7C,qBAAsByuB,EAAa,KACrC,CAAA,CACD,EAEKkE,GAActkC,EAAAA,SAAS,IAAM,CAC7B,IAAAukC,EAGJ,OAF0BtB,EAAc,MAAQH,EAAiB,MAEjD,EAAInxB,EAAM,OAASA,EAAM,MAAQ,EAChC4yB,EAAAtB,EAAc,MAAQuB,EAAc,MAAQ,EAG3DD,EAAezB,EAAiB,MAAQ,KAAK,MAAM0B,EAAc,MAAQ,CAAC,EAGxED,EAAe,EACFA,EAAA,EACNA,EAAetB,EAAc,MAAQuB,EAAc,QAC7CD,EAAAtB,EAAc,MAAQuB,EAAc,MAAQ,GAQzD7yB,EAAM,OAAS,GACbgxB,EAAkB,OAASM,EAAc,QAAUsB,EAAeC,EAAc,MAAQ,IAC1FD,EAAe,KAAK,IAAIA,EAAe,EAAG,CAAC,GAGxCA,CAAA,CACR,EAEKE,GAAgBzkC,EAAAA,SAAS,IAAM,CAC7B,MAAA0kC,EAAYzB,EAAc,MAAQH,EAAiB,MACzD,IAAI6B,EAAY,GAEhB,OAAID,EAAY,EAAI/yB,EAAM,OAASA,EAAM,MAAQ,EAC3CA,EAAM,MAAQ,IACJgzB,EAAA,IAGVhzB,EAAM,MAAQ,IAChBgzB,EAAY,CAAC,EAAE,CAAClC,EAAoB,OAASD,EAAmB,QAGhE8B,GAAY,OAAS,IACXK,EAAA,IAGVA,GAAanC,EAAmB,OAAS8B,GAAY,MAAQ,IACnDK,EAAA,IAGPA,CAAA,CACR,EAGKH,EAAgBxkC,EAAAA,SAAS,IAAM,CACnC,IAAI4kC,EAAYjzB,EAAM,MAElB,OAAAsxB,EAAc,OAAStxB,EAAM,MAC/BizB,EAAI3B,EAAc,MACTH,EAAiB,MAAQnxB,EAAM,MAAQ,GAAKA,EAAM,MAAQ,IAC/D,CAAC8wB,EAAoB,OAASE,EAAkB,SAClDiC,EAAIjzB,EAAM,OAAS6wB,EAAmB,MAAQ,EAAI,IAEpDoC,EAAI,KAAK,IAAIA,EAAGjzB,EAAM,KAAK,GAE3BsxB,EAAc,MAAQH,EAAiB,MAAQ,EAAInxB,EAAM,OACzDA,EAAM,MAAQ,GAEV,CAAC8wB,EAAoB,OAASD,EAAmB,SACnDoC,EAAIjzB,EAAM,OAASgxB,EAAkB,MAAQ,EAAI,IAI/ChxB,EAAM,MAAQ,IAChBizB,EAAIjzB,EAAM,OAAS8wB,EAAoB,MAAQ,EAAI,IAIhDmC,CAAA,CACR,EAEKC,EAAe7kC,EAAAA,SAAS,IAAM,CAC5B,MAAA8kC,EAAsB7B,EAAc,MAAQuB,EAAc,MAEhE,IAAIG,EAAY,GAEZ7B,EAAiB,MAAQnxB,EAAM,MAAQ,GAAKA,EAAM,MAAQ,GACxD,CAAC8wB,EAAoB,OAASE,EAAkB,SACtCgC,EAAA,IAGVhzB,EAAM,MAAQ,IAChBgzB,EAAY,CAAC,EAAE,CAAClC,EAAoB,OAASE,EAAkB,QAG/D2B,GAAY,MAAQQ,IACVH,EAAA,IAEd,MAAMI,EAAiBT,GAAY,MAAQE,EAAc,MAAQ,EAEjE,OAAIG,GAAahC,EAAkB,OAASoC,EAAiB9B,EAAc,MAAQ,IACrE0B,EAAA,IAGPA,CAAA,CACR,EAEKK,GAAahlC,EAAAA,SAAS,KAAO,CACjC,SAAU+iC,EAAiB,MAC3B,UAAWF,EAAgB,MAC3B,cAAeI,EAAc,KAC7B,EAAA,EAEIgC,GAAY,CAACp7C,EAAmBw5C,IAAuB,CAC3D,GAAIA,IAAeP,EAAiB,MAAO,OAErC,MAAAoC,EAAa,IAAInhD,GAAQ,aAAc,CAC3C,WAAY,GACZ,OAAQ8F,EAAM,MAAA,CACf,EACI+nB,EAAA,aAAcszB,EAAY7B,CAAU,EAErC,CAAA6B,EAAW,mBAEf3vB,EAAW,MAAQ8tB,EAAA,EAWfhiC,QAAAyhC,EAAmB9qB,GAAa,CAKpC,MAAMmtB,GAJsB,CAACj/C,EAAe+8C,IAA0B,CACpE,MAAMmC,EAAOl/C,GAAS,EACtB,OAAOk/C,EAAOnC,EAAgBA,EAAgBmC,EAAO,EAAI,EAAIA,CAAA,GAEnBptB,EAAUirB,EAAc,KAAK,EACrEkC,IAAoB5vB,EAAW,QACnCA,EAAW,MAAQ4vB,EAAA,CACpB,EAEK9jC,EAAAA,MAAA2jC,GAAY,CAAC15B,EAAU0M,IAAa,EACpCA,EAAS,WAAa1M,EAAS,UAAY0M,EAAS,YAAc1M,EAAS,WAI7E0M,EAAS,gBAAkB1M,EAAS,eACpCw3B,EAAiB,MAAQ9qB,EAAS,iBAIlCzC,EAAW,MAAQ,EACrB,CACD,EAED,MAAM8vB,EAAQrlC,EAAA,SAAS,IACrB,MAAM,KAAK,CAAC,OAAQwkC,EAAc,KAAK,EAAG,CAAC,EAAGh+C,KAAW,CACvD,OAAQ89C,GAAY,MAAQ99C,CAAA,EAC5B,CAAA,kxHCrbJ,MAAMmrB,EAAQuI,EAqBRorB,EAAcjgC,EAAA,MAAM,IACxBsM,EAAM,QAAU,OACZ,OACA,OAAOA,EAAM,OAAU,SACvBA,EAAM,MAAM,WACZA,EAAM,MAAM,QAAQ,IAAK,EAAE,CAAA,EAG3B4zB,EAAalgC,EAAA,MAAM,IACvBsM,EAAM,OAAS,OACX,OACA,OAAOA,EAAM,MAAS,SACtBA,EAAM,KAAK,WACXA,EAAM,IAAA,EAGN6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,OAAOulC,EAAW,KAAK,EAAE,EAAGA,EAAW,QAAU,QAAaD,EAAY,QAAU,OACrF,CAAC,MAAM3zB,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,CAAC,eAAeA,EAAM,IAAI,EAAE,EAAGA,EAAM,OAAS,IAC9C,EAAA,EAEI6zB,EAAiBxlC,EAAAA,SAAS,KAAO,CACrC,CAAC,eAAe2R,EAAM,SAAS,EAAE,EAAGA,EAAM,YAAc,MACxD,EAAA,EAEI3V,EAAgBgE,EAAAA,SAAwB,KAAO,CACnD,MAAOslC,EAAY,QAAU,OAAY,OAAY,GAAGA,EAAY,KAAK,GACzE,EAAA,ggBCpDF,MAAM3zB,EAAQuI,EAiBRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,OAAO2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC5C,EAAA,85BCoBF,MAAMA,EAAQuI,EAwDRurB,EAAkB9yB,EAAc,IAAMhB,EAAM,QAAQ,EACpDowB,EAAkBpvB,EAAc,IAAMhB,EAAM,QAAQ,EACpD+zB,EAAkB/yB,EAAc,IAAMhB,EAAM,QAAQ,EACpDg0B,EAAehzB,EAAc,IAAMhB,EAAM,KAAK,EAE9Ci0B,EAAe5lC,EAAAA,SAAS,KAAO,CACnC,UAAW2R,EAAM,UACjB,KAAMA,EAAM,KACZ,QAASA,EAAM,OACf,EAAA,EAEIk0B,EAAkBxgC,EAAAA,MAAM,IAAQogC,EAAgB,MAA6BK,GAArBC,EAAkC,woECvGhG,MAAMp0B,EAAQuI,EA0BR8rB,EAAoBrzB,EAAc,IAAMhB,EAAM,UAAU,EACxDs0B,EAAoBtzB,EAAc,IAAMhB,EAAM,UAAU,EACxDu0B,EAAkBvzB,EAAc,IAAMhB,EAAM,QAAQ,EACpDw0B,EAAcxzB,EAAc,IAAMhB,EAAM,IAAI,EAC5Cy0B,EAAezzB,EAAc,IAAMhB,EAAM,KAAK,EAC9CmR,EAAenQ,EAAc,IAAMhB,EAAM,KAAK,EAC9C00B,EAAiB1zB,EAAc,IAAMhB,EAAM,OAAO,EAClD20B,EAAsB3zB,EAAc,IAAMhB,EAAM,YAAY,EAC5D40B,EAAwB5zB,EAAc,IAAMhB,EAAM,cAAc,EAChE60B,EAAqB7zB,EAAc,IAAMhB,EAAM,UAAU,EACzD80B,EAAkB9zB,EAAc,IAAMhB,EAAM,OAAO,EAEnD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrC2R,EAAM,WACN,QACA,UACA,CACE,iBAAkBu0B,EAAgB,MAClC,mBAAoBD,EAAkB,MACtC,CAAC,UAAUt0B,EAAM,aAAa,EAAE,EAAGA,EAAM,gBAAkB,KAC3D,cAAeq0B,EAAkB,MACjC,aAAcG,EAAY,MAC1B,cAAeC,EAAa,MAC5B,kBAAmBK,EAAgB,QAAU,GAC7C,CAAC,mBAAmBA,EAAgB,KAAK,EAAE,EAAG,OAAOA,EAAgB,OAAU,SAC/E,gBAAiBJ,EAAe,MAChC,WAAYvjB,EAAa,MACzB,CAAC,SAASnR,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyB40B,EAAsB,KACjD,CAAA,CACD,EAEKG,EAAoB1mC,EAAAA,SAAS,KAAO,CACxC,mBAAoBwmC,EAAmB,QAAU,GACjD,CAAC,oBAAoBA,EAAmB,KAAK,EAAE,EAAG,OAAOA,EAAmB,OAAU,SACtF,wBAAyBF,EAAoB,KAC7C,EAAA,w6BC3BF,MAAM30B,EAAQuI,EAoDRysB,EAAkBhgC,GAAY,IAAMgL,EAAM,OAAO,EACjDi1B,EAAejgC,GAAY,IAAMgL,EAAM,IAAI,EAC3Ck1B,EAAwBxhC,EAAAA,MAAM,IAAMsM,EAAM,eAAiB,GAAG,EAC9Dm1B,EAAwBzhC,EAAAA,MAAM,IAAMsM,EAAM,eAAiB,GAAG,EAC9Do1B,EAAsBpgC,GAAYkgC,CAAqB,EACvDG,EAAsBrgC,GAAYmgC,CAAqB,EAEvDG,EAAgB5hC,EAAAA,MAAM,IAAMshC,EAAgB,OAAS,CAAC,EACtDO,EAAa7hC,EAAAA,MAAM,IAAMuhC,EAAa,OAAS,CAAC,EAEhDO,EAA8B9hC,EAAA,MAAM,IACxCsM,EAAM,gBAAkB,OAAYs1B,EAAc,MAAQF,EAAoB,KAAA,EAE1EK,EAA8B/hC,EAAA,MAAM,IACxCsM,EAAM,gBAAkB,OAAYs1B,EAAc,MAAQD,EAAoB,KAAA,EAG1E1J,EAAoB3qB,EAAc,IAAMhB,EAAM,UAAU,EACxD01B,EAAoB10B,EAAc,IAAMhB,EAAM,UAAU,4kDCpH9D,MAAMA,EAAQuI,EAgBR+J,EAAiBtR,EAAc,IAAMhB,EAAM,OAAO,+jBCFxD,MAAMA,EAAQuI,EAoBRkI,EAAaC,EAAAA,OAAOjD,GAAsB,IAAI,EAE9CkoB,EAAkB30B,EAAc,IAAMhB,EAAM,QAAQ,EACpD41B,EAAsB50B,EAAc,IAAMhB,EAAM,YAAY,EAC5D61B,EAAmB70B,EAAc,IAAMhB,EAAM,SAAS,EACtD00B,EAAiB1zB,EAAc,IAAMhB,EAAM,OAAO,EAClDsV,EAA4BrT,GAAuBjC,CAAK,EAExD6K,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,wBAAyBqgB,EAAgB,QAASllB,GAAA,YAAAA,EAAY,SAAS,OACvE,uBACEikB,EAAe,QACfjkB,GAAA,YAAAA,EAAY,QAAQ,QACpBklB,EAAgB,QAChBllB,GAAA,YAAAA,EAAY,SAAS,MACzB,CAAA,CACD,EAEKqlB,EAAkB9gC,GAAY,IAAMgL,EAAM,SAAS,EACnD+1B,EAAc/gC,GAAY,IAAMgL,EAAM,KAAK,EAC3Cg2B,EAAYhhC,GAAY,IAAMgL,EAAM,KAAO,GAAG,EAC9Ci2B,EAAkBjhC,GAAY,KAAMyb,GAAA,YAAAA,EAAY,IAAI,QAAS,GAAG,EAEhEylB,EAAgB7nC,EAAA,SAAS,IAC7B2R,EAAM,YAAc,OAChBA,EAAM,UACN61B,EAAiB,OAASplB,GAAA,MAAAA,EAAY,UAAU,MAChDslB,EAAY,MAAM,QAAQD,EAAgB,KAAK,EAC/CF,EAAoB,OAASnlB,GAAA,MAAAA,EAAY,aAAa,OACpDslB,EAAY,MAAQ,KAAQC,EAAU,OAAS,MAAM,QAAQF,EAAgB,KAAK,EACpF91B,EAAM,QAAU,OAChBA,EAAM,MACN,EAAA,EAGAm2B,EAAgB9nC,EAAA,SAAS,IAC7B4nC,EAAgB,MACZ,GAAIF,EAAY,MAAQ,IAAOE,EAAgB,KAAK,IACpDD,EAAU,MACV,GAAID,EAAY,MAAQ,IAAOC,EAAU,KAAK,IAC9C,OAAOh2B,EAAM,OAAU,SACvBA,EAAM,MACN,GAAGA,EAAM,KAAK,GAAA,2vBC7DpB,MAAMA,EAAQuI,EA4BRotB,EAAkB30B,EAAc,IAAMhB,EAAM,QAAQ,EACpD41B,EAAsB50B,EAAc,IAAMhB,EAAM,YAAY,EAC5D61B,EAAmB70B,EAAc,IAAMhB,EAAM,SAAS,EACtD00B,EAAiB1zB,EAAc,IAAMhB,EAAM,OAAO,EAExDuP,OAAAA,EAAAA,QAAQ9B,GAAsB,CAC5B,SAAUkoB,EACV,IAAKjiC,EAAA,MAAM,IAAMsM,EAAM,GAAG,EAC1B,aAAc41B,EACd,UAAWC,EACX,QAASnB,CAAA,CACV,sgBChDK0B,GAAe5pB,GAAmB,OAAQ,CAAC,EAAE,EAAG,CAAC,KAAM,CAAC,OAAQ,MAAM,EAAG,QAAS,IAAK,CAAA,EAE7F6pB,GAAexb,kBAAgB,CAC7B,KAAM,OACN,MAAO,OAGP,MAAO,CACL,IAAK,CAAC,KAAM,OAAQ,QAAS,KAAK,EAClC,QAAS,CAAC,KAAM,OAAQ,QAAS,IAAI,EACrC,QAAS,CAAC,KAAM,OAAQ,QAAS,IAAI,EACrC,UAAW,CAAC,KAAM,CAAC,QAAS,MAAM,EAA2B,QAAS,EAAK,EAC3E,OAAQ,CAAC,KAAM,OAAuC,QAAS,IAAI,EACnE,OAAQ,CAAC,KAAM,OAA6C,QAAS,IAAI,EACzE,aAAc,CAAC,KAAM,OAAsC,QAAS,IAAI,EACxE,GAAGub,EACL,EACA,MAAMp2B,EAAO,CACX,MAAMs2B,EAAmBt1B,EAAc,IAAMhB,EAAM,SAAS,EACtD7lB,EAAY0mB,GAAa,IAAMb,EAAM,MAAM,EAE3Cu2B,EAAiBloC,WAAS,IAAM2U,GAAWhD,EAAOo2B,GAAc,OAAQ,UAAU,CAAC,EAclF,MAAA,CACL,gBAbsB/nC,EAAAA,SAAS,IAAM,CACrCkoC,EAAe,MACf,CACE,CAAC,MAAMv2B,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,CAAC,MAAMA,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC3C,MAAOs2B,EAAiB,MACxB,CAAC,eAAet2B,EAAM,MAAM,EAAE,EAAGA,EAAM,SAAW,KAClD,CAAC7lB,EAAU,KAAK,EAAG6lB,EAAM,SAAW,KACpC,CAAC,iBAAiBA,EAAM,YAAY,EAAE,EAAGA,EAAM,eAAiB,IAClE,CAAA,CACD,CAGC,CAEJ,CACF,CAAC,EAvD2B,SAAAib,GAAAC,EAAAC,EAAeC,EAAeC,EAAAC,EAAAC,EAAA,sEAC9C,MAAAC,EAAAA,eAAA,CAAA,MAAAN,EAAA,eAAA,CAAA,CAAA,EAAA,2LCQZ,MAAMlb,EAAQuI,EAcRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,6YCNF,MAAMA,EAAQuI,EAsBRiuB,EAAsBx1B,EAAc,IAAMhB,EAAM,YAAY,EAE5D6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyBw2B,EAAoB,MAC7C,wBAAyBA,EAAoB,OAASx2B,EAAM,UAAY,IACxE,EAAA,EAEI3O,EAAQqC,EAAAA,MAAM,IAAOsM,EAAM,QAAU,UAAYA,EAAM,QAAU,UAAY,KAAM,iZCxCzF,MAAMA,EAAQuI,EAcRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,6YCNF,MAAMA,EAAQuI,EAsBRiuB,EAAsBx1B,EAAc,IAAMhB,EAAM,YAAY,EAE5D6K,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,KAC9C,wBAAyBw2B,EAAoB,MAC7C,wBAAyBA,EAAoB,OAASx2B,EAAM,UAAY,IACxE,EAAA,EAEI3O,EAAQqC,EAAAA,MAAM,IAAOsM,EAAM,QAAU,UAAYA,EAAM,QAAU,UAAY,KAAM,0ZCxCzF,MAAMA,EAAQuI,EAcRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,kNChBF,MAAMA,EAAQuI,EAcRsC,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,CAAC,SAAS2R,EAAM,OAAO,EAAE,EAAGA,EAAM,UAAY,IAC9C,EAAA,2iECgLF,MAAMA,EAAQuI,EAgDRtI,EAAOuI,EAaPiuB,EAAmBz1B,EAAc,IAAMhB,EAAM,SAAS,EACtD02B,EAAsB11B,EAAc,IAAMhB,EAAM,YAAY,EAC5D22B,EAAmB31B,EAAc,IAAMhB,EAAM,SAAS,EACtD42B,EAAkB51B,EAAc,IAAMhB,EAAM,OAAO,EAEnD62B,EAAuBxoC,EAAAA,SAAS,IAAM,CAC1C2R,EAAM,WACN,CACE,CAAC,SAASA,EAAM,KAAK,EAAE,EAAGA,EAAM,QAAU,MAC5C,CAAA,CACD,EAEK82B,EAAiBzoC,EAAAA,SAA6B,IAC9C,CAAC2R,EAAM,OAAO,QAAUA,EAAM,MAAM,OAC/B,OAAO,KAAKA,EAAM,MAAM,CAAC,CAAC,EAAE,IAAK+2B,GAAM,CACtC,MAAA5+C,EAAQvE,GAAUmjD,CAAC,EAClB,MAAA,CACL,IAAKA,EACL,MAAA5+C,EACA,OAAQy+C,EAAgB,QAAU,GAAO,CAAC,aAAcz+C,CAAS,EAAA,MAAA,CACnE,CACD,EAGI6nB,EAAM,OAAO,IAAK,GAAM,CACzB,GAAA,OAAO,GAAM,SAAU,CACnB,MAAA7nB,EAAQvE,GAAU,CAAC,EAClB,MAAA,CACL,IAAK,EACL,MAAAuE,EACA,OAAQy+C,EAAgB,QAAU,GAAO,CAAC,aAAcz+C,CAAS,EAAA,MAAA,CAErE,CACO,MAAA,CACL,GAAG,EACH,OACEy+C,EAAgB,QAAU,GAAO,CAAC,aAAchjD,GAAU,EAAE,GAAG,EAAG,GAAG,EAAE,QAAU,EAAE,MAAA,CACvF,CAED,CACF,EACKojD,EAAsBtjC,EAAAA,MAAM,IAAMojC,EAAe,MAAM,MAAM,EAE7DG,EAAa,CACjBhxB,EACAixB,EACAC,IACG,CACG,MAAAzjD,EAAMm7B,GAAI5I,EAAMixB,CAAQ,EACvB,OAAAC,GAAa,OAAOA,GAAc,WAAaA,EAAUzjD,EAAKwjD,EAAUjxB,CAAI,EAAIvyB,CAAA,EAGnF0jD,EAAgB,CAACnqB,EAAmB/0B,EAAmBm/C,EAAW,KAAU,CAChF,MAAMH,EAAW,OAAOjqB,GAAU,SAAWA,EAAQA,EAAM,IAC3DhN,EAAK,eAAgBi3B,EAAUjqB,EAAO/0B,EAAOm/C,CAAQ,CAAA,EAGjDC,EAAoBC,GAAkB,CACvCA,EAAA,aAAe,CAACA,EAAG,YAAA,EAGlBC,EAAyBvqB,GAA4B,CACzDA,EAAM,MACNA,EAAM,QACN,CACE,wBAAyBA,EAAM,YACjC,EACAjN,EAAM,iBACF,OAAOA,EAAM,kBAAqB,WAChCA,EAAM,iBAAiBiN,CAAK,EAC5BjN,EAAM,iBACR,IAAA,EAGAy3B,EAAqB,CAACxqB,EAAyBsqB,IAAkB,OAAA,OACrEtqB,EAAM,MACNA,EAAM,SACN9a,EAAAolC,EAAG,gBAAH,MAAAplC,EAAmB8a,EAAM,KAAO,SAASsqB,EAAG,cAActqB,EAAM,GAAG,CAAC,GAAK,KACzE,CACE,wBAAyBA,EAAM,YACjC,CAAA,GAGIyqB,EAAgB,CAACzxB,EAAiB9M,IACtC6G,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAaiG,EAAM9M,CAAI,EAC7B6G,EAAM,aACR,w+RC7PN,MAAMA,EAAQuI,EAuHRtI,EAAOuI,EAsBPmvB,EAAc53B,GAAUC,EAAO,SAAUC,EAAM,CAAC,QAAS,GAAK,EAC9D23B,EAAY73B,GAAUC,EAAO,OAAQC,EAAM,CAAC,QAAS,GAAK,EAC1D43B,EAAgB93B,GAAUC,EAAO,WAAYC,EAAM,CAAC,QAAS,GAAK,EAClE63B,EAAqB/3B,GAAUC,EAAO,gBAAiBC,EAAM,CAAC,QAAS,GAAK,EAE5E83B,EAAqB1pC,EAAAA,SAAS,CAClC,IAAK,IAAU,IAAA,IAAI,CAAC,GAAGypC,EAAmB,KAAK,CAAC,EAChD,IAAMpkD,GAAQ,CACOokD,EAAA,MAAQ,CAAC,GAAGpkD,CAAG,CACpC,CAAA,CACD,EAKKskD,EAA4B,CAChC,IAAM/xB,GAAoB,CACxB,MAAM1xB,EAAQ,IAAI,IAAIwjD,EAAmB,KAAK,EAC9CxjD,EAAM,IAAI0xB,CAAI,EACd8xB,EAAmB,MAAQxjD,EAC3B0rB,EAAK,eAAgBgG,CAAI,CAC3B,EACA,MAAO,IAAM,CACQ8xB,EAAA,MAAM,QAAS9xB,GAAS,CACzChG,EAAK,iBAAkBgG,CAAI,CAAA,CAC5B,EACkB8xB,EAAA,UAAY,GACjC,EACA,OAAS9xB,GAAoB,CAC3B,MAAM1xB,EAAQ,IAAI,IAAIwjD,EAAmB,KAAK,EAC9CxjD,EAAM,OAAO0xB,CAAI,EACjB8xB,EAAmB,MAAQxjD,EAC3B0rB,EAAK,iBAAkBgG,CAAI,CAC7B,EASA,IAAMA,GAAoB8xB,EAAmB,MAAM,IAAI9xB,CAAI,CAAA,EAMvDgyB,EAAgBjpC,MAAiB,CAAA,CAAE,EAEnCkpC,EAAkBl3B,EAAc62B,CAAa,EAC7CvM,EAActqB,EAAc42B,CAAS,EACrCO,EAA0Bn3B,EAAc,IAAMhB,EAAM,gBAAgB,EACpEo4B,EAA2Bp3B,EAAc,IAAMhB,EAAM,iBAAiB,EACtEq4B,EAA6Br3B,EAAc,IAAMhB,EAAM,mBAAmB,EAC1Es4B,EAAoBt3B,EAAc,IAAMhB,EAAM,UAAU,EACxDu4B,EAAwBv3B,EAAc,IAAMhB,EAAM,cAAc,EAEhEixB,EAAgBj8B,GAAY,IAAMgL,EAAM,QAAS,CAAC,OAAQ,WAAW,EACrEw4B,EAAoBxjC,GAAY,IAAMgL,EAAM,YAAa,CAAC,OAAQ,WAAW,EAE7Ey4B,EAAoB/kC,EAAAA,MAAM,IAAM,CAAC,CAACsM,EAAM,MAAM,EAC9C04B,EAAehlC,EAAAA,MAAM,IAAMsM,EAAM,WAAa,MAAS,EACvD24B,EAAcjlC,EAAAA,MAAM,IAAMqkC,EAAmB,MAAM,KAAO,CAAC,EAE3Da,EAAavqC,EAAA,SACjB,IACEspC,EAAY,QAAU,QACtB33B,EAAM,OAAO,KAAMiN,GAAW,OAAOA,GAAU,SAAW,GAAQA,EAAM,QAAS,CAAA,EAG/E6pB,EAAiBzoC,EAAA,SAAuB,IAC5C2R,EAAM,OAAO,IAAKtqB,GAChB,OAAOA,GAAO,SACVA,EACA,CACE,GAAGA,EACH,OAAQ,CACN,YACEkjD,EAAW,QAAU,GACjB,OACAjB,EAAY,QAAUjiD,EAAG,IACzB,OACAwiD,EAAgB,QAAU,GAC1B,aACA,YACN,GAAGxiD,EAAG,MACR,CACF,CACN,CAAA,EAGImjD,EAAexqC,EAAAA,SAAS,KAAO,CACnC,eAAgBi9B,EAAY,MAC5B,qBAAsBgN,EAAkB,MACxC,mBAAoBA,EAAkB,OAASK,EAAY,KAC3D,EAAA,EAEIG,EAAoBzqC,EAAAA,SAAS,IAAM,CACvC2R,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAa,KAAM,YAAY,EACrCA,EAAM,aACR,IAAA,CACL,EACKw3B,EAAyBvqB,GAA4B,CACzD,CACE,0BAA2B2rB,EAAW,OAAS3rB,EAAM,QACvD,CAAA,EAMIyqB,EAAgB,CAACzxB,EAAwB9M,IAAiB,CAC9D,CACE,CAAC,kBAAkB6G,EAAM,gBAAgB,EAAE,EACzCs4B,EAAkB,OAASryB,GAAQ+xB,EAA0B,IAAI/xB,CAAI,CACzE,EACAjG,EAAM,aACF,OAAOA,EAAM,cAAiB,WAC5BA,EAAM,aAAaiG,EAAM9M,CAAI,EAC7B6G,EAAM,aACR,IAAA,EAEA+4B,EAAgB9rB,GACpB0qB,EAAY,QAAU1qB,EAAM,IAAM,CAAC,QAAS,EAAG,EAAI,CAAA,EAE/C+rB,EAAgB3qC,EAAAA,SAAsB,IAAM,CAC1C,MAAA4qC,EAAan3B,GAAuB,CACxC,MAAMo3B,EAAUvB,EAAY,MAE5B,GAAIuB,IAAY,OACP,OAAAp3B,EAGT,MAAMq3B,EAAYrC,EAAe,MAAM,KAAMphD,GACvC,OAAOA,GAAO,SAAiB,GAC5BA,EAAG,MAAQwjD,CACnB,EAGD,OAAI,OAAOC,GAAc,WAAYA,GAAA,YAAAA,EAAW,YAAa,GACpDr3B,EAGF,CAAC,GAAGA,CAAK,EAAE,KAAK,CAACvhB,EAAGC,KAAM,CAC/B,GAAIwf,EAAM,cAAgB,OACxB,OAAOA,EAAM,YAAYzf,EAAGC,GAAG04C,EAAShB,EAAgB,KAAK,EAE/D,MAAMkB,EAAWC,GACf,OAAOA,GAAO,UAAYA,IAAO,KAAO,KAAK,UAAUA,CAAE,GAAIA,GAAA,YAAAA,EAAI,aAAc,GAE7E,OAAAD,EAAQ74C,EAAE24C,CAAO,CAAC,EAAIE,EAAQ54C,GAAE04C,CAAO,CAAC,EACnChB,EAAgB,MAAQ,GAAK,EAGlCkB,EAAQ54C,GAAE04C,CAAO,CAAC,EAAIE,EAAQ74C,EAAE24C,CAAO,CAAC,EACnChB,EAAgB,MAAQ,EAAI,GAG9B,CAAA,CACR,CAAA,EAGGoB,EAAex3B,GACnBA,EAAM,OAAQmE,GACZ,OAAO,QAAQA,CAAI,EAAE,KAAK,CAAC,CAAClP,EAAKrjB,CAAG,IAAM,SACpC,MAAA,CAACA,GAAOqjB,EAAI,CAAC,IAAM,KAAO,GAAC5E,EAAA6N,EAAM,aAAN,MAAA7N,EAAkB,SAAS4E,IAAa,IAErE,OAAOrjB,GAAQ,SAAW,KAAK,UAAU,OAAO,OAAOA,CAAG,CAAC,EAAIA,EAAI,SAAS,GAC7D,cAAc,WAASkoB,EAAAoE,EAAM,SAAN,YAAApE,EAAc,gBAAiB,EAAE,CAAA,CAC1E,CAAA,EAGL,IAAI29B,EAAcb,EAAa,MAAQT,EAAc,MAAQj4B,EAAM,MAEnE,OACGy4B,EAAkB,QAAU,IAAQ,CAACC,EAAa,OAClDD,EAAkB,QAAU,IAAQC,EAAa,OAASL,EAA2B,SAEtFkB,EAAcD,EAAYC,CAAW,IAIpCX,EAAW,QAAU,IAAQ,CAACF,EAAa,OAC3CE,EAAW,QAAU,IAAQF,EAAa,OAASN,EAAyB,SAE7EmB,EAAcN,EAAUM,CAAW,GAG9BA,CAAA,CACR,EAYKC,EAAuBnrC,EAAAA,SAAsB,IAC7C,OAAO,MAAM4iC,EAAc,KAAK,GAAMyH,EAAa,OAAS,CAACP,EAAwB,MAChFa,EAAc,MAGhBA,EAAc,MAAM,OACxBR,EAAkB,MAAQ,IAAMvH,EAAc,OAAS,KACxDuH,EAAkB,OAASvH,EAAc,OAAS,IAAA,CAErD,EAEKwI,EAAqB,CACzBC,EACA7kD,EACA8kD,EAAe,GACfC,EAAc,GACdC,EAAc,KACX,CACH,GAAKvB,EAAkB,MAEvB,IAAIt4B,EAAM,aAAe,UAAYA,EAAM,aAAe,QAAS,CAEjE,GAAI25B,GAAgBC,EAAa,OAE7B5B,EAA0B,IAAI0B,CAAG,EACnC1B,EAA0B,OAAO0B,CAAG,GAGhC15B,EAAM,aAAe,UACvBg4B,EAA0B,MAAM,EAGlCA,EAA0B,IAAI0B,CAAG,EACnC,SAEIE,GAAeC,EAEb7B,EAA0B,IAAI0B,CAAG,EACnC1B,EAA0B,OAAO0B,CAAG,EAGpC1B,EAA0B,IAAI0B,CAAG,UAG1BC,EAAc,CACvB,MAAMG,EAAmB,CAAC,GAAG/B,EAAmB,KAAK,EAAE,IAAI,EACrDgC,EAAoB/5B,EAAM,MAAM,UAAWljB,GAAMA,IAAMg9C,CAAgB,EACvEE,GAAmB,KAAK,IAAID,EAAmBllD,CAAK,EACpDolD,EAAiB,KAAK,IAAIF,EAAmBllD,CAAK,EAClDmrB,EAAA,MAAM,MAAMg6B,GAAkBC,EAAiB,CAAC,EAAE,QAASh0B,GAAS,CACnE+xB,EAA0B,IAAI/xB,CAAI,GACrC+xB,EAA0B,IAAI/xB,CAAI,CACpC,CACD,CAAA,MAGD+xB,EAA0B,MAAM,EAChCA,EAA0B,IAAI0B,CAAG,EAIhBQ,IAAA,EAGjBC,EAAa,CAACT,EAAgB7kD,EAAeoB,IAAkB,CACnEwjD,EAAmBC,EAAK7kD,EAAOoB,EAAE,SAAUA,EAAE,QAASA,EAAE,OAAO,EAC1DgqB,EAAA,cAAey5B,EAAK7kD,EAAOoB,CAAC,CAAA,EAG7BmkD,GAAsBntB,GAAsB,CAChD,GAAI,CAAC2rB,EAAW,MAAO,OAEvB,MAAM1B,EAAW,OAAOjqB,GAAU,SAAWA,EAAQA,EAAM,IACrDotB,EAAgB,OAAOptB,GAAU,SAAW,GAAQA,EAAM,SAE1D2rB,EAAW,QAAU,IAAQyB,IAAkB,KAEjD1C,EAAY,QAAUT,GACxBS,EAAY,MAAQT,EACpBW,EAAc,MAAQ,IAElBK,EAAgB,QAAU,GAC5BL,EAAc,MAAQ,IAEtBF,EAAY,MAAQ,OACpBE,EAAc,MAAQ,IAGrB53B,EAAA,SAAUi3B,EAAUS,EAAY,QAAU,OAAY,GAAQ,CAACO,EAAgB,KAAK,EAAA,EAGrFoC,GAAmB,CACvBpD,EACAjqB,EACA/0B,EACAm/C,EAAW,KACR,CACHp3B,EAAK,eAAgBi3B,EAAUjqB,EAAO/0B,EAAOm/C,CAAQ,EACrD+C,GAAmBntB,CAAK,CAAA,EAGpBstB,EAAoB,SAAY,CACpC,GAAI,CAAC7B,EAAa,OAAS14B,EAAM,WAAa,QAAasrB,EAAY,MAAO,OAC9EsM,EAAU,MAAQ,GACZ,MAAA4C,EAAWx6B,EAAM,SAAS,CAC9B,YAAaw4B,EAAkB,MAC/B,OAAQx4B,EAAM,OACd,OAAQ23B,EAAY,MACpB,SAAU33B,EAAM,SAChB,QAASixB,EAAc,KAAA,CACxB,EACG,GAAA,CACF,MAAMnvB,EAAQ04B,aAAoB,QAAU,MAAMA,EAAWA,EAE7D,GAAI14B,IAAU,OAAW,OACzBm2B,EAAc,MAAQn2B,CAAA,QACtB,CACA81B,EAAU,MAAQ,EACpB,CAAA,EAGIsC,EAAuB,IAAM,CAC5B5B,EAAkB,OACvBr4B,EAAK,YAAa,CAAC,GAAG83B,EAAmB,KAAK,CAAC,CAAA,EAE3C0C,GAAsB,SAAY,CACtC,GAAI/B,EAAa,MAAO,CACtB,MAAM6B,EAAkB,EACxB,MACF,CACKt6B,EAAA,WAAY+4B,EAAc,KAAK,CAAA,EAGhC0B,GAAqB,MAAOloD,EAAckB,EAAcinD,IAAoB,CAChF,GAAIjnD,IAAQinD,EAAQ,OAGpB,MAAMC,EAAgB7jC,WAAyB,QAAA5E,EAAA6N,EAAM,aAAN,YAAA7N,EAAkB,SAAS4E,OAAS,IAC7E8jC,GACHroD,IAAS,eAAiBA,IAAS,aACnCooD,EAAa,QAAQ,GAAKzC,EAAwB,QAAU,IACzD2C,EACJtoD,IAAS,WAAaooD,EAAa,WAAW,GAAKvC,EAA2B,QAAU,IACpF0C,GACHvoD,IAAS,UAAYA,IAAS,cAC9BooD,EAAa,SAAS,GAAKxC,EAAyB,QAAU,IAE7DyC,GAAuBC,GAA0BC,IAErD,MAAMR,EAAkB,EAElB/nD,IAAS,eAAiBA,IAAS,WAAgCioD,KAAA,EAG3E/qC,OAAAA,EAAA,MACE,IAAMsQ,EAAM,OACZ,CAAC3N,EAAQ2oC,IAAc,CACFN,GAAA,SAAUroC,EAAQ2oC,CAAS,EAE1C,EAAA3oC,IAAW2oC,GAAatC,EAAa,SACpCrmC,GACE4N,EAAA,WAAY+4B,EAAc,KAAK,EAExC,CAAA,EAEItpC,EAAAA,MAAA8oC,EAAmB,CAAC9kD,EAAKinD,IAAW,CACrBD,GAAA,cAAehnD,EAAKinD,CAAM,CAAA,CAC9C,EACKjrC,EAAAA,MAAAuhC,EAAe,CAACv9C,EAAKinD,IAAW,CACjBD,GAAA,UAAWhnD,EAAKinD,CAAM,CAAA,CAC1C,EACKjrC,EAAAA,MAAAioC,EAAa,CAACjkD,EAAKinD,IAAW,CACfD,GAAA,SAAUhnD,EAAKinD,CAAM,CAAA,CACzC,EACKjrC,EAAAA,MAAAwoC,EAAiB,CAACxkD,EAAKinD,IAAW,CACnBD,GAAA,WAAYhnD,EAAKinD,CAAM,CAAA,CAC3C,EAEDjrC,EAAA,MACE,IAAMsQ,EAAM,SACXqG,GAAa,CAEZ,GAAIA,IAAa,OAAW,CAC1B4xB,EAAc,MAAQ,GACtB,MACF,CAEkBsC,GACpB,CAAA,EAGFjmC,EAAA,UAAUimC,CAAiB,EAEdrvB,EAAA,CAEX,cAAe,IAAM,CACdotB,EAAkB,QACvBN,EAA0B,MAAM,EACXkC,IACvB,EACA,QAASK,EACT,cAAe,IAAM,CACnB,GAAI,CAACjC,EAAkB,MAAO,OACxB,MAAA2C,EAAoBlD,EAAmB,MAAM,KAAO,EAAI,CAAC,GAAGA,EAAmB,KAAK,EAAI,GAC9FA,EAAmB,MAAY,IAAA,IAAI,CAAC,GAAGiB,EAAc,KAAK,CAAC,EACxCjB,EAAA,MAAM,QAAS9xB,GAAS,CACrCg1B,EAAkB,SAASh1B,CAAI,GACnChG,EAAK,eAAgBgG,CAAI,CAAA,CAC1B,EACoBi0B,GACvB,EACA,UAAYrlD,GAAkB,CAC5B,GAAI,CAACyjD,EAAkB,MAAO,OACxB,MAAAryB,EAAO+yB,EAAc,MAAMnkD,CAAK,EAClC,CAACoxB,GAAQ+xB,EAA0B,IAAI/xB,CAAI,IAC/C+xB,EAA0B,IAAI/xB,CAAI,EACbi0B,IACvB,EACA,YAAcrlD,GAAkB,CAC9B,GAAI,CAACyjD,EAAkB,MAAO,OACxB,MAAAryB,EAAO+yB,EAAc,MAAMnkD,CAAK,EAClC,CAACoxB,GAAQ,CAAC+xB,EAA0B,IAAI/xB,CAAI,IAChD+xB,EAA0B,OAAO/xB,CAAI,EAChBi0B,IACvB,CAAA,CACD,sxECvoBD,MAAMl6B,EAAQuI,EA+BR0I,EAAQC,EAAAA,WAORjR,EAAOuI,EAQPiI,EAAaC,EAAAA,OAAOlD,GAAkB,IAAI,EAC1C3J,EAAaL,GAAM,IAAMxD,EAAM,GAAI,SAAS,EAC5Ck7B,EAAW13B,GAAM,IAAMxD,EAAM,SAAU,KAAK,EAE5CuR,EAAgBvQ,EAAc,IAAMhB,EAAM,MAAM,EAChD+D,EAAkB/C,EAAc,IAAMhB,EAAM,QAAQ,EACpDgE,EAAchD,EAAc,IAAMhB,EAAM,UAAYA,EAAM,IAAI,EAC9DmY,EAAgBnX,EAAc,IAAMhB,EAAM,MAAM,EAEhDm7B,EAAsBnsC,MAAI,EAAK,EAC/BtZ,EAAKsZ,MAAwB,IAAI,EAEjC,CAAC,QAAAihC,EAAS,GAAG3e,GAASd,EAAS,SAAA,EAE/B4qB,EAAM/sC,EAAA,SACV,KACG,CACC,GAAIwV,EAAW,MACf,SAAUq3B,EAAS,MACnB,SAAUn3B,EAAgB,MAC1B,MAAO/D,EAAM,MACb,eAAgBiR,EAAM,MACtB,eAAgBjR,EAAM,eACtB,oBAAqBA,EAAM,oBAC3B,eAAgBA,EAAM,eACtB,QAAAiwB,EACA,GAAIv6C,EAAG,KAAA,EACT,EAGJ4e,EAAAA,UAAU,IAAM,CACTmc,IACLA,EAAW,YAAY2qB,CAAG,EACtB7pB,EAAc,OACLd,EAAA,YAAY5M,EAAW,KAAK,EACzC,CACD,EAEDw3B,EAAAA,YAAY,IAAM,CACX5qB,GACMA,EAAA,cAAc5M,EAAW,KAAK,CAAA,CAC1C,EAED,MAAMvQ,EAAWI,EAAM,MAAA,KAAM+c,GAAA,YAAAA,EAAY,SAAS,SAAU5M,EAAW,KAAK,EACtE+E,EAAO5Z,EAAAA,IAAIsE,EAAS,KAAK,EAEzBgoC,EAAe5nC,QAAM,IAAM,CAAC,EAAE+c,GAAA,MAAAA,EAAY,KAAK,OAASzM,EAAY,MAAM,EAC1Eu3B,EAAmB7nC,EAAAA,MAAM,IAAMsM,EAAM,WAAa,MAAS,EAE3Dw7B,EAAiB9nC,EAAAA,MAAM,IAAMJ,EAAS,OAAS,CAACyQ,EAAgB,KAAK,EACrE03B,EAAW/nC,EAAA,MACf,IACE8nC,EAAe,OACf,CAACF,EAAa,OACbA,EAAa,OAASC,EAAiB,OAASJ,EAAoB,KAAA,EAGnEzrC,QAAA4D,EAAWkpB,GAAW,CAC1B,GAAIA,EAAQ,CACVvc,EAAK,gBAAiB,EAAI,EAC1B,WAAW,IAAM,CACf2I,EAAK,MAAQ,IACZ,CAAC,EACJ,MACF,CACAA,EAAK,MAAQ,GACb3I,EAAK,gBAAiB,EAAK,CAAA,CAC5B,EACKvQ,QAAA6hB,EAAgBiL,GAAW,CAC/B,GAAK/L,EACL,IAAI,CAAC+L,EAAQ,CACPlpB,EAAS,OACXmd,EAAW,YAAY,MAAS,EAElC,MACF,CACWA,EAAA,YAAY5M,EAAW,KAAK,EAAA,CACxC,EAEK,MAAAgH,EAAkBxc,EAAAA,SAAS,IAAM,CACrC,CACE,OAAUiF,EAAS,MACnB,KAAQsV,EAAK,MACb,aAAa6H,GAAA,YAAAA,EAAY,KAAK,QAAS0H,EAAc,QAAU,GAC/D,KAAQ,EAAC1H,GAAA,MAAAA,EAAY,OAAO,MAC9B,EACA7H,EAAK,QAAS6H,GAAA,MAAAA,EAAY,gBAAiBA,EAAW,eAAiB,IAAA,CACxE,EAEK/gB,OAAAA,QAAA+rC,EAAWC,GAAU,CACrBA,GAAS,CAACP,EAAoB,QAAOA,EAAoB,MAAQ,GAAA,CACtE,utCClFD,MAAMn7B,EAAQuI,EAiDRtI,EAAOuI,EAkBP5E,EAAa7D,GAAUC,EAAO,aAAcC,EAAM,CAAC,QAAS,GAAK,EACjE07B,EAAW57B,GAAUC,EAAO,WAAYC,EAAM,CAAC,QAAS,GAAK,EAE7D27B,EAAc56B,EAAc,IAAMhB,EAAM,IAAI,EAC5C+W,EAAa/V,EAAc,IAAMhB,EAAM,GAAG,EAC1CuuB,EAAcvtB,EAAc,IAAMhB,EAAM,IAAI,EAC5CwuB,EAAmBxtB,EAAc,IAAMhB,EAAM,SAAS,EACtDgE,EAAchD,EAAc,IAAMhB,EAAM,IAAI,EAC5CkJ,EAAgBlI,EAAc,IAAMhB,EAAM,MAAM,EAChD67B,EAAoB76B,EAAc,IAAMhB,EAAM,UAAU,EACxDyuB,EAAeztB,EAAc,IAAMhB,EAAM,KAAK,EAC9CmR,EAAenQ,EAAc,IAAMhB,EAAM,KAAK,EAC9CuW,EAAkBvV,EAAc,IAAMhB,EAAM,QAAQ,EAEpD87B,EAAe9sC,MAAoB,CAAA,CAAE,EAErC+sC,EAAO1tC,EAAA,SAAS,IACpBytC,EAAa,MAAM,IAAKE,GAAS,CACzB,MAAAZ,EAAMvtC,QAAMmuC,CAAI,EAChBxf,EAAS4e,EAAI,KAAOO,EAAS,MAE5B,MAAA,CACL,GAAGP,EACH,OAAA5e,EACA,eAAgB,CACd,CACE,OAAAA,EACA,SAAU4e,EAAI,QAChB,EACA5e,GAAUxc,EAAM,mBAAqBA,EAAM,mBAAqB,KAChEo7B,EAAI,cACN,CAAA,CACF,CACD,CAAA,EAGGa,EAAYvoC,EAAAA,MAAM,IAAM,EAAEqoC,GAAA,MAAAA,EAAM,OAASA,EAAK,MAAM,OAAS,EAAE,EAE/DlxB,EAAkBxc,EAAAA,SAAS,KAAO,CACtC,SAAUkoB,EAAgB,MAC1B,oBAAqBA,EAAgB,KACrC,EAAA,EAEIp8B,EAAY0mB,GAAa,IAAMb,EAAM,KAAK,EAE1Ck8B,EAAiB7tC,EAAAA,SAAS,KAAO,CACrC,YAAaogC,EAAa,MAC1B,mBAAoBlY,EAAgB,MACpC,CAACp8B,EAAU,KAAK,EAAG6lB,EAAM,QAAU,OACnC,WAAYuuB,EAAY,MACxB,mBAAoBqN,EAAY,MAChC,gBAAiBpN,EAAiB,MAClC,WAAY,CAACqN,EAAkB,OAAS,CAACpN,EAAa,MACtD,MAAStd,EAAa,KACtB,EAAA,EAEIgrB,EAAetnD,GAAwB,OAC3C,GAAIA,IAAU,OAAW,CACvB,MAAMgC,GAAKsb,EAAA4pC,EAAK,MAAMlnD,CAAK,IAAhB,YAAAsd,EAAmB,GAE5B,GAAAtd,EAAQ,IACRA,EAAQknD,EAAK,MAAM,QACnB,CAACA,EAAK,MAAMlnD,CAAK,EAAE,WAClB+uB,EAAW,MAAQ,GAAK+3B,EAAS,QAAU9kD,GAAM+sB,EAAW,QAAU/uB,GACvE,CACA,MAAMunD,EAAW,IAAIhqD,GAAQ,eAAgB,CAAC,WAAY,GAAK,EAC/D6tB,EAAK,eAAgBprB,EAAO+uB,EAAW,MAAOw4B,CAAQ,EACjDA,EAAS,mBACRT,EAAS,QAAU9kD,IAAI8kD,EAAS,MAAQ9kD,GACxC+sB,EAAW,QAAU/uB,IAAO+uB,EAAW,MAAQ/uB,GAEvD,CACF,CAAA,EAGIwnD,EAAc,CAACnkD,EAAmBrD,IAAkB,WACxDsnD,EAAYtnD,CAAK,EAEfA,GAAS,GACT,CAACknD,EAAK,MAAMlnD,CAAK,EAAE,YACnBsd,EAAA4pC,EAAK,MAAMlnD,CAAK,IAAhB,MAAAsd,EAAmB,UACnB,OAAO4pC,EAAK,MAAMlnD,CAAK,EAAE,SAAY,cAErCqrB,GAAAtE,EAAAmgC,EAAK,MAAMlnD,CAAK,GAAE,UAAlB,MAAAqrB,EAAA,KAAAtE,EAA4B1jB,GAC9B,EAGIqkC,EAAU1pC,GAAsB,SAChCkpD,EAAK,MAAM,QAAU,IACzBn4B,EAAW,MAAQniB,EAAUmiB,EAAW,MAAQ/wB,EAAWA,CAAS,GAC3D+oB,EAAA,SAAA,gBAAezJ,EAAA4pC,EAAK,MAAMn4B,EAAW,KAAK,IAA3B,YAAAzR,EAA8B,QAAQ,IAArD,MAAAyJ,EAAwD,QAAM,EAGnEna,EAAY,CAACrI,EAAevG,IAAsB,CAClD,GAAAkpD,EAAK,MAAM,QAAU,EAAU,MAAA,GACnC,IAAIlnD,EAAQuE,EACN,MAAAkjD,EAASP,EAAK,MAAM,IAAKX,GAAQ,CAACA,EAAI,QAAQ,EAAE,YAAY,EAAI,EAChEmB,EAASR,EAAK,MAAM,IAAKX,GAAQ,CAACA,EAAI,QAAQ,EAAE,QAAQ,EAAI,EAC3D,KAAAvmD,GAAS0nD,GAAU1nD,GAASynD,GAAUP,EAAK,MAAMlnD,CAAK,EAAE,UACpDA,GAAAhC,EAEX,OAAIgC,EAAQ0nD,IAAgB1nD,EAAA0nD,GACxB1nD,GAASynD,IAAgBznD,EAAAynD,GACtBznD,CAAA,EAGH6a,EAAAA,MAAAkU,EAAY,CAACyC,EAAU1M,IAAa,CAEpC,GADA0M,IAAa1M,GACboiC,EAAK,MAAM,QAAU,EACvB,OAGF,MAAMlnD,EAAQ4M,EAAU4kB,EAAUA,EAAW1M,EAAW,EAAI,EAAE,EAC9DpF,EAAAA,SAAS,IAAM,CACb4nC,EAAYtnD,CAAK,CAAA,CAClB,CAAA,CACF,EAEK6a,EAAAA,MAAAisC,EAAU,CAACt1B,EAAU1M,IAAa,CAChC,MAAA9kB,EAAQknD,EAAK,MAAM,UAAWtS,GAAMA,EAAE,KAAOpjB,CAAQ,EAC3D,GAAIA,IAAa1M,GACb,EAAAoiC,EAAK,MAAM,QAAU,GAGzB,IAAIlnD,IAAU,GAAI,CACJsnD,EAAA16C,EAAU,EAAG,CAAC,CAAC,EAC3B,MACF,CACA06C,EAAYtnD,CAAK,EAAA,CAClB,EAEK,MAAA2nD,EAAepB,GAAsB,CACpCU,EAAa,MAAM,KAAMrS,GAAMA,EAAE,MAAM,KAAO2R,EAAI,MAAM,EAAE,EAG7DU,EAAa,MAAMA,EAAa,MAAM,UAAWrS,GAAMA,EAAE,MAAM,KAAO2R,EAAI,MAAM,EAAE,CAAC,EAAIA,EAF1EU,EAAA,MAAM,KAAKV,CAAG,EAI7BU,EAAa,MAAQA,EAAa,MAAM,KAAK,CAACv7C,EAAGC,IAAM,CACjD,GAAA,CAAC,MAAQ,CAACD,EAAE,MAAM,IAAM,CAACC,EAAE,MAAM,GAAW,MAAA,GAChD,MAAMgP,EAAWjP,EAAE,MAAM,GAAG,wBAAwBC,EAAE,MAAM,EAAE,EAC9D,OAAIgP,EAAW,KAAK,4BAAoC,GACpDA,EAAW,KAAK,4BAAoC,EACjD,CAAA,CACR,CAAA,EAEGitC,EAAiB5lD,GAAe,CAChCilD,EAAa,MAAM,KAAMrS,GAAMA,EAAE,MAAM,KAAO5yC,CAAE,GAClDilD,EAAa,MAAM,OACjBA,EAAa,MAAM,UAAWrS,GAAMA,EAAE,MAAM,KAAO5yC,CAAE,EACrD,CAAA,CAEJ,EAGF6Y,EAAA,MACEosC,EACA,IAAM,CACOY,GACb,EACA,CAAC,KAAM,EAAI,CAAA,EAGb,MAAMA,EAAa,IAAM,OACnB,GAAAX,EAAK,MAAM,SAAW,EAAG,CAC3Bn4B,EAAW,MAAQ,GACnB+3B,EAAS,MAAQ,OACjB,MACF,CAII,GAHA/3B,EAAW,OAAS,GAAK,CAAC+3B,EAAS,QACrCA,EAAS,OAAQxpC,EAAA4pC,EAAK,MAAMn4B,EAAW,KAAK,IAA3B,YAAAzR,EAA8B,IAE7C4pC,EAAK,MAAM,KAAMtS,GAAMA,EAAE,KAAOkS,EAAS,KAAK,EAAG,CACvCQ,EAAAJ,EAAK,MAAM,UAAWtS,GAAMA,EAAE,KAAOkS,EAAS,KAAK,CAAC,EAChE,MACF,CACYQ,EAAAJ,EAAK,MAAM,IAAKX,GAAQ,CAACA,EAAI,QAAQ,EAAE,QAAQ,EAAI,CAAC,CAAA,EAGlE7rB,OAAAA,EAAAA,QAAQ/B,GAAkB,CACxB,KAAMxJ,EACN,KAAM43B,EACN,OAAQ1yB,EACR,eAAgBxV,EAAA,MAAM,IAAMsM,EAAM,cAAc,EAChD,YAAAw8B,EACA,cAAAC,EACA,SAAAd,EACA,YAAc9kD,GAAO,CACb,MAAAy/B,EAAMylB,EAAK,MAAM,UAAWtS,GAAMA,EAAE,KAAO5yC,CAAE,EAC/C,GAAAA,IAAO,QAAay/B,IAAQ,GAAI,CACtB6lB,EAAA16C,EAAU,EAAG,CAAC,CAAC,EAC3B,MACF,CACA06C,EAAY7lB,CAAG,CACjB,CAAA,CACD,m1HC3QD,MAAMtW,EAAQuI,EA+CRtI,EAAOuI,EAQP/wB,EAAUuX,MAAwB,IAAI,EAEtC+jB,EAAa9X,GAAgBxjB,CAAO,EACpCmsB,EAAa7D,GAAUC,EAAO,aAAcC,CAAI,EAEhD,CAAC,aAAAwB,EAAc,kBAAAE,CAAiB,EAAIN,GAAerB,CAAK,EAIrCgB,EAAc,IAAMhB,EAAM,SAAS,EAC5D,MAAM28B,EAAkB37B,EAAc,IAAMhB,EAAM,QAAQ,EAGlCgB,EAAc,IAAMhB,EAAM,QAAQ,EAC1D,MAAM48B,EAAuB57B,EAAc,IAAMhB,EAAM,aAAa,EAC9DkJ,EAAgBlI,EAAc,IAAMhB,EAAM,MAAM,EAChDoT,EAAsBpS,EAAc,IAAMhB,EAAM,YAAY,EAC5DmT,EAAqBnS,EAAc,IAAMhB,EAAM,WAAW,EAC1DqT,EAAiBre,GAAY,IAAMgL,EAAM,QAAQ,EAGlCgB,EAAc,IAAMhB,EAAM,KAAK,EAC9C,MAAAsV,EAA4BrT,GAAuBjC,CAAK,EACxDuT,EAAkB7f,QAAM,IAAO,OAAOkQ,EAAW,OAAU,UAAY,EAAIA,EAAW,KAAM,EAE5F,CACJ,SAAAtQ,EACA,MAAAC,EACA,QAAAqP,EACA,OAAApP,EACA,KAAA0C,EACA,SAAAuM,EACA,MAAOgR,CAAA,EACLpR,GAAakR,EAAiBF,EAAgB,CAChD,UAAW,OAAOzP,EAAW,OAAU,QAAA,CACxC,EAEDhM,EAAAA,YAAY,IAAM,CACXqI,EAAA,kBAAmBwT,EAAY,KAAK,CAAA,CAC1C,EAED,MAAMZ,EAAcnf,EAAAA,MAAM,IAAO+N,EAAa,MAAQqR,GAAQ,KAAM,EAE9D+pB,EAAiBnpC,EAAA,MAAM,IAC3B,OAAOkQ,EAAW,OAAU,UACxBA,EAAW,MACXtQ,EAAS,OAAU6f,EAAmB,OAAS1Q,EAAS,KAAA,EAIxD/S,QAAA4D,EAAW+S,GAAa,CACxBA,IAAa,IAAS5D,EAAS,QAAU,IAC3CxC,EAAK,WAAW,CAClB,CACD,EAEK,MAAA4K,EAAkBxc,EAAAA,SAAS,IAAM,CACrCinB,EAA0B,MAC1B,CACE,KAAMunB,EAAe,KACvB,CAAA,CACD,EAEKh7C,EAAO,IAAM,CACjBoe,EAAK,OAAO,EAER,OAAO2D,EAAW,OAAU,UAC9BA,EAAW,MAAQ,IAEnBA,EAAW,MAAQ,EACd1N,KAGP+J,EAAK,QAAQ,CAAA,EAGT2T,EAAe,IAAM,CACrBR,EAAoB,OAClB7f,GAAA,EAGF7D,OAAAA,QAAAqjB,EAAa1M,GAAa,CAC9B,GAAIA,EAAU,CACCuN,IACb,MACF,CACOpgB,GAAA,CACR,EAEDgY,EAAA,gBAAgBtV,CAAI,EAEPgV,EAAA,CACX,MAAA3X,EACA,QAAAqP,EACA,OAAApP,EACA,KAAA0C,CAAA,CACD,q2DCjMD,MAAM8J,EAAQuI,EAaR6jB,EAA0BprB,EAAc,IAAMhB,EAAM,gBAAgB,EAEpE88B,EAAiB,CACrB,WAAY,gBACZ,aAAc,oCACd,YAAa,cACb,cAAe,oCACf,gBAAiB,mCACjB,eAAgB,kCAChB,cAAe,mBACf,gBAAiB,uCACjB,eAAgB,gBAAA,EAGZ,CAAC,KAAAj7C,EAAM,OAAAsmB,EAAQ,KAAAS,GAAQV,GAAS,EAEhC60B,EAAkB30B,GAAoCqG,GAAKrG,EAAS,CAAC,QAAS,OAAQ,KAAK,CAAC,EAErF,OAAA8C,EAAA,CACX,KAAArpB,EACA,KAAA+mB,CAAA,CACD,gvDCpBK,MAAAo0B,EAAUhuC,MAA0C,IAAI,EAEjD,OAAAkc,EAAA,CACX,MAAM/Y,EAAA6qC,EAAQ,QAAR,YAAA7qC,EAAe,KACrB,MAAMyJ,EAAAohC,EAAQ,QAAR,YAAAphC,EAAe,KACrB,QAAQsE,EAAA88B,EAAQ,QAAR,YAAA98B,EAAe,MAAA,CACxB,2sECoEK+8B,GAAiB,CACrB,QAAQC,EAAU5nD,EAA+B,CAAC,WAAY,GAAM,WAAY,IAAO,CACrF,MAAM6nD,EACJ,OAAO7nD,EAAQ,YAAe,WAAa,OAAOA,EAAQ,WAAe,IACrE,CAAC,IAAK,EAAA,EACNA,EAAQ,WAER8nD,EAAgB,OAAO,KAAKC,EAAU,EAC5CtuB,GAAmBouB,EAAoBC,CAAa,EAAE,QAASlmD,GAAS,CAChE,MAAA6vB,EAAYs2B,GAAWnmD,CAAI,EAC7BgmD,EAAA,UAAUhmD,EAAM6vB,CAAS,CAAA,CAC9B,EAED,MAAMu2B,EACJ,OAAOhoD,GAAA,YAAAA,EAAS,aAAe,WAAa,OAAOA,EAAQ,WAAe,IACtE,CAAC,IAAK,EAAA,EACNA,GAAA,YAAAA,EAAS,WAETioD,EAAgB,OAAO,KAAKC,EAAU,EAC5CzuB,GAAmBuuB,EAAoBC,CAAa,EAAE,QAASrmD,GAAS,CAChE,MAAAumD,EAAavmD,EAAK,YAAA,EAAc,WAAW,GAAG,EAAIA,EAAK,MAAM,CAAC,EAAIA,EAClEwmD,EAAYF,GAAWtmD,CAAI,EAC7BgmD,EAAA,UAAUO,EAAYC,CAAS,CAAA,CACpC,CACH,CACF","x_google_ignoreList":[10,11,12,13,14,16,17]}