@tanstack/virtual-core 3.0.0-beta.40 → 3.0.0-beta.42

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.
@@ -97,7 +97,7 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
97
97
  _willUpdate: () => void;
98
98
  private getSize;
99
99
  private getMeasurements;
100
- calculateRange: () => {
100
+ calculateRange: (fArgs_0?: boolean | undefined) => {
101
101
  startIndex: number;
102
102
  endIndex: number;
103
103
  };
@@ -105,7 +105,7 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
105
105
  indexFromElement: (node: TItemElement) => number;
106
106
  private _measureElement;
107
107
  measureElement: (node: TItemElement | null) => void;
108
- getVirtualItems: () => VirtualItem[];
108
+ getVirtualItems: (...fArgs: readonly any[]) => VirtualItem[];
109
109
  getOffsetForAlignment: (toOffset: number, align: ScrollAlignment) => number;
110
110
  scrollToOffset: (toOffset: number, { align, behavior }?: ScrollToOffsetOptions) => void;
111
111
  scrollToIndex: (index: number, { align, behavior }?: ScrollToIndexOptions) => void;
@@ -9,8 +9,8 @@
9
9
  * @license MIT
10
10
  */
11
11
  import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.esm.js';
12
- import { memo } from './utils.esm.js';
13
- export { memo } from './utils.esm.js';
12
+ import { memo, notUndefined, approxEqual } from './utils.esm.js';
13
+ export { approxEqual, memo, notUndefined } from './utils.esm.js';
14
14
 
15
15
  //
16
16
 
@@ -265,8 +265,6 @@ var Virtualizer = function Virtualizer(_opts) {
265
265
  onIsScrollingChange(false);
266
266
  }, _this.options.scrollingDelay);
267
267
  }));
268
- } else if (!_this.isScrolling) {
269
- _this.calculateRange();
270
268
  }
271
269
  };
272
270
  this.getSize = function () {
@@ -302,7 +300,9 @@ var Virtualizer = function Virtualizer(_opts) {
302
300
  });
303
301
  this.calculateRange = memo(function () {
304
302
  return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];
305
- }, function (measurements, outerSize, scrollOffset) {
303
+ }, function (measurements, outerSize, scrollOffset, _ref4) {
304
+ var _ref4$ = _ref4[0],
305
+ flush = _ref4$ === void 0 ? true : _ref4$;
306
306
  var range = calculateRange({
307
307
  measurements: measurements,
308
308
  outerSize: outerSize,
@@ -310,7 +310,9 @@ var Virtualizer = function Virtualizer(_opts) {
310
310
  });
311
311
  if (range.startIndex !== _this.range.startIndex || range.endIndex !== _this.range.endIndex) {
312
312
  _this.range = range;
313
- _this.notify();
313
+ if (flush) {
314
+ _this.notify();
315
+ }
314
316
  }
315
317
  return _this.range;
316
318
  }, {
@@ -320,7 +322,7 @@ var Virtualizer = function Virtualizer(_opts) {
320
322
  }
321
323
  });
322
324
  this.getIndexes = memo(function () {
323
- return [_this.options.rangeExtractor, _this.range, _this.options.overscan, _this.options.count];
325
+ return [_this.options.rangeExtractor, _this.calculateRange(false), _this.options.overscan, _this.options.count];
324
326
  }, function (rangeExtractor, range, overscan, count) {
325
327
  return rangeExtractor(_extends({}, range, {
326
328
  overscan: overscan,
@@ -434,10 +436,10 @@ var Virtualizer = function Virtualizer(_opts) {
434
436
  return Math.max(Math.min(maxOffset, toOffset), 0);
435
437
  };
436
438
  this.scrollToOffset = function (toOffset, _temp) {
437
- var _ref4 = _temp === void 0 ? {} : _temp,
438
- _ref4$align = _ref4.align,
439
- align = _ref4$align === void 0 ? 'start' : _ref4$align,
440
- behavior = _ref4.behavior;
439
+ var _ref5 = _temp === void 0 ? {} : _temp,
440
+ _ref5$align = _ref5.align,
441
+ align = _ref5$align === void 0 ? 'start' : _ref5$align,
442
+ behavior = _ref5.behavior;
441
443
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
442
444
  if (isDynamic && behavior === 'smooth') {
443
445
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -451,10 +453,11 @@ var Virtualizer = function Virtualizer(_opts) {
451
453
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
452
454
  };
453
455
  this.scrollToIndex = function (index, _temp2) {
454
- var _ref5 = _temp2 === void 0 ? {} : _temp2,
455
- _ref5$align = _ref5.align,
456
- align = _ref5$align === void 0 ? 'auto' : _ref5$align,
457
- behavior = _ref5.behavior;
456
+ var _ref6 = _temp2 === void 0 ? {} : _temp2,
457
+ _ref6$align = _ref6.align,
458
+ align = _ref6$align === void 0 ? 'auto' : _ref6$align,
459
+ behavior = _ref6.behavior;
460
+ index = Math.max(0, Math.min(index, _this.options.count - 1));
458
461
  if (_this.scrollToIndexTimeoutId !== null) {
459
462
  clearTimeout(_this.scrollToIndexTimeoutId);
460
463
  _this.scrollToIndexTimeoutId = null;
@@ -464,15 +467,7 @@ var Virtualizer = function Virtualizer(_opts) {
464
467
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
465
468
  return;
466
469
  }
467
- var getMeasurement = function getMeasurement() {
468
- var measurements = _this.getMeasurements();
469
- var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
470
- if (!measurement) {
471
- throw new Error("VirtualItem not found for index = " + index);
472
- }
473
- return measurement;
474
- };
475
- var measurement = getMeasurement();
470
+ var measurement = notUndefined(_this.getMeasurements()[index]);
476
471
  if (align === 'auto') {
477
472
  if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
478
473
  align = 'end';
@@ -492,15 +487,12 @@ var Virtualizer = function Virtualizer(_opts) {
492
487
  behavior: behavior
493
488
  };
494
489
  _this._scrollToOffset(toOffset, options);
495
- var approxEqual = function approxEqual(a, b) {
496
- return Math.abs(a - b) < 1;
497
- };
498
490
  if (isDynamic) {
499
491
  _this.scrollToIndexTimeoutId = setTimeout(function () {
500
492
  _this.scrollToIndexTimeoutId = null;
501
493
  var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
502
494
  if (elementInDOM) {
503
- var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
495
+ var _toOffset = getOffsetForIndexAndAlignment(notUndefined(_this.getMeasurements()[index]));
504
496
  if (!approxEqual(_toOffset, _this.scrollOffset)) {
505
497
  _this.scrollToIndex(index, {
506
498
  align: align,
@@ -517,8 +509,8 @@ var Virtualizer = function Virtualizer(_opts) {
517
509
  }
518
510
  };
519
511
  this.scrollBy = function (delta, _temp3) {
520
- var _ref6 = _temp3 === void 0 ? {} : _temp3,
521
- behavior = _ref6.behavior;
512
+ var _ref7 = _temp3 === void 0 ? {} : _temp3,
513
+ behavior = _ref7.behavior;
522
514
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
523
515
  if (isDynamic && behavior === 'smooth') {
524
516
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -533,9 +525,9 @@ var Virtualizer = function Virtualizer(_opts) {
533
525
  var _this$getMeasurements;
534
526
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
535
527
  };
536
- this._scrollToOffset = function (offset, _ref7) {
537
- var adjustments = _ref7.adjustments,
538
- behavior = _ref7.behavior;
528
+ this._scrollToOffset = function (offset, _ref8) {
529
+ var adjustments = _ref8.adjustments,
530
+ behavior = _ref8.behavior;
539
531
  _this.options.scrollToFn(offset, {
540
532
  behavior: behavior,
541
533
  adjustments: adjustments
@@ -572,10 +564,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
572
564
  return 0;
573
565
  }
574
566
  };
575
- function calculateRange(_ref8) {
576
- var measurements = _ref8.measurements,
577
- outerSize = _ref8.outerSize,
578
- scrollOffset = _ref8.scrollOffset;
567
+ function calculateRange(_ref9) {
568
+ var measurements = _ref9.measurements,
569
+ outerSize = _ref9.outerSize,
570
+ scrollOffset = _ref9.scrollOffset;
579
571
  var count = measurements.length - 1;
580
572
  var getOffset = function getOffset(index) {
581
573
  return measurements[index].start;
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.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 const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\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 private scrollToIndexTimeoutId: 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<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\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 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,\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 ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\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 (item.start < this.scrollOffset) {\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 size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\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 if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const getMeasurement = () => {\n const measurements = this.getMeasurements()\n const measurement =\n measurements[Math.max(0, Math.min(index, this.options.count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n return measurement\n }\n\n const measurement = getMeasurement()\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + 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 const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(getMeasurement())\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n 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","entry","contentRect","round","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","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","key","value","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","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","scrollToOffset","isDynamic","keys","scrollToIndex","getMeasurement","Error","getOffsetForIndexAndAlignment","approxEqual","a","b","abs","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } 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 const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\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 private scrollToIndexTimeoutId: 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<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\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 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 }\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, [flush = true]: [boolean?]) => {\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 if (flush) {\n this.notify()\n }\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.calculateRange(false),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n 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 ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\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 (item.start < this.scrollOffset) {\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 size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\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 index = Math.max(0, Math.min(index, this.options.count - 1))\n\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + 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 const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(\n notUndefined(this.getMeasurements()[index]),\n )\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n 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","entry","contentRect","round","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","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","key","value","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","flush","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","scrollToOffset","isDynamic","keys","scrollToIndex","notUndefined","getOffsetForIndexAndAlignment","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -268,8 +268,6 @@ var Virtualizer = function Virtualizer(_opts) {
268
268
  onIsScrollingChange(false);
269
269
  }, _this.options.scrollingDelay);
270
270
  }));
271
- } else if (!_this.isScrolling) {
272
- _this.calculateRange();
273
271
  }
274
272
  };
275
273
  this.getSize = function () {
@@ -305,7 +303,9 @@ var Virtualizer = function Virtualizer(_opts) {
305
303
  });
306
304
  this.calculateRange = utils.memo(function () {
307
305
  return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];
308
- }, function (measurements, outerSize, scrollOffset) {
306
+ }, function (measurements, outerSize, scrollOffset, _ref4) {
307
+ var _ref4$ = _ref4[0],
308
+ flush = _ref4$ === void 0 ? true : _ref4$;
309
309
  var range = calculateRange({
310
310
  measurements: measurements,
311
311
  outerSize: outerSize,
@@ -313,7 +313,9 @@ var Virtualizer = function Virtualizer(_opts) {
313
313
  });
314
314
  if (range.startIndex !== _this.range.startIndex || range.endIndex !== _this.range.endIndex) {
315
315
  _this.range = range;
316
- _this.notify();
316
+ if (flush) {
317
+ _this.notify();
318
+ }
317
319
  }
318
320
  return _this.range;
319
321
  }, {
@@ -323,7 +325,7 @@ var Virtualizer = function Virtualizer(_opts) {
323
325
  }
324
326
  });
325
327
  this.getIndexes = utils.memo(function () {
326
- return [_this.options.rangeExtractor, _this.range, _this.options.overscan, _this.options.count];
328
+ return [_this.options.rangeExtractor, _this.calculateRange(false), _this.options.overscan, _this.options.count];
327
329
  }, function (rangeExtractor, range, overscan, count) {
328
330
  return rangeExtractor(_rollupPluginBabelHelpers["extends"]({}, range, {
329
331
  overscan: overscan,
@@ -437,10 +439,10 @@ var Virtualizer = function Virtualizer(_opts) {
437
439
  return Math.max(Math.min(maxOffset, toOffset), 0);
438
440
  };
439
441
  this.scrollToOffset = function (toOffset, _temp) {
440
- var _ref4 = _temp === void 0 ? {} : _temp,
441
- _ref4$align = _ref4.align,
442
- align = _ref4$align === void 0 ? 'start' : _ref4$align,
443
- behavior = _ref4.behavior;
442
+ var _ref5 = _temp === void 0 ? {} : _temp,
443
+ _ref5$align = _ref5.align,
444
+ align = _ref5$align === void 0 ? 'start' : _ref5$align,
445
+ behavior = _ref5.behavior;
444
446
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
445
447
  if (isDynamic && behavior === 'smooth') {
446
448
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -454,10 +456,11 @@ var Virtualizer = function Virtualizer(_opts) {
454
456
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
455
457
  };
456
458
  this.scrollToIndex = function (index, _temp2) {
457
- var _ref5 = _temp2 === void 0 ? {} : _temp2,
458
- _ref5$align = _ref5.align,
459
- align = _ref5$align === void 0 ? 'auto' : _ref5$align,
460
- behavior = _ref5.behavior;
459
+ var _ref6 = _temp2 === void 0 ? {} : _temp2,
460
+ _ref6$align = _ref6.align,
461
+ align = _ref6$align === void 0 ? 'auto' : _ref6$align,
462
+ behavior = _ref6.behavior;
463
+ index = Math.max(0, Math.min(index, _this.options.count - 1));
461
464
  if (_this.scrollToIndexTimeoutId !== null) {
462
465
  clearTimeout(_this.scrollToIndexTimeoutId);
463
466
  _this.scrollToIndexTimeoutId = null;
@@ -467,15 +470,7 @@ var Virtualizer = function Virtualizer(_opts) {
467
470
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
468
471
  return;
469
472
  }
470
- var getMeasurement = function getMeasurement() {
471
- var measurements = _this.getMeasurements();
472
- var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
473
- if (!measurement) {
474
- throw new Error("VirtualItem not found for index = " + index);
475
- }
476
- return measurement;
477
- };
478
- var measurement = getMeasurement();
473
+ var measurement = utils.notUndefined(_this.getMeasurements()[index]);
479
474
  if (align === 'auto') {
480
475
  if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
481
476
  align = 'end';
@@ -495,16 +490,13 @@ var Virtualizer = function Virtualizer(_opts) {
495
490
  behavior: behavior
496
491
  };
497
492
  _this._scrollToOffset(toOffset, options);
498
- var approxEqual = function approxEqual(a, b) {
499
- return Math.abs(a - b) < 1;
500
- };
501
493
  if (isDynamic) {
502
494
  _this.scrollToIndexTimeoutId = setTimeout(function () {
503
495
  _this.scrollToIndexTimeoutId = null;
504
496
  var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
505
497
  if (elementInDOM) {
506
- var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
507
- if (!approxEqual(_toOffset, _this.scrollOffset)) {
498
+ var _toOffset = getOffsetForIndexAndAlignment(utils.notUndefined(_this.getMeasurements()[index]));
499
+ if (!utils.approxEqual(_toOffset, _this.scrollOffset)) {
508
500
  _this.scrollToIndex(index, {
509
501
  align: align,
510
502
  behavior: behavior
@@ -520,8 +512,8 @@ var Virtualizer = function Virtualizer(_opts) {
520
512
  }
521
513
  };
522
514
  this.scrollBy = function (delta, _temp3) {
523
- var _ref6 = _temp3 === void 0 ? {} : _temp3,
524
- behavior = _ref6.behavior;
515
+ var _ref7 = _temp3 === void 0 ? {} : _temp3,
516
+ behavior = _ref7.behavior;
525
517
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
526
518
  if (isDynamic && behavior === 'smooth') {
527
519
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -536,9 +528,9 @@ var Virtualizer = function Virtualizer(_opts) {
536
528
  var _this$getMeasurements;
537
529
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
538
530
  };
539
- this._scrollToOffset = function (offset, _ref7) {
540
- var adjustments = _ref7.adjustments,
541
- behavior = _ref7.behavior;
531
+ this._scrollToOffset = function (offset, _ref8) {
532
+ var adjustments = _ref8.adjustments,
533
+ behavior = _ref8.behavior;
542
534
  _this.options.scrollToFn(offset, {
543
535
  behavior: behavior,
544
536
  adjustments: adjustments
@@ -575,10 +567,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
575
567
  return 0;
576
568
  }
577
569
  };
578
- function calculateRange(_ref8) {
579
- var measurements = _ref8.measurements,
580
- outerSize = _ref8.outerSize,
581
- scrollOffset = _ref8.scrollOffset;
570
+ function calculateRange(_ref9) {
571
+ var measurements = _ref9.measurements,
572
+ outerSize = _ref9.outerSize,
573
+ scrollOffset = _ref9.scrollOffset;
582
574
  var count = measurements.length - 1;
583
575
  var getOffset = function getOffset(index) {
584
576
  return measurements[index].start;
@@ -594,7 +586,9 @@ function calculateRange(_ref8) {
594
586
  };
595
587
  }
596
588
 
589
+ exports.approxEqual = utils.approxEqual;
597
590
  exports.memo = utils.memo;
591
+ exports.notUndefined = utils.notUndefined;
598
592
  exports.Virtualizer = Virtualizer;
599
593
  exports.defaultKeyExtractor = defaultKeyExtractor;
600
594
  exports.defaultRangeExtractor = defaultRangeExtractor;