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

/**
 * 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 routerLink;
    private readonly router;
    protected readonly isMenuInsideDropdown: boolean;
    level: number;
    selected$: Subject<boolean>;
    inlinePaddingLeft: number | null;
    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 isMenuInsideDropdown;
    private readonly nzHostSubmenuService;
    mode$: Observable<NzMenuModeType>;
    level: number;
    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;
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    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: 'left' | 'right';
    triggerWidth: number | null;
    theme: NzMenuThemeType;
    mode: NzMenuModeType;
    inlinePaddingLeft: number | null;
    overlayPositions: _angular_cdk_overlay.ConnectionPositionPair[];
    isSelected: boolean;
    isActive: boolean;
    /** 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;
}

declare class NzMenuDirective implements AfterContentInit, OnInit, OnChanges {
    private readonly nzMenuService;
    private readonly destroyRef;
    private readonly cdr;
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    protected readonly isMenuInsideDropdown: boolean;
    listOfNzMenuItemDirective: QueryList<NzMenuItemComponent>;
    listOfNzSubMenuComponent: QueryList<NzSubMenuComponent>;
    nzInlineIndent: number;
    nzTheme: NzMenuThemeType;
    nzMode: NzMenuModeType;
    nzInlineCollapsed: boolean;
    nzSelectable: boolean;
    readonly nzClick: EventEmitter<NzMenuItemComponent>;
    actualMode: NzMenuModeType;
    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 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>;
}

declare class NzSubMenuTitleComponent {
    protected readonly isMenuInsideDropdown: boolean;
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    nzIcon: string | null;
    nzTitle: string | TemplateRef<void> | null;
    nzDisabled: boolean;
    paddingLeft: number | null;
    mode: NzMenuModeType;
    nzTriggerSubMenuAction: NzSubmenuTrigger;
    readonly toggleSubMenu: EventEmitter<any>;
    readonly subMenuMouseState: EventEmitter<boolean>;
    protected setMouseState(state: boolean): void;
    protected 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; }; "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>;
}

declare class NzSubmenuInlineChildComponent {
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    readonly menuClass: i0.InputSignal<string>;
    readonly open: i0.InputSignal<boolean>;
    readonly leavedClassName: i0.InputSignal<string>;
    protected readonly mergedClass: i0.Signal<string[]>;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubmenuInlineChildComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubmenuInlineChildComponent, "[nz-submenu-inline-child]", ["nzSubmenuInlineChild"], { "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "leavedClassName": { "alias": "leavedClassName"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.NzAnimationCollapseDirective; inputs: { "open": "open"; "leavedClassName": "leavedClassName"; }; outputs: {}; }]>;
}

declare class NzSubmenuNoneInlineChildComponent {
    protected readonly isMenuInsideDropdown: boolean;
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    readonly menuClass: i0.InputSignal<string>;
    readonly theme: i0.InputSignal<NzMenuThemeType>;
    readonly mode: i0.InputSignal<"vertical" | "horizontal">;
    readonly position: i0.InputSignal<"right" | "left">;
    readonly open: i0.InputSignal<boolean>;
    readonly nzDisabled: i0.InputSignal<boolean>;
    readonly nzTriggerSubMenuAction: i0.InputSignal<NzSubmenuTrigger>;
    readonly subMenuMouseState: i0.OutputEmitterRef<boolean>;
    protected readonly animationEnter: i0.Signal<string>;
    protected readonly animationLeave: i0.Signal<string>;
    protected readonly submenuClass: i0.Signal<string[]>;
    protected readonly mergedMenuClass: i0.Signal<string[]>;
    protected setMouseState(state: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzSubmenuNoneInlineChildComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzSubmenuNoneInlineChildComponent, "[nz-submenu-none-inline-child]", ["nzSubmenuNoneInlineChild"], { "menuClass": { "alias": "menuClass"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; "isSignal": true; }; "nzTriggerSubMenuAction": { "alias": "nzTriggerSubMenuAction"; "required": false; "isSignal": true; }; }, { "subMenuMouseState": "subMenuMouseState"; }, 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
 */

/**
 * A flag to mark if the menu is inside a dropdown.
 * @note Internally used only, please do not use it.
 */
declare const NzIsMenuInsideDropdownToken: InjectionToken<boolean>;
/**
 * A token to hold the local {@link MenuService} instance. This is used for nested menu.
 * @note Internally used only, please do not use it.
 */
declare const NzMenuServiceLocalToken: InjectionToken<MenuService>;

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