import '../modules/zoom-listener';
import { VirtualElement } from './';
export declare const DEFAULT_ITEM_SIZE = 50;
/**
 * @deprecated
 */
export declare enum DIRECTION {
    VERTICAL = "vertical",
    HORIZONTAL = "horizontal"
}
export interface Reusable<T> {
    wrapperElement: HTMLElement;
    renderer: VanillaRecyclerViewRenderer<T>;
}
export interface SizeParams<T> {
    api: VanillaRecyclerView<T>;
    data: T;
    index: number;
}
export interface InitializeParams<T> {
    api: VanillaRecyclerView<T>;
    data: T;
    index: number;
}
export interface MountParams<T> {
    api: VanillaRecyclerView<T>;
    data: T;
    index: number;
}
export interface UnmountParams<T> {
    api: VanillaRecyclerView<T>;
    data: T;
    index: number;
}
export interface VanillaRecyclerViewRenderer<T> {
    initialize: (params: InitializeParams<T>) => void;
    getLayout: () => HTMLElement;
    getId?: () => string;
    getPosition?: () => string;
    onMount?: (params: MountParams<T>) => boolean;
    onUnmount?: (params: UnmountParams<T>) => void;
}
export interface RendererConstructor<T> {
    new (): VanillaRecyclerViewRenderer<T>;
}
export interface VanillaRecyclerViewOptions<T> {
    data: T[];
    direction?: DIRECTION;
    preload?: number;
    /**
     * @deprecated
     */
    size?: ((params: SizeParams<T>) => number) | number;
    renderer: RendererConstructor<T>;
}
export interface VanillaRecyclerViewAPI<T> {
    calculateSize: () => void;
    getMaxScrollSize: () => number;
    splice: (start: number, end?: number) => void;
    insert: (index: number, ...data: T[]) => void;
    push: (...items: T[]) => void;
}
export declare class VanillaRecyclerView<T> implements VanillaRecyclerViewAPI<T> {
    private root;
    _direction: DIRECTION;
    _preload: number;
    _size: ((params: SizeParams<T>) => number) | number;
    _renderer: RendererConstructor<T>;
    container: HTMLDivElement;
    virtualElements: VirtualElement<T>[];
    mountedVirtualElements: VirtualElement<T>[];
    pendingUnmount: VirtualElement<T>[];
    reusables: Reusable<T>[];
    constructor(root: HTMLDivElement, options: VanillaRecyclerViewOptions<T>);
    private onScroll;
    /**
     * parse size option
     * @param data
     */
    private getSize;
    private createReusable;
    private getNextReusable;
    setData(data: T[]): void;
    calculateSize(): void;
    getMaxScrollSize(): number;
    /**
     * @deprecated
     */
    splice(start: number, end?: number): void;
    /**
     * @deprecated
     */
    insert(index: number, ...data: T[]): void;
    /**
     * @deprecated
     */
    push(...items: T[]): void;
}
//# sourceMappingURL=recycler-view.d.ts.map