import * as PopoverPrimitive from "@radix-ui/react-popover" import * as React from "react" import { useCallback, useLayoutEffect, useState } from "react" import { cn } from "../../lib/utils" import { usePortalContainer } from "./portal-container" const Popover = PopoverPrimitive.Root const PopoverTrigger = PopoverPrimitive.Trigger const PopoverAnchor = PopoverPrimitive.Anchor const PopoverClose = PopoverPrimitive.Close const PopoverContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, align = "center", sideOffset = 4, ...props }, ref) => { const portalContainer = usePortalContainer() // Fix for Electron: ensure position is calculated after content is fully rendered const [isPositioned, setIsPositioned] = useState(false) const [node, setNode] = useState(null) // Use callback ref to detect when element is mounted const callbackRef = useCallback((element: HTMLDivElement | null) => { setNode(element) // Forward ref if (typeof ref === 'function') { ref(element) } else if (ref) { ref.current = element } }, [ref]) useLayoutEffect(() => { if (!node) { setIsPositioned(false) return } // Element just mounted, wait for next frame to ensure position is calculated setIsPositioned(false) requestAnimationFrame(() => { requestAnimationFrame(() => { setIsPositioned(true) }) }) }, [node]) return ( ) }) PopoverContent.displayName = PopoverPrimitive.Content.displayName export { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger }