import * as React from 'react'; import * as PopoverPrimitive from '@radix-ui/react-popover'; import { cn } from '../lib/utils'; const Popover = PopoverPrimitive.Root; const PopoverTrigger = PopoverPrimitive.Trigger; const PopoverAnchor = PopoverPrimitive.Anchor; const PopoverContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( )); PopoverContent.displayName = PopoverPrimitive.Content.displayName; type PopoverHoverProps = { trigger: React.ReactNode; side?: 'top' | 'bottom' | 'left' | 'right'; children: React.ReactNode; contentProps?: React.ComponentPropsWithoutRef; }; const PopoverHover = ({ trigger, children, contentProps, side = 'top' }: PopoverHoverProps) => { const [open, setOpen] = React.useState(false); const isControlled = React.useRef(false); const isMouseOver = React.useRef(false); const onMouseEnter = () => { isMouseOver.current = true; if (isControlled.current) { return; } setOpen(true); }; const onMouseLeave = () => { isMouseOver.current = false; if (isControlled.current) { return; } setTimeout(() => { setOpen(isMouseOver.current); }, 200); }; const onOpenChange = (newOpen: boolean) => { isControlled.current = newOpen; setOpen(newOpen); }; return ( {trigger} {children} ); }; export { Popover, PopoverTrigger, PopoverAnchor, PopoverContent, PopoverHover };