import * as React from 'react' import * as PopoverPrimitive from '@radix-ui/react-popover' import { cn } from '@/lib/utils' import { createPortal } from 'react-dom' const Popover = ({ open: controlledOpen, onOpenChange: controlledOnOpenChange, ...props }: React.ComponentPropsWithoutRef) => { const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false) const isControlled = controlledOpen !== undefined const open = isControlled ? controlledOpen : uncontrolledOpen const backdropRef = React.useRef(null) const handleOpenChange = React.useCallback( (newOpen: boolean) => { if (!isControlled) { setUncontrolledOpen(newOpen) } controlledOnOpenChange?.(newOpen) }, [isControlled, controlledOnOpenChange] ) return ( <> {open && createPortal(
{ e.stopPropagation() handleOpenChange(false) }} />, document.body )} ) } Popover.displayName = 'Popover' const PopoverTrigger = PopoverPrimitive.Trigger const PopoverAnchor = PopoverPrimitive.Anchor const PopoverContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( e.preventDefault()} {...props} /> )) PopoverContent.displayName = PopoverPrimitive.Content.displayName export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }