import * as React from "react" import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" import { Check, ChevronRight, Circle } from "lucide-react" import { cn } from "@/lib/utils" // Modified Root component with open state control const DropdownMenuRoot = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ open, defaultOpen, onOpenChange, modal = false, ...props }, ref) => { // Control open state manually to avoid unwanted closures const [isOpen, setIsOpen] = React.useState(defaultOpen || false); // Handle open state changes and sync with parent if needed React.useEffect(() => { if (open !== undefined) { setIsOpen(open); } }, [open]); // Notify parent component when open state changes const handleOpenChange = (newOpen: boolean) => { setIsOpen(newOpen); if (onOpenChange) { onOpenChange(newOpen); } }; return ( ); }); DropdownMenuRoot.displayName = "DropdownMenuRoot"; const DropdownMenu = DropdownMenuRoot // Prevent click events from propagating through the dropdown trigger const DropdownMenuTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => { // Stop touch events from propagating to prevent immediate closing const handleTouchStart = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; return ( ); }) DropdownMenuTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName const DropdownMenuGroup = DropdownMenuPrimitive.Group const DropdownMenuPortal = DropdownMenuPrimitive.Portal const DropdownMenuSub = DropdownMenuPrimitive.Sub const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup const DropdownMenuSubTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean } >(({ className, inset, children, ...props }, ref) => ( {children} )) DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName const DropdownMenuSubContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => { const handleTouchStart = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleTouchMove = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleMouseDown = (e: React.MouseEvent) => { e.stopPropagation(); }; return ( ); }) DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName const DropdownMenuContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => { // Comprehensive set of event handlers to prevent immediate closing const handleTouchStart = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleTouchMove = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleMouseDown = (e: React.MouseEvent) => { e.stopPropagation(); }; const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); }; return ( ); }) DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName // Modified DropdownMenuItem to prevent click events from closing the dropdown unintentionally const DropdownMenuItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean } >(({ className, inset, onClick, ...props }, ref) => { const handleClick = (e: React.MouseEvent) => { // Prevent event propagation but still call the provided onClick handler e.stopPropagation(); if (onClick) { onClick(e); } }; const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; return ( ); }) DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName // Apply similar fixes to CheckboxItem and RadioItem components const DropdownMenuCheckboxItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, checked, ...props }, ref) => { const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); }; return ( {children} ); }) DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName const DropdownMenuRadioItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => { const handleTouchEnd = (e: React.TouchEvent) => { e.stopPropagation(); }; const handleClick = (e: React.MouseEvent) => { e.stopPropagation(); }; return ( {children} ); }) DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName const DropdownMenuLabel = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean } >(({ className, inset, ...props }, ref) => ( )) DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName const DropdownMenuSeparator = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { return ( ) } DropdownMenuShortcut.displayName = "DropdownMenuShortcut" export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, }