/**
 * @license
 * Copyright Tyler Technologies, Inc. 
 * License: Apache-2.0
 */
import { PositionPlacement } from '../core/utils/position-utils';
import { IListDropdownAware, ListDropdownAware } from '../list-dropdown/list-dropdown-aware';
import type { IOverlayOffset } from '../overlay/overlay-constants';
import { IMenuActiveChangeEventData, IMenuOption, IMenuOptionGroup, IMenuSelectEventData, MenuMode, MenuOptionBuilder, MenuOptionFactory } from './menu-constants';
export interface IMenuComponent extends IListDropdownAware {
    open: boolean;
    options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;
    selectedIndex: number;
    selectedValue: number;
    placement: PositionPlacement;
    fallbackPlacements: PositionPlacement[];
    dense: boolean;
    iconClass: string;
    persistSelection: boolean;
    mode: MenuMode;
    popupOffset: IOverlayOffset;
    optionBuilder: MenuOptionBuilder | undefined;
    popupElement: HTMLElement | undefined;
    propagateKeyEvent(evt: KeyboardEvent): void;
    activateFirstOption(): void;
}
declare global {
    interface HTMLElementTagNameMap {
        'forge-menu': IMenuComponent;
    }
    interface HTMLElementEventMap {
        'forge-menu-select': CustomEvent<IMenuSelectEventData>;
        'forge-menu-open': CustomEvent<void>;
        'forge-menu-close': CustomEvent<void>;
        'forge-menu-active-change': CustomEvent<IMenuActiveChangeEventData>;
    }
}
/**
 * The web component class behind the `<forge-menu>` custom element.
 *
 * @tag forge-menu
 */
export declare class MenuComponent extends ListDropdownAware implements IMenuComponent {
    static get observedAttributes(): string[];
    private _foundation;
    constructor();
    connectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
    disconnectedCallback(): void;
    /** Gets/sets the open state. */
    open: boolean;
    /** Gets/sets the array of options to display in the menu. */
    options: Array<IMenuOption | IMenuOptionGroup> | MenuOptionFactory;
    /** Gets/sets the selected option to the index. Does not support cascading menus. */
    selectedIndex: number;
    /** Gets/sets the value of the option to select. */
    selectedValue: any;
    /** Gets/sets the menu placement (default is bottom-left). */
    placement: `${PositionPlacement}`;
    /** Gets/sets the fallback menu placement for overriding the default of any side. */
    fallbackPlacements: `${PositionPlacement}`[];
    /** Gets/sets dense state of the list options used in the menu popup. */
    dense: boolean;
    /** Gets/sets the class name to use for option icons. */
    iconClass: string;
    /**
     * Gets/sets whether selection of menu items is persisted.
     * @deprecated Please use `<forge-select-dropdown>` for handling selection states.
     */
    persistSelection: boolean;
    /** Gets/sets the mode that this menu is using. */
    mode: MenuMode;
    /** Sets the position adjustment on the internal popup element. */
    popupOffset: IOverlayOffset;
    /** Sets the callback that will be executed for each option in the dropdown for producing custom option templates. */
    optionBuilder: MenuOptionBuilder;
    /**
     * Gets the currently active popup element when the dropdown is open.
     * @readonly
     */
    popupElement: HTMLElement | undefined;
    /** Force propagates the key event from another element this component. */
    propagateKeyEvent(evt: KeyboardEvent): void;
    activateFirstOption(): void;
}
