{"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<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 '@xzx-design/constants'\nimport { useEscapeKeydown } from '@xzx-design/hooks'\nimport { isString } from '@xzx-design/utils'\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'\nimport {\n  FOCUS_AFTER_RELEASED,\n  FOCUS_AFTER_TRAPPED,\n  FOCUS_AFTER_TRAPPED_OPTS,\n  FOCUS_TRAP_INJECTION_KEY,\n  ON_RELEASE_FOCUS_EVT,\n  ON_TRAP_FOCUS_EVT,\n} from './tokens'\n\nimport type { FocusLayer } from './utils'\n\ndefineOptions({\n  name: 'XzxFocusTrap',\n  inheritAttrs: false,\n})\n\nconst props = defineProps(focusTrapProps)\nconst emits = defineEmits(focusTrapEmits)\n\nconst forwardRef = ref<HTMLElement | undefined>()\nlet lastFocusBeforeTrapped: HTMLElement | null\nlet lastFocusAfterTrapped: HTMLElement | null\n\nconst { focusReason } = useFocusReason()\n\nuseEscapeKeydown((event) => {\n  if (props.trapped && !focusLayer.paused) {\n    emits('release-requested', 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}\n\nconst onKeydown = (e: KeyboardEvent) => {\n  if (!props.loop && !props.trapped) return\n  if (focusLayer.paused) return\n\n  const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e\n  const { loop } = props\n  const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey\n\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        emits('focusout-prevented', 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        emits('focusout-prevented', 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        emits('focusout-prevented', focusoutPreventedEvent)\n        if (!focusoutPreventedEvent.defaultPrevented) {\n          e.preventDefault()\n          if (loop) tryFocus(last, true)\n        }\n      }\n    }\n  }\n}\n\nprovide(FOCUS_TRAP_INJECTION_KEY, {\n  focusTrapRef: forwardRef,\n  onKeydown,\n})\n\nwatch(\n  () => props.focusTrapEl,\n  (focusTrapEl) => {\n    if (focusTrapEl) {\n      forwardRef.value = focusTrapEl\n    }\n  },\n  { immediate: true }\n)\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) {\n    oldForwardRef.removeEventListener('keydown', onKeydown)\n    oldForwardRef.removeEventListener('focusin', onFocusIn)\n    oldForwardRef.removeEventListener('focusout', onFocusOut)\n  }\n})\n\nconst trapOnFocus = (e: Event) => {\n  emits(ON_TRAP_FOCUS_EVT, e)\n}\nconst releaseOnFocus = (e: Event) => emits(ON_RELEASE_FOCUS_EVT, e)\n\nconst onFocusIn = (e: FocusEvent) => {\n  const trapContainer = unref(forwardRef)\n  if (!trapContainer) return\n\n  const target = e.target as HTMLElement | null\n  const relatedTarget = e.relatedTarget as HTMLElement | null\n  const isFocusedInTrap = target && trapContainer.contains(target)\n\n  if (!props.trapped) {\n    const isPrevFocusedInTrap =\n      relatedTarget && trapContainer.contains(relatedTarget)\n    if (!isPrevFocusedInTrap) {\n      lastFocusBeforeTrapped = relatedTarget\n    }\n  }\n\n  if (isFocusedInTrap) emits('focusin', e)\n\n  if (focusLayer.paused) return\n\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\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          emits('focusout-prevented', 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) emits('focusout', e)\n  }\n}\n\nasync function startTrap() {\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(\n        FOCUS_AFTER_TRAPPED,\n        FOCUS_AFTER_TRAPPED_OPTS\n      )\n      trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, 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\nfunction stopTrap() {\n  const trapContainer = unref(forwardRef)\n\n  if (trapContainer) {\n    trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus)\n\n    const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {\n      ...FOCUS_AFTER_TRAPPED_OPTS,\n      detail: {\n        focusReason: focusReason.value,\n      },\n    })\n    trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus)\n    trapContainer.dispatchEvent(releasedEvent)\n    if (\n      !releasedEvent.defaultPrevented &&\n      (focusReason.value == 'keyboard' ||\n        !isFocusCausedByUserEvent() ||\n        trapContainer.contains(document.activeElement))\n    ) {\n      tryFocus(lastFocusBeforeTrapped ?? document.body)\n    }\n\n    trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus)\n    focusableStack.remove(focusLayer)\n  }\n}\n\nonMounted(() => {\n  if (props.trapped) {\n    startTrap()\n  }\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  if (forwardRef.value) {\n    forwardRef.value.removeEventListener('keydown', onKeydown)\n    forwardRef.value.removeEventListener('focusin', onFocusIn)\n    forwardRef.value.removeEventListener('focusout', onFocusOut)\n    forwardRef.value = undefined\n  }\n})\n</script>\n"],"names":["forwardRef"],"mappings":"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"}