@virtual-content/core 0.1.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/LICENSE +21 -0
- package/README.md +39 -0
- package/dist/index.cjs +1433 -0
- package/dist/index.d.cts +422 -0
- package/dist/index.d.ts +422 -0
- package/dist/index.js +1395 -0
- package/package.json +51 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
declare class FenwickTree {
|
|
2
|
+
private readonly values;
|
|
3
|
+
private readonly tree;
|
|
4
|
+
constructor(values: readonly number[]);
|
|
5
|
+
get size(): number;
|
|
6
|
+
get(index: number): number;
|
|
7
|
+
add(index: number, delta: number): void;
|
|
8
|
+
set(index: number, value: number): number;
|
|
9
|
+
sum(endExclusive: number): number;
|
|
10
|
+
total(): number;
|
|
11
|
+
lowerBound(offset: number): number;
|
|
12
|
+
private hasIndex;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type ItemKey = string | number;
|
|
16
|
+
type ScrollAxis = "vertical" | "horizontal" | "both";
|
|
17
|
+
type LayoutMode = "linear" | "grid" | "masonry" | "free";
|
|
18
|
+
type LayoutDirection = "vertical" | "horizontal";
|
|
19
|
+
type MeasurementAxes = "none" | "main" | "cross" | "both";
|
|
20
|
+
type ScrollAlign = "start" | "center" | "end" | "auto" | "nearest";
|
|
21
|
+
type VirtualStickAxis = "x" | "y" | "both";
|
|
22
|
+
type VirtualStickToEndOptions = boolean | {
|
|
23
|
+
x?: boolean;
|
|
24
|
+
y?: boolean;
|
|
25
|
+
threshold?: number;
|
|
26
|
+
initial?: boolean;
|
|
27
|
+
};
|
|
28
|
+
interface VirtualStickState {
|
|
29
|
+
x: boolean;
|
|
30
|
+
y: boolean;
|
|
31
|
+
distanceToRight: number;
|
|
32
|
+
distanceToBottom: number;
|
|
33
|
+
}
|
|
34
|
+
interface OverscanRange {
|
|
35
|
+
before?: number;
|
|
36
|
+
after?: number;
|
|
37
|
+
}
|
|
38
|
+
interface VirtualPoint {
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
}
|
|
42
|
+
interface VirtualRect {
|
|
43
|
+
x: number;
|
|
44
|
+
y: number;
|
|
45
|
+
width: number;
|
|
46
|
+
height: number;
|
|
47
|
+
}
|
|
48
|
+
interface VirtualOverscan {
|
|
49
|
+
before: number;
|
|
50
|
+
after: number;
|
|
51
|
+
maxItems?: number;
|
|
52
|
+
maxPx?: number;
|
|
53
|
+
}
|
|
54
|
+
interface VirtualScrollOptions {
|
|
55
|
+
axis: ScrollAxis;
|
|
56
|
+
initialOffset?: number;
|
|
57
|
+
initialPoint?: VirtualPoint;
|
|
58
|
+
restore?: {
|
|
59
|
+
offset?: number;
|
|
60
|
+
point?: VirtualPoint;
|
|
61
|
+
};
|
|
62
|
+
stickToEnd?: VirtualStickToEndOptions;
|
|
63
|
+
}
|
|
64
|
+
type VirtualLayoutGap = number | {
|
|
65
|
+
main?: number;
|
|
66
|
+
cross?: number;
|
|
67
|
+
};
|
|
68
|
+
type VirtualLayoutPadding = number | {
|
|
69
|
+
mainStart?: number;
|
|
70
|
+
mainEnd?: number;
|
|
71
|
+
crossStart?: number;
|
|
72
|
+
crossEnd?: number;
|
|
73
|
+
};
|
|
74
|
+
interface VirtualLayoutConfig {
|
|
75
|
+
mode: LayoutMode;
|
|
76
|
+
direction?: LayoutDirection;
|
|
77
|
+
lanes?: number;
|
|
78
|
+
gap?: VirtualLayoutGap;
|
|
79
|
+
padding?: VirtualLayoutPadding;
|
|
80
|
+
crossSize?: number | string;
|
|
81
|
+
}
|
|
82
|
+
interface VirtualMeasurementConfig {
|
|
83
|
+
axes: MeasurementAxes;
|
|
84
|
+
}
|
|
85
|
+
interface AdaptiveRangeOptions {
|
|
86
|
+
enabled?: boolean;
|
|
87
|
+
base?: number | OverscanRange;
|
|
88
|
+
min?: number;
|
|
89
|
+
max?: number;
|
|
90
|
+
lookaheadMs?: number;
|
|
91
|
+
velocitySmoothing?: number;
|
|
92
|
+
directionBias?: number;
|
|
93
|
+
settleMs?: number;
|
|
94
|
+
}
|
|
95
|
+
interface VirtualRangeConfig {
|
|
96
|
+
overscan?: number | OverscanRange;
|
|
97
|
+
adaptive?: boolean | AdaptiveRangeOptions;
|
|
98
|
+
maxItems?: number;
|
|
99
|
+
maxPx?: number;
|
|
100
|
+
}
|
|
101
|
+
interface VirtualSyncConfig {
|
|
102
|
+
recenterThreshold?: number;
|
|
103
|
+
jumpThreshold?: number | ((state: VirtualState) => number);
|
|
104
|
+
mode?: "raf" | "sync-on-jump";
|
|
105
|
+
}
|
|
106
|
+
interface VirtualContentOptions {
|
|
107
|
+
count: number;
|
|
108
|
+
scroll: VirtualScrollOptions;
|
|
109
|
+
layout: VirtualLayoutConfig;
|
|
110
|
+
measurement: VirtualMeasurementConfig;
|
|
111
|
+
range?: VirtualRangeConfig;
|
|
112
|
+
minSize?: number;
|
|
113
|
+
sync?: VirtualSyncConfig;
|
|
114
|
+
estimateRect: (index: number) => VirtualRect;
|
|
115
|
+
getKey: (index: number) => ItemKey;
|
|
116
|
+
}
|
|
117
|
+
interface VirtualState {
|
|
118
|
+
count: number;
|
|
119
|
+
scrollAxis: ScrollAxis;
|
|
120
|
+
layoutMode: LayoutMode;
|
|
121
|
+
measurementAxes: MeasurementAxes;
|
|
122
|
+
viewportSize: number;
|
|
123
|
+
viewportRect: VirtualRect;
|
|
124
|
+
scrollOffset: number;
|
|
125
|
+
scrollPoint: VirtualPoint;
|
|
126
|
+
viewportCenter: number;
|
|
127
|
+
viewportCenterPoint: VirtualPoint;
|
|
128
|
+
centerIndex: number;
|
|
129
|
+
centerKey?: ItemKey;
|
|
130
|
+
centerStart: number;
|
|
131
|
+
centerSize: number;
|
|
132
|
+
centerRect?: VirtualRect;
|
|
133
|
+
rangeStart: number;
|
|
134
|
+
rangeEnd: number;
|
|
135
|
+
totalSize: number;
|
|
136
|
+
totalRect: VirtualRect;
|
|
137
|
+
overscanBefore: number;
|
|
138
|
+
overscanAfter: number;
|
|
139
|
+
scrollVelocity: number;
|
|
140
|
+
scrollDirection: -1 | 0 | 1;
|
|
141
|
+
adaptiveRangeActive: boolean;
|
|
142
|
+
}
|
|
143
|
+
interface VirtualItem {
|
|
144
|
+
index: number;
|
|
145
|
+
key: ItemKey;
|
|
146
|
+
rect: VirtualRect;
|
|
147
|
+
start: number;
|
|
148
|
+
size: number;
|
|
149
|
+
end: number;
|
|
150
|
+
offsetFromCenter: number;
|
|
151
|
+
isMeasured: boolean;
|
|
152
|
+
}
|
|
153
|
+
type VirtualScrollTarget = {
|
|
154
|
+
index: number;
|
|
155
|
+
align?: ScrollAlign;
|
|
156
|
+
} | {
|
|
157
|
+
key: ItemKey;
|
|
158
|
+
align?: ScrollAlign;
|
|
159
|
+
} | {
|
|
160
|
+
offset: number;
|
|
161
|
+
} | {
|
|
162
|
+
point: VirtualPoint;
|
|
163
|
+
} | {
|
|
164
|
+
rect: VirtualRect;
|
|
165
|
+
align?: ScrollAlign;
|
|
166
|
+
};
|
|
167
|
+
interface VirtualAnchor {
|
|
168
|
+
key: ItemKey;
|
|
169
|
+
index: number;
|
|
170
|
+
offsetInsideItem: number;
|
|
171
|
+
offsetInsideRect?: VirtualPoint;
|
|
172
|
+
}
|
|
173
|
+
interface VirtualSnapshot extends VirtualState {
|
|
174
|
+
items: VirtualItem[];
|
|
175
|
+
}
|
|
176
|
+
type LocateMode = "initial" | "tracked" | "recenter";
|
|
177
|
+
interface VirtualMeasurementResult {
|
|
178
|
+
delta: number;
|
|
179
|
+
changed: boolean;
|
|
180
|
+
stale: boolean;
|
|
181
|
+
size: number;
|
|
182
|
+
rect: VirtualRect;
|
|
183
|
+
correctedScrollOffset: number;
|
|
184
|
+
correctedScrollPoint: VirtualPoint;
|
|
185
|
+
}
|
|
186
|
+
interface VirtualizerDebugState {
|
|
187
|
+
lastCenterIndex: number;
|
|
188
|
+
lastViewportCenter: number | undefined;
|
|
189
|
+
lastLocateMode: LocateMode;
|
|
190
|
+
scrollVelocity: number;
|
|
191
|
+
scrollDirection: -1 | 0 | 1;
|
|
192
|
+
overscanBefore: number;
|
|
193
|
+
overscanAfter: number;
|
|
194
|
+
adaptiveRangeActive: boolean;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
declare function createPoint(x?: number, y?: number): VirtualPoint;
|
|
198
|
+
declare function createRect(x?: number, y?: number, width?: number, height?: number): VirtualRect;
|
|
199
|
+
declare function rectsIntersect(a: VirtualRect, b: VirtualRect): boolean;
|
|
200
|
+
declare function expandRect(rect: VirtualRect, overscan: VirtualOverscan, axis: ScrollAxis): VirtualRect;
|
|
201
|
+
declare function rectFromScrollPoint(point: VirtualPoint, size: Pick<VirtualRect, "width" | "height">): VirtualRect;
|
|
202
|
+
|
|
203
|
+
interface LayoutMeasurementResult {
|
|
204
|
+
delta: number;
|
|
205
|
+
changed: boolean;
|
|
206
|
+
stale: boolean;
|
|
207
|
+
rect: VirtualRect;
|
|
208
|
+
}
|
|
209
|
+
interface LayoutEngine {
|
|
210
|
+
readonly count: number;
|
|
211
|
+
setCount(count: number): void;
|
|
212
|
+
keyOf(index: number): ItemKey | undefined;
|
|
213
|
+
indexOfKey(key: ItemKey): number;
|
|
214
|
+
getTotalRect(): VirtualRect;
|
|
215
|
+
getVisibleItems(viewport: VirtualRect, overscan: VirtualOverscan): VirtualItem[];
|
|
216
|
+
getItemRect(index: number): VirtualRect | undefined;
|
|
217
|
+
getItemMainStart(index: number): number;
|
|
218
|
+
getItemMainSize(index: number): number;
|
|
219
|
+
isMeasured(index: number): boolean;
|
|
220
|
+
measureItem(index: number, key: ItemKey, rect: Partial<VirtualRect>): LayoutMeasurementResult;
|
|
221
|
+
resetMeasurements(keys?: ItemKey[]): void;
|
|
222
|
+
getScrollTarget(index: number, align: ScrollAlign, viewport: VirtualRect): VirtualPoint;
|
|
223
|
+
locateCenter(viewportCenter: VirtualPoint, lastIndex: number, lastViewportCenter: VirtualPoint | undefined, recenterThreshold: number): {
|
|
224
|
+
index: number;
|
|
225
|
+
mode: "initial" | "tracked" | "recenter";
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
declare class LinearBandEngine implements LayoutEngine {
|
|
230
|
+
private readonly sizes;
|
|
231
|
+
private readonly direction;
|
|
232
|
+
private readonly estimateRect;
|
|
233
|
+
private readonly configuredCrossSize;
|
|
234
|
+
private readonly gap;
|
|
235
|
+
private readonly padding;
|
|
236
|
+
private crossSizes;
|
|
237
|
+
constructor(options: VirtualContentOptions);
|
|
238
|
+
get count(): number;
|
|
239
|
+
setCount(count: number): void;
|
|
240
|
+
keyOf(index: number): ItemKey | undefined;
|
|
241
|
+
indexOfKey(key: ItemKey): number;
|
|
242
|
+
getTotalRect(): VirtualRect;
|
|
243
|
+
getVisibleItems(viewport: VirtualRect, overscan: VirtualOverscan): VirtualItem[];
|
|
244
|
+
getItemRect(index: number): VirtualRect | undefined;
|
|
245
|
+
getItemMainStart(index: number): number;
|
|
246
|
+
getItemMainSize(index: number): number;
|
|
247
|
+
isMeasured(index: number): boolean;
|
|
248
|
+
measureItem(index: number, key: ItemKey, rect: Partial<VirtualRect>): LayoutMeasurementResult;
|
|
249
|
+
resetMeasurements(keys?: ItemKey[]): void;
|
|
250
|
+
getScrollTarget(index: number, align: ScrollAlign, viewport: VirtualRect): VirtualPoint;
|
|
251
|
+
locateCenter(viewportCenter: VirtualPoint, lastIndex: number, lastViewportCenter: VirtualPoint | undefined, recenterThreshold: number): {
|
|
252
|
+
index: number;
|
|
253
|
+
mode: "initial" | "tracked" | "recenter";
|
|
254
|
+
};
|
|
255
|
+
private locateAbsolute;
|
|
256
|
+
private locateTracked;
|
|
257
|
+
private createItem;
|
|
258
|
+
private rectFor;
|
|
259
|
+
private spacing;
|
|
260
|
+
private totalMainSize;
|
|
261
|
+
private rebuildCrossSizes;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
declare class SpatialRectEngine implements LayoutEngine {
|
|
265
|
+
private countValue;
|
|
266
|
+
private readonly getKey;
|
|
267
|
+
private readonly estimateRect;
|
|
268
|
+
private readonly mode;
|
|
269
|
+
private readonly direction;
|
|
270
|
+
private readonly lanes;
|
|
271
|
+
private readonly gap;
|
|
272
|
+
private readonly padding;
|
|
273
|
+
private readonly minSize;
|
|
274
|
+
private keys;
|
|
275
|
+
private sourceRects;
|
|
276
|
+
private rects;
|
|
277
|
+
private measured;
|
|
278
|
+
private measuredRectsByKey;
|
|
279
|
+
private keyToIndex;
|
|
280
|
+
constructor(options: VirtualContentOptions);
|
|
281
|
+
get count(): number;
|
|
282
|
+
setCount(count: number): void;
|
|
283
|
+
keyOf(index: number): ItemKey | undefined;
|
|
284
|
+
indexOfKey(key: ItemKey): number;
|
|
285
|
+
getTotalRect(): VirtualRect;
|
|
286
|
+
getVisibleItems(viewport: VirtualRect, overscan: VirtualOverscan): VirtualItem[];
|
|
287
|
+
getItemRect(index: number): VirtualRect | undefined;
|
|
288
|
+
getItemMainStart(index: number): number;
|
|
289
|
+
getItemMainSize(index: number): number;
|
|
290
|
+
isMeasured(index: number): boolean;
|
|
291
|
+
measureItem(index: number, key: ItemKey, rect: Partial<VirtualRect>): LayoutMeasurementResult;
|
|
292
|
+
resetMeasurements(keys?: ItemKey[]): void;
|
|
293
|
+
getScrollTarget(index: number, align: ScrollAlign, viewport: VirtualRect): VirtualPoint;
|
|
294
|
+
locateCenter(viewportCenter: VirtualPoint): {
|
|
295
|
+
index: number;
|
|
296
|
+
mode: "initial" | "tracked" | "recenter";
|
|
297
|
+
};
|
|
298
|
+
private rebuild;
|
|
299
|
+
private placeMasonryRect;
|
|
300
|
+
private placeFreeRect;
|
|
301
|
+
private createItem;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
interface ResolvedLayoutGap {
|
|
305
|
+
main: number;
|
|
306
|
+
cross: number;
|
|
307
|
+
}
|
|
308
|
+
interface ResolvedLayoutPadding {
|
|
309
|
+
mainStart: number;
|
|
310
|
+
mainEnd: number;
|
|
311
|
+
crossStart: number;
|
|
312
|
+
crossEnd: number;
|
|
313
|
+
}
|
|
314
|
+
declare function resolveLayoutGap(gap: VirtualLayoutGap | undefined): ResolvedLayoutGap;
|
|
315
|
+
declare function resolveLayoutPadding(padding: VirtualLayoutPadding | undefined): ResolvedLayoutPadding;
|
|
316
|
+
|
|
317
|
+
interface SizeModelSpacing {
|
|
318
|
+
gap?: number;
|
|
319
|
+
paddingStart?: number;
|
|
320
|
+
paddingEnd?: number;
|
|
321
|
+
}
|
|
322
|
+
interface SizeModelOptions {
|
|
323
|
+
count: number;
|
|
324
|
+
estimateSize: (index: number) => number;
|
|
325
|
+
getKey: (index: number) => ItemKey;
|
|
326
|
+
minSize?: number;
|
|
327
|
+
}
|
|
328
|
+
interface SizeModelMeasurement {
|
|
329
|
+
delta: number;
|
|
330
|
+
changed: boolean;
|
|
331
|
+
stale: boolean;
|
|
332
|
+
size: number;
|
|
333
|
+
}
|
|
334
|
+
declare class SizeModel {
|
|
335
|
+
private countValue;
|
|
336
|
+
private readonly estimateSize;
|
|
337
|
+
private readonly getKey;
|
|
338
|
+
private readonly minSize;
|
|
339
|
+
private keys;
|
|
340
|
+
private measured;
|
|
341
|
+
private measuredSizesByKey;
|
|
342
|
+
private tree;
|
|
343
|
+
private keyToIndex;
|
|
344
|
+
constructor(options: SizeModelOptions);
|
|
345
|
+
get count(): number;
|
|
346
|
+
setCount(count: number): void;
|
|
347
|
+
keyOf(index: number): ItemKey | undefined;
|
|
348
|
+
indexOfKey(key: ItemKey): number;
|
|
349
|
+
sizeOf(index: number): number;
|
|
350
|
+
isMeasured(index: number): boolean;
|
|
351
|
+
startOf(index: number): number;
|
|
352
|
+
endOf(index: number): number;
|
|
353
|
+
spacedStartOf(index: number, spacing?: SizeModelSpacing): number;
|
|
354
|
+
spacedEndOf(index: number, spacing?: SizeModelSpacing): number;
|
|
355
|
+
totalSize(): number;
|
|
356
|
+
spacedTotalSize(spacing?: SizeModelSpacing): number;
|
|
357
|
+
lowerBound(offset: number): number;
|
|
358
|
+
spacedLowerBound(offset: number, spacing?: SizeModelSpacing): number;
|
|
359
|
+
measure(key: ItemKey, index: number, size: number): SizeModelMeasurement;
|
|
360
|
+
resetMeasurements(keys?: ItemKey[]): void;
|
|
361
|
+
private rebuild;
|
|
362
|
+
private normalizeSize;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
declare class Virtualizer {
|
|
366
|
+
private readonly engine;
|
|
367
|
+
private readonly baseOverscan;
|
|
368
|
+
private readonly adaptiveRange;
|
|
369
|
+
private readonly scrollAxis;
|
|
370
|
+
private readonly layoutMode;
|
|
371
|
+
private readonly layoutDirection;
|
|
372
|
+
private readonly measurementAxes;
|
|
373
|
+
private readonly recenterThreshold;
|
|
374
|
+
private viewportRect;
|
|
375
|
+
private scrollPoint;
|
|
376
|
+
private lastScrollPoint;
|
|
377
|
+
private lastScrollTime;
|
|
378
|
+
private lastMovementTime;
|
|
379
|
+
private scrollVelocity;
|
|
380
|
+
private scrollDirection;
|
|
381
|
+
private lastCenterIndex;
|
|
382
|
+
private lastViewportCenter;
|
|
383
|
+
private lastLocateMode;
|
|
384
|
+
constructor(options: VirtualContentOptions);
|
|
385
|
+
setViewport(size: number): void;
|
|
386
|
+
setViewportRect(rect: VirtualRect): void;
|
|
387
|
+
setScrollOffset(offset: number, timestamp?: number): void;
|
|
388
|
+
setScrollPoint(point: VirtualPoint, timestamp?: number): void;
|
|
389
|
+
recenter(offsetOrPoint?: number | VirtualPoint): void;
|
|
390
|
+
setCount(count: number): void;
|
|
391
|
+
setMeasuredSize(key: ItemKey, index: number, size: number): VirtualMeasurementResult;
|
|
392
|
+
setMeasuredRect(key: ItemKey, index: number, rect: Partial<VirtualRect>): VirtualMeasurementResult;
|
|
393
|
+
resetMeasurements(keys?: ItemKey[]): void;
|
|
394
|
+
getState(): VirtualState;
|
|
395
|
+
getSnapshot(): VirtualSnapshot;
|
|
396
|
+
makeAnchor(snapshot?: VirtualSnapshot): VirtualAnchor | undefined;
|
|
397
|
+
getScrollOffsetForAnchor(anchor: VirtualAnchor): number;
|
|
398
|
+
getScrollPointForAnchor(anchor: VirtualAnchor): VirtualPoint;
|
|
399
|
+
scrollToIndex(index: number, align?: ScrollAlign): number;
|
|
400
|
+
scrollToItem(index: number, align?: ScrollAlign): VirtualPoint;
|
|
401
|
+
getScrollTarget(index: number, align?: ScrollAlign): VirtualPoint;
|
|
402
|
+
resolveScrollTarget(target: VirtualScrollTarget): VirtualPoint;
|
|
403
|
+
scrollToPoint(point: VirtualPoint): VirtualPoint;
|
|
404
|
+
scrollToRect(rect: VirtualRect, align?: ScrollAlign): VirtualPoint;
|
|
405
|
+
getDebugState(): VirtualizerDebugState;
|
|
406
|
+
private createSnapshot;
|
|
407
|
+
private locateCenter;
|
|
408
|
+
private updateScrollVelocity;
|
|
409
|
+
private resetScrollVelocity;
|
|
410
|
+
private resolveCurrentOverscan;
|
|
411
|
+
private getViewportCenterPoint;
|
|
412
|
+
private getRecenterThreshold;
|
|
413
|
+
private clampScrollPoint;
|
|
414
|
+
private projectScrollOffset;
|
|
415
|
+
private projectViewportSize;
|
|
416
|
+
private projectTotalSize;
|
|
417
|
+
private projectPoint;
|
|
418
|
+
private isHorizontalLayoutDirection;
|
|
419
|
+
private resolveAnchorIndex;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export { type AdaptiveRangeOptions, FenwickTree, type ItemKey, type LayoutDirection, type LayoutEngine, type LayoutMeasurementResult, type LayoutMode, LinearBandEngine, type LocateMode, type MeasurementAxes, type OverscanRange, type ResolvedLayoutGap, type ResolvedLayoutPadding, type ScrollAlign, type ScrollAxis, SizeModel, type SizeModelMeasurement, SpatialRectEngine, type VirtualAnchor, type VirtualContentOptions, type VirtualItem, type VirtualLayoutConfig, type VirtualLayoutGap, type VirtualLayoutPadding, type VirtualMeasurementConfig, type VirtualMeasurementResult, type VirtualOverscan, type VirtualPoint, type VirtualRangeConfig, type VirtualRect, type VirtualScrollOptions, type VirtualScrollTarget, type VirtualSnapshot, type VirtualState, type VirtualStickAxis, type VirtualStickState, type VirtualStickToEndOptions, type VirtualSyncConfig, Virtualizer, type VirtualizerDebugState, createPoint, createRect, expandRect, rectFromScrollPoint, rectsIntersect, resolveLayoutGap, resolveLayoutPadding };
|