import type { AgEvent, AgPromise, IComponent, IMenuItem, _AgComponent, _AgCoreBeanCollection, _BaseEvents, _BaseProperties, _IPropertiesService, _StopPropagationCallbacks, _WithoutCommon } from 'ag-grid-community';
import { _AgBeanStub } from 'ag-grid-community';
export interface AgMenuItemLeafDef<TMenuActionParams extends TCommon, TCommon> {
    /** Name of the menu item. */
    name: string;
    /** Set to `true` to display the menu item as disabled. */
    disabled?: boolean;
    /**
     * Shortcut text displayed inside menu item.
     * Setting this doesn’t actually create a keyboard shortcut binding.
     */
    shortcut?: string;
    /** Function that gets executed when item is chosen. */
    action?: (params: TMenuActionParams) => void;
    /** Set to true to provide a check beside the option. */
    checked?: boolean;
    /** The icon to display, either a DOM element or HTML string. */
    icon?: Element | string;
    /** CSS classes to apply to the menu item. */
    cssClasses?: string[];
    /** Tooltip text to be displayed for the menu item. */
    tooltip?: string;
    /**
     * If `true`, will keep the menu open when the item is selected.
     * Note that if this item has a sub menu,
     * it will always remain open regardless of this property.
     */
    suppressCloseOnSelect?: boolean;
}
export interface AgMenuItemDef<TMenuActionParams extends TCommon, TCommon> extends AgMenuItemLeafDef<TMenuActionParams, TCommon> {
    /**
     * If this item is a sub menu, contains a list of menu item definitions */
    subMenu?: (AgMenuItemDef<TMenuActionParams, TCommon> | string)[];
    /**
     * The aria role for the subMenu
     * @default 'menu'
     */
    subMenuRole?: 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';
    /**
     * Provide a custom menu item component.
     * See [Menu Item Component](https://www.ag-grid.com/javascript-data-grid/component-menu-item/#implementing-a-menu-item-component) for framework specific implementation details.
     */
    menuItem?: any;
    /**
     * Parameters to be passed to the custom menu item component specified in `menuItem`.
     */
    menuItemParams?: any;
}
export interface AgCloseMenuEvent extends AgEvent<'closeMenu'> {
    mouseEvent?: MouseEvent;
    keyboardEvent?: KeyboardEvent;
}
export interface AgMenuItemActivatedEvent<TBeanCollection extends _AgCoreBeanCollection<TProperties, TGlobalEvents, TCommon, TPropertiesService>, TProperties extends _BaseProperties, TGlobalEvents extends _BaseEvents, TCommon, TPropertiesService extends _IPropertiesService<TProperties, TCommon>, TComponentSelectorType extends string, TMenuActionParams extends TCommon> extends AgEvent<'menuItemActivated'> {
    menuItem: AgMenuItemComponent<TBeanCollection, TProperties, TGlobalEvents, TCommon, TPropertiesService, TComponentSelectorType, TMenuActionParams>;
}
interface AgMenuItemComponentParams<TMenuActionParams extends TCommon, TCommon> {
    menuItemDef: AgMenuItemDef<TMenuActionParams, TCommon>;
    isAnotherSubMenuOpen: () => boolean;
    level: number;
    childComponent?: IComponent<any>;
    contextParams: _WithoutCommon<TCommon, TMenuActionParams>;
}
export type AgMenuItemComponentEvent = 'closeMenu' | 'menuItemActivated';
export interface AgMenuItemParams<TMenuActionParams extends TCommon, TCommon> extends AgMenuItemDef<TMenuActionParams, TCommon> {
    /** Level within the menu tree (starts at 0). */
    level: number;
    /** Returns `true` if another sub menu is open. */
    isAnotherSubMenuOpen: () => boolean;
    /**
     * Open the sub menu for this item.
     * @param activateFirstItem If `true`, activate the first item in the sub menu.
     */
    openSubMenu: (activateFirstItem?: boolean) => void;
    /** Close the sub menu for this item. */
    closeSubMenu: () => void;
    /** Close the entire menu. */
    closeMenu: (event?: KeyboardEvent | MouseEvent) => void;
    /**
     * Updates the grid-provided tooltip this component.
     * @param tooltip The value to be displayed by the tooltip
     * @param shouldDisplayTooltip A function returning a boolean that allows the tooltip to be displayed conditionally. This option does not work when `enableBrowserTooltips={true}`.
     */
    updateTooltip: (tooltip?: string, shouldDisplayTooltip?: () => boolean) => void;
    /**
     * Callback to let the menu know that the current item has become active.
     * Required if updating the active status within the menu item.
     */
    onItemActivated: () => void;
}
export interface AgMenuItemCallbacks<TBeanCollection, TMenuActionParams extends TCommon, TCommon> {
    getMenuItemComp: (beans: TBeanCollection, def: AgMenuItemDef<TMenuActionParams, TCommon>, params: AgMenuItemParams<TMenuActionParams, TCommon>) => AgPromise<(IComponent<AgMenuItemParams<TMenuActionParams, TCommon>> & IMenuItem) | undefined>;
    getPostProcessPopupParams: (contextParams: _WithoutCommon<TCommon, TMenuActionParams>) => any;
    preserveRangesWhile: (beans: TBeanCollection, fn: () => void) => void;
    stopPropagationCallbacks: _StopPropagationCallbacks;
    warnNoItem?: (menuItem: string) => void;
}
export declare class AgMenuItemComponent<TBeanCollection extends _AgCoreBeanCollection<TProperties, TGlobalEvents, TCommon, TPropertiesService>, TProperties extends _BaseProperties, TGlobalEvents extends _BaseEvents, TCommon, TPropertiesService extends _IPropertiesService<TProperties, TCommon>, TComponentSelectorType extends string, TMenuActionParams extends TCommon> extends _AgBeanStub<TBeanCollection, TProperties, TGlobalEvents, TCommon, TPropertiesService, AgMenuItemComponentEvent> {
    private readonly callbacks;
    private readonly ACTIVATION_DELAY;
    private eGui;
    private params;
    private isAnotherSubMenuOpen;
    private level;
    private childComponent?;
    private contextParams;
    private menuItemComp;
    private isActive;
    private hideSubMenu;
    private subMenuIsOpen;
    private subMenuIsOpening;
    private activateTimeoutId;
    private deactivateTimeoutId;
    private parentComponent?;
    private tooltip?;
    private tooltipFeature?;
    private suppressRootStyles;
    private suppressAria;
    private suppressFocus;
    private cssClassPrefix;
    private eSubMenuGui?;
    constructor(callbacks: AgMenuItemCallbacks<TBeanCollection, TMenuActionParams, TCommon>);
    init(params: AgMenuItemComponentParams<TMenuActionParams, TCommon>): AgPromise<void>;
    private addListeners;
    isDisabled(): boolean;
    openSubMenu(activateFirstItem?: boolean, event?: MouseEvent | KeyboardEvent): void;
    private setAriaExpanded;
    closeSubMenu(): void;
    isSubMenuOpen(): boolean;
    isSubMenuOpening(): boolean;
    activate(openSubMenu?: boolean, fromKeyNav?: boolean): void;
    deactivate(): void;
    getGui(): HTMLElement;
    getParentComponent(): _AgComponent<TBeanCollection, TProperties, TGlobalEvents, any> | undefined;
    setParentComponent(component: _AgComponent<TBeanCollection, TProperties, TGlobalEvents, any>): void;
    getSubMenuGui(): HTMLElement | undefined;
    private onItemSelected;
    private closeMenu;
    private onItemActivated;
    private cancelActivate;
    private cancelDeactivate;
    private onMouseEnter;
    private onMouseLeave;
    private refreshRootElementGui;
    private applyAriaProperties;
    private configureDefaults;
    private refreshTooltip;
    destroy(): void;
}
export {};
