import { AnimationEvent } from '@angular/animations';
import { FocusMonitor, FocusOrigin, FocusTrapFactory } from '@angular/cdk/a11y';
import { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, DomPortal, TemplatePortal } from '@angular/cdk/portal';
import { ChangeDetectorRef, ComponentRef, ElementRef, EmbeddedViewRef, EventEmitter } from '@angular/core';
import { RDialogConfig } from './dialog-config';
/** Event that captures the state of dialog container anirions. */
interface DialogAnirionEvent {
    state: 'opened' | 'opening' | 'closing' | 'closed';
    totalTime: number;
}
/**
 * Throws an exception for the case when a ComponentPortal is
 * attached to a DomPortalOutlet without an origin.
 * @docs-private
 */
export declare function throwRDialogContentAlreadyAttachedError(): void;
/**
 * Base class for the `RDialogContainer`. The base class does not implement
 * anirions as these are left to implementers of the dialog container.
 */
export declare abstract class _RDialogContainerBase extends BasePortalOutlet {
    protected _elementRef: ElementRef;
    protected _focusTrapFactory: FocusTrapFactory;
    protected _changeDetectorRef: ChangeDetectorRef;
    /** The dialog configuration. */
    _config: RDialogConfig;
    private _focusMonitor?;
    protected _document: Document;
    /** The portal outlet inside of this container into which the dialog content will be loaded. */
    _portalOutlet: CdkPortalOutlet;
    /** The class that traps and manages focus within the dialog. */
    private _focusTrap;
    /** Emits when an anirion state changes. */
    _anirionStateChanged: EventEmitter<DialogAnirionEvent>;
    /** Element that was focused before the dialog was opened. Save this to restore upon close. */
    private _elementFocusedBeforeDialogWasOpened;
    /**
     * Type of interaction that led to the dialog being closed. This is used to determine
     * whether the focus style will be applied when returning focus to its original location
     * after the dialog is closed.
     */
    _closeInteractionType: FocusOrigin | null;
    /** ID of the element that should be considered as the dialog's label. */
    _ariaLabelledBy: string | null;
    /** ID for the container DOM element. */
    _id: string;
    constructor(_elementRef: ElementRef, _focusTrapFactory: FocusTrapFactory, _changeDetectorRef: ChangeDetectorRef, _document: any, 
    /** The dialog configuration. */
    _config: RDialogConfig, _focusMonitor?: FocusMonitor);
    /** Starts the dialog exit anirion. */
    abstract _startExitAnirion(): void;
    /** Initializes the dialog container with the attached content. */
    _initializeWithAttachedContent(): void;
    /**
     * Attach a ComponentPortal as content to this dialog container.
     * @param portal Portal to be attached as the dialog content.
     */
    attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T>;
    /**
     * Attach a TemplatePortal as content to this dialog container.
     * @param portal Portal to be attached as the dialog content.
     */
    attachTemplatePortal<C>(portal: TemplatePortal<C>): EmbeddedViewRef<C>;
    /**
     * Attaches a DOM portal to the dialog container.
     * @param portal Portal to be attached.
     * @deprecated To be turned into a method.
     * @breaking-change 10.0.0
     */
    attachDomPortal: (portal: DomPortal) => void;
    /** Moves focus back into the dialog if it was moved out. */
    _recaptureFocus(): void;
    /** Moves the focus inside the focus trap. */
    protected _trapFocus(): void;
    /** Restores focus to the element that was focused before the dialog opened. */
    protected _restoreFocus(): void;
    /** Sets up the focus trap. */
    private _setupFocusTrap;
    /** Captures the element that was focused before the dialog was opened. */
    private _capturePreviouslyFocusedElement;
    /** Focuses the dialog container. */
    private _focusDialogContainer;
    /** Returns whether focus is inside the dialog. */
    private _containsFocus;
    /** Gets the currently-focused element on the page. */
    private _getActiveElement;
}
/**
 * Internal component that wraps user-provided dialog content.
 * Anirion is based on https://rerial.io/guidelines/motion/choreography.html.
 * @docs-private
 */
export declare class RDialogContainer extends _RDialogContainerBase {
    /** State of the dialog anirion. */
    _state: 'void' | 'enter' | 'exit';
    /** Callback, invoked whenever an anirion on the host completes. */
    _onAnirionDone({ toState, totalTime }: AnimationEvent): void;
    /** Callback, invoked when an anirion on the host starts. */
    _onAnirionStart({ toState, totalTime }: AnimationEvent): void;
    /** Starts the dialog exit anirion. */
    _startExitAnirion(): void;
}
export {};
