virtua 0.52.6 → 0.52.8
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 +1 -1
- package/lib/angular/index.js +289 -280
- package/lib/angular/index.js.map +1 -1
- package/lib/core/index.cjs +482 -476
- package/lib/core/index.cjs.map +1 -1
- package/lib/core/index.d.ts +3 -3
- package/lib/core/index.js +478 -472
- package/lib/core/index.js.map +1 -1
- package/lib/index.cjs +470 -462
- package/lib/index.cjs.map +1 -1
- package/lib/index.js +453 -445
- package/lib/index.js.map +1 -1
- package/lib/solid/index.cjs +423 -417
- package/lib/solid/index.cjs.map +1 -1
- package/lib/solid/index.js +493 -487
- package/lib/solid/index.js.map +1 -1
- package/lib/solid/index.jsx +213 -158
- package/lib/solid/index.jsx.map +1 -1
- package/lib/svelte/VGrid.svelte +14 -5
- package/lib/vue/index.cjs +432 -426
- package/lib/vue/index.cjs.map +1 -1
- package/lib/vue/index.js +441 -435
- package/lib/vue/index.js.map +1 -1
- package/package.json +22 -22
package/lib/solid/index.jsx
CHANGED
|
@@ -60,8 +60,7 @@ var UPDATE_SCROLL_END_EVENT = 8;
|
|
|
60
60
|
var getScrollSize = (store) => {
|
|
61
61
|
return max(store.$getTotalSize(), store.$getViewportSize());
|
|
62
62
|
};
|
|
63
|
-
var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItemOffset: getOffset, $getItemSize: getItemSize, $
|
|
64
|
-
let shouldAutoEstimateItemSize = !!estimateDefaultSize;
|
|
63
|
+
var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItemOffset: getOffset, $getItemSize: getItemSize, $isSizeEqual: isSizeEqual, $getTotalSize: getTotalSize, $getLength: getLength, $setLength: setLength, $isEstimating: isEstimating, $resize: resize, $relayout: relayout }, ssrCount = 0) => {
|
|
65
64
|
let isSSR = !!ssrCount;
|
|
66
65
|
let stateVersion = 1;
|
|
67
66
|
let viewportSize = 0;
|
|
@@ -74,7 +73,6 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
74
73
|
let _scrollMode = SCROLL_BY_NATIVE;
|
|
75
74
|
let _frozenRange = null;
|
|
76
75
|
let _prevRange = [0, isSSR ? max(ssrCount - 1, 0) : -1];
|
|
77
|
-
let _totalMeasuredSize = 0;
|
|
78
76
|
let _isViewportMeasured = false;
|
|
79
77
|
const subscribers = new Set();
|
|
80
78
|
const getRelativeScrollOffset = () => scrollOffset - startSpacerSize;
|
|
@@ -82,6 +80,18 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
82
80
|
const getItemOffset = (index) => {
|
|
83
81
|
return getOffset(index) - pendingJump;
|
|
84
82
|
};
|
|
83
|
+
const shouldKeep = (index) => {
|
|
84
|
+
if (_scrollMode === SCROLL_BY_SHIFT) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
if (_frozenRange && _scrollMode === SCROLL_BY_MANUAL_SCROLL) {
|
|
88
|
+
return index < _frozenRange[0];
|
|
89
|
+
}
|
|
90
|
+
const start = getRelativeScrollOffset();
|
|
91
|
+
const itemOffset = getItemOffset(index);
|
|
92
|
+
const itemSize = getItemSize(index);
|
|
93
|
+
return _scrollDirection !== SCROLL_DOWN && _scrollMode === SCROLL_BY_NATIVE ? itemOffset + itemSize <= start : itemOffset < start && itemOffset + itemSize < start + viewportSize;
|
|
94
|
+
};
|
|
85
95
|
const applyJump = (j) => {
|
|
86
96
|
if (j) {
|
|
87
97
|
if (isIOSWebKit() && _scrollDirection !== SCROLL_IDLE || _frozenRange && _scrollMode === SCROLL_BY_MANUAL_SCROLL) {
|
|
@@ -107,7 +117,7 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
107
117
|
} else {
|
|
108
118
|
let startOffset = max(0, getVisibleOffset());
|
|
109
119
|
let endOffset = startOffset + viewportSize;
|
|
110
|
-
if (!
|
|
120
|
+
if (!isEstimating()) {
|
|
111
121
|
bufferSize = max(0, bufferSize);
|
|
112
122
|
if (_scrollDirection !== SCROLL_DOWN) {
|
|
113
123
|
startOffset -= bufferSize;
|
|
@@ -191,34 +201,7 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
191
201
|
if (!updated.length) {
|
|
192
202
|
break;
|
|
193
203
|
}
|
|
194
|
-
applyJump(updated
|
|
195
|
-
let shouldKeep;
|
|
196
|
-
if (_scrollMode === SCROLL_BY_SHIFT) {
|
|
197
|
-
shouldKeep = true;
|
|
198
|
-
} else if (_frozenRange && _scrollMode === SCROLL_BY_MANUAL_SCROLL) {
|
|
199
|
-
shouldKeep = index < _frozenRange[0];
|
|
200
|
-
} else {
|
|
201
|
-
const start = getRelativeScrollOffset();
|
|
202
|
-
const itemOffset = getItemOffset(index);
|
|
203
|
-
const itemSize = getItemSize(index);
|
|
204
|
-
shouldKeep = _scrollDirection !== SCROLL_DOWN && _scrollMode === SCROLL_BY_NATIVE ? itemOffset + itemSize <= start : itemOffset < start && itemOffset + itemSize < start + viewportSize;
|
|
205
|
-
}
|
|
206
|
-
if (shouldKeep) {
|
|
207
|
-
acc += size - getItemSize(index);
|
|
208
|
-
}
|
|
209
|
-
return acc;
|
|
210
|
-
}, 0));
|
|
211
|
-
for (const [index, size] of updated) {
|
|
212
|
-
const prevSize = getItemSize(index);
|
|
213
|
-
const isInitialMeasurement = setItemSize(index, size);
|
|
214
|
-
if (shouldAutoEstimateItemSize) {
|
|
215
|
-
_totalMeasuredSize += isInitialMeasurement ? size : size - prevSize;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
if (shouldAutoEstimateItemSize && viewportSize && _totalMeasuredSize > viewportSize) {
|
|
219
|
-
applyJump(estimateDefaultSize(findIndex(getVisibleOffset())));
|
|
220
|
-
shouldAutoEstimateItemSize = false;
|
|
221
|
-
}
|
|
204
|
+
applyJump(resize(updated, shouldKeep, getVisibleOffset(), viewportSize));
|
|
222
205
|
mutated = 1 + 2;
|
|
223
206
|
shouldSync = true;
|
|
224
207
|
break;
|
|
@@ -253,8 +236,11 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
253
236
|
break;
|
|
254
237
|
}
|
|
255
238
|
case 9: {
|
|
256
|
-
|
|
257
|
-
|
|
239
|
+
const relayoutJump = relayout(payload, getVisibleOffset());
|
|
240
|
+
if (relayoutJump != null) {
|
|
241
|
+
applyJump(relayoutJump);
|
|
242
|
+
mutated = 1 + 2;
|
|
243
|
+
}
|
|
258
244
|
break;
|
|
259
245
|
}
|
|
260
246
|
case 8: {
|
|
@@ -283,6 +269,13 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
|
|
|
283
269
|
//#endregion
|
|
284
270
|
//#region src/core/cache.ts
|
|
285
271
|
var UNCACHED = -1;
|
|
272
|
+
var fill = (array, length, prepend) => {
|
|
273
|
+
const key = prepend ? "unshift" : "push";
|
|
274
|
+
for (let i = 0; i < length; i++) {
|
|
275
|
+
array[key](-1);
|
|
276
|
+
}
|
|
277
|
+
return array;
|
|
278
|
+
};
|
|
286
279
|
var findIndex = (getOffset, length, offset, low = 0, high = length - 1) => {
|
|
287
280
|
let found = low;
|
|
288
281
|
while (low <= high) {
|
|
@@ -299,16 +292,11 @@ var findIndex = (getOffset, length, offset, low = 0, high = length - 1) => {
|
|
|
299
292
|
|
|
300
293
|
//#endregion
|
|
301
294
|
//#region src/core/layouts/list.ts
|
|
302
|
-
var fill = (array, length, prepend) => {
|
|
303
|
-
const key = prepend ? "unshift" : "push";
|
|
304
|
-
for (let i = 0; i < length; i++) {
|
|
305
|
-
array[key](-1);
|
|
306
|
-
}
|
|
307
|
-
return array;
|
|
308
|
-
};
|
|
309
295
|
var createListLayout = (length, itemSize, snapshot) => {
|
|
310
296
|
let defaultItemSize = snapshot && snapshot[1] || itemSize || 40;
|
|
311
297
|
let computedOffsetIndex = -1;
|
|
298
|
+
let _totalMeasuredSize = 0;
|
|
299
|
+
let shouldAutoEstimateItemSize = !itemSize;
|
|
312
300
|
let prevStartIndex = 0;
|
|
313
301
|
const restoredSizes = snapshot && snapshot[0];
|
|
314
302
|
const sizes = restoredSizes ? fill(restoredSizes.slice(0, min(length, restoredSizes.length)), max(0, length - restoredSizes.length)) : fill([], length);
|
|
@@ -353,13 +341,39 @@ var createListLayout = (length, itemSize, snapshot) => {
|
|
|
353
341
|
$findIndex: (offset) => findIndex(getOffset, length, offset),
|
|
354
342
|
$getItemOffset: getOffset,
|
|
355
343
|
$getItemSize: getSize,
|
|
356
|
-
$setItemSize: (index, size) => {
|
|
357
|
-
const isInitialMeasurement = sizes[index] === -1;
|
|
358
|
-
sizes[index] = size;
|
|
359
|
-
computedOffsetIndex = min(index, computedOffsetIndex);
|
|
360
|
-
return isInitialMeasurement;
|
|
361
|
-
},
|
|
362
344
|
$isSizeEqual: (index, size = -1) => sizes[index] === size,
|
|
345
|
+
$resize: (resizes, shouldKeep, scrollOffset, viewportSize) => {
|
|
346
|
+
let jump = resizes.reduce((acc, [index, size]) => shouldKeep(index) ? acc + (size - getSize(index)) : acc, 0);
|
|
347
|
+
for (const [index, size] of resizes) {
|
|
348
|
+
_totalMeasuredSize += sizes[index] === -1 ? size : size - getSize(index);
|
|
349
|
+
sizes[index] = size;
|
|
350
|
+
computedOffsetIndex = min(index, computedOffsetIndex);
|
|
351
|
+
}
|
|
352
|
+
if (shouldAutoEstimateItemSize && viewportSize && _totalMeasuredSize > viewportSize) {
|
|
353
|
+
let measuredCountBeforeStart = 0;
|
|
354
|
+
const startIndex = findIndex(getOffset, length, scrollOffset + jump);
|
|
355
|
+
const measuredSizes = [];
|
|
356
|
+
sizes.forEach((s, i) => {
|
|
357
|
+
if (s !== -1) {
|
|
358
|
+
if (s) {
|
|
359
|
+
measuredSizes.push(s);
|
|
360
|
+
}
|
|
361
|
+
if (i < startIndex) {
|
|
362
|
+
measuredCountBeforeStart++;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
computedOffsetIndex = -1;
|
|
367
|
+
sort(measuredSizes);
|
|
368
|
+
const len = measuredSizes.length;
|
|
369
|
+
const mid = len / 2 | 0;
|
|
370
|
+
const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
|
|
371
|
+
const prevDefaultItemSize = defaultItemSize;
|
|
372
|
+
jump += ((defaultItemSize = median) - prevDefaultItemSize) * max(startIndex - measuredCountBeforeStart, 0);
|
|
373
|
+
shouldAutoEstimateItemSize = false;
|
|
374
|
+
}
|
|
375
|
+
return jump;
|
|
376
|
+
},
|
|
363
377
|
$getTotalSize: () => getOffset(length),
|
|
364
378
|
$getLength: () => length,
|
|
365
379
|
$setLength: (nextLength, isShift) => {
|
|
@@ -375,27 +389,7 @@ var createListLayout = (length, itemSize, snapshot) => {
|
|
|
375
389
|
return (isShift ? sizes.splice(0, -diff) : sizes.splice(diff)).reduce((acc, removed) => acc - (removed === -1 ? defaultItemSize : removed), 0);
|
|
376
390
|
}
|
|
377
391
|
},
|
|
378
|
-
$
|
|
379
|
-
let measuredCountBeforeStart = 0;
|
|
380
|
-
const measuredSizes = [];
|
|
381
|
-
sizes.forEach((s, i) => {
|
|
382
|
-
if (s !== -1) {
|
|
383
|
-
if (s) {
|
|
384
|
-
measuredSizes.push(s);
|
|
385
|
-
}
|
|
386
|
-
if (i < startIndex) {
|
|
387
|
-
measuredCountBeforeStart++;
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
});
|
|
391
|
-
computedOffsetIndex = -1;
|
|
392
|
-
sort(measuredSizes);
|
|
393
|
-
const len = measuredSizes.length;
|
|
394
|
-
const mid = len / 2 | 0;
|
|
395
|
-
const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
|
|
396
|
-
const prevDefaultItemSize = defaultItemSize;
|
|
397
|
-
return ((defaultItemSize = median) - prevDefaultItemSize) * max(startIndex - measuredCountBeforeStart, 0);
|
|
398
|
-
},
|
|
392
|
+
$isEstimating: () => shouldAutoEstimateItemSize,
|
|
399
393
|
$snapshot: () => [sizes.slice(), defaultItemSize]
|
|
400
394
|
};
|
|
401
395
|
};
|
|
@@ -405,88 +399,151 @@ var createListLayout = (length, itemSize, snapshot) => {
|
|
|
405
399
|
var getAxisLength = (axis) => typeof axis === "number" ? axis : axis.length;
|
|
406
400
|
var getAxisItem = (axis, index) => typeof axis === "number" ? index : axis[index];
|
|
407
401
|
var createGridLayout = (axis, size, gap = 0) => {
|
|
402
|
+
let length = getAxisLength(axis);
|
|
403
|
+
const isUniform = typeof size === "number";
|
|
404
|
+
const isAuto = size === "auto";
|
|
405
|
+
let defaultItemSize = (isUniform ? size : 40) + gap;
|
|
406
|
+
let computedOffsetIndex = -1;
|
|
407
|
+
let _totalMeasuredSize = 0;
|
|
408
|
+
let shouldAutoEstimateItemSize = isAuto;
|
|
408
409
|
let header = 0;
|
|
409
410
|
let footer = 0;
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
411
|
+
let currentSizes = null;
|
|
412
|
+
const sizes = [];
|
|
413
|
+
const offsets = [];
|
|
414
|
+
const autos = [];
|
|
415
|
+
const isMeasurable = (index) => isAuto || !!autos[index];
|
|
416
|
+
const materialize = () => {
|
|
417
|
+
if (!sizes.length) {
|
|
418
|
+
fill(sizes, length);
|
|
419
|
+
}
|
|
413
420
|
};
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
const insetStart = getOffset(getPinnedStart(length));
|
|
418
|
-
const insetEnd = getOffset(length) - getOffset(getTrailStart(length));
|
|
419
|
-
const start = startOffset + (insetStart ? insetStart - gap : 0);
|
|
420
|
-
return getRange(start, max(start, endOffset - (insetEnd ? insetEnd - gap : 0)));
|
|
421
|
+
const getSize = (index) => {
|
|
422
|
+
const size = sizes[index];
|
|
423
|
+
return size === -1 ? defaultItemSize : size;
|
|
421
424
|
};
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
425
|
+
const getOffset = (index) => {
|
|
426
|
+
if (!length) return 0;
|
|
427
|
+
if (!sizes.length) {
|
|
428
|
+
return index * defaultItemSize;
|
|
429
|
+
}
|
|
430
|
+
if (computedOffsetIndex >= index) {
|
|
431
|
+
return offsets[index];
|
|
432
|
+
}
|
|
433
|
+
if (computedOffsetIndex < 0) {
|
|
434
|
+
offsets[0] = 0;
|
|
435
|
+
computedOffsetIndex = 0;
|
|
436
|
+
}
|
|
437
|
+
let i = computedOffsetIndex;
|
|
438
|
+
let top = offsets[i];
|
|
439
|
+
while (i < index) {
|
|
440
|
+
top += getSize(i);
|
|
441
|
+
offsets[++i] = top;
|
|
442
|
+
}
|
|
443
|
+
computedOffsetIndex = index;
|
|
444
|
+
return top;
|
|
445
|
+
};
|
|
446
|
+
const setSize = (index, size) => {
|
|
447
|
+
sizes[index] = size;
|
|
448
|
+
computedOffsetIndex = min(index, computedOffsetIndex);
|
|
449
|
+
};
|
|
450
|
+
const find = (offset) => sizes.length ? findIndex(getOffset, length, offset) : defaultItemSize ? clamp(floor(offset / defaultItemSize), 0, length - 1) : 0;
|
|
451
|
+
const getPinnedStart = () => min(header, length);
|
|
452
|
+
const getTrailStart = () => max(length - footer, getPinnedStart());
|
|
453
|
+
const getItemSize = (index) => (sizes.length ? getSize(index) : defaultItemSize) - gap;
|
|
454
|
+
return {
|
|
455
|
+
$getRange: (startOffset, endOffset) => {
|
|
456
|
+
const insetStart = getOffset(getPinnedStart());
|
|
457
|
+
const insetEnd = getOffset(length) - getOffset(getTrailStart());
|
|
458
|
+
const start = startOffset + (insetStart ? insetStart - gap : 0);
|
|
459
|
+
return [find(start), find(max(start, endOffset - (insetEnd ? insetEnd - gap : 0)))];
|
|
460
|
+
},
|
|
461
|
+
$findIndex: find,
|
|
462
|
+
$getItemOffset: getOffset,
|
|
463
|
+
$getItemSize: getItemSize,
|
|
464
|
+
$resize: (resizes, shouldKeep, scrollOffset, viewportSize) => {
|
|
465
|
+
let jump = resizes.reduce((acc, [index, size]) => isMeasurable(index) && shouldKeep(index) ? acc + (size - getItemSize(index)) : acc, 0);
|
|
466
|
+
for (const [index, size] of resizes) {
|
|
467
|
+
if (isMeasurable(index)) {
|
|
468
|
+
materialize();
|
|
469
|
+
_totalMeasuredSize += sizes[index] === -1 ? size : size - getItemSize(index);
|
|
470
|
+
setSize(index, size + gap);
|
|
449
471
|
}
|
|
450
|
-
const jump = findIndex(scrollOffset) * (nextSize - itemSize);
|
|
451
|
-
itemSize = nextSize;
|
|
452
|
-
return jump;
|
|
453
472
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
+
if (shouldAutoEstimateItemSize && viewportSize && _totalMeasuredSize > viewportSize) {
|
|
474
|
+
let measuredCountBeforeStart = 0;
|
|
475
|
+
const startIndex = find(scrollOffset + jump);
|
|
476
|
+
const measuredSizes = [];
|
|
477
|
+
sizes.forEach((s, i) => {
|
|
478
|
+
if (s !== -1) {
|
|
479
|
+
if (s) {
|
|
480
|
+
measuredSizes.push(s);
|
|
481
|
+
}
|
|
482
|
+
if (i < startIndex) {
|
|
483
|
+
measuredCountBeforeStart++;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
computedOffsetIndex = -1;
|
|
488
|
+
sort(measuredSizes);
|
|
489
|
+
const len = measuredSizes.length;
|
|
490
|
+
const mid = len / 2 | 0;
|
|
491
|
+
const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
|
|
492
|
+
const prevDefaultItemSize = defaultItemSize;
|
|
493
|
+
jump += ((defaultItemSize = median) - prevDefaultItemSize) * max(startIndex - measuredCountBeforeStart, 0);
|
|
494
|
+
shouldAutoEstimateItemSize = false;
|
|
495
|
+
}
|
|
496
|
+
return jump;
|
|
497
|
+
},
|
|
498
|
+
$isSizeEqual: (index, size = -1) => {
|
|
499
|
+
const cachedSize = sizes.length ? sizes[index] : -1;
|
|
500
|
+
return size === -1 ? isMeasurable(index) && cachedSize === -1 : cachedSize === size + gap;
|
|
501
|
+
},
|
|
502
|
+
$getTotalSize: () => length ? getOffset(length) - gap : 0,
|
|
503
|
+
$getLength: () => length,
|
|
504
|
+
$setLength: (nextLength) => {
|
|
505
|
+
const diff = nextLength - length;
|
|
506
|
+
computedOffsetIndex = min(nextLength - 1, computedOffsetIndex);
|
|
507
|
+
length = nextLength;
|
|
508
|
+
if (sizes.length) {
|
|
509
|
+
if (diff > 0) {
|
|
510
|
+
fill(sizes, diff);
|
|
511
|
+
} else {
|
|
512
|
+
sizes.splice(diff);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return 0;
|
|
516
|
+
},
|
|
517
|
+
$isEstimating: () => shouldAutoEstimateItemSize,
|
|
473
518
|
$isMeasurable: isMeasurable,
|
|
474
|
-
$setPinned:
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
$
|
|
479
|
-
|
|
519
|
+
$setPinned: (nextHeader = 0, nextFooter = 0) => {
|
|
520
|
+
header = nextHeader;
|
|
521
|
+
footer = nextFooter;
|
|
522
|
+
},
|
|
523
|
+
$getPinnedStart: getPinnedStart,
|
|
524
|
+
$getTrailStart: getTrailStart,
|
|
525
|
+
$getSizes: (nextAxis, nextSize) => typeof nextSize === "number" ? isUniform ? nextSize : null : isUniform || isAuto || nextSize === "auto" ? null : nextAxis.map((item) => item != null ? item[nextSize] : null),
|
|
526
|
+
$relayout: (nextSizes, scrollOffset) => {
|
|
527
|
+
if (nextSizes == null) {
|
|
480
528
|
return;
|
|
481
529
|
}
|
|
482
|
-
|
|
530
|
+
if (typeof nextSizes === "number") {
|
|
531
|
+
const nextDefaultItemSize = nextSizes + gap;
|
|
532
|
+
if (nextDefaultItemSize === defaultItemSize) {
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
const jump = find(scrollOffset) * (nextDefaultItemSize - defaultItemSize);
|
|
536
|
+
defaultItemSize = nextDefaultItemSize;
|
|
537
|
+
return jump;
|
|
538
|
+
}
|
|
483
539
|
if (nextSizes === currentSizes && length === autos.length) {
|
|
484
540
|
return;
|
|
485
541
|
}
|
|
486
542
|
currentSizes = nextSizes;
|
|
487
543
|
autos.length = length;
|
|
488
|
-
|
|
489
|
-
const
|
|
544
|
+
materialize();
|
|
545
|
+
const anchorIndex = find(scrollOffset);
|
|
546
|
+
const prevOffset = getOffset(anchorIndex);
|
|
490
547
|
let changed;
|
|
491
548
|
for (let i = 0; i < length; i++) {
|
|
492
549
|
const itemSize = nextSizes[i];
|
|
@@ -494,8 +551,8 @@ var createGridLayout = (axis, size, gap = 0) => {
|
|
|
494
551
|
if (!isAutoItem || !autos[i]) {
|
|
495
552
|
autos[i] = isAutoItem;
|
|
496
553
|
const target = isAutoItem ? -1 : itemSize + gap;
|
|
497
|
-
if (
|
|
498
|
-
|
|
554
|
+
if (sizes[i] !== target) {
|
|
555
|
+
setSize(i, target);
|
|
499
556
|
changed = true;
|
|
500
557
|
}
|
|
501
558
|
}
|
|
@@ -503,25 +560,13 @@ var createGridLayout = (axis, size, gap = 0) => {
|
|
|
503
560
|
if (!changed) {
|
|
504
561
|
return;
|
|
505
562
|
}
|
|
506
|
-
return
|
|
563
|
+
return getOffset(anchorIndex) - prevOffset;
|
|
507
564
|
}
|
|
508
565
|
};
|
|
509
|
-
return layout;
|
|
510
566
|
};
|
|
511
567
|
|
|
512
568
|
//#endregion
|
|
513
569
|
//#region src/core/grid.ts
|
|
514
|
-
var updateGridAxis = (store, layout, axis, sizes, header, footer) => {
|
|
515
|
-
const length = getAxisLength(axis);
|
|
516
|
-
layout.$setPinned(header, footer);
|
|
517
|
-
if (length !== store.$getItemsLength()) {
|
|
518
|
-
store.$update(5, [length]);
|
|
519
|
-
}
|
|
520
|
-
const jump = layout.$setAxis(sizes, store.$getScrollOffset() - store.$getItemOffset(0));
|
|
521
|
-
if (jump != null) {
|
|
522
|
-
store.$update(9, jump);
|
|
523
|
-
}
|
|
524
|
-
};
|
|
525
570
|
var rowStatesCache = /*#__PURE__*/ new WeakMap();
|
|
526
571
|
var createGridSpanIndex = (spans = EMPTY) => {
|
|
527
572
|
const index = new Map();
|
|
@@ -957,9 +1002,11 @@ var createScrollObserver = (store, viewport, scroller, isHorizontal, isRtl, onMo
|
|
|
957
1002
|
onMomentumJump();
|
|
958
1003
|
}
|
|
959
1004
|
stillMomentumScrolling = false;
|
|
960
|
-
const
|
|
961
|
-
|
|
962
|
-
|
|
1005
|
+
const from = store.$getScrollOffset();
|
|
1006
|
+
const to = from + jump;
|
|
1007
|
+
const end = store.$getStartSpacerSize() + store.$getTotalSize() - store.$getViewportSize();
|
|
1008
|
+
if (to <= 0 || to >= end || from >= end) {
|
|
1009
|
+
scrollTo(to);
|
|
963
1010
|
} else {
|
|
964
1011
|
scroller.scrollBy({
|
|
965
1012
|
[scrollToKey]: normalizeScrollOffset(jump),
|
|
@@ -1756,10 +1803,18 @@ var VGrid = (props) => {
|
|
|
1756
1803
|
rowStore.$subscribe(8, notifyScrollEnd);
|
|
1757
1804
|
colStore.$subscribe(8, notifyScrollEnd);
|
|
1758
1805
|
createComputed(() => {
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1806
|
+
rowLayout.$setPinned(props.headerRows, props.footerRows);
|
|
1807
|
+
colLayout.$setPinned(props.headerCols, props.footerCols);
|
|
1808
|
+
const rowLength = getAxisLength(props.rows);
|
|
1809
|
+
const colLength = getAxisLength(props.cols);
|
|
1810
|
+
if (rowLength !== rowStore.$getItemsLength()) {
|
|
1811
|
+
rowStore.$update(5, [rowLength]);
|
|
1812
|
+
}
|
|
1813
|
+
if (colLength !== colStore.$getItemsLength()) {
|
|
1814
|
+
colStore.$update(5, [colLength]);
|
|
1815
|
+
}
|
|
1816
|
+
rowStore.$update(9, rowSizes());
|
|
1817
|
+
colStore.$update(9, colSizes());
|
|
1763
1818
|
});
|
|
1764
1819
|
const rowCount = createMemo(() => stateVersion() && rowStore.$getItemsLength());
|
|
1765
1820
|
const colCount = createMemo(() => stateVersion() && colStore.$getItemsLength());
|