import type { LitElement, ReactiveController, ReactiveControllerHost } from 'lit';
import type { ItemRenderingFunction } from '../item-list/item-list-common';
import type { AnyItem } from '../item-list/unfolded-item';
import type { ItemDisplayDensity, ItemDisplayImageSize, ItemDisplayLayout } from './item-layout-utils';
import { type ItemLayoutConfig } from './item-layout-utils';
export interface ItemLayoutHost extends ReactiveControllerHost {
    shadowRoot?: ShadowRoot | null;
}
interface LayoutDisplayConfig {
    display: ItemDisplayLayout;
    density: ItemDisplayDensity;
    imageSize: ItemDisplayImageSize;
}
export interface ItemLayoutOptions {
    elementPrefix: string;
    renderingFunction: () => ItemRenderingFunction<AnyItem> | undefined;
    content: () => ParentNode | undefined;
    layoutConfig: () => LayoutDisplayConfig;
    itemClasses: () => string;
    /**
     * When true, the controller only computes classes without automatically
     * applying them to child elements during hostUpdated.
     * Useful for components that don't need class propagation to child elements.
     */
    classesOnly?: boolean;
}
/**
 * A reactive controller that manages layout creation and class application for item components.
 */
export declare class ItemLayoutController implements ReactiveController {
    private host;
    private options;
    private layout;
    constructor(host: ItemLayoutHost & LitElement, options: ItemLayoutOptions);
    hostConnected(): void;
    hostUpdated(): void;
    /**
     * Gets the current layout config
     */
    getLayout(): ItemLayoutConfig | null;
    /**
     * Gets combined layout and extra classes
     */
    getCombinedClasses(additionalContent?: string): string[];
    /**
     * Applies layout classes to a specific element (useful for custom rendering)
     */
    applyLayoutClassesToElement(element: HTMLElement, additionalContent?: string): void;
    private applyLayoutClasses;
    private createLayout;
    private hasCustomRenderFunction;
    private addClassesToElements;
    private observeAndApplyClasses;
}
export {};
