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.
Files changed (49) hide show
  1. package/README.md +37 -32
  2. package/lib/angular/VGrid.d.ts +1 -1
  3. package/lib/angular/VList.d.ts +1 -1
  4. package/lib/angular/VMasonry.d.ts +1 -1
  5. package/lib/angular/Virtualizer.d.ts +1 -1
  6. package/lib/angular/WindowVirtualizer.d.ts +1 -1
  7. package/lib/angular/index.js +586 -586
  8. package/lib/angular/index.js.map +1 -1
  9. package/lib/core/index.cjs +405 -404
  10. package/lib/core/index.cjs.map +1 -1
  11. package/lib/core/index.d.ts +1 -1
  12. package/lib/core/index.js +416 -415
  13. package/lib/core/index.js.map +1 -1
  14. package/lib/index.cjs +645 -645
  15. package/lib/index.cjs.map +1 -1
  16. package/lib/index.js +639 -639
  17. package/lib/index.js.map +1 -1
  18. package/lib/react/VGrid.d.ts +1 -1
  19. package/lib/react/VMasonry.d.ts +1 -1
  20. package/lib/react/Virtualizer.d.ts +1 -1
  21. package/lib/react/WindowVirtualizer.d.ts +1 -1
  22. package/lib/solid/VGrid.d.ts +1 -1
  23. package/lib/solid/VMasonry.d.ts +1 -1
  24. package/lib/solid/Virtualizer.d.ts +1 -1
  25. package/lib/solid/WindowVirtualizer.d.ts +1 -1
  26. package/lib/solid/index.cjs +672 -671
  27. package/lib/solid/index.cjs.map +1 -1
  28. package/lib/solid/index.js +671 -671
  29. package/lib/solid/index.js.map +1 -1
  30. package/lib/solid/index.jsx +165 -214
  31. package/lib/solid/index.jsx.map +1 -1
  32. package/lib/svelte/VGrid.svelte +15 -20
  33. package/lib/svelte/VGrid.type.d.ts +1 -1
  34. package/lib/svelte/VMasonry.svelte +10 -13
  35. package/lib/svelte/VMasonry.type.d.ts +1 -1
  36. package/lib/svelte/Virtualizer.svelte +8 -8
  37. package/lib/svelte/Virtualizer.type.d.ts +1 -1
  38. package/lib/svelte/WindowVirtualizer.svelte +5 -7
  39. package/lib/svelte/WindowVirtualizer.type.d.ts +1 -1
  40. package/lib/vue/VGrid.d.ts +1 -1
  41. package/lib/vue/VMasonry.d.ts +1 -1
  42. package/lib/vue/Virtualizer.d.ts +1 -1
  43. package/lib/vue/WindowVirtualizer.d.ts +1 -1
  44. package/lib/vue/index.cjs +800 -797
  45. package/lib/vue/index.cjs.map +1 -1
  46. package/lib/vue/index.js +771 -768
  47. package/lib/vue/index.js.map +1 -1
  48. package/package.json +1 -1
  49. package/lib/core/observer.d.ts +0 -1
@@ -49,10 +49,10 @@ var ACTION_SCROLL_END = 2;
49
49
  var ACTION_ITEM_RESIZE = 3;
50
50
  var ACTION_VIEWPORT_RESIZE = 4;
51
51
  var ACTION_ITEMS_LENGTH_CHANGE = 5;
52
- var ACTION_START_OFFSET_CHANGE = 6;
53
- var ACTION_MANUAL_SCROLL = 7;
54
- var ACTION_BEFORE_MANUAL_SMOOTH_SCROLL = 8;
55
- var ACTION_RELAYOUT = 9;
52
+ var ACTION_RELAYOUT = 6;
53
+ var ACTION_START_OFFSET_CHANGE = 7;
54
+ var ACTION_MANUAL_SCROLL = 8;
55
+ var ACTION_BEFORE_MANUAL_SMOOTH_SCROLL = 9;
56
56
  var UPDATE_VIRTUAL_STATE = 1;
57
57
  var UPDATE_SIZE_EVENT = 2;
58
58
  var UPDATE_SCROLL_EVENT = 4;
@@ -60,7 +60,14 @@ 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, $getItemOffset: getOffset, $getItemSize: getItemSize, $isSizeEqual: isSizeEqual, $getTotalSize: getTotalSize, $getLength: getLength, $setLength: setLength, $isEstimating: isEstimating, $resize: resize }, ssrCount = 0) => {
63
+ var relayout = (store, layout, a, b) => {
64
+ const anchorIndex = store._getAnchorIndex();
65
+ const anchorOffset = layout.$getItemOffset(anchorIndex);
66
+ if (layout.$relayout(a, b)) {
67
+ store.$update(6, layout.$getItemOffset(anchorIndex) - anchorOffset);
68
+ }
69
+ };
70
+ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItemOffset: getItemOffset, $getItemSize: getItemSize, $setItemSizes: setItemSizes, $getTotalSize: getTotalSize, $getLength: getLength, $setLength: setLength, $isEstimating: isEstimating }, ssrCount = 0) => {
64
71
  let isSSR = !!ssrCount;
65
72
  let stateVersion = 1;
66
73
  let viewportSize = 0;
@@ -77,17 +84,7 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
77
84
  const subscribers = new Set();
78
85
  const getRelativeScrollOffset = () => scrollOffset - startSpacerSize;
79
86
  const getVisibleOffset = () => getRelativeScrollOffset() + pendingJump + jump;
80
- const getItemOffset = (index) => {
81
- return getOffset(index) - pendingJump;
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();
87
+ const shouldKeep = (index, start) => {
91
88
  const itemOffset = getItemOffset(index);
92
89
  const itemSize = getItemSize(index);
93
90
  return _scrollDirection !== SCROLL_DOWN && _scrollMode === SCROLL_BY_NATIVE ? itemOffset + itemSize <= start : itemOffset < start && itemOffset + itemSize < start + viewportSize;
@@ -101,6 +98,24 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
101
98
  }
102
99
  }
103
100
  };
101
+ const getAnchorIndex = () => {
102
+ const length = getLength();
103
+ if (_scrollMode === SCROLL_BY_SHIFT) {
104
+ return length;
105
+ }
106
+ if (_frozenRange && _scrollMode === SCROLL_BY_MANUAL_SCROLL) {
107
+ return min(_frozenRange[0], length);
108
+ }
109
+ const start = getVisibleOffset();
110
+ let anchorIndex = findIndex(start);
111
+ while (anchorIndex > 0 && !shouldKeep(anchorIndex - 1, start)) {
112
+ anchorIndex--;
113
+ }
114
+ while (anchorIndex < length && shouldKeep(anchorIndex, start)) {
115
+ anchorIndex++;
116
+ }
117
+ return anchorIndex;
118
+ };
104
119
  return {
105
120
  $dispose: () => {
106
121
  subscribers.clear();
@@ -134,12 +149,11 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
134
149
  }
135
150
  return [max(startIndex, 0), min(endIndex, getLength() - 1)];
136
151
  },
137
- $isUnmeasuredItem: isSizeEqual,
138
- $getItemOffset: getItemOffset,
139
- $getItemSize: getItemSize,
140
- $getItemsLength: getLength,
152
+ _getAnchorIndex: getAnchorIndex,
153
+ $getItemOffset: (index) => {
154
+ return getItemOffset(index) - pendingJump;
155
+ },
141
156
  $getScrollOffset: () => scrollOffset,
142
- $getVisibleOffset: getVisibleOffset,
143
157
  $isScrolling: () => _scrollDirection !== SCROLL_IDLE,
144
158
  $getViewportSize: () => viewportSize,
145
159
  $getStartSpacerSize: () => startSpacerSize,
@@ -156,7 +170,7 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
156
170
  subscribers.delete(sub);
157
171
  };
158
172
  },
159
- $update: (type, payload) => {
173
+ $update: (type, payload, payload2) => {
160
174
  let shouldFlushPendingJump;
161
175
  let shouldSync;
162
176
  let mutated = 0;
@@ -197,13 +211,14 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
197
211
  break;
198
212
  }
199
213
  case 3: {
200
- const updated = payload.filter(([index, size]) => !isSizeEqual(index, size));
201
- if (!updated.length) {
202
- break;
214
+ if (payload.length) {
215
+ const anchorIndex = getAnchorIndex();
216
+ const anchorOffset = getItemOffset(anchorIndex);
217
+ setItemSizes(payload, viewportSize);
218
+ applyJump(getItemOffset(anchorIndex) - anchorOffset);
219
+ mutated = 1 + 2;
220
+ shouldSync = true;
203
221
  }
204
- applyJump(resize(updated, shouldKeep, getVisibleOffset(), viewportSize));
205
- mutated = 1 + 2;
206
- shouldSync = true;
207
222
  break;
208
223
  }
209
224
  case 4: {
@@ -217,32 +232,33 @@ var createVirtualStore = ({ $getRange: getRange, $getItemOffset: getOffset, $get
217
232
  break;
218
233
  }
219
234
  case 5: {
220
- if (payload[1]) {
221
- applyJump(setLength(payload[0], true));
222
- _scrollMode = SCROLL_BY_SHIFT;
223
- mutated = 1;
224
- } else {
225
- setLength(payload[0]);
235
+ if (payload !== getLength()) {
236
+ if (payload2) {
237
+ const totalSize = getTotalSize();
238
+ setLength(payload, true);
239
+ applyJump(getTotalSize() - totalSize);
240
+ _scrollMode = SCROLL_BY_SHIFT;
241
+ } else {
242
+ setLength(payload);
243
+ }
226
244
  mutated = 1;
227
245
  }
228
246
  break;
229
247
  }
230
248
  case 6: {
231
- startSpacerSize = payload;
249
+ applyJump(payload);
250
+ mutated = 1;
232
251
  break;
233
252
  }
234
253
  case 7: {
235
- _scrollMode = SCROLL_BY_MANUAL_SCROLL;
254
+ startSpacerSize = payload;
236
255
  break;
237
256
  }
238
- case 9: {
239
- if (payload != null) {
240
- applyJump(payload);
241
- mutated = 1 + 2;
242
- }
257
+ case 8: {
258
+ _scrollMode = SCROLL_BY_MANUAL_SCROLL;
243
259
  break;
244
260
  }
245
- case 8: {
261
+ case 9: {
246
262
  _frozenRange = getRange(payload, payload + viewportSize);
247
263
  mutated = 1;
248
264
  break;
@@ -297,8 +313,8 @@ var createListLayout = (length, itemSize, snapshot) => {
297
313
  let _totalMeasuredSize = 0;
298
314
  let shouldAutoEstimateItemSize = !itemSize;
299
315
  let prevStartIndex = 0;
300
- const restoredSizes = snapshot && snapshot[0];
301
- const sizes = restoredSizes ? fill(restoredSizes.slice(0, min(length, restoredSizes.length)), max(0, length - restoredSizes.length)) : fill([], length);
316
+ const sizes = snapshot ? snapshot[0].slice(0, length) : [];
317
+ fill(sizes, length - sizes.length);
302
318
  const offsets = fill([], length + 1);
303
319
  const getSize = (index) => {
304
320
  const size = sizes[index];
@@ -341,37 +357,26 @@ var createListLayout = (length, itemSize, snapshot) => {
341
357
  $getItemOffset: getOffset,
342
358
  $getItemSize: getSize,
343
359
  $isSizeEqual: (index, size = -1) => sizes[index] === size,
344
- $resize: (resizes, shouldKeep, scrollOffset, viewportSize) => {
345
- let jump = resizes.reduce((acc, [index, size]) => shouldKeep(index) ? acc + (size - getSize(index)) : acc, 0);
360
+ $setItemSizes: (resizes, viewportSize) => {
346
361
  for (const [index, size] of resizes) {
347
362
  _totalMeasuredSize += sizes[index] === -1 ? size : size - getSize(index);
348
363
  sizes[index] = size;
349
364
  computedOffsetIndex = min(index, computedOffsetIndex);
350
365
  }
351
366
  if (shouldAutoEstimateItemSize && viewportSize && _totalMeasuredSize > viewportSize) {
352
- let measuredCountBeforeStart = 0;
353
- const startIndex = findIndex(getOffset, length, scrollOffset + jump);
354
367
  const measuredSizes = [];
355
- sizes.forEach((s, i) => {
356
- if (s !== -1) {
357
- if (s) {
358
- measuredSizes.push(s);
359
- }
360
- if (i < startIndex) {
361
- measuredCountBeforeStart++;
362
- }
368
+ sizes.forEach((s) => {
369
+ if (s !== -1 && s) {
370
+ measuredSizes.push(s);
363
371
  }
364
372
  });
365
373
  computedOffsetIndex = -1;
366
374
  sort(measuredSizes);
367
375
  const len = measuredSizes.length;
368
376
  const mid = len / 2 | 0;
369
- const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
370
- const prevDefaultItemSize = defaultItemSize;
371
- jump += ((defaultItemSize = median) - prevDefaultItemSize) * max(startIndex - measuredCountBeforeStart, 0);
377
+ defaultItemSize = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
372
378
  shouldAutoEstimateItemSize = false;
373
379
  }
374
- return jump;
375
380
  },
376
381
  $getTotalSize: () => getOffset(length),
377
382
  $getLength: () => length,
@@ -382,10 +387,9 @@ var createListLayout = (length, itemSize, snapshot) => {
382
387
  if (diff > 0) {
383
388
  fill(offsets, diff);
384
389
  fill(sizes, diff, isShift);
385
- return defaultItemSize * diff;
386
390
  } else {
387
391
  offsets.splice(diff);
388
- return (isShift ? sizes.splice(0, -diff) : sizes.splice(diff)).reduce((acc, removed) => acc - (removed === -1 ? defaultItemSize : removed), 0);
392
+ isShift ? sizes.splice(0, -diff) : sizes.splice(diff);
389
393
  }
390
394
  },
391
395
  $isEstimating: () => shouldAutoEstimateItemSize,
@@ -460,8 +464,7 @@ var createGridLayout = (axis, size, gap = 0) => {
460
464
  $findIndex: find,
461
465
  $getItemOffset: getOffset,
462
466
  $getItemSize: getItemSize,
463
- $resize: (resizes, shouldKeep, scrollOffset, viewportSize) => {
464
- let jump = resizes.reduce((acc, [index, size]) => isMeasurable(index) && shouldKeep(index) ? acc + (size - getItemSize(index)) : acc, 0);
467
+ $setItemSizes: (resizes, viewportSize) => {
465
468
  for (const [index, size] of resizes) {
466
469
  if (isMeasurable(index)) {
467
470
  materialize();
@@ -470,29 +473,19 @@ var createGridLayout = (axis, size, gap = 0) => {
470
473
  }
471
474
  }
472
475
  if (shouldAutoEstimateItemSize && viewportSize && _totalMeasuredSize > viewportSize) {
473
- let measuredCountBeforeStart = 0;
474
- const startIndex = find(scrollOffset + jump);
475
476
  const measuredSizes = [];
476
- sizes.forEach((s, i) => {
477
- if (s !== -1) {
478
- if (s) {
479
- measuredSizes.push(s);
480
- }
481
- if (i < startIndex) {
482
- measuredCountBeforeStart++;
483
- }
477
+ sizes.forEach((s) => {
478
+ if (s !== -1 && s) {
479
+ measuredSizes.push(s);
484
480
  }
485
481
  });
486
482
  computedOffsetIndex = -1;
487
483
  sort(measuredSizes);
488
484
  const len = measuredSizes.length;
489
485
  const mid = len / 2 | 0;
490
- const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
491
- const prevDefaultItemSize = defaultItemSize;
492
- jump += ((defaultItemSize = median) - prevDefaultItemSize) * max(startIndex - measuredCountBeforeStart, 0);
486
+ defaultItemSize = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
493
487
  shouldAutoEstimateItemSize = false;
494
488
  }
495
- return jump;
496
489
  },
497
490
  $isSizeEqual: (index, size = -1) => {
498
491
  const cachedSize = sizes.length ? sizes[index] : -1;
@@ -511,7 +504,6 @@ var createGridLayout = (axis, size, gap = 0) => {
511
504
  sizes.splice(diff);
512
505
  }
513
506
  }
514
- return 0;
515
507
  },
516
508
  $isEstimating: () => shouldAutoEstimateItemSize,
517
509
  $isMeasurable: isMeasurable,
@@ -522,28 +514,25 @@ var createGridLayout = (axis, size, gap = 0) => {
522
514
  $getPinnedStart: getPinnedStart,
523
515
  $getTrailStart: getTrailStart,
524
516
  $getSizes: (nextAxis, nextSize) => typeof nextSize === "number" ? isUniform ? nextSize : null : isUniform || isAuto || nextSize === "auto" ? null : nextAxis.map((item) => item != null ? item[nextSize] : null),
525
- $relayout: (nextSizes, scrollOffset) => {
517
+ $relayout: (nextSizes) => {
526
518
  if (nextSizes == null) {
527
- return;
519
+ return false;
528
520
  }
529
521
  if (typeof nextSizes === "number") {
530
522
  const nextDefaultItemSize = nextSizes + gap;
531
523
  if (nextDefaultItemSize === defaultItemSize) {
532
- return;
524
+ return false;
533
525
  }
534
- const jump = find(scrollOffset) * (nextDefaultItemSize - defaultItemSize);
535
526
  defaultItemSize = nextDefaultItemSize;
536
- return jump;
527
+ return true;
537
528
  }
538
529
  if (nextSizes === currentSizes && length === autos.length) {
539
- return;
530
+ return false;
540
531
  }
541
532
  currentSizes = nextSizes;
542
533
  autos.length = length;
543
534
  materialize();
544
- const anchorIndex = find(scrollOffset);
545
- const prevOffset = getOffset(anchorIndex);
546
- let changed;
535
+ let changed = false;
547
536
  for (let i = 0; i < length; i++) {
548
537
  const itemSize = nextSizes[i];
549
538
  const isAutoItem = typeof itemSize !== "number";
@@ -556,10 +545,7 @@ var createGridLayout = (axis, size, gap = 0) => {
556
545
  }
557
546
  }
558
547
  }
559
- if (!changed) {
560
- return;
561
- }
562
- return getOffset(anchorIndex) - prevOffset;
548
+ return changed;
563
549
  }
564
550
  };
565
551
  };
@@ -910,96 +896,84 @@ var createMasonryLayout = (length, lanesOpt, gap = 0, itemSize, snapshot) => {
910
896
  let computedIndex = -1;
911
897
  let estimatingIndexes = itemSize ? undefined : new Set();
912
898
  let isEstimating = !itemSize;
913
- const restoredSizes = snapshot && snapshot[0];
914
- const sizes = restoredSizes ? fill(restoredSizes.slice(0, min(length, restoredSizes.length)), max(0, length - restoredSizes.length)) : fill([], length);
899
+ const sizes = snapshot ? snapshot[0].slice(0, length) : [];
900
+ fill(sizes, length - sizes.length);
915
901
  const offsets = [];
916
902
  const laneIndexes = [];
917
- const highs = [];
903
+ const highs = [0];
918
904
  const getSize = (index) => {
919
905
  const size = sizes[index];
920
906
  return size === -1 ? defaultItemSize : size;
921
907
  };
922
- const compute = (index) => {
923
- index = min(index, length - 1);
924
- if (computedIndex >= index) return;
925
- const bottoms = [];
908
+ const compute = () => {
909
+ if (computedIndex >= length - 1) return;
910
+ const nextOffsets = [];
926
911
  const lastIndexes = [];
927
912
  for (let l = 0; l < lanes; l++) {
928
- bottoms.push(0);
913
+ nextOffsets.push(0);
929
914
  lastIndexes.push(-1);
930
915
  }
931
916
  for (let j = computedIndex, remaining = lanes; j >= 0 && remaining; j--) {
932
917
  const l = laneIndexes[j];
933
918
  if (lastIndexes[l] === -1) {
934
919
  lastIndexes[l] = j;
935
- bottoms[l] = offsets[j] + getSize(j);
920
+ nextOffsets[l] = offsets[j] + getSize(j) + gap;
936
921
  remaining--;
937
922
  }
938
923
  }
939
- while (computedIndex < index) {
924
+ while (computedIndex < length - 1) {
940
925
  const i = ++computedIndex;
941
926
  let lane = 0;
942
927
  let offset = Infinity;
943
928
  let lastIndex = Infinity;
944
929
  for (let l = 0; l < lanes; l++) {
945
- const candidate = bottoms[l] + (lastIndexes[l] >= 0 ? gap : 0);
930
+ const candidate = nextOffsets[l];
946
931
  if (candidate < offset || candidate === offset && lastIndexes[l] < lastIndex) {
947
932
  lane = l;
948
933
  offset = candidate;
949
934
  lastIndex = lastIndexes[l];
950
935
  }
951
936
  }
937
+ const bottom = offset + getSize(i);
952
938
  offsets[i] = offset;
953
939
  laneIndexes[i] = lane;
954
- bottoms[lane] = offset + getSize(i);
940
+ nextOffsets[lane] = bottom + gap;
955
941
  lastIndexes[lane] = i;
956
- highs[i] = max(i ? highs[i - 1] : 0, bottoms[lane]);
942
+ highs[i + 1] = max(highs[i], bottom);
957
943
  }
958
944
  };
959
945
  const getOffset = (index) => {
960
946
  if (index >= length) return getTotalSize();
961
- compute(index);
947
+ compute();
962
948
  return offsets[index];
963
949
  };
964
950
  const getHigh = (index) => {
965
- compute(index);
951
+ compute();
966
952
  return highs[index];
967
953
  };
968
- const getTotalSize = () => length ? getHigh(length - 1) : 0;
969
- const findStart = (offset) => {
970
- if (!length) return 0;
971
- const index = findIndex(getHigh, length, offset);
972
- return getHigh(index) <= offset ? index + 1 : index;
973
- };
954
+ const getTotalSize = () => getHigh(length);
955
+ const findStart = (offset) => findIndex(getHigh, length + 1, offset);
974
956
  return {
975
957
  $getRange: (startOffset, endOffset) => {
976
958
  const end = findIndex(getOffset, length, endOffset);
977
959
  return [min(findStart(startOffset), end), end];
978
960
  },
961
+ $findIndex: findStart,
979
962
  $getItemOffset: getOffset,
980
963
  $getItemSize: getSize,
981
964
  $isSizeEqual: (index, size = -1) => sizes[index] === size,
982
- $resize: (resizes, shouldKeep, scrollOffset, viewportSize) => {
983
- let anchorIndex = findStart(scrollOffset);
984
- while (anchorIndex > 0 && !shouldKeep(anchorIndex - 1)) {
985
- anchorIndex--;
986
- }
987
- while (anchorIndex < length && shouldKeep(anchorIndex)) {
988
- anchorIndex++;
989
- }
990
- const prevAnchorOffset = getOffset(anchorIndex);
965
+ $setItemSizes: (resizes, viewportSize) => {
991
966
  for (const [index, size] of resizes) {
992
967
  sizes[index] = size;
993
968
  estimatingIndexes && estimatingIndexes.add(index);
994
969
  computedIndex = min(index - 1, computedIndex);
995
970
  }
996
- let jump = getOffset(anchorIndex) - prevAnchorOffset;
997
971
  if (estimatingIndexes && viewportSize) {
998
972
  const measuredSizes = [];
999
973
  let totalMeasuredSize = 0;
1000
974
  estimatingIndexes.forEach((index) => {
1001
975
  const size = sizes[index];
1002
- if (size > 0) {
976
+ if (size !== -1 && size) {
1003
977
  measuredSizes.push(size);
1004
978
  totalMeasuredSize += size + gap;
1005
979
  }
@@ -1008,17 +982,12 @@ var createMasonryLayout = (length, lanesOpt, gap = 0, itemSize, snapshot) => {
1008
982
  sort(measuredSizes);
1009
983
  const len = measuredSizes.length;
1010
984
  const mid = len / 2 | 0;
1011
- const median = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
1012
- const startIndex = findStart(scrollOffset + jump);
1013
- const prevStartOffset = getOffset(startIndex);
1014
- defaultItemSize = median;
985
+ defaultItemSize = len % 2 === 0 ? (measuredSizes[mid - 1] + measuredSizes[mid]) / 2 : measuredSizes[mid];
1015
986
  computedIndex = -1;
1016
- jump += getOffset(startIndex) - prevStartOffset;
1017
987
  estimatingIndexes = undefined;
1018
988
  isEstimating = false;
1019
989
  }
1020
990
  }
1021
- return jump;
1022
991
  },
1023
992
  $getTotalSize: getTotalSize,
1024
993
  $getLength: () => length,
@@ -1031,34 +1000,31 @@ var createMasonryLayout = (length, lanesOpt, gap = 0, itemSize, snapshot) => {
1031
1000
  } else {
1032
1001
  sizes.splice(diff);
1033
1002
  }
1034
- return 0;
1035
1003
  },
1036
- $relayout: (nextLanes, nextGap = 0, scrollOffset) => {
1004
+ $relayout: (nextLanes, nextGap = 0) => {
1037
1005
  nextLanes = max(nextLanes, 1);
1038
1006
  if (nextLanes === lanes && nextGap === gap) {
1039
- return;
1007
+ return false;
1040
1008
  }
1041
- const startIndex = findStart(scrollOffset);
1042
- const prevStartOffset = getOffset(startIndex);
1043
1009
  lanes = nextLanes;
1044
1010
  gap = nextGap;
1045
1011
  computedIndex = -1;
1046
1012
  estimatingIndexes = itemSize ? undefined : new Set();
1047
- return getOffset(startIndex) - prevStartOffset;
1013
+ return true;
1048
1014
  },
1049
1015
  $isEstimating: () => isEstimating,
1050
1016
  $snapshot: () => [sizes.slice(), defaultItemSize],
1051
1017
  $getLanes: () => lanes,
1052
1018
  $getGap: () => gap,
1053
1019
  $getItemLane: (index) => {
1054
- compute(index);
1020
+ compute();
1055
1021
  return laneIndexes[index];
1056
1022
  }
1057
1023
  };
1058
1024
  };
1059
1025
 
1060
1026
  //#endregion
1061
- //#region src/core/observer.ts
1027
+ //#region src/core/driver.ts
1062
1028
  var createResizeObserver = (cb) => {
1063
1029
  let ro;
1064
1030
  return {
@@ -1073,7 +1039,7 @@ var createResizeObserver = (cb) => {
1073
1039
  }
1074
1040
  };
1075
1041
  };
1076
- var createScrollObserver = (store, viewport, scroller, isHorizontal, isRtl, onMomentumJump, getStartOffset) => {
1042
+ var createScrollObserver = (store, layout, viewport, scroller, isHorizontal, isRtl, onMomentumJump, getStartOffset) => {
1077
1043
  let lastScrollTime = 0;
1078
1044
  let wheeling = false;
1079
1045
  let touching = false;
@@ -1113,7 +1079,7 @@ var createScrollObserver = (store, viewport, scroller, isHorizontal, isRtl, onMo
1113
1079
  stillMomentumScrolling = true;
1114
1080
  }
1115
1081
  if (getStartOffset) {
1116
- store.$update(6, getStartOffset());
1082
+ store.$update(7, getStartOffset());
1117
1083
  }
1118
1084
  store.$update(1, getScrollOffset());
1119
1085
  scheduleScrollEnd();
@@ -1197,13 +1163,13 @@ var createScrollObserver = (store, viewport, scroller, isHorizontal, isRtl, onMo
1197
1163
  }
1198
1164
  if (smooth) {
1199
1165
  for (let [i, end] = store.$getRange(0); i <= end; i++) {
1200
- if (store.$isUnmeasuredItem(i)) {
1166
+ if (layout.$isSizeEqual(i)) {
1201
1167
  return;
1202
1168
  }
1203
1169
  }
1204
1170
  stop();
1205
1171
  }
1206
- store.$update(7);
1172
+ store.$update(8);
1207
1173
  scrollTo(getTargetOffset(), smooth);
1208
1174
  };
1209
1175
  const start = () => {
@@ -1224,16 +1190,13 @@ var createScrollObserver = (store, viewport, scroller, isHorizontal, isRtl, onMo
1224
1190
  onMeasured();
1225
1191
  };
1226
1192
  if (smooth) {
1227
- store.$update(8, getTargetOffset());
1193
+ store.$update(9, getTargetOffset());
1228
1194
  }
1229
1195
  start();
1230
1196
  }
1231
1197
  };
1232
1198
  };
1233
-
1234
- //#endregion
1235
- //#region src/core/driver.ts
1236
- var createContainerDriver = (store, isHorizontal) => {
1199
+ var createContainerDriver = (store, layout, isHorizontal) => {
1237
1200
  let viewportElement;
1238
1201
  let scrollObserver;
1239
1202
  let initialized = createPromise();
@@ -1255,18 +1218,19 @@ var createContainerDriver = (store, isHorizontal) => {
1255
1218
  } else if (target.offsetParent) {
1256
1219
  const index = mountedIndexes.get(target);
1257
1220
  if (index != null) {
1258
- resizes.push([index, isHorizontal ? width : height]);
1221
+ const size = isHorizontal ? width : height;
1222
+ if (!layout.$isSizeEqual(index, size)) {
1223
+ resizes.push([index, size]);
1224
+ }
1259
1225
  }
1260
1226
  }
1261
1227
  }
1262
- if (resizes.length) {
1263
- store.$update(3, resizes);
1264
- }
1228
+ store.$update(3, resizes);
1265
1229
  });
1266
1230
  return {
1267
1231
  $observe(containerElement, viewport = containerElement.parentElement) {
1268
1232
  resizeObserver._observe(viewportElement = viewport);
1269
- scrollObserver = createScrollObserver(store, viewport, viewport, isHorizontal, isHorizontal && getComputedStyle(viewport).direction === "rtl", () => {
1233
+ scrollObserver = createScrollObserver(store, layout, viewport, viewport, isHorizontal, isHorizontal && getComputedStyle(viewport).direction === "rtl", () => {
1270
1234
  const overflowKey = isHorizontal ? "overflowX" : "overflowY";
1271
1235
  const style = viewport.style;
1272
1236
  const prev = style[overflowKey];
@@ -1302,7 +1266,7 @@ var createContainerDriver = (store, isHorizontal) => {
1302
1266
  $getBaseOffset: store.$getStartSpacerSize
1303
1267
  };
1304
1268
  };
1305
- var createWindowDriver = (store, isHorizontal) => {
1269
+ var createWindowDriver = (store, layout, isHorizontal) => {
1306
1270
  let viewportElement;
1307
1271
  let scrollObserver;
1308
1272
  let cleanupOnWindowResize;
@@ -1318,13 +1282,14 @@ var createWindowDriver = (store, isHorizontal) => {
1318
1282
  } else if (target.offsetParent) {
1319
1283
  const index = mountedIndexes.get(target);
1320
1284
  if (index != null) {
1321
- resizes.push([index, isHorizontal ? width : height]);
1285
+ const size = isHorizontal ? width : height;
1286
+ if (!layout.$isSizeEqual(index, size)) {
1287
+ resizes.push([index, size]);
1288
+ }
1322
1289
  }
1323
1290
  }
1324
1291
  }
1325
- if (resizes.length) {
1326
- store.$update(3, resizes);
1327
- }
1292
+ store.$update(3, resizes);
1328
1293
  });
1329
1294
  return {
1330
1295
  $observe(container) {
@@ -1352,7 +1317,7 @@ var createWindowDriver = (store, isHorizontal) => {
1352
1317
  cleanupOnWindowResize = () => {
1353
1318
  window.removeEventListener("resize", onWindowResize);
1354
1319
  };
1355
- scrollObserver = createScrollObserver(store, window, viewport, isHorizontal, isRtl, null, baseOffset);
1320
+ scrollObserver = createScrollObserver(store, layout, window, viewport, isHorizontal, isRtl, null, baseOffset);
1356
1321
  initialized[1](true);
1357
1322
  },
1358
1323
  $dispose() {
@@ -1383,7 +1348,7 @@ var createWindowDriver = (store, isHorizontal) => {
1383
1348
  }
1384
1349
  };
1385
1350
  };
1386
- var createContainerGridDriver = (rowStore, colStore) => {
1351
+ var createContainerGridDriver = (rowStore, colStore, rowLayout, colLayout) => {
1387
1352
  let viewportElement;
1388
1353
  let rowScrollObserver;
1389
1354
  let colScrollObserver;
@@ -1410,20 +1375,16 @@ var createContainerGridDriver = (rowStore, colStore) => {
1410
1375
  } else if (target.offsetParent) {
1411
1376
  const rowIndex = mountedRowIndexes.get(target);
1412
1377
  const colIndex = mountedColIndexes.get(target);
1413
- if (rowIndex != null) {
1378
+ if (rowIndex != null && !rowLayout.$isSizeEqual(rowIndex, height)) {
1414
1379
  rowResizes.push([rowIndex, height]);
1415
1380
  }
1416
- if (colIndex != null) {
1381
+ if (colIndex != null && !colLayout.$isSizeEqual(colIndex, width)) {
1417
1382
  colResizes.push([colIndex, width]);
1418
1383
  }
1419
1384
  }
1420
1385
  }
1421
- if (rowResizes.length) {
1422
- rowStore.$update(3, rowResizes);
1423
- }
1424
- if (colResizes.length) {
1425
- colStore.$update(3, colResizes);
1426
- }
1386
+ rowStore.$update(3, rowResizes);
1387
+ colStore.$update(3, colResizes);
1427
1388
  });
1428
1389
  return {
1429
1390
  async $scroll(isHorizontal, getTargetOffset) {
@@ -1433,7 +1394,7 @@ var createContainerGridDriver = (rowStore, colStore) => {
1433
1394
  },
1434
1395
  $observe(containerElement, viewport = containerElement.parentElement) {
1435
1396
  resizeObserver._observe(viewportElement = viewport);
1436
- const observe = (store, isHorizontal) => createScrollObserver(store, viewport, viewport, isHorizontal, isHorizontal && getComputedStyle(viewport).direction === "rtl", () => {
1397
+ const observe = (store, layout, isHorizontal) => createScrollObserver(store, layout, viewport, viewport, isHorizontal, isHorizontal && getComputedStyle(viewport).direction === "rtl", () => {
1437
1398
  const overflowKey = isHorizontal ? "overflowX" : "overflowY";
1438
1399
  const style = viewport.style;
1439
1400
  const prev = style[overflowKey];
@@ -1442,8 +1403,8 @@ var createContainerGridDriver = (rowStore, colStore) => {
1442
1403
  style[overflowKey] = prev;
1443
1404
  });
1444
1405
  });
1445
- rowScrollObserver = observe(rowStore, false);
1446
- colScrollObserver = observe(colStore, true);
1406
+ rowScrollObserver = observe(rowStore, rowLayout, false);
1407
+ colScrollObserver = observe(colStore, colLayout, true);
1447
1408
  initialized[1](true);
1448
1409
  },
1449
1410
  $dispose() {
@@ -1482,21 +1443,21 @@ var scrollTo = (driver, offset) => {
1482
1443
  var scrollBy = (driver, store, offset) => {
1483
1444
  scrollTo(driver, offset + store.$getScrollOffset());
1484
1445
  };
1485
- var scrollToIndex = (driver, store, index, { align, smooth, offset = 0 } = {}) => {
1486
- index = clamp(index, 0, store.$getItemsLength() - 1);
1446
+ var scrollToIndex = (driver, store, layout, index, { align, smooth, offset = 0 } = {}) => {
1447
+ index = clamp(index, 0, layout.$getLength() - 1);
1487
1448
  if (align === "nearest") {
1488
1449
  const itemOffset = store.$getItemOffset(index);
1489
1450
  const scrollOffset = store.$getScrollOffset();
1490
1451
  if (itemOffset < scrollOffset) {
1491
1452
  align = "start";
1492
- } else if (itemOffset + store.$getItemSize(index) > scrollOffset + store.$getViewportSize()) {
1453
+ } else if (itemOffset + layout.$getItemSize(index) > scrollOffset + store.$getViewportSize()) {
1493
1454
  align = "end";
1494
1455
  } else {
1495
1456
  return;
1496
1457
  }
1497
1458
  }
1498
1459
  driver.$scroll(() => {
1499
- return offset + driver.$getBaseOffset() + store.$getItemOffset(index) + (align === "end" ? store.$getItemSize(index) - store.$getViewportSize() : align === "center" ? (store.$getItemSize(index) - store.$getViewportSize()) / 2 : 0);
1460
+ return offset + driver.$getBaseOffset() + store.$getItemOffset(index) + (align === "end" ? layout.$getItemSize(index) - store.$getViewportSize() : align === "center" ? (layout.$getItemSize(index) - store.$getViewportSize()) / 2 : 0);
1500
1461
  }, smooth);
1501
1462
  };
1502
1463
  var gridScrollTo = (driver, vertical, horizontal) => {
@@ -1518,7 +1479,7 @@ var gridScrollBy = (driver, rowStore, colStore, vertical, horizontal) => {
1518
1479
  }
1519
1480
  };
1520
1481
  var scrollGridAxisToIndex = (driver, store, layout, sections, index, align, isHorizontal) => {
1521
- const count = store.$getItemsLength();
1482
+ const count = layout.$getLength();
1522
1483
  const pinnedStart = layout.$getPinnedStart();
1523
1484
  const trailStart = layout.$getTrailStart();
1524
1485
  index = clamp(index, 0, count - 1);
@@ -1534,11 +1495,11 @@ var scrollGridAxisToIndex = (driver, store, layout, sections, index, align, isHo
1534
1495
  const insetStart = getInsetStart();
1535
1496
  const scrollOffset = store.$getScrollOffset() + insetStart;
1536
1497
  const viewportSize = store.$getViewportSize() - insetStart - getInsetEnd();
1537
- const itemSize = store.$getItemSize(index);
1498
+ const itemSize = layout.$getItemSize(index);
1538
1499
  let itemOffset = store.$getItemOffset(index);
1539
1500
  if (sectionHeader === index) {
1540
1501
  const lastIndex = (section + 1 < starts.length ? starts[section + 1] : trailStart) - 1;
1541
- itemOffset = max(itemOffset, min(scrollOffset, store.$getItemOffset(lastIndex) + store.$getItemSize(lastIndex) - itemSize));
1502
+ itemOffset = max(itemOffset, min(scrollOffset, store.$getItemOffset(lastIndex) + layout.$getItemSize(lastIndex) - itemSize));
1542
1503
  }
1543
1504
  if (itemOffset < scrollOffset) {
1544
1505
  align = "start";
@@ -1550,7 +1511,7 @@ var scrollGridAxisToIndex = (driver, store, layout, sections, index, align, isHo
1550
1511
  }
1551
1512
  driver.$scroll(isHorizontal, () => {
1552
1513
  const insetStart = getInsetStart();
1553
- const rest = store.$getItemSize(index) - (store.$getViewportSize() - insetStart - getInsetEnd());
1514
+ const rest = layout.$getItemSize(index) - (store.$getViewportSize() - insetStart - getInsetEnd());
1554
1515
  return store.$getItemOffset(index) - insetStart + (align === "end" ? rest : align === "center" ? rest / 2 : 0);
1555
1516
  });
1556
1517
  };
@@ -1609,7 +1570,7 @@ var Virtualizer = (props) => {
1609
1570
  const [isSSR, setIsSSR] = createSignal(!!ssrCount);
1610
1571
  const layout = createListLayout(props.data.length, itemSize, cache);
1611
1572
  const store = createVirtualStore(layout, ssrCount);
1612
- const driver = createContainerDriver(store, horizontal);
1573
+ const driver = createContainerDriver(store, layout, horizontal);
1613
1574
  const [stateVersion, setRerender] = createSignal(store.$getStateVersion());
1614
1575
  store.$subscribe(1, () => {
1615
1576
  setRerender(store.$getStateVersion());
@@ -1650,8 +1611,8 @@ var Virtualizer = (props) => {
1650
1611
  },
1651
1612
  findItemIndex: (offset) => layout.$findIndex(offset - store.$getStartSpacerSize()),
1652
1613
  getItemOffset: store.$getItemOffset,
1653
- getItemSize: store.$getItemSize,
1654
- scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts),
1614
+ getItemSize: layout.$getItemSize,
1615
+ scrollToIndex: (index, opts) => scrollToIndex(driver, store, layout, index, opts),
1655
1616
  scrollTo: (offset) => scrollTo(driver, offset),
1656
1617
  scrollBy: (offset) => scrollBy(driver, store, offset)
1657
1618
  });
@@ -1667,7 +1628,7 @@ var Virtualizer = (props) => {
1667
1628
  });
1668
1629
  createComputed(on(() => props.startMargin || 0, (value) => {
1669
1630
  if (value !== store.$getStartSpacerSize()) {
1670
- store.$update(6, value);
1631
+ store.$update(7, value);
1671
1632
  }
1672
1633
  }));
1673
1634
  createEffect(on(stateVersion, () => {
@@ -1676,9 +1637,7 @@ var Virtualizer = (props) => {
1676
1637
  const dataSlice = createMemo(() => {
1677
1638
  const count = props.data.length;
1678
1639
  untrack(() => {
1679
- if (count !== store.$getItemsLength()) {
1680
- store.$update(5, [count, props.shift]);
1681
- }
1640
+ store.$update(5, count, props.shift);
1682
1641
  });
1683
1642
  const items = [];
1684
1643
  const indexes = [];
@@ -1711,7 +1670,7 @@ var Virtualizer = (props) => {
1711
1670
  });
1712
1671
  const hide = createMemo(() => {
1713
1672
  stateVersion();
1714
- return store.$isUnmeasuredItem(index());
1673
+ return layout.$isSizeEqual(index());
1715
1674
  });
1716
1675
  const children = createMemo(() => {
1717
1676
  return untrack(() => props.children(data, index));
@@ -1778,7 +1737,7 @@ var WindowVirtualizer = (props) => {
1778
1737
  const [isSSR, setIsSSR] = createSignal(!!ssrCount);
1779
1738
  const layout = createListLayout(props.data.length, itemSize, cache);
1780
1739
  const store = createVirtualStore(layout, ssrCount);
1781
- const driver = createWindowDriver(store, horizontal);
1740
+ const driver = createWindowDriver(store, layout, horizontal);
1782
1741
  const [stateVersion, setRerender] = createSignal(store.$getStateVersion());
1783
1742
  store.$subscribe(1, () => {
1784
1743
  setRerender(store.$getStateVersion());
@@ -1816,8 +1775,8 @@ var WindowVirtualizer = (props) => {
1816
1775
  },
1817
1776
  findItemIndex: (offset) => layout.$findIndex(offset - store.$getStartSpacerSize()),
1818
1777
  getItemOffset: store.$getItemOffset,
1819
- getItemSize: store.$getItemSize,
1820
- scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts)
1778
+ getItemSize: layout.$getItemSize,
1779
+ scrollToIndex: (index, opts) => scrollToIndex(driver, store, layout, index, opts)
1821
1780
  });
1822
1781
  onCleanup(() => ref());
1823
1782
  }
@@ -1835,9 +1794,7 @@ var WindowVirtualizer = (props) => {
1835
1794
  const dataSlice = createMemo(() => {
1836
1795
  const count = props.data.length;
1837
1796
  untrack(() => {
1838
- if (count !== store.$getItemsLength()) {
1839
- store.$update(5, [count, props.shift]);
1840
- }
1797
+ store.$update(5, count, props.shift);
1841
1798
  });
1842
1799
  const items = [];
1843
1800
  for (let [i, j] = range(); i <= j; i++) {
@@ -1863,7 +1820,7 @@ var WindowVirtualizer = (props) => {
1863
1820
  });
1864
1821
  const hide = createMemo(() => {
1865
1822
  stateVersion();
1866
- return store.$isUnmeasuredItem(itemIndex());
1823
+ return layout.$isSizeEqual(itemIndex());
1867
1824
  });
1868
1825
  const children = createMemo(() => {
1869
1826
  return untrack(() => props.children(data, itemIndex));
@@ -1954,7 +1911,7 @@ var VGrid = (props) => {
1954
1911
  const spanIndex = createMemo(() => createGridSpanIndex(props.spans));
1955
1912
  const rowStore = createVirtualStore(rowLayout);
1956
1913
  const colStore = createVirtualStore(colLayout);
1957
- const driver = createContainerGridDriver(rowStore, colStore);
1914
+ const driver = createContainerGridDriver(rowStore, colStore, rowLayout, colLayout);
1958
1915
  const getStateVersion = () => rowStore.$getStateVersion() + colStore.$getStateVersion();
1959
1916
  const [stateVersion, setRerender] = createSignal(getStateVersion());
1960
1917
  const rerender = () => setRerender(getStateVersion());
@@ -1994,17 +1951,13 @@ var VGrid = (props) => {
1994
1951
  colLayout.$setPinned(props.headerCols, props.footerCols);
1995
1952
  const rowLength = getAxisLength(props.rows);
1996
1953
  const colLength = getAxisLength(props.cols);
1997
- if (rowLength !== rowStore.$getItemsLength()) {
1998
- rowStore.$update(5, [rowLength]);
1999
- }
2000
- if (colLength !== colStore.$getItemsLength()) {
2001
- colStore.$update(5, [colLength]);
2002
- }
2003
- rowStore.$update(9, rowLayout.$relayout(rowSizes(), rowStore.$getVisibleOffset()));
2004
- colStore.$update(9, colLayout.$relayout(colSizes(), colStore.$getVisibleOffset()));
1954
+ rowStore.$update(5, rowLength);
1955
+ colStore.$update(5, colLength);
1956
+ relayout(rowStore, rowLayout, rowSizes());
1957
+ relayout(colStore, colLayout, colSizes());
2005
1958
  });
2006
- const rowCount = createMemo(() => stateVersion() && rowStore.$getItemsLength());
2007
- const colCount = createMemo(() => stateVersion() && colStore.$getItemsLength());
1959
+ const rowCount = createMemo(() => stateVersion() && rowLayout.$getLength());
1960
+ const colCount = createMemo(() => stateVersion() && colLayout.$getLength());
2008
1961
  const plan = createMemo(() => {
2009
1962
  stateVersion();
2010
1963
  return createGridPlan(rowLayout, colLayout, rowStore.$getRange(props.bufferSize), colStore.$getRange(props.bufferSize), spanIndex(), props.sectionRows, props.keepMounted, props.ariaSort);
@@ -2054,8 +2007,8 @@ var VGrid = (props) => {
2054
2007
  findColIndex: colLayout.$findIndex,
2055
2008
  getRowOffset: rowStore.$getItemOffset,
2056
2009
  getColOffset: colStore.$getItemOffset,
2057
- getRowSize: rowStore.$getItemSize,
2058
- getColSize: colStore.$getItemSize,
2010
+ getRowSize: rowLayout.$getItemSize,
2011
+ getColSize: colLayout.$getItemSize,
2059
2012
  scrollToIndex: (opts) => gridScrollToIndex(driver, rowStore, colStore, rowLayout, colLayout, props.sectionRows, opts),
2060
2013
  scrollTo: ({ vertical, horizontal }) => gridScrollTo(driver, vertical, horizontal),
2061
2014
  scrollBy: ({ vertical, horizontal }) => gridScrollBy(driver, rowStore, colStore, vertical, horizontal)
@@ -2129,7 +2082,7 @@ var VMasonry = (props) => {
2129
2082
  ]);
2130
2083
  const layout = createMasonryLayout(props.data.length, props.lanes, props.gap, itemSize, cache);
2131
2084
  const store = createVirtualStore(layout);
2132
- const driver = createContainerDriver(store, false);
2085
+ const driver = createContainerDriver(store, layout, false);
2133
2086
  const [stateVersion, setRerender] = createSignal(store.$getStateVersion());
2134
2087
  store.$subscribe(1, () => {
2135
2088
  setRerender(store.$getStateVersion());
@@ -2144,7 +2097,7 @@ var VMasonry = (props) => {
2144
2097
  props.onResize?.();
2145
2098
  });
2146
2099
  createComputed(() => {
2147
- store.$update(9, layout.$relayout(props.lanes, props.gap, store.$getVisibleOffset()));
2100
+ relayout(store, layout, props.lanes, props.gap);
2148
2101
  });
2149
2102
  const range = createMemo((prev) => {
2150
2103
  stateVersion();
@@ -2175,8 +2128,8 @@ var VMasonry = (props) => {
2175
2128
  return store.$getViewportSize();
2176
2129
  },
2177
2130
  getItemOffset: store.$getItemOffset,
2178
- getItemSize: store.$getItemSize,
2179
- scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts),
2131
+ getItemSize: layout.$getItemSize,
2132
+ scrollToIndex: (index, opts) => scrollToIndex(driver, store, layout, index, opts),
2180
2133
  scrollTo: (offset) => scrollTo(driver, offset),
2181
2134
  scrollBy: (offset) => scrollBy(driver, store, offset)
2182
2135
  });
@@ -2195,9 +2148,7 @@ var VMasonry = (props) => {
2195
2148
  const dataSlice = createMemo(() => {
2196
2149
  const count = props.data.length;
2197
2150
  untrack(() => {
2198
- if (count !== store.$getItemsLength()) {
2199
- store.$update(5, [count]);
2200
- }
2151
+ store.$update(5, count);
2201
2152
  });
2202
2153
  const items = [];
2203
2154
  const indexes = [];
@@ -2234,7 +2185,7 @@ var VMasonry = (props) => {
2234
2185
  });
2235
2186
  const hide = createMemo(() => {
2236
2187
  stateVersion();
2237
- return store.$isUnmeasuredItem(index());
2188
+ return layout.$isSizeEqual(index());
2238
2189
  });
2239
2190
  const children = createMemo(() => {
2240
2191
  return untrack(() => props.children(data, index));