{"version":3,"file":"use-floating.mjs","sources":["../../../../../../packages/hooks/use-floating/vue/use-floating.ts"],"sourcesContent":["import {\n  computed,\n  getCurrentScope,\n  onMounted,\n  onScopeDispose,\n  ref,\n  shallowReadonly,\n  shallowRef,\n  unref,\n  watch,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport { computePosition } from '@vuesax-alpha/hooks/use-floating/dom'\n\nimport { getDPR } from './utils/get-dpr'\nimport { roundByDPR } from './utils/round-by-dpr'\nimport { unwrapElement } from './utils/unwrap-element'\nimport type {\n  MaybeElement,\n  MiddlewareData,\n  UseFloatingOptions,\n  UseFloatingReturn,\n} from './types'\nimport type { Ref } from 'vue'\nimport type {\n  FloatingElement,\n  ReferenceElement,\n} from '@vuesax-alpha/hooks/use-floating/dom'\n\nexport function useFloating<T extends ReferenceElement = ReferenceElement>(\n  reference: Ref<MaybeElement<T>>,\n  floating: Ref<MaybeElement<FloatingElement>>,\n  options: UseFloatingOptions<T> = {}\n): UseFloatingReturn {\n  const whileElementsMountedOption = options.whileElementsMounted\n  const openOption = computed(() => unref(options.open) ?? true)\n  const fitOption = computed(() => unref(options.fit) ?? false)\n  const middlewareOption = computed(() => unref(options.middleware))\n  const placementOption = computed(() => unref(options.placement) ?? 'bottom')\n  const strategyOption = computed(() => unref(options.strategy) ?? 'absolute')\n  const transformOption = computed(() => unref(options.transform) ?? true)\n  const referenceElement = computed(() => unwrapElement(reference.value))\n  const floatingElement = computed(() => unwrapElement(floating.value))\n\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<MiddlewareData>({})\n  const isPositioned = ref(false)\n  const floatingStyles = computed(() => {\n    const initialStyles = {\n      position: strategy.value,\n      left: '0',\n      top: '0',\n    }\n\n    if (!floatingElement.value) {\n      return initialStyles\n    }\n\n    const xVal = roundByDPR(floatingElement.value, x.value)\n    const yVal = roundByDPR(floatingElement.value, y.value)\n\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\n    return {\n      position: strategy.value,\n      left: `${xVal}px`,\n      top: `${yVal}px`,\n    }\n  })\n\n  let whileElementsMountedCleanup: (() => void) | undefined\n\n  function update() {\n    if (referenceElement.value == null || floatingElement.value == null) {\n      return\n    }\n\n    if (fitOption.value) {\n      floatingElement.value.style.width = `${\n        referenceElement.value.getBoundingClientRect().width\n      }px`\n    }\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\n  function cleanup() {\n    if (typeof whileElementsMountedCleanup === 'function') {\n      whileElementsMountedCleanup()\n      whileElementsMountedCleanup = undefined\n    }\n  }\n\n  function attach() {\n    cleanup()\n\n    if (whileElementsMountedOption === undefined) {\n      update()\n      return\n    }\n\n    if (referenceElement.value != null && floatingElement.value != null) {\n      whileElementsMountedCleanup = whileElementsMountedOption(\n        referenceElement.value,\n        floatingElement.value,\n        update\n      )\n      return\n    }\n  }\n\n  function reset() {\n    if (!openOption.value) {\n      isPositioned.value = false\n    }\n  }\n\n  onMounted(() => {\n    useEventListener('resize', attach, true)\n    useEventListener('scroll', attach, true)\n\n    watch([middlewareOption, placementOption, strategyOption], update, {\n      flush: 'sync',\n    })\n    watch([referenceElement, floatingElement], attach, { flush: 'sync' })\n    watch(openOption, reset, { flush: 'sync' })\n  })\n\n  if (getCurrentScope()) {\n    onScopeDispose(cleanup)\n  }\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"],"names":[],"mappings":"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"}