virtua 0.50.5 → 0.51.0

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.
@@ -9,6 +9,7 @@ var sort = (arr) => {
9
9
  return [...arr].sort((a, b) => a - b);
10
10
  };
11
11
  var timeout = setTimeout;
12
+ var cancelTimeout = clearTimeout;
12
13
  var microtask = typeof queueMicrotask === "function" ? queueMicrotask : (fn) => {
13
14
  Promise.resolve().then(fn);
14
15
  };
@@ -33,7 +34,6 @@ var once = (fn) => {
33
34
  //#endregion
34
35
  //#region src/core/environment.ts
35
36
  var isBrowser = typeof window !== "undefined";
36
- var getDocumentElement = (doc) => doc.documentElement;
37
37
  var getCurrentDocument = (node) => node.ownerDocument;
38
38
  var getCurrentWindow = (doc) => doc.defaultView;
39
39
  var isIOSWebKit = /*#__PURE__*/ once(() => {
@@ -42,9 +42,6 @@ var isIOSWebKit = /*#__PURE__*/ once(() => {
42
42
  }
43
43
  return navigator.platform === "MacIntel" && navigator.maxTouchPoints > 0;
44
44
  });
45
- var isSmoothScrollSupported = /*#__PURE__*/ once(() => {
46
- return "scrollBehavior" in getDocumentElement(document).style;
47
- });
48
45
 
49
46
  //#endregion
50
47
  //#region src/core/store.ts
@@ -89,12 +86,8 @@ var createVirtualStore = ({ $getRange: getRange, $findIndex: findIndex, $getItem
89
86
  const subscribers = new Set();
90
87
  const getRelativeScrollOffset = () => scrollOffset - startSpacerSize;
91
88
  const getVisibleOffset = () => getRelativeScrollOffset() + pendingJump + jump;
92
- const getItemOffset = (index, fromEnd) => {
93
- const offset = getOffset(index) - pendingJump;
94
- if (fromEnd) {
95
- return getTotalSize() - offset - getItemSize(index);
96
- }
97
- return offset;
89
+ const getItemOffset = (index) => {
90
+ return getOffset(index) - pendingJump;
98
91
  };
99
92
  const applyJump = (j) => {
100
93
  if (j) {
@@ -425,42 +418,30 @@ var createResizeObserver = (cb) => {
425
418
  }
426
419
  };
427
420
  };
428
- var debounce = (fn, ms) => {
429
- let id;
430
- const cancel = () => {
431
- if (id != null) {
432
- clearTimeout(id);
433
- }
434
- };
435
- const debouncedFn = () => {
436
- cancel();
437
- id = timeout(() => {
438
- id = null;
439
- fn();
440
- }, ms);
441
- };
442
- debouncedFn._cancel = cancel;
443
- return debouncedFn;
444
- };
445
421
  var normalizeScrollOffset = (offset, isNegative) => {
446
422
  return isNegative ? -offset : offset;
447
423
  };
448
424
  var createScrollObserver = (store, viewport, isHorizontal, getScrollOffset, updateScrollOffset, getStartOffset) => {
449
- const now = Date.now;
450
425
  let lastScrollTime = 0;
451
426
  let wheeling = false;
452
427
  let touching = false;
453
428
  let justTouchEnded = false;
454
429
  let stillMomentumScrolling = false;
455
- const onScrollEnd = debounce(() => {
430
+ let scrollEndTimer;
431
+ const now = Date.now;
432
+ const onScrollEnd = () => {
456
433
  if (wheeling || touching) {
457
434
  wheeling = false;
458
- onScrollEnd();
435
+ scheduleScrollEnd();
459
436
  return;
460
437
  }
461
438
  justTouchEnded = false;
462
439
  store.$update(2);
463
- }, 150);
440
+ };
441
+ const scheduleScrollEnd = () => {
442
+ cancelTimeout(scrollEndTimer);
443
+ scrollEndTimer = timeout(onScrollEnd, 150);
444
+ };
464
445
  const onScroll = () => {
465
446
  lastScrollTime = now();
466
447
  if (justTouchEnded) {
@@ -470,7 +451,7 @@ var createScrollObserver = (store, viewport, isHorizontal, getScrollOffset, upda
470
451
  store.$update(6, getStartOffset());
471
452
  }
472
453
  store.$update(1, getScrollOffset());
473
- onScrollEnd();
454
+ scheduleScrollEnd();
474
455
  };
475
456
  const onWheel = ((e) => {
476
457
  if (wheeling || !store.$isScrolling() || e.ctrlKey) {
@@ -501,7 +482,7 @@ var createScrollObserver = (store, viewport, isHorizontal, getScrollOffset, upda
501
482
  viewport.removeEventListener("wheel", onWheel);
502
483
  viewport.removeEventListener("touchstart", onTouchStart);
503
484
  viewport.removeEventListener("touchend", onTouchEnd);
504
- onScrollEnd._cancel();
485
+ cancelTimeout(scrollEndTimer);
505
486
  },
506
487
  _fixScrollJump: () => {
507
488
  const [jump, shift] = store._flushJump();
@@ -526,57 +507,55 @@ var createScrollScheduler = (store, initialized, scroll) => {
526
507
  if (cancelScroll) {
527
508
  cancelScroll();
528
509
  }
529
- const waitForMeasurement = () => {
530
- const [promise, resolve] = createPromise();
531
- cancelScroll = () => {
532
- resolve(false);
533
- };
510
+ let stopped;
511
+ let timerId;
512
+ let unsubscribe;
513
+ const stop = cancelScroll = () => {
514
+ stopped = true;
515
+ cancelTimeout(timerId);
516
+ unsubscribe && unsubscribe();
517
+ };
518
+ const onMeasured = () => {
519
+ if (stopped) {
520
+ return;
521
+ }
534
522
  if (store.$getViewportSize()) {
535
- timeout(cancelScroll, 150);
523
+ cancelTimeout(timerId);
524
+ timerId = timeout(stop, 150);
536
525
  }
537
- return [promise, store.$subscribe(2, () => {
538
- resolve(true);
539
- })];
540
- };
541
- if (smooth && isSmoothScrollSupported()) {
542
- store.$update(8, getTargetOffset());
543
- microtask(async () => {
544
- while (true) {
545
- let done = true;
546
- for (let [i, end] = store.$getRange(); i <= end; i++) {
547
- if (store.$isUnmeasuredItem(i)) {
548
- done = false;
549
- break;
550
- }
551
- }
552
- if (done) {
553
- break;
554
- }
555
- const [promise, unsubscribe] = waitForMeasurement();
556
- try {
557
- if (!await promise) {
558
- return;
559
- }
560
- } finally {
561
- unsubscribe();
562
- }
563
- }
564
- store.$update(7);
565
- scroll(getTargetOffset(), smooth);
566
- });
567
- } else {
568
- while (true) {
569
- const [promise, unsubscribe] = waitForMeasurement();
570
- try {
571
- store.$update(7);
572
- scroll(getTargetOffset());
573
- if (!await promise) {
526
+ if (smooth) {
527
+ for (let [i, end] = store.$getRange(0); i <= end; i++) {
528
+ if (store.$isUnmeasuredItem(i)) {
574
529
  return;
575
530
  }
576
- } finally {
577
- unsubscribe();
578
531
  }
532
+ stop();
533
+ }
534
+ store.$update(7);
535
+ scroll(getTargetOffset(), smooth);
536
+ };
537
+ const start = () => {
538
+ if (stopped) {
539
+ return;
579
540
  }
541
+ let queued;
542
+ unsubscribe = store.$subscribe(2, () => {
543
+ if (queued) {
544
+ return;
545
+ }
546
+ queued = true;
547
+ microtask(() => {
548
+ queued = false;
549
+ onMeasured();
550
+ });
551
+ });
552
+ onMeasured();
553
+ };
554
+ if (smooth) {
555
+ store.$update(8, getTargetOffset());
556
+ microtask(start);
557
+ } else {
558
+ start();
580
559
  }
581
560
  }, () => {
582
561
  cancelScroll && cancelScroll();
@@ -586,19 +565,15 @@ var createContainerDriver = (store, isHorizontal) => {
586
565
  let viewportElement;
587
566
  let scrollObserver;
588
567
  let initialized = createPromise();
589
- let isNegative = false;
568
+ let isRtl = false;
590
569
  const scrollOffsetKey = isHorizontal ? "scrollLeft" : "scrollTop";
570
+ const scrollToKey = isHorizontal ? "left" : "top";
591
571
  const overflowKey = isHorizontal ? "overflowX" : "overflowY";
592
572
  const [scheduleScroll, cancelScroll] = createScrollScheduler(store, () => initialized[0], (offset, smooth) => {
593
- offset = normalizeScrollOffset(offset, isNegative);
594
- if (smooth) {
595
- viewportElement.scrollTo({
596
- [isHorizontal ? "left" : "top"]: offset,
597
- behavior: "smooth"
598
- });
599
- } else {
600
- viewportElement[scrollOffsetKey] = offset;
601
- }
573
+ viewportElement.scrollTo({
574
+ [scrollToKey]: normalizeScrollOffset(offset, isRtl),
575
+ behavior: smooth ? "smooth" : "instant"
576
+ });
602
577
  });
603
578
  const sizeKey = isHorizontal ? "width" : "height";
604
579
  const mountedIndexes = new WeakMap();
@@ -623,9 +598,9 @@ var createContainerDriver = (store, isHorizontal) => {
623
598
  $observe(containerElement, viewport = containerElement.parentElement) {
624
599
  resizeObserver._observe(viewportElement = viewport);
625
600
  if (isHorizontal) {
626
- isNegative = getComputedStyle(viewport).direction === "rtl";
601
+ isRtl = getComputedStyle(viewport).direction === "rtl";
627
602
  }
628
- scrollObserver = createScrollObserver(store, viewport, isHorizontal, () => normalizeScrollOffset(viewport[scrollOffsetKey], isNegative), (jump, shift, isMomentumScrolling) => {
603
+ scrollObserver = createScrollObserver(store, viewport, isHorizontal, () => normalizeScrollOffset(viewport[scrollOffsetKey], isRtl), (jump, shift, isMomentumScrolling) => {
629
604
  if (isMomentumScrolling) {
630
605
  const style = viewport.style;
631
606
  const prev = style[overflowKey];
@@ -634,7 +609,18 @@ var createContainerDriver = (store, isHorizontal) => {
634
609
  style[overflowKey] = prev;
635
610
  });
636
611
  }
637
- viewport[scrollOffsetKey] = normalizeScrollOffset(store.$getScrollOffset() + jump, isNegative);
612
+ const target = store.$getScrollOffset() + jump;
613
+ if (target <= 0 || target >= store.$getStartSpacerSize() + store.$getTotalSize() - store.$getViewportSize()) {
614
+ viewport.scrollTo({
615
+ [scrollToKey]: normalizeScrollOffset(target, isRtl),
616
+ behavior: "instant"
617
+ });
618
+ } else {
619
+ viewport.scrollBy({
620
+ [scrollToKey]: normalizeScrollOffset(jump, isRtl),
621
+ behavior: "instant"
622
+ });
623
+ }
638
624
  if (shift) {
639
625
  cancelScroll();
640
626
  }
@@ -655,39 +641,38 @@ var createContainerDriver = (store, isHorizontal) => {
655
641
  resizeObserver._unobserve(el);
656
642
  };
657
643
  },
658
- $isNegative: () => isNegative,
659
644
  $scroll: scheduleScroll,
660
645
  $effect() {
661
646
  scrollObserver && scrollObserver._fixScrollJump();
662
647
  },
663
- $getBaseOffset: store.$getStartSpacerSize,
664
- $getScrollbarSize: () => 0
648
+ $getBaseOffset: store.$getStartSpacerSize
665
649
  };
666
650
  };
667
651
  var createWindowDriver = (store, isHorizontal) => {
668
- let containerElement;
652
+ let viewportElement;
669
653
  let scrollObserver;
670
654
  let cleanupOnWindowResize;
655
+ let getBaseOffset;
656
+ let onViewportResize;
671
657
  let initialized = createPromise();
672
- let isNegative = false;
658
+ let isRtl = false;
659
+ const scrollOffsetKey = isHorizontal ? "scrollLeft" : "scrollTop";
673
660
  const scrollToKey = isHorizontal ? "left" : "top";
674
- const [scheduleScroll] = createScrollScheduler(store, () => initialized[0], (offset, smooth) => {
675
- offset = normalizeScrollOffset(offset, isNegative);
676
- const window = getCurrentWindow(getCurrentDocument(containerElement));
677
- if (smooth) {
678
- window.scroll({
679
- [scrollToKey]: offset,
680
- behavior: "smooth"
681
- });
682
- } else {
683
- window.scroll({ [scrollToKey]: offset });
684
- }
661
+ const [scheduleScroll, cancelScroll] = createScrollScheduler(store, () => initialized[0], (offset, smooth) => {
662
+ viewportElement.scrollTo({
663
+ [scrollToKey]: normalizeScrollOffset(offset, isRtl),
664
+ behavior: smooth ? "smooth" : "instant"
665
+ });
685
666
  });
686
667
  const sizeKey = isHorizontal ? "width" : "height";
687
668
  const mountedIndexes = new WeakMap();
688
669
  const resizeObserver = createResizeObserver((entries) => {
689
670
  const resizes = [];
690
671
  for (const { target, contentRect } of entries) {
672
+ if (target === viewportElement) {
673
+ onViewportResize && onViewportResize();
674
+ continue;
675
+ }
691
676
  if (!target.offsetParent) continue;
692
677
  const index = mountedIndexes.get(target);
693
678
  if (index != null) {
@@ -698,46 +683,58 @@ var createWindowDriver = (store, isHorizontal) => {
698
683
  store.$update(3, resizes);
699
684
  }
700
685
  });
701
- const calcOffsetToViewport = (node, viewport, window, isHorizontal, offset = 0) => {
686
+ const calcOffsetToViewport = (node, viewport, until, isHorizontal, offset = 0) => {
702
687
  const offsetKey = isHorizontal ? "offsetLeft" : "offsetTop";
703
- const offsetSum = offset + (isHorizontal && isNegative ? window.innerWidth - node[offsetKey] - node.offsetWidth : node[offsetKey]);
688
+ const offsetSum = offset + (isRtl ? viewport.clientWidth - node[offsetKey] - node.offsetWidth : node[offsetKey]);
704
689
  const parent = node.offsetParent;
705
- if (node === viewport || !parent) {
690
+ if (node === until || !parent) {
706
691
  return offsetSum;
707
692
  }
708
- return calcOffsetToViewport(parent, viewport, window, isHorizontal, offsetSum);
693
+ return calcOffsetToViewport(parent, viewport, until, isHorizontal, offsetSum);
709
694
  };
710
695
  return {
711
696
  $observe(container) {
712
- containerElement = container;
713
- const scrollOffsetKey = isHorizontal ? "scrollX" : "scrollY";
714
697
  const document = getCurrentDocument(container);
715
698
  const window = getCurrentWindow(document);
716
- const onWindowResize = () => {
717
- store.$update(4, window[isHorizontal ? "innerWidth" : "innerHeight"]);
699
+ const viewport = viewportElement = document.scrollingElement;
700
+ const baseOffset = getBaseOffset = () => {
701
+ return calcOffsetToViewport(container, viewport, document.body, isHorizontal);
702
+ };
703
+ const onWindowResize = onViewportResize = () => {
704
+ store.$update(4, viewport[isHorizontal ? "clientWidth" : "clientHeight"]);
718
705
  };
719
706
  window.addEventListener("resize", onWindowResize);
720
- microtask(onWindowResize);
707
+ resizeObserver._observe(viewport);
721
708
  cleanupOnWindowResize = () => {
722
709
  window.removeEventListener("resize", onWindowResize);
723
710
  };
724
711
  if (isHorizontal) {
725
- isNegative = getComputedStyle(getDocumentElement(document)).direction === "rtl";
712
+ isRtl = getComputedStyle(viewport).direction === "rtl";
726
713
  }
727
- scrollObserver = createScrollObserver(store, window, isHorizontal, () => normalizeScrollOffset(window[scrollOffsetKey], isNegative), (jump, shift) => {
728
- if (shift) {
729
- window.scroll({ [scrollToKey]: normalizeScrollOffset(store.$getScrollOffset() + jump, isNegative) });
714
+ scrollObserver = createScrollObserver(store, window, isHorizontal, () => normalizeScrollOffset(viewport[scrollOffsetKey], isRtl), (jump, shift) => {
715
+ const target = store.$getScrollOffset() + jump;
716
+ if (target <= 0 || target >= store.$getStartSpacerSize() + store.$getTotalSize() - store.$getViewportSize()) {
717
+ viewport.scrollTo({
718
+ [scrollToKey]: normalizeScrollOffset(target, isRtl),
719
+ behavior: "instant"
720
+ });
730
721
  } else {
731
- window.scrollBy({ [scrollToKey]: normalizeScrollOffset(jump, isNegative) });
722
+ viewport.scrollBy({
723
+ [scrollToKey]: normalizeScrollOffset(jump, isRtl),
724
+ behavior: "instant"
725
+ });
732
726
  }
733
- }, () => calcOffsetToViewport(container, document.body, window, isHorizontal));
727
+ if (shift) {
728
+ cancelScroll();
729
+ }
730
+ }, baseOffset);
734
731
  initialized[1](true);
735
732
  },
736
733
  $dispose() {
737
734
  cleanupOnWindowResize && cleanupOnWindowResize();
738
735
  resizeObserver._dispose();
739
736
  scrollObserver && scrollObserver._dispose();
740
- containerElement = undefined;
737
+ viewportElement = undefined;
741
738
  initialized[1](false);
742
739
  initialized = createPromise();
743
740
  },
@@ -749,18 +746,12 @@ var createWindowDriver = (store, isHorizontal) => {
749
746
  resizeObserver._unobserve(el);
750
747
  };
751
748
  },
752
- $isNegative: () => isNegative,
753
749
  $scroll: scheduleScroll,
754
750
  $effect() {
755
751
  scrollObserver && scrollObserver._fixScrollJump();
756
752
  },
757
753
  $getBaseOffset() {
758
- const document = getCurrentDocument(containerElement);
759
- return calcOffsetToViewport(containerElement, document.body, getCurrentWindow(document), isHorizontal);
760
- },
761
- $getScrollbarSize() {
762
- const html = getDocumentElement(getCurrentDocument(containerElement));
763
- return store.$getViewportSize() - (isHorizontal ? html.clientWidth : html.clientHeight);
754
+ return getBaseOffset();
764
755
  }
765
756
  };
766
757
  };
@@ -769,20 +760,18 @@ var createContainerGridDriver = (rowStore, colStore) => {
769
760
  let rowScrollObserver;
770
761
  let colScrollObserver;
771
762
  let initialized = createPromise();
772
- let isNegative = false;
763
+ let isRtl = false;
773
764
  const [scheduleScrollX, cancelScrollX] = createScrollScheduler(colStore, () => initialized[0], (offset, smooth) => {
774
- const opts = { left: normalizeScrollOffset(offset, isNegative) };
775
- if (smooth) {
776
- opts.behavior = "smooth";
777
- }
778
- viewportElement.scrollTo(opts);
765
+ viewportElement.scrollTo({
766
+ left: normalizeScrollOffset(offset, isRtl),
767
+ behavior: smooth ? "smooth" : "instant"
768
+ });
779
769
  });
780
770
  const [scheduleScrollY, cancelScrollY] = createScrollScheduler(rowStore, () => initialized[0], (offset, smooth) => {
781
- const opts = { top: offset };
782
- if (smooth) {
783
- opts.behavior = "smooth";
784
- }
785
- viewportElement.scrollTo(opts);
771
+ viewportElement.scrollTo({
772
+ top: offset,
773
+ behavior: smooth ? "smooth" : "instant"
774
+ });
786
775
  });
787
776
  const mountedIndexes = new WeakMap();
788
777
  const maybeCachedRowIndexes = new Set();
@@ -864,8 +853,8 @@ var createContainerGridDriver = (rowStore, colStore) => {
864
853
  const viewport = viewportElement;
865
854
  const scrollOffsetKey = isHorizontal ? "scrollLeft" : "scrollTop";
866
855
  const overflowKey = isHorizontal ? "overflowX" : "overflowY";
867
- const negative = isHorizontal && isNegative;
868
- return createScrollObserver(store, viewport, isHorizontal, () => normalizeScrollOffset(viewport[scrollOffsetKey], negative), (jump, shift, isMomentumScrolling) => {
856
+ const rtl = isHorizontal && isRtl;
857
+ return createScrollObserver(store, viewport, isHorizontal, () => normalizeScrollOffset(viewport[scrollOffsetKey], rtl), (jump, shift, isMomentumScrolling) => {
869
858
  if (isMomentumScrolling) {
870
859
  const style = viewport.style;
871
860
  const prev = style[overflowKey];
@@ -874,7 +863,18 @@ var createContainerGridDriver = (rowStore, colStore) => {
874
863
  style[overflowKey] = prev;
875
864
  });
876
865
  }
877
- viewport[scrollOffsetKey] = normalizeScrollOffset(store.$getScrollOffset() + jump, negative);
866
+ const target = store.$getScrollOffset() + jump;
867
+ if (target <= 0 || target >= store.$getStartSpacerSize() + store.$getTotalSize() - store.$getViewportSize()) {
868
+ viewport.scrollTo({
869
+ [isHorizontal ? "left" : "top"]: normalizeScrollOffset(target, rtl),
870
+ behavior: "instant"
871
+ });
872
+ } else {
873
+ viewport.scrollBy({
874
+ [isHorizontal ? "left" : "top"]: normalizeScrollOffset(jump, rtl),
875
+ behavior: "instant"
876
+ });
877
+ }
878
878
  if (shift) {
879
879
  cancelScroll();
880
880
  }
@@ -883,7 +883,7 @@ var createContainerGridDriver = (rowStore, colStore) => {
883
883
  return {
884
884
  $observe(containerElement, viewport = containerElement.parentElement) {
885
885
  resizeObserver._observe(viewportElement = viewport);
886
- isNegative = getComputedStyle(viewport).direction === "rtl";
886
+ isRtl = getComputedStyle(viewport).direction === "rtl";
887
887
  rowScrollObserver = observeAxisScroll(rowStore, false, cancelScrollY);
888
888
  colScrollObserver = observeAxisScroll(colStore, true, cancelScrollX);
889
889
  initialized[1](true);
@@ -921,7 +921,6 @@ var createContainerGridDriver = (rowStore, colStore) => {
921
921
  }
922
922
  colStore.$update(3, cols);
923
923
  },
924
- $isNegative: () => isNegative,
925
924
  $scrollX: scheduleScrollX,
926
925
  $scrollY: scheduleScrollY,
927
926
  $effect() {
@@ -953,7 +952,7 @@ var scrollToIndex = (driver, store, index, { align, smooth, offset = 0 } = {}) =
953
952
  }
954
953
  }
955
954
  driver.$scroll(() => {
956
- return offset + driver.$getBaseOffset() + store.$getItemOffset(index) + (align === "end" ? store.$getItemSize(index) - (store.$getViewportSize() - driver.$getScrollbarSize()) : align === "center" ? (store.$getItemSize(index) - (store.$getViewportSize() - driver.$getScrollbarSize())) / 2 : 0);
955
+ return offset + driver.$getBaseOffset() + store.$getItemOffset(index) + (align === "end" ? store.$getItemSize(index) - store.$getViewportSize() : align === "center" ? (store.$getItemSize(index) - store.$getViewportSize()) / 2 : 0);
957
956
  }, smooth);
958
957
  };
959
958
  var gridScrollTo = (driver, row, col) => {
@@ -1003,7 +1002,7 @@ var ListItem = (props) => {
1003
1002
  position: hide && isSSR ? undefined : "absolute",
1004
1003
  [isHorizontal ? "height" : "width"]: "100%",
1005
1004
  [isHorizontal ? "top" : "left"]: "0px",
1006
- [isHorizontal ? "left" : "top"]: props._offset + "px",
1005
+ [isHorizontal ? "inset-inline-start" : "top"]: props._offset + "px",
1007
1006
  visibility: !hide || isSSR ? undefined : "hidden"
1008
1007
  };
1009
1008
  if (isHorizontal) {
@@ -1052,7 +1051,6 @@ var Virtualizer = (props) => {
1052
1051
  });
1053
1052
  const isScrolling = createMemo(() => stateVersion() && store.$isScrolling());
1054
1053
  const totalSize = createMemo(() => stateVersion() && store.$getTotalSize());
1055
- const isNegative = createMemo(() => stateVersion() && driver.$isNegative());
1056
1054
  onMount(() => {
1057
1055
  setIsSSR(false);
1058
1056
  if (props.ref) {
@@ -1126,7 +1124,7 @@ var Virtualizer = (props) => {
1126
1124
  const renderItem = (data, index) => {
1127
1125
  const offset = createMemo(() => {
1128
1126
  stateVersion();
1129
- return store.$getItemOffset(index(), isNegative());
1127
+ return store.$getItemOffset(index());
1130
1128
  });
1131
1129
  const hide = createMemo(() => {
1132
1130
  stateVersion();
@@ -1217,7 +1215,6 @@ var WindowVirtualizer = (props) => {
1217
1215
  });
1218
1216
  const isScrolling = createMemo(() => stateVersion() && store.$isScrolling());
1219
1217
  const totalSize = createMemo(() => stateVersion() && store.$getTotalSize());
1220
- const isNegative = createMemo(() => stateVersion() && driver.$isNegative());
1221
1218
  onMount(() => {
1222
1219
  setIsSSR(false);
1223
1220
  if (props.ref) {
@@ -1276,7 +1273,7 @@ var WindowVirtualizer = (props) => {
1276
1273
  const itemIndex = createMemo(() => range()[0] + index());
1277
1274
  const offset = createMemo(() => {
1278
1275
  stateVersion();
1279
- return store.$getItemOffset(itemIndex(), isNegative());
1276
+ return store.$getItemOffset(itemIndex());
1280
1277
  });
1281
1278
  const hide = createMemo(() => {
1282
1279
  stateVersion();