feat: export ItemSizeResolver type and document reactive estimateSize contract

This commit is contained in:
Ilia Mashkov
2026-04-12 19:43:44 +03:00
parent 4b017a83bb
commit 46b9db1db3

View File

@@ -50,6 +50,14 @@ export interface VirtualizerOptions {
/**
* Function to estimate the size of an item at a given index.
* Used for initial layout before actual measurements are available.
*
* Called inside a `$derived.by` block. Any `$state` or `$derived` value
* read within this function is automatically tracked as a dependency —
* when those values change, `offsets` and `totalSize` recompute instantly.
*
* For font preview rows, pass a closure that reads
* `appliedFontsManager.statuses` so the virtualizer recalculates heights
* as fonts finish loading, eliminating the DOM-measurement snap on load.
*/
estimateSize: (index: number) => number;
/** Number of extra items to render outside viewport for smoother scrolling (default: 5) */
@@ -71,6 +79,18 @@ export interface VirtualizerOptions {
useWindowScroll?: boolean;
}
/**
* A height resolver for a single virtual-list row.
*
* When this function reads reactive state (e.g. `SvelteMap.get()`), calling
* it inside a `$derived.by` block automatically subscribes to that state.
* Return `fallbackHeight` whenever the true height is not yet known.
*
* @param rowIndex Zero-based row index within the data array.
* @returns Row height in pixels, excluding the list gap.
*/
export type ItemSizeResolver = (rowIndex: number) => number;
/**
* Creates a reactive virtualizer for efficiently rendering large lists by only rendering visible items.
*