import { AfterViewInit, ElementRef, EmbeddedViewRef, EventEmitter, Injector, OnChanges, OnDestroy, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { TemplatePortal } from '@angular/cdk/portal';
import { ConnectedPosition, Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay';
import { Subscription } from 'rxjs';
import { WindowRegistry } from '../window/window-state';
import { focusWatcher } from '../../core/utils';
import { OverlayStack, OverlayStackItem } from '../app';
import { ButtonComponent } from './button.component';
import * as i0 from "@angular/core";
export declare class DropdownComponent implements OnChanges, OnDestroy, AfterViewInit {
    protected overlayService: Overlay;
    protected injector: Injector;
    protected overlayStack: OverlayStack;
    protected viewContainerRef: ViewContainerRef;
    protected registry?: WindowRegistry | undefined;
    isOpen: boolean;
    overlayRef?: OverlayRef;
    portalViewRef?: EmbeddedViewRef<any>;
    protected lastFocusWatcher?: ReturnType<typeof focusWatcher>;
    host?: HTMLElement | ElementRef;
    allowedFocus: (HTMLElement | ElementRef)[] | (HTMLElement | ElementRef);
    /**
     * For debugging purposes.
     */
    keepOpen?: boolean;
    height?: number | string;
    width?: number | string;
    minWidth?: number | string;
    minHeight?: number | string;
    maxWidth?: number | string;
    maxHeight?: number | string;
    scrollbars: boolean;
    /**
     * Whether the dropdown aligns to the horizontal center.
     */
    center: boolean;
    /**
     * Whether is styled as overlay
     */
    overlay: boolean | '';
    show?: boolean;
    connectedPositions: ConnectedPosition[];
    showChange: EventEmitter<boolean>;
    shown: EventEmitter<any>;
    hidden: EventEmitter<any>;
    dropdownTemplate?: TemplateRef<any>;
    dropdown?: ElementRef<HTMLElement>;
    container?: TemplateRef<any> | undefined;
    relativeToInitiator?: HTMLElement;
    protected lastOverlayStackItem?: OverlayStackItem;
    protected positionStrategy?: PositionStrategy;
    protected templatePortal?: TemplatePortal;
    constructor(overlayService: Overlay, injector: Injector, overlayStack: OverlayStack, viewContainerRef: ViewContainerRef, registry?: WindowRegistry | undefined);
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    key(event: KeyboardEvent): void;
    toggle(target?: HTMLElement | ElementRef | MouseEvent): void;
    setContainer(container: TemplateRef<any> | undefined): void;
    open(target?: HTMLElement | ElementRef | MouseEvent | 'center', initiator?: HTMLElement | ElementRef | {
        x: number;
        y: number;
        width: number;
        height: number;
    }): void;
    setInitiator(initiator?: HTMLElement | ElementRef | {
        x: number;
        y: number;
        width: number;
        height: number;
    }): void;
    protected getInitiatorRelativeRect(): {
        x: number;
        y: number;
        width: number;
        height: number;
    };
    focus(): void;
    close(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, [null, null, null, null, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "dui-dropdown", never, { "host": { "alias": "host"; "required": false; }; "allowedFocus": { "alias": "allowedFocus"; "required": false; }; "keepOpen": { "alias": "keepOpen"; "required": false; }; "height": { "alias": "height"; "required": false; }; "width": { "alias": "width"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "minHeight": { "alias": "minHeight"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "scrollbars": { "alias": "scrollbars"; "required": false; }; "center": { "alias": "center"; "required": false; }; "overlay": { "alias": "overlay"; "required": false; }; "show": { "alias": "show"; "required": false; }; "connectedPositions": { "alias": "connectedPositions"; "required": false; }; }, { "showChange": "showChange"; "shown": "shown"; "hidden": "hidden"; }, never, ["*"], false, never>;
}
/**
 * A directive to open the given dropdown on regular left click.
 */
export declare class OpenDropdownDirective implements AfterViewInit, OnDestroy {
    protected elementRef: ElementRef;
    protected button?: ButtonComponent | undefined;
    openDropdown?: DropdownComponent;
    openSub?: Subscription;
    hiddenSub?: Subscription;
    constructor(elementRef: ElementRef, button?: ButtonComponent | undefined);
    ngOnDestroy(): void;
    ngAfterViewInit(): void;
    onClick(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<OpenDropdownDirective, [null, { optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<OpenDropdownDirective, "[openDropdown]", never, { "openDropdown": { "alias": "openDropdown"; "required": false; }; }, {}, never, never, false, never>;
}
/**
 * A directive to open the given dropdown on mouseenter, and closes automatically on mouseleave.
 * Dropdown keeps open when mouse enters the dropdown
 */
export declare class OpenDropdownHoverDirective implements OnDestroy {
    protected elementRef: ElementRef;
    openDropdownHover?: DropdownComponent;
    /**
     * In milliseconds.
     */
    openDropdownHoverCloseTimeout: number;
    protected hiddenSub?: Subscription;
    protected lastHide?: ReturnType<typeof setTimeout>;
    protected enter: () => void;
    protected leave: () => void;
    constructor(elementRef: ElementRef);
    ngOnDestroy(): void;
    protected cleanup(): void;
    onHover(): void;
    onLeave(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<OpenDropdownHoverDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<OpenDropdownHoverDirective, "[openDropdownHover]", never, { "openDropdownHover": { "alias": "openDropdownHover"; "required": false; }; "openDropdownHoverCloseTimeout": { "alias": "openDropdownHoverCloseTimeout"; "required": false; }; }, {}, never, never, false, never>;
}
/**
 * A directive to open the given dropdown upon right click / context menu.
 */
export declare class ContextDropdownDirective {
    contextDropdown?: DropdownComponent;
    onClick($event: MouseEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<ContextDropdownDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<ContextDropdownDirective, "[contextDropdown]", never, { "contextDropdown": { "alias": "contextDropdown"; "required": false; }; }, {}, never, never, false, never>;
}
export declare class DropdownSplitterComponent {
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownSplitterComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DropdownSplitterComponent, "dui-dropdown-splitter,dui-dropdown-separator", never, {}, {}, never, never, false, never>;
}
/**
 * This directive is necessary if you want to load and render the dialog content
 * only when opening the dialog. Without it, it is immediately rendered, which can cause
 * performance and injection issues.
 *
 * ```typescript
 * <dui-dropdown>
 *     <ng-container *dropdownContainer>
 *         Dynamically created upon dropdown instantiation.
 *     </ng-container>
 * </dui-dropdown>
 *
 * ```
 */
export declare class DropdownContainerDirective {
    protected dropdown: DropdownComponent;
    template: TemplateRef<any>;
    constructor(dropdown: DropdownComponent, template: TemplateRef<any>);
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownContainerDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownContainerDirective, "[dropdownContainer]", never, {}, {}, never, never, false, never>;
}
export declare class DropdownItemComponent {
    protected dropdown: DropdownComponent;
    selected: boolean;
    disabled: boolean | '';
    closeOnClick: boolean;
    constructor(dropdown: DropdownComponent);
    onClick(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DropdownItemComponent, "dui-dropdown-item", never, { "selected": { "alias": "selected"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; }; }, {}, never, ["*"], false, never>;
}
