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

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.
@@ -45,11 +45,21 @@ var memoRectCallback = function memoRectCallback(instance, cb) {
45
45
  };
46
46
  var observeElementRect = function observeElementRect(instance, cb) {
47
47
  var observer = new ResizeObserver(function (entries) {
48
- var _entries$, _entries$2;
49
- cb({
50
- width: (_entries$ = entries[0]) == null ? void 0 : _entries$.contentRect.width,
51
- height: (_entries$2 = entries[0]) == null ? void 0 : _entries$2.contentRect.height
52
- });
48
+ var entry = entries[0];
49
+ if (entry) {
50
+ var _entry$contentRect = entry.contentRect,
51
+ width = _entry$contentRect.width,
52
+ height = _entry$contentRect.height;
53
+ cb({
54
+ width: Math.round(width),
55
+ height: Math.round(height)
56
+ });
57
+ } else {
58
+ cb({
59
+ width: 0,
60
+ height: 0
61
+ });
62
+ }
53
63
  });
54
64
  if (!instance.scrollElement) {
55
65
  return;
@@ -144,13 +154,13 @@ var Virtualizer = function Virtualizer(_opts) {
144
154
  this.scrollElement = null;
145
155
  this.isScrolling = false;
146
156
  this.isScrollingTimeoutId = null;
157
+ this.scrollToIndexTimeoutId = null;
147
158
  this.measurementsCache = [];
148
159
  this.itemSizeCache = {};
149
160
  this.pendingMeasuredCacheIndexes = [];
150
161
  this.scrollDirection = null;
151
162
  this.scrollAdjustments = 0;
152
163
  this.measureElementCache = {};
153
- this.pendingScrollToIndexCallback = null;
154
164
  this.getResizeObserver = function () {
155
165
  var _ro = null;
156
166
  return function () {
@@ -221,7 +231,6 @@ var Virtualizer = function Virtualizer(_opts) {
221
231
  };
222
232
  };
223
233
  this._willUpdate = function () {
224
- _this.pendingScrollToIndexCallback == null ? void 0 : _this.pendingScrollToIndexCallback();
225
234
  var scrollElement = _this.options.getScrollElement();
226
235
  if (_this.scrollElement !== scrollElement) {
227
236
  _this.cleanup();
@@ -363,7 +372,7 @@ var Virtualizer = function Virtualizer(_opts) {
363
372
  var delta = measuredItemSize - itemSize;
364
373
  if (delta !== 0) {
365
374
  var _extends2;
366
- if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
375
+ if (item.start < _this.scrollOffset) {
367
376
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
368
377
  console.info('correction', delta);
369
378
  }
@@ -425,6 +434,11 @@ var Virtualizer = function Virtualizer(_opts) {
425
434
  _ref4$align = _ref4.align,
426
435
  align = _ref4$align === void 0 ? 'start' : _ref4$align,
427
436
  behavior = _ref4.behavior;
437
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
438
+ if (isDynamic && behavior === 'smooth') {
439
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
440
+ return;
441
+ }
428
442
  var options = {
429
443
  adjustments: undefined,
430
444
  behavior: behavior,
@@ -437,19 +451,28 @@ var Virtualizer = function Virtualizer(_opts) {
437
451
  _ref5$align = _ref5.align,
438
452
  align = _ref5$align === void 0 ? 'auto' : _ref5$align,
439
453
  behavior = _ref5.behavior;
440
- _this.pendingScrollToIndexCallback = null;
441
- var offset = _this.scrollOffset;
442
- var size = _this.getSize();
443
- var count = _this.options.count;
444
- var measurements = _this.getMeasurements();
445
- var measurement = measurements[Math.max(0, Math.min(index, count - 1))];
446
- if (!measurement) {
447
- throw new Error("VirtualItem not found for index = " + index);
454
+ if (_this.scrollToIndexTimeoutId !== null) {
455
+ clearTimeout(_this.scrollToIndexTimeoutId);
456
+ _this.scrollToIndexTimeoutId = null;
457
+ }
458
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
459
+ if (isDynamic && behavior === 'smooth') {
460
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
461
+ return;
448
462
  }
463
+ var getMeasurement = function getMeasurement() {
464
+ var measurements = _this.getMeasurements();
465
+ var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
466
+ if (!measurement) {
467
+ throw new Error("VirtualItem not found for index = " + index);
468
+ }
469
+ return measurement;
470
+ };
471
+ var measurement = getMeasurement();
449
472
  if (align === 'auto') {
450
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
473
+ if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
451
474
  align = 'end';
452
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
475
+ } else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {
453
476
  align = 'start';
454
477
  } else {
455
478
  return;
@@ -457,40 +480,61 @@ var Virtualizer = function Virtualizer(_opts) {
457
480
  }
458
481
  var getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(measurement) {
459
482
  var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
460
- return _this.getOffsetForAlignment(toOffset, align);
483
+ var sizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight';
484
+ var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0;
485
+ var maxOffset = scrollSize - _this.getSize();
486
+ return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align));
461
487
  };
462
488
  var toOffset = getOffsetForIndexAndAlignment(measurement);
463
- if (Math.round(toOffset) === Math.round(offset)) {
464
- return;
465
- }
466
489
  var options = {
467
490
  adjustments: undefined,
468
491
  behavior: behavior
469
492
  };
470
493
  _this._scrollToOffset(toOffset, options);
471
- var isDynamic = Object.keys(_this.measureElementCache).length > 0;
494
+ var approxEqual = function approxEqual(a, b) {
495
+ return Math.abs(a - b) < 1;
496
+ };
472
497
  if (isDynamic) {
473
- _this.pendingScrollToIndexCallback = function () {
474
- _this.scrollToIndex(index, {
475
- align: align,
476
- behavior: behavior
477
- });
478
- };
498
+ _this.scrollToIndexTimeoutId = setTimeout(function () {
499
+ _this.scrollToIndexTimeoutId = null;
500
+ var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
501
+ if (elementInDOM) {
502
+ var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
503
+ if (!approxEqual(_toOffset, _this.scrollOffset)) {
504
+ _this.scrollToIndex(index, {
505
+ align: align,
506
+ behavior: behavior
507
+ });
508
+ }
509
+ } else {
510
+ _this.scrollToIndex(index, {
511
+ align: align,
512
+ behavior: behavior
513
+ });
514
+ }
515
+ });
479
516
  }
480
517
  };
481
- this.scrollBy = function (adjustments, options) {
482
- _this._scrollToOffset(_this.scrollOffset, {
483
- adjustments: adjustments,
484
- behavior: options == null ? void 0 : options.behavior
518
+ this.scrollBy = function (delta, _temp3) {
519
+ var _ref6 = _temp3 === void 0 ? {} : _temp3,
520
+ behavior = _ref6.behavior;
521
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
522
+ if (isDynamic && behavior === 'smooth') {
523
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
524
+ return;
525
+ }
526
+ _this._scrollToOffset(_this.scrollOffset + delta, {
527
+ adjustments: undefined,
528
+ behavior: behavior
485
529
  });
486
530
  };
487
531
  this.getTotalSize = function () {
488
532
  var _this$getMeasurements;
489
533
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
490
534
  };
491
- this._scrollToOffset = function (offset, _ref6) {
492
- var adjustments = _ref6.adjustments,
493
- behavior = _ref6.behavior;
535
+ this._scrollToOffset = function (offset, _ref7) {
536
+ var adjustments = _ref7.adjustments,
537
+ behavior = _ref7.behavior;
494
538
  _this.options.scrollToFn(offset, {
495
539
  behavior: behavior,
496
540
  adjustments: adjustments
@@ -527,10 +571,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
527
571
  return 0;
528
572
  }
529
573
  };
530
- function calculateRange(_ref7) {
531
- var measurements = _ref7.measurements,
532
- outerSize = _ref7.outerSize,
533
- scrollOffset = _ref7.scrollOffset;
574
+ function calculateRange(_ref8) {
575
+ var measurements = _ref8.measurements,
576
+ outerSize = _ref8.outerSize,
577
+ scrollOffset = _ref8.scrollOffset;
534
578
  var count = measurements.length - 1;
535
579
  var getOffset = function getOffset(index) {
536
580
  return measurements[index].start;
@@ -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 cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (Math.round(toOffset) === Math.round(offset)) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","_extends","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
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<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: 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 offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const 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 const sizeProp = this.options.horizontal ? 'scrollWidth' : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[sizeProp]\n : this.scrollElement[sizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.min(maxOffset, 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","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","isDynamic","keys","sync","scrollToIndex","getMeasurement","Error","getOffsetForIndexAndAlignment","sizeProp","scrollSize","document","documentElement","maxOffset","approxEqual","a","b","abs","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -42,11 +42,21 @@ var memoRectCallback = function memoRectCallback(instance, cb) {
42
42
  };
43
43
  var observeElementRect = function observeElementRect(instance, cb) {
44
44
  var observer = new ResizeObserver(function (entries) {
45
- var _entries$, _entries$2;
46
- cb({
47
- width: (_entries$ = entries[0]) == null ? void 0 : _entries$.contentRect.width,
48
- height: (_entries$2 = entries[0]) == null ? void 0 : _entries$2.contentRect.height
49
- });
45
+ var entry = entries[0];
46
+ if (entry) {
47
+ var _entry$contentRect = entry.contentRect,
48
+ width = _entry$contentRect.width,
49
+ height = _entry$contentRect.height;
50
+ cb({
51
+ width: Math.round(width),
52
+ height: Math.round(height)
53
+ });
54
+ } else {
55
+ cb({
56
+ width: 0,
57
+ height: 0
58
+ });
59
+ }
50
60
  });
51
61
  if (!instance.scrollElement) {
52
62
  return;
@@ -141,13 +151,13 @@ var Virtualizer = function Virtualizer(_opts) {
141
151
  this.scrollElement = null;
142
152
  this.isScrolling = false;
143
153
  this.isScrollingTimeoutId = null;
154
+ this.scrollToIndexTimeoutId = null;
144
155
  this.measurementsCache = [];
145
156
  this.itemSizeCache = {};
146
157
  this.pendingMeasuredCacheIndexes = [];
147
158
  this.scrollDirection = null;
148
159
  this.scrollAdjustments = 0;
149
160
  this.measureElementCache = {};
150
- this.pendingScrollToIndexCallback = null;
151
161
  this.getResizeObserver = function () {
152
162
  var _ro = null;
153
163
  return function () {
@@ -218,7 +228,6 @@ var Virtualizer = function Virtualizer(_opts) {
218
228
  };
219
229
  };
220
230
  this._willUpdate = function () {
221
- _this.pendingScrollToIndexCallback == null ? void 0 : _this.pendingScrollToIndexCallback();
222
231
  var scrollElement = _this.options.getScrollElement();
223
232
  if (_this.scrollElement !== scrollElement) {
224
233
  _this.cleanup();
@@ -360,7 +369,7 @@ var Virtualizer = function Virtualizer(_opts) {
360
369
  var delta = measuredItemSize - itemSize;
361
370
  if (delta !== 0) {
362
371
  var _extends2;
363
- if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
372
+ if (item.start < _this.scrollOffset) {
364
373
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
365
374
  console.info('correction', delta);
366
375
  }
@@ -422,6 +431,11 @@ var Virtualizer = function Virtualizer(_opts) {
422
431
  _ref4$align = _ref4.align,
423
432
  align = _ref4$align === void 0 ? 'start' : _ref4$align,
424
433
  behavior = _ref4.behavior;
434
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
435
+ if (isDynamic && behavior === 'smooth') {
436
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
437
+ return;
438
+ }
425
439
  var options = {
426
440
  adjustments: undefined,
427
441
  behavior: behavior,
@@ -434,19 +448,28 @@ var Virtualizer = function Virtualizer(_opts) {
434
448
  _ref5$align = _ref5.align,
435
449
  align = _ref5$align === void 0 ? 'auto' : _ref5$align,
436
450
  behavior = _ref5.behavior;
437
- _this.pendingScrollToIndexCallback = null;
438
- var offset = _this.scrollOffset;
439
- var size = _this.getSize();
440
- var count = _this.options.count;
441
- var measurements = _this.getMeasurements();
442
- var measurement = measurements[Math.max(0, Math.min(index, count - 1))];
443
- if (!measurement) {
444
- throw new Error("VirtualItem not found for index = " + index);
451
+ if (_this.scrollToIndexTimeoutId !== null) {
452
+ clearTimeout(_this.scrollToIndexTimeoutId);
453
+ _this.scrollToIndexTimeoutId = null;
454
+ }
455
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
456
+ if (isDynamic && behavior === 'smooth') {
457
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
458
+ return;
445
459
  }
460
+ var getMeasurement = function getMeasurement() {
461
+ var measurements = _this.getMeasurements();
462
+ var measurement = measurements[Math.max(0, Math.min(index, _this.options.count - 1))];
463
+ if (!measurement) {
464
+ throw new Error("VirtualItem not found for index = " + index);
465
+ }
466
+ return measurement;
467
+ };
468
+ var measurement = getMeasurement();
446
469
  if (align === 'auto') {
447
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
470
+ if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
448
471
  align = 'end';
449
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
472
+ } else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {
450
473
  align = 'start';
451
474
  } else {
452
475
  return;
@@ -454,40 +477,61 @@ var Virtualizer = function Virtualizer(_opts) {
454
477
  }
455
478
  var getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(measurement) {
456
479
  var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
457
- return _this.getOffsetForAlignment(toOffset, align);
480
+ var sizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight';
481
+ var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0;
482
+ var maxOffset = scrollSize - _this.getSize();
483
+ return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align));
458
484
  };
459
485
  var toOffset = getOffsetForIndexAndAlignment(measurement);
460
- if (Math.round(toOffset) === Math.round(offset)) {
461
- return;
462
- }
463
486
  var options = {
464
487
  adjustments: undefined,
465
488
  behavior: behavior
466
489
  };
467
490
  _this._scrollToOffset(toOffset, options);
468
- var isDynamic = Object.keys(_this.measureElementCache).length > 0;
491
+ var approxEqual = function approxEqual(a, b) {
492
+ return Math.abs(a - b) < 1;
493
+ };
469
494
  if (isDynamic) {
470
- _this.pendingScrollToIndexCallback = function () {
471
- _this.scrollToIndex(index, {
472
- align: align,
473
- behavior: behavior
474
- });
475
- };
495
+ _this.scrollToIndexTimeoutId = setTimeout(function () {
496
+ _this.scrollToIndexTimeoutId = null;
497
+ var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
498
+ if (elementInDOM) {
499
+ var _toOffset = getOffsetForIndexAndAlignment(getMeasurement());
500
+ if (!approxEqual(_toOffset, _this.scrollOffset)) {
501
+ _this.scrollToIndex(index, {
502
+ align: align,
503
+ behavior: behavior
504
+ });
505
+ }
506
+ } else {
507
+ _this.scrollToIndex(index, {
508
+ align: align,
509
+ behavior: behavior
510
+ });
511
+ }
512
+ });
476
513
  }
477
514
  };
478
- this.scrollBy = function (adjustments, options) {
479
- _this._scrollToOffset(_this.scrollOffset, {
480
- adjustments: adjustments,
481
- behavior: options == null ? void 0 : options.behavior
515
+ this.scrollBy = function (delta, _temp3) {
516
+ var _ref6 = _temp3 === void 0 ? {} : _temp3,
517
+ behavior = _ref6.behavior;
518
+ var isDynamic = Object.keys(_this.measureElementCache).length > 0;
519
+ if (isDynamic && behavior === 'smooth') {
520
+ console.warn('The `smooth` scroll behavior is not supported with dynamic size.');
521
+ return;
522
+ }
523
+ _this._scrollToOffset(_this.scrollOffset + delta, {
524
+ adjustments: undefined,
525
+ behavior: behavior
482
526
  });
483
527
  };
484
528
  this.getTotalSize = function () {
485
529
  var _this$getMeasurements;
486
530
  return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;
487
531
  };
488
- this._scrollToOffset = function (offset, _ref6) {
489
- var adjustments = _ref6.adjustments,
490
- behavior = _ref6.behavior;
532
+ this._scrollToOffset = function (offset, _ref7) {
533
+ var adjustments = _ref7.adjustments,
534
+ behavior = _ref7.behavior;
491
535
  _this.options.scrollToFn(offset, {
492
536
  behavior: behavior,
493
537
  adjustments: adjustments
@@ -524,10 +568,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
524
568
  return 0;
525
569
  }
526
570
  };
527
- function calculateRange(_ref7) {
528
- var measurements = _ref7.measurements,
529
- outerSize = _ref7.outerSize,
530
- scrollOffset = _ref7.scrollOffset;
571
+ function calculateRange(_ref8) {
572
+ var measurements = _ref8.measurements,
573
+ outerSize = _ref8.outerSize,
574
+ scrollOffset = _ref8.scrollOffset;
531
575
  var count = measurements.length - 1;
532
576
  var getOffset = function getOffset(index) {
533
577
  return measurements[index].start;