{"version":3,"file":"focus-trap2.mjs","sources":["../../../../../../packages/components/focus-trap/src/focus-trap.vue"],"sourcesContent":["<template>\n  <slot :handle-keydown=\"onKeydown\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  nextTick,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  ref,\n  unref,\n  watch,\n} from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { EVENT_CODE } from '@vuesax-alpha/constants'\nimport { useEscapeKeydown } from '@vuesax-alpha/hooks'\nimport { isString } from '@vuesax-alpha/utils'\nimport {\n  focusAfterReleased,\n  focusAfterTrapped,\n  focusAfterTrappedOpts,\n  focusTrapInjectionKey,\n  onReleaseFocusEvent,\n  onTrapFocusEvent,\n} from '@vuesax-alpha/tokens'\nimport { focusTrapEmits, focusTrapProps } from './focus-trap'\nimport {\n  createFocusOutPreventedEvent,\n  focusFirstDescendant,\n  focusableStack,\n  getEdges,\n  isFocusCausedByUserEvent,\n  obtainAllFocusableElements,\n  tryFocus,\n  useFocusReason,\n} from './utils'\n\nimport type { FocusLayer } from './utils'\n\ndefineOptions({\n  name: 'VsFocusTrap',\n  inheritAttrs: false,\n})\n\nconst props = defineProps(focusTrapProps)\nconst emit = defineEmits(focusTrapEmits)\n\nconst forwardRef = ref<HTMLElement | undefined>()\nlet lastFocusBeforeTrapped: HTMLElement | null = null\nlet lastFocusAfterTrapped: HTMLElement | null = null\n\nconst { focusReason } = useFocusReason()\n\nuseEscapeKeydown((event) => {\n  if (props.trapped && !focusLayer.paused) {\n    emit('releaseRequested', event)\n  }\n})\n\nconst focusLayer: FocusLayer = {\n  paused: false,\n  pause() {\n    this.paused = true\n  },\n  resume() {\n    this.paused = false\n  },\n}\nconst onKeydown = (e: KeyboardEvent) => {\n  if (!props.loop && !props.trapped) return\n  if (focusLayer.paused) return\n  const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e\n  const { loop } = props\n  const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey\n  const currentFocusingEl = document.activeElement\n  if (isTabbing && currentFocusingEl) {\n    const container = currentTarget as HTMLElement\n    const [first, last] = getEdges(container)\n    const isTabbable = first && last\n    if (!isTabbable) {\n      if (currentFocusingEl === container) {\n        const focusoutPreventedEvent = createFocusOutPreventedEvent({\n          focusReason: focusReason.value,\n        })\n        emit('focusoutPrevented', focusoutPreventedEvent)\n        if (!focusoutPreventedEvent.defaultPrevented) {\n          e.preventDefault()\n        }\n      }\n    } else {\n      if (!shiftKey && currentFocusingEl === last) {\n        const focusoutPreventedEvent = createFocusOutPreventedEvent({\n          focusReason: focusReason.value,\n        })\n        emit('focusoutPrevented', focusoutPreventedEvent)\n        if (!focusoutPreventedEvent.defaultPrevented) {\n          e.preventDefault()\n          if (loop) tryFocus(first, true)\n        }\n      } else if (\n        shiftKey &&\n        [first, container].includes(currentFocusingEl as HTMLElement)\n      ) {\n        const focusoutPreventedEvent = createFocusOutPreventedEvent({\n          focusReason: focusReason.value,\n        })\n        emit('focusoutPrevented', focusoutPreventedEvent)\n        if (!focusoutPreventedEvent.defaultPrevented) {\n          e.preventDefault()\n          if (loop) tryFocus(last, true)\n        }\n      }\n    }\n  }\n}\nprovide(focusTrapInjectionKey, {\n  focusTrapRef: forwardRef,\n  onKeydown,\n})\nwatch(\n  () => props.focusTrapEl,\n  (focusTrapEl) => {\n    if (focusTrapEl) {\n      forwardRef.value = focusTrapEl\n    }\n  },\n  { immediate: true }\n)\nwatch(forwardRef, (forwardRef, oldForwardRef) => {\n  if (forwardRef) {\n    forwardRef.addEventListener('keydown', onKeydown)\n    forwardRef.addEventListener('focusin', onFocusIn)\n    forwardRef.addEventListener('focusout', onFocusOut)\n  }\n  if (oldForwardRef instanceof HTMLElement) {\n    oldForwardRef.removeEventListener('keydown', onKeydown)\n    oldForwardRef.removeEventListener('focusin', onFocusIn)\n    oldForwardRef.removeEventListener('focusout', onFocusOut)\n  }\n})\n\nconst trapOnFocus = (e: Event) => {\n  emit(onTrapFocusEvent, e)\n}\n\nconst releaseOnFocus = (e: unknown) =>\n  emit(onReleaseFocusEvent, e as CustomEvent)\n\nconst onFocusIn = (e: FocusEvent) => {\n  const trapContainer = unref(forwardRef)\n  if (!trapContainer) return\n  const target = e.target as HTMLElement | null\n  const relatedTarget = e.relatedTarget as HTMLElement | null\n  const isFocusedInTrap = target && trapContainer.contains(target)\n  if (!props.trapped) {\n    const isPrevFocusedInTrap =\n      relatedTarget && trapContainer.contains(relatedTarget)\n    if (!isPrevFocusedInTrap) {\n      lastFocusBeforeTrapped = relatedTarget\n    }\n  }\n  if (isFocusedInTrap) emit('focusin', e)\n  if (focusLayer.paused) return\n  if (props.trapped) {\n    if (isFocusedInTrap) {\n      lastFocusAfterTrapped = target\n    } else {\n      tryFocus(lastFocusAfterTrapped, true)\n    }\n  }\n}\n\nconst onFocusOut = (e: Event) => {\n  const trapContainer = unref(forwardRef)\n  if (focusLayer.paused || !trapContainer) return\n  if (props.trapped) {\n    const relatedTarget = (e as FocusEvent).relatedTarget as HTMLElement | null\n    if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) {\n      // Give embedded focus layer time to pause this layer before reclaiming focus\n      // And only reclaim focus if it should currently be trapping\n      setTimeout(() => {\n        if (!focusLayer.paused && props.trapped) {\n          const focusoutPreventedEvent = createFocusOutPreventedEvent({\n            focusReason: focusReason.value,\n          })\n          emit('focusoutPrevented', focusoutPreventedEvent)\n          if (!focusoutPreventedEvent.defaultPrevented) {\n            tryFocus(lastFocusAfterTrapped, true)\n          }\n        }\n      }, 0)\n    }\n  } else {\n    const target = e.target as HTMLElement | null\n    const isFocusedInTrap = target && trapContainer.contains(target)\n    if (!isFocusedInTrap) emit('focusout', e)\n  }\n}\n\nconst startTrap = async () => {\n  // Wait for forwardRef to resolve\n  await nextTick()\n  const trapContainer = unref(forwardRef)\n  if (trapContainer) {\n    focusableStack.push(focusLayer)\n    const prevFocusedElement = trapContainer.contains(document.activeElement)\n      ? lastFocusBeforeTrapped\n      : document.activeElement\n    lastFocusBeforeTrapped = prevFocusedElement as HTMLElement | null\n    const isPrevFocusContained = trapContainer.contains(prevFocusedElement)\n    if (!isPrevFocusContained) {\n      const focusEvent = new Event(focusAfterTrapped, focusAfterTrappedOpts)\n      trapContainer.addEventListener(focusAfterTrapped, trapOnFocus)\n      trapContainer.dispatchEvent(focusEvent)\n      if (!focusEvent.defaultPrevented) {\n        nextTick(() => {\n          let focusStartEl = props.focusStartEl\n          if (!isString(focusStartEl)) {\n            tryFocus(focusStartEl)\n            if (document.activeElement !== focusStartEl) {\n              focusStartEl = 'first'\n            }\n          }\n          if (focusStartEl === 'first') {\n            focusFirstDescendant(\n              obtainAllFocusableElements(trapContainer),\n              true\n            )\n          }\n          if (\n            document.activeElement === prevFocusedElement ||\n            focusStartEl === 'container'\n          ) {\n            tryFocus(trapContainer)\n          }\n        })\n      }\n    }\n  }\n}\n\nconst stopTrap = () => {\n  const trapContainer = unref(forwardRef)\n  if (trapContainer) {\n    trapContainer.removeEventListener(focusAfterTrapped, trapOnFocus)\n    const releasedEvent = new CustomEvent(focusAfterReleased, {\n      ...focusAfterTrappedOpts,\n      detail: {\n        focusReason: focusReason.value,\n      },\n    })\n    trapContainer.addEventListener(focusAfterReleased, releaseOnFocus)\n    trapContainer.dispatchEvent(releasedEvent)\n    if (\n      !releasedEvent.defaultPrevented &&\n      (focusReason.value == 'keyboard' || !isFocusCausedByUserEvent())\n    ) {\n      tryFocus(lastFocusBeforeTrapped ?? document.body)\n    }\n    trapContainer.removeEventListener(focusAfterReleased, trapOnFocus)\n    focusableStack.remove(focusLayer)\n  }\n}\n\nonMounted(() => {\n  if (props.trapped) {\n    startTrap()\n  }\n  watch(\n    () => props.trapped,\n    (trapped) => {\n      if (trapped) {\n        startTrap()\n      } else {\n        stopTrap()\n      }\n    }\n  )\n})\n\nonBeforeUnmount(() => {\n  if (props.trapped) {\n    stopTrap()\n  }\n})\n</script>\n"],"names":["forwardRef"],"mappings":";;;;;;;;;;;;;;mCAwCc,CAAA;AAAA,EACZ,IAAM,EAAA,aAAA;AAAA,EACN,YAAc,EAAA,KAAA;AAChB,CAAA,CAAA,CAAA;;;;;;;AAKA,IAAA,MAAM,aAAa,GAA6B,EAAA,CAAA;AAChD,IAAA,IAAI,sBAA6C,GAAA,IAAA,CAAA;AACjD,IAAA,IAAI,qBAA4C,GAAA,IAAA,CAAA;AAE1C,IAAA,MAAA,EAAE,WAAY,EAAA,GAAI,cAAe,EAAA,CAAA;AAEvC,IAAA,gBAAA,CAAiB,CAAC,KAAU,KAAA;AAC1B,MAAA,IAAI,KAAM,CAAA,OAAA,IAAW,CAAC,UAAA,CAAW,MAAQ,EAAA;AACvC,QAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA,CAAA;AAAA,OAChC;AAAA,KACD,CAAA,CAAA;AAED,IAAA,MAAM,UAAyB,GAAA;AAAA,MAC7B,MAAQ,EAAA,KAAA;AAAA,MACR,KAAQ,GAAA;AACN,QAAA,IAAA,CAAK,MAAS,GAAA,IAAA,CAAA;AAAA,OAChB;AAAA,MACA,MAAS,GAAA;AACP,QAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AAAA,OAChB;AAAA,KACF,CAAA;AACM,IAAA,MAAA,SAAA,GAAY,CAAC,CAAqB,KAAA;AACtC,MAAA,IAAI,CAAC,KAAA,CAAM,IAAQ,IAAA,CAAC,KAAM,CAAA,OAAA;AAAS,QAAA,OAAA;AACnC,MAAA,IAAI,UAAW,CAAA,MAAA;AAAQ,QAAA,OAAA;AACvB,MAAA,MAAM,EAAE,GAAK,EAAA,MAAA,EAAQ,SAAS,OAAS,EAAA,aAAA,EAAe,UAAa,GAAA,CAAA,CAAA;AAC7D,MAAA,MAAA,EAAE,MAAS,GAAA,KAAA,CAAA;AACX,MAAA,MAAA,SAAA,GAAY,QAAQ,UAAW,CAAA,GAAA,IAAO,CAAC,MAAU,IAAA,CAAC,WAAW,CAAC,OAAA,CAAA;AACpE,MAAA,MAAM,oBAAoB,QAAS,CAAA,aAAA,CAAA;AACnC,MAAA,IAAI,aAAa,iBAAmB,EAAA;AAClC,QAAA,MAAM,SAAY,GAAA,aAAA,CAAA;AAClB,QAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,SAAS,SAAS,CAAA,CAAA;AACxC,QAAA,MAAM,aAAa,KAAS,IAAA,IAAA,CAAA;AAC5B,QAAA,IAAI,CAAC,UAAY,EAAA;AACf,UAAA,IAAI,sBAAsB,SAAW,EAAA;AACnC,YAAA,MAAM,yBAAyB,4BAA6B,CAAA;AAAA,cAC1D,aAAa,WAAY,CAAA,KAAA;AAAA,aAC1B,CAAA,CAAA;AACD,YAAA,IAAA,CAAK,qBAAqB,sBAAsB,CAAA,CAAA;AAC5C,YAAA,IAAA,CAAC,uBAAuB,gBAAkB,EAAA;AAC5C,cAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AAAA,aACnB;AAAA,WACF;AAAA,SACK,MAAA;AACD,UAAA,IAAA,CAAC,QAAY,IAAA,iBAAA,KAAsB,IAAM,EAAA;AAC3C,YAAA,MAAM,yBAAyB,4BAA6B,CAAA;AAAA,cAC1D,aAAa,WAAY,CAAA,KAAA;AAAA,aAC1B,CAAA,CAAA;AACD,YAAA,IAAA,CAAK,qBAAqB,sBAAsB,CAAA,CAAA;AAC5C,YAAA,IAAA,CAAC,uBAAuB,gBAAkB,EAAA;AAC5C,cAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACb,cAAA,IAAA,IAAA;AAAe,gBAAA,QAAA,CAAA,OAAO,IAAI,CAAA,CAAA;AAAA,aAChC;AAAA,WACF,MAAA,IACE,YACA,CAAC,KAAA,EAAO,SAAS,CAAE,CAAA,QAAA,CAAS,iBAAgC,CAC5D,EAAA;AACA,YAAA,MAAM,yBAAyB,4BAA6B,CAAA;AAAA,cAC1D,aAAa,WAAY,CAAA,KAAA;AAAA,aAC1B,CAAA,CAAA;AACD,YAAA,IAAA,CAAK,qBAAqB,sBAAsB,CAAA,CAAA;AAC5C,YAAA,IAAA,CAAC,uBAAuB,gBAAkB,EAAA;AAC5C,cAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACb,cAAA,IAAA,IAAA;AAAe,gBAAA,QAAA,CAAA,MAAM,IAAI,CAAA,CAAA;AAAA,aAC/B;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,KACF,CAAA;AACA,IAAA,OAAA,CAAQ,qBAAuB,EAAA;AAAA,MAC7B,YAAc,EAAA,UAAA;AAAA,MACd,SAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAA,KAAA;AAAA,MACE,MAAM,KAAM,CAAA,WAAA;AAAA,MACZ,CAAC,WAAgB,KAAA;AACf,QAAA,IAAI,WAAa,EAAA;AACf,UAAA,UAAA,CAAW,KAAQ,GAAA,WAAA,CAAA;AAAA,SACrB;AAAA,OACF;AAAA,MACA,EAAE,WAAW,IAAK,EAAA;AAAA,KACpB,CAAA;AACM,IAAA,KAAA,CAAA,UAAA,EAAY,CAACA,WAAAA,EAAY,aAAkB,KAAA;AAC/C,MAAA,IAAIA,WAAY,EAAA;AACdA,QAAW,WAAA,CAAA,gBAAA,CAAiB,WAAW,SAAS,CAAA,CAAA;AAChDA,QAAW,WAAA,CAAA,gBAAA,CAAiB,WAAW,SAAS,CAAA,CAAA;AAChDA,QAAW,WAAA,CAAA,gBAAA,CAAiB,YAAY,UAAU,CAAA,CAAA;AAAA,OACpD;AACA,MAAA,IAAI,yBAAyB,WAAa,EAAA;AAC1B,QAAA,aAAA,CAAA,mBAAA,CAAoB,WAAW,SAAS,CAAA,CAAA;AACxC,QAAA,aAAA,CAAA,mBAAA,CAAoB,WAAW,SAAS,CAAA,CAAA;AACxC,QAAA,aAAA,CAAA,mBAAA,CAAoB,YAAY,UAAU,CAAA,CAAA;AAAA,OAC1D;AAAA,KACD,CAAA,CAAA;AAEK,IAAA,MAAA,WAAA,GAAc,CAAC,CAAa,KAAA;AAChC,MAAA,IAAA,CAAK,kBAAkB,CAAC,CAAA,CAAA;AAAA,KAC1B,CAAA;AAEA,IAAA,MAAM,cAAiB,GAAA,CAAC,CACtB,KAAA,IAAA,CAAK,qBAAqB,CAAgB,CAAA,CAAA;AAEtC,IAAA,MAAA,SAAA,GAAY,CAAC,CAAkB,KAAA;AAC7B,MAAA,MAAA,aAAA,GAAgB,MAAM,UAAU,CAAA,CAAA;AACtC,MAAA,IAAI,CAAC,aAAA;AAAe,QAAA,OAAA;AACpB,MAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;AACjB,MAAA,MAAM,gBAAgB,CAAE,CAAA,aAAA,CAAA;AACxB,MAAA,MAAM,eAAkB,GAAA,MAAA,IAAU,aAAc,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAC3D,MAAA,IAAA,CAAC,MAAM,OAAS,EAAA;AAClB,QAAA,MAAM,mBACJ,GAAA,aAAA,IAAiB,aAAc,CAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AACvD,QAAA,IAAI,CAAC,mBAAqB,EAAA;AACC,UAAA,sBAAA,GAAA,aAAA,CAAA;AAAA,SAC3B;AAAA,OACF;AACI,MAAA,IAAA,eAAA;AAAsB,QAAA,IAAA,CAAA,WAAW,CAAC,CAAA,CAAA;AACtC,MAAA,IAAI,UAAW,CAAA,MAAA;AAAQ,QAAA,OAAA;AACvB,MAAA,IAAI,MAAM,OAAS,EAAA;AACjB,QAAA,IAAI,eAAiB,EAAA;AACK,UAAA,qBAAA,GAAA,MAAA,CAAA;AAAA,SACnB,MAAA;AACL,UAAA,QAAA,CAAS,uBAAuB,IAAI,CAAA,CAAA;AAAA,SACtC;AAAA,OACF;AAAA,KACF,CAAA;AAEM,IAAA,MAAA,UAAA,GAAa,CAAC,CAAa,KAAA;AACzB,MAAA,MAAA,aAAA,GAAgB,MAAM,UAAU,CAAA,CAAA;AAClC,MAAA,IAAA,UAAA,CAAW,UAAU,CAAC,aAAA;AAAe,QAAA,OAAA;AACzC,MAAA,IAAI,MAAM,OAAS,EAAA;AACjB,QAAA,MAAM,gBAAiB,CAAiB,CAAA,aAAA,CAAA;AACpC,QAAA,IAAA,CAAC,MAAM,aAAa,CAAA,IAAK,CAAC,aAAc,CAAA,QAAA,CAAS,aAAa,CAAG,EAAA;AAGnE,UAAA,UAAA,CAAW,MAAM;AACf,YAAA,IAAI,CAAC,UAAA,CAAW,MAAU,IAAA,KAAA,CAAM,OAAS,EAAA;AACvC,cAAA,MAAM,yBAAyB,4BAA6B,CAAA;AAAA,gBAC1D,aAAa,WAAY,CAAA,KAAA;AAAA,eAC1B,CAAA,CAAA;AACD,cAAA,IAAA,CAAK,qBAAqB,sBAAsB,CAAA,CAAA;AAC5C,cAAA,IAAA,CAAC,uBAAuB,gBAAkB,EAAA;AAC5C,gBAAA,QAAA,CAAS,uBAAuB,IAAI,CAAA,CAAA;AAAA,eACtC;AAAA,aACF;AAAA,aACC,CAAC,CAAA,CAAA;AAAA,SACN;AAAA,OACK,MAAA;AACL,QAAA,MAAM,SAAS,CAAE,CAAA,MAAA,CAAA;AACjB,QAAA,MAAM,eAAkB,GAAA,MAAA,IAAU,aAAc,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAC/D,QAAA,IAAI,CAAC,eAAA;AAAsB,UAAA,IAAA,CAAA,YAAY,CAAC,CAAA,CAAA;AAAA,OAC1C;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,YAAY,YAAY;AAE5B,MAAA,MAAM,QAAS,EAAA,CAAA;AACT,MAAA,MAAA,aAAA,GAAgB,MAAM,UAAU,CAAA,CAAA;AACtC,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,cAAA,CAAe,KAAK,UAAU,CAAA,CAAA;AAC9B,QAAA,MAAM,qBAAqB,aAAc,CAAA,QAAA,CAAS,SAAS,aAAa,CAAA,GACpE,yBACA,QAAS,CAAA,aAAA,CAAA;AACY,QAAA,sBAAA,GAAA,kBAAA,CAAA;AACnB,QAAA,MAAA,oBAAA,GAAuB,aAAc,CAAA,QAAA,CAAS,kBAAkB,CAAA,CAAA;AACtE,QAAA,IAAI,CAAC,oBAAsB,EAAA;AACzB,UAAA,MAAM,UAAa,GAAA,IAAI,KAAM,CAAA,iBAAA,EAAmB,qBAAqB,CAAA,CAAA;AACvD,UAAA,aAAA,CAAA,gBAAA,CAAiB,mBAAmB,WAAW,CAAA,CAAA;AAC7D,UAAA,aAAA,CAAc,cAAc,UAAU,CAAA,CAAA;AAClC,UAAA,IAAA,CAAC,WAAW,gBAAkB,EAAA;AAChC,YAAA,QAAA,CAAS,MAAM;AACb,cAAA,IAAI,eAAe,KAAM,CAAA,YAAA,CAAA;AACrB,cAAA,IAAA,CAAC,QAAS,CAAA,YAAY,CAAG,EAAA;AAC3B,gBAAA,QAAA,CAAS,YAAY,CAAA,CAAA;AACjB,gBAAA,IAAA,QAAA,CAAS,kBAAkB,YAAc,EAAA;AAC5B,kBAAA,YAAA,GAAA,OAAA,CAAA;AAAA,iBACjB;AAAA,eACF;AACA,cAAA,IAAI,iBAAiB,OAAS,EAAA;AAC5B,gBAAA,oBAAA;AAAA,kBACE,2BAA2B,aAAa,CAAA;AAAA,kBACxC,IAAA;AAAA,iBACF,CAAA;AAAA,eACF;AACA,cAAA,IACE,QAAS,CAAA,aAAA,KAAkB,kBAC3B,IAAA,YAAA,KAAiB,WACjB,EAAA;AACA,gBAAA,QAAA,CAAS,aAAa,CAAA,CAAA;AAAA,eACxB;AAAA,aACD,CAAA,CAAA;AAAA,WACH;AAAA,SACF;AAAA,OACF;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,WAAW,MAAM;AACf,MAAA,MAAA,aAAA,GAAgB,MAAM,UAAU,CAAA,CAAA;AACtC,MAAA,IAAI,aAAe,EAAA;AACH,QAAA,aAAA,CAAA,mBAAA,CAAoB,mBAAmB,WAAW,CAAA,CAAA;AAC1D,QAAA,MAAA,aAAA,GAAgB,IAAI,WAAA,CAAY,kBAAoB,EAAA;AAAA,UACxD,GAAG,qBAAA;AAAA,UACH,MAAQ,EAAA;AAAA,YACN,aAAa,WAAY,CAAA,KAAA;AAAA,WAC3B;AAAA,SACD,CAAA,CAAA;AACa,QAAA,aAAA,CAAA,gBAAA,CAAiB,oBAAoB,cAAc,CAAA,CAAA;AACjE,QAAA,aAAA,CAAc,cAAc,aAAa,CAAA,CAAA;AAEvC,QAAA,IAAA,CAAC,cAAc,gBACd,KAAA,WAAA,CAAY,SAAS,UAAc,IAAA,CAAC,0BACrC,CAAA,EAAA;AACS,UAAA,QAAA,CAAA,sBAAA,IAAA,IAAA,GAAA,sBAAA,GAA0B,SAAS,IAAI,CAAA,CAAA;AAAA,SAClD;AACc,QAAA,aAAA,CAAA,mBAAA,CAAoB,oBAAoB,WAAW,CAAA,CAAA;AACjE,QAAA,cAAA,CAAe,OAAO,UAAU,CAAA,CAAA;AAAA,OAClC;AAAA,KACF,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,MAAM,OAAS,EAAA;AACP,QAAA,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA;AAAA,QACE,MAAM,KAAM,CAAA,OAAA;AAAA,QACZ,CAAC,OAAY,KAAA;AACX,UAAA,IAAI,OAAS,EAAA;AACD,YAAA,SAAA,EAAA,CAAA;AAAA,WACL,MAAA;AACI,YAAA,QAAA,EAAA,CAAA;AAAA,WACX;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,IAAI,MAAM,OAAS,EAAA;AACR,QAAA,QAAA,EAAA,CAAA;AAAA,OACX;AAAA,KACD,CAAA,CAAA;;;;;;;;;;"}