{"version":3,"file":"floating.mjs","sources":["../src/floating/arrow.ts","../src/floating/utils/getDPR.ts","../src/floating/utils/roundByDPR.ts","../src/floating/useFloating.ts"],"sourcesContent":["import {\n  arrow as arrowCore,\n  type Middleware,\n  type Padding,\n} from '@floating-ui/dom'\n\nimport { type MaybeRefOrGetter, toValue } from 'vue'\n\nexport interface ArrowOptions {\n  /**\n   * The arrow element or template ref to be positioned.\n   * @required\n   */\n  element: MaybeRefOrGetter<Element | undefined>\n  /**\n   * The padding between the arrow element and the floating element edges. Useful when the floating element has rounded corners.\n   * @default 0\n   */\n  padding?: Padding\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nexport function arrow(options: ArrowOptions): Middleware {\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const element = toValue(options.element)\n\n      if (element == null) {\n        return {}\n      }\n\n      return arrowCore({ element, padding: options.padding }).fn(state)\n    },\n  }\n}\n","export function getDPR(element: Element): number {\n  if (typeof window === 'undefined') {\n    return 1\n  }\n\n  const win = element.ownerDocument.defaultView || window\n\n  return win.devicePixelRatio || 1\n}\n","import { getDPR } from './getDPR.ts'\n\nexport function roundByDPR(element: Element, value: number) {\n  const dpr = getDPR(element)\n\n  return Math.round(value * dpr) / dpr\n}\n","import type {\n  ComputePositionConfig,\n  MiddlewareData,\n  ReferenceType,\n  UseFloatingCofnig,\n  UseFloatingOptions,\n  UseFloatingReturn,\n} from './types.ts'\nimport { computePosition } from '@floating-ui/dom'\n\nimport {\n  computed,\n  type CSSProperties,\n  type MaybeRefOrGetter,\n  onWatcherCleanup,\n  shallowRef,\n  toValue,\n  watchEffect,\n} from 'vue'\nimport { getDPR } from './utils/getDPR.ts'\nimport { roundByDPR } from './utils/roundByDPR.ts'\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param options The floating options.\n * @param config The floating configuration.\n * @see https://floating-ui.com/docs/vue\n */\nexport function useFloating<RT extends ReferenceType = ReferenceType>(\n  options: UseFloatingOptions<RT>,\n  config: MaybeRefOrGetter<UseFloatingCofnig> = {},\n): UseFloatingReturn {\n  let configValue: UseFloatingCofnig\n\n  watchEffect(() => {\n    const shouldUpdate = configValue !== undefined\n    configValue = toValue(config)\n\n    if (shouldUpdate) {\n      update()\n    }\n  })\n\n  const {\n    transform = true,\n    whileElementsMounted,\n    elements: {\n      referenceEl,\n      floatingEl,\n    },\n  } = options\n\n  const x = shallowRef(0)\n  const y = shallowRef(0)\n  const strategy = shallowRef(configValue!.strategy ?? 'absolute')\n  const placement = shallowRef(configValue!.placement ?? 'bottom')\n  const middlewareData = shallowRef<MiddlewareData>({})\n  const isPositioned = shallowRef(false)\n\n  let referenceRef: ReferenceType | undefined\n  let floatingRef: HTMLElement | undefined\n\n  function update() {\n    if (!referenceRef || !floatingRef)\n      return\n\n    const config: ComputePositionConfig = {\n      placement: configValue.placement,\n      strategy: configValue.strategy,\n      middleware: configValue.middleware,\n    }\n\n    if (configValue.platform)\n      config.platform = configValue.platform\n\n    computePosition(referenceRef, floatingRef, config).then(\n      (data) => {\n        x.value = data.x\n        y.value = data.y\n        strategy.value = data.strategy\n        placement.value = data.placement\n        middlewareData.value = data.middlewareData\n        isPositioned.value = true\n      },\n    )\n  }\n\n  watchEffect(() => {\n    if (referenceEl.value)\n      referenceRef = referenceEl.value\n\n    if (floatingEl.value)\n      floatingRef = floatingEl.value\n\n    if (!referenceEl.value || !floatingEl.value)\n      return\n\n    if (!whileElementsMounted) {\n      update()\n      return\n    }\n\n    onWatcherCleanup(whileElementsMounted(referenceEl.value, floatingEl.value, update))\n  })\n\n  const floatingStyles = computed<CSSProperties>(() => {\n    const initialStyles = {\n      position: strategy.value,\n      left: 0,\n      top: 0,\n    }\n\n    const floating = floatingEl.value\n    if (!floating)\n      return initialStyles\n\n    const xVal = roundByDPR(floating, x.value)\n    const yVal = roundByDPR(floating, y.value)\n\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: `translate(${xVal}px, ${yVal}px)`,\n        ...(getDPR(floating) >= 1.5 && { willChange: 'transform' }),\n      }\n    }\n\n    return {\n      position: strategy.value,\n      left: `${xVal}px`,\n      top: `${yVal}px`,\n    }\n  })\n\n  return {\n    x,\n    y,\n    strategy,\n    placement,\n    middlewareData,\n    isPositioned,\n    floatingStyles,\n    update,\n  }\n}\n"],"names":["arrowCore","config"],"mappings":"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"}