import { IEventEmitter } from '@breadstone/mosaik-elements';
import { ISlottable } from '../../../Behaviors/Slottable';
import { CustomElement } from '../../Abstracts/CustomElement';
import type { IConnectedCallback } from '../../Abstracts/Interfaces/IConnectedCallback';
import type { IDisconnectedCallback } from '../../Abstracts/Interfaces/IDisconnectedCallback';
import type { IPortalAttachedEventDetail } from './Events/IPortalAttachedEvent';
import type { IPortalDetachedEventDetail } from './Events/IPortalDetachedEvent';
import type { IPortalElementProps } from './IPortalElementProps';
import { PortalProjectionElement } from './PortalProjectionElement';
/**
 * Represents the `{@link IPortalElementEvents}` interface.
 *
 * @public
 */
export interface IPortalElementEvents {
    attached: IEventEmitter<IPortalAttachedEventDetail>;
    detached: IEventEmitter<IPortalDetachedEventDetail>;
}
declare const PortalElement_base: import("../../../../Index").ControlBehaviorReturn<typeof CustomElement, import("../../../Behaviors/Slottable").ISlottableProps & ISlottable>;
/**
 * Portal - A mechanism to render content outside its parent component's DOM hierarchy.
 *
 * @element mosaik-portal
 * @fires portalAttached - Fired when the portal is attached to the DOM.
 * @fires portalDetached - Fired when the portal is detached from the DOM.
 *
 * @public
 */
export declare class PortalElement extends PortalElement_base implements IConnectedCallback, IDisconnectedCallback, IPortalElementProps, IPortalElementEvents, ISlottable {
    private readonly _attached;
    private readonly _detached;
    private _projection;
    private _destination;
    private _adoptedStyles;
    private _isProjected;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `is` property.
     *
     * @public
     * @static
     * @readonly
    */
    static get is(): string;
    /**
     * Gets or sets the `destination` property.
     *
     * @public
     * @attr
     */
    get destination(): string | Element;
    set destination(value: string | Element);
    /**
     * Gets or sets the `adoptedStyles` property.
     *
     * @public
     */
    get adoptedStyles(): Array<CSSStyleSheet> | undefined;
    set adoptedStyles(value: Array<CSSStyleSheet> | undefined);
    /**
     * Gets or sets the `isProjected` property.
     *
     * @public
     * @attr
     * @readonly
     */
    get isProjected(): boolean;
    private set isProjected(value);
    /**
     * Gets the `projection` property.
     *
     * @public
     * @readonly
     */
    get projection(): PortalProjectionElement | null;
    /**
     * Called when a projection is attached to the DOM.
     * Provides reference to `IPortalAttachedEventDetail` as event argument.
     *
     * @public
     * @readonly
     * @eventProperty
     * @type IEventEmitter<IPortalAttachedEventDetail>
     */
    get attached(): IEventEmitter<IPortalAttachedEventDetail>;
    /**
     * Called when a projection is detached from the DOM.
     * Provides reference to `IPortalDetachedEventDetail` as event argument.
     *
     * @public
     * @readonly
     * @eventProperty
     * @type IEventEmitter<IPortalDetachedEventDetail>
     */
    get detached(): IEventEmitter<IPortalDetachedEventDetail>;
    /**
     * @public
     * @overload
     */
    onSlotChanges(slotName?: string): void;
    /**
     * @public
     * @override
     */
    disconnectedCallback(): void;
    /**
     * @protected
     * @override
     */
    protected onApplyTemplate(): void;
    /**
     * @protected
     */
    protected attach(): void;
    /**
     * @protected
     */
    protected detach(): void;
    /**
     * @private
     */
    private getDestination;
    /**
     * @private
     */
    private createProjection;
    /**
     * @private
     */
    private appendElements;
}
/**
 * @public
 */
export declare namespace PortalElement {
    type Props = IPortalElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-portal': PortalElement;
    }
}
export {};
//# sourceMappingURL=PortalElement.d.ts.map