virtua 0.51.1 → 0.51.3

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.
@@ -1,5 +1,5 @@
1
1
  import { For, createComputed, createEffect, createMemo, createSignal, mergeProps, on, onCleanup, onMount, splitProps, untrack } from "solid-js";
2
- import { Dynamic } from "solid-js/web";
2
+ import { Dynamic, isServer } from "solid-js/web";
3
3
 
4
4
  //#region src/core/utils.ts
5
5
  var NULL = null;
@@ -572,18 +572,18 @@ var createContainerDriver = (store, isHorizontal) => {
572
572
  let viewportElement;
573
573
  let scrollObserver;
574
574
  let initialized = createPromise();
575
- const sizeKey = isHorizontal ? "width" : "height";
576
575
  const mountedIndexes = new WeakMap();
577
576
  const resizeObserver = createResizeObserver((entries) => {
578
577
  const resizes = [];
579
- for (const { target, contentRect } of entries) {
580
- if (!target.offsetParent) continue;
578
+ for (const { target, contentRect: { width, height } } of entries) {
581
579
  if (target === viewportElement) {
582
- store.$update(4, contentRect[sizeKey]);
583
- } else {
580
+ if (width || height) {
581
+ store.$update(4, isHorizontal ? width : height);
582
+ }
583
+ } else if (target.offsetParent) {
584
584
  const index = mountedIndexes.get(target);
585
585
  if (index != null) {
586
- resizes.push([index, contentRect[sizeKey]]);
586
+ resizes.push([index, isHorizontal ? width : height]);
587
587
  }
588
588
  }
589
589
  }
@@ -637,19 +637,17 @@ var createWindowDriver = (store, isHorizontal) => {
637
637
  let getBaseOffset;
638
638
  let onViewportResize;
639
639
  let initialized = createPromise();
640
- const sizeKey = isHorizontal ? "width" : "height";
641
640
  const mountedIndexes = new WeakMap();
642
641
  const resizeObserver = createResizeObserver((entries) => {
643
642
  const resizes = [];
644
- for (const { target, contentRect } of entries) {
643
+ for (const { target, contentRect: { width, height } } of entries) {
645
644
  if (target === viewportElement) {
646
645
  onViewportResize && onViewportResize();
647
- continue;
648
- }
649
- if (!target.offsetParent) continue;
650
- const index = mountedIndexes.get(target);
651
- if (index != null) {
652
- resizes.push([index, contentRect[sizeKey]]);
646
+ } else if (target.offsetParent) {
647
+ const index = mountedIndexes.get(target);
648
+ if (index != null) {
649
+ resizes.push([index, isHorizontal ? width : height]);
650
+ }
653
651
  }
654
652
  }
655
653
  if (resizes.length) {
@@ -689,7 +687,6 @@ var createWindowDriver = (store, isHorizontal) => {
689
687
  cleanupOnWindowResize && cleanupOnWindowResize();
690
688
  resizeObserver._dispose();
691
689
  scrollObserver && scrollObserver._dispose();
692
- viewportElement = undefined;
693
690
  initialized[1](false);
694
691
  initialized = createPromise();
695
692
  },
@@ -728,11 +725,12 @@ var createContainerGridDriver = (rowStore, colStore) => {
728
725
  const resizedRows = new Set();
729
726
  const resizedCols = new Set();
730
727
  for (const { target, contentRect: { width, height } } of entries) {
731
- if (!target.offsetParent) continue;
732
728
  if (target === viewportElement) {
733
- rowStore.$update(4, height);
734
- colStore.$update(4, width);
735
- } else {
729
+ if (width || height) {
730
+ rowStore.$update(4, height);
731
+ colStore.$update(4, width);
732
+ }
733
+ } else if (target.offsetParent) {
736
734
  const cell = mountedIndexes.get(target);
737
735
  if (cell) {
738
736
  const [rowIndex, colIndex] = cell;
@@ -982,35 +980,34 @@ var Virtualizer = (props) => {
982
980
  });
983
981
  const isScrolling = createMemo(() => stateVersion() && store.$isScrolling());
984
982
  const totalSize = createMemo(() => stateVersion() && store.$getTotalSize());
983
+ const ref = props.ref;
984
+ if (!isServer && ref) {
985
+ ref({
986
+ get cache() {
987
+ return layout.$snapshot();
988
+ },
989
+ get scrollOffset() {
990
+ return store.$getScrollOffset();
991
+ },
992
+ get scrollSize() {
993
+ return getScrollSize(store);
994
+ },
995
+ get viewportSize() {
996
+ return store.$getViewportSize();
997
+ },
998
+ findItemIndex: store.$findItemIndex,
999
+ getItemOffset: store.$getItemOffset,
1000
+ getItemSize: store.$getItemSize,
1001
+ scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts),
1002
+ scrollTo: (offset) => scrollTo(driver, offset),
1003
+ scrollBy: (offset) => scrollBy(driver, store, offset)
1004
+ });
1005
+ onCleanup(() => ref());
1006
+ }
985
1007
  onMount(() => {
986
1008
  setIsSSR(false);
987
- if (props.ref) {
988
- props.ref({
989
- get cache() {
990
- return layout.$snapshot();
991
- },
992
- get scrollOffset() {
993
- return store.$getScrollOffset();
994
- },
995
- get scrollSize() {
996
- return getScrollSize(store);
997
- },
998
- get viewportSize() {
999
- return store.$getViewportSize();
1000
- },
1001
- findItemIndex: store.$findItemIndex,
1002
- getItemOffset: store.$getItemOffset,
1003
- getItemSize: store.$getItemSize,
1004
- scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts),
1005
- scrollTo: (offset) => scrollTo(driver, offset),
1006
- scrollBy: (offset) => scrollBy(driver, store, offset)
1007
- });
1008
- }
1009
1009
  driver.$observe(containerRef, props.scrollRef);
1010
1010
  onCleanup(() => {
1011
- if (props.ref) {
1012
- props.ref();
1013
- }
1014
1011
  store.$dispose();
1015
1012
  driver.$dispose();
1016
1013
  });
@@ -1038,8 +1035,10 @@ var Virtualizer = (props) => {
1038
1035
  mounted.add(i);
1039
1036
  }
1040
1037
  sort([...mounted]).forEach((index) => {
1041
- items.push(props.data[index]);
1042
- indexes.push(index);
1038
+ if (index < count) {
1039
+ items.push(props.data[index]);
1040
+ indexes.push(index);
1041
+ }
1043
1042
  });
1044
1043
  } else {
1045
1044
  for (let [i, j] = range(); i <= j; i++) {
@@ -1146,30 +1145,29 @@ var WindowVirtualizer = (props) => {
1146
1145
  });
1147
1146
  const isScrolling = createMemo(() => stateVersion() && store.$isScrolling());
1148
1147
  const totalSize = createMemo(() => stateVersion() && store.$getTotalSize());
1148
+ const ref = props.ref;
1149
+ if (!isServer && ref) {
1150
+ ref({
1151
+ get cache() {
1152
+ return layout.$snapshot();
1153
+ },
1154
+ get scrollOffset() {
1155
+ return store.$getScrollOffset();
1156
+ },
1157
+ get viewportSize() {
1158
+ return store.$getViewportSize();
1159
+ },
1160
+ findItemIndex: store.$findItemIndex,
1161
+ getItemOffset: store.$getItemOffset,
1162
+ getItemSize: store.$getItemSize,
1163
+ scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts)
1164
+ });
1165
+ onCleanup(() => ref());
1166
+ }
1149
1167
  onMount(() => {
1150
1168
  setIsSSR(false);
1151
- if (props.ref) {
1152
- props.ref({
1153
- get cache() {
1154
- return layout.$snapshot();
1155
- },
1156
- get scrollOffset() {
1157
- return store.$getScrollOffset();
1158
- },
1159
- get viewportSize() {
1160
- return store.$getViewportSize();
1161
- },
1162
- findItemIndex: store.$findItemIndex,
1163
- getItemOffset: store.$getItemOffset,
1164
- getItemSize: store.$getItemSize,
1165
- scrollToIndex: (index, opts) => scrollToIndex(driver, store, index, opts)
1166
- });
1167
- }
1168
1169
  driver.$observe(containerRef);
1169
1170
  onCleanup(() => {
1170
- if (props.ref) {
1171
- props.ref();
1172
- }
1173
1171
  store.$dispose();
1174
1172
  driver.$dispose();
1175
1173
  });