import type { CustomElement } from '../../Components/Abstracts/CustomElement';
import { ControllerBase } from './ControllerBase';
/**
 * The config options for the `ElementController`.
 *
 * @public
 */
export interface IElementControllerConfig<TElement extends HTMLElement> {
    queries?: Record<string, string>;
}
export interface IElementFacade {
    readonly name: string;
}
/**
 * The abstract `ElementController` class.
 *
 * @public
 * @abstract
 */
export declare abstract class ElementController<TElement extends HTMLElement, TElementFacade extends IElementFacade> extends ControllerBase<CustomElement> {
    private readonly _config;
    /**
     * Constructs a new instance of the `ElementController` class.
     *
     * @public
     */
    constructor(host: CustomElement, config: IElementControllerConfig<TElement>);
    /**
     * Abstract method to get a typed element with `TWrapper` functionality.
     *
     * @public
     * @abstract
     * @param name - The name of the element.
     * @returns An element of type `TWrapper`, or `null` if not und.
     */
    get(name: string): TElementFacade | null;
    /**
     * Abstract method to get a typed element with `TWrapper` functionality asynchronously.
     *
     * @public
     * @param name - The name of the element.
     * @returns A promise that resolves with an element of type `TWrapper`, or `null` if not und.
     */
    getAsync(name: string): Promise<TElementFacade | null>;
    /**
     * Abstract method to map an element to a `TWrapper` type.
     *
     * @public
     * @abstract
     * @param element - The element to map.
     * @returns An element of type `TWrapper
     */
    protected abstract map(element: TElement): TElementFacade;
    /**
     * @private
     */
    private tryQueryElement;
    /**
     * @private
     */
    private tryQueryElementAsync;
}
//# sourceMappingURL=ElementController.d.ts.map