import React, { createContext, useContext, useState, useRef, useEffect } from 'react'; import { Slot } from './Slot'; const DropdownContext = createContext(null); export const DropdownMenuRoot = ({ children }: any) => { const [open, setOpen] = useState(false); const ref = useRef(null); useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); return (
{children}
); }; DropdownMenuRoot.displayName = "DropdownMenu"; export const DropdownMenuTrigger = React.forwardRef(({ asChild, onClick, ...props }, ref) => { const { setOpen, open } = useContext(DropdownContext); const Comp = asChild ? Slot : "button"; return { setOpen(!open); onClick?.(e); }} {...props} />; }); DropdownMenuTrigger.displayName = "DropdownMenuTrigger"; export const DropdownMenuContent = React.forwardRef(({ className = '', children, ...props }, ref) => { const { open } = useContext(DropdownContext); if (!open) return null; return (
{children}
); }); DropdownMenuContent.displayName = "DropdownMenuContent"; export const DropdownMenuItem = React.forwardRef(({ className = '', onClick, ...props }, ref) => { const { setOpen } = useContext(DropdownContext); return (
{ setOpen(false); onClick?.(e); }} className={`relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-surface-hover hover:text-text data-[disabled]:pointer-events-none data-[disabled]:opacity-50 ${className}`} {...props} /> ); }); DropdownMenuItem.displayName = "DropdownMenuItem"; export const DropdownMenuLabel = React.forwardRef(({ className = '', ...props }, ref) => (
)); DropdownMenuLabel.displayName = "DropdownMenuLabel"; export const DropdownMenuSeparator = React.forwardRef(({ className = '', ...props }, ref) => (
)); DropdownMenuSeparator.displayName = "DropdownMenuSeparator"; export const DropdownMenuGroup = ({ children }: any) => <>{children}; export const DropdownMenuPortal = ({ children }: any) => <>{children}; export const DropdownMenuSub = ({ children }: any) => <>{children}; export const DropdownMenuSubContent = DropdownMenuContent; export const DropdownMenuSubTrigger = DropdownMenuItem; export const DropdownMenuRadioGroup = DropdownMenuGroup; export const DropdownMenuCheckboxItem = DropdownMenuItem; export const DropdownMenuRadioItem = DropdownMenuItem; export const DropdownMenuShortcut = ({ className = '', ...props }: any) => ;