import type { ReactiveController, ReactiveControllerHost } from 'lit';
import type { ItemTarget } from '../layout/item-layout-utils';
export type TemplateContent = DocumentFragment;
type BaseTemplateHost = ReactiveControllerHost & HTMLElement & {
    error?: Error;
};
interface Template<TCondition> {
    conditions: TCondition[];
    content: TemplateContent;
    linkContent?: TemplateContent;
    priority: number;
}
export declare abstract class BaseTemplateController<TCondition> implements ReactiveController {
    protected host: BaseTemplateHost;
    private validParents;
    private allowEmpty;
    private static readonly ERRORS;
    private gridCellLinkTarget?;
    matchConditions: TCondition[];
    constructor(host: BaseTemplateHost, validParents: string[], allowEmpty?: boolean);
    hostConnected(): void;
    getLinkTemplateElement(host: HTMLElement): HTMLTemplateElement;
    protected abstract getDefaultLinkTemplateElement(): HTMLTemplateElement;
    protected getBaseTemplate(conditions: TCondition[]): Template<TCondition> | null;
    protected get currentGridCellLinkTarget(): ItemTarget | undefined;
    private setError;
    private get parentElement();
    private get template();
    private parentAttr;
    private validateTemplate;
    private getWarnings;
    private getTemplateElement;
    private groupNodesByType;
    private getTemplateNodeType;
}
export {};
