@tanstack/virtual-core 3.0.0-beta.39 → 3.0.0-beta.41

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;
@@ -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,
@@ -341,7 +343,7 @@ var Virtualizer = function Virtualizer(_opts) {
341
343
  }
342
344
  return parseInt(indexStr, 10);
343
345
  };
344
- this._measureElement = function (node, _sync) {
346
+ this._measureElement = function (node, sync) {
345
347
  var _this$itemSizeCache$i;
346
348
  var index = _this.indexFromElement(node);
347
349
  var item = _this.measurementsCache[index];
@@ -351,18 +353,23 @@ var Virtualizer = function Virtualizer(_opts) {
351
353
  var prevNode = _this.measureElementCache[item.key];
352
354
  var ro = _this.getResizeObserver();
353
355
  if (!node.isConnected) {
354
- if (prevNode) {
355
- ro == null ? void 0 : ro.unobserve(prevNode);
356
+ ro == null ? void 0 : ro.unobserve(node);
357
+ if (node === prevNode) {
356
358
  delete _this.measureElementCache[item.key];
357
359
  }
358
360
  return;
359
361
  }
360
- if (!prevNode || prevNode !== node) {
362
+ if (prevNode !== node) {
361
363
  if (prevNode) {
362
364
  ro == null ? void 0 : ro.unobserve(prevNode);
363
365
  }
364
- _this.measureElementCache[item.key] = node;
365
366
  ro == null ? void 0 : ro.observe(node);
367
+ _this.measureElementCache[item.key] = node;
368
+ } else {
369
+ if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {
370
+ prevNode.__virtualizerSkipFirstNotSync = true;
371
+ return;
372
+ }
366
373
  }
367
374
  var measuredItemSize = _this.options.measureElement(node, _this);
368
375
  var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
@@ -429,10 +436,10 @@ var Virtualizer = function Virtualizer(_opts) {
429
436
  return Math.max(Math.min(maxOffset, toOffset), 0);
430
437
  };
431
438
  this.scrollToOffset = function (toOffset, _temp) {
432
- var _ref4 = _temp === void 0 ? {} : _temp,
433
- _ref4$align = _ref4.align,
434
- align = _ref4$align === void 0 ? 'start' : _ref4$align,
435
- 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;
436
443
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
437
444
  if (isDynamic && behavior === 'smooth') {
438
445
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -446,10 +453,10 @@ var Virtualizer = function Virtualizer(_opts) {
446
453
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
447
454
  };
448
455
  this.scrollToIndex = function (index, _temp2) {
449
- var _ref5 = _temp2 === void 0 ? {} : _temp2,
450
- _ref5$align = _ref5.align,
451
- align = _ref5$align === void 0 ? 'auto' : _ref5$align,
452
- 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;
453
460
  if (_this.scrollToIndexTimeoutId !== null) {
454
461
  clearTimeout(_this.scrollToIndexTimeoutId);
455
462
  _this.scrollToIndexTimeoutId = null;
@@ -512,8 +519,8 @@ var Virtualizer = function Virtualizer(_opts) {
512
519
  }
513
520
  };
514
521
  this.scrollBy = function (delta, _temp3) {
515
- var _ref6 = _temp3 === void 0 ? {} : _temp3,
516
- behavior = _ref6.behavior;
522
+ var _ref7 = _temp3 === void 0 ? {} : _temp3,
523
+ behavior = _ref7.behavior;
517
524
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
518
525
  if (isDynamic && behavior === 'smooth') {
519
526
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -528,9 +535,9 @@ var Virtualizer = function Virtualizer(_opts) {
528
535
  var _this$getMeasurements;
529
536
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
530
537
  };
531
- this._scrollToOffset = function (offset, _ref7) {
532
- var adjustments = _ref7.adjustments,
533
- behavior = _ref7.behavior;
538
+ this._scrollToOffset = function (offset, _ref8) {
539
+ var adjustments = _ref8.adjustments,
540
+ behavior = _ref8.behavior;
534
541
  _this.options.scrollToFn(offset, {
535
542
  behavior: behavior,
536
543
  adjustments: adjustments
@@ -567,10 +574,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
567
574
  return 0;
568
575
  }
569
576
  };
570
- function calculateRange(_ref8) {
571
- var measurements = _ref8.measurements,
572
- outerSize = _ref8.outerSize,
573
- scrollOffset = _ref8.scrollOffset;
577
+ function calculateRange(_ref9) {
578
+ var measurements = _ref9.measurements,
579
+ outerSize = _ref9.outerSize,
580
+ scrollOffset = _ref9.scrollOffset;
574
581
  var count = measurements.length - 1;
575
582
  var getOffset = function getOffset(index) {
576
583
  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<Key, TItemElement> = {}\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 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 (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","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","scrollToOffset","isDynamic","keys","sync","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 { 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 }\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 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","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","getMeasurement","Error","getOffsetForIndexAndAlignment","approxEqual","a","b","abs","elementInDOM","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,
@@ -344,7 +346,7 @@ var Virtualizer = function Virtualizer(_opts) {
344
346
  }
345
347
  return parseInt(indexStr, 10);
346
348
  };
347
- this._measureElement = function (node, _sync) {
349
+ this._measureElement = function (node, sync) {
348
350
  var _this$itemSizeCache$i;
349
351
  var index = _this.indexFromElement(node);
350
352
  var item = _this.measurementsCache[index];
@@ -354,18 +356,23 @@ var Virtualizer = function Virtualizer(_opts) {
354
356
  var prevNode = _this.measureElementCache[item.key];
355
357
  var ro = _this.getResizeObserver();
356
358
  if (!node.isConnected) {
357
- if (prevNode) {
358
- ro == null ? void 0 : ro.unobserve(prevNode);
359
+ ro == null ? void 0 : ro.unobserve(node);
360
+ if (node === prevNode) {
359
361
  delete _this.measureElementCache[item.key];
360
362
  }
361
363
  return;
362
364
  }
363
- if (!prevNode || prevNode !== node) {
365
+ if (prevNode !== node) {
364
366
  if (prevNode) {
365
367
  ro == null ? void 0 : ro.unobserve(prevNode);
366
368
  }
367
- _this.measureElementCache[item.key] = node;
368
369
  ro == null ? void 0 : ro.observe(node);
370
+ _this.measureElementCache[item.key] = node;
371
+ } else {
372
+ if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {
373
+ prevNode.__virtualizerSkipFirstNotSync = true;
374
+ return;
375
+ }
369
376
  }
370
377
  var measuredItemSize = _this.options.measureElement(node, _this);
371
378
  var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
@@ -432,10 +439,10 @@ var Virtualizer = function Virtualizer(_opts) {
432
439
  return Math.max(Math.min(maxOffset, toOffset), 0);
433
440
  };
434
441
  this.scrollToOffset = function (toOffset, _temp) {
435
- var _ref4 = _temp === void 0 ? {} : _temp,
436
- _ref4$align = _ref4.align,
437
- align = _ref4$align === void 0 ? 'start' : _ref4$align,
438
- 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;
439
446
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
440
447
  if (isDynamic && behavior === 'smooth') {
441
448
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -449,10 +456,10 @@ var Virtualizer = function Virtualizer(_opts) {
449
456
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
450
457
  };
451
458
  this.scrollToIndex = function (index, _temp2) {
452
- var _ref5 = _temp2 === void 0 ? {} : _temp2,
453
- _ref5$align = _ref5.align,
454
- align = _ref5$align === void 0 ? 'auto' : _ref5$align,
455
- 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;
456
463
  if (_this.scrollToIndexTimeoutId !== null) {
457
464
  clearTimeout(_this.scrollToIndexTimeoutId);
458
465
  _this.scrollToIndexTimeoutId = null;
@@ -515,8 +522,8 @@ var Virtualizer = function Virtualizer(_opts) {
515
522
  }
516
523
  };
517
524
  this.scrollBy = function (delta, _temp3) {
518
- var _ref6 = _temp3 === void 0 ? {} : _temp3,
519
- behavior = _ref6.behavior;
525
+ var _ref7 = _temp3 === void 0 ? {} : _temp3,
526
+ behavior = _ref7.behavior;
520
527
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
521
528
  if (isDynamic && behavior === 'smooth') {
522
529
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -531,9 +538,9 @@ var Virtualizer = function Virtualizer(_opts) {
531
538
  var _this$getMeasurements;
532
539
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
533
540
  };
534
- this._scrollToOffset = function (offset, _ref7) {
535
- var adjustments = _ref7.adjustments,
536
- behavior = _ref7.behavior;
541
+ this._scrollToOffset = function (offset, _ref8) {
542
+ var adjustments = _ref8.adjustments,
543
+ behavior = _ref8.behavior;
537
544
  _this.options.scrollToFn(offset, {
538
545
  behavior: behavior,
539
546
  adjustments: adjustments
@@ -570,10 +577,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
570
577
  return 0;
571
578
  }
572
579
  };
573
- function calculateRange(_ref8) {
574
- var measurements = _ref8.measurements,
575
- outerSize = _ref8.outerSize,
576
- scrollOffset = _ref8.scrollOffset;
580
+ function calculateRange(_ref9) {
581
+ var measurements = _ref9.measurements,
582
+ outerSize = _ref9.outerSize,
583
+ scrollOffset = _ref9.scrollOffset;
577
584
  var count = measurements.length - 1;
578
585
  var getOffset = function getOffset(index) {
579
586
  return measurements[index].start;