{"version":3,"file":"hover-card.mjs","sources":["../src/hover-card/HoverCardRoot.ts","../src/hover-card/HoverCardContent.ts","../src/hover-card/utils.ts","../src/hover-card/HoverCardContentImpl.ts","../src/hover-card/HoverCardContentImpl.vue","../src/hover-card/HoverCardContent.vue","../src/hover-card/HoverCardRoot.vue","../src/hover-card/HoverCardTrigger.ts","../src/hover-card/HoverCardTrigger.vue"],"sourcesContent":["import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { onBeforeUnmount, type Ref } from 'vue'\nimport { createContext, type MutableRefObject, useControllableStateV2, useRef } from '../hooks/index.ts'\nimport { usePooperRoot } from '../popper/index.ts'\n\nexport interface HoverCardRootProps {\n  open?: boolean\n  defaultOpen?: boolean\n  openDelay?: number\n  closeDelay?: number\n}\n\nexport const DEFAULT_HOVER_CARD_ROOT_PROPS = {\n  open: undefined,\n  defaultOpen: undefined,\n} satisfies PrimitiveDefaultProps<HoverCardRootProps>\n\nexport type HoverCardRootEmits = {\n  'update:open': [open: boolean]\n}\n\nexport interface HoverCardContext {\n  open: Ref<boolean>\n  onOpenChange: (open: boolean) => void\n  onOpen: () => void\n  onClose: () => void\n  onDismiss: () => void\n  hasSelectionRef: MutableRefObject<boolean>\n  isPointerDownOnContentRef: MutableRefObject<boolean>\n}\n\nexport const [provideHoverCardContext, useHoverCardContext] = createContext<HoverCardContext>('HoverCard')\n\nexport interface UseHoverCardRootProps extends EmitsToHookProps<HoverCardRootEmits> {\n  open?: () => boolean | undefined\n  defaultOpen?: boolean\n  openDelay?: number\n  closeDelay?: number\n}\n\nexport function useHoverCardRoot(props: UseHoverCardRootProps = {}) {\n  const {\n    openDelay = 700,\n    closeDelay = 300,\n  } = props\n  const open = useControllableStateV2(props.open, props.onUpdateOpen, props.defaultOpen ?? false)\n\n  let openTimerRef = 0\n  let closeTimerRef = 0\n  const hasSelectionRef = useRef(false)\n  const isPointerDownOnContentRef = useRef(false)\n\n  // cleanup any queued state updates on unmount\n  onBeforeUnmount(() => {\n    if (openTimerRef)\n      clearTimeout(openTimerRef)\n    if (closeTimerRef)\n      clearTimeout(closeTimerRef)\n  })\n\n  provideHoverCardContext({\n    open,\n    onOpenChange(v) {\n      open.value = v\n    },\n    onOpen() {\n      if (closeTimerRef)\n        clearTimeout(closeTimerRef)\n      openTimerRef = window.setTimeout(() => {\n        open.value = true\n        openTimerRef = 0\n      }, openDelay)\n    },\n    onClose() {\n      if (openTimerRef)\n        clearTimeout(openTimerRef)\n\n      if (hasSelectionRef.value || isPointerDownOnContentRef.value)\n        return\n\n      closeTimerRef = window.setTimeout(() => {\n        open.value = false\n        closeTimerRef = 0\n      }, closeDelay)\n    },\n    onDismiss() {\n      open.value = false\n    },\n    hasSelectionRef,\n    isPointerDownOnContentRef,\n  })\n\n  usePooperRoot()\n}\n","import type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared'\nimport { type Ref, shallowRef } from 'vue'\nimport { usePopperContext } from '../popper/index.ts'\nimport { usePresence } from '../presence/index.ts'\nimport { useHoverCardContext } from './HoverCardRoot.ts'\n\nexport interface HoverCardContentProps {\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_HOVER_CARD_CONTENT_PROPS = {\n  forceMount: undefined,\n} satisfies PrimitiveDefaultProps<HoverCardContentProps>\n\nexport interface UseHoverCardContentProps {\n  forceMount?: boolean\n}\n\nexport function useHoverCardConten(props: UseHoverCardContentProps = {}): RadixPrimitiveReturns<{\n  isPresent: Ref<boolean>\n}> {\n  const context = useHoverCardContext('HoverCardContent')\n  const popperContext = usePopperContext('HoverCardContent')\n\n  const isPresent = props.forceMount ? shallowRef(true) : usePresence(popperContext.content, context.open)\n\n  return {\n    isPresent,\n  }\n}\n","/**\n * Returns a list of nodes that can be in the tab sequence.\n * @see: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n */\nexport function getTabbableNodes(container: HTMLElement) {\n  const nodes: HTMLElement[] = []\n\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node: any) => {\n      // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n      // runtime's understanding of tabbability, so this automatically accounts\n      // for any kind of element that could be tabbed to.\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP\n    },\n  })\n\n  while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement)\n\n  return nodes\n}\n","import type { EmitsToHookProps, PrimitiveDefaultProps } from '../shared/index.ts'\nimport { onBeforeUnmount, onMounted, onWatcherCleanup, shallowRef, watchEffect } from 'vue'\nimport { type DismissableLayerEmits, useDismissableLayer } from '../dismissable-layer/index.ts'\nimport { type PopperContentProps, usePopperContent, type UsePopperContentProps, usePopperContext } from '../popper/index.ts'\nimport { useHoverCardContext } from './HoverCardRoot.ts'\nimport { getTabbableNodes } from './utils.ts'\n\nexport interface HoverCardContentImplProps extends PopperContentProps { }\n\nexport const DEFAULT_HOVER_CARD_CONTENT_IMPL_PROPS = {\n  avoidCollisions: undefined,\n  hideWhenDetached: undefined,\n} satisfies PrimitiveDefaultProps<HoverCardContentImplProps>\n\nexport type HoverCardContentImplEmits = {\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  escapeKeydown: DismissableLayerEmits['escapeKeydown']\n  /**\n   * Event handler called when the a `pointerdown` event happens outside of the `HoverCard`.\n   * Can be prevented.\n   */\n  pointerdownOutside: DismissableLayerEmits['pointerdownOutside']\n  /**\n   * Event handler called when the focus moves outside of the `HoverCard`.\n   * Can be prevented.\n   */\n  focusOutside: DismissableLayerEmits['focusOutside']\n  /**\n   * Event handler called when an interaction happens outside the `HoverCard`.\n   * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n   * Can be prevented.\n   */\n  interactOutside: DismissableLayerEmits['interactOutside']\n}\n\nlet originalBodyUserSelect: string\n\nexport interface UseHoverCardContentImplProps extends EmitsToHookProps<HoverCardContentImplEmits> {\n  popperProps?: Omit<UsePopperContentProps, 'onPlaced'>\n}\n\nexport function useHoverCardContentImpl(props: UseHoverCardContentImplProps = {}): ReturnType<typeof usePopperContent> {\n  const context = useHoverCardContext('HoverCardContentImpl')\n  const popperContext = usePopperContext('HoverCardContentImpl')\n\n  function onPointerenter(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.pointerType === 'touch')\n      return\n    context.onOpen()\n  }\n\n  function onpointerleave(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.pointerType === 'touch')\n      return\n    context.onClose()\n  }\n\n  const containSelection = shallowRef(false)\n\n  watchEffect(() => {\n    if (!containSelection.value)\n      return\n\n    const body = document.body\n\n    // Safari requires prefix\n    originalBodyUserSelect = body.style.userSelect || body.style.webkitUserSelect\n\n    body.style.userSelect = 'none'\n    body.style.webkitUserSelect = 'none'\n\n    onWatcherCleanup(() => {\n      body.style.userSelect = originalBodyUserSelect\n      body.style.webkitUserSelect = originalBodyUserSelect\n    })\n  })\n\n  function handlePointerUp() {\n    containSelection.value = false\n    context.isPointerDownOnContentRef.value = false\n\n    // Delay a frame to ensure we always access the latest selection\n    setTimeout(() => {\n      const hasSelection = document.getSelection()?.toString() !== ''\n      if (hasSelection)\n        context.hasSelectionRef.value = true\n    })\n  }\n\n  onMounted(() => {\n    if (!popperContext.content.value)\n      return\n\n    document.addEventListener('pointerup', handlePointerUp)\n\n    const tabbables = getTabbableNodes(popperContext.content.value)\n\n    for (const tabbable of tabbables) {\n      tabbable.setAttribute('tabindex', '-1')\n    }\n  })\n\n  onBeforeUnmount(() => {\n    document.removeEventListener('pointerup', handlePointerUp)\n    context.hasSelectionRef.value = false\n    context.isPointerDownOnContentRef.value = false\n  })\n\n  function onPointerdown(event: PointerEvent) {\n    // Contain selection to current layer\n    if ((event.currentTarget as HTMLElement)?.contains(event.target as HTMLElement)) {\n      containSelection.value = true\n    }\n    context.hasSelectionRef.value = false\n    context.isPointerDownOnContentRef.value = true\n  }\n\n  const dismissableLayer = useDismissableLayer({\n    el: popperContext.content,\n    disableOutsidePointerEvents() {\n      return false\n    },\n    onInteractOutside: props.onInteractOutside,\n    onEscapeKeydown: props.onEscapeKeydown,\n    onPointerdownOutside: props.onPointerdownOutside,\n    onFocusOutside(event) {\n      props.onFocusOutside?.(event)\n      if (event.defaultPrevented)\n        return\n      event.preventDefault()\n    },\n    onDismiss: context.onDismiss,\n  })\n\n  const popperContent = usePopperContent(props.popperProps)\n\n  return {\n    wrapperAttrs: popperContent.wrapperAttrs,\n    attrs(extraAttrs = []) {\n      const popperAttrs = {\n        'data-state': context.open.value ? 'open' : 'closed',\n        onPointerenter,\n        onpointerleave,\n        onPointerdown,\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_HOVER_CARD_CONTENT_IMPL_PROPS, type HoverCardContentImplEmits, type HoverCardContentImplProps, useHoverCardContentImpl } from './HoverCardContentImpl.ts'\n\ndefineOptions({\n  name: 'HoverCardContentImpl',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<HoverCardContentImplProps>(), DEFAULT_HOVER_CARD_CONTENT_IMPL_PROPS)\n\nconst emit = defineEmits<HoverCardContentImplEmits>()\n\nconst hoverCardContentImpl = useHoverCardContentImpl(convertPropsToHookProps(\n  props,\n  ['collisionBoundary', 'dir'],\n  (): Required<EmitsToHookProps<HoverCardContentImplEmits>> => ({\n    onEscapeKeydown(event) {\n      emit('escapeKeydown', event)\n    },\n    onPointerdownOutside(event) {\n      emit('pointerdownOutside', event)\n    },\n    onFocusOutside(event) {\n      emit('focusOutside', event)\n    },\n    onInteractOutside(event) {\n      emit('interactOutside', event)\n    },\n  }),\n))\n</script>\n\n<template>\n  <div v-bind=\"hoverCardContentImpl.wrapperAttrs()\">\n    <Primitive v-bind=\"normalizeAttrs(hoverCardContentImpl.attrs([$attrs]))\">\n      <slot />\n    </Primitive>\n  </div>\n</template>\n","<script setup lang=\"ts\">\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { DEFAULT_HOVER_CARD_CONTENT_PROPS, type HoverCardContentProps, useHoverCardConten } from './HoverCardContent.ts'\nimport HoverCardContentImpl from './HoverCardContentImpl.vue'\n\ndefineOptions({\n  name: 'HoverCardContent',\n})\n\nconst props = withDefaults(defineProps<HoverCardContentProps>(), DEFAULT_HOVER_CARD_CONTENT_PROPS)\n\nconst hoverCardConten = useHoverCardConten(convertPropsToHookProps(props))\n</script>\n\n<template>\n  <HoverCardContentImpl v-if=\"hoverCardConten.isPresent.value\">\n    <slot />\n  </HoverCardContentImpl>\n</template>\n","<script setup lang=\"ts\">\nimport type { EmitsToHookProps } from '../shared/index.ts'\nimport { convertPropsToHookProps } from '../shared/index.ts'\nimport { type HoverCardRootEmits, type HoverCardRootProps, useHoverCardRoot } from './HoverCardRoot.ts'\n\ndefineOptions({\n  name: 'HoverCardRoot',\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<HoverCardRootProps>(), {\n  open: undefined,\n  defaultOpen: false,\n  openDelay: 700,\n  closeDelay: 300,\n})\n\nconst emit = defineEmits<HoverCardRootEmits>()\n\nuseHoverCardRoot(convertPropsToHookProps(\n  props,\n  ['open'],\n  (): Required<EmitsToHookProps<HoverCardRootEmits>> => ({\n    onUpdateOpen(open) {\n      emit('update:open', open)\n    },\n  }),\n))\n</script>\n\n<template>\n  <slot />\n</template>\n","import type { PrimitiveProps } from '../primitive/index.ts'\nimport type { PrimitiveDefaultProps, RadixPrimitiveReturns } from '../shared/index.ts'\nimport { onMounted } from 'vue'\nimport { useRef } from '../hooks/index.ts'\nimport { type PopperAnchorProps, usePopperContext } from '../popper/index.ts'\nimport { mergePrimitiveAttrs } from '../shared/index.ts'\nimport { useHoverCardContext } from './HoverCardRoot.ts'\n\nexport interface HoverCardTriggerProps extends PopperAnchorProps {\n  as?: PrimitiveProps['as']\n}\n\nexport const DEFAULT_HOVER_CARD_TRIGGER_PROPS = {\n  as: 'a',\n} satisfies PrimitiveDefaultProps<HoverCardTriggerProps>\n\nexport function useHoverCardTrigger(): RadixPrimitiveReturns {\n  const context = useHoverCardContext('HoverCardTrigger')\n\n  function onPointerenter(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.pointerType === 'touch')\n      return\n    context.onOpen()\n  }\n\n  function onPointerleave(event: PointerEvent) {\n    if (event.defaultPrevented)\n      return\n    if (event.pointerType === 'touch')\n      return\n    context.onClose()\n  }\n\n  function onFocus(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    context.onOpen()\n  }\n\n  function onBlur(event: FocusEvent) {\n    if (event.defaultPrevented)\n      return\n    context.onClose()\n  }\n\n  // prevent focus event on touch devices\n  function onTouchstart(event: TouchEvent) {\n    if (event.defaultPrevented)\n      return\n    event.preventDefault()\n  }\n\n  // COMP::PopperAnchor\n\n  const popperContext = usePopperContext('HoverCardTrigger')\n\n  const el = useRef<HTMLElement>()\n  function setElRef(v: HTMLElement | undefined) {\n    el.value = v\n  }\n\n  onMounted(() => {\n    popperContext.onAnchorChange(el.value)\n  })\n\n  return {\n    attrs(extraAttrs) {\n      const attrs = {\n        elRef: setElRef,\n        onPointerenter,\n        onPointerleave,\n        onFocus,\n        onBlur,\n        onTouchstart,\n      }\n\n      if (extraAttrs) {\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_HOVER_CARD_TRIGGER_PROPS, type HoverCardTriggerProps, useHoverCardTrigger } from './HoverCardTrigger.ts'\n\ndefineOptions({\n  name: 'HoverCardTrigger',\n  inheritAttrs: false,\n})\n\nwithDefaults(defineProps<HoverCardTriggerProps>(), DEFAULT_HOVER_CARD_TRIGGER_PROPS)\n\nconst hoverCardTrigger = useHoverCardTrigger()\n</script>\n\n<template>\n  <Primitive v-bind=\"normalizeAttrs(hoverCardTrigger.attrs([$attrs, { as }]))\">\n    <slot />\n  </Primitive>\n</template>\n"],"names":[],"mappings":"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"}