import Component from "@egjs/component";
import { DiffResult } from "@egjs/list-differ";
export interface RendererItem {
    key: string | number;
    renderKey?: string;
    element?: Element | null;
}
export interface OnRendererUpdated<T extends RendererItem = RendererItem> {
    items: T[];
    elements: Element[];
    isChanged: boolean;
    isItemChanged: boolean;
    state: Record<string, any>;
    diffResult: DiffResult<T>;
}
export interface OnRendererUpdate {
    state: Record<string, any>;
}
export interface RendererEvents<T extends RendererItem = RendererItem> {
    update: OnRendererUpdate;
    updated: OnRendererUpdated<T>;
    requestUpdate: OnRendererUpdate;
}
export declare class Renderer<Item extends RendererItem = RendererItem> extends Component<RendererEvents> {
    protected items: Item[];
    protected container: Element | null;
    protected rendererKey: number;
    private _diffResult;
    private _updateTimer;
    private _state;
    private _isItemChanged;
    updateKey(): void;
    getItems(): Item[];
    setContainer(container: Element): void;
    render(nextItems: Item[], state?: Record<string, any>): DiffResult<Item>;
    update(state?: Record<string, any>): void;
    updated(nextElements?: ArrayLike<Element>): boolean;
    syncItems(items: Item[], state?: Record<string, any>): DiffResult<Item>;
    destroy(): void;
}
