export interface VirtualScrollOptions {
    /** Returns the height of a single row in pixels (function because it can change with size variants) */
    rowHeight: () => number;
    /** Returns the total number of items (function because data can change) */
    itemCount: () => number;
    /** Called whenever the visible range changes */
    onUpdate: (startIndex: number, endIndex: number) => void;
    /** When returns false, shows all rows (default: always enabled) */
    enabled?: () => boolean;
    /** Overscan rows above/below visible area (default: 3) */
    buffer?: number;
}
export declare class VirtualScroller {
    private _viewport;
    private _resizeObserver;
    private _options;
    /** Attach to a scrollable viewport element and begin observing */
    attach(viewport: HTMLElement, options: VirtualScrollOptions): void;
    /** Tear down observers and event listeners */
    detach(): void;
    /** Call after item count or row height changes (e.g. after sort/filter/page change) */
    invalidate(): void;
    private _handleScroll;
    private _compute;
}
//# sourceMappingURL=index.d.ts.map