{"version":3,"file":"tooltip.mjs","sources":["../src/tooltip/TooltipProvider.ts","../src/tooltip/TooltipRoot.ts","../src/tooltip/TooltipContent.ts","../src/tooltip/utils.ts","../src/tooltip/useGraceArea.ts","../src/tooltip/TooltipContentImpl.ts","../src/tooltip/TooltipContentImpl.vue","../src/tooltip/TooltipContent.vue","../src/tooltip/TooltipContentAriaLabel.vue","../src/tooltip/TooltipProvider.vue","../src/tooltip/TooltipRoot.vue","../src/tooltip/TooltipTrigger.ts","../src/tooltip/TooltipTrigger.vue"],"sourcesContent":["import type { PrimitiveDefaultProps } from '../shared/index.ts'\nimport { isClient, tryOnScopeDispose } from '@vueuse/core'\nimport { type Ref, shallowRef } from 'vue'\nimport { createContext, type MutableRefObject, useRef } from '../hooks/index.ts'\n\nexport interface TooltipProviderProps {\n  /**\n   * The duration from when the pointer enters the trigger until the tooltip gets opened.\n   * @defaultValue 700\n   */\n  delayDuration?: number\n  /**\n   * How much time a user has to enter another trigger without incurring a delay again.\n   * @defaultValue 300\n   */\n  skipDelayDuration?: number\n  /**\n   * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n   * @defaultValue false\n   */\n  disableHoverableContent?: boolean\n}\n\nexport const DEFAULT_TOOLTIP_PROVIDER_PROPS = {\n  disableHoverableContent: undefined,\n} satisfies PrimitiveDefaultProps<TooltipProviderProps>\n\nexport interface TooltipProviderContext {\n  isOpenDelayed: Ref<boolean>\n  delayDuration: number\n  onOpen: () => void\n  onClose: () => void\n  onPointerInTransitChange: (inTransit: boolean) => void\n  isPointerInTransitRef: MutableRefObject<boolean>\n  disableHoverableContent: boolean\n}\n\nexport const [provideTooltipProviderContext, useTooltipProviderContext] = createContext<TooltipProviderContext>('Tooltip')\n\nexport function useTooltipProvider({\n  delayDuration = 700,\n  skipDelayDuration = 300,\n  disableHoverableContent = false,\n}: TooltipProviderProps = {}) {\n  const isOpenDelayed = shallowRef(true)\n  const isPointerInTransitRef = useRef(false)\n  let skipDelayTimerRef = 0\n\n  if (isClient) {\n    tryOnScopeDispose(() => {\n      window.clearTimeout(skipDelayTimerRef)\n    })\n  }\n\n  provideTooltipProviderContext({\n    isOpenDelayed,\n    delayDuration,\n    onOpen() {\n      window.clearTimeout(skipDelayTimerRef)\n      isOpenDelayed.value = false\n    },\n    onClose() {\n      window.clearTimeout(skipDelayTimerRef)\n      skipDelayTimerRef = window.setTimeout(() => {\n        isOpenDelayed.value = true\n      }, skipDelayDuration)\n    },\n    isPointerInTransitRef,\n    onPointerInTransitChange(inTransit: boolean) {\n      isPointerInTransitRef.value = inTransit\n    },\n    disableHoverableContent,\n  })\n}\n","import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { onBeforeUnmount, type Ref, shallowRef, useId } from 'vue'\nimport { createContext, useControllableStateV2 } from '../hooks/index.ts'\nimport { usePooperRoot } from '../popper/index.ts'\nimport { useTooltipProviderContext } from './TooltipProvider.ts'\n\nexport interface TooltipRootProps {\n  open?: boolean\n  defaultOpen?: boolean\n  /**\n   * The duration from when the pointer enters the trigger until the tooltip gets opened. This will\n   * override the prop with the same name passed to Provider.\n   * @defaultValue 700\n   */\n  delayDuration?: number\n  /**\n   * When `true`, trying to hover the content will result in the tooltip closing as the pointer leaves the trigger.\n   * @defaultValue false\n   */\n  disableHoverableContent?: boolean\n}\n\nexport const DEFAULT_TOOLTIP_ROOT_PROPS = {\n  open: undefined,\n  defaultOpen: undefined,\n  disableHoverableContent: undefined,\n} satisfies PrimitiveDefaultProps<TooltipRootProps>\n\nexport type TooltipRootEmits = {\n  'update:open': [open: boolean]\n}\n\nexport const TOOLTIP_OPEN = 'tooltip.open'\n\nexport interface TooltipContext {\n  contentId: string\n  open: Ref<boolean>\n  stateAttribute: () => 'closed' | 'delayed-open' | 'instant-open'\n  trigger: Ref<HTMLElement | undefined>\n  onTriggerEnter: () => void\n  onTriggerLeave: () => void\n  onOpen: () => void\n  onClose: () => void\n  disableHoverableContent: boolean\n}\n\nexport const [provideTooltipContext, useTooltipContext] = createContext<TooltipContext>('Tooltip')\n\nexport interface UseTooltipRootProps extends EmitsToHookProps<TooltipRootEmits> {\n  open?: () => boolean | undefined\n  defaultOpen?: boolean\n  delayDuration?: number\n  disableHoverableContent?: boolean\n}\n\nexport function useTooltipRoot(props: UseTooltipRootProps) {\n  const providerContext = useTooltipProviderContext('Tooltip')\n\n  const {\n    defaultOpen = false,\n    disableHoverableContent = providerContext.disableHoverableContent,\n    delayDuration = providerContext.delayDuration,\n  } = props\n\n  const trigger = shallowRef<HTMLElement>()\n\n  let openTimerRef = 0\n\n  let wasOpenDelayedRef = false\n\n  const open = useControllableStateV2(\n    props.open,\n    (v: boolean) => {\n      if (v) {\n        providerContext.onOpen()\n\n        // as `onChange` is called within a lifecycle method we\n        // avoid dispatching via `dispatchDiscreteCustomEvent`.\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN))\n      }\n      else {\n        providerContext.onClose()\n      }\n\n      props.onUpdateOpen?.(v)\n    },\n    defaultOpen,\n  )\n\n  function handleOpen() {\n    window.clearTimeout(openTimerRef)\n    openTimerRef = 0\n    wasOpenDelayedRef = false\n    open.value = true\n  }\n\n  function handleClose() {\n    window.clearTimeout(openTimerRef)\n    openTimerRef = 0\n    open.value = false\n  }\n\n  function handleDelayedOpen() {\n    window.clearTimeout(openTimerRef)\n    openTimerRef = window.setTimeout(() => {\n      wasOpenDelayedRef = true\n      open.value = true\n      openTimerRef = 0\n    }, delayDuration)\n  }\n\n  onBeforeUnmount(() => {\n    if (openTimerRef)\n      window.clearTimeout(openTimerRef)\n  })\n\n  provideTooltipContext({\n    contentId: useId(),\n    open,\n    stateAttribute() {\n      return open.value ? (wasOpenDelayedRef ? 'delayed-open' : 'instant-open') : 'closed'\n    },\n    trigger,\n    onTriggerEnter() {\n      if (providerContext.isOpenDelayed.value)\n        handleDelayedOpen()\n      else handleOpen()\n    },\n    onTriggerLeave() {\n      if (disableHoverableContent) {\n        handleClose()\n      }\n      else {\n        // Clear the timer in case the pointer leaves the trigger before the tooltip is opened.\n        window.clearTimeout(openTimerRef)\n        openTimerRef = 0\n      }\n    },\n    onOpen: handleOpen,\n    onClose: handleClose,\n    disableHoverableContent,\n  })\n\n  usePooperRoot({ anchor: trigger })\n}\n","import type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { useTooltipContext } from './TooltipRoot.ts'\n\nexport interface TooltipContentProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with React animation libraries.\n   */\n  forceMount?: boolean\n}\n\nexport const DEFAULT_TOOLTIP_CONTENT_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<TooltipContentProps>\n\nexport interface UseTooltipContentProps {\n  forceMount?: boolean\n}\n\nexport function useTooltipContent(props: UseTooltipContentProps = {}): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n}> {\n  const context = useTooltipContext('TooltipContent')\n  const popperContext = usePopperContext('TooltipContent')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(popperContext.content, context.open)\n\n  return {\n    isPresent,\n  }\n}\n","import type { PopperContentProps } from '../popper/index.ts'\nimport type { Point, Polygon } from '../shared/index.ts'\n\ntype Side = NonNullable<PopperContentProps['side']>\n\nexport function getExitSideFromRect(point: Point, rect: DOMRect): Side {\n  const [x, y] = point\n  const top = Math.abs(rect.top - y)\n  const bottom = Math.abs(rect.bottom - y)\n  const right = Math.abs(rect.right - x)\n  const left = Math.abs(rect.left - x)\n\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return 'left'\n    case right:\n      return 'right'\n    case top:\n      return 'top'\n    case bottom:\n      return 'bottom'\n    default:\n      throw new Error('unreachable')\n  }\n}\n\nexport function getPaddedExitPoints(exitPoint: Point, exitSide: Side, padding = 5): Polygon {\n  const paddedExitPoints: Polygon = []\n  const [x, y] = exitPoint\n\n  switch (exitSide) {\n    case 'top':\n      paddedExitPoints.push(\n        [x - padding, y + padding],\n        [x + padding, y + padding],\n      )\n      break\n    case 'bottom':\n      paddedExitPoints.push(\n        [x - padding, y - padding],\n        [x + padding, y - padding],\n      )\n      break\n    case 'left':\n      paddedExitPoints.push(\n        [x + padding, y - padding],\n        [x + padding, y + padding],\n      )\n      break\n    case 'right':\n      paddedExitPoints.push(\n        [x - padding, y - padding],\n        [x - padding, y + padding],\n      )\n      break\n  }\n\n  return paddedExitPoints\n}\n\nexport function getPointsFromRect(rect: DOMRect): Polygon {\n  const { top, right, bottom, left } = rect\n\n  return [\n    [left, top],\n    [right, top],\n    [right, bottom],\n    [left, bottom],\n  ]\n}\n\n// Returns a new array of points representing the convex hull of the given set of points.\n// https://www.nayuki.io/page/convex-hull-algorithm\nexport function getHull<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n  const newPoints: Array<P> = points.slice()\n\n  newPoints.sort((a: Point, b: Point) => {\n    const [a1, b1] = a\n    const [a2, b2] = b\n\n    if (a1 < a2)\n      return -1\n    else if (a1 > a2)\n      return +1\n    else if (b1 < b2)\n      return -1\n    else if (b1 > b2)\n      return +1\n    else return 0\n  })\n\n  return getHullPresorted(newPoints)\n}\n\n// Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time.\nfunction getHullPresorted<P extends Point>(points: Readonly<Array<P>>): Array<P> {\n  if (points.length <= 1)\n    return points.slice()\n\n  const upperHull: Array<P> = []\n\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i]!\n    const [pX, pY] = p\n    while (upperHull.length >= 2) {\n      const [qX, qY] = upperHull[upperHull.length - 1]!\n      const [rX, rY] = upperHull[upperHull.length - 2]!\n      if ((qX - rX) * (pY - rY) >= (qY - rY) * (pX - rX))\n        upperHull.pop()\n      else break\n    }\n    upperHull.push(p)\n  }\n\n  upperHull.pop()\n\n  const lowerHull: Array<P> = []\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i]!\n    const [pX, pY] = p\n    while (lowerHull.length >= 2) {\n      const [qX, qY] = lowerHull[lowerHull.length - 1]!\n      const [rX, rY] = lowerHull[lowerHull.length - 2]!\n      if ((qX - rX) * (pY - rY) >= (qY - rY) * (pX - rX))\n        lowerHull.pop()\n      else break\n    }\n    lowerHull.push(p)\n  }\n  lowerHull.pop()\n\n  if (\n    upperHull.length === 1\n    && lowerHull.length === 1\n    && upperHull[0]?.[0] === lowerHull[0]?.[0]\n    && upperHull[0]?.[1] === lowerHull[0]?.[1]\n  ) {\n    return upperHull\n  }\n\n  return upperHull.concat(lowerHull)\n}\n","import type { VirtualElement } from '@floating-ui/utils'\nimport { isClient } from '@vueuse/core'\nimport { onBeforeUnmount, onWatcherCleanup, shallowRef, watchEffect } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { isPointInPolygon, type Point, type Polygon } from '../shared/index.ts'\nimport { getExitSideFromRect, getHull, getPaddedExitPoints, getPointsFromRect } from './utils.ts'\n\nexport interface UseGraceArea {\n  onPointerInTransitChange?: (v: boolean) => void\n  onClose: () => void\n}\n\nexport function useGraceArea(props: UseGraceArea) {\n  // const context = useTooltipContext('TooltipContentHoverable')\n  // const providerContext = useTooltipProviderContext('TooltipContentHoverable')\n  const popperContext = usePopperContext('TooltipContentHoverable')\n\n  const pointerGraceArea = shallowRef<Polygon>()\n\n  function handleRemoveGraceArea() {\n    pointerGraceArea.value = undefined\n    props.onPointerInTransitChange?.(false)\n  }\n\n  function handleCreateGraceArea(event: PointerEvent, hoverTarget: HTMLElement) {\n    const currentTarget = event.currentTarget as HTMLElement\n    const exitPoint: Point = [event.clientX, event.clientY]\n    const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect())\n    const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide)\n    const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect())\n    const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints])\n    pointerGraceArea.value = graceArea\n    props.onPointerInTransitChange?.(true)\n  }\n\n  onBeforeUnmount(() => {\n    handleRemoveGraceArea()\n  })\n\n  if (isClient) {\n    watchEffect(() => {\n      const _trigger = popperContext.anchor.value\n      const triggerVal: HTMLElement = (_trigger as VirtualElement)?.contextElement ?? _trigger\n      const contentVal = popperContext.content.value\n\n      if (!triggerVal || !contentVal)\n        return\n\n      const handleTriggerLeave = (event: PointerEvent) => handleCreateGraceArea(event, contentVal)\n      const handleContentLeave = (event: PointerEvent) => handleCreateGraceArea(event, triggerVal)\n\n      triggerVal.addEventListener('pointerleave', handleTriggerLeave)\n      contentVal.addEventListener('pointerleave', handleContentLeave)\n\n      onWatcherCleanup(() => {\n        triggerVal.removeEventListener('pointerleave', handleTriggerLeave)\n        contentVal.removeEventListener('pointerleave', handleContentLeave)\n      })\n    })\n\n    function handleTrackPointerGrace(event: PointerEvent) {\n      const target = event.target as HTMLElement\n\n      const _trigger = popperContext.anchor.value\n      const triggerVal: HTMLElement = (_trigger as VirtualElement)?.contextElement ?? _trigger\n\n      const hasEnteredTarget = triggerVal?.contains(target) || popperContext.content.value?.contains(target)\n\n      if (hasEnteredTarget) {\n        handleRemoveGraceArea()\n      }\n      else {\n        const pointerPosition: Point = [event.clientX, event.clientY]\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea.value!)\n\n        if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea()\n          props.onClose()\n        }\n      }\n    }\n\n    watchEffect(() => {\n      if (!pointerGraceArea.value)\n        return\n\n      document.addEventListener('pointermove', handleTrackPointerGrace)\n\n      onWatcherCleanup(() => {\n        document.removeEventListener('pointermove', handleTrackPointerGrace)\n      })\n    })\n  }\n}\n","import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport { type DismissableLayerEmits, useDismissableLayer } from '../dismissable-layer/index.ts'\nimport { createContext } from '../hooks/index.ts'\nimport { usePopperContext } from '../popper/index.ts'\nimport { type PopperContentProps, usePopperContent, type UsePopperContentProps } from '../popper/PopperContent.ts'\nimport { useTooltipProviderContext } from './TooltipProvider.ts'\nimport { TOOLTIP_OPEN, useTooltipContext } from './TooltipRoot.ts'\nimport { useGraceArea } from './useGraceArea.ts'\n\nexport interface TooltipContentImplProps extends PopperContentProps {\n  /**\n   * A more descriptive label for accessibility purpose\n   */\n  ariaLabel?: string\n}\n\nexport const DEFAULT_TOOLTIP_CONTENT_IMPL_PROPS = {\n  avoidCollisions: undefined,\n  hideWhenDetached: undefined,\n} satisfies PrimitiveDefaultProps<TooltipContentImplProps>\n\nexport type TooltipContentImplEmits = {\n  /** Event handler called when focus moves to the destructive action after opening. It can be prevented by calling `event.preventDefault` */\n  escapeKeydown: DismissableLayerEmits['escapeKeydown']\n  /** Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling `event.preventDefault`. */\n  pointerdownOutside: DismissableLayerEmits['pointerdownOutside']\n}\n\nexport interface TooltipContentContext {\n  id: string\n  ariaLabel?: string | undefined\n}\n\nexport const [provideTooltipContentContext, useTooltipContentContext] = createContext<TooltipContentContext>('TooltipContent')\n\nexport interface UseTooltipContentImplProps extends EmitsToHookProps<TooltipContentImplEmits>, Omit<UsePopperContentProps, 'onPlaced'> {\n  ariaLabel?: string | undefined\n}\n\nexport function useTooltipContentImpl(props: UseTooltipContentImplProps): ReturnType<typeof usePopperContent> {\n  const context = useTooltipContext('TooltipContentImpl')\n  const popperContext = usePopperContext('TooltipContentImpl')\n\n  if (!context.disableHoverableContent) {\n    const providerContext = useTooltipProviderContext('TooltipContentHoverable')\n\n    useGraceArea({\n      onPointerInTransitChange: providerContext.onPointerInTransitChange,\n      onClose: context.onClose,\n    })\n  }\n\n  // Close the tooltip if the trigger is scrolled\n  function handleScroll(event: Event) {\n    const target = event.target as HTMLElement\n    if (target?.contains(context.trigger.value ?? null))\n      context.onClose()\n  }\n\n  onMounted(() => {\n    // Close this tooltip if another one opens\n    document.addEventListener(TOOLTIP_OPEN, context.onClose)\n    window.addEventListener('scroll', handleScroll, { capture: true, passive: true })\n  })\n\n  onBeforeUnmount(() => {\n    document.removeEventListener(TOOLTIP_OPEN, context.onClose)\n    window.removeEventListener('scroll', handleScroll, { capture: true })\n  })\n\n  provideTooltipContentContext({\n    id: context.contentId,\n    ariaLabel: props.ariaLabel,\n  })\n\n  const dismissableLayer = useDismissableLayer({\n    el: popperContext.content,\n    disableOutsidePointerEvents() {\n      return false\n    },\n    onEscapeKeydown: props.onEscapeKeydown,\n    onDismiss: context.onClose,\n    onFocusOutside(event) {\n      event.preventDefault()\n    },\n    onPointerdownOutside: props.onPointerdownOutside,\n  })\n\n  const popperContent = usePopperContent({\n    ...props,\n    side: props.side ?? 'top',\n  })\n\n  return {\n    wrapperAttrs: popperContent.wrapperAttrs,\n    attrs(extraAttrs = []) {\n      const popperAttrs = {\n        'data-state': context.stateAttribute(),\n        'style': {\n          '--radix-tooltip-content-transform-origin': 'var(--radix-popper-transform-origin)',\n          '--radix-tooltip-content-available-width': 'var(--radix-popper-available-width)',\n          '--radix-tooltip-content-available-height': 'var(--radix-popper-available-height)',\n          '--radix-tooltip-trigger-width': 'var(--radix-popper-anchor-width)',\n          '--radix-tooltip-trigger-height': 'var(--radix-popper-anchor-height)',\n        },\n      }\n\n      return popperContent.attrs([dismissableLayer.attrs(), popperAttrs, ...extraAttrs])\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { convertPropsToHookProps, type EmitsToHookProps, normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_TOOLTIP_CONTENT_IMPL_PROPS, type TooltipContentImplEmits, type TooltipContentImplProps, useTooltipContentImpl } from './TooltipContentImpl.ts'\n\ndefineOptions({\n  name: 'TooltipContentImpl',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TooltipContentImplProps>(), DEFAULT_TOOLTIP_CONTENT_IMPL_PROPS)\nconst emit = defineEmits<TooltipContentImplEmits>()\n\nconst tooltipContentImpl = useTooltipContentImpl(convertPropsToHookProps(\n  props,\n  ['collisionBoundary', 'dir'],\n  (): Required<EmitsToHookProps<TooltipContentImplEmits>> => ({\n    onEscapeKeydown(event) {\n      emit('escapeKeydown', event)\n    },\n    onPointerdownOutside(event) {\n      emit('pointerdownOutside', event)\n    },\n  }),\n))\n</script>\n\n<template>\n  <div v-bind=\"tooltipContentImpl.wrapperAttrs()\">\n    <Primitive v-bind=\"normalizeAttrs(tooltipContentImpl.attrs([$attrs]))\">\n      <slot />\n    </Primitive>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { DEFAULT_TOOLTIP_CONTENT_PROPS, type TooltipContentProps, useTooltipContent } from './TooltipContent.ts'\nimport TooltipContentImpl from './TooltipContentImpl.vue'\n\ndefineOptions({\n  name: 'TooltipContent',\n})\n\nconst props = withDefaults(defineProps<TooltipContentProps>(), DEFAULT_TOOLTIP_CONTENT_PROPS)\n\nconst context = useTooltipContent(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <TooltipContentImpl v-if=\"context.isPresent.value\">\n    <slot />\n  </TooltipContentImpl>\n</template>\n","<script setup lang=\"ts\">\nimport { VisuallyHidden } from '../visually-hidden/index.ts'\nimport { useTooltipContentContext } from './TooltipContentImpl.ts'\n\ndefineOptions({\n  name: 'TooltipContentAriaLabel',\n})\n\nconst context = useTooltipContentContext('TooltipContentAriaLabel')\n</script>\n\n<template>\n  <VisuallyHidden :id=\"context.id\" role=\"tooltip\">\n    {{ context.ariaLabel }}\n  </VisuallyHidden>\n</template>\n","<script setup lang=\"ts\">\nimport { DEFAULT_TOOLTIP_PROVIDER_PROPS, type TooltipProviderProps, useTooltipProvider } from './TooltipProvider.ts'\n\nconst props = withDefaults(defineProps<TooltipProviderProps>(), DEFAULT_TOOLTIP_PROVIDER_PROPS)\n\nuseTooltipProvider(props)\n</script>\n\n<template>\n  <slot />\n</template>\n","<script setup lang=\"ts\">\nimport type { EmitsToHookProps } from '../shared/index.ts'\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { DEFAULT_TOOLTIP_ROOT_PROPS, type TooltipRootEmits, type TooltipRootProps, useTooltipRoot } from './TooltipRoot.ts'\n\ndefineOptions({\n  name: 'TooltipRoot',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<TooltipRootProps>(), DEFAULT_TOOLTIP_ROOT_PROPS)\nconst emit = defineEmits<TooltipRootEmits>()\n\nuseTooltipRoot(convertPropsToHookProps(\n  props,\n  ['open'],\n  (): Required<EmitsToHookProps<TooltipRootEmits>> => ({\n    onUpdateOpen(open) {\n      emit('update:open', open)\n    },\n  }),\n))\n</script>\n\n<template>\n  <slot />\n</template>\n","import type { PopperAnchorProps } from '../popper/index.ts'\nimport type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useTooltipProviderContext } from './TooltipProvider.ts'\nimport { useTooltipContext } from './TooltipRoot.ts'\n\nexport interface TooltipTriggerProps extends PopperAnchorProps {\n  as?: PrimitiveProps['as']\n}\n\nexport const DEFAULT_TOOLTIP_TRIGGER_PROPS = {\n  as: 'button',\n} satisfies PrimitiveDefaultProps<TooltipTriggerProps>\n\nexport function useTooltipTrigger(): RadixPrimitiveReturns {\n  const context = useTooltipContext('TooltipTrigger')\n  const providerContext = useTooltipProviderContext('TooltipTrigger')\n\n  function setTemplateRef(v: HTMLElement | undefined) {\n    context.trigger.value = v\n  }\n\n  let isPointerDownRef = false\n  let hasPointerMoveOpenedRef = false\n\n  function handlePointerUp() {\n    isPointerDownRef = false\n  }\n\n  function onPointermove(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    if (event.pointerType === 'touch')\n      return\n\n    if (hasPointerMoveOpenedRef || providerContext.isPointerInTransitRef.value)\n      return\n\n    context.onTriggerEnter()\n    hasPointerMoveOpenedRef = true\n  }\n\n  function onPointerleave(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    context.onTriggerLeave()\n    hasPointerMoveOpenedRef = false\n  }\n\n  function onPointerdown(event: PointerEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    isPointerDownRef = true\n    document.addEventListener('pointerup', handlePointerUp, { once: true })\n  }\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n\n    if (!isPointerDownRef)\n      context.onOpen()\n  }\n\n  function onBlur(event: FocusEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    context.onClose()\n  }\n\n  function onClick(event: MouseEvent) {\n    if (event.defaultPrevented) {\n      return\n    }\n    context.onClose()\n  }\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        'elRef': setTemplateRef,\n        'data-state': context.stateAttribute(),\n        'data-grace-area-trigger': true,\n        onPointermove,\n        onPointerleave,\n        onPointerdown,\n        onFocus,\n        onBlur,\n        onClick,\n      }\n\n      if (extraAttrs && extraAttrs.length > 0) {\n        mergePrimitiveAttrs(attrs, extraAttrs)\n      }\n\n      return attrs\n    },\n  }\n}\n","<script setup lang=\"ts\">\nimport { Primitive } from '../primitive/index.ts'\nimport { normalizeAttrs } from '../shared/index.ts'\nimport { DEFAULT_TOOLTIP_TRIGGER_PROPS, type TooltipTriggerProps, useTooltipTrigger } from './TooltipTrigger.ts'\n\ndefineOptions({\n  name: 'TooltipTrigger',\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<TooltipTriggerProps>(), DEFAULT_TOOLTIP_TRIGGER_PROPS)\n\nconst tooltipTrigger = useTooltipTrigger()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(tooltipTrigger.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":[],"mappings":"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"}