import type { BasePubSubService } from '@slickgrid-universal/event-pub-sub';
import type { SlickEventData, SlickGrid } from '../core/index.js';
import type { ExtensionUtility } from '../extensions/extensionUtility.js';
import type { CellMenu, ContextMenu, DOMMouseOrTouchEvent, MenuCommandItem, MenuFromCellCallbackArgs, MenuOptionItem } from '../interfaces/index.js';
import type { SharedService } from '../services/shared.service.js';
import { MenuBaseClass, type ExtendableItemTypes, type ExtractMenuType, type MenuType } from './menuBaseClass.js';
export declare class MenuFromCellBaseClass<M extends CellMenu | ContextMenu> extends MenuBaseClass<M> {
    protected readonly extensionUtility: ExtensionUtility;
    protected readonly pubSubService: BasePubSubService;
    protected readonly sharedService: SharedService;
    protected _currentCell: number;
    protected _currentRow: number;
    protected _lastMenuTypeClicked: string;
    protected _subMenuParentId: string;
    /** Constructor of the SlickGrid 3rd party plugin, it can optionally receive options */
    constructor(extensionUtility: ExtensionUtility, pubSubService: BasePubSubService, sharedService: SharedService);
    createParentMenu(event: DOMMouseOrTouchEvent<HTMLDivElement> | SlickEventData): HTMLDivElement | undefined;
    /**
     * Create parent menu or sub-menu(s), a parent menu will start at level 0 while sub-menu(s) will be incremented
     * @param commandItems - array of optional commands or dividers
     * @param optionItems - array of optional options or dividers
     * @param level - menu level
     * @param item - command, option or divider
     * @returns menu DOM element
     */
    createMenu(triggeredByElm: HTMLElement, commandItems: Array<MenuCommandItem | 'divider'>, optionItems: Array<MenuOptionItem | 'divider'>, level?: number, item?: ExtractMenuType<ExtendableItemTypes, MenuType>): HTMLDivElement | undefined;
    closeMenu(e: DOMMouseOrTouchEvent<HTMLDivElement> | SlickEventData, args: {
        grid: SlickGrid;
    } | MenuFromCellCallbackArgs): void;
    /** Hide the Menu */
    hideMenu(): void;
    protected checkIsColumnAllowed(columnIds: Array<number | string>, columnId: number | string): boolean;
    /** Mouse down handler when clicking anywhere in the DOM body */
    protected handleBodyMouseDown(e: DOMMouseOrTouchEvent<HTMLDivElement>): void;
    protected handleCloseButtonClicked(e: DOMMouseOrTouchEvent<HTMLDivElement>): void;
    protected handleMenuItemMouseOver(e: DOMMouseOrTouchEvent<HTMLElement> | SlickEventData, type: MenuType, item: ExtractMenuType<ExtendableItemTypes, MenuType>, level?: number): void;
    protected handleMenuItemCommandClick(event: DOMMouseOrTouchEvent<HTMLDivElement> | SlickEventData, type: MenuType, item: ExtractMenuType<ExtendableItemTypes, MenuType>, level?: number): void;
    protected populateCommandOrOptionCloseBtn(itemType: MenuType, closeButtonElm: HTMLButtonElement, commandOrOptionMenuElm: HTMLDivElement): void;
    protected repositionSubMenu(item: ExtractMenuType<ExtendableItemTypes, MenuType>, type: MenuType, level: number, e: DOMMouseOrTouchEvent<HTMLElement> | SlickEventData): void;
}
//# sourceMappingURL=menuFromCellBaseClass.d.ts.map