import React from 'react'; import type { AriaPopoverProps } from 'react-aria'; import type { Complete, Exact, SafePick } from '@shoptet/utils'; import { destruct } from '@shoptet/utils'; import { Menu } from '../Menu/Menu'; import type { MenuProps } from '../Menu/Menu'; import type { MenuListProps } from '../Menu/MenuList'; import { ContextMenuIconButton, type ContextMenuIconButtonProps } from './ContextMenuIconButton'; export interface ContextMenuInheritedMenuTriggerProps extends SafePick< MenuProps, 'open' | 'defaultOpen' | 'onOpenChange' | 'disabled' > {} export interface ContextMenuInheritedContextMenuIconButtonProps extends Omit {} export interface ContextMenuInheritedContextMenuListProps extends MenuListProps {} export interface ContextMenuProps extends ContextMenuInheritedMenuTriggerProps, ContextMenuInheritedContextMenuIconButtonProps, ContextMenuInheritedContextMenuListProps { placement?: AriaPopoverProps['placement']; } export const ContextMenu = Object.assign( function ContextMenu({ placement, ...rest }: ContextMenuProps) { const [menuOpenProps, menuProps, iconButtonProps] = destruct( rest, ['open', 'defaultOpen', 'onOpenChange', 'disabled'], ['children'] ); menuOpenProps satisfies Exact, typeof menuOpenProps>; iconButtonProps satisfies Exact, typeof iconButtonProps>; menuProps satisfies Exact, typeof menuProps>; return ( } /> ); }, { Item: Menu.Item, } );