import { ComponentPropsWithoutRef, ElementRef, forwardRef, ReactNode } from 'react'; import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; import { FaChevronRight } from 'react-icons/fa'; import { memo } from '../utils'; import { cn } from '../libs'; const DropdownMenuRoot = DropdownMenuPrimitive.Root; const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; const DropdownMenuSubTrigger = forwardRef< ElementRef, ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, children, ...props }, ref) => ( {children} )); DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; const DropdownMenuSubContent = forwardRef< ElementRef, ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; const DropdownMenuContent = forwardRef< ElementRef, ComponentPropsWithoutRef & { contentClassName?: string; } >(({ className, sideOffset = 4, contentClassName, ...props }, ref) => ( )); DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; const DropdownMenuItem = forwardRef< ElementRef, ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, ...props }, ref) => ( svg]:size-4 [&>svg]:shrink-0', inset && 'pl-8', className )} {...props} /> )); DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; const DropdownMenuLabel = forwardRef< ElementRef, ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, ...props }, ref) => ( )); DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; const DropdownMenuSeparator = forwardRef< ElementRef, ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; export interface DropdownMenuProps { open?: boolean; onOpenChange?: (open: boolean) => void; content: ReactNode; contentClassName?: string; children?: ReactNode; } const Component = ({ open, onOpenChange, content, children, contentClassName }: DropdownMenuProps) => { return ( {children} {content} ); }; const DropdownMenu = memo(Component); export { DropdownMenu, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuItem };