'use client' import { dropdownMenu } from './dropdown-menu' import * as ContextMenuPrimitive from '@radix-ui/react-context-menu' import { IconCheck, IconChevronRight, IconPoint } from '@tabler/icons-react' import { forwardRef } from 'react' import type { VariantProps } from 'tailwind-variants' import type { Merge } from 'type-fest' const ContextMenuSubTrigger = forwardRef< React.ElementRef, Merge< Merge< React.ComponentPropsWithoutRef, VariantProps >, { iconProps?: React.ComponentProps } > >(({ iconProps, inset, children, ...props }, ref) => { const { subTrigger, subTriggerIcon } = dropdownMenu({ inset }) return ( {children} ) }) ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName const ContextMenuSubContent = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, { portalProps?: React.ComponentProps } > >(({ portalProps, ...props }, ref) => { const { subContent } = dropdownMenu() return ( ) }) ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName const ContextMenuContent = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, { portalProps?: React.ComponentProps } > >(({ portalProps, ...props }, ref) => { const { content } = dropdownMenu() return ( ) }) ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName const ContextMenuItem = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, VariantProps > >(({ inset, ...props }, ref) => { const { item } = dropdownMenu({ inset }) return ( ) }) ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName const ContextMenuCheckboxItem = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, { indicatorIconProps?: React.ComponentProps } > >(({ indicatorIconProps, children, ...props }, ref) => { const { checkboxItem, checkboxItemIndicatorIcon } = dropdownMenu() return ( {children} ) }) ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName const ContextMenuRadioItem = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, { indicatorIconProps?: React.ComponentProps } > >(({ indicatorIconProps, children, ...props }, ref) => { const { radioItem, radioItemIndicatorIcon } = dropdownMenu() return ( {children} ) }) ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName const ContextMenuLabel = forwardRef< React.ElementRef, Merge< React.ComponentPropsWithoutRef, VariantProps > >(({ inset, ...props }, ref) => { const { label } = dropdownMenu({ inset }) return ( ) }) ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName const ContextMenuSeparator = forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >((props, ref) => { const { separator } = dropdownMenu() return ( ) }) ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName function ContextMenuItemShortcut(props: React.ComponentProps<'span'>) { const { itemShortcut } = dropdownMenu() return } const ContextMenu = Object.assign(ContextMenuPrimitive.Root, { Trigger: ContextMenuPrimitive.Trigger, Content: ContextMenuContent, Label: ContextMenuLabel, Separator: ContextMenuSeparator, Item: Object.assign(ContextMenuItem, { Shortcut: ContextMenuItemShortcut, }), Radio: Object.assign(ContextMenuPrimitive.RadioGroup, { Item: ContextMenuRadioItem, }), CheckboxItem: ContextMenuCheckboxItem, Sub: Object.assign(ContextMenuPrimitive.ContextMenuSub, { Trigger: ContextMenuSubTrigger, Content: ContextMenuSubContent, }), }) export default ContextMenu export { ContextMenuPrimitive }