import { type ReadonlySignal } from '@preact/signals-core'; import { BatchTaskManager } from './batch-task-manager'; import { VirtualElementWrapper } from './virtual-cell'; export interface Disposable { dispose(): void; } export declare class NodeLifeCycle implements Disposable { disposables: (() => void)[]; init(): void; isDisposed: boolean; dispose(): void; } export declare class GridNode extends NodeLifeCycle { private readonly initData; private _data?; get data(): Data; constructor(initData: () => Data); } export declare class CacheManager { readonly keyToString: (key: K) => string; constructor(keyToString: (key: K) => string); protected readonly cache: Map; getOrCreate(key: K, create: () => V): V; has(key: K): boolean; delete(key: K): void; clear(): void; cleanup(activeKeys: Set): void; } export declare abstract class VirtualScroll extends NodeLifeCycle { readonly container: VirtualScrollContainer; constructor(containerOptions: VirtualScrollOptions); dispose(): void; } export declare class GridCell extends GridNode { readonly row: GridRow; readonly columnId: string; readonly renderTask: { cancel: () => void; show: () => void; hide: () => void; }; readonly element: VirtualElementWrapper; readonly columnIndex$: ReadonlySignal; private readonly realHeight$; readonly contentHeight$: ReadonlySignal; private readonly columnPosition$; readonly height$: ReadonlySignal; readonly width$: ReadonlySignal; readonly left$: ReadonlySignal; readonly top$: ReadonlySignal; readonly right$: ReadonlySignal; readonly bottom$: ReadonlySignal; get rowIndex$(): ReadonlySignal; get grid(): GridVirtualScroll; constructor(row: GridRow, columnId: string, createElement: (cell: GridCell, wrapper: VirtualElementWrapper) => HTMLElement, initCellData: (cell: GridCell) => CellData); isVisible$: ReadonlySignal; checkRender(): void; updateHeight(height: number): void; dispose(): void; } export declare class GridRow extends GridNode { readonly group: GridGroup; readonly rowId: string; cells$: ReadonlySignal[]>; rowIndex$: ReadonlySignal; prevRow$: ReadonlySignal | undefined>; get grid(): GridVirtualScroll; top$: ReadonlySignal; bottom$: ReadonlySignal; height$: ReadonlySignal; constructor(group: GridGroup, rowId: string, initRowData: (row: GridRow) => RowData); dispose(): void; } export declare class GroupNode extends NodeLifeCycle { readonly group: GridGroup; readonly top$: ReadonlySignal; readonly visibleCheck: (node: GroupNode) => boolean; readonly renderTask: { cancel: () => void; show: () => void; hide: () => void; }; readonly height$: import("@preact/signals-core").Signal; readonly bottom$: ReadonlySignal; constructor(group: GridGroup, top$: ReadonlySignal, content: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement, visibleCheck: (node: GroupNode) => boolean); get container(): VirtualScrollContainer; isVisible$: ReadonlySignal; checkRender(): void; } export declare class GridGroup extends GridNode { readonly grid: GridVirtualScroll; readonly groupId: string; readonly topElement: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement; readonly bottomElement: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement; top$: ReadonlySignal; topNode: GroupNode; lastRowBottom$: ReadonlySignal; bottomNode: GroupNode; rows$: ReadonlySignal[]>; groupIndex$: ReadonlySignal; prevGroup$: ReadonlySignal | undefined>; get rowsTop$(): ReadonlySignal; get bottomNodeTop$(): ReadonlySignal; height$: ReadonlySignal; bottom$: ReadonlySignal; constructor(grid: GridVirtualScroll, groupId: string, topElement: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement, bottomElement: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement, initGroupData: (group: GridGroup) => GroupData); dispose(): void; } export interface GridGroupData { id: string; rows: string[]; } export interface GridVirtualScrollOptions extends VirtualScrollOptions { initGroupData: (group: GridGroup) => GroupData; initRowData: (row: GridRow) => RowData; initCellData: (cell: GridCell) => CellData; columns$: ReadonlySignal<{ id: string; width: number; }[]>; fixedRowHeight$: ReadonlySignal; createGroup: { top: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement; bottom: (group: GridGroup, wrapper: VirtualElementWrapper) => HTMLElement; }; createCell: (cell: GridCell, wrapper: VirtualElementWrapper) => HTMLElement; groups$: ReadonlySignal; } export declare class GridVirtualScroll extends VirtualScroll { readonly options: GridVirtualScrollOptions; readonly cellsCache: CacheManager<{ groupId: string; columnId: string; rowId: string; }, GridCell>; readonly rowsCache: CacheManager<{ groupId: string; rowId: string; }, GridRow>; readonly groupsCache: CacheManager>; readonly groups$: ReadonlySignal[]>; constructor(options: GridVirtualScrollOptions); getOrCreateRow(group: GridGroup, rowId: string): GridRow; getGroup(groupId: string): GridGroup; getRow(groupId: string, rowId: string): GridRow; getCell(groupId: string, rowId: string, columnId: string): GridCell; getOrCreateCell(row: GridRow, columnId: string): GridCell; getOrCreateGroup(groupId: string): GridGroup; private listenDataChange; lastGroupBottom$: ReadonlySignal; dispose(): void; get columns$(): ReadonlySignal<{ id: string; width: number; }[]>; get fixedRowHeight$(): ReadonlySignal; columnPosition$: ReadonlySignal<{ left: number; right: number; width: number; }[]>; totalWidth$: ReadonlySignal; get content(): HTMLElement; init(): void; private listenSizeChange; } export interface VirtualScrollOptions { xScrollContainer?: HTMLElement; yScrollContainer?: HTMLElement; } export declare const getScrollContainer: (element: HTMLElement, direction: "x" | "y") => HTMLElement | undefined; export declare class VirtualScrollContainer { private readonly options; private xScrollContainer?; private readonly xScrollContainerWidth$; private yScrollContainer?; private readonly yScrollContainerHeight$; readonly content: HTMLElement; readonly scrollTop$: import("@preact/signals-core").Signal; readonly scrollLeft$: import("@preact/signals-core").Signal; private readonly disposables; private readonly preloadSize; private readonly offsetTop$; private readonly offsetLeft$; readonly viewport$: ReadonlySignal<{ width: number; height: number; top: number; bottom: number; left: number; right: number; }>; constructor(options: VirtualScrollOptions); init(): void; private getOffset; private updateOffsetTask?; private updateOffset; private listenScroll; private listenResize; readonly batchTaskManager: BatchTaskManager; initElement(element: HTMLElement, isInit: ReadonlySignal): { cancel: () => void; show: () => void; hide: () => void; }; dispose(): void; updateContentSize(width: number, height: number): void; scrollToPosition(x: number, y: number, behavior?: ScrollBehavior): void; } export interface ListVirtualScrollOptions extends VirtualScrollOptions { itemCount: number; itemHeight: number | ((index: number) => number); } export declare class ListVirtualScroll extends VirtualScroll { protected itemCount: number; protected itemHeight: number | ((index: number) => number); constructor(options: ListVirtualScrollOptions); private updateTotalSize; } //# sourceMappingURL=virtual-scroll.d.ts.map