{"version":3,"file":"use-content.mjs","sources":["../../../../../../../../packages/components/popper/src/composables/use-content.ts"],"sourcesContent":["import { computed, inject, onMounted, ref, unref, watch } from 'vue'\nimport { isUndefined } from 'lodash-unified'\nimport { usePopper } from '@hd-front-end/hooks'\nimport { POPPER_INJECTION_KEY } from '../constants'\nimport { buildPopperOptions, unwrapMeasurableEl } from '../utils'\n\nimport type { Modifier } from '@popperjs/core'\nimport type { PartialOptions } from '@hd-front-end/hooks'\nimport type { PopperContentProps } from '../content'\n\nconst DEFAULT_ARROW_OFFSET = 0\n\nexport const usePopperContent = (props: PopperContentProps) => {\n  const { popperInstanceRef, contentRef, triggerRef, role } = inject(\n    POPPER_INJECTION_KEY,\n    undefined\n  )!\n\n  const arrowRef = ref<HTMLElement>()\n  const arrowOffset = computed(() => props.arrowOffset)\n\n  const eventListenerModifier = computed(() => {\n    return {\n      name: 'eventListeners',\n      enabled: !!props.visible,\n    } as Modifier<'eventListeners', any>\n  })\n\n  const arrowModifier = computed(() => {\n    const arrowEl = unref(arrowRef)\n    const offset = unref(arrowOffset) ?? DEFAULT_ARROW_OFFSET\n    // Seems like the `phase` and `fn` is required by Modifier type\n    // But on its documentation they didn't specify that.\n    // Refer to https://popper.js.org/docs/v2/modifiers/arrow/\n    return {\n      name: 'arrow',\n      enabled: !isUndefined(arrowEl),\n      options: {\n        element: arrowEl,\n        padding: offset,\n      },\n    } as any\n  })\n\n  const options = computed<PartialOptions>(() => {\n    return {\n      onFirstUpdate: () => {\n        update()\n      },\n      ...buildPopperOptions(props, [\n        unref(arrowModifier),\n        unref(eventListenerModifier),\n      ]),\n    }\n  })\n\n  const computedReference = computed(\n    () => unwrapMeasurableEl(props.referenceEl) || unref(triggerRef)\n  )\n\n  const { attributes, state, styles, update, forceUpdate, instanceRef } =\n    usePopper(computedReference, contentRef, options)\n\n  watch(instanceRef, (instance) => (popperInstanceRef.value = instance), {\n    flush: 'sync',\n  })\n\n  onMounted(() => {\n    watch(\n      () => unref(computedReference)?.getBoundingClientRect?.(),\n      () => {\n        update()\n      }\n    )\n  })\n\n  return {\n    attributes,\n    arrowRef,\n    contentRef,\n    instanceRef,\n    state,\n    styles,\n    role,\n\n    forceUpdate,\n    update,\n  }\n}\n\nexport type UsePopperContentReturn = ReturnType<typeof usePopperContent>\n"],"names":[],"mappings":"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"}