import { Content, Item, ItemIndicator, Label, Portal, RadioGroup, RadioItem, Root, Separator, Trigger, } from '@radix-ui/react-dropdown-menu' import clsx from 'clsx' import type { ComponentProps, ReactNode, Ref } from 'react' import { match } from 'ts-pattern' import { Check } from '../../icons' import styles from './DropdownMenu.module.css' export const DropdownMenuRoot = Root export const DropdownMenuTrigger = Trigger export const DropdownMenuPortal = Portal export const DropdownMenuRadioGroup = RadioGroup export const DropdownMenuLabel = Label export const DropdownMenuContent = ({ className, ref, ...props }: ComponentProps & { ref?: Ref }) => { return ( ) } DropdownMenuContent.displayName = 'DropdownMenuContent' type DropdownMenuItemProps = ComponentProps & { variant?: 'default' | 'danger' size?: 'sm' | 'md' leftIcon?: ReactNode ref?: Ref } export const DropdownMenuItem = ({ variant = 'default', size = 'md', leftIcon, children, className, ref, ...props }: DropdownMenuItemProps) => { const sizeClassName = match(size) .with('sm', () => styles.sm) .with('md', () => styles.md) .exhaustive() const variantClassName = match(variant) .with('default', () => styles.default) .with('danger', () => styles.danger) .exhaustive() return ( {leftIcon && ( {leftIcon} )} {children} ) } DropdownMenuItem.displayName = 'DropdownMenuItem' type DropdownMenuRadioItemProps = ComponentProps & { label: string ref?: Ref } export const DropdownMenuRadioItem = ({ className, label, ref, ...props }: DropdownMenuRadioItemProps) => { return ( {label} ) } DropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem' export const DropdownMenuSeparator = () => { return } // Re-export for custom implementations export { ItemIndicator as DropdownMenuItemIndicator, RadioItem as DropdownMenuPrimitiveRadioItem, } from '@radix-ui/react-dropdown-menu'