import { AfterContentInit, ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { DefaultMenuItem } from '../default-menu-item.class';
import { MenuTitleDirective } from '../directives/menu-title.directive';
import { MenuInteractiveComponent } from '../menu-interactive.component';
import { MenuService } from '../services/menu.service';
import * as i0 from "@angular/core";
export interface BaseSubmenu {
    templateRef: TemplateRef<any>;
    menuItems: MenuItemComponent[];
    menuService: MenuService;
    ariaLabel: Nullable<string>;
    ariaLabelledby: Nullable<string>;
    _menuItemsChange$: Observable<void>;
    _registerItem(item: MenuItemComponent): void;
    _unregisterItem(item: MenuItemComponent): void;
}
export declare const SUBMENU: InjectionToken<BaseSubmenu>;
export declare class MenuItemComponent implements DefaultMenuItem, OnInit, OnChanges, AfterContentInit, OnDestroy {
    elementRef: ElementRef;
    menuService: MenuService | null;
    private _changeDetectorRef;
    private _submenu;
    /** Set the Menu Item as disabled/enabled */
    disabled: boolean;
    /** Menu Item id attribute value */
    itemId: string;
    /** Reference to sub-menu component */
    submenu: BaseSubmenu | undefined;
    /** Reference to the parent submenu if nested menus created dynamically */
    parentSubmenu: BaseSubmenu | undefined;
    /** Whether the menu item has a separator */
    hasSeparator: boolean;
    /** Emitted when the menu item is selected. */
    onSelect: EventEmitter<void>;
    /** @hidden Reference to the Menu Item title */
    menuItemTitle: MenuTitleDirective;
    /** @hidden Reference to the Menu Item interactive element */
    menuInteractive: MenuInteractiveComponent;
    /** @hidden Whether sub-menu is currently visible*/
    submenuVisible: boolean;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    private _hoverSubscriptions;
    /** @hidden */
    constructor(elementRef: ElementRef, menuService: MenuService | null, _changeDetectorRef: ChangeDetectorRef, _submenu: BaseSubmenu | null);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** Whether menu item has popup (desktop mode)  */
    get hasPopup(): boolean;
    /** Focuses Menu Item interactive element */
    focus(): void;
    /** Clicks Menu Item interactive element */
    click(): void;
    /** @hidden Sets menu item as selected/unselected based on isSelected flag */
    setSelected(isSelected: boolean, fromSplit?: boolean): void;
    /** @hidden Creates click listener on menu item interactive element */
    private _listenOnMenuLinkClick;
    /** @hidden Creates hover listeners for activating/deactivating menu item */
    private _listenOnMenuLinkHover;
    /** @hidden Initializes menu link state based on item initial state */
    private _initialiseItemState;
    /** @hidden Checks for Menu Service dependency and passes it if further */
    private _setMenuService;
    /** @hidden Listen on menu mode and set proper mode listeners */
    private _listenOnMenuMode;
    /** @hidden Updates focused menu item on outer focus */
    private _listenOnOuterFocus;
    static ɵfac: i0.ɵɵFactoryDeclaration<MenuItemComponent, [null, { optional: true; }, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MenuItemComponent, "li[fd-menu-item]", ["fd-menu-item"], { "disabled": { "alias": "disabled"; "required": false; }; "itemId": { "alias": "itemId"; "required": false; }; "submenu": { "alias": "submenu"; "required": false; }; "parentSubmenu": { "alias": "parentSubmenu"; "required": false; }; "hasSeparator": { "alias": "hasSeparator"; "required": false; }; }, { "onSelect": "onSelect"; }, ["menuItemTitle", "menuInteractive"], ["*"], true, never>;
    static ngAcceptInputType_hasSeparator: unknown;
}
export declare class SubmenuComponent implements BaseSubmenu, AfterContentInit {
    /** Aria-label for navigation */
    ariaLabel: Nullable<string>;
    /** Aria-Labelledby for element describing navigation */
    ariaLabelledby: Nullable<string>;
    /** @hidden Reference to template with Submenu items  */
    templateRef: TemplateRef<any>;
    /** @hidden Reference to Submenu MenuItems  */
    _projectedItems: QueryList<MenuItemComponent>;
    /** @hidden */
    _registeredItems: MenuItemComponent[];
    /** @hidden Reference to MenuService used by MenuItems */
    menuService: MenuService;
    /** @hidden */
    _menuItemsChange$: Subject<void>;
    /** @hidden */
    get menuItems(): MenuItemComponent[];
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden method for manually registering item when it's not visible for @ContentChildren */
    _registerItem(item: MenuItemComponent): void;
    /** @hidden method for manually unregistering item when it's not visible for @ContentChildren */
    _unregisterItem(item: MenuItemComponent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SubmenuComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SubmenuComponent, "fd-submenu", ["fdSubmenu"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; }; }, {}, ["_projectedItems"], ["*"], true, never>;
}
