import { Direction } from '@angular/cdk/bidi';
import * as i0 from '@angular/core';
import { OnInit, OnChanges, AfterContentInit, QueryList, SimpleChanges, TemplateRef, EventEmitter, ElementRef, AfterViewInit, InjectionToken } from '@angular/core';
import { RouterLink } from '@angular/router';
import { Subject, BehaviorSubject, Observable } from 'rxjs';
import { NzSafeAny } from 'ng-zorro-antd/core/types';
import * as _angular_cdk_overlay from '@angular/cdk/overlay';
import { ConnectedOverlayPositionChange } from '@angular/cdk/overlay';
import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation';
import { POSITION_TYPE_HORIZONTAL } from 'ng-zorro-antd/core/overlay';

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzMenuItemComponent implements OnInit, OnChanges, AfterContentInit {
    private readonly nzMenuService;
    private readonly destroyRef;
    private readonly cdr;
    private readonly nzSubmenuService;
    private readonly directionality;
    private readonly routerLink;
    private readonly router;
    protected readonly isMenuInsideDropDown: boolean;
    level: number;
    selected$: Subject<boolean>;
    inlinePaddingLeft: number | null;
    dir: Direction;
    nzPaddingLeft?: number;
    nzDisabled: boolean;
    nzSelected: boolean;
    nzDanger: boolean;
    nzMatchRouterExact: boolean;
    nzMatchRouter: boolean;
    listOfRouterLink: QueryList<RouterLink>;
    /** clear all item selected status except this */
    clickMenuItem(e: MouseEvent): void;
    setSelectedState(value: boolean): void;
    private updateRouterActive;
    private hasActiveLinks;
    private isLinkActive;
    constructor();
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMenuItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzMenuItemComponent, "[nz-menu-item]", ["nzMenuItem"], { "nzPaddingLeft": { "alias": "nzPaddingLeft"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "nzSelected": { "alias": "nzSelected"; "required": false; }; "nzDanger": { "alias": "nzDanger"; "required": false; }; "nzMatchRouterExact": { "alias": "nzMatchRouterExact"; "required": false; }; "nzMatchRouter": { "alias": "nzMatchRouter"; "required": false; }; }, {}, ["listOfRouterLink"], ["*"], true, never>;
    static ngAcceptInputType_nzPaddingLeft: unknown;
    static ngAcceptInputType_nzDisabled: unknown;
    static ngAcceptInputType_nzSelected: unknown;
    static ngAcceptInputType_nzDanger: unknown;
    static ngAcceptInputType_nzMatchRouterExact: unknown;
    static ngAcceptInputType_nzMatchRouter: unknown;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */
type NzMenuModeType = 'vertical' | 'horizontal' | 'inline';
type NzMenuThemeType = 'light' | 'dark';
type NzSubmenuTrigger = 'hover' | 'click';

declare class MenuService {
    /** all descendant menu click **/
    descendantMenuItemClick$: Subject<any>;
    /** child menu item click **/
    childMenuItemClick$: Subject<any>;
    theme$: BehaviorSubject<NzMenuThemeType>;
    mode$: BehaviorSubject<NzMenuModeType>;
    inlineIndent$: BehaviorSubject<number>;
    isChildSubMenuOpen$: BehaviorSubject<boolean>;
    onDescendantMenuItemClick(menu: NzSafeAny): void;
    onChildMenuItemClick(menu: NzSafeAny): void;
    setMode(mode: NzMenuModeType): void;
    setTheme(theme: NzMenuThemeType): void;
    setInlineIndent(indent: number): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MenuService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MenuService>;
}

declare class NzSubmenuService {
    readonly nzMenuService: MenuService;
    private readonly nzHostSubmenuService;
    mode$: Observable<NzMenuModeType>;
    level: number;
    isMenuInsideDropDown: boolean;
    isCurrentSubMenuOpen$: BehaviorSubject<boolean>;
    private isChildSubMenuOpen$;
    /** submenu title & overlay mouse enter status **/
    private isMouseEnterTitleOrOverlay$;
    private childMenuItemClick$;
    /**
     * menu item inside submenu clicked
     */
    onChildMenuItemClick(menu: NzSafeAny): void;
    setOpenStateWithoutDebounce(value: boolean): void;
    setMouseEnterTitleOrOverlayState(value: boolean): void;
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubmenuService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NzSubmenuService>;
}

declare class NzSubMenuComponent implements OnInit, AfterContentInit, OnChanges {
    readonly nzSubmenuService: NzSubmenuService;
    protected readonly isMenuInsideDropDown: boolean;
    protected readonly noAnimation: NzNoAnimationDirective | null;
    private readonly directionality;
    private readonly destroyRef;
    private readonly nzMenuService;
    private readonly cdr;
    private readonly platform;
    nzMenuClassName: string;
    nzPaddingLeft: number | null;
    nzTitle: string | TemplateRef<void> | null;
    nzIcon: string | null;
    nzTriggerSubMenuAction: NzSubmenuTrigger;
    nzOpen: boolean;
    nzDisabled: boolean;
    nzPlacement: POSITION_TYPE_HORIZONTAL;
    readonly nzOpenChange: EventEmitter<boolean>;
    cdkOverlayOrigin: ElementRef | null;
    listOfNzSubMenuComponent: QueryList<NzSubMenuComponent> | null;
    listOfNzMenuItemDirective: QueryList<NzMenuItemComponent> | null;
    private level;
    position: string;
    triggerWidth: number | null;
    theme: NzMenuThemeType;
    mode: NzMenuModeType;
    inlinePaddingLeft: number | null;
    overlayPositions: _angular_cdk_overlay.ConnectionPositionPair[];
    isSelected: boolean;
    isActive: boolean;
    dir: Direction;
    /** set the submenu host open status directly **/
    setOpenStateWithoutDebounce(open: boolean): void;
    toggleSubMenu(): void;
    setMouseEnterState(value: boolean): void;
    setTriggerWidth(): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubMenuComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubMenuComponent, "[nz-submenu]", ["nzSubmenu"], { "nzMenuClassName": { "alias": "nzMenuClassName"; "required": false; }; "nzPaddingLeft": { "alias": "nzPaddingLeft"; "required": false; }; "nzTitle": { "alias": "nzTitle"; "required": false; }; "nzIcon": { "alias": "nzIcon"; "required": false; }; "nzTriggerSubMenuAction": { "alias": "nzTriggerSubMenuAction"; "required": false; }; "nzOpen": { "alias": "nzOpen"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "nzPlacement": { "alias": "nzPlacement"; "required": false; }; }, { "nzOpenChange": "nzOpenChange"; }, ["listOfNzSubMenuComponent", "listOfNzMenuItemDirective"], ["[title]", "*"], true, never>;
    static ngAcceptInputType_nzOpen: unknown;
    static ngAcceptInputType_nzDisabled: unknown;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare function MenuServiceFactory(): MenuService;
declare function MenuDropDownTokenFactory(): boolean;
declare class NzMenuDirective implements AfterContentInit, OnInit, OnChanges {
    private readonly nzMenuService;
    private readonly destroyRef;
    private readonly cdr;
    private readonly directionality;
    listOfNzMenuItemDirective: QueryList<NzMenuItemComponent>;
    isMenuInsideDropDown: boolean;
    listOfNzSubMenuComponent: QueryList<NzSubMenuComponent>;
    nzInlineIndent: number;
    nzTheme: NzMenuThemeType;
    nzMode: NzMenuModeType;
    nzInlineCollapsed: boolean;
    nzSelectable: boolean;
    readonly nzClick: EventEmitter<NzMenuItemComponent>;
    actualMode: NzMenuModeType;
    dir: Direction;
    private inlineCollapsed$;
    private mode$;
    private listOfOpenedNzSubMenuComponent;
    setInlineCollapsed(inlineCollapsed: boolean): void;
    updateInlineCollapse(): void;
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMenuDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzMenuDirective, "[nz-menu]", ["nzMenu"], { "nzInlineIndent": { "alias": "nzInlineIndent"; "required": false; }; "nzTheme": { "alias": "nzTheme"; "required": false; }; "nzMode": { "alias": "nzMode"; "required": false; }; "nzInlineCollapsed": { "alias": "nzInlineCollapsed"; "required": false; }; "nzSelectable": { "alias": "nzSelectable"; "required": false; }; }, { "nzClick": "nzClick"; }, ["listOfNzMenuItemDirective", "listOfNzSubMenuComponent"], never, true, never>;
    static ngAcceptInputType_nzInlineCollapsed: unknown;
    static ngAcceptInputType_nzSelectable: unknown;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare function MenuGroupFactory(): boolean;
declare class NzMenuGroupComponent implements AfterViewInit {
    private readonly renderer;
    protected readonly isMenuInsideDropDown: boolean;
    nzTitle?: string | TemplateRef<void>;
    titleElement?: ElementRef;
    ngAfterViewInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMenuGroupComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzMenuGroupComponent, "[nz-menu-group]", ["nzMenuGroup"], { "nzTitle": { "alias": "nzTitle"; "required": false; }; }, {}, never, ["[title]", "*"], true, never>;
}

declare class NzMenuDividerDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMenuDividerDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzMenuDividerDirective, "[nz-menu-divider]", ["nzMenuDivider"], {}, {}, never, never, true, never>;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzSubMenuTitleComponent implements OnInit {
    private readonly destroyRef;
    private readonly cdr;
    private readonly directionality;
    nzIcon: string | null;
    nzTitle: string | TemplateRef<void> | null;
    isMenuInsideDropDown: boolean;
    nzDisabled: boolean;
    paddingLeft: number | null;
    mode: NzMenuModeType;
    nzTriggerSubMenuAction: NzSubmenuTrigger;
    readonly toggleSubMenu: EventEmitter<any>;
    readonly subMenuMouseState: EventEmitter<boolean>;
    dir: Direction;
    ngOnInit(): void;
    setMouseState(state: boolean): void;
    clickTitle(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubMenuTitleComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubMenuTitleComponent, "[nz-submenu-title]", ["nzSubmenuTitle"], { "nzIcon": { "alias": "nzIcon"; "required": false; }; "nzTitle": { "alias": "nzTitle"; "required": false; }; "isMenuInsideDropDown": { "alias": "isMenuInsideDropDown"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "paddingLeft": { "alias": "paddingLeft"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "nzTriggerSubMenuAction": { "alias": "nzTriggerSubMenuAction"; "required": false; }; }, { "toggleSubMenu": "toggleSubMenu"; "subMenuMouseState": "subMenuMouseState"; }, never, ["*"], true, never>;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzSubmenuInlineChildComponent implements OnInit, OnChanges {
    private readonly elementRef;
    private readonly renderer;
    private readonly directionality;
    private readonly destroyRef;
    templateOutlet: TemplateRef<NzSafeAny> | null;
    menuClass: string;
    mode: NzMenuModeType;
    nzOpen: boolean;
    listOfCacheClassName: string[];
    expandState: string;
    dir: Direction;
    calcMotionState(): void;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubmenuInlineChildComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubmenuInlineChildComponent, "[nz-submenu-inline-child]", ["nzSubmenuInlineChild"], { "templateOutlet": { "alias": "templateOutlet"; "required": false; }; "menuClass": { "alias": "menuClass"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "nzOpen": { "alias": "nzOpen"; "required": false; }; }, {}, never, never, true, never>;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare class NzSubmenuNoneInlineChildComponent implements OnInit, OnChanges {
    private readonly directionality;
    private readonly destroyRef;
    menuClass: string;
    theme: NzMenuThemeType;
    templateOutlet: TemplateRef<NzSafeAny> | null;
    isMenuInsideDropDown: boolean;
    mode: NzMenuModeType;
    nzTriggerSubMenuAction: NzSubmenuTrigger;
    position: string;
    nzDisabled: boolean;
    nzOpen: boolean;
    readonly subMenuMouseState: EventEmitter<boolean>;
    expandState: string;
    dir: Direction;
    setMouseState(state: boolean): void;
    calcMotionState(): void;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubmenuNoneInlineChildComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubmenuNoneInlineChildComponent, "[nz-submenu-none-inline-child]", ["nzSubmenuNoneInlineChild"], { "menuClass": { "alias": "menuClass"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "templateOutlet": { "alias": "templateOutlet"; "required": false; }; "isMenuInsideDropDown": { "alias": "isMenuInsideDropDown"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "nzTriggerSubMenuAction": { "alias": "nzTriggerSubMenuAction"; "required": false; }; "position": { "alias": "position"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "nzOpen": { "alias": "nzOpen"; "required": false; }; }, { "subMenuMouseState": "subMenuMouseState"; }, never, never, true, never>;
}

declare class NzMenuModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzMenuModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzMenuModule, never, [typeof NzMenuDirective, typeof NzMenuItemComponent, typeof NzSubMenuComponent, typeof NzMenuDividerDirective, typeof NzMenuGroupComponent, typeof NzSubMenuTitleComponent, typeof NzSubmenuInlineChildComponent, typeof NzSubmenuNoneInlineChildComponent], [typeof NzMenuDirective, typeof NzMenuItemComponent, typeof NzSubMenuComponent, typeof NzMenuDividerDirective, typeof NzMenuGroupComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzMenuModule>;
}

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

declare const NzIsMenuInsideDropDownToken: InjectionToken<boolean>;
declare const NzMenuServiceLocalToken: InjectionToken<MenuService>;

export { MenuDropDownTokenFactory, MenuGroupFactory, MenuService, MenuServiceFactory, NzIsMenuInsideDropDownToken, NzMenuDirective, NzMenuDividerDirective, NzMenuGroupComponent, NzMenuItemComponent, NzMenuModule, NzMenuServiceLocalToken, NzSubMenuComponent, NzSubMenuTitleComponent, NzSubmenuInlineChildComponent, NzSubmenuNoneInlineChildComponent, NzSubmenuService };
export type { NzMenuModeType, NzMenuThemeType, NzSubmenuTrigger };
