import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'; import { motion } from 'framer-motion'; import { forwardRef, type ComponentPropsWithoutRef } from 'react'; import { cn } from '@/lib/utils'; import { usePlatform } from '@/platform'; import { dropdown, dropdownTransition } from '../../motion/transitions'; export { Root as DropdownMenu, Trigger as DropdownMenuTrigger, Group as DropdownMenuGroup, Portal as DropdownMenuPortal, Sub as DropdownMenuSub, RadioGroup as DropdownMenuRadioGroup, } from '@radix-ui/react-dropdown-menu'; // Icons const CheckIcon = () => ( ); const ChevronRightIcon = () => ( ); const DotIcon = () => ( ); // SubTrigger export interface DropdownMenuSubTriggerProps extends ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.SubTrigger > { inset?: boolean; } export const DropdownMenuSubTrigger = forwardRef( ({ className, inset, children, ...props }, ref) => ( {children} ), ); DropdownMenuSubTrigger.displayName = 'DropdownMenuSubTrigger'; // SubContent export type DropdownMenuSubContentProps = ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.SubContent >; export const DropdownMenuSubContent = forwardRef( ({ className, ...props }, ref) => ( ), ); DropdownMenuSubContent.displayName = 'DropdownMenuSubContent'; // Content export type DropdownMenuContentProps = ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.Content >; export const DropdownMenuContent = forwardRef( ({ className, sideOffset = 4, ...props }, ref) => { const { haptic } = usePlatform(); return ( haptic.impact('light')} asChild {...props} > ); }, ); DropdownMenuContent.displayName = 'DropdownMenuContent'; // Item export interface DropdownMenuItemProps extends ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.Item > { inset?: boolean; destructive?: boolean; } export const DropdownMenuItem = forwardRef( ({ className, inset, destructive, ...props }, ref) => { const { haptic } = usePlatform(); return ( haptic.impact('light')} {...props} /> ); }, ); DropdownMenuItem.displayName = 'DropdownMenuItem'; // CheckboxItem export type DropdownMenuCheckboxItemProps = ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.CheckboxItem >; export const DropdownMenuCheckboxItem = forwardRef( ({ className, children, checked, ...props }, ref) => ( {children} ), ); DropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem'; // RadioItem export type DropdownMenuRadioItemProps = ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.RadioItem >; export const DropdownMenuRadioItem = forwardRef( ({ className, children, ...props }, ref) => ( {children} ), ); DropdownMenuRadioItem.displayName = 'DropdownMenuRadioItem'; // Label export interface DropdownMenuLabelProps extends ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.Label > { inset?: boolean; } export const DropdownMenuLabel = forwardRef( ({ className, inset, ...props }, ref) => ( ), ); DropdownMenuLabel.displayName = 'DropdownMenuLabel'; // Separator export type DropdownMenuSeparatorProps = ComponentPropsWithoutRef< typeof DropdownMenuPrimitive.Separator >; export const DropdownMenuSeparator = forwardRef( ({ className, ...props }, ref) => ( ), ); DropdownMenuSeparator.displayName = 'DropdownMenuSeparator'; // Shortcut export type DropdownMenuShortcutProps = React.HTMLAttributes; export const DropdownMenuShortcut = ({ className, ...props }: DropdownMenuShortcutProps) => ( ); DropdownMenuShortcut.displayName = 'DropdownMenuShortcut';