import * as React from "react"; import { cn } from "@/lib/utils"; const MenuContext = React.createContext<{ open: boolean; setOpen: (o: boolean) => void }>({ open: false, setOpen: () => {} }); export function DropdownMenu({ children }: { children?: React.ReactNode }) { const [open, setOpen] = React.useState(false); return (
{children}
); } export function DropdownMenuTrigger({ asChild, children, ...props }: React.ButtonHTMLAttributes & { asChild?: boolean }) { const ctx = React.useContext(MenuContext); if (asChild && React.isValidElement(children)) { return React.cloneElement(children as React.ReactElement, { onClick: () => ctx.setOpen(!ctx.open) }); } return ; } export function DropdownMenuContent({ align = "end", className, children, ...props }: React.HTMLAttributes & { align?: "start" | "end" | "center" }) { const ctx = React.useContext(MenuContext); if (!ctx.open) return null; return (
{children}
); } export function DropdownMenuItem({ className, onClick, ...props }: React.HTMLAttributes) { const ctx = React.useContext(MenuContext); return (
{ onClick?.(e); ctx.setOpen(false); }} className={cn("cursor-pointer px-3 py-2 text-sm hover:bg-slate-100", className)} {...props} /> ); } export function DropdownMenuLabel({ className, ...props }: React.HTMLAttributes) { return
; } export function DropdownMenuSeparator({ className, ...props }: React.HTMLAttributes) { return
; } export function DropdownMenuGroup({ children }: { children?: React.ReactNode }) { return
{children}
; } export default DropdownMenu;