@pdanpdan/virtual-scroll 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -1 +1,2 @@
1
- .virtual-scroll-container[data-v-654a1d54]{position:relative;block-size:100%;inline-size:100%;outline-offset:1px}.virtual-scroll-container[data-v-654a1d54]:not(.virtual-scroll--window){overflow:auto;overscroll-behavior:contain}.virtual-scroll-container.virtual-scroll--table[data-v-654a1d54]{display:block}.virtual-scroll--horizontal[data-v-654a1d54]{white-space:nowrap}.virtual-scroll-wrapper[data-v-654a1d54]{contain:layout;position:relative}:where(.virtual-scroll--hydrated>.virtual-scroll-wrapper>.virtual-scroll-item[data-v-654a1d54]){position:absolute;inset-block-start:0;inset-inline-start:0}.virtual-scroll-item[data-v-654a1d54]{box-sizing:border-box;will-change:transform}.virtual-scroll-item:where(.virtual-scroll--debug)[data-v-654a1d54]{outline:1px dashed rgba(255,0,0,.5);background-color:#ff00000d}.virtual-scroll-item:where(.virtual-scroll--debug)[data-v-654a1d54]:where(:hover){background-color:#ff00001a;z-index:100}.virtual-scroll-debug-info[data-v-654a1d54]{position:absolute;inset-block-start:2px;inset-inline-end:2px;background:#000000b3;color:#fff;font-size:10px;padding:2px 4px;border-radius:4px;pointer-events:none;z-index:100;font-family:monospace}.virtual-scroll-spacer[data-v-654a1d54]{pointer-events:none}.virtual-scroll-header[data-v-654a1d54],.virtual-scroll-footer[data-v-654a1d54]{position:relative;z-index:20}.virtual-scroll--sticky[data-v-654a1d54]{position:sticky}.virtual-scroll--sticky[data-v-654a1d54]:where(.virtual-scroll-header){inset-block-start:0;inset-inline-start:0;min-inline-size:100%;box-sizing:border-box}.virtual-scroll--sticky[data-v-654a1d54]:where(.virtual-scroll-footer){inset-block-end:0;inset-inline-start:0;min-inline-size:100%;box-sizing:border-box}.virtual-scroll--sticky[data-v-654a1d54]:where(.virtual-scroll-item){z-index:10}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-654a1d54]{display:inline-flex;min-inline-size:100%}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-654a1d54]>tr{display:inline-flex;min-inline-size:100%}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-654a1d54]>tr>:is(td,th){display:inline-block;align-items:center}
1
+ .virtual-scroll-container[data-v-8d960026]{outline-offset:1px;block-size:100%;inline-size:100%;position:relative}.virtual-scroll-container[data-v-8d960026]:not(.virtual-scroll--window){overscroll-behavior:contain;overflow:auto}.virtual-scroll-container.virtual-scroll--table[data-v-8d960026]{display:block}.virtual-scroll--horizontal[data-v-8d960026]{white-space:nowrap}.virtual-scroll-wrapper[data-v-8d960026]{contain:layout;position:relative}:where(.virtual-scroll--hydrated>.virtual-scroll-wrapper>.virtual-scroll-item[data-v-8d960026]){position:absolute;inset-block-start:0;inset-inline-start:0}.virtual-scroll-item[data-v-8d960026]{box-sizing:border-box;will-change:transform}.virtual-scroll-item:where(.virtual-scroll--debug)[data-v-8d960026]{background-color:#ff00000d;outline:1px dashed #ff000080}.virtual-scroll-item:where(.virtual-scroll--debug)[data-v-8d960026]:where(:hover){z-index:100;background-color:#ff00001a}.virtual-scroll-debug-info[data-v-8d960026]{color:#fff;pointer-events:none;z-index:100;background:#000000b3;border-radius:4px;padding:2px 4px;font-family:monospace;font-size:10px;position:absolute;inset-block-start:2px;inset-inline-end:2px}.virtual-scroll-spacer[data-v-8d960026]{pointer-events:none}.virtual-scroll-header[data-v-8d960026],.virtual-scroll-footer[data-v-8d960026]{z-index:20;position:relative}.virtual-scroll--sticky[data-v-8d960026]{position:sticky}.virtual-scroll--sticky[data-v-8d960026]:where(.virtual-scroll-header){box-sizing:border-box;min-inline-size:100%;inset-block-start:0;inset-inline-start:0}.virtual-scroll--sticky[data-v-8d960026]:where(.virtual-scroll-footer){box-sizing:border-box;min-inline-size:100%;inset-block-end:0;inset-inline-start:0}.virtual-scroll--sticky[data-v-8d960026]:where(.virtual-scroll-item){z-index:10}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-8d960026]{min-inline-size:100%;display:inline-flex}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-8d960026]>tr{min-inline-size:100%;display:inline-flex}:is(tbody.virtual-scroll-wrapper,thead.virtual-scroll-header,tfoot.virtual-scroll-footer)[data-v-8d960026]>tr>:is(td,th){align-items:center;display:inline-block}
2
+ /*$vite$:1*/
@@ -0,0 +1,476 @@
1
+ import { AllowedComponentProps } from 'vue';
2
+ import { ComponentCustomProps } from 'vue';
3
+ import { ComputedRef } from 'vue';
4
+ import { PublicProps } from 'vue';
5
+ import { Ref } from 'vue';
6
+ import { ShallowUnwrapRef } from 'vue';
7
+ import { VNode } from 'vue';
8
+ import { VNodeProps } from 'vue';
9
+
10
+ declare type __VLS_PrettifyLocal<T> = {
11
+ [K in keyof T]: T[K];
12
+ } & {};
13
+
14
+ export declare const DEFAULT_BUFFER = 5;
15
+
16
+ export declare const DEFAULT_COLUMN_WIDTH = 150;
17
+
18
+ export declare const DEFAULT_ITEM_SIZE = 50;
19
+
20
+ /**
21
+ * Fenwick Tree (Binary Indexed Tree) implementation for efficient
22
+ * prefix sum calculations and updates.
23
+ */
24
+ export declare class FenwickTree {
25
+ private tree;
26
+ private values;
27
+ constructor(size: number);
28
+ /**
29
+ * Update the value at a specific index and propagate changes.
30
+ * @param index 0-based index
31
+ * @param delta The change in value (new value - old value)
32
+ */
33
+ update(index: number, delta: number): void;
34
+ /**
35
+ * Get the prefix sum up to a specific index (exclusive).
36
+ * @param index 0-based index. query(n) returns sum of values from 0 to n-1.
37
+ * @returns Sum of values in range [0, index)
38
+ */
39
+ query(index: number): number;
40
+ /**
41
+ * Set the individual value at an index without updating the tree.
42
+ * Call rebuild() after multiple sets to update the tree efficiently.
43
+ */
44
+ set(index: number, value: number): void;
45
+ /**
46
+ * Get the number of items in the tree.
47
+ */
48
+ get length(): number;
49
+ /**
50
+ * Get the individual value at an index.
51
+ */
52
+ get(index: number): number;
53
+ /**
54
+ * Get the underlying values array.
55
+ */
56
+ getValues(): Readonly<Float64Array>;
57
+ /**
58
+ * Find the largest index such that the prefix sum is less than or equal to the given value.
59
+ * Useful for finding which item is at a specific scroll offset.
60
+ * @param value The prefix sum value to search for
61
+ * @returns The 0-based index
62
+ */
63
+ findLowerBound(value: number): number;
64
+ /**
65
+ * Rebuild the entire tree from the current values array in O(N).
66
+ * Useful after bulk updates to the values array.
67
+ */
68
+ rebuild(): void;
69
+ /**
70
+ * Resize the tree while preserving existing values.
71
+ * @param size New size of the tree
72
+ */
73
+ resize(size: number): void;
74
+ /**
75
+ * Shift values by a given offset and rebuild the tree.
76
+ * Useful when items are prepended to the list.
77
+ * @param offset Number of positions to shift (positive for prepending)
78
+ */
79
+ shift(offset: number): void;
80
+ }
81
+
82
+ /**
83
+ * Extracts the horizontal padding from a padding value or object.
84
+ *
85
+ * @param p - The padding value (number or object with x/y).
86
+ * @param direction - The current scroll direction.
87
+ * @returns The horizontal padding in pixels.
88
+ */
89
+ export declare function getPaddingX(p: number | {
90
+ x?: number;
91
+ y?: number;
92
+ } | undefined, direction?: ScrollDirection): number;
93
+
94
+ /**
95
+ * Extracts the vertical padding from a padding value or object.
96
+ *
97
+ * @param p - The padding value (number or object with x/y).
98
+ * @param direction - The current scroll direction.
99
+ * @returns The vertical padding in pixels.
100
+ */
101
+ export declare function getPaddingY(p: number | {
102
+ x?: number;
103
+ y?: number;
104
+ } | undefined, direction?: ScrollDirection): number;
105
+
106
+ /**
107
+ * Checks if the container has a bounding client rect method.
108
+ *
109
+ * @param container - The container element or window to check.
110
+ * @returns True if the container is an HTMLElement with getBoundingClientRect.
111
+ */
112
+ export declare function isElement(container: HTMLElement | Window | null | undefined): container is HTMLElement;
113
+
114
+ /**
115
+ * Checks if the target is an element with scroll properties.
116
+ *
117
+ * @param target - The event target to check.
118
+ * @returns True if the target is an HTMLElement with scroll properties.
119
+ */
120
+ export declare function isScrollableElement(target: EventTarget | null): target is HTMLElement;
121
+
122
+ /**
123
+ * Helper to determine if an options argument is the full ScrollToIndexOptions object.
124
+ *
125
+ * @param options - The options object to check.
126
+ * @returns True if the options object contains scroll-to-index specific properties.
127
+ */
128
+ export declare function isScrollToIndexOptions(options: unknown): options is ScrollToIndexOptions;
129
+
130
+ declare interface Props<T = unknown> {
131
+ /** Array of items to be virtualized. */
132
+ items: T[];
133
+ /** Fixed size of each item or a function that returns the size of an item. Pass 0, null or undefined for dynamic size detection. */
134
+ itemSize?: number | ((item: T, index: number) => number) | null;
135
+ /** Direction of the scroll: 'vertical', 'horizontal', or 'both' (grid). */
136
+ direction?: 'vertical' | 'horizontal' | 'both';
137
+ /** Number of items to render before the visible viewport. */
138
+ bufferBefore?: number;
139
+ /** Number of items to render after the visible viewport. */
140
+ bufferAfter?: number;
141
+ /** The scrollable container element or window. If not provided, the host element is used. */
142
+ container?: HTMLElement | Window | null;
143
+ /** Range of items to render for SSR. */
144
+ ssrRange?: {
145
+ start: number;
146
+ end: number;
147
+ colStart?: number;
148
+ colEnd?: number;
149
+ };
150
+ /** Number of columns for bidirectional (grid) scroll. */
151
+ columnCount?: number;
152
+ /** Fixed width of columns or an array/function for column widths. Pass 0, null or undefined for dynamic width. */
153
+ columnWidth?: number | number[] | ((index: number) => number) | null;
154
+ /** The HTML tag to use for the container. */
155
+ containerTag?: string;
156
+ /** The HTML tag to use for the items wrapper. */
157
+ wrapperTag?: string;
158
+ /** The HTML tag to use for each item. */
159
+ itemTag?: string;
160
+ /** Padding at the start of the scroll container. */
161
+ scrollPaddingStart?: number | {
162
+ x?: number;
163
+ y?: number;
164
+ };
165
+ /** Padding at the end of the scroll container. */
166
+ scrollPaddingEnd?: number | {
167
+ x?: number;
168
+ y?: number;
169
+ };
170
+ /** Whether the header slot content is sticky and should be accounted for in scroll padding. If true, header size is automatically measured. */
171
+ stickyHeader?: boolean;
172
+ /** Whether the footer slot content is sticky and should be accounted for in scroll padding. If true, footer size is automatically measured. */
173
+ stickyFooter?: boolean;
174
+ /** Gap between items in pixels (vertical). */
175
+ gap?: number;
176
+ /** Gap between columns in pixels (horizontal/grid). */
177
+ columnGap?: number;
178
+ /** Indices of items that should stick to the top/start. Supports iOS-style pushing effect. */
179
+ stickyIndices?: number[];
180
+ /** Distance from the end of the scrollable area to trigger 'load' event in pixels. */
181
+ loadDistance?: number;
182
+ /** Whether items are currently being loaded. Prevents multiple 'load' events and shows 'loading' slot. */
183
+ loading?: boolean;
184
+ /** Whether to automatically restore scroll position when items are prepended to the list. */
185
+ restoreScrollOnPrepend?: boolean;
186
+ /** Initial scroll index to jump to on mount. */
187
+ initialScrollIndex?: number;
188
+ /** Alignment for the initial scroll index. */
189
+ initialScrollAlign?: ScrollAlignment | ScrollAlignmentOptions;
190
+ /** Default size for items before they are measured. */
191
+ defaultItemSize?: number;
192
+ /** Default width for columns before they are measured. */
193
+ defaultColumnWidth?: number;
194
+ /** Whether to show debug information (buffers and offsets). */
195
+ debug?: boolean;
196
+ }
197
+
198
+ export declare interface RenderedItem<T = unknown> {
199
+ item: T;
200
+ index: number;
201
+ offset: {
202
+ x: number;
203
+ y: number;
204
+ };
205
+ size: {
206
+ width: number;
207
+ height: number;
208
+ };
209
+ originalX: number;
210
+ originalY: number;
211
+ isSticky?: boolean;
212
+ isStickyActive?: boolean;
213
+ stickyOffset: {
214
+ x: number;
215
+ y: number;
216
+ };
217
+ }
218
+
219
+ export declare type ScrollAlignment = 'start' | 'center' | 'end' | 'auto';
220
+
221
+ export declare interface ScrollAlignmentOptions {
222
+ x?: ScrollAlignment;
223
+ y?: ScrollAlignment;
224
+ }
225
+
226
+ export declare interface ScrollDetails<T = unknown> {
227
+ items: RenderedItem<T>[];
228
+ currentIndex: number;
229
+ currentColIndex: number;
230
+ scrollOffset: {
231
+ x: number;
232
+ y: number;
233
+ };
234
+ viewportSize: {
235
+ width: number;
236
+ height: number;
237
+ };
238
+ totalSize: {
239
+ width: number;
240
+ height: number;
241
+ };
242
+ isScrolling: boolean;
243
+ isProgrammaticScroll: boolean;
244
+ /** Range of items currently being rendered */
245
+ range: {
246
+ start: number;
247
+ end: number;
248
+ };
249
+ /** Range of columns currently being rendered (for grid mode) */
250
+ columnRange: {
251
+ start: number;
252
+ end: number;
253
+ padStart: number;
254
+ padEnd: number;
255
+ };
256
+ }
257
+
258
+ export declare type ScrollDirection = 'vertical' | 'horizontal' | 'both';
259
+
260
+ export declare interface ScrollToIndexOptions {
261
+ align?: ScrollAlignment | ScrollAlignmentOptions;
262
+ behavior?: 'auto' | 'smooth';
263
+ isCorrection?: boolean;
264
+ }
265
+
266
+ /**
267
+ * Composable for virtual scrolling logic.
268
+ * Handles calculation of visible items, scroll events, and dynamic item sizes.
269
+ *
270
+ * @param props - Reactive properties for virtual scroll configuration
271
+ */
272
+ export declare function useVirtualScroll<T = unknown>(props: Ref<VirtualScrollProps<T>>): {
273
+ /**
274
+ * Array of items to be rendered with their calculated offsets and sizes.
275
+ */
276
+ renderedItems: ComputedRef<RenderedItem<T>[]>;
277
+ /**
278
+ * Total calculated width of all items including gaps.
279
+ */
280
+ totalWidth: ComputedRef<number>;
281
+ /**
282
+ * Total calculated height of all items including gaps.
283
+ */
284
+ totalHeight: ComputedRef<number>;
285
+ /**
286
+ * Detailed information about the current scroll state.
287
+ * Includes currentIndex, scrollOffset, viewportSize, totalSize, and isScrolling.
288
+ */
289
+ scrollDetails: ComputedRef<ScrollDetails<T>>;
290
+ /**
291
+ * Programmatically scroll to a specific row and/or column.
292
+ * @param rowIndex - The row index to scroll to
293
+ * @param colIndex - The column index to scroll to
294
+ * @param options - Alignment and behavior options
295
+ */
296
+ scrollToIndex: (rowIndex: number | null | undefined, colIndex: number | null | undefined, options?: ScrollAlignment | ScrollAlignmentOptions | ScrollToIndexOptions) => void;
297
+ /**
298
+ * Programmatically scroll to a specific pixel offset.
299
+ * @param x - The pixel offset to scroll to on the X axis
300
+ * @param y - The pixel offset to scroll to on the Y axis
301
+ * @param options - Behavior options
302
+ */
303
+ scrollToOffset: (x?: number | null, y?: number | null, options?: {
304
+ behavior?: "auto" | "smooth";
305
+ }) => void;
306
+ /**
307
+ * Stops any currently active programmatic scroll and clears pending corrections.
308
+ */
309
+ stopProgrammaticScroll: () => void;
310
+ /**
311
+ * Updates the stored size of an item. Should be called when an item is measured (e.g., via ResizeObserver).
312
+ * @param index - The item index
313
+ * @param width - The measured width
314
+ * @param height - The measured height
315
+ * @param element - The measured element (optional, used for grid column detection)
316
+ */
317
+ updateItemSize: (index: number, inlineSize: number, blockSize: number, element?: HTMLElement) => void;
318
+ /**
319
+ * Updates the stored size of multiple items. Should be called when items are measured (e.g., via ResizeObserver).
320
+ * @param updates - Array of item updates
321
+ */
322
+ updateItemSizes: (updates: Array<{
323
+ index: number;
324
+ inlineSize: number;
325
+ blockSize: number;
326
+ element?: HTMLElement | undefined;
327
+ }>) => void;
328
+ /**
329
+ * Recalculates the host element's offset relative to the scroll container.
330
+ */
331
+ updateHostOffset: () => void;
332
+ /**
333
+ * Information about the current visible range of columns.
334
+ */
335
+ columnRange: ComputedRef< {
336
+ start: number;
337
+ end: number;
338
+ padStart: number;
339
+ padEnd: number;
340
+ }>;
341
+ /**
342
+ * Helper to get the width of a specific column based on current configuration.
343
+ * @param index - The column index
344
+ */
345
+ getColumnWidth: (index: number) => number;
346
+ /**
347
+ * Resets all dynamic measurements and re-initializes from props.
348
+ */
349
+ refresh: () => void;
350
+ /**
351
+ * Whether the component has finished its first client-side mount and hydration.
352
+ */
353
+ isHydrated: Ref<boolean, boolean>;
354
+ };
355
+
356
+ export declare const VirtualScroll: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
357
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
358
+ readonly onLoad?: (direction: "vertical" | "horizontal") => any;
359
+ readonly onScroll?: (details: ScrollDetails<T>) => any;
360
+ readonly onVisibleRangeChange?: (range: {
361
+ start: number;
362
+ end: number;
363
+ colStart: number;
364
+ colEnd: number;
365
+ }) => any;
366
+ } & VNodeProps & AllowedComponentProps & ComponentCustomProps, never>, "onLoad" | "onScroll" | "onVisibleRangeChange"> & Props<T> & Partial<{}>> & PublicProps;
367
+ expose(exposed: ShallowUnwrapRef< {
368
+ scrollDetails: ComputedRef<ScrollDetails<T>>;
369
+ columnRange: ComputedRef< {
370
+ start: number;
371
+ end: number;
372
+ padStart: number;
373
+ padEnd: number;
374
+ }>;
375
+ getColumnWidth: (index: number) => number;
376
+ scrollToIndex: (rowIndex: number | null | undefined, colIndex: number | null | undefined, options?: ScrollAlignment | ScrollAlignmentOptions | ScrollToIndexOptions) => void;
377
+ scrollToOffset: (x?: number | null, y?: number | null, options?: {
378
+ behavior?: "auto" | "smooth";
379
+ } | undefined) => void;
380
+ refresh: () => void;
381
+ stopProgrammaticScroll: () => void;
382
+ }>): void;
383
+ attrs: any;
384
+ slots: {
385
+ header?(_: {}): any;
386
+ item?(_: {
387
+ item: T;
388
+ index: number;
389
+ columnRange: {
390
+ start: number;
391
+ end: number;
392
+ padStart: number;
393
+ padEnd: number;
394
+ };
395
+ getColumnWidth: (index: number) => number;
396
+ isSticky: boolean | undefined;
397
+ isStickyActive: boolean | undefined;
398
+ }): any;
399
+ loading?(_: {}): any;
400
+ footer?(_: {}): any;
401
+ };
402
+ emit: {
403
+ (e: "scroll", details: ScrollDetails<T>): void;
404
+ (e: "load", direction: "vertical" | "horizontal"): void;
405
+ (e: "visibleRangeChange", range: {
406
+ start: number;
407
+ end: number;
408
+ colStart: number;
409
+ colEnd: number;
410
+ }): void;
411
+ };
412
+ }>) => VNode & {
413
+ __ctx?: Awaited<typeof __VLS_setup>;
414
+ };
415
+
416
+ export declare interface VirtualScrollProps<T = unknown> {
417
+ /** Array of items to be virtualized */
418
+ items: T[];
419
+ /** Fixed size of each item or a function that returns the size of an item */
420
+ itemSize?: number | ((item: T, index: number) => number) | undefined;
421
+ /** Direction of the scroll: 'vertical', 'horizontal', or 'both' */
422
+ direction?: ScrollDirection | undefined;
423
+ /** Number of items to render before the visible viewport */
424
+ bufferBefore?: number | undefined;
425
+ /** Number of items to render after the visible viewport */
426
+ bufferAfter?: number | undefined;
427
+ /** The scrollable container element or window */
428
+ container?: HTMLElement | Window | null | undefined;
429
+ /** The host element that contains the items */
430
+ hostElement?: HTMLElement | null | undefined;
431
+ /** Range of items to render for SSR */
432
+ ssrRange?: {
433
+ start: number;
434
+ end: number;
435
+ colStart?: number;
436
+ colEnd?: number;
437
+ } | undefined;
438
+ /** Number of columns for bidirectional scroll */
439
+ columnCount?: number | undefined;
440
+ /** Fixed width of columns or an array of widths for alternating columns */
441
+ columnWidth?: number | number[] | ((index: number) => number) | undefined;
442
+ /** Padding at the start of the scroll container (e.g. for sticky headers) */
443
+ scrollPaddingStart?: number | {
444
+ x?: number;
445
+ y?: number;
446
+ } | undefined;
447
+ /** Padding at the end of the scroll container */
448
+ scrollPaddingEnd?: number | {
449
+ x?: number;
450
+ y?: number;
451
+ } | undefined;
452
+ /** Gap between items in pixels (vertical) */
453
+ gap?: number | undefined;
454
+ /** Gap between columns in pixels (horizontal/grid) */
455
+ columnGap?: number | undefined;
456
+ /** Indices of items that should stick to the top/start */
457
+ stickyIndices?: number[] | undefined;
458
+ /** Distance from the end of the scrollable area to trigger 'load' event */
459
+ loadDistance?: number | undefined;
460
+ /** Whether items are currently being loaded */
461
+ loading?: boolean | undefined;
462
+ /** Whether to restore scroll position when items are prepended */
463
+ restoreScrollOnPrepend?: boolean | undefined;
464
+ /** Initial scroll index to jump to on mount */
465
+ initialScrollIndex?: number | undefined;
466
+ /** Alignment for the initial scroll index */
467
+ initialScrollAlign?: ScrollAlignment | ScrollAlignmentOptions | undefined;
468
+ /** Default size for items before they are measured */
469
+ defaultItemSize?: number | undefined;
470
+ /** Default width for columns before they are measured */
471
+ defaultColumnWidth?: number | undefined;
472
+ /** Whether to enable debug mode (e.g. showing offsets) */
473
+ debug?: boolean | undefined;
474
+ }
475
+
476
+ export { }