@tanstack/virtual-core 3.0.0-beta.35 → 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.
@@ -75,6 +75,7 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
75
75
  scrollElement: TScrollElement | null;
76
76
  isScrolling: boolean;
77
77
  private isScrollingTimeoutId;
78
+ private scrollToIndexTimeoutId;
78
79
  measurementsCache: VirtualItem[];
79
80
  private itemSizeCache;
80
81
  private pendingMeasuredCacheIndexes;
@@ -83,7 +84,6 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
83
84
  scrollDirection: ScrollDirection | null;
84
85
  private scrollAdjustments;
85
86
  private measureElementCache;
86
- private pendingScrollToIndexCallback;
87
87
  private getResizeObserver;
88
88
  range: {
89
89
  startIndex: number;
@@ -109,9 +109,7 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
109
109
  getOffsetForAlignment: (toOffset: number, align: ScrollAlignment) => number;
110
110
  scrollToOffset: (toOffset: number, { align, behavior }?: ScrollToOffsetOptions) => void;
111
111
  scrollToIndex: (index: number, { align, behavior }?: ScrollToIndexOptions) => void;
112
- scrollBy: (adjustments: number, options?: {
113
- behavior: ScrollBehavior;
114
- }) => void;
112
+ scrollBy: (delta: number, { behavior }?: ScrollToOffsetOptions) => void;
115
113
  getTotalSize: () => number;
116
114
  private _scrollToOffset;
117
115
  measure: () => void;
@@ -151,13 +151,13 @@ var Virtualizer = function Virtualizer(_opts) {
151
151
  this.scrollElement = null;
152
152
  this.isScrolling = false;
153
153
  this.isScrollingTimeoutId = null;
154
+ this.scrollToIndexTimeoutId = null;
154
155
  this.measurementsCache = [];
155
156
  this.itemSizeCache = {};
156
157
  this.pendingMeasuredCacheIndexes = [];
157
158
  this.scrollDirection = null;
158
159
  this.scrollAdjustments = 0;
159
160
  this.measureElementCache = {};
160
- this.pendingScrollToIndexCallback = null;
161
161
  this.getResizeObserver = function () {
162
162
  var _ro = null;
163
163
  return function () {
@@ -228,7 +228,6 @@ var Virtualizer = function Virtualizer(_opts) {
228
228
  };
229
229
  };
230
230
  this._willUpdate = function () {
231
- _this.pendingScrollToIndexCallback == null ? void 0 : _this.pendingScrollToIndexCallback();
232
231
  var scrollElement = _this.options.getScrollElement();
233
232
  if (_this.scrollElement !== scrollElement) {
234
233
  _this.cleanup();
@@ -370,7 +369,7 @@ var Virtualizer = function Virtualizer(_opts) {
370
369
  var delta = measuredItemSize - itemSize;
371
370
  if (delta !== 0) {
372
371
  var _extends2;
373
- if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
372
+ if (item.start < _this.scrollOffset) {
374
373
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
375
374
  console.info('correction', delta);
376
375
  }
@@ -432,6 +431,11 @@ var Virtualizer = function Virtualizer(_opts) {
432
431
  _ref4$align = _ref4.align,
433
432
  align = _ref4$align === void 0 ? 'start' : _ref4$align,
434
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
+ }
435
439
  var options = {
436
440
  adjustments: undefined,
437
441
  behavior: behavior,
@@ -444,19 +448,28 @@ var Virtualizer = function Virtualizer(_opts) {
444
448
  _ref5$align = _ref5.align,
445
449
  align = _ref5$align === void 0 ? 'auto' : _ref5$align,
446
450
  behavior = _ref5.behavior;
447
- _this.pendingScrollToIndexCallback = null;
448
- var offset = _this.scrollOffset;
449
- var size = _this.getSize();
450
- var count = _this.options.count;
451
- var measurements = _this.getMeasurements();
452
- var measurement = measurements[Math.max(0, Math.min(index, count - 1))];
453
- if (!measurement) {
454
- 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;
455
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();
456
469
  if (align === 'auto') {
457
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
470
+ if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
458
471
  align = 'end';
459
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
472
+ } else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {
460
473
  align = 'start';
461
474
  } else {
462
475
  return;
@@ -464,40 +477,61 @@ var Virtualizer = function Virtualizer(_opts) {
464
477
  }
465
478
  var getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(measurement) {
466
479
  var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
467
- 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));
468
484
  };
469
485
  var toOffset = getOffsetForIndexAndAlignment(measurement);
470
- if (toOffset === offset) {
471
- return;
472
- }
473
486
  var options = {
474
487
  adjustments: undefined,
475
488
  behavior: behavior
476
489
  };
477
490
  _this._scrollToOffset(toOffset, options);
478
- var isDynamic = Object.keys(_this.measureElementCache).length > 0;
491
+ var approxEqual = function approxEqual(a, b) {
492
+ return Math.abs(a - b) < 1;
493
+ };
479
494
  if (isDynamic) {
480
- _this.pendingScrollToIndexCallback = function () {
481
- _this.scrollToIndex(index, {
482
- align: align,
483
- behavior: behavior
484
- });
485
- };
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
+ });
486
513
  }
487
514
  };
488
- this.scrollBy = function (adjustments, options) {
489
- _this._scrollToOffset(_this.scrollOffset, {
490
- adjustments: adjustments,
491
- 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
492
526
  });
493
527
  };
494
528
  this.getTotalSize = function () {
495
529
  var _this$getMeasurements;
496
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;
497
531
  };
498
- this._scrollToOffset = function (offset, _ref6) {
499
- var adjustments = _ref6.adjustments,
500
- behavior = _ref6.behavior;
532
+ this._scrollToOffset = function (offset, _ref7) {
533
+ var adjustments = _ref7.adjustments,
534
+ behavior = _ref7.behavior;
501
535
  _this.options.scrollToFn(offset, {
502
536
  behavior: behavior,
503
537
  adjustments: adjustments
@@ -534,10 +568,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
534
568
  return 0;
535
569
  }
536
570
  };
537
- function calculateRange(_ref7) {
538
- var measurements = _ref7.measurements,
539
- outerSize = _ref7.outerSize,
540
- scrollOffset = _ref7.scrollOffset;
571
+ function calculateRange(_ref8) {
572
+ var measurements = _ref8.measurements,
573
+ outerSize = _ref8.outerSize,
574
+ scrollOffset = _ref8.scrollOffset;
541
575
  var count = measurements.length - 1;
542
576
  var getOffset = function getOffset(index) {
543
577
  return measurements[index].start;
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n 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 (toOffset === 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","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","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;AAIA;;AAuCA;;IAEaA,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIC,KAAa,EAAA;AAAA,EAAA,OAAKA,KAAK,CAAA;AAAA,EAAA;IAE9CC,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAY,EAAK;AACrD,EAAA,IAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACH,KAAK,CAACI,UAAU,GAAGJ,KAAK,CAACK,QAAQ,EAAE,CAAC,CAAC,CAAA;AAC5D,EAAA,IAAMC,GAAG,GAAGJ,IAAI,CAACK,GAAG,CAACP,KAAK,CAACQ,QAAQ,GAAGR,KAAK,CAACK,QAAQ,EAAEL,KAAK,CAACS,KAAK,GAAG,CAAC,CAAC,CAAA;EAEtE,IAAMC,GAAG,GAAG,EAAE,CAAA;EAEd,KAAK,IAAIC,EAAC,GAAGV,KAAK,EAAEU,EAAC,IAAIL,GAAG,EAAEK,EAAC,EAAE,EAAE;AACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,EAAC,CAAC,CAAA;AACb,GAAA;AAEA,EAAA,OAAOD,GAAG,CAAA;AACZ,EAAC;AAED,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAgB,CACpBC,QAA+B,EAC/BC,EAAwB,EACrB;AACH,EAAA,IAAIC,IAAU,GAAG;IAAEC,MAAM,EAAE,CAAC,CAAC;AAAEC,IAAAA,KAAK,EAAE,CAAC,CAAA;GAAG,CAAA;EAE1C,OAAO,UAACC,IAAU,EAAK;IACrB,IACEL,QAAQ,CAACM,OAAO,CAACC,UAAU,GACvBF,IAAI,CAACD,KAAK,KAAKF,IAAI,CAACE,KAAK,GACzBC,IAAI,CAACF,MAAM,KAAKD,IAAI,CAACC,MAAM,EAC/B;MACAF,EAAE,CAACI,IAAI,CAAC,CAAA;AACV,KAAA;AAEAH,IAAAA,IAAI,GAAGG,IAAI,CAAA;GACZ,CAAA;AACH,CAAC,CAAA;AAEM,IAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,CAC7BR,QAA+B,EAC/BC,EAAwB,EACrB;AACH,EAAA,IAAMQ,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;AAC/C,IAAA,IAAMC,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,IAAIC,KAAK,EAAE;MACT,IAA0BA,kBAAAA,GAAAA,KAAK,CAACC,WAAW;AAAnCT,QAAAA,KAAK,sBAALA,KAAK;AAAED,QAAAA,MAAM,sBAANA,MAAM,CAAA;AACrBF,MAAAA,EAAE,CAAC;AACDG,QAAAA,KAAK,EAAEhB,IAAI,CAAC0B,KAAK,CAACV,KAAK,CAAC;AACxBD,QAAAA,MAAM,EAAEf,IAAI,CAAC0B,KAAK,CAACX,MAAM,CAAA;AAC3B,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM;AACLF,MAAAA,EAAE,CAAC;AAAEG,QAAAA,KAAK,EAAE,CAAC;AAAED,QAAAA,MAAM,EAAE,CAAA;AAAE,OAAC,CAAC,CAAA;AAC7B,KAAA;AACF,GAAC,CAAC,CAAA;AAEF,EAAA,IAAI,CAACH,QAAQ,CAACe,aAAa,EAAE;AAC3B,IAAA,OAAA;AACF,GAAA;AAEAd,EAAAA,EAAE,CAACD,QAAQ,CAACe,aAAa,CAACC,qBAAqB,EAAE,CAAC,CAAA;AAElDP,EAAAA,QAAQ,CAACQ,OAAO,CAACjB,QAAQ,CAACe,aAAa,CAAC,CAAA;AAExC,EAAA,OAAO,YAAM;AACXN,IAAAA,QAAQ,CAACS,SAAS,CAAClB,QAAQ,CAACe,aAAa,CAAC,CAAA;GAC3C,CAAA;AACH,EAAC;AAEM,IAAMI,iBAAiB,GAAG,SAApBA,iBAAiB,CAC5BnB,QAA+B,EAC/BC,EAAwB,EACrB;AACH,EAAA,IAAMmB,gBAAgB,GAAGrB,gBAAgB,CAACC,QAAQ,EAAEC,EAAE,CAAC,CAAA;EACvD,IAAMoB,QAAQ,GAAG,SAAXA,QAAQ,GAAA;AAAA,IAAA,OACZD,gBAAgB,CAAC;AACfhB,MAAAA,KAAK,EAAEJ,QAAQ,CAACe,aAAa,CAACO,UAAU;AACxCnB,MAAAA,MAAM,EAAEH,QAAQ,CAACe,aAAa,CAACQ,WAAAA;AACjC,KAAC,CAAC,CAAA;AAAA,GAAA,CAAA;AAEJ,EAAA,IAAI,CAACvB,QAAQ,CAACe,aAAa,EAAE;AAC3B,IAAA,OAAA;AACF,GAAA;AAEAM,EAAAA,QAAQ,EAAE,CAAA;EAEVrB,QAAQ,CAACe,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEH,QAAQ,EAAE;AAC1DI,IAAAA,OAAO,EAAE,KAAK;AACdC,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO,YAAM;IACX1B,QAAQ,CAACe,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEN,QAAQ,CAAC,CAAA;GAC/D,CAAA;AACH,EAAC;AAID,IAAMO,WAAW,GAAG;AAClBC,EAAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;AACpCC,EAAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAA;AAC/B,CAAU,CAAA;AAEV,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoB,CAAIC,IAAkB,EAAK;AACnD,EAAA,OAAO,UAAChC,QAA+B,EAAEC,EAA4B,EAAK;AACxE,IAAA,IAAI,CAACD,QAAQ,CAACe,aAAa,EAAE;AAC3B,MAAA,OAAA;AACF,KAAA;IAEA,IAAMkB,KAAK,GAAGL,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAClC,IAAME,KAAK,GAAGN,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,IAAA,IAAIG,KAAa,GAAGnC,QAAQ,CAACe,aAAa,CAACkB,KAAK,CAAC,CAAA;AACjD,IAAA,IAAIG,KAAa,GAAGpC,QAAQ,CAACe,aAAa,CAACmB,KAAK,CAAC,CAAA;AAEjD,IAAA,IAAMG,MAAM,GAAG,SAATA,MAAM,GAAS;AACnB,MAAA,IAAMC,MAAM,GACVtC,QAAQ,CAACe,aAAa,CAACf,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG0B,KAAK,GAAGC,KAAK,CAAC,CAAA;MAErEjC,EAAE,CAACqC,MAAM,CAAC,CAAA;KACX,CAAA;AAEDD,IAAAA,MAAM,EAAE,CAAA;AAER,IAAA,IAAME,QAAQ,GAAG,SAAXA,QAAQ,CAAIC,CAAQ,EAAK;AAC7B,MAAA,IAAMC,MAAM,GAAGD,CAAC,CAACE,aAAqC,CAAA;AACtD,MAAA,IAAMC,OAAO,GAAGF,MAAM,CAACR,KAAK,CAAC,CAAA;AAC7B,MAAA,IAAMW,OAAO,GAAGH,MAAM,CAACP,KAAK,CAAC,CAAA;AAE7B,MAAA,IAAIlC,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG4B,KAAK,GAAGQ,OAAO,GAAGP,KAAK,GAAGQ,OAAO,EAAE;AACnEP,QAAAA,MAAM,EAAE,CAAA;AACV,OAAA;AAEAF,MAAAA,KAAK,GAAGQ,OAAO,CAAA;AACfP,MAAAA,KAAK,GAAGQ,OAAO,CAAA;KAChB,CAAA;IAED5C,QAAQ,CAACe,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEe,QAAQ,EAAE;AAC1Dd,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE,IAAA;AACX,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,YAAM;MACX1B,QAAQ,CAACe,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEY,QAAQ,CAAC,CAAA;KAC/D,CAAA;GACF,CAAA;AACH,CAAC,CAAA;IAEYM,oBAAoB,GAAGd,oBAAoB,CAAC,SAAS,EAAC;IACtDe,mBAAmB,GAAGf,oBAAoB,CAAC,QAAQ,EAAC;AAE1D,IAAMgB,cAAc,GAAG,SAAjBA,cAAc,CACzBlB,OAAqB,EACrB7B,QAAwC,EACrC;AACH,EAAA,OAAOZ,IAAI,CAAC0B,KAAK,CACfe,OAAO,CAACb,qBAAqB,EAAE,CAC7BhB,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CACjD,CACF,CAAA;AACH,EAAC;AAEM,IAAMyC,YAAY,GAAG,SAAfA,YAAY,CACvBV,MAAc,EAKdtC,IAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,qBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,gBAAA,GAAA,IAAA,CAJDiD,WAAW;AAAXA,IAAAA,WAAW,iCAAG,CAAC,GAAA,gBAAA;AACfC,IAAAA,QAAQ,QAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGb,MAAM,GAAGW,WAAW,CAAA;EAErC,CAAAjD,qBAAAA,GAAAA,QAAQ,CAACe,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBqC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG4C,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAEM,IAAMG,aAAa,GAAG,SAAhBA,aAAa,CACxBf,MAAc,EAKdtC,KAAAA,EAAAA,QAA6B,EAC1B;AAAA,EAAA,IAAA,sBAAA,EAAA,sBAAA,CAAA;AAAA,EAAA,IAAA,iBAAA,GAAA,KAAA,CAJDiD,WAAW;AAAXA,IAAAA,WAAW,kCAAG,CAAC,GAAA,iBAAA;AACfC,IAAAA,QAAQ,SAARA,QAAQ,CAAA;AAIV,EAAA,IAAMC,QAAQ,GAAGb,MAAM,GAAGW,WAAW,CAAA;EAErC,CAAAjD,sBAAAA,GAAAA,QAAQ,CAACe,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBqC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BpD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG4C,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;AACJ,EAAC;AAiDD,IAAaI,WAAW,GAwCtB,SAAYC,WAAAA,CAAAA,KAAsD,EAAE;AAAA,EAAA,IAAA,KAAA,GAAA,IAAA,CAAA;EAAA,IApC5DC,CAAAA,MAAM,GAA4B,EAAE,CAAA;EAAA,IAE5CzC,CAAAA,aAAa,GAA0B,IAAI,CAAA;EAAA,IAC3C0C,CAAAA,WAAW,GAAY,KAAK,CAAA;EAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;EAAA,IACzEC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;EAAA,IAC7BC,CAAAA,aAAa,GAAwB,EAAE,CAAA;EAAA,IACvCC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;EAAA,IAGlDC,CAAAA,eAAe,GAA2B,IAAI,CAAA;EAAA,IACtCC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;EAAA,IAC7BC,CAAAA,mBAAmB,GAA8B,EAAE,CAAA;EAAA,IACnDC,CAAAA,4BAA4B,GAAwB,IAAI,CAAA;EAAA,IACxDC,CAAAA,iBAAiB,GAAI,YAAM;IACjC,IAAIC,GAA0B,GAAG,IAAI,CAAA;AAErC,IAAA,OAAO,YAAM;AACX,MAAA,IAAIA,GAAG,EAAE;AACP,QAAA,OAAOA,GAAG,CAAA;AACZ,OAAC,MAAM,IAAI,OAAOzD,cAAc,KAAK,WAAW,EAAE;AAChD,QAAA,OAAQyD,GAAG,GAAG,IAAIzD,cAAc,CAAC,UAACC,OAAO,EAAK;AAC5CA,UAAAA,OAAO,CAACyD,OAAO,CAAC,UAACxD,KAAK,EAAK;YACzB,KAAI,CAACyD,eAAe,CAACzD,KAAK,CAAC6B,MAAM,EAAkB,KAAK,CAAC,CAAA;AAC3D,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;AACJ,OAAC,MAAM;AACL,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;KACD,CAAA;AACH,GAAC,EAAG,CAAA;AAAA,EAAA,IAAA,CACJvD,KAAK,GAA6C;AAChDI,IAAAA,UAAU,EAAE,CAAC;AACbI,IAAAA,QAAQ,EAAE,CAAA;GACX,CAAA;AAAA,EAAA,IAAA,CAcD4E,UAAU,GAAG,UAACf,IAAsD,EAAK;IACvEgB,MAAM,CAAC5D,OAAO,CAAC4C,IAAI,CAAC,CAACa,OAAO,CAAC,UAAkB,KAAA,EAAA;AAAA,MAAA,IAAhBI,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA;QAAEC,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;MACvC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQlB,IAAI,CAASiB,GAAG,CAAC,CAAA;AAC7D,KAAC,CAAC,CAAA;AAEF,IAAA,KAAI,CAAClE,OAAO,GAAA,QAAA,CAAA;AACVoE,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,aAAa,EAAE,CAAC;AAChBpF,MAAAA,QAAQ,EAAE,CAAC;AACXqF,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,kBAAkB,EAAE,CAAC;AACrBC,MAAAA,gBAAgB,EAAE,CAAC;AACnBxE,MAAAA,UAAU,EAAE,KAAK;AACjByE,MAAAA,UAAU,EAAEjG,mBAAmB;AAC/BkG,MAAAA,cAAc,EAAEhG,qBAAqB;MACrCiG,QAAQ,EAAE,SAAM,QAAA,GAAA,EAAE;AAClBnC,MAAAA,cAAc,EAAdA,cAAc;AACdoC,MAAAA,WAAW,EAAE;AAAE/E,QAAAA,KAAK,EAAE,CAAC;AAAED,QAAAA,MAAM,EAAE,CAAA;OAAG;AACpCiF,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,cAAc,EAAE,GAAG;AACnBC,MAAAA,cAAc,EAAE,YAAY;AAC5BC,MAAAA,wBAAwB,EAAE,EAAA;AAAE,KAAA,EACzBhC,IAAI,CACR,CAAA;GACF,CAAA;EAAA,IAEOiC,CAAAA,MAAM,GAAG,YAAM;AACrB,IAAA,KAAI,CAAClF,OAAO,CAAC4E,QAAQ,IAArB,IAAA,GAAA,KAAA,CAAA,GAAA,KAAI,CAAC5E,OAAO,CAAC4E,QAAQ,CAAG,KAAI,CAAC,CAAA;GAC9B,CAAA;EAAA,IAEOO,CAAAA,OAAO,GAAG,YAAM;IACtB,KAAI,CAACjC,MAAM,CAACkC,MAAM,CAACC,OAAO,CAAC,CAACvB,OAAO,CAAC,UAACwB,CAAC,EAAA;AAAA,MAAA,OAAKA,CAAC,EAAG,CAAA;KAAC,CAAA,CAAA;IAChD,KAAI,CAACpC,MAAM,GAAG,EAAE,CAAA;IAChB,KAAI,CAACzC,aAAa,GAAG,IAAI,CAAA;GAC1B,CAAA;EAAA,IAED8E,CAAAA,SAAS,GAAG,YAAM;AAChB,IAAA,IAAMC,EAAE,GAAG,KAAI,CAAC5B,iBAAiB,EAAE,CAAA;IACnCK,MAAM,CAACwB,MAAM,CAAC,KAAI,CAAC/B,mBAAmB,CAAC,CAACI,OAAO,CAAC,UAAC4B,IAAI,EAAA;AAAA,MAAA,OAAKF,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAE7E,OAAO,CAAC+E,IAAI,CAAC,CAAA;KAAC,CAAA,CAAA;AAE5E,IAAA,OAAO,YAAM;AACXF,MAAAA,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAEG,UAAU,EAAE,CAAA;MAEhB,KAAI,CAACR,OAAO,EAAE,CAAA;KACf,CAAA;GACF,CAAA;EAAA,IAEDS,CAAAA,WAAW,GAAG,YAAM;AAClB,IAAA,KAAI,CAACjC,4BAA4B,IAAA,IAAA,GAAA,KAAA,CAAA,GAAjC,KAAI,CAACA,4BAA4B,EAAI,CAAA;AAErC,IAAA,IAAMlD,aAAa,GAAG,KAAI,CAACT,OAAO,CAAC6F,gBAAgB,EAAE,CAAA;AAErD,IAAA,IAAI,KAAI,CAACpF,aAAa,KAAKA,aAAa,EAAE;MACxC,KAAI,CAAC0E,OAAO,EAAE,CAAA;MAEd,KAAI,CAAC1E,aAAa,GAAGA,aAAa,CAAA;AAElC,MAAA,KAAI,CAACqF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCpD,QAAAA,WAAW,EAAEqD,SAAS;AACtBpD,QAAAA,QAAQ,EAAEoD,SAAAA;AACZ,OAAC,CAAC,CAAA;AAEF,MAAA,KAAI,CAAC9C,MAAM,CAAC1D,IAAI,CACd,KAAI,CAACQ,OAAO,CAACE,kBAAkB,CAAC,KAAI,EAAE,UAACH,IAAI,EAAK;QAC9C,KAAI,CAACkG,UAAU,GAAGlG,IAAI,CAAA;QACtB,KAAI,CAACmG,cAAc,EAAE,CAAA;AACvB,OAAC,CAAC,CACH,CAAA;AAED,MAAA,KAAI,CAAChD,MAAM,CAAC1D,IAAI,CACd,KAAI,CAACQ,OAAO,CAACuC,oBAAoB,CAAC,KAAI,EAAE,UAACP,MAAM,EAAK;QAClD,KAAI,CAACyB,iBAAiB,GAAG,CAAC,CAAA;AAE1B,QAAA,IAAI,KAAI,CAACsC,YAAY,KAAK/D,MAAM,EAAE;AAChC,UAAA,OAAA;AACF,SAAA;AAEA,QAAA,IAAI,KAAI,CAACoB,oBAAoB,KAAK,IAAI,EAAE;AACtC+C,UAAAA,YAAY,CAAC,KAAI,CAAC/C,oBAAoB,CAAC,CAAA;UACvC,KAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;AAClC,SAAA;AAEA,QAAA,IAAMgD,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIjD,WAAoB,EAAK;AACpD,UAAA,IAAI,KAAI,CAACA,WAAW,KAAKA,WAAW,EAAE;YACpC,KAAI,CAACA,WAAW,GAAGA,WAAW,CAAA;YAC9B,KAAI,CAAC+B,MAAM,EAAE,CAAA;AACf,WAAA;SACD,CAAA;QAED,KAAI,CAAC1B,eAAe,GAClB,KAAI,CAACuC,YAAY,GAAG/D,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;QAErD,KAAI,CAAC+D,YAAY,GAAG/D,MAAM,CAAA;QAE1B,KAAI,CAACkE,cAAc,EAAE,CAAA;QAErBE,mBAAmB,CAAC,IAAI,CAAC,CAAA;AAEzB,QAAA,KAAI,CAAChD,oBAAoB,GAAGiD,UAAU,CAAC,YAAM;UAC3C,KAAI,CAACjD,oBAAoB,GAAG,IAAI,CAAA;UAChC,KAAI,CAACI,eAAe,GAAG,IAAI,CAAA;UAC3B4C,mBAAmB,CAAC,KAAK,CAAC,CAAA;AAC5B,SAAC,EAAE,KAAI,CAACpG,OAAO,CAAC+E,cAAc,CAAC,CAAA;AACjC,OAAC,CAAC,CACH,CAAA;AACH,KAAC,MAAM,IAAI,CAAC,KAAI,CAAC5B,WAAW,EAAE;MAC5B,KAAI,CAAC+C,cAAc,EAAE,CAAA;AACvB,KAAA;GACD,CAAA;EAAA,IAEOI,CAAAA,OAAO,GAAG,YAAM;AACtB,IAAA,OAAO,KAAI,CAACL,UAAU,CAAC,KAAI,CAACjG,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;GACrE,CAAA;EAAA,IAEOsG,CAAAA,eAAe,GAAGC,IAAI,CAC5B,YAAA;AAAA,IAAA,OAAM,CACJ,KAAI,CAACxG,OAAO,CAACX,KAAK,EAClB,KAAI,CAACW,OAAO,CAACsE,YAAY,EACzB,KAAI,CAACtE,OAAO,CAAC8E,YAAY,EACzB,KAAI,CAAC9E,OAAO,CAAC0E,UAAU,EACvB,KAAI,CAACpB,aAAa,CACnB,CAAA;GACD,EAAA,UAACjE,KAAK,EAAEiF,YAAY,EAAEQ,YAAY,EAAEJ,UAAU,EAAEpB,aAAa,EAAK;IAChE,IAAMnE,GAAG,GACP,KAAI,CAACoE,2BAA2B,CAACkD,MAAM,GAAG,CAAC,GACvC3H,IAAI,CAACK,GAAG,OAARL,IAAI,EAAQ,KAAI,CAACyE,2BAA2B,CAAC,GAC7C,CAAC,CAAA;IACP,KAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;IAErC,IAAMmD,YAAY,GAAG,KAAI,CAACrD,iBAAiB,CAACsD,KAAK,CAAC,CAAC,EAAExH,GAAG,CAAC,CAAA;IAEzD,KAAK,IAAII,GAAC,GAAGJ,GAAG,EAAEI,GAAC,GAAGF,KAAK,EAAEE,GAAC,EAAE,EAAE;AAChC,MAAA,IAAM2E,GAAG,GAAGQ,UAAU,CAACnF,GAAC,CAAC,CAAA;AACzB,MAAA,IAAMqH,YAAY,GAAGtD,aAAa,CAACY,GAAG,CAAC,CAAA;MACvC,IAAMrF,KAAK,GAAG6H,YAAY,CAACnH,GAAC,GAAG,CAAC,CAAC,GAC7BmH,YAAY,CAACnH,GAAC,GAAG,CAAC,CAAC,CAAEL,GAAG,GACxBoF,YAAY,GAAGQ,YAAY,CAAA;AAC/B,MAAA,IAAM+B,IAAI,GACR,OAAOD,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,KAAI,CAAC5G,OAAO,CAAC8G,YAAY,CAACvH,GAAC,CAAC,CAAA;AAClC,MAAA,IAAML,GAAG,GAAGL,KAAK,GAAGgI,IAAI,CAAA;MACxBH,YAAY,CAACnH,GAAC,CAAC,GAAG;AAAEb,QAAAA,KAAK,EAAEa,GAAC;AAAEV,QAAAA,KAAK,EAALA,KAAK;AAAEgI,QAAAA,IAAI,EAAJA,IAAI;AAAE3H,QAAAA,GAAG,EAAHA,GAAG;AAAEgF,QAAAA,GAAG,EAAHA,GAAAA;OAAK,CAAA;AACvD,KAAA;IAEA,KAAI,CAACb,iBAAiB,GAAGqD,YAAY,CAAA;AAErC,IAAA,OAAOA,YAAY,CAAA;AACrB,GAAC,EACD;IACExC,GAAG,EAAE6C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,iBAAiB;AAC/D7C,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpE,OAAO,CAACoE,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;EAAA,IAED8B,CAAAA,cAAc,GAAGM,IAAI,CACnB,YAAA;AAAA,IAAA,OAAM,CAAC,KAAI,CAACD,eAAe,EAAE,EAAE,KAAI,CAACD,OAAO,EAAE,EAAE,KAAI,CAACP,YAAY,CAAC,CAAA;AAAA,GAAA,EACjE,UAACW,YAAY,EAAEQ,SAAS,EAAEnB,YAAY,EAAK;IACzC,IAAMnH,KAAK,GAAGsH,cAAc,CAAC;AAC3BQ,MAAAA,YAAY,EAAZA,YAAY;AACZQ,MAAAA,SAAS,EAATA,SAAS;AACTnB,MAAAA,YAAY,EAAZA,YAAAA;AACF,KAAC,CAAC,CAAA;AACF,IAAA,IACEnH,KAAK,CAACI,UAAU,KAAK,KAAI,CAACJ,KAAK,CAACI,UAAU,IAC1CJ,KAAK,CAACQ,QAAQ,KAAK,KAAI,CAACR,KAAK,CAACQ,QAAQ,EACtC;MACA,KAAI,CAACR,KAAK,GAAGA,KAAK,CAAA;MAClB,KAAI,CAACsG,MAAM,EAAE,CAAA;AACf,KAAA;IACA,OAAO,KAAI,CAACtG,KAAK,CAAA;AACnB,GAAC,EACD;IACEsF,GAAG,EAAE6C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,gBAAgB;AAC9D7C,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpE,OAAO,CAACoE,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;EAAA,IAEO+C,CAAAA,UAAU,GAAGX,IAAI,CACvB,YAAA;IAAA,OAAM,CACJ,KAAI,CAACxG,OAAO,CAAC2E,cAAc,EAC3B,KAAI,CAAC/F,KAAK,EACV,KAAI,CAACoB,OAAO,CAACf,QAAQ,EACrB,KAAI,CAACe,OAAO,CAACX,KAAK,CACnB,CAAA;GACD,EAAA,UAACsF,cAAc,EAAE/F,KAAK,EAAEK,QAAQ,EAAEI,KAAK,EAAK;IAC1C,OAAOsF,cAAc,cAChB/F,KAAK,EAAA;AACRK,MAAAA,QAAQ,EAARA,QAAQ;AACRI,MAAAA,KAAK,EAAEA,KAAAA;KACP,CAAA,CAAA,CAAA;AACJ,GAAC,EACD;IACE6E,GAAG,EAAE6C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1D7C,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpE,OAAO,CAACoE,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEDgD,gBAAgB,GAAG,UAAC1B,IAAkB,EAAK;AACzC,IAAA,IAAM2B,aAAa,GAAG,KAAI,CAACrH,OAAO,CAACgF,cAAc,CAAA;AACjD,IAAA,IAAMsC,QAAQ,GAAG5B,IAAI,CAAC6B,YAAY,CAACF,aAAa,CAAC,CAAA;IAEjD,IAAI,CAACC,QAAQ,EAAE;AACbE,MAAAA,OAAO,CAACC,IAAI,CACiBJ,0BAAAA,GAAAA,aAAa,GACzC,gCAAA,CAAA,CAAA;AACD,MAAA,OAAO,CAAC,CAAC,CAAA;AACX,KAAA;AAEA,IAAA,OAAOK,QAAQ,CAACJ,QAAQ,EAAE,EAAE,CAAC,CAAA;GAC9B,CAAA;AAAA,EAAA,IAAA,CAEOvD,eAAe,GAAG,UAAC2B,IAAkB,EAAEiC,KAAc,EAAK;AAAA,IAAA,IAAA,qBAAA,CAAA;AAChE,IAAA,IAAMjJ,KAAK,GAAG,KAAI,CAAC0I,gBAAgB,CAAC1B,IAAI,CAAC,CAAA;AAEzC,IAAA,IAAMkC,IAAI,GAAG,KAAI,CAACvE,iBAAiB,CAAC3E,KAAK,CAAC,CAAA;IAC1C,IAAI,CAACkJ,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;IAEA,IAAMC,QAAQ,GAAG,KAAI,CAACnE,mBAAmB,CAACkE,IAAI,CAAC1D,GAAG,CAAC,CAAA;AAEnD,IAAA,IAAMsB,EAAE,GAAG,KAAI,CAAC5B,iBAAiB,EAAE,CAAA;AAEnC,IAAA,IAAI,CAAC8B,IAAI,CAACoC,WAAW,EAAE;AACrB,MAAA,IAAID,QAAQ,EAAE;AACZrC,QAAAA,EAAE,oBAAFA,EAAE,CAAE5E,SAAS,CAACiH,QAAQ,CAAC,CAAA;AACvB,QAAA,OAAO,KAAI,CAACnE,mBAAmB,CAACkE,IAAI,CAAC1D,GAAG,CAAC,CAAA;AAC3C,OAAA;AACA,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAC2D,QAAQ,IAAIA,QAAQ,KAAKnC,IAAI,EAAE;AAClC,MAAA,IAAImC,QAAQ,EAAE;AACZrC,QAAAA,EAAE,oBAAFA,EAAE,CAAE5E,SAAS,CAACiH,QAAQ,CAAC,CAAA;AACzB,OAAA;MACA,KAAI,CAACnE,mBAAmB,CAACkE,IAAI,CAAC1D,GAAG,CAAC,GAAGwB,IAAI,CAAA;AACzCF,MAAAA,EAAE,oBAAFA,EAAE,CAAE7E,OAAO,CAAC+E,IAAI,CAAC,CAAA;AACnB,KAAA;IAEA,IAAMqC,gBAAgB,GAAG,KAAI,CAAC/H,OAAO,CAACyC,cAAc,CAACiD,IAAI,EAAE,KAAI,CAAC,CAAA;AAEhE,IAAA,IAAMsC,QAAQ,GAAA,CAAA,qBAAA,GAAG,KAAI,CAAC1E,aAAa,CAACsE,IAAI,CAAC1D,GAAG,CAAC,KAAI0D,IAAAA,GAAAA,qBAAAA,GAAAA,IAAI,CAACf,IAAI,CAAA;AAE1D,IAAA,IAAMoB,KAAK,GAAGF,gBAAgB,GAAGC,QAAQ,CAAA;IAEzC,IAAIC,KAAK,KAAK,CAAC,EAAE;AAAA,MAAA,IAAA,SAAA,CAAA;AACf,MAAA,IACEL,IAAI,CAAC/I,KAAK,GAAG,KAAI,CAACkH,YAAY,IAC9B,KAAI,CAAC5C,WAAW,IAChB,KAAI,CAACK,eAAe,KAAK,UAAU,EACnC;AACA,QAAA,IAAIuD,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,KAAI,CAACjH,OAAO,CAACoE,KAAK,EAAE;AAC/DoD,UAAAA,OAAO,CAACU,IAAI,CAAC,YAAY,EAAED,KAAK,CAAC,CAAA;AACnC,SAAA;AAEA,QAAA,KAAI,CAACnC,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCpD,UAAAA,WAAW,EAAG,KAAI,CAACc,iBAAiB,IAAIwE,KAAM;AAC9CrF,UAAAA,QAAQ,EAAEoD,SAAAA;AACZ,SAAC,CAAC,CAAA;AACJ,OAAA;AAEA,MAAA,KAAI,CAACzC,2BAA2B,CAAC/D,IAAI,CAACd,KAAK,CAAC,CAAA;AAC5C,MAAA,KAAI,CAAC4E,aAAa,GACb,QAAA,CAAA,EAAA,EAAA,KAAI,CAACA,aAAa,GACpBsE,SAAAA,GAAAA,EAAAA,EAAAA,SAAAA,CAAAA,IAAI,CAAC1D,GAAG,CAAG6D,GAAAA,gBAAgB,EAC7B,SAAA,EAAA,CAAA;MACD,KAAI,CAAC7C,MAAM,EAAE,CAAA;AACf,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDzC,cAAc,GAAG,UAACiD,IAAyB,EAAK;IAC9C,IAAI,CAACA,IAAI,EAAE;AACT,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,KAAI,CAAC3B,eAAe,CAAC2B,IAAI,EAAE,IAAI,CAAC,CAAA;GACjC,CAAA;EAAA,IAEDyC,CAAAA,eAAe,GAAG3B,IAAI,CACpB,YAAA;IAAA,OAAM,CAAC,KAAI,CAACW,UAAU,EAAE,EAAE,KAAI,CAACZ,eAAe,EAAE,CAAC,CAAA;AAAA,GAAA,EACjD,UAAC6B,OAAO,EAAE1B,YAAY,EAAK;IACzB,IAAM2B,YAA2B,GAAG,EAAE,CAAA;AAEtC,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC3B,MAAM,EAAE6B,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAClD,MAAA,IAAM/I,GAAC,GAAG6I,OAAO,CAACE,CAAC,CAAE,CAAA;AACrB,MAAA,IAAME,WAAW,GAAG9B,YAAY,CAACnH,GAAC,CAAE,CAAA;AAEpC8I,MAAAA,YAAY,CAAC7I,IAAI,CAACgJ,WAAW,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,OAAOH,YAAY,CAAA;AACrB,GAAC,EACD;IACEnE,GAAG,EAAE6C,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,IAAI,YAAY;AAC1D7C,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;AAAA,MAAA,OAAM,KAAI,CAACpE,OAAO,CAACoE,KAAK,CAAA;AAAA,KAAA;AACjC,GAAC,CACF,CAAA;AAAA,EAAA,IAAA,CAEDqE,qBAAqB,GAAG,UAAC5F,QAAgB,EAAE6F,KAAsB,EAAK;AACpE,IAAA,IAAM1G,MAAM,GAAG,KAAI,CAAC+D,YAAY,CAAA;AAChC,IAAA,IAAMc,IAAI,GAAG,KAAI,CAACP,OAAO,EAAE,CAAA;IAE3B,IAAIoC,KAAK,KAAK,MAAM,EAAE;MACpB,IAAI7F,QAAQ,IAAIb,MAAM,EAAE;AACtB0G,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAC,MAAM,IAAI7F,QAAQ,IAAIb,MAAM,GAAG6E,IAAI,EAAE;AACpC6B,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM;AACLA,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAA;AACF,KAAA;IAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;AACrB,MAAA,OAAO7F,QAAQ,CAAA;AACjB,KAAC,MAAM,IAAI6F,KAAK,KAAK,KAAK,EAAE;MAC1B,OAAO7F,QAAQ,GAAGgE,IAAI,CAAA;AACxB,KAAC,MAAM,IAAI6B,KAAK,KAAK,QAAQ,EAAE;AAC7B,MAAA,OAAO7F,QAAQ,GAAGgE,IAAI,GAAG,CAAC,CAAA;AAC5B,KAAA;AACA,IAAA,OAAOhE,QAAQ,CAAA;GAChB,CAAA;AAAA,EAAA,IAAA,CAED8F,cAAc,GAAG,UACf9F,QAAgB,EAEb,KAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,CAAA,GADoD,EAAE,GAAA,KAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAAvD6F,KAAK;AAALA,MAAAA,KAAK,4BAAG,OAAO,GAAA,WAAA;AAAE9F,MAAAA,QAAQ,SAARA,QAAQ,CAAA;AAE3B,IAAA,IAAM5C,OAAO,GAAG;AACd2C,MAAAA,WAAW,EAAEqD,SAAS;AACtBpD,MAAAA,QAAQ,EAARA,QAAQ;AACRgG,MAAAA,IAAI,EAAE,KAAA;KACP,CAAA;AACD,IAAA,KAAI,CAAC9C,eAAe,CAAC,KAAI,CAAC2C,qBAAqB,CAAC5F,QAAQ,EAAE6F,KAAK,CAAC,EAAE1I,OAAO,CAAC,CAAA;GAC3E,CAAA;AAAA,EAAA,IAAA,CAED6I,aAAa,GAAG,UACdnK,KAAa,EAEV,MAAA,EAAA;AAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GADkD,EAAE,GAAA,MAAA;AAAA,MAAA,WAAA,GAAA,KAAA,CAArDgK,KAAK;AAALA,MAAAA,KAAK,4BAAG,MAAM,GAAA,WAAA;AAAE9F,MAAAA,QAAQ,SAARA,QAAQ,CAAA;IAE1B,KAAI,CAACe,4BAA4B,GAAG,IAAI,CAAA;AAExC,IAAA,IAAM3B,MAAM,GAAG,KAAI,CAAC+D,YAAY,CAAA;AAChC,IAAA,IAAMc,IAAI,GAAG,KAAI,CAACP,OAAO,EAAE,CAAA;AAC3B,IAAA,IAAQjH,KAAK,GAAK,KAAI,CAACW,OAAO,CAAtBX,KAAK,CAAA;AAEb,IAAA,IAAMqH,YAAY,GAAG,KAAI,CAACH,eAAe,EAAE,CAAA;IAC3C,IAAMiC,WAAW,GAAG9B,YAAY,CAAC5H,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACK,GAAG,CAACT,KAAK,EAAEW,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEzE,IAAI,CAACmJ,WAAW,EAAE;AAChB,MAAA,MAAM,IAAIM,KAAK,CAAsCpK,oCAAAA,GAAAA,KAAK,CAAG,CAAA;AAC/D,KAAA;IAEA,IAAIgK,KAAK,KAAK,MAAM,EAAE;AACpB,MAAA,IAAIF,WAAW,CAACtJ,GAAG,IAAI8C,MAAM,GAAG6E,IAAI,GAAG,KAAI,CAAC7G,OAAO,CAACyE,gBAAgB,EAAE;AACpEiE,QAAAA,KAAK,GAAG,KAAK,CAAA;AACf,OAAC,MAAM,IACLF,WAAW,CAAC3J,KAAK,IACjBmD,MAAM,GAAG,KAAI,CAAChC,OAAO,CAACwE,kBAAkB,EACxC;AACAkE,QAAAA,KAAK,GAAG,OAAO,CAAA;AACjB,OAAC,MAAM;AACL,QAAA,OAAA;AACF,OAAA;AACF,KAAA;AAEA,IAAA,IAAMK,6BAA6B,GAAG,SAAhCA,6BAA6B,CAAIP,WAAwB,EAAK;MAClE,IAAM3F,QAAQ,GACZ6F,KAAK,KAAK,KAAK,GACXF,WAAW,CAACtJ,GAAG,GAAG,KAAI,CAACc,OAAO,CAACyE,gBAAgB,GAC/C+D,WAAW,CAAC3J,KAAK,GAAG,KAAI,CAACmB,OAAO,CAACwE,kBAAkB,CAAA;AAEzD,MAAA,OAAO,KAAI,CAACiE,qBAAqB,CAAC5F,QAAQ,EAAE6F,KAAK,CAAC,CAAA;KACnD,CAAA;AAED,IAAA,IAAM7F,QAAQ,GAAGkG,6BAA6B,CAACP,WAAW,CAAC,CAAA;IAE3D,IAAI3F,QAAQ,KAAKb,MAAM,EAAE;AACvB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAMhC,OAAO,GAAG;AACd2C,MAAAA,WAAW,EAAEqD,SAAS;AACtBpD,MAAAA,QAAQ,EAARA,QAAAA;KACD,CAAA;AACD,IAAA,KAAI,CAACkD,eAAe,CAACjD,QAAQ,EAAE7C,OAAO,CAAC,CAAA;AAEvC,IAAA,IAAMgJ,SAAS,GAAG/E,MAAM,CAACgF,IAAI,CAAC,KAAI,CAACvF,mBAAmB,CAAC,CAAC+C,MAAM,GAAG,CAAC,CAAA;AAElE,IAAA,IAAIuC,SAAS,EAAE;MACb,KAAI,CAACrF,4BAA4B,GAAG,YAAM;AACxC,QAAA,KAAI,CAACkF,aAAa,CAACnK,KAAK,EAAE;AAAEgK,UAAAA,KAAK,EAALA,KAAK;AAAE9F,UAAAA,QAAQ,EAARA,QAAAA;AAAS,SAAC,CAAC,CAAA;OAC/C,CAAA;AACH,KAAA;GACD,CAAA;AAAA,EAAA,IAAA,CAEDsG,QAAQ,GAAG,UAACvG,WAAmB,EAAE3C,OAAsC,EAAK;AAC1E,IAAA,KAAI,CAAC8F,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;AACtCpD,MAAAA,WAAW,EAAXA,WAAW;AACXC,MAAAA,QAAQ,EAAE5C,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE4C,QAAAA;AACrB,KAAC,CAAC,CAAA;GACH,CAAA;AAAA,EAAA,IAAA,CAEDuG,YAAY,GAAG,YAAA;AAAA,IAAA,IAAA,qBAAA,CAAA;AAAA,IAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,KAAI,CAAC5C,eAAe,EAAE,CAAC,KAAI,CAACvG,OAAO,CAACX,KAAK,GAAG,CAAC,CAAC,qBAA9C,qBAAgDH,CAAAA,GAAG,KAClD,KAAI,CAACc,OAAO,CAACsE,YAAY,IAC3B,KAAI,CAACtE,OAAO,CAAC8E,YAAY,GACzB,KAAI,CAAC9E,OAAO,CAACuE,UAAU,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA,IAAA,CAEjBuB,eAAe,GAAG,UACxB9D,MAAc,EAQX,KAAA,EAAA;IAAA,IANDW,WAAW,SAAXA,WAAW;AACXC,MAAAA,QAAQ,SAARA,QAAQ,CAAA;AAMV,IAAA,KAAI,CAAC5C,OAAO,CAACoJ,UAAU,CAACpH,MAAM,EAAE;AAAEY,MAAAA,QAAQ,EAARA,QAAQ;AAAED,MAAAA,WAAW,EAAXA,WAAAA;KAAa,EAAE,KAAI,CAAC,CAAA;GACjE,CAAA;EAAA,IAED0G,CAAAA,OAAO,GAAG,YAAM;AACd,IAAA,KAAI,CAAC/F,aAAa,GAAG,EAAE,CAAA;IACvB,KAAI,CAAC4B,MAAM,EAAE,CAAA;GACd,CAAA;AApbC,EAAA,IAAI,CAAClB,UAAU,CAACf,KAAI,CAAC,CAAA;AACrB,EAAA,IAAI,CAACgD,UAAU,GAAG,IAAI,CAACjG,OAAO,CAAC6E,WAAW,CAAA;AAC1C,EAAA,IAAI,CAACkB,YAAY,GAAG,IAAI,CAAC/F,OAAO,CAACqE,aAAa,CAAA;AAC9C,EAAA,IAAI,CAAChB,iBAAiB,GAAG,IAAI,CAACrD,OAAO,CAACiF,wBAAwB,CAAA;AAC9D,EAAA,IAAI,CAAC5B,iBAAiB,CAACS,OAAO,CAAC,UAAC8D,IAAI,EAAK;IACvC,KAAI,CAACtE,aAAa,CAACsE,IAAI,CAAC1D,GAAG,CAAC,GAAG0D,IAAI,CAACf,IAAI,CAAA;AAC1C,GAAC,CAAC,CAAA;EAEF,IAAI,CAACX,cAAc,EAAE,CAAA;AACvB,EAAC;AA8aH,IAAMoD,uBAAuB,GAAG,SAA1BA,uBAAuB,CAC3BC,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtCtF,KAAa,EACV;EACH,OAAOoF,GAAG,IAAIC,IAAI,EAAE;IAClB,IAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;AACrC,IAAA,IAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;IAE5C,IAAIC,YAAY,GAAGxF,KAAK,EAAE;MACxBoF,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;AAClB,KAAC,MAAM,IAAIC,YAAY,GAAGxF,KAAK,EAAE;MAC/BqF,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAA;AACnB,KAAC,MAAM;AACL,MAAA,OAAOA,MAAM,CAAA;AACf,KAAA;AACF,GAAA;EAEA,IAAIH,GAAG,GAAG,CAAC,EAAE;IACX,OAAOA,GAAG,GAAG,CAAC,CAAA;AAChB,GAAC,MAAM;AACL,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;AACF,CAAC,CAAA;AAED,SAASrD,cAAc,CAQpB,KAAA,EAAA;EAAA,IAPDQ,YAAY,SAAZA,YAAY;AACZQ,IAAAA,SAAS,SAATA,SAAS;AACTnB,IAAAA,YAAY,SAAZA,YAAY,CAAA;AAMZ,EAAA,IAAM1G,KAAK,GAAGqH,YAAY,CAACD,MAAM,GAAG,CAAC,CAAA;AACrC,EAAA,IAAMmD,SAAS,GAAG,SAAZA,SAAS,CAAIlL,KAAa,EAAA;AAAA,IAAA,OAAKgI,YAAY,CAAChI,KAAK,CAAC,CAAEG,KAAK,CAAA;AAAA,GAAA,CAAA;EAE/D,IAAMG,UAAU,GAAGsK,uBAAuB,CAAC,CAAC,EAAEjK,KAAK,EAAEuK,SAAS,EAAE7D,YAAY,CAAC,CAAA;EAC7E,IAAI3G,QAAQ,GAAGJ,UAAU,CAAA;AAEzB,EAAA,OACEI,QAAQ,GAAGC,KAAK,IAChBqH,YAAY,CAACtH,QAAQ,CAAC,CAAEF,GAAG,GAAG6G,YAAY,GAAGmB,SAAS,EACtD;AACA9H,IAAAA,QAAQ,EAAE,CAAA;AACZ,GAAA;EAEA,OAAO;AAAEJ,IAAAA,UAAU,EAAVA,UAAU;AAAEI,IAAAA,QAAQ,EAARA,QAAAA;GAAU,CAAA;AACjC;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: 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","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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"}
@@ -154,13 +154,13 @@ var Virtualizer = function Virtualizer(_opts) {
154
154
  this.scrollElement = null;
155
155
  this.isScrolling = false;
156
156
  this.isScrollingTimeoutId = null;
157
+ this.scrollToIndexTimeoutId = null;
157
158
  this.measurementsCache = [];
158
159
  this.itemSizeCache = {};
159
160
  this.pendingMeasuredCacheIndexes = [];
160
161
  this.scrollDirection = null;
161
162
  this.scrollAdjustments = 0;
162
163
  this.measureElementCache = {};
163
- this.pendingScrollToIndexCallback = null;
164
164
  this.getResizeObserver = function () {
165
165
  var _ro = null;
166
166
  return function () {
@@ -231,7 +231,6 @@ var Virtualizer = function Virtualizer(_opts) {
231
231
  };
232
232
  };
233
233
  this._willUpdate = function () {
234
- _this.pendingScrollToIndexCallback == null ? void 0 : _this.pendingScrollToIndexCallback();
235
234
  var scrollElement = _this.options.getScrollElement();
236
235
  if (_this.scrollElement !== scrollElement) {
237
236
  _this.cleanup();
@@ -373,7 +372,7 @@ var Virtualizer = function Virtualizer(_opts) {
373
372
  var delta = measuredItemSize - itemSize;
374
373
  if (delta !== 0) {
375
374
  var _extends2;
376
- if (item.start < _this.scrollOffset && _this.isScrolling && _this.scrollDirection === 'backward') {
375
+ if (item.start < _this.scrollOffset) {
377
376
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
378
377
  console.info('correction', delta);
379
378
  }
@@ -435,6 +434,11 @@ var Virtualizer = function Virtualizer(_opts) {
435
434
  _ref4$align = _ref4.align,
436
435
  align = _ref4$align === void 0 ? 'start' : _ref4$align,
437
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
+ }
438
442
  var options = {
439
443
  adjustments: undefined,
440
444
  behavior: behavior,
@@ -447,19 +451,28 @@ var Virtualizer = function Virtualizer(_opts) {
447
451
  _ref5$align = _ref5.align,
448
452
  align = _ref5$align === void 0 ? 'auto' : _ref5$align,
449
453
  behavior = _ref5.behavior;
450
- _this.pendingScrollToIndexCallback = null;
451
- var offset = _this.scrollOffset;
452
- var size = _this.getSize();
453
- var count = _this.options.count;
454
- var measurements = _this.getMeasurements();
455
- var measurement = measurements[Math.max(0, Math.min(index, count - 1))];
456
- if (!measurement) {
457
- 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;
458
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();
459
472
  if (align === 'auto') {
460
- if (measurement.end >= offset + size - _this.options.scrollPaddingEnd) {
473
+ if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {
461
474
  align = 'end';
462
- } else if (measurement.start <= offset + _this.options.scrollPaddingStart) {
475
+ } else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {
463
476
  align = 'start';
464
477
  } else {
465
478
  return;
@@ -467,40 +480,61 @@ var Virtualizer = function Virtualizer(_opts) {
467
480
  }
468
481
  var getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(measurement) {
469
482
  var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
470
- 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));
471
487
  };
472
488
  var toOffset = getOffsetForIndexAndAlignment(measurement);
473
- if (toOffset === offset) {
474
- return;
475
- }
476
489
  var options = {
477
490
  adjustments: undefined,
478
491
  behavior: behavior
479
492
  };
480
493
  _this._scrollToOffset(toOffset, options);
481
- var isDynamic = Object.keys(_this.measureElementCache).length > 0;
494
+ var approxEqual = function approxEqual(a, b) {
495
+ return Math.abs(a - b) < 1;
496
+ };
482
497
  if (isDynamic) {
483
- _this.pendingScrollToIndexCallback = function () {
484
- _this.scrollToIndex(index, {
485
- align: align,
486
- behavior: behavior
487
- });
488
- };
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
+ });
489
516
  }
490
517
  };
491
- this.scrollBy = function (adjustments, options) {
492
- _this._scrollToOffset(_this.scrollOffset, {
493
- adjustments: adjustments,
494
- 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
495
529
  });
496
530
  };
497
531
  this.getTotalSize = function () {
498
532
  var _this$getMeasurements;
499
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;
500
534
  };
501
- this._scrollToOffset = function (offset, _ref6) {
502
- var adjustments = _ref6.adjustments,
503
- behavior = _ref6.behavior;
535
+ this._scrollToOffset = function (offset, _ref7) {
536
+ var adjustments = _ref7.adjustments,
537
+ behavior = _ref7.behavior;
504
538
  _this.options.scrollToFn(offset, {
505
539
  behavior: behavior,
506
540
  adjustments: adjustments
@@ -537,10 +571,10 @@ var findNearestBinarySearch = function findNearestBinarySearch(low, high, getCur
537
571
  return 0;
538
572
  }
539
573
  };
540
- function calculateRange(_ref7) {
541
- var measurements = _ref7.measurements,
542
- outerSize = _ref7.outerSize,
543
- scrollOffset = _ref7.scrollOffset;
574
+ function calculateRange(_ref8) {
575
+ var measurements = _ref8.measurements,
576
+ outerSize = _ref8.outerSize,
577
+ scrollOffset = _ref8.scrollOffset;
544
578
  var count = measurements.length - 1;
545
579
  var getOffset = function getOffset(index) {
546
580
  return measurements[index].start;