{"version":3,"file":"content.mjs","sources":["../../../../../../packages/components/popper/src/content.vue"],"sourcesContent":["<template>\n  <div\n    ref=\"popperContentRef\"\n    :style=\"contentStyle\"\n    :class=\"contentClass\"\n    tabindex=\"-1\"\n    @mouseenter=\"(e) => $emit('mouseenter', e)\"\n    @mouseleave=\"(e) => $emit('mouseleave', e)\"\n  >\n    <b-focus-trap\n      :trapped=\"trapped\"\n      :trap-on-focus-in=\"true\"\n      :focus-trap-el=\"popperContentRef\"\n      :focus-start-el=\"focusStartRef\"\n      @focus-after-trapped=\"onFocusAfterTrapped\"\n      @focus-after-released=\"onFocusAfterReleased\"\n      @focusin=\"onFocusInTrap\"\n      @focusout-prevented=\"onFocusoutPrevented\"\n      @release-requested=\"onReleaseRequested\"\n    >\n      <slot />\n    </b-focus-trap>\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  inject,\n  onBeforeUnmount,\n  onMounted,\n  provide,\n  ref,\n  unref,\n  watch,\n} from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { createPopper } from '@bigin/popperjs-es'\nimport BFocusTrap from '@bigin/components/focus-trap'\nimport { useNamespace, useZIndex } from '@bigin/hooks'\nimport {\n  POPPER_CONTENT_INJECTION_KEY,\n  POPPER_INJECTION_KEY,\n} from '@bigin/tokens'\nimport { isElement } from '@bigin/utils'\nimport { popperContentEmits, popperContentProps } from './content'\nimport { buildPopperOptions, unwrapMeasurableEl } from './utils'\nimport type { CreatePopperInstanceParams } from './content'\n\nimport type { WatchStopHandle } from 'vue'\n\ndefineOptions({\n  name: 'BPopperContent',\n})\n\nconst emit = defineEmits(popperContentEmits)\n\nconst props = defineProps(popperContentProps)\n\nconst { popperInstanceRef, contentRef, triggerRef, role } = inject(\n  POPPER_INJECTION_KEY,\n  undefined\n)!\nconst { nextZIndex } = useZIndex()\nconst ns = useNamespace('popper')\nconst popperContentRef = ref<HTMLElement>()\nconst focusStartRef = ref<'container' | 'first' | HTMLElement>('first')\nconst arrowRef = ref<HTMLElement>()\nconst arrowOffset = ref<number>()\nprovide(POPPER_CONTENT_INJECTION_KEY, {\n  arrowRef,\n  arrowOffset,\n})\n\nconst contentZIndex = ref<number>(props.zIndex || nextZIndex())\nconst trapped = ref<boolean>(false)\n\nlet triggerTargetAriaStopWatch: WatchStopHandle | undefined = undefined\n\nconst computedReference = computed(\n  () => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef)\n)\n\nconst contentStyle = computed(\n  () => [{ zIndex: unref(contentZIndex) }, props.popperStyle] as any\n)\n\nconst contentClass = computed(() => [\n  ns.b(),\n  ns.is('pure', props.pure),\n  ns.is(props.effect),\n  props.popperClass,\n])\n\nconst ariaModal = computed<string | undefined>(() => {\n  return role && role.value === 'dialog' ? 'false' : undefined\n})\n\nconst createPopperInstance = ({\n  referenceEl,\n  popperContentEl,\n  arrowEl,\n}: CreatePopperInstanceParams) => {\n  const options = buildPopperOptions(props, {\n    arrowEl,\n    arrowOffset: unref(arrowOffset),\n  })\n\n  return createPopper(referenceEl, popperContentEl, options)\n}\n\nconst updatePopper = (shouldUpdateZIndex = true) => {\n  unref(popperInstanceRef)?.update()\n  shouldUpdateZIndex && (contentZIndex.value = props.zIndex || nextZIndex())\n}\n\nconst togglePopperAlive = () => {\n  const monitorable = { name: 'eventListeners', enabled: props.visible }\n  unref(popperInstanceRef)?.setOptions?.((options) => ({\n    ...options,\n    modifiers: [...(options.modifiers || []), monitorable],\n  }))\n  updatePopper(false)\n  if (props.visible && props.focusOnShow) {\n    trapped.value = true\n  } else if (props.visible === false) {\n    trapped.value = false\n  }\n}\n\nconst onFocusAfterTrapped = () => {\n  emit('focus')\n}\n\nconst onFocusAfterReleased = () => {\n  focusStartRef.value = 'first'\n  emit('blur')\n}\n\nconst onFocusInTrap = (event: FocusEvent) => {\n  if (props.visible && !trapped.value) {\n    if (event.target) {\n      focusStartRef.value = event.target as typeof focusStartRef.value\n    }\n    trapped.value = true\n    if (event.relatedTarget) {\n      ;(event.relatedTarget as HTMLElement)?.focus()\n    }\n  }\n}\n\nconst onFocusoutPrevented = () => {\n  if (!props.trapping) {\n    trapped.value = false\n  }\n}\n\nconst onReleaseRequested = () => {\n  trapped.value = false\n  emit('close')\n}\n\nonMounted(() => {\n  let updateHandle: WatchStopHandle\n  watch(\n    computedReference,\n    (referenceEl) => {\n      updateHandle?.()\n      const popperInstance = unref(popperInstanceRef)\n      popperInstance?.destroy?.()\n      if (referenceEl) {\n        const popperContentEl = unref(popperContentRef)!\n        contentRef.value = popperContentEl\n\n        popperInstanceRef.value = createPopperInstance({\n          referenceEl,\n          popperContentEl,\n          arrowEl: unref(arrowRef),\n        })\n\n        updateHandle = watch(\n          () => referenceEl.getBoundingClientRect(),\n          () => updatePopper(),\n          {\n            immediate: true,\n          }\n        )\n      } else {\n        popperInstanceRef.value = undefined\n      }\n    },\n    {\n      immediate: true,\n    }\n  )\n\n  watch(\n    () => props.triggerTargetEl,\n    (triggerTargetEl, prevTriggerTargetEl) => {\n      triggerTargetAriaStopWatch?.()\n      triggerTargetAriaStopWatch = undefined\n\n      const el = unref(triggerTargetEl || popperContentRef.value)\n      const prevEl = unref(prevTriggerTargetEl || popperContentRef.value)\n\n      if (isElement(el)) {\n        triggerTargetAriaStopWatch = watch(\n          [role, () => props.ariaLabel, ariaModal, () => props.id],\n          (watches) => {\n            ;['role', 'aria-label', 'aria-modal', 'id'].forEach((key, idx) => {\n              isNil(watches[idx])\n                ? el.removeAttribute(key)\n                : el.setAttribute(key, watches[idx]!)\n            })\n          },\n          { immediate: true }\n        )\n      }\n      if (prevEl !== el && isElement(prevEl)) {\n        ;['role', 'aria-label', 'aria-modal', 'id'].forEach((key) => {\n          prevEl.removeAttribute(key)\n        })\n      }\n    },\n    { immediate: true }\n  )\n\n  watch(() => props.visible, togglePopperAlive, { immediate: true })\n\n  watch(\n    () =>\n      buildPopperOptions(props, {\n        arrowEl: unref(arrowRef),\n        arrowOffset: unref(arrowOffset),\n      }),\n    (option) => popperInstanceRef.value?.setOptions(option)\n  )\n})\n\nonBeforeUnmount(() => {\n  triggerTargetAriaStopWatch?.()\n  triggerTargetAriaStopWatch = undefined\n})\n\ndefineExpose({\n  /**\n   * @description popper content element\n   */\n  popperContentRef,\n  /**\n   * @description popperjs instance\n   */\n  popperInstanceRef,\n  /**\n   * @description method for updating popper\n   */\n  updatePopper,\n\n  /**\n   * @description content style\n   */\n  contentStyle,\n})\n</script>\n"],"names":[],"mappings":"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"}