{"version":3,"sources":["../../../src/components/Popover/usePopover.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport {\n  useControllableState,\n  useEventCallback,\n  useId,\n  useTimeout,\n  useIsomorphicLayoutEffect,\n} from '@fluentui/react-utilities';\nimport { usePositioning, resolvePositioningShorthand } from '../../hooks';\nimport type { PopoverProps, PopoverState, PopoverContextValues, OpenPopoverEvents } from './Popover.types';\n\ntype ToggleEvent = Event & { newState?: 'open' | 'closed' };\n\nconst isDialogElement = (el: Element | null): el is HTMLDialogElement =>\n  !!el && typeof (el as HTMLDialogElement).showModal === 'function';\n\nconst getActiveElement = (surface: HTMLElement): Element | null => {\n  const root = surface.getRootNode();\n  const ShadowRootConstructor = surface.ownerDocument.defaultView?.ShadowRoot;\n  // Keep focus retargeted to this root: Node.contains does not cross shadow boundaries.\n  return ShadowRootConstructor && root instanceof ShadowRootConstructor\n    ? root.activeElement ?? surface.ownerDocument.activeElement\n    : surface.ownerDocument.activeElement;\n};\n\n/**\n * Returns the state for a Popover component.\n */\nexport const usePopover = (props: PopoverProps): PopoverState => {\n  const {\n    openOnHover = false,\n    openOnContext = false,\n    mouseLeaveDelay = 500,\n    withArrow = false,\n    inertTrapFocus = false,\n  } = props;\n\n  const [open, setOpenState] = useControllableState({\n    state: props.open,\n    defaultState: props.defaultOpen,\n    initialState: false,\n  });\n\n  const [shouldRenderSurface, setShouldRenderSurface] = React.useState(open);\n  const focusWasInsideOnNativeClose = React.useRef<boolean | null>(null);\n  const openedSurface = React.useRef<HTMLElement | null>(null);\n\n  const [contextTarget, setContextTarget] = React.useState<{ x: number; y: number } | undefined>(undefined);\n\n  const onOpenChange = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n    props.onOpenChange?.(e, { event: e, type: e.type, open: shouldOpen });\n  });\n\n  const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n\n  const setOpen = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n    clearOpenTimeout();\n\n    if (shouldOpen && e.type === 'contextmenu') {\n      const mouseEvent = e as React.MouseEvent<HTMLElement>;\n      setContextTarget({ x: mouseEvent.clientX, y: mouseEvent.clientY });\n    }\n\n    if (!shouldOpen) {\n      setContextTarget(undefined);\n    }\n\n    if (e.type === 'mouseleave') {\n      setOpenTimeout(() => {\n        setOpenState(shouldOpen);\n        onOpenChange(e, shouldOpen);\n      }, mouseLeaveDelay);\n    } else {\n      if (shouldOpen && props.open === undefined) {\n        setShouldRenderSurface(true);\n      }\n      setOpenState(shouldOpen);\n      onOpenChange(e, shouldOpen);\n    }\n  });\n\n  const toggleOpen = React.useCallback(\n    (e: OpenPopoverEvents) => {\n      setOpen(e, !open);\n    },\n    [setOpen, open],\n  );\n\n  const triggerRef = React.useRef<HTMLElement>(null);\n  const contentRef = React.useRef<HTMLElement>(null);\n  const arrowRef = React.useRef<HTMLDivElement>(null);\n\n  const generatedSurfaceId = useId('fui-popover-surface-');\n  const surfaceId = props.id ?? generatedSurfaceId;\n\n  const positioning = usePositioning(resolvePositioningShorthand(props.positioning));\n\n  const finishSurfaceClose = useEventCallback(() => {\n    const surface = contentRef.current;\n    if (!surface) {\n      return;\n    }\n    const activeElement = getActiveElement(surface);\n    // Initially-open surfaces have no native trigger snapshot; preserve successful native restoration.\n    if (\n      (focusWasInsideOnNativeClose.current ?? surface.contains(activeElement)) &&\n      (!activeElement || activeElement === surface.ownerDocument.body || surface.contains(activeElement)) &&\n      triggerRef.current?.isConnected\n    ) {\n      triggerRef.current.focus();\n    }\n    focusWasInsideOnNativeClose.current = null;\n    openedSurface.current = null;\n    setShouldRenderSurface(false);\n  });\n\n  const onSurfaceToggle = useEventCallback((event: Event) => {\n    const toggle = event as ToggleEvent;\n    const nextOpen = toggle.newState === 'open';\n    const surface = contentRef.current;\n    if (event.currentTarget !== surface || !surface || surface.matches(':popover-open') !== nextOpen) {\n      return;\n    }\n    if (!nextOpen) {\n      finishSurfaceClose();\n    }\n    if (nextOpen === open) {\n      return;\n    }\n\n    setOpenState(nextOpen);\n    props.onOpenChange?.(event, { event, type: event.type, open: nextOpen });\n  });\n\n  const onSurfaceClose = useEventCallback((event: Event) => {\n    const surface = contentRef.current;\n    if (event.currentTarget !== surface || (isDialogElement(surface) && surface.open)) {\n      return;\n    }\n    finishSurfaceClose();\n    if (!open) {\n      return;\n    }\n    setOpenState(false);\n    props.onOpenChange?.(event, { event, type: event.type, open: false });\n  });\n\n  const renderSurface = open || shouldRenderSurface;\n\n  // Rebind after each commit so keyed surface replacements need no mirrored element state.\n  useIsomorphicLayoutEffect(() => {\n    const surface = contentRef.current;\n    if (!surface || !renderSurface) {\n      return;\n    }\n    const trackNativeCloseFocus = (event: Event) => {\n      if (event.type === 'cancel' || (event as ToggleEvent).newState === 'closed') {\n        focusWasInsideOnNativeClose.current = surface.contains(getActiveElement(surface));\n      }\n    };\n\n    if (inertTrapFocus) {\n      if (!isDialogElement(surface)) {\n        return;\n      }\n\n      // Older dialogs lack beforetoggle; native close removes open before restoring focus.\n      const trackDialogFocusOut = () => {\n        focusWasInsideOnNativeClose.current = surface.open ? null : true;\n      };\n      surface.addEventListener('close', onSurfaceClose);\n      surface.addEventListener('cancel', trackNativeCloseFocus);\n      surface.addEventListener('beforetoggle', trackNativeCloseFocus);\n      surface.addEventListener('focusout', trackDialogFocusOut);\n      return () => {\n        surface.removeEventListener('close', onSurfaceClose);\n        surface.removeEventListener('cancel', trackNativeCloseFocus);\n        surface.removeEventListener('beforetoggle', trackNativeCloseFocus);\n        surface.removeEventListener('focusout', trackDialogFocusOut);\n      };\n    }\n\n    if (typeof surface.showPopover !== 'function') {\n      return;\n    }\n\n    surface.addEventListener('toggle', onSurfaceToggle);\n    surface.addEventListener('beforetoggle', trackNativeCloseFocus);\n    return () => {\n      surface.removeEventListener('toggle', onSurfaceToggle);\n      surface.removeEventListener('beforetoggle', trackNativeCloseFocus);\n    };\n  });\n\n  useIsomorphicLayoutEffect(() => {\n    const surface = contentRef.current;\n    if (!surface) {\n      return;\n    }\n    if (open) {\n      if (!shouldRenderSurface) {\n        setShouldRenderSurface(true);\n      }\n      focusWasInsideOnNativeClose.current = null;\n      if (inertTrapFocus) {\n        if (isDialogElement(surface) && !surface.open) {\n          surface.showModal();\n        }\n        if (isDialogElement(surface) && surface.open) {\n          openedSurface.current = surface;\n        }\n      } else if (typeof surface.showPopover === 'function' && !surface.matches(':popover-open')) {\n        surface.showPopover();\n        if (surface.matches(':popover-open')) {\n          openedSurface.current = surface;\n        }\n      }\n      return;\n    }\n    if (inertTrapFocus) {\n      if (isDialogElement(surface) && surface.open) {\n        focusWasInsideOnNativeClose.current = surface.contains(getActiveElement(surface));\n        surface.close();\n      } else if (openedSurface.current !== surface) {\n        focusWasInsideOnNativeClose.current = surface.contains(getActiveElement(surface));\n        finishSurfaceClose();\n      }\n    } else if (typeof surface.hidePopover === 'function') {\n      if (surface.matches(':popover-open')) {\n        focusWasInsideOnNativeClose.current = surface.contains(getActiveElement(surface));\n        surface.hidePopover();\n      } else if (openedSurface.current !== surface) {\n        finishSurfaceClose();\n      }\n    } else {\n      focusWasInsideOnNativeClose.current = surface.contains(getActiveElement(surface));\n      finishSurfaceClose();\n    }\n  }, [open, inertTrapFocus, shouldRenderSurface, props.children, contentRef, finishSurfaceClose]);\n\n  const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (children.length === 0) {\n      // eslint-disable-next-line no-console\n      console.warn('Popover must contain at least one child');\n    }\n\n    if (children.length > 2) {\n      // eslint-disable-next-line no-console\n      console.warn('Popover must contain at most two children');\n    }\n  }\n\n  let popoverTrigger: React.ReactElement | undefined;\n  let popoverSurface: React.ReactElement | undefined;\n\n  if (children.length === 2) {\n    popoverTrigger = children[0];\n    popoverSurface = children[1];\n  } else if (children.length === 1) {\n    popoverSurface = children[0];\n  }\n\n  return {\n    open,\n    setOpen,\n    toggleOpen,\n    triggerRef,\n    contentRef,\n    arrowRef,\n    popoverTrigger,\n    popoverSurface,\n    openOnHover,\n    openOnContext,\n    withArrow,\n    inertTrapFocus,\n    onOpenChange: props.onOpenChange,\n    contextTarget,\n    setContextTarget,\n    positioning,\n    surfaceId,\n    shouldRenderSurface: renderSurface,\n  };\n};\n\nexport const usePopoverContextValues = (state: PopoverState): PopoverContextValues => {\n  const {\n    open,\n    setOpen,\n    toggleOpen,\n    triggerRef,\n    contentRef,\n    arrowRef,\n    openOnHover,\n    openOnContext,\n    withArrow,\n    inertTrapFocus,\n    positioning,\n    surfaceId,\n  } = state;\n\n  return {\n    popover: {\n      open,\n      setOpen,\n      toggleOpen,\n      triggerRef,\n      contentRef,\n      arrowRef,\n      openOnHover,\n      openOnContext,\n      withArrow,\n      inertTrapFocus,\n      positioning: {\n        targetRef: positioning.targetRef,\n        containerRef: positioning.containerRef,\n      },\n      surfaceId,\n    },\n  };\n};\n"],"names":["usePopover","usePopoverContextValues","isDialogElement","el","showModal","getActiveElement","surface","root","getRootNode","ShadowRootConstructor","ownerDocument","defaultView","ShadowRoot","activeElement","props","openOnHover","openOnContext","mouseLeaveDelay","withArrow","inertTrapFocus","open","setOpenState","useControllableState","state","defaultState","defaultOpen","initialState","shouldRenderSurface","setShouldRenderSurface","React","useState","focusWasInsideOnNativeClose","useRef","openedSurface","contextTarget","setContextTarget","undefined","onOpenChange","useEventCallback","e","shouldOpen","event","type","setOpenTimeout","clearOpenTimeout","useTimeout","setOpen","mouseEvent","x","clientX","y","clientY","toggleOpen","useCallback","triggerRef","contentRef","arrowRef","generatedSurfaceId","useId","surfaceId","id","positioning","usePositioning","resolvePositioningShorthand","finishSurfaceClose","current","contains","body","isConnected","focus","onSurfaceToggle","toggle","nextOpen","newState","currentTarget","matches","onSurfaceClose","renderSurface","useIsomorphicLayoutEffect","trackNativeCloseFocus","trackDialogFocusOut","addEventListener","removeEventListener","showPopover","close","hidePopover","children","Children","toArray","process","env","NODE_ENV","length","console","warn","popoverTrigger","popoverSurface","popover","targetRef","containerRef"],"mappings":"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"}