import { IListPageRender } from "../interface/list"; type TListFn = (inp: ReadonlyArray) => ReadonlyArray; export declare class ListController { private dataLoader; /** Number of items in each "block" */ protected static readonly BLOCK_SIZE = 25; /** Number of "blocks" to render */ private static readonly BLOCK_RANGE; /** Clamp value to a range, min takes priority over max */ protected static clampRange(min: number, value: number, max: number): number; /** Factory for a ListController that loads all data at once */ static single(load: () => Promise): ListController; /** Factory for a ListController that loads data in pages */ static paging(load: (offset: number, limit: number) => Promise): ListController; private readonly dataStore; get data(): ReadonlyArray; private sortFn; private sortedDataStore; get sortedData(): ReadonlyArray; private filterFn; private filteredDataStore; get filteredData(): ReadonlyArray; /** Number of blocks that can be made from filtered data */ protected get availableBlocks(): number; protected readonly blockStore: ReadonlyArray[]; private scrollPct; protected startBlock: number; protected endBlock: number; private loadMore; private isLoading; get loading(): boolean; private bufferReload; setSort(sortFn: TListFn): void; applySort(): void; setFilter(filterFn: TListFn): void; applyFilter(): void; reload(): void; /** Update visible page range, trigger redraw if range has changed */ updateScroll(percentage: number): void; updateDataStore(data: T[], hasMore?: boolean): void; render(callback: (params: IListPageRender) => C): C[]; debug(): { data: number; filtered: number; blocks: number; start: number; end: number; }; protected constructor(dataLoader: (offset: number) => Promise); private invalidate; private load; protected updateBlockRange(): void; /** Ensure blockStore contains rows for the current block range, load more rows if required */ protected ensureBlockStore(): void; } export {};