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

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.
@@ -241,7 +241,7 @@ var Virtualizer = function Virtualizer(_opts) {
241
241
  });
242
242
  _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
243
243
  _this.scrollRect = rect;
244
- _this.calculateRange();
244
+ _this.maybeNotify();
245
245
  }));
246
246
  _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
247
247
  _this.scrollAdjustments = 0;
@@ -252,20 +252,15 @@ var Virtualizer = function Virtualizer(_opts) {
252
252
  clearTimeout(_this.isScrollingTimeoutId);
253
253
  _this.isScrollingTimeoutId = null;
254
254
  }
255
- var onIsScrollingChange = function onIsScrollingChange(isScrolling) {
256
- if (_this.isScrolling !== isScrolling) {
257
- _this.isScrolling = isScrolling;
258
- _this.notify();
259
- }
260
- };
255
+ _this.isScrolling = true;
261
256
  _this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';
262
257
  _this.scrollOffset = offset;
263
- _this.calculateRange();
264
- onIsScrollingChange(true);
258
+ _this.maybeNotify();
265
259
  _this.isScrollingTimeoutId = setTimeout(function () {
266
260
  _this.isScrollingTimeoutId = null;
261
+ _this.isScrolling = false;
267
262
  _this.scrollDirection = null;
268
- onIsScrollingChange(false);
263
+ _this.maybeNotify();
269
264
  }, _this.options.scrollingDelay);
270
265
  }));
271
266
  }
@@ -303,29 +298,31 @@ var Virtualizer = function Virtualizer(_opts) {
303
298
  });
304
299
  this.calculateRange = utils.memo(function () {
305
300
  return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];
306
- }, function (measurements, outerSize, scrollOffset, _ref4) {
307
- var _ref4$ = _ref4[0],
308
- flush = _ref4$ === void 0 ? true : _ref4$;
309
- var range = calculateRange({
301
+ }, function (measurements, outerSize, scrollOffset) {
302
+ return _this.range = calculateRange({
310
303
  measurements: measurements,
311
304
  outerSize: outerSize,
312
305
  scrollOffset: scrollOffset
313
306
  });
314
- if (range.startIndex !== _this.range.startIndex || range.endIndex !== _this.range.endIndex) {
315
- _this.range = range;
316
- if (flush) {
317
- _this.notify();
318
- }
319
- }
320
- return _this.range;
321
307
  }, {
322
308
  key: process.env.NODE_ENV !== 'production' && 'calculateRange',
323
309
  debug: function debug() {
324
310
  return _this.options.debug;
325
311
  }
326
312
  });
313
+ this.maybeNotify = utils.memo(function () {
314
+ return [].concat(Object.values(_this.calculateRange()), [_this.isScrolling]);
315
+ }, function () {
316
+ _this.notify();
317
+ }, {
318
+ key: process.env.NODE_ENV !== 'production' && 'maybeNotify',
319
+ debug: function debug() {
320
+ return _this.options.debug;
321
+ },
322
+ initialDeps: [].concat(Object.values(this.range), [this.isScrolling])
323
+ });
327
324
  this.getIndexes = utils.memo(function () {
328
- return [_this.options.rangeExtractor, _this.calculateRange(false), _this.options.overscan, _this.options.count];
325
+ return [_this.options.rangeExtractor, _this.calculateRange(), _this.options.overscan, _this.options.count];
329
326
  }, function (rangeExtractor, range, overscan, count) {
330
327
  return rangeExtractor(_rollupPluginBabelHelpers["extends"]({}, range, {
331
328
  overscan: overscan,
@@ -439,10 +436,10 @@ var Virtualizer = function Virtualizer(_opts) {
439
436
  return Math.max(Math.min(maxOffset, toOffset), 0);
440
437
  };
441
438
  this.scrollToOffset = function (toOffset, _temp) {
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
+ var _ref4 = _temp === void 0 ? {} : _temp,
440
+ _ref4$align = _ref4.align,
441
+ align = _ref4$align === void 0 ? 'start' : _ref4$align,
442
+ behavior = _ref4.behavior;
446
443
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
447
444
  if (isDynamic && behavior === 'smooth') {
448
445
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -456,10 +453,11 @@ var Virtualizer = function Virtualizer(_opts) {
456
453
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
457
454
  };
458
455
  this.scrollToIndex = function (index, _temp2) {
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
+ var _ref5 = _temp2 === void 0 ? {} : _temp2,
457
+ _ref5$align = _ref5.align,
458
+ align = _ref5$align === void 0 ? 'auto' : _ref5$align,
459
+ behavior = _ref5.behavior;
460
+ index = Math.max(0, Math.min(index, _this.options.count - 1));
463
461
  if (_this.scrollToIndexTimeoutId !== null) {
464
462
  clearTimeout(_this.scrollToIndexTimeoutId);
465
463
  _this.scrollToIndexTimeoutId = null;
@@ -469,15 +467,7 @@ var Virtualizer = function Virtualizer(_opts) {
469
467
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
470
468
  return;
471
469
  }
472
- var getMeasurement = function getMeasurement() {
473
- var measurements = _this.getMeasurements();
474
- var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
475
- if (!measurement) {
476
- throw new Error("VirtualItem not found for index = " + index);
477
- }
478
- return measurement;
479
- };
480
- var measurement = getMeasurement();
470
+ var measurement = utils.notUndefined(_this.getMeasurements()[index]);
481
471
  if (align === 'auto') {
482
472
  if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
483
473
  align = 'end';
@@ -497,16 +487,13 @@ var Virtualizer = function Virtualizer(_opts) {
497
487
  behavior: behavior
498
488
  };
499
489
  _this._scrollToOffset(toOffset, options);
500
- var approxEqual = function approxEqual(a, b) {
501
- return Math.abs(a - b) < 1;
502
- };
503
490
  if (isDynamic) {
504
491
  _this.scrollToIndexTimeoutId = setTimeout(function () {
505
492
  _this.scrollToIndexTimeoutId = null;
506
493
  var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
507
494
  if (elementInDOM) {
508
- var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
509
- if (!approxEqual(_toOffset, _this.scrollOffset)) {
495
+ var _toOffset = getOffsetForIndexAndAlignment(utils.notUndefined(_this.getMeasurements()[index]));
496
+ if (!utils.approxEqual(_toOffset, _this.scrollOffset)) {
510
497
  _this.scrollToIndex(index, {
511
498
  align: align,
512
499
  behavior: behavior
@@ -522,8 +509,8 @@ var Virtualizer = function Virtualizer(_opts) {
522
509
  }
523
510
  };
524
511
  this.scrollBy = function (delta, _temp3) {
525
- var _ref7 = _temp3 === void 0 ? {} : _temp3,
526
- behavior = _ref7.behavior;
512
+ var _ref6 = _temp3 === void 0 ? {} : _temp3,
513
+ behavior = _ref6.behavior;
527
514
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
528
515
  if (isDynamic && behavior === 'smooth') {
529
516
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -538,9 +525,9 @@ var Virtualizer = function Virtualizer(_opts) {
538
525
  var _this$getMeasurements;
539
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;
540
527
  };
541
- this._scrollToOffset = function (offset, _ref8) {
542
- var adjustments = _ref8.adjustments,
543
- behavior = _ref8.behavior;
528
+ this._scrollToOffset = function (offset, _ref7) {
529
+ var adjustments = _ref7.adjustments,
530
+ behavior = _ref7.behavior;
544
531
  _this.options.scrollToFn(offset, {
545
532
  behavior: behavior,
546
533
  adjustments: adjustments
@@ -557,7 +544,7 @@ var Virtualizer = function Virtualizer(_opts) {
557
544
  this.measurementsCache.forEach(function (item) {
558
545
  _this.itemSizeCache[item.key] = item.size;
559
546
  });
560
- this.calculateRange();
547
+ this.maybeNotify();
561
548
  };
562
549
  var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {
563
550
  while (low <= high) {
@@ -577,10 +564,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
577
564
  return 0;
578
565
  }
579
566
  };
580
- function calculateRange(_ref9) {
581
- var measurements = _ref9.measurements,
582
- outerSize = _ref9.outerSize,
583
- scrollOffset = _ref9.scrollOffset;
567
+ function calculateRange(_ref8) {
568
+ var measurements = _ref8.measurements,
569
+ outerSize = _ref8.outerSize,
570
+ scrollOffset = _ref8.scrollOffset;
584
571
  var count = measurements.length - 1;
585
572
  var getOffset = function getOffset(index) {
586
573
  return measurements[index].start;
@@ -596,7 +583,9 @@ function calculateRange(_ref9) {
596
583
  };
597
584
  }
598
585
 
586
+ exports.approxEqual = utils.approxEqual;
599
587
  exports.memo = utils.memo;
588
+ exports.notUndefined = utils.notUndefined;
600
589
  exports.Virtualizer = Virtualizer;
601
590
  exports.defaultKeyExtractor = defaultKeyExtractor;
602
591
  exports.defaultRangeExtractor = defaultRangeExtractor;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype 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","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","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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"}
1
+ {"version":3,"file":"index.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.maybeNotify()\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.maybeNotify()\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 this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\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) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\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","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","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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"}
@@ -9,8 +9,8 @@
9
9
  * @license MIT
10
10
  */
11
11
  import { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.mjs';
12
- import { memo } from './utils.mjs';
13
- export { memo } from './utils.mjs';
12
+ import { memo, notUndefined, approxEqual } from './utils.mjs';
13
+ export { approxEqual, memo, notUndefined } from './utils.mjs';
14
14
 
15
15
  //
16
16
 
@@ -238,7 +238,7 @@ var Virtualizer = function Virtualizer(_opts) {
238
238
  });
239
239
  _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {
240
240
  _this.scrollRect = rect;
241
- _this.calculateRange();
241
+ _this.maybeNotify();
242
242
  }));
243
243
  _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {
244
244
  _this.scrollAdjustments = 0;
@@ -249,20 +249,15 @@ var Virtualizer = function Virtualizer(_opts) {
249
249
  clearTimeout(_this.isScrollingTimeoutId);
250
250
  _this.isScrollingTimeoutId = null;
251
251
  }
252
- var onIsScrollingChange = function onIsScrollingChange(isScrolling) {
253
- if (_this.isScrolling !== isScrolling) {
254
- _this.isScrolling = isScrolling;
255
- _this.notify();
256
- }
257
- };
252
+ _this.isScrolling = true;
258
253
  _this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';
259
254
  _this.scrollOffset = offset;
260
- _this.calculateRange();
261
- onIsScrollingChange(true);
255
+ _this.maybeNotify();
262
256
  _this.isScrollingTimeoutId = setTimeout(function () {
263
257
  _this.isScrollingTimeoutId = null;
258
+ _this.isScrolling = false;
264
259
  _this.scrollDirection = null;
265
- onIsScrollingChange(false);
260
+ _this.maybeNotify();
266
261
  }, _this.options.scrollingDelay);
267
262
  }));
268
263
  }
@@ -300,29 +295,31 @@ var Virtualizer = function Virtualizer(_opts) {
300
295
  });
301
296
  this.calculateRange = memo(function () {
302
297
  return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];
303
- }, function (measurements, outerSize, scrollOffset, _ref4) {
304
- var _ref4$ = _ref4[0],
305
- flush = _ref4$ === void 0 ? true : _ref4$;
306
- var range = calculateRange({
298
+ }, function (measurements, outerSize, scrollOffset) {
299
+ return _this.range = calculateRange({
307
300
  measurements: measurements,
308
301
  outerSize: outerSize,
309
302
  scrollOffset: scrollOffset
310
303
  });
311
- if (range.startIndex !== _this.range.startIndex || range.endIndex !== _this.range.endIndex) {
312
- _this.range = range;
313
- if (flush) {
314
- _this.notify();
315
- }
316
- }
317
- return _this.range;
318
304
  }, {
319
305
  key: process.env.NODE_ENV !== 'production' && 'calculateRange',
320
306
  debug: function debug() {
321
307
  return _this.options.debug;
322
308
  }
323
309
  });
310
+ this.maybeNotify = memo(function () {
311
+ return [].concat(Object.values(_this.calculateRange()), [_this.isScrolling]);
312
+ }, function () {
313
+ _this.notify();
314
+ }, {
315
+ key: process.env.NODE_ENV !== 'production' && 'maybeNotify',
316
+ debug: function debug() {
317
+ return _this.options.debug;
318
+ },
319
+ initialDeps: [].concat(Object.values(this.range), [this.isScrolling])
320
+ });
324
321
  this.getIndexes = memo(function () {
325
- return [_this.options.rangeExtractor, _this.calculateRange(false), _this.options.overscan, _this.options.count];
322
+ return [_this.options.rangeExtractor, _this.calculateRange(), _this.options.overscan, _this.options.count];
326
323
  }, function (rangeExtractor, range, overscan, count) {
327
324
  return rangeExtractor(_extends({}, range, {
328
325
  overscan: overscan,
@@ -436,10 +433,10 @@ var Virtualizer = function Virtualizer(_opts) {
436
433
  return Math.max(Math.min(maxOffset, toOffset), 0);
437
434
  };
438
435
  this.scrollToOffset = function (toOffset, _temp) {
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
+ var _ref4 = _temp === void 0 ? {} : _temp,
437
+ _ref4$align = _ref4.align,
438
+ align = _ref4$align === void 0 ? 'start' : _ref4$align,
439
+ behavior = _ref4.behavior;
443
440
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
444
441
  if (isDynamic && behavior === 'smooth') {
445
442
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -453,10 +450,11 @@ var Virtualizer = function Virtualizer(_opts) {
453
450
  _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), options);
454
451
  };
455
452
  this.scrollToIndex = function (index, _temp2) {
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
+ var _ref5 = _temp2 === void 0 ? {} : _temp2,
454
+ _ref5$align = _ref5.align,
455
+ align = _ref5$align === void 0 ? 'auto' : _ref5$align,
456
+ behavior = _ref5.behavior;
457
+ index = Math.max(0, Math.min(index, _this.options.count - 1));
460
458
  if (_this.scrollToIndexTimeoutId !== null) {
461
459
  clearTimeout(_this.scrollToIndexTimeoutId);
462
460
  _this.scrollToIndexTimeoutId = null;
@@ -466,15 +464,7 @@ var Virtualizer = function Virtualizer(_opts) {
466
464
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
467
465
  return;
468
466
  }
469
- var getMeasurement = function getMeasurement() {
470
- var measurements = _this.getMeasurements();
471
- var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
472
- if (!measurement) {
473
- throw new Error("VirtualItem not found for index = " + index);
474
- }
475
- return measurement;
476
- };
477
- var measurement = getMeasurement();
467
+ var measurement = notUndefined(_this.getMeasurements()[index]);
478
468
  if (align === 'auto') {
479
469
  if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
480
470
  align = 'end';
@@ -494,15 +484,12 @@ var Virtualizer = function Virtualizer(_opts) {
494
484
  behavior: behavior
495
485
  };
496
486
  _this._scrollToOffset(toOffset, options);
497
- var approxEqual = function approxEqual(a, b) {
498
- return Math.abs(a - b) < 1;
499
- };
500
487
  if (isDynamic) {
501
488
  _this.scrollToIndexTimeoutId = setTimeout(function () {
502
489
  _this.scrollToIndexTimeoutId = null;
503
490
  var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
504
491
  if (elementInDOM) {
505
- var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
492
+ var _toOffset = getOffsetForIndexAndAlignment(notUndefined(_this.getMeasurements()[index]));
506
493
  if (!approxEqual(_toOffset, _this.scrollOffset)) {
507
494
  _this.scrollToIndex(index, {
508
495
  align: align,
@@ -519,8 +506,8 @@ var Virtualizer = function Virtualizer(_opts) {
519
506
  }
520
507
  };
521
508
  this.scrollBy = function (delta, _temp3) {
522
- var _ref7 = _temp3 === void 0 ? {} : _temp3,
523
- behavior = _ref7.behavior;
509
+ var _ref6 = _temp3 === void 0 ? {} : _temp3,
510
+ behavior = _ref6.behavior;
524
511
  var isDynamic = Object.keys(_this.measureElementCache).length > 0;
525
512
  if (isDynamic && behavior === 'smooth') {
526
513
  console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
@@ -535,9 +522,9 @@ var Virtualizer = function Virtualizer(_opts) {
535
522
  var _this$getMeasurements;
536
523
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
537
524
  };
538
- this._scrollToOffset = function (offset, _ref8) {
539
- var adjustments = _ref8.adjustments,
540
- behavior = _ref8.behavior;
525
+ this._scrollToOffset = function (offset, _ref7) {
526
+ var adjustments = _ref7.adjustments,
527
+ behavior = _ref7.behavior;
541
528
  _this.options.scrollToFn(offset, {
542
529
  behavior: behavior,
543
530
  adjustments: adjustments
@@ -554,7 +541,7 @@ var Virtualizer = function Virtualizer(_opts) {
554
541
  this.measurementsCache.forEach(function (item) {
555
542
  _this.itemSizeCache[item.key] = item.size;
556
543
  });
557
- this.calculateRange();
544
+ this.maybeNotify();
558
545
  };
559
546
  var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {
560
547
  while (low <= high) {
@@ -574,10 +561,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
574
561
  return 0;
575
562
  }
576
563
  };
577
- function calculateRange(_ref9) {
578
- var measurements = _ref9.measurements,
579
- outerSize = _ref9.outerSize,
580
- scrollOffset = _ref9.scrollOffset;
564
+ function calculateRange(_ref8) {
565
+ var measurements = _ref8.measurements,
566
+ outerSize = _ref8.outerSize,
567
+ scrollOffset = _ref8.scrollOffset;
581
568
  var count = measurements.length - 1;
582
569
  var getOffset = function getOffset(index) {
583
570
  return measurements[index].start;