virtua 0.53.2 → 0.53.4
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 +37 -32
- package/lib/angular/VGrid.d.ts +1 -1
- package/lib/angular/VList.d.ts +1 -1
- package/lib/angular/VMasonry.d.ts +1 -1
- package/lib/angular/Virtualizer.d.ts +1 -1
- package/lib/angular/WindowVirtualizer.d.ts +1 -1
- package/lib/angular/index.js +586 -586
- package/lib/angular/index.js.map +1 -1
- package/lib/core/index.cjs +405 -404
- package/lib/core/index.cjs.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.js +416 -415
- package/lib/core/index.js.map +1 -1
- package/lib/index.cjs +645 -645
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +639 -639
- package/lib/index.js.map +1 -1
- package/lib/react/VGrid.d.ts +1 -1
- package/lib/react/VMasonry.d.ts +1 -1
- package/lib/react/Virtualizer.d.ts +1 -1
- package/lib/react/WindowVirtualizer.d.ts +1 -1
- package/lib/solid/VGrid.d.ts +1 -1
- package/lib/solid/VMasonry.d.ts +1 -1
- package/lib/solid/Virtualizer.d.ts +1 -1
- package/lib/solid/WindowVirtualizer.d.ts +1 -1
- package/lib/solid/index.cjs +672 -671
- package/lib/solid/index.cjs.map +1 -1
- package/lib/solid/index.js +671 -671
- package/lib/solid/index.js.map +1 -1
- package/lib/solid/index.jsx +165 -214
- package/lib/solid/index.jsx.map +1 -1
- package/lib/svelte/VGrid.svelte +15 -20
- package/lib/svelte/VGrid.type.d.ts +1 -1
- package/lib/svelte/VMasonry.svelte +10 -13
- package/lib/svelte/VMasonry.type.d.ts +1 -1
- package/lib/svelte/Virtualizer.svelte +8 -8
- package/lib/svelte/Virtualizer.type.d.ts +1 -1
- package/lib/svelte/WindowVirtualizer.svelte +5 -7
- package/lib/svelte/WindowVirtualizer.type.d.ts +1 -1
- package/lib/vue/VGrid.d.ts +1 -1
- package/lib/vue/VMasonry.d.ts +1 -1
- package/lib/vue/Virtualizer.d.ts +1 -1
- package/lib/vue/WindowVirtualizer.d.ts +1 -1
- package/lib/vue/index.cjs +800 -797
- package/lib/vue/index.cjs.map +1 -1
- package/lib/vue/index.js +771 -768
- package/lib/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/lib/core/observer.d.ts +0 -1
package/lib/svelte/VGrid.svelte
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
type StateVersion,
|
|
5
5
|
ACTION_ITEMS_LENGTH_CHANGE,
|
|
6
|
-
|
|
6
|
+
relayout,
|
|
7
7
|
UPDATE_SCROLL_END_EVENT,
|
|
8
8
|
UPDATE_SIZE_EVENT,
|
|
9
9
|
microtask,
|
|
@@ -58,7 +58,12 @@
|
|
|
58
58
|
let spanIndex = $derived(createGridSpanIndex(spans));
|
|
59
59
|
const rowStore = createVirtualStore(rowLayout);
|
|
60
60
|
const colStore = createVirtualStore(colLayout);
|
|
61
|
-
const driver = createContainerGridDriver(
|
|
61
|
+
const driver = createContainerGridDriver(
|
|
62
|
+
rowStore,
|
|
63
|
+
colStore,
|
|
64
|
+
rowLayout,
|
|
65
|
+
colLayout,
|
|
66
|
+
);
|
|
62
67
|
|
|
63
68
|
let containerRef: HTMLDivElement | undefined = $state();
|
|
64
69
|
|
|
@@ -108,23 +113,13 @@
|
|
|
108
113
|
colLayout.$setPinned(headerCols, footerCols);
|
|
109
114
|
const rowLength = getAxisLength(rows);
|
|
110
115
|
const colLength = getAxisLength(cols);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
colStore.$update(ACTION_ITEMS_LENGTH_CHANGE, [colLength]);
|
|
116
|
-
}
|
|
117
|
-
rowStore.$update(
|
|
118
|
-
ACTION_RELAYOUT,
|
|
119
|
-
rowLayout.$relayout(rowSizes, rowStore.$getVisibleOffset()),
|
|
120
|
-
);
|
|
121
|
-
colStore.$update(
|
|
122
|
-
ACTION_RELAYOUT,
|
|
123
|
-
colLayout.$relayout(colSizes, colStore.$getVisibleOffset()),
|
|
124
|
-
);
|
|
116
|
+
rowStore.$update(ACTION_ITEMS_LENGTH_CHANGE, rowLength);
|
|
117
|
+
colStore.$update(ACTION_ITEMS_LENGTH_CHANGE, colLength);
|
|
118
|
+
relayout(rowStore, rowLayout, rowSizes);
|
|
119
|
+
relayout(colStore, colLayout, colSizes);
|
|
125
120
|
});
|
|
126
|
-
let rowCount = $derived(stateVersion &&
|
|
127
|
-
let colCount = $derived(stateVersion &&
|
|
121
|
+
let rowCount = $derived(stateVersion && rowLayout.$getLength());
|
|
122
|
+
let colCount = $derived(stateVersion && colLayout.$getLength());
|
|
128
123
|
let plan = $derived.by(() => {
|
|
129
124
|
stateVersion;
|
|
130
125
|
return createGridPlan(
|
|
@@ -176,8 +171,8 @@
|
|
|
176
171
|
rowStore.$getItemOffset;
|
|
177
172
|
export const getColOffset: VGridHandle["getColOffset"] =
|
|
178
173
|
colStore.$getItemOffset;
|
|
179
|
-
export const getRowSize: VGridHandle["getRowSize"] =
|
|
180
|
-
export const getColSize: VGridHandle["getColSize"] =
|
|
174
|
+
export const getRowSize: VGridHandle["getRowSize"] = rowLayout.$getItemSize;
|
|
175
|
+
export const getColSize: VGridHandle["getColSize"] = colLayout.$getItemSize;
|
|
181
176
|
export const scrollToIndex: VGridHandle["scrollToIndex"] = (opts) =>
|
|
182
177
|
gridScrollToIndex(
|
|
183
178
|
driver,
|
|
@@ -73,7 +73,7 @@ export interface VGridProps<R = number, C = number> extends Omit<ViewportCompone
|
|
|
73
73
|
*/
|
|
74
74
|
keepMounted?: readonly GridCell[];
|
|
75
75
|
/**
|
|
76
|
-
* Extra space in pixels to render before/after the viewport. The
|
|
76
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank cells in fast scrolling.
|
|
77
77
|
* @defaultValue 200
|
|
78
78
|
*/
|
|
79
79
|
bufferSize?: number;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
createContainerDriver,
|
|
11
11
|
createMasonryLayout,
|
|
12
12
|
ACTION_ITEMS_LENGTH_CHANGE,
|
|
13
|
-
|
|
13
|
+
relayout,
|
|
14
14
|
createVirtualStore,
|
|
15
15
|
getScrollSize as _getScrollSize,
|
|
16
16
|
scrollTo as _scrollTo,
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
cache,
|
|
52
52
|
);
|
|
53
53
|
const store = createVirtualStore(layout);
|
|
54
|
-
const driver = createContainerDriver(store, false);
|
|
54
|
+
const driver = createContainerDriver(store, layout, false);
|
|
55
55
|
store.$subscribe(UPDATE_VIRTUAL_STATE, () => {
|
|
56
56
|
stateVersion = store.$getStateVersion();
|
|
57
57
|
});
|
|
@@ -94,8 +94,10 @@
|
|
|
94
94
|
for (let i = start; i <= end; i++) {
|
|
95
95
|
mounted.add(i);
|
|
96
96
|
}
|
|
97
|
+
// The store may still have the previous length in async mode, as the range does
|
|
98
|
+
const storeLen = stateVersion && layout.$getLength();
|
|
97
99
|
for (const index of sort([...mounted])) {
|
|
98
|
-
if (index < len) {
|
|
100
|
+
if (index < len && index < storeLen) {
|
|
99
101
|
arr.push(index);
|
|
100
102
|
}
|
|
101
103
|
}
|
|
@@ -120,15 +122,10 @@
|
|
|
120
122
|
});
|
|
121
123
|
|
|
122
124
|
$effect.pre(() => {
|
|
123
|
-
|
|
124
|
-
store.$update(ACTION_ITEMS_LENGTH_CHANGE, [data.length]);
|
|
125
|
-
}
|
|
125
|
+
store.$update(ACTION_ITEMS_LENGTH_CHANGE, data.length);
|
|
126
126
|
});
|
|
127
127
|
$effect.pre(() => {
|
|
128
|
-
store
|
|
129
|
-
ACTION_RELAYOUT,
|
|
130
|
-
layout.$relayout(lanesProp, gapProp, store.$getVisibleOffset()),
|
|
131
|
-
);
|
|
128
|
+
relayout(store, layout, lanesProp, gapProp);
|
|
132
129
|
});
|
|
133
130
|
|
|
134
131
|
let prevStateVersion: StateVersion | undefined;
|
|
@@ -151,9 +148,9 @@
|
|
|
151
148
|
export const getItemOffset =
|
|
152
149
|
store.$getItemOffset satisfies VMasonryHandle["getItemOffset"] as VMasonryHandle["getItemOffset"];
|
|
153
150
|
export const getItemSize =
|
|
154
|
-
|
|
151
|
+
layout.$getItemSize satisfies VMasonryHandle["getItemSize"] as VMasonryHandle["getItemSize"];
|
|
155
152
|
export const scrollToIndex: VMasonryHandle["scrollToIndex"] = (index, opts) =>
|
|
156
|
-
_scrollToIndex(driver, store, index, opts);
|
|
153
|
+
_scrollToIndex(driver, store, layout, index, opts);
|
|
157
154
|
export const scrollTo: VMasonryHandle["scrollTo"] = (offset) =>
|
|
158
155
|
_scrollTo(driver, offset);
|
|
159
156
|
export const scrollBy: VMasonryHandle["scrollBy"] = (offset) =>
|
|
@@ -195,7 +192,7 @@
|
|
|
195
192
|
offset={stateVersion && store.$getItemOffset(index)}
|
|
196
193
|
crossOffset={toCrossValue(lane / lanes, (lane * gap) / lanes)}
|
|
197
194
|
{crossSize}
|
|
198
|
-
hide={stateVersion &&
|
|
195
|
+
hide={stateVersion && layout.$isSizeEqual(index)}
|
|
199
196
|
resizer={driver.$observeItem}
|
|
200
197
|
/>
|
|
201
198
|
{/each}
|
|
@@ -35,7 +35,7 @@ export interface VMasonryProps<T> extends ViewportComponentAttributes {
|
|
|
35
35
|
*/
|
|
36
36
|
itemSize?: number;
|
|
37
37
|
/**
|
|
38
|
-
* Extra
|
|
38
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
39
39
|
* @defaultValue 200
|
|
40
40
|
*/
|
|
41
41
|
bufferSize?: number;
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
const layout = createListLayout(data.length, itemSize, cache);
|
|
52
52
|
const store = createVirtualStore(layout, ssrCount);
|
|
53
|
-
const driver = createContainerDriver(store, horizontal);
|
|
53
|
+
const driver = createContainerDriver(store, layout, horizontal);
|
|
54
54
|
store.$subscribe(UPDATE_VIRTUAL_STATE, () => {
|
|
55
55
|
stateVersion = store.$getStateVersion();
|
|
56
56
|
});
|
|
@@ -92,8 +92,10 @@
|
|
|
92
92
|
for (let i = start; i <= end; i++) {
|
|
93
93
|
mounted.add(i);
|
|
94
94
|
}
|
|
95
|
+
// The store may still have the previous length in async mode, as the range does
|
|
96
|
+
const storeLen = stateVersion && layout.$getLength();
|
|
95
97
|
for (const index of sort([...mounted])) {
|
|
96
|
-
if (index < len) {
|
|
98
|
+
if (index < len && index < storeLen) {
|
|
97
99
|
arr.push(index);
|
|
98
100
|
}
|
|
99
101
|
}
|
|
@@ -130,9 +132,7 @@
|
|
|
130
132
|
});
|
|
131
133
|
|
|
132
134
|
$effect.pre(() => {
|
|
133
|
-
|
|
134
|
-
store.$update(ACTION_ITEMS_LENGTH_CHANGE, [data.length, shift]);
|
|
135
|
-
}
|
|
135
|
+
store.$update(ACTION_ITEMS_LENGTH_CHANGE, data.length, shift);
|
|
136
136
|
});
|
|
137
137
|
|
|
138
138
|
$effect.pre(() => {
|
|
@@ -165,11 +165,11 @@
|
|
|
165
165
|
export const getItemOffset =
|
|
166
166
|
store.$getItemOffset satisfies VirtualizerHandle["getItemOffset"] as VirtualizerHandle["getItemOffset"];
|
|
167
167
|
export const getItemSize =
|
|
168
|
-
|
|
168
|
+
layout.$getItemSize satisfies VirtualizerHandle["getItemSize"] as VirtualizerHandle["getItemSize"];
|
|
169
169
|
export const scrollToIndex: VirtualizerHandle["scrollToIndex"] = (
|
|
170
170
|
index,
|
|
171
171
|
opts,
|
|
172
|
-
) => _scrollToIndex(driver, store, index, opts);
|
|
172
|
+
) => _scrollToIndex(driver, store, layout, index, opts);
|
|
173
173
|
export const scrollTo: VirtualizerHandle["scrollTo"] = (offset) =>
|
|
174
174
|
_scrollTo(driver, offset);
|
|
175
175
|
export const scrollBy: VirtualizerHandle["scrollBy"] = (offset) =>
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
{index}
|
|
202
202
|
as={itemAs}
|
|
203
203
|
offset={stateVersion && store.$getItemOffset(index)}
|
|
204
|
-
hide={stateVersion &&
|
|
204
|
+
hide={stateVersion && layout.$isSizeEqual(index)}
|
|
205
205
|
{horizontal}
|
|
206
206
|
{isSSR}
|
|
207
207
|
resizer={driver.$observeItem}
|
|
@@ -34,7 +34,7 @@ export interface VirtualizerProps<T> {
|
|
|
34
34
|
*/
|
|
35
35
|
itemProps?: ItemProps<T>;
|
|
36
36
|
/**
|
|
37
|
-
* Extra
|
|
37
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
38
38
|
* @defaultValue 200
|
|
39
39
|
*/
|
|
40
40
|
bufferSize?: number;
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
const layout = createListLayout(data.length, itemSize, cache);
|
|
42
42
|
const store = createVirtualStore(layout, ssrCount);
|
|
43
|
-
const driver = createWindowDriver(store, horizontal);
|
|
43
|
+
const driver = createWindowDriver(store, layout, horizontal);
|
|
44
44
|
store.$subscribe(UPDATE_VIRTUAL_STATE, () => {
|
|
45
45
|
stateVersion = store.$getStateVersion();
|
|
46
46
|
});
|
|
@@ -99,9 +99,7 @@
|
|
|
99
99
|
});
|
|
100
100
|
|
|
101
101
|
$effect.pre(() => {
|
|
102
|
-
|
|
103
|
-
store.$update(ACTION_ITEMS_LENGTH_CHANGE, [data.length, shift]);
|
|
104
|
-
}
|
|
102
|
+
store.$update(ACTION_ITEMS_LENGTH_CHANGE, data.length, shift);
|
|
105
103
|
});
|
|
106
104
|
|
|
107
105
|
let prevStateVersion: StateVersion | undefined;
|
|
@@ -124,11 +122,11 @@
|
|
|
124
122
|
export const getItemOffset =
|
|
125
123
|
store.$getItemOffset satisfies WindowVirtualizerHandle["getItemOffset"] as WindowVirtualizerHandle["getItemOffset"];
|
|
126
124
|
export const getItemSize =
|
|
127
|
-
|
|
125
|
+
layout.$getItemSize satisfies WindowVirtualizerHandle["getItemSize"] as WindowVirtualizerHandle["getItemSize"];
|
|
128
126
|
export const scrollToIndex: WindowVirtualizerHandle["scrollToIndex"] = (
|
|
129
127
|
index,
|
|
130
128
|
opts,
|
|
131
|
-
) => _scrollToIndex(driver, store, index, opts);
|
|
129
|
+
) => _scrollToIndex(driver, store, layout, index, opts);
|
|
132
130
|
|
|
133
131
|
let containerStyle = $derived(
|
|
134
132
|
styleToString({
|
|
@@ -156,7 +154,7 @@
|
|
|
156
154
|
{index}
|
|
157
155
|
as="div"
|
|
158
156
|
offset={stateVersion && store.$getItemOffset(index)}
|
|
159
|
-
hide={stateVersion &&
|
|
157
|
+
hide={stateVersion && layout.$isSizeEqual(index)}
|
|
160
158
|
{horizontal}
|
|
161
159
|
{isSSR}
|
|
162
160
|
resizer={driver.$observeItem}
|
|
@@ -18,7 +18,7 @@ export interface WindowVirtualizerProps<T> {
|
|
|
18
18
|
*/
|
|
19
19
|
getKey?: (data: T, index: number) => string | number;
|
|
20
20
|
/**
|
|
21
|
-
* Extra
|
|
21
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
22
22
|
* @defaultValue 200
|
|
23
23
|
*/
|
|
24
24
|
bufferSize?: number;
|
package/lib/vue/VGrid.d.ts
CHANGED
|
@@ -65,7 +65,7 @@ export interface VGridProps<R = number, C = number> extends PublicProps {
|
|
|
65
65
|
*/
|
|
66
66
|
keepMounted?: readonly GridCellType[];
|
|
67
67
|
/**
|
|
68
|
-
* Extra space in pixels to render before/after the viewport. The
|
|
68
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank cells in fast scrolling.
|
|
69
69
|
* @defaultValue 200
|
|
70
70
|
*/
|
|
71
71
|
bufferSize?: number;
|
package/lib/vue/VMasonry.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export interface VMasonryProps<T> extends PublicProps {
|
|
|
72
72
|
*/
|
|
73
73
|
itemSize?: number;
|
|
74
74
|
/**
|
|
75
|
-
* Extra
|
|
75
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
76
76
|
* @defaultValue 200
|
|
77
77
|
*/
|
|
78
78
|
bufferSize?: number;
|
package/lib/vue/Virtualizer.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface VirtualizerProps<T = unknown> extends PublicProps {
|
|
|
10
10
|
*/
|
|
11
11
|
data: T[];
|
|
12
12
|
/**
|
|
13
|
-
* Extra
|
|
13
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
14
14
|
* @defaultValue 200
|
|
15
15
|
*/
|
|
16
16
|
bufferSize?: number;
|
|
@@ -9,7 +9,7 @@ export interface WindowVirtualizerProps<T = unknown> extends PublicProps {
|
|
|
9
9
|
*/
|
|
10
10
|
data: T[];
|
|
11
11
|
/**
|
|
12
|
-
* Extra
|
|
12
|
+
* Extra space in pixels to render before/after the viewport. The default value is recommended for most cases. A smaller value gives better performance, and a larger value avoids showing blank items in fast scrolling.
|
|
13
13
|
* @defaultValue 200
|
|
14
14
|
*/
|
|
15
15
|
bufferSize?: number;
|