import * as i0 from '@angular/core';
import { AfterContentInit, ViewContainerRef, EventEmitter, AnimationCallbackEvent, TemplateRef, AfterViewInit, OnChanges, ElementRef, SimpleChanges, EmbeddedViewRef } from '@angular/core';
import { NzConfigService, NzConfigKey } from 'ng-zorro-antd/core/config';
import { NzSafeAny, IndexableObject } from 'ng-zorro-antd/core/types';
import * as rxjs from 'rxjs';
import { BehaviorSubject } from 'rxjs';
import * as _angular_cdk_bidi from '@angular/cdk/bidi';
import { NzNoAnimationDirective } from 'ng-zorro-antd/core/animation';
import * as i5 from 'ng-zorro-antd/menu';
import { MenuService } from 'ng-zorro-antd/menu';

type NzPlacementType = 'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight';
declare class NzDropdownMenuComponent implements AfterContentInit {
    readonly viewContainerRef: ViewContainerRef;
    readonly nzMenuService: MenuService;
    private readonly cdr;
    private readonly elementRef;
    private readonly renderer;
    protected readonly dir: i0.WritableSignal<_angular_cdk_bidi.Direction>;
    protected readonly noAnimation: NzNoAnimationDirective | null;
    isChildSubMenuOpen$: BehaviorSubject<boolean>;
    descendantMenuItemClick$: rxjs.Subject<any>;
    mouseState$: BehaviorSubject<boolean>;
    animationStateChange$: EventEmitter<AnimationCallbackEvent>;
    templateRef: TemplateRef<NzSafeAny>;
    nzOverlayClassName: string;
    nzOverlayStyle: IndexableObject;
    nzArrow: boolean;
    placement: NzPlacementType | 'bottom' | 'top';
    protected readonly dropdownAnimationEnter: i0.Signal<string>;
    protected readonly dropdownAnimationLeave: i0.Signal<string>;
    onAnimationEvent(event: AnimationCallbackEvent): void;
    setMouseState(visible: boolean): void;
    setValue<T extends keyof NzDropdownMenuComponent>(key: T, value: this[T]): void;
    ngAfterContentInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDropdownMenuComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzDropdownMenuComponent, "nz-dropdown-menu", ["nzDropdownMenu"], {}, {}, never, ["*"], true, never>;
}

declare class NzDropdownDirective implements AfterViewInit, OnChanges {
    readonly nzConfigService: NzConfigService;
    private renderer;
    private viewContainerRef;
    private platform;
    private destroyRef;
    readonly _nzModuleName: NzConfigKey;
    elementRef: ElementRef<any>;
    private injector;
    private portal?;
    private overlayRef;
    private inputVisible$;
    private nzTrigger$;
    private overlayClose$;
    nzDropdownMenu: NzDropdownMenuComponent | null;
    nzTrigger: 'click' | 'hover';
    nzMatchWidthElement: ElementRef | null;
    nzBackdrop: boolean;
    nzClickHide: boolean;
    nzDisabled: boolean;
    nzVisible: boolean;
    nzArrow: boolean;
    nzOverlayClassName: string;
    nzOverlayStyle: IndexableObject;
    nzPlacement: NzPlacementType;
    readonly nzVisibleChange: EventEmitter<boolean>;
    constructor();
    setDropdownMenuValue<T extends keyof NzDropdownMenuComponent>(key: T, value: NzDropdownMenuComponent[T]): void;
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDropdownDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzDropdownDirective, "[nz-dropdown]", ["nzDropdown"], { "nzDropdownMenu": { "alias": "nzDropdownMenu"; "required": false; }; "nzTrigger": { "alias": "nzTrigger"; "required": false; }; "nzMatchWidthElement": { "alias": "nzMatchWidthElement"; "required": false; }; "nzBackdrop": { "alias": "nzBackdrop"; "required": false; }; "nzClickHide": { "alias": "nzClickHide"; "required": false; }; "nzDisabled": { "alias": "nzDisabled"; "required": false; }; "nzVisible": { "alias": "nzVisible"; "required": false; }; "nzArrow": { "alias": "nzArrow"; "required": false; }; "nzOverlayClassName": { "alias": "nzOverlayClassName"; "required": false; }; "nzOverlayStyle": { "alias": "nzOverlayStyle"; "required": false; }; "nzPlacement": { "alias": "nzPlacement"; "required": false; }; }, { "nzVisibleChange": "nzVisibleChange"; }, never, never, true, never>;
    static ngAcceptInputType_nzBackdrop: unknown;
    static ngAcceptInputType_nzClickHide: unknown;
    static ngAcceptInputType_nzDisabled: unknown;
    static ngAcceptInputType_nzVisible: unknown;
    static ngAcceptInputType_nzArrow: unknown;
}

declare class NzDropdownADirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDropdownADirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzDropdownADirective, "a[nz-dropdown]", never, {}, {}, never, never, true, never>;
}

declare class NzContextMenuServiceModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzContextMenuServiceModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzContextMenuServiceModule, never, never, never>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzContextMenuServiceModule>;
}

declare class NzDropdownModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzDropdownModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzDropdownModule, never, [typeof NzDropdownDirective, typeof NzDropdownADirective, typeof NzDropdownMenuComponent, typeof NzContextMenuServiceModule], [typeof i5.NzMenuModule, typeof NzDropdownDirective, typeof NzDropdownADirective, typeof NzDropdownMenuComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzDropdownModule>;
}

declare class NzContextMenuService {
    private ngZone;
    private injector;
    private overlayRef;
    private closeSubscription;
    create($event: MouseEvent | {
        x: number;
        y: number;
    }, nzDropdownMenuComponent: NzDropdownMenuComponent): EmbeddedViewRef<NzSafeAny>;
    close(clear?: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzContextMenuService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<NzContextMenuService>;
}

export { NzContextMenuService, NzContextMenuServiceModule, NzDropdownADirective, NzDropdownDirective, NzDropdownMenuComponent, NzDropdownModule };
export type { NzPlacementType };
