import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, Injector, OnDestroy, OnInit, QueryList, Renderer2, TemplateRef, ViewContainerRef } from '@angular/core';
import { DynamicComponentService, Nullable } from '@fundamental-ngx/cdk/utils';
import { DialogConfig } from '@fundamental-ngx/core/dialog';
import { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';
import { BasePopoverClass, PopoverService } from '@fundamental-ngx/core/popover';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { SegmentedButtonHeaderDirective } from './directives/segmented-button/segmented-button-header.directive';
import { SegmentedButtonOptionDirective } from './directives/segmented-button/segmented-button-option.directive';
import { MenuItemComponent } from './menu-item/menu-item.component';
import { MenuInterface } from './menu.interface';
import { MenuService } from './services/menu.service';
import * as i0 from "@angular/core";
/**
 * The component that represents a menu.
 */
export declare class MenuComponent extends BasePopoverClass implements MenuInterface, AfterContentInit, AfterViewInit, OnDestroy, OnInit {
    readonly elementRef: ElementRef;
    readonly dialogConfig: DialogConfig;
    private readonly _rendered;
    private readonly _menuService;
    private readonly _changeDetectorRef;
    private readonly _popoverService;
    private readonly _injector;
    private readonly _viewContainerRef;
    private readonly _dynamicComponentService;
    readonly _contentDensityObserver: ContentDensityObserver;
    /** Set menu in mobile mode */
    set mobile(value: boolean);
    get mobile(): boolean;
    /** Whether the popover is disabled. */
    disabled: boolean;
    /** Whether the popover should be focusTrapped. */
    focusTrapped: boolean;
    /**
     * Whether the popover should automatically move focus into the trapped region upon
     * initialization and return focus to the previous activeElement upon destruction.
     */
    focusAutoCapture: boolean;
    /** Open submenu on hover after given milliseconds */
    openOnHoverTime: number;
    /** Display menu without integrated popover */
    mobileConfig: MobileModeConfig;
    /** Aria-label for navigation */
    ariaLabel: Nullable<string>;
    /** Aria-Labelledby for element describing navigation */
    ariaLabelledby: Nullable<string>;
    /** Id of the control. */
    id: string;
    /** Emits array of active menu items */
    readonly activePath: EventEmitter<MenuItemComponent[]>;
    /** @hidden Reference to the menu root template */
    _menuRootTemplate: TemplateRef<any>;
    /** @hidden Reference to all menu Items */
    _menuItems: QueryList<MenuItemComponent>;
    /** @hidden Menu item segmented item headers */
    _segmentedButtonHeaderItems: QueryList<SegmentedButtonHeaderDirective<unknown>>;
    /** @hidden Menu item segmented item options */
    _segmentedButtonOptions: QueryList<SegmentedButtonOptionDirective<unknown>>;
    /** @hidden */
    _navContainerRole: string;
    /** @hidden */
    _menuListContainerRole: string;
    /** @hidden Whether use a menu in mobile mode */
    private _mobile;
    /** @hidden Reference to external menu trigger */
    private _externalTrigger;
    /** @hidden */
    private _addons;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    private _mobileModeComponentRef;
    /** @hidden */
    private _clickEventListener;
    /** @hidden */
    get hasAddons(): boolean;
    /** @hidden */
    private get _popoverConfig();
    /** @hidden */
    constructor(elementRef: ElementRef, dialogConfig: DialogConfig, _rendered: Renderer2, _menuService: MenuService, _changeDetectorRef: ChangeDetectorRef, _popoverService: PopoverService, _injector: Injector, _viewContainerRef: ViewContainerRef, _dynamicComponentService: DynamicComponentService, _contentDensityObserver: ContentDensityObserver);
    /** @hidden */
    ngOnInit(): void;
    /** Register addon */
    registerAddon(addon: unknown): void;
    /** Unregister addon */
    unregisterAddon(addon: unknown): void;
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    set trigger(trigger: ElementRef);
    get trigger(): ElementRef;
    /** Opens the menu */
    open(): void;
    /** Closes the menu */
    close(): void;
    /** Toggles menu open/close state */
    toggle(): void;
    /** Method called to refresh position of opened popover */
    refreshPosition(): void;
    /** @hidden */
    detectChanges(): void;
    /** @hidden */
    private _cleanUpMenuAfterClose;
    /** @hidden Select and instantiate menu view mode */
    private _setupView;
    /** @hidden */
    private _setupPopoverService;
    /** @hidden Open Menu in mobile mode */
    private _setupMobileMode;
    /** @hidden Listen on menu items change and rebuild menu */
    private _listenOnMenuItemsChange;
    /**
     * @hidden
     * This is going to be removed in feature, on dialog and dynamic service component refactor
     */
    private _listenOnTriggerRefClicks;
    /**
     * @hidden
     * This is going to be removed in feature, on dialog and dynamic service component refactor
     */
    private _destroyEventListeners;
    /** @hidden */
    private _destroyMobileComponent;
    /** @hidden */
    private _focusTrigger;
    static ɵfac: i0.ɵɵFactoryDeclaration<MenuComponent, [null, { optional: true; }, null, null, null, null, null, null, { optional: true; }, null]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MenuComponent, "fd-menu", never, { "mobile": { "alias": "mobile"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "focusTrapped": { "alias": "focusTrapped"; "required": false; }; "focusAutoCapture": { "alias": "focusAutoCapture"; "required": false; }; "openOnHoverTime": { "alias": "openOnHoverTime"; "required": false; }; "mobileConfig": { "alias": "mobileConfig"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, { "activePath": "activePath"; }, ["_menuItems", "_segmentedButtonHeaderItems", "_segmentedButtonOptions"], ["*"], true, never>;
    static ngAcceptInputType_mobile: unknown;
}
