export interface Async<T> {
    value?: T;
    error?: any;
    loading?: boolean;
}
export declare abstract class BaseComponent<Data, Options> {
    readonly container: HTMLElement;
    protected data: Async<Data>;
    protected options: Options;
    constructor(container: HTMLElement, data: Async<Data>, options: Options);
    updateData(newData: Async<Data>): void;
    updateOptions(newOptions: Options): void;
    destroy(): void;
    protected abstract onCreate(): void;
    protected abstract onDataUpdated(oldData: Async<Data>): void;
    protected abstract onOptionsUpdated(oldOptions: Options): void;
    protected abstract onDestroy(): void;
}
export declare type HandleFilterCallback = (newFilter: string | null) => void;
export declare abstract class BaseFilter<Options> {
    readonly container: HTMLElement;
    protected handleFilter: HandleFilterCallback;
    protected options: Options;
    constructor(container: HTMLElement, handleFilter: HandleFilterCallback, options: Options);
    updateHandleFilter(newHandleFilter: HandleFilterCallback): void;
    updateOptions(newOptions: Options): void;
    destroy(): void;
    protected abstract onCreate(): void;
    protected abstract onHandleFilterUpdated(oldHandleFilter: HandleFilterCallback): void;
    protected abstract onOptionsUpdated(oldOptions: Options): void;
    protected abstract onDestroy(): void;
}
