import { ControllerBase, type ControllerHost } from '../../../Controllers/Abstracts/ControllerBase';
/**
 * Represents the `IProjectionControllerConfig` type.
 *
 * @public
 */
export interface IProjectionControllerConfig {
    /**
     * Optional name of the slot in the host. Default is unnamed slot.
     */
    slotName?: string;
    /**
     * CSS selector to find the projection target inside the portal.
     * This is where the projected content will be rendered.
     */
    targetSelector: string;
    /**
     * Optional callback that is called when elements are projected.
     * It receives the array of projected elements.
     */
    projecting?: (element: HTMLElement) => void;
}
/**
 * A controller that observes content projected into a slot in the host,
 * removes the DOM nodes from the host, and transfers them into a render target
 * inside a portal component.
 *
 * @public
 */
export declare class ProjectionController extends ControllerBase {
    private readonly _slotController;
    private readonly _slotName;
    private readonly _targetSelector;
    private readonly _observer;
    private readonly _elements;
    private readonly _projectingFn?;
    private readonly _portalAttachedHandler;
    private readonly _slotListeners;
    private _portal;
    private _initialized;
    constructor(host: ControllerHost, options: IProjectionControllerConfig);
    /**
     * Returns projected elements.
     *
     * @public
     */
    get elements(): Array<HTMLElement>;
    /**
     * @public
     * @override
     */
    hostConnected(): void;
    /**
     * @public
     * @override
     */
    hostFirstUpdated(): void;
    /**
     * @public
     * @override
     */
    hostDisconnected(): void;
    /**
     * Sets up the portal attached event listener.
     *
     * @private
     */
    private setupPortalListener;
    /**
     * Cleans up the portal attached event listener.
     *
     * @private
     */
    private cleanupPortalListener;
    /**
     * @private
     */
    private projectContent;
    /**
     * Gets elements from the host's light DOM that match the slot name.
     * When a child is an `HTMLSlotElement` (originating from an outer shadow
     * root), it is resolved to its `assignedElements` so that the actual
     * content — not the slot itself — is projected into the portal. The
     * `<slot>` element stays in the DOM to keep the outer shadow root intact.
     *
     * @private
     */
    private getLightDomElements;
    /**
     * Adds a `slotchange` listener to a discovered `<slot>` element so that
     * changes to the outer component's slotted content trigger re-projection.
     *
     * @private
     */
    private observeSlotElement;
    /**
     * Removes all `slotchange` listeners that were added to discovered
     * `<slot>` elements.
     *
     * @private
     */
    private cleanupSlotListeners;
}
//# sourceMappingURL=ProjectionController.d.ts.map