export interface ContextMenuItem { /** Unique key for the menu item */ key: string; /** Display label */ label: string; /** Icon (iconify icon name) */ icon?: string; /** Action handler */ onClick: (row: T, rowIndex: number) => void; /** Whether item is visible (default: true) */ isVisible?: (row: T, rowIndex: number) => boolean; /** Whether item is disabled (default: false) */ isDisabled?: (row: T, rowIndex: number) => boolean; /** Danger style (red text) */ danger?: boolean; /** Separator after this item */ separator?: boolean; } export interface ContextMenuPosition { x: number; y: number; } export interface ContextMenuState { visible: boolean; position: ContextMenuPosition; row: T | null; rowIndex: number; } export interface UseContextMenuOptions { /** Menu items */ items: ContextMenuItem[]; /** Callback when menu opens */ onOpen?: (row: T, rowIndex: number) => void; /** Callback when menu closes */ onClose?: () => void; } export interface UseContextMenuResult { /** Current menu state */ menuState: ContextMenuState; /** Open the context menu */ openMenu: (event: React.MouseEvent, row: T, rowIndex: number) => void; /** Close the context menu */ closeMenu: () => void; /** Get visible menu items for current row */ getVisibleItems: () => ContextMenuItem[]; /** Handle menu item click */ handleItemClick: (item: ContextMenuItem) => void; /** Menu ref for positioning */ menuRef: React.RefObject; } /** * Hook for managing context menu in spreadsheets * * @example * ```tsx * const { menuState, openMenu, closeMenu, getVisibleItems } = useContextMenu({ * items: [ * { key: 'edit', label: 'Edit', icon: 'lucide:edit', onClick: handleEdit }, * { key: 'delete', label: 'Delete', icon: 'lucide:trash', onClick: handleDelete, danger: true } * ] * }); * *
openMenu(e, row, index)}>...
* ``` */ export declare function useContextMenu(options: UseContextMenuOptions): UseContextMenuResult; export default useContextMenu; //# sourceMappingURL=useContextMenu.d.ts.map