import * as React from 'react'; import { Orientation } from '@syncfusion/react-base'; import type { CommonMenuProps, SubmenuType, FocusHoverState } from '../../menu/types'; import { MenuItemProps } from '../components'; import { SubmenuRenderMode } from '../../menu'; /** * Represents a registered menu item tracked by the menu system. * Stored in `menuItemsRef` and used for keyboard navigation, selection, and submenu resolution. * * @private */ export interface MenuItemRegistration { path: number[]; element: HTMLLIElement; hasChildren: boolean; disabled: boolean; parentPath: number[]; text?: string; url?: string; props: MenuItemProps; } /** * Arguments accepted by the `useMenu` hook. * Extends `CommonMenuProps` (minus `items`) with runtime-only concerns such as open state and popup position. * * @private */ export interface UseMenuArgs extends Omit { isOpen: boolean; popupPosition: { x: number; y: number; }; setPopupPosition?: React.Dispatch>; orientation?: Orientation; embedded?: boolean; container?: HTMLElement; submenuRenderMode?: SubmenuRenderMode; } /** * Return value of the `useMenu` hook. * Provides refs, state, and handlers that the Menu / ContextMenu component wires into the DOM. * * @private */ export interface UseMenuReturn { parentRef: React.RefObject; submenuRefs: React.RefObject>; focusedItemRef: React.RefObject; menuItemsRef: React.RefObject>; openSubmenus: Array; setOpenSubmenus: React.Dispatch>>; pathStates: FocusHoverState; setPathStates: React.Dispatch>; handleSubmenuOpen: (parentIndexPath: number[], target: HTMLElement, triggerEvent?: Event) => void; handleBackNavigation: () => void; openSubmenu: (parentIndexPath: number[], target: HTMLElement, triggerEvent?: Event) => void; handleKeyDown: (e: React.KeyboardEvent) => void; closeAllSubmenus: () => void; getItemsByPath: (indexPath: number[]) => MenuItemRegistration[]; } export declare const useMenu: (args: UseMenuArgs) => UseMenuReturn;