virtua 0.46.7 → 0.47.1
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/README.md +13 -1
- package/lib/core/index.cjs +1 -1
- package/lib/core/index.cjs.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/react/VGrid.d.ts +29 -19
- package/lib/react/Virtualizer.d.ts +3 -6
- package/lib/react/WindowVirtualizer.d.ts +19 -4
- package/lib/solid/Virtualizer.d.ts +3 -6
- package/lib/solid/WindowVirtualizer.d.ts +19 -4
- package/lib/solid/index.cjs +1 -1
- package/lib/solid/index.cjs.map +1 -1
- package/lib/solid/index.js +1 -1
- package/lib/solid/index.js.map +1 -1
- package/lib/solid/index.jsx +55 -36
- package/lib/solid/index.jsx.map +1 -1
- package/lib/svelte/VList.svelte +4 -4
- package/lib/svelte/Virtualizer.svelte +2 -4
- package/lib/svelte/Virtualizer.type.d.ts +4 -7
- package/lib/svelte/WindowVirtualizer.svelte +10 -4
- package/lib/svelte/WindowVirtualizer.type.d.ts +20 -5
- package/lib/vue/Virtualizer.d.ts +3 -6
- package/lib/vue/WindowVirtualizer.d.ts +19 -4
- package/lib/vue/index.cjs +1 -1
- package/lib/vue/index.cjs.map +1 -1
- package/lib/vue/index.js +1 -1
- package/lib/vue/index.js.map +1 -1
- package/package.json +1 -1
package/lib/solid/index.jsx
CHANGED
|
@@ -105,19 +105,18 @@ const getItemOffset = (cache, index) => {
|
|
|
105
105
|
*/
|
|
106
106
|
const findIndex = (cache, offset, low = 0, high = cache._length - 1) => {
|
|
107
107
|
// Find with binary search
|
|
108
|
+
let found = low;
|
|
108
109
|
while (low <= high) {
|
|
109
110
|
const mid = floor((low + high) / 2);
|
|
110
111
|
if (getItemOffset(cache, mid) <= offset) {
|
|
111
|
-
|
|
112
|
-
return mid;
|
|
113
|
-
}
|
|
112
|
+
found = mid;
|
|
114
113
|
low = mid + 1;
|
|
115
114
|
}
|
|
116
115
|
else {
|
|
117
116
|
high = mid - 1;
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
|
-
return clamp(
|
|
119
|
+
return clamp(found, 0, cache._length - 1);
|
|
121
120
|
};
|
|
122
121
|
/**
|
|
123
122
|
* @internal
|
|
@@ -168,12 +167,12 @@ const estimateDefaultItemSize = (cache, startIndex) => {
|
|
|
168
167
|
/**
|
|
169
168
|
* @internal
|
|
170
169
|
*/
|
|
171
|
-
const initCache = (length, itemSize,
|
|
170
|
+
const initCache = (length, itemSize, sizes) => {
|
|
172
171
|
return {
|
|
173
|
-
_defaultItemSize:
|
|
174
|
-
_sizes:
|
|
172
|
+
_defaultItemSize: itemSize,
|
|
173
|
+
_sizes: sizes
|
|
175
174
|
? // https://github.com/inokawa/virtua/issues/441
|
|
176
|
-
fill(
|
|
175
|
+
fill(sizes.slice(0, min(length, sizes.length)), max(0, length - sizes.length))
|
|
177
176
|
: fill([], length),
|
|
178
177
|
_length: length,
|
|
179
178
|
_computedOffsetIndex: -1,
|
|
@@ -306,7 +305,10 @@ const createVirtualStore = (elementsCount, itemSize = 40, ssrCount = 0, cacheSna
|
|
|
306
305
|
let _frozenRange = NULL;
|
|
307
306
|
let _prevRange = [0, isSSR ? max(ssrCount - 1, 0) : -1];
|
|
308
307
|
let _totalMeasuredSize = 0;
|
|
309
|
-
|
|
308
|
+
let _isViewportMeasured = false;
|
|
309
|
+
const cache = initCache(elementsCount, cacheSnapshot
|
|
310
|
+
? cacheSnapshot[1]
|
|
311
|
+
: itemSize, cacheSnapshot && cacheSnapshot[0]);
|
|
310
312
|
const subscribers = new Set();
|
|
311
313
|
const getRelativeScrollOffset = () => scrollOffset - startSpacerSize;
|
|
312
314
|
const getVisibleOffset = () => getRelativeScrollOffset() + pendingJump + jump;
|
|
@@ -347,10 +349,10 @@ const createVirtualStore = (elementsCount, itemSize = 40, ssrCount = 0, cacheSna
|
|
|
347
349
|
return takeCacheSnapshot(cache);
|
|
348
350
|
},
|
|
349
351
|
$getRange: (bufferSize = 200) => {
|
|
350
|
-
if (!
|
|
351
|
-
//
|
|
352
|
-
// We return range for SSR here, or return [0, -1] to render nothing, until the scroll offset and viewport size are determined.
|
|
352
|
+
if (!_isViewportMeasured || isSSR) {
|
|
353
|
+
// Return range for SSR, or return [0, -1] to render nothing, until the scroll offset and viewport size are determined.
|
|
353
354
|
// https://github.com/inokawa/virtua/issues/415
|
|
355
|
+
// https://github.com/inokawa/virtua/pull/818
|
|
354
356
|
return _prevRange;
|
|
355
357
|
}
|
|
356
358
|
let startIndex;
|
|
@@ -381,8 +383,7 @@ const createVirtualStore = (elementsCount, itemSize = 40, ssrCount = 0, cacheSna
|
|
|
381
383
|
}
|
|
382
384
|
return [max(startIndex, 0), min(endIndex, cache._length - 1)];
|
|
383
385
|
},
|
|
384
|
-
$
|
|
385
|
-
$findEndIndex: () => findIndex(cache, getVisibleOffset() + viewportSize),
|
|
386
|
+
$findItemIndex: (offset) => findIndex(cache, offset - startSpacerSize),
|
|
386
387
|
$isUnmeasuredItem: isSizeEqual,
|
|
387
388
|
$getItemOffset: getItemOffset$1,
|
|
388
389
|
$getItemSize: getItemSize$1,
|
|
@@ -523,7 +524,7 @@ const createVirtualStore = (elementsCount, itemSize = 40, ssrCount = 0, cacheSna
|
|
|
523
524
|
case ACTION_VIEWPORT_RESIZE: {
|
|
524
525
|
if (viewportSize !== payload) {
|
|
525
526
|
if (!viewportSize) {
|
|
526
|
-
shouldSync = true;
|
|
527
|
+
_isViewportMeasured = shouldSync = true;
|
|
527
528
|
}
|
|
528
529
|
viewportSize = payload;
|
|
529
530
|
mutated = UPDATE_VIRTUAL_STATE + UPDATE_SIZE_EVENT;
|
|
@@ -994,32 +995,44 @@ const createWindowScroller = (store, isHorizontal) => {
|
|
|
994
995
|
* @internal
|
|
995
996
|
*/
|
|
996
997
|
const createGridScroller = (rowStore, colStore) => {
|
|
997
|
-
const
|
|
998
|
-
const
|
|
998
|
+
const rowScroller = createScroller(rowStore, false);
|
|
999
|
+
const colScroller = createScroller(colStore, true);
|
|
999
1000
|
return {
|
|
1000
1001
|
$observe(viewportElement) {
|
|
1001
|
-
|
|
1002
|
-
|
|
1002
|
+
rowScroller.$observe(viewportElement);
|
|
1003
|
+
colScroller.$observe(viewportElement);
|
|
1003
1004
|
},
|
|
1004
1005
|
$dispose() {
|
|
1005
|
-
|
|
1006
|
-
|
|
1006
|
+
rowScroller.$dispose();
|
|
1007
|
+
colScroller.$dispose();
|
|
1007
1008
|
},
|
|
1008
|
-
$scrollTo(
|
|
1009
|
-
|
|
1010
|
-
|
|
1009
|
+
$scrollTo(row, col) {
|
|
1010
|
+
if (row != null) {
|
|
1011
|
+
rowScroller.$scrollTo(row);
|
|
1012
|
+
}
|
|
1013
|
+
if (col != null) {
|
|
1014
|
+
colScroller.$scrollTo(col);
|
|
1015
|
+
}
|
|
1011
1016
|
},
|
|
1012
|
-
$scrollBy(
|
|
1013
|
-
|
|
1014
|
-
|
|
1017
|
+
$scrollBy(row, col) {
|
|
1018
|
+
if (row != null) {
|
|
1019
|
+
rowScroller.$scrollBy(row);
|
|
1020
|
+
}
|
|
1021
|
+
if (col != null) {
|
|
1022
|
+
colScroller.$scrollBy(col);
|
|
1023
|
+
}
|
|
1015
1024
|
},
|
|
1016
|
-
$scrollToIndex(
|
|
1017
|
-
|
|
1018
|
-
|
|
1025
|
+
$scrollToIndex(row, col) {
|
|
1026
|
+
if (row != null) {
|
|
1027
|
+
rowScroller.$scrollToIndex(row);
|
|
1028
|
+
}
|
|
1029
|
+
if (col != null) {
|
|
1030
|
+
colScroller.$scrollToIndex(col);
|
|
1031
|
+
}
|
|
1019
1032
|
},
|
|
1020
1033
|
$fixScrollJump() {
|
|
1021
|
-
|
|
1022
|
-
|
|
1034
|
+
rowScroller.$fixScrollJump();
|
|
1035
|
+
colScroller.$fixScrollJump();
|
|
1023
1036
|
},
|
|
1024
1037
|
};
|
|
1025
1038
|
};
|
|
@@ -1345,8 +1358,7 @@ const Virtualizer = (props) => {
|
|
|
1345
1358
|
get viewportSize() {
|
|
1346
1359
|
return store.$getViewportSize();
|
|
1347
1360
|
},
|
|
1348
|
-
|
|
1349
|
-
findEndIndex: store.$findEndIndex,
|
|
1361
|
+
findItemIndex: store.$findItemIndex,
|
|
1350
1362
|
getItemOffset: store.$getItemOffset,
|
|
1351
1363
|
getItemSize: store.$getItemSize,
|
|
1352
1364
|
scrollToIndex: scroller.$scrollToIndex,
|
|
@@ -1511,8 +1523,15 @@ const WindowVirtualizer = (props) => {
|
|
|
1511
1523
|
get cache() {
|
|
1512
1524
|
return store.$getCacheSnapshot();
|
|
1513
1525
|
},
|
|
1514
|
-
|
|
1515
|
-
|
|
1526
|
+
get scrollOffset() {
|
|
1527
|
+
return store.$getScrollOffset();
|
|
1528
|
+
},
|
|
1529
|
+
get viewportSize() {
|
|
1530
|
+
return store.$getViewportSize();
|
|
1531
|
+
},
|
|
1532
|
+
findItemIndex: store.$findItemIndex,
|
|
1533
|
+
getItemOffset: store.$getItemOffset,
|
|
1534
|
+
getItemSize: store.$getItemSize,
|
|
1516
1535
|
scrollToIndex: scroller.$scrollToIndex,
|
|
1517
1536
|
});
|
|
1518
1537
|
}
|