import type { _AgCoreBeanCollection, _BaseEvents, _BaseProperties, _IPropertiesService, _WithoutCommon } from 'ag-grid-community';
import { _AgBeanStub } from 'ag-grid-community';
import type { AgMenuItemCallbacks, AgMenuItemDef } from './agMenuItemComponent';
export interface AgContextMenuServiceParams<TBeanCollection, TCommon, TMenuActionParams extends TCommon, TDefaultMenuItem extends string> {
    menuItemCallbacks: AgMenuItemCallbacks<TBeanCollection, TMenuActionParams, TCommon>;
    getMenuItems(menuActionParams: _WithoutCommon<TCommon, TMenuActionParams>, mouseEvent: MouseEvent | Touch): (TDefaultMenuItem | AgMenuItemDef<TMenuActionParams, TCommon>)[] | Promise<(TDefaultMenuItem | AgMenuItemDef<TMenuActionParams, TCommon>)[]> | undefined;
    mapMenuItems?(menuItems: (TDefaultMenuItem | AgMenuItemDef<TMenuActionParams, TCommon>)[], menuActionParams: _WithoutCommon<TCommon, TMenuActionParams>, getGui: () => HTMLElement): (TDefaultMenuItem | AgMenuItemDef<TMenuActionParams, TCommon>)[];
    shouldBlockMenuOpen?(): boolean;
    beforeMenuOpen?(menuActionParams: _WithoutCommon<TCommon, TMenuActionParams>): void;
    onMenuOpen?(): void;
    onMenuClose?(): void;
    afterMenuDestroyed?(): void;
    onVisibleChanged?(visible: boolean, source: 'api' | 'ui'): void;
}
export declare class AgContextMenuService<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, TDefaultMenuItem extends string> extends _AgBeanStub<TBeanCollection, TProperties, TGlobalEvents, TCommon, TPropertiesService> {
    private readonly params;
    private destroyLoadingSpinner;
    private lastPromise;
    private activeMenu;
    constructor(params: AgContextMenuServiceParams<TBeanCollection, TCommon, TMenuActionParams, TDefaultMenuItem>);
    hideActiveMenu(): void;
    showMenu(menuActionParams: _WithoutCommon<TCommon, TMenuActionParams>, mouseEvent: MouseEvent | Touch, anchorToElement?: HTMLElement): boolean;
    private createLoadingIcon;
    private createContextMenu;
    destroy(): void;
}
