@tanstack/virtual-core 3.0.0-beta.45 → 3.0.0-beta.47

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.
@@ -32,7 +32,7 @@ export declare const observeElementRect: <T extends Element>(instance: Virtualiz
32
32
  export declare const observeWindowRect: (instance: Virtualizer<Window, any>, cb: (rect: Rect) => void) => (() => void) | undefined;
33
33
  export declare const observeElementOffset: <T extends Element>(instance: Virtualizer<T, any>, cb: (offset: number) => void) => (() => void) | undefined;
34
34
  export declare const observeWindowOffset: (instance: Virtualizer<Window, any>, cb: (offset: number) => void) => (() => void) | undefined;
35
- export declare const measureElement: <TItemElement extends Element>(element: TItemElement, instance: Virtualizer<any, TItemElement>) => number;
35
+ export declare const measureElement: <TItemElement extends Element>(element: TItemElement, entry: ResizeObserverEntry | undefined, instance: Virtualizer<any, TItemElement>) => number;
36
36
  export declare const windowScroll: <T extends Window>(offset: number, { adjustments, behavior, }: {
37
37
  adjustments?: number | undefined;
38
38
  behavior?: ScrollBehavior | undefined;
@@ -54,7 +54,7 @@ export interface VirtualizerOptions<TScrollElement extends Element | Window, TIt
54
54
  debug?: any;
55
55
  initialRect?: Rect;
56
56
  onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void;
57
- measureElement?: (el: TItemElement, instance: Virtualizer<TScrollElement, TItemElement>) => number;
57
+ measureElement?: (element: TItemElement, entry: ResizeObserverEntry | undefined, instance: Virtualizer<TScrollElement, TItemElement>) => number;
58
58
  overscan?: number;
59
59
  horizontal?: boolean;
60
60
  paddingStart?: number;
@@ -83,8 +83,8 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
83
83
  scrollOffset: number;
84
84
  scrollDirection: ScrollDirection | null;
85
85
  private scrollAdjustments;
86
- private measureElementCache;
87
- private getResizeObserver;
86
+ measureElementCache: Map<Key, TItemElement>;
87
+ private observer;
88
88
  range: {
89
89
  startIndex: number;
90
90
  endIndex: number;
@@ -33,20 +33,32 @@ var observeElementRect = function observeElementRect(instance, cb) {
33
33
  if (!element) {
34
34
  return;
35
35
  }
36
- var handler = function handler() {
37
- var _element$getBoundingC = element.getBoundingClientRect(),
38
- width = _element$getBoundingC.width,
39
- height = _element$getBoundingC.height;
36
+ var handler = function handler(rect) {
37
+ var width = rect.width,
38
+ height = rect.height;
40
39
  cb({
41
40
  width: Math.round(width),
42
41
  height: Math.round(height)
43
42
  });
44
43
  };
45
- handler();
46
- var observer = new ResizeObserver(function () {
47
- handler();
44
+ handler(element.getBoundingClientRect());
45
+ var observer = new ResizeObserver(function (entries) {
46
+ var entry = entries[0];
47
+ if (entry) {
48
+ var box = entry.borderBoxSize[0];
49
+ if (box) {
50
+ handler({
51
+ width: box.inlineSize,
52
+ height: box.blockSize
53
+ });
54
+ return;
55
+ }
56
+ }
57
+ handler(element.getBoundingClientRect());
58
+ });
59
+ observer.observe(element, {
60
+ box: 'border-box'
48
61
  });
49
- observer.observe(element);
50
62
  return function () {
51
63
  observer.unobserve(element);
52
64
  };
@@ -102,7 +114,14 @@ var observeWindowOffset = function observeWindowOffset(instance, cb) {
102
114
  element.removeEventListener('scroll', handler);
103
115
  };
104
116
  };
105
- var measureElement = function measureElement(element, instance) {
117
+ var measureElement = function measureElement(element, entry, instance) {
118
+ if (entry) {
119
+ var box = entry.borderBoxSize[0];
120
+ if (box) {
121
+ var size = Math.round(box[instance.options.horizontal ? 'inlineSize' : 'blockSize']);
122
+ return size;
123
+ }
124
+ }
106
125
  return Math.round(element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height']);
107
126
  };
108
127
  var windowScroll = function windowScroll(offset, _ref, instance) {
@@ -129,26 +148,42 @@ var Virtualizer = function Virtualizer(_opts) {
129
148
  this.isScrollingTimeoutId = null;
130
149
  this.scrollToIndexTimeoutId = null;
131
150
  this.measurementsCache = [];
132
- this.itemSizeCache = {};
151
+ this.itemSizeCache = new Map();
133
152
  this.pendingMeasuredCacheIndexes = [];
134
153
  this.scrollDirection = null;
135
154
  this.scrollAdjustments = 0;
136
- this.measureElementCache = {};
137
- this.getResizeObserver = function () {
155
+ this.measureElementCache = new Map();
156
+ this.observer = function () {
138
157
  var _ro = null;
139
- return function () {
158
+ var get = function get() {
140
159
  if (_ro) {
141
160
  return _ro;
142
161
  } else if (typeof ResizeObserver !== 'undefined') {
143
162
  return _ro = new ResizeObserver(function (entries) {
144
163
  entries.forEach(function (entry) {
145
- _this._measureElement(entry.target, false);
164
+ _this._measureElement(entry.target, entry);
146
165
  });
147
166
  });
148
167
  } else {
149
168
  return null;
150
169
  }
151
170
  };
171
+ return {
172
+ disconnect: function disconnect() {
173
+ var _get;
174
+ return (_get = get()) == null ? void 0 : _get.disconnect();
175
+ },
176
+ observe: function observe(target) {
177
+ var _get2;
178
+ return (_get2 = get()) == null ? void 0 : _get2.observe(target, {
179
+ box: 'border-box'
180
+ });
181
+ },
182
+ unobserve: function unobserve(target) {
183
+ var _get3;
184
+ return (_get3 = get()) == null ? void 0 : _get3.unobserve(target);
185
+ }
186
+ };
152
187
  }();
153
188
  this.range = {
154
189
  startIndex: 0,
@@ -194,12 +229,9 @@ var Virtualizer = function Virtualizer(_opts) {
194
229
  _this.scrollElement = null;
195
230
  };
196
231
  this._didMount = function () {
197
- var ro = _this.getResizeObserver();
198
- Object.values(_this.measureElementCache).forEach(function (node) {
199
- return ro == null ? void 0 : ro.observe(node);
200
- });
232
+ _this.measureElementCache.forEach(_this.observer.observe);
201
233
  return function () {
202
- ro == null ? void 0 : ro.disconnect();
234
+ _this.observer.disconnect();
203
235
  _this.cleanup();
204
236
  };
205
237
  };
@@ -252,7 +284,7 @@ var Virtualizer = function Virtualizer(_opts) {
252
284
  var measurements = _this.measurementsCache.slice(0, min);
253
285
  for (var _i2 = min; _i2 < count; _i2++) {
254
286
  var key = getItemKey(_i2);
255
- var measuredSize = itemSizeCache[key];
287
+ var measuredSize = itemSizeCache.get(key);
256
288
  var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
257
289
  var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
258
290
  var end = start + size;
@@ -319,39 +351,32 @@ var Virtualizer = function Virtualizer(_opts) {
319
351
  }
320
352
  return parseInt(indexStr, 10);
321
353
  };
322
- this._measureElement = function (node, sync) {
323
- var _this$itemSizeCache$i;
354
+ this._measureElement = function (node, entry) {
355
+ var _this$itemSizeCache$g;
324
356
  var index = _this.indexFromElement(node);
325
357
  var item = _this.measurementsCache[index];
326
358
  if (!item) {
327
359
  return;
328
360
  }
329
- var prevNode = _this.measureElementCache[item.key];
330
- var ro = _this.getResizeObserver();
361
+ var prevNode = _this.measureElementCache.get(item.key);
331
362
  if (!node.isConnected) {
332
- ro == null ? void 0 : ro.unobserve(node);
363
+ _this.observer.unobserve(node);
333
364
  if (node === prevNode) {
334
- delete _this.measureElementCache[item.key];
365
+ _this.measureElementCache["delete"](item.key);
335
366
  }
336
367
  return;
337
368
  }
338
369
  if (prevNode !== node) {
339
370
  if (prevNode) {
340
- ro == null ? void 0 : ro.unobserve(prevNode);
341
- }
342
- ro == null ? void 0 : ro.observe(node);
343
- _this.measureElementCache[item.key] = node;
344
- } else {
345
- if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {
346
- prevNode.__virtualizerSkipFirstNotSync = true;
347
- return;
371
+ _this.observer.unobserve(prevNode);
348
372
  }
373
+ _this.observer.observe(node);
374
+ _this.measureElementCache.set(item.key, node);
349
375
  }
350
- var measuredItemSize = _this.options.measureElement(node, _this);
351
- var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
376
+ var measuredItemSize = _this.options.measureElement(node, entry, _this);
377
+ var itemSize = (_this$itemSizeCache$g = _this.itemSizeCache.get(item.key)) != null ? _this$itemSizeCache$g : item.size;
352
378
  var delta = measuredItemSize - itemSize;
353
379
  if (delta !== 0) {
354
- var _extends2;
355
380
  if (item.start < _this.scrollOffset) {
356
381
  if (process.env.NODE_ENV !== 'production' && _this.options.debug) {
357
382
  console.info('correction', delta);
@@ -362,7 +387,7 @@ var Virtualizer = function Virtualizer(_opts) {
362
387
  });
363
388
  }
364
389
  _this.pendingMeasuredCacheIndexes.push(index);
365
- _this.itemSizeCache = _extends({}, _this.itemSizeCache, (_extends2 = {}, _extends2[item.key] = measuredItemSize, _extends2));
390
+ _this.itemSizeCache = new Map(_this.itemSizeCache.set(item.key, measuredItemSize));
366
391
  _this.notify();
367
392
  }
368
393
  };
@@ -370,7 +395,7 @@ var Virtualizer = function Virtualizer(_opts) {
370
395
  if (!node) {
371
396
  return;
372
397
  }
373
- _this._measureElement(node, true);
398
+ _this._measureElement(node, undefined);
374
399
  };
375
400
  this.getVirtualItems = memo(function () {
376
401
  return [_this.getIndexes(), _this.getMeasurements()];
@@ -430,7 +455,7 @@ var Virtualizer = function Virtualizer(_opts) {
430
455
  return [_this.getOffsetForAlignment(toOffset, align), align];
431
456
  };
432
457
  this.isDynamicMode = function () {
433
- return Object.keys(_this.measureElementCache).length > 0;
458
+ return _this.measureElementCache.size > 0;
434
459
  };
435
460
  this.cancelScrollToIndex = function () {
436
461
  if (_this.scrollToIndexTimeoutId !== null) {
@@ -472,7 +497,7 @@ var Virtualizer = function Virtualizer(_opts) {
472
497
  if (behavior !== 'smooth' && _this.isDynamicMode()) {
473
498
  _this.scrollToIndexTimeoutId = setTimeout(function () {
474
499
  _this.scrollToIndexTimeoutId = null;
475
- var elementInDOM = !!_this.measureElementCache[_this.options.getItemKey(index)];
500
+ var elementInDOM = _this.measureElementCache.has(_this.options.getItemKey(index));
476
501
  if (elementInDOM) {
477
502
  var _this$getOffsetForInd2 = _this.getOffsetForIndex(index, align),
478
503
  _toOffset = _this$getOffsetForInd2[0];
@@ -516,7 +541,7 @@ var Virtualizer = function Virtualizer(_opts) {
516
541
  }, _this);
517
542
  };
518
543
  this.measure = function () {
519
- _this.itemSizeCache = {};
544
+ _this.itemSizeCache = new Map();
520
545
  _this.notify();
521
546
  };
522
547
  this.setOptions(_opts);
@@ -524,7 +549,7 @@ var Virtualizer = function Virtualizer(_opts) {
524
549
  this.scrollOffset = this.options.initialOffset;
525
550
  this.measurementsCache = this.options.initialMeasurementsCache;
526
551
  this.measurementsCache.forEach(function (item) {
527
- _this.itemSizeCache[item.key] = item.size;
552
+ _this.itemSizeCache.set(item.key, item.size);
528
553
  });
529
554
  this.maybeNotify();
530
555
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n const { width, height } = element.getBoundingClientRect()\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n handler()\n\n const observer = new ResizeObserver(() => {\n handler()\n })\n\n observer.observe(element)\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\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), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\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] = this.getOffsetForIndex(index, align)\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 this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\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","observeElementRect","instance","cb","element","scrollElement","handler","getBoundingClientRect","width","height","round","observer","ResizeObserver","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","entries","forEach","entry","_measureElement","target","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","rect","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","notUndefined","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/index.ts"],"sourcesContent":["import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: { width: number; height: number }) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\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 element: TItemElement,\n entry: ResizeObserverEntry | undefined,\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 = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\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, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\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.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\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 const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache.get(key)\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\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.get(item.key)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(item.key)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(item.key, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n const itemSize = this.itemSizeCache.get(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\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, measuredItemSize),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\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), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\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 this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\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 = new Map()\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","observeElementRect","instance","cb","element","scrollElement","handler","rect","width","height","round","getBoundingClientRect","observer","ResizeObserver","entries","entry","box","borderBoxSize","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","values","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","prevNode","isConnected","set","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","notUndefined","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","has","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}