import { ComponentFactoryResolver, ComponentRef, NgZone, Type } from '@angular/core';
import { Subject, BehaviorSubject, Observable } from 'rxjs';
import { ElAdjustableConnectedPositionStrategy } from '../overlay-position';
import { ElRenderableContainer } from '../overlay-container';
import { ElOverlayContent, ElOverlayService } from '../overlay-service';
import { ElOverlayRef, ElOverlayContainer, ElOverlayConfig } from '../mapping';
export interface ElDynamicOverlayController {
    show(): any;
    hide(): any;
    toggle(): any;
    rebuild(): any;
}
export declare class ElDynamicOverlay {
    protected overlay: ElOverlayService;
    protected componentFactoryResolver: ComponentFactoryResolver;
    protected zone: NgZone;
    protected overlayContainer: ElOverlayContainer;
    protected ref: ElOverlayRef;
    protected container: ComponentRef<ElRenderableContainer>;
    protected componentType: Type<ElRenderableContainer>;
    protected context: Object;
    protected content: ElOverlayContent;
    protected positionStrategy: ElAdjustableConnectedPositionStrategy;
    protected overlayConfig: ElOverlayConfig;
    protected positionStrategyChange$: Subject<{}>;
    protected isShown$: BehaviorSubject<boolean>;
    protected alive: boolean;
    readonly isAttached: boolean;
    readonly isShown: Observable<boolean>;
    constructor(overlay: ElOverlayService, componentFactoryResolver: ComponentFactoryResolver, zone: NgZone, overlayContainer: ElOverlayContainer);
    create(componentType: Type<ElRenderableContainer>, content: ElOverlayContent, context: Object, positionStrategy: ElAdjustableConnectedPositionStrategy, overlayConfig?: ElOverlayConfig): this;
    setContent(content: ElOverlayContent): void;
    setContext(context: Object): void;
    setContentAndContext(content: ElOverlayContent, context: Object): void;
    setComponent(componentType: Type<ElRenderableContainer>): void;
    setPositionStrategy(positionStrategy: ElAdjustableConnectedPositionStrategy): void;
    setOverlayConfig(overlayConfig: ElOverlayConfig): void;
    show(): any;
    hide(): void;
    toggle(): void;
    dispose(): void;
    getContainer(): ComponentRef<ElRenderableContainer>;
    protected createOverlay(): void;
    protected renderContainer(): void;
    protected updateContext(): void;
    protected createContainerContext(): Object;
    /**
     * Dimensions of the container may change after content update. So we listen to zone.stable event to
     * reposition the container.
     */
    protected updatePositionWhenStable(): void;
    protected hasOverlayInContainer(): boolean;
    protected disposeOverlayRef(): void;
}
