@tanstack/virtual-core 3.0.0-beta.32 → 3.0.0-beta.34

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.
@@ -95,7 +95,7 @@ var createOffsetObserver = function createOffsetObserver(mode) {
95
95
  var prevY = instance.scrollElement[propY];
96
96
  var scroll = function scroll() {
97
97
  var offset = instance.scrollElement[instance.options.horizontal ? propX : propY];
98
- cb(Math.max(0, offset - instance.options.scrollMargin));
98
+ cb(offset);
99
99
  };
100
100
  scroll();
101
101
  var onScroll = function onScroll(e) {
@@ -124,18 +124,18 @@ var measureElement = function measureElement(element, instance) {
124
124
  };
125
125
  var windowScroll = function windowScroll(offset, _ref, instance) {
126
126
  var _instance$scrollEleme, _instance$scrollEleme2;
127
- var adjustments = _ref.adjustments,
128
- behavior = _ref.behavior,
129
- sync = _ref.sync;
130
- var toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments != null ? adjustments : 0);
127
+ var _ref$adjustments = _ref.adjustments,
128
+ adjustments = _ref$adjustments === void 0 ? 0 : _ref$adjustments,
129
+ behavior = _ref.behavior;
130
+ var toOffset = offset + adjustments;
131
131
  (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo == null ? void 0 : _instance$scrollEleme.scrollTo((_instance$scrollEleme2 = {}, _instance$scrollEleme2[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme2.behavior = behavior, _instance$scrollEleme2));
132
132
  };
133
133
  var elementScroll = function elementScroll(offset, _ref2, instance) {
134
134
  var _instance$scrollEleme3, _instance$scrollEleme4;
135
- var adjustments = _ref2.adjustments,
136
- behavior = _ref2.behavior,
137
- sync = _ref2.sync;
138
- var toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments != null ? adjustments : 0);
135
+ var _ref2$adjustments = _ref2.adjustments,
136
+ adjustments = _ref2$adjustments === void 0 ? 0 : _ref2$adjustments,
137
+ behavior = _ref2.behavior;
138
+ var toOffset = offset + adjustments;
139
139
  (_instance$scrollEleme3 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme3.scrollTo == null ? void 0 : _instance$scrollEleme3.scrollTo((_instance$scrollEleme4 = {}, _instance$scrollEleme4[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme4.behavior = behavior, _instance$scrollEleme4));
140
140
  };
141
141
  var Virtualizer = function Virtualizer(_opts) {
@@ -145,8 +145,9 @@ var Virtualizer = function Virtualizer(_opts) {
145
145
  this.isScrolling = false;
146
146
  this.isScrollingTimeoutId = null;
147
147
  this.measurementsCache = [];
148
- this.itemMeasurementsCache = {};
148
+ this.itemSizeCache = {};
149
149
  this.pendingMeasuredCacheIndexes = [];
150
+ this.scrollDirection = null;
150
151
  this.scrollAdjustments = 0;
151
152
  this.measureElementCache = {};
152
153
  this.pendingScrollToIndexCallback = null;
@@ -195,7 +196,8 @@ var Virtualizer = function Virtualizer(_opts) {
195
196
  },
196
197
  scrollMargin: 0,
197
198
  scrollingDelay: 150,
198
- indexAttribute: 'data-index'
199
+ indexAttribute: 'data-index',
200
+ initialMeasurementsCache: []
199
201
  }, opts);
200
202
  };
201
203
  this.notify = function () {
@@ -226,14 +228,17 @@ var Virtualizer = function Virtualizer(_opts) {
226
228
  _this.scrollElement = scrollElement;
227
229
  _this._scrollToOffset(_this.scrollOffset, {
228
230
  adjustments: undefined,
229
- behavior: undefined,
230
- sync: true
231
+ behavior: undefined
231
232
  });
232
233
  _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
233
234
  _this.scrollRect = rect;
234
235
  _this.calculateRange();
235
236
  }));
236
237
  _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
238
+ _this.scrollAdjustments = 0;
239
+ if (_this.scrollOffset === offset) {
240
+ return;
241
+ }
237
242
  if (_this.isScrollingTimeoutId !== null) {
238
243
  clearTimeout(_this.isScrollingTimeoutId);
239
244
  _this.isScrollingTimeoutId = null;
@@ -244,14 +249,13 @@ var Virtualizer = function Virtualizer(_opts) {
244
249
  _this.notify();
245
250
  }
246
251
  };
247
- _this.scrollAdjustments = 0;
248
- if (_this.scrollOffset !== offset) {
249
- _this.scrollOffset = offset;
250
- onIsScrollingChange(true);
251
- }
252
+ _this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';
253
+ _this.scrollOffset = offset;
252
254
  _this.calculateRange();
255
+ onIsScrollingChange(true);
253
256
  _this.isScrollingTimeoutId = setTimeout(function () {
254
257
  _this.isScrollingTimeoutId = null;
258
+ _this.scrollDirection = null;
255
259
  onIsScrollingChange(false);
256
260
  }, _this.options.scrollingDelay);
257
261
  }));
@@ -263,15 +267,15 @@ var Virtualizer = function Virtualizer(_opts) {
263
267
  return _this.scrollRect[_this.options.horizontal ? 'width' : 'height'];
264
268
  };
265
269
  this.getMeasurements = utils.memo(function () {
266
- return [_this.options.count, _this.options.paddingStart, _this.options.getItemKey, _this.itemMeasurementsCache];
267
- }, function (count, paddingStart, getItemKey, measurementsCache) {
270
+ return [_this.options.count, _this.options.paddingStart, _this.options.scrollMargin, _this.options.getItemKey, _this.itemSizeCache];
271
+ }, function (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) {
268
272
  var min = _this.pendingMeasuredCacheIndexes.length > 0 ? Math.min.apply(Math, _this.pendingMeasuredCacheIndexes) : 0;
269
273
  _this.pendingMeasuredCacheIndexes = [];
270
274
  var measurements = _this.measurementsCache.slice(0, min);
271
275
  for (var _i2 = min; _i2 < count; _i2++) {
272
276
  var key = getItemKey(_i2);
273
- var measuredSize = measurementsCache[key];
274
- var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart;
277
+ var measuredSize = itemSizeCache[key];
278
+ var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
275
279
  var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
276
280
  var end = start + size;
277
281
  measurements[_i2] = {
@@ -332,7 +336,7 @@ var Virtualizer = function Virtualizer(_opts) {
332
336
  return parseInt(indexStr, 10);
333
337
  };
334
338
  this._measureElement = function (node, _sync) {
335
- var _this$itemMeasurement;
339
+ var _this$itemSizeCache$i;
336
340
  var index = _this.indexFromElement(node);
337
341
  var item = _this.measurementsCache[index];
338
342
  if (!item) {
@@ -355,22 +359,21 @@ var Virtualizer = function Virtualizer(_opts) {
355
359
  ro == null ? void 0 : ro.observe(node);
356
360
  }
357
361
  var measuredItemSize = _this.options.measureElement(node, _this);
358
- var itemSize = (_this$itemMeasurement = _this.itemMeasurementsCache[item.key]) != null ? _this$itemMeasurement : item.size;
362
+ var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
359
363
  var delta = measuredItemSize - itemSize;
360
364
  if (delta !== 0) {
361
365
  var _extends2;
362
- if (item.start < _this.scrollOffset && _this.isScrolling) {
366
+ if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
363
367
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
364
368
  console.info('correction', delta);
365
369
  }
366
370
  _this._scrollToOffset(_this.scrollOffset, {
367
371
  adjustments: _this.scrollAdjustments += delta,
368
- behavior: undefined,
369
- sync: false
372
+ behavior: undefined
370
373
  });
371
374
  }
372
375
  _this.pendingMeasuredCacheIndexes.push(index);
373
- _this.itemMeasurementsCache = _rollupPluginBabelHelpers["extends"]({}, _this.itemMeasurementsCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
376
+ _this.itemSizeCache = _rollupPluginBabelHelpers["extends"]({}, _this.itemSizeCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
374
377
  _this.notify();
375
378
  }
376
379
  };
@@ -457,13 +460,12 @@ var Virtualizer = function Virtualizer(_opts) {
457
460
  return _this.getOffsetForAlignment(toOffset, align);
458
461
  };
459
462
  var toOffset = getOffsetForIndexAndAlignment(measurement);
460
- if (toOffset === offset) {
463
+ if (Math.round(toOffset) === Math.round(offset)) {
461
464
  return;
462
465
  }
463
466
  var options = {
464
467
  adjustments: undefined,
465
- behavior: behavior,
466
- sync: false
468
+ behavior: behavior
467
469
  };
468
470
  _this._scrollToOffset(toOffset, options);
469
471
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
@@ -479,31 +481,32 @@ var Virtualizer = function Virtualizer(_opts) {
479
481
  this.scrollBy = function (adjustments, options) {
480
482
  _this._scrollToOffset(_this.scrollOffset, {
481
483
  adjustments: adjustments,
482
- behavior: options == null ? void 0 : options.behavior,
483
- sync: false
484
+ behavior: options == null ? void 0 : options.behavior
484
485
  });
485
486
  };
486
487
  this.getTotalSize = function () {
487
488
  var _this$getMeasurements;
488
- return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) + _this.options.paddingEnd;
489
+ return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
489
490
  };
490
491
  this._scrollToOffset = function (offset, _ref6) {
491
492
  var adjustments = _ref6.adjustments,
492
- behavior = _ref6.behavior,
493
- sync = _ref6.sync;
493
+ behavior = _ref6.behavior;
494
494
  _this.options.scrollToFn(offset, {
495
495
  behavior: behavior,
496
- sync: sync,
497
496
  adjustments: adjustments
498
497
  }, _this);
499
498
  };
500
499
  this.measure = function () {
501
- _this.itemMeasurementsCache = {};
500
+ _this.itemSizeCache = {};
502
501
  _this.notify();
503
502
  };
504
503
  this.setOptions(_opts);
505
504
  this.scrollRect = this.options.initialRect;
506
505
  this.scrollOffset = this.options.initialOffset;
506
+ this.measurementsCache = this.options.initialMeasurementsCache;
507
+ this.measurementsCache.forEach(function (item) {
508
+ _this.itemSizeCache[item.key] = item.size;
509
+ });
507
510
  this.calculateRange();
508
511
  };
509
512
  var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollAdjustments = 0\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n onIsScrollingChange(true)\n }\n\n this.calculateRange()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n sync: false,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (toOffset === offset) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n sync: false,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (Math.round(toOffset) === Math.round(offset)) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -92,7 +92,7 @@ var createOffsetObserver = function createOffsetObserver(mode) {
92
92
  var prevY = instance.scrollElement[propY];
93
93
  var scroll = function scroll() {
94
94
  var offset = instance.scrollElement[instance.options.horizontal ? propX : propY];
95
- cb(Math.max(0, offset - instance.options.scrollMargin));
95
+ cb(offset);
96
96
  };
97
97
  scroll();
98
98
  var onScroll = function onScroll(e) {
@@ -121,18 +121,18 @@ var measureElement = function measureElement(element, instance) {
121
121
  };
122
122
  var windowScroll = function windowScroll(offset, _ref, instance) {
123
123
  var _instance$scrollEleme, _instance$scrollEleme2;
124
- var adjustments = _ref.adjustments,
125
- behavior = _ref.behavior,
126
- sync = _ref.sync;
127
- var toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments != null ? adjustments : 0);
124
+ var _ref$adjustments = _ref.adjustments,
125
+ adjustments = _ref$adjustments === void 0 ? 0 : _ref$adjustments,
126
+ behavior = _ref.behavior;
127
+ var toOffset = offset + adjustments;
128
128
  (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo == null ? void 0 : _instance$scrollEleme.scrollTo((_instance$scrollEleme2 = {}, _instance$scrollEleme2[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme2.behavior = behavior, _instance$scrollEleme2));
129
129
  };
130
130
  var elementScroll = function elementScroll(offset, _ref2, instance) {
131
131
  var _instance$scrollEleme3, _instance$scrollEleme4;
132
- var adjustments = _ref2.adjustments,
133
- behavior = _ref2.behavior,
134
- sync = _ref2.sync;
135
- var toOffset = (sync ? offset : offset + instance.options.scrollMargin) + (adjustments != null ? adjustments : 0);
132
+ var _ref2$adjustments = _ref2.adjustments,
133
+ adjustments = _ref2$adjustments === void 0 ? 0 : _ref2$adjustments,
134
+ behavior = _ref2.behavior;
135
+ var toOffset = offset + adjustments;
136
136
  (_instance$scrollEleme3 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme3.scrollTo == null ? void 0 : _instance$scrollEleme3.scrollTo((_instance$scrollEleme4 = {}, _instance$scrollEleme4[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme4.behavior = behavior, _instance$scrollEleme4));
137
137
  };
138
138
  var Virtualizer = function Virtualizer(_opts) {
@@ -142,8 +142,9 @@ var Virtualizer = function Virtualizer(_opts) {
142
142
  this.isScrolling = false;
143
143
  this.isScrollingTimeoutId = null;
144
144
  this.measurementsCache = [];
145
- this.itemMeasurementsCache = {};
145
+ this.itemSizeCache = {};
146
146
  this.pendingMeasuredCacheIndexes = [];
147
+ this.scrollDirection = null;
147
148
  this.scrollAdjustments = 0;
148
149
  this.measureElementCache = {};
149
150
  this.pendingScrollToIndexCallback = null;
@@ -192,7 +193,8 @@ var Virtualizer = function Virtualizer(_opts) {
192
193
  },
193
194
  scrollMargin: 0,
194
195
  scrollingDelay: 150,
195
- indexAttribute: 'data-index'
196
+ indexAttribute: 'data-index',
197
+ initialMeasurementsCache: []
196
198
  }, opts);
197
199
  };
198
200
  this.notify = function () {
@@ -223,14 +225,17 @@ var Virtualizer = function Virtualizer(_opts) {
223
225
  _this.scrollElement = scrollElement;
224
226
  _this._scrollToOffset(_this.scrollOffset, {
225
227
  adjustments: undefined,
226
- behavior: undefined,
227
- sync: true
228
+ behavior: undefined
228
229
  });
229
230
  _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
230
231
  _this.scrollRect = rect;
231
232
  _this.calculateRange();
232
233
  }));
233
234
  _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
235
+ _this.scrollAdjustments = 0;
236
+ if (_this.scrollOffset === offset) {
237
+ return;
238
+ }
234
239
  if (_this.isScrollingTimeoutId !== null) {
235
240
  clearTimeout(_this.isScrollingTimeoutId);
236
241
  _this.isScrollingTimeoutId = null;
@@ -241,14 +246,13 @@ var Virtualizer = function Virtualizer(_opts) {
241
246
  _this.notify();
242
247
  }
243
248
  };
244
- _this.scrollAdjustments = 0;
245
- if (_this.scrollOffset !== offset) {
246
- _this.scrollOffset = offset;
247
- onIsScrollingChange(true);
248
- }
249
+ _this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';
250
+ _this.scrollOffset = offset;
249
251
  _this.calculateRange();
252
+ onIsScrollingChange(true);
250
253
  _this.isScrollingTimeoutId = setTimeout(function () {
251
254
  _this.isScrollingTimeoutId = null;
255
+ _this.scrollDirection = null;
252
256
  onIsScrollingChange(false);
253
257
  }, _this.options.scrollingDelay);
254
258
  }));
@@ -260,15 +264,15 @@ var Virtualizer = function Virtualizer(_opts) {
260
264
  return _this.scrollRect[_this.options.horizontal ? 'width' : 'height'];
261
265
  };
262
266
  this.getMeasurements = memo(function () {
263
- return [_this.options.count, _this.options.paddingStart, _this.options.getItemKey, _this.itemMeasurementsCache];
264
- }, function (count, paddingStart, getItemKey, measurementsCache) {
267
+ return [_this.options.count, _this.options.paddingStart, _this.options.scrollMargin, _this.options.getItemKey, _this.itemSizeCache];
268
+ }, function (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) {
265
269
  var min = _this.pendingMeasuredCacheIndexes.length > 0 ? Math.min.apply(Math, _this.pendingMeasuredCacheIndexes) : 0;
266
270
  _this.pendingMeasuredCacheIndexes = [];
267
271
  var measurements = _this.measurementsCache.slice(0, min);
268
272
  for (var _i2 = min; _i2 < count; _i2++) {
269
273
  var key = getItemKey(_i2);
270
- var measuredSize = measurementsCache[key];
271
- var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart;
274
+ var measuredSize = itemSizeCache[key];
275
+ var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
272
276
  var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
273
277
  var end = start + size;
274
278
  measurements[_i2] = {
@@ -329,7 +333,7 @@ var Virtualizer = function Virtualizer(_opts) {
329
333
  return parseInt(indexStr, 10);
330
334
  };
331
335
  this._measureElement = function (node, _sync) {
332
- var _this$itemMeasurement;
336
+ var _this$itemSizeCache$i;
333
337
  var index = _this.indexFromElement(node);
334
338
  var item = _this.measurementsCache[index];
335
339
  if (!item) {
@@ -352,22 +356,21 @@ var Virtualizer = function Virtualizer(_opts) {
352
356
  ro == null ? void 0 : ro.observe(node);
353
357
  }
354
358
  var measuredItemSize = _this.options.measureElement(node, _this);
355
- var itemSize = (_this$itemMeasurement = _this.itemMeasurementsCache[item.key]) != null ? _this$itemMeasurement : item.size;
359
+ var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
356
360
  var delta = measuredItemSize - itemSize;
357
361
  if (delta !== 0) {
358
362
  var _extends2;
359
- if (item.start < _this.scrollOffset && _this.isScrolling) {
363
+ if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
360
364
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
361
365
  console.info('correction', delta);
362
366
  }
363
367
  _this._scrollToOffset(_this.scrollOffset, {
364
368
  adjustments: _this.scrollAdjustments += delta,
365
- behavior: undefined,
366
- sync: false
369
+ behavior: undefined
367
370
  });
368
371
  }
369
372
  _this.pendingMeasuredCacheIndexes.push(index);
370
- _this.itemMeasurementsCache = _extends({}, _this.itemMeasurementsCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
373
+ _this.itemSizeCache = _extends({}, _this.itemSizeCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
371
374
  _this.notify();
372
375
  }
373
376
  };
@@ -454,13 +457,12 @@ var Virtualizer = function Virtualizer(_opts) {
454
457
  return _this.getOffsetForAlignment(toOffset, align);
455
458
  };
456
459
  var toOffset = getOffsetForIndexAndAlignment(measurement);
457
- if (toOffset === offset) {
460
+ if (Math.round(toOffset) === Math.round(offset)) {
458
461
  return;
459
462
  }
460
463
  var options = {
461
464
  adjustments: undefined,
462
- behavior: behavior,
463
- sync: false
465
+ behavior: behavior
464
466
  };
465
467
  _this._scrollToOffset(toOffset, options);
466
468
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
@@ -476,31 +478,32 @@ var Virtualizer = function Virtualizer(_opts) {
476
478
  this.scrollBy = function (adjustments, options) {
477
479
  _this._scrollToOffset(_this.scrollOffset, {
478
480
  adjustments: adjustments,
479
- behavior: options == null ? void 0 : options.behavior,
480
- sync: false
481
+ behavior: options == null ? void 0 : options.behavior
481
482
  });
482
483
  };
483
484
  this.getTotalSize = function () {
484
485
  var _this$getMeasurements;
485
- return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) + _this.options.paddingEnd;
486
+ return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
486
487
  };
487
488
  this._scrollToOffset = function (offset, _ref6) {
488
489
  var adjustments = _ref6.adjustments,
489
- behavior = _ref6.behavior,
490
- sync = _ref6.sync;
490
+ behavior = _ref6.behavior;
491
491
  _this.options.scrollToFn(offset, {
492
492
  behavior: behavior,
493
- sync: sync,
494
493
  adjustments: adjustments
495
494
  }, _this);
496
495
  };
497
496
  this.measure = function () {
498
- _this.itemMeasurementsCache = {};
497
+ _this.itemSizeCache = {};
499
498
  _this.notify();
500
499
  };
501
500
  this.setOptions(_opts);
502
501
  this.scrollRect = this.options.initialRect;
503
502
  this.scrollOffset = this.options.initialOffset;
503
+ this.measurementsCache = this.options.initialMeasurementsCache;
504
+ this.measurementsCache.forEach(function (item) {
505
+ _this.itemSizeCache[item.key] = item.size;
506
+ });
504
507
  this.calculateRange();
505
508
  };
506
509
  var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {