@tanstack/virtual-core 3.0.0-beta.52 → 3.0.0-beta.54
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.
- package/build/lib/index.d.ts +3 -0
- package/build/lib/index.esm.js +31 -5
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +31 -5
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +31 -5
- package/build/lib/index.mjs.map +1 -1
- package/build/umd/index.development.js +31 -5
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +66 -6
package/build/lib/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export interface VirtualItem {
|
|
|
21
21
|
start: number;
|
|
22
22
|
end: number;
|
|
23
23
|
size: number;
|
|
24
|
+
lane: number;
|
|
24
25
|
}
|
|
25
26
|
interface Rect {
|
|
26
27
|
width: number;
|
|
@@ -68,6 +69,7 @@ export interface VirtualizerOptions<TScrollElement extends Element | Window, TIt
|
|
|
68
69
|
scrollingDelay?: number;
|
|
69
70
|
indexAttribute?: string;
|
|
70
71
|
initialMeasurementsCache?: VirtualItem[];
|
|
72
|
+
lanes?: number;
|
|
71
73
|
}
|
|
72
74
|
export declare class Virtualizer<TScrollElement extends Element | Window, TItemElement extends Element> {
|
|
73
75
|
private unsubs;
|
|
@@ -97,6 +99,7 @@ export declare class Virtualizer<TScrollElement extends Element | Window, TItemE
|
|
|
97
99
|
_willUpdate: () => void;
|
|
98
100
|
private getSize;
|
|
99
101
|
private memoOptions;
|
|
102
|
+
private getFurthestMeasurement;
|
|
100
103
|
private getMeasurements;
|
|
101
104
|
calculateRange: () => {
|
|
102
105
|
startIndex: number;
|
package/build/lib/index.esm.js
CHANGED
|
@@ -44,7 +44,7 @@ var observeElementRect = function observeElementRect(instance, cb) {
|
|
|
44
44
|
handler(element.getBoundingClientRect());
|
|
45
45
|
var observer = new ResizeObserver(function (entries) {
|
|
46
46
|
var entry = entries[0];
|
|
47
|
-
if (entry) {
|
|
47
|
+
if (entry != null && entry.borderBoxSize) {
|
|
48
48
|
var box = entry.borderBoxSize[0];
|
|
49
49
|
if (box) {
|
|
50
50
|
handler({
|
|
@@ -115,7 +115,7 @@ var observeWindowOffset = function observeWindowOffset(instance, cb) {
|
|
|
115
115
|
};
|
|
116
116
|
};
|
|
117
117
|
var measureElement = function measureElement(element, entry, instance) {
|
|
118
|
-
if (entry) {
|
|
118
|
+
if (entry != null && entry.borderBoxSize) {
|
|
119
119
|
var box = entry.borderBoxSize[0];
|
|
120
120
|
if (box) {
|
|
121
121
|
var size = Math.round(box[instance.options.horizontal ? 'inlineSize' : 'blockSize']);
|
|
@@ -215,7 +215,8 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
215
215
|
scrollMargin: 0,
|
|
216
216
|
scrollingDelay: 150,
|
|
217
217
|
indexAttribute: 'data-index',
|
|
218
|
-
initialMeasurementsCache: []
|
|
218
|
+
initialMeasurementsCache: [],
|
|
219
|
+
lanes: 1
|
|
219
220
|
}, opts);
|
|
220
221
|
};
|
|
221
222
|
this.notify = function () {
|
|
@@ -289,6 +290,28 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
289
290
|
}, {
|
|
290
291
|
key: false
|
|
291
292
|
});
|
|
293
|
+
this.getFurthestMeasurement = function (measurements, index) {
|
|
294
|
+
var furthestMeasurementsFound = new Map();
|
|
295
|
+
var furthestMeasurements = new Map();
|
|
296
|
+
for (var m = index - 1; m >= 0; m--) {
|
|
297
|
+
var measurement = measurements[m];
|
|
298
|
+
if (furthestMeasurementsFound.has(measurement.lane)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
var previousFurthestMeasurement = furthestMeasurements.get(measurement.lane);
|
|
302
|
+
if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {
|
|
303
|
+
furthestMeasurements.set(measurement.lane, measurement);
|
|
304
|
+
} else if (measurement.end < previousFurthestMeasurement.end) {
|
|
305
|
+
furthestMeasurementsFound.set(measurement.lane, true);
|
|
306
|
+
}
|
|
307
|
+
if (furthestMeasurementsFound.size === _this.options.lanes) {
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return furthestMeasurements.size === _this.options.lanes ? Array.from(furthestMeasurements.values()).sort(function (a, b) {
|
|
312
|
+
return a.end - b.end;
|
|
313
|
+
})[0] : undefined;
|
|
314
|
+
};
|
|
292
315
|
this.getMeasurements = memo(function () {
|
|
293
316
|
return [_this.memoOptions(), _this.itemSizeCache];
|
|
294
317
|
}, function (_ref4, itemSizeCache) {
|
|
@@ -301,16 +324,19 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
301
324
|
var measurements = _this.measurementsCache.slice(0, min);
|
|
302
325
|
for (var _i2 = min; _i2 < count; _i2++) {
|
|
303
326
|
var key = getItemKey(_i2);
|
|
327
|
+
var furthestMeasurement = _this.options.lanes === 1 ? measurements[_i2 - 1] : _this.getFurthestMeasurement(measurements, _i2);
|
|
328
|
+
var start = furthestMeasurement ? furthestMeasurement.end : paddingStart + scrollMargin;
|
|
304
329
|
var measuredSize = itemSizeCache.get(key);
|
|
305
|
-
var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
|
|
306
330
|
var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
|
|
307
331
|
var end = start + size;
|
|
332
|
+
var lane = furthestMeasurement ? furthestMeasurement.lane : _i2 % _this.options.lanes;
|
|
308
333
|
measurements[_i2] = {
|
|
309
334
|
index: _i2,
|
|
310
335
|
start: start,
|
|
311
336
|
size: size,
|
|
312
337
|
end: end,
|
|
313
|
-
key: key
|
|
338
|
+
key: key,
|
|
339
|
+
lane: lane
|
|
314
340
|
};
|
|
315
341
|
}
|
|
316
342
|
_this.measurementsCache = measurements;
|
|
@@ -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 = (rect: Rect) => {\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 memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\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 () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\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 getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\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","memoOptions","memo","getMeasurements","length","measurements","slice","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","prevNode","isConnected","set","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getVirtualItemForOffset","notUndefined","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","has","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","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 lane: 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: Rect) => {\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?.borderBoxSize) {\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?.borderBoxSize) {\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 lanes?: number\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 lanes: 1,\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 memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\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\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\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 () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\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 getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\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","borderBoxSize","box","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","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","memo","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","a","b","getMeasurements","length","slice","furthestMeasurement","measuredSize","estimateSize","process","env","NODE_ENV","calculateRange","outerSize","initialDeps","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","notUndefined","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","approxEqual","scrollBy","getTotalSize","scrollToFn","measure","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
package/build/lib/index.js
CHANGED
|
@@ -47,7 +47,7 @@ var observeElementRect = function observeElementRect(instance, cb) {
|
|
|
47
47
|
handler(element.getBoundingClientRect());
|
|
48
48
|
var observer = new ResizeObserver(function (entries) {
|
|
49
49
|
var entry = entries[0];
|
|
50
|
-
if (entry) {
|
|
50
|
+
if (entry != null && entry.borderBoxSize) {
|
|
51
51
|
var box = entry.borderBoxSize[0];
|
|
52
52
|
if (box) {
|
|
53
53
|
handler({
|
|
@@ -118,7 +118,7 @@ var observeWindowOffset = function observeWindowOffset(instance, cb) {
|
|
|
118
118
|
};
|
|
119
119
|
};
|
|
120
120
|
var measureElement = function measureElement(element, entry, instance) {
|
|
121
|
-
if (entry) {
|
|
121
|
+
if (entry != null && entry.borderBoxSize) {
|
|
122
122
|
var box = entry.borderBoxSize[0];
|
|
123
123
|
if (box) {
|
|
124
124
|
var size = Math.round(box[instance.options.horizontal ? 'inlineSize' : 'blockSize']);
|
|
@@ -218,7 +218,8 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
218
218
|
scrollMargin: 0,
|
|
219
219
|
scrollingDelay: 150,
|
|
220
220
|
indexAttribute: 'data-index',
|
|
221
|
-
initialMeasurementsCache: []
|
|
221
|
+
initialMeasurementsCache: [],
|
|
222
|
+
lanes: 1
|
|
222
223
|
}, opts);
|
|
223
224
|
};
|
|
224
225
|
this.notify = function () {
|
|
@@ -292,6 +293,28 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
292
293
|
}, {
|
|
293
294
|
key: false
|
|
294
295
|
});
|
|
296
|
+
this.getFurthestMeasurement = function (measurements, index) {
|
|
297
|
+
var furthestMeasurementsFound = new Map();
|
|
298
|
+
var furthestMeasurements = new Map();
|
|
299
|
+
for (var m = index - 1; m >= 0; m--) {
|
|
300
|
+
var measurement = measurements[m];
|
|
301
|
+
if (furthestMeasurementsFound.has(measurement.lane)) {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
var previousFurthestMeasurement = furthestMeasurements.get(measurement.lane);
|
|
305
|
+
if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {
|
|
306
|
+
furthestMeasurements.set(measurement.lane, measurement);
|
|
307
|
+
} else if (measurement.end < previousFurthestMeasurement.end) {
|
|
308
|
+
furthestMeasurementsFound.set(measurement.lane, true);
|
|
309
|
+
}
|
|
310
|
+
if (furthestMeasurementsFound.size === _this.options.lanes) {
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return furthestMeasurements.size === _this.options.lanes ? Array.from(furthestMeasurements.values()).sort(function (a, b) {
|
|
315
|
+
return a.end - b.end;
|
|
316
|
+
})[0] : undefined;
|
|
317
|
+
};
|
|
295
318
|
this.getMeasurements = utils.memo(function () {
|
|
296
319
|
return [_this.memoOptions(), _this.itemSizeCache];
|
|
297
320
|
}, function (_ref4, itemSizeCache) {
|
|
@@ -304,16 +327,19 @@ var Virtualizer = function Virtualizer(_opts) {
|
|
|
304
327
|
var measurements = _this.measurementsCache.slice(0, min);
|
|
305
328
|
for (var _i2 = min; _i2 < count; _i2++) {
|
|
306
329
|
var key = getItemKey(_i2);
|
|
330
|
+
var furthestMeasurement = _this.options.lanes === 1 ? measurements[_i2 - 1] : _this.getFurthestMeasurement(measurements, _i2);
|
|
331
|
+
var start = furthestMeasurement ? furthestMeasurement.end : paddingStart + scrollMargin;
|
|
307
332
|
var measuredSize = itemSizeCache.get(key);
|
|
308
|
-
var start = measurements[_i2 - 1] ? measurements[_i2 - 1].end : paddingStart + scrollMargin;
|
|
309
333
|
var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);
|
|
310
334
|
var end = start + size;
|
|
335
|
+
var lane = furthestMeasurement ? furthestMeasurement.lane : _i2 % _this.options.lanes;
|
|
311
336
|
measurements[_i2] = {
|
|
312
337
|
index: _i2,
|
|
313
338
|
start: start,
|
|
314
339
|
size: size,
|
|
315
340
|
end: end,
|
|
316
|
-
key: key
|
|
341
|
+
key: key,
|
|
342
|
+
lane: lane
|
|
317
343
|
};
|
|
318
344
|
}
|
|
319
345
|
_this.measurementsCache = measurements;
|