@tanstack/virtual-core 3.0.0-beta.36 → 3.0.0-beta.40
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.esm.js +20 -16
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +20 -16
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +20 -16
- package/build/lib/index.mjs.map +1 -1
- package/build/umd/index.development.js +20 -16
- 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 +34 -24
|
@@ -393,7 +393,7 @@
|
|
|
393
393
|
}
|
|
394
394
|
return parseInt(indexStr, 10);
|
|
395
395
|
};
|
|
396
|
-
this._measureElement = function (node,
|
|
396
|
+
this._measureElement = function (node, sync) {
|
|
397
397
|
var _this$itemSizeCache$i;
|
|
398
398
|
var index = _this.indexFromElement(node);
|
|
399
399
|
var item = _this.measurementsCache[index];
|
|
@@ -403,18 +403,23 @@
|
|
|
403
403
|
var prevNode = _this.measureElementCache[item.key];
|
|
404
404
|
var ro = _this.getResizeObserver();
|
|
405
405
|
if (!node.isConnected) {
|
|
406
|
-
|
|
407
|
-
|
|
406
|
+
ro == null ? void 0 : ro.unobserve(node);
|
|
407
|
+
if (node === prevNode) {
|
|
408
408
|
delete _this.measureElementCache[item.key];
|
|
409
409
|
}
|
|
410
410
|
return;
|
|
411
411
|
}
|
|
412
|
-
if (
|
|
412
|
+
if (prevNode !== node) {
|
|
413
413
|
if (prevNode) {
|
|
414
414
|
ro == null ? void 0 : ro.unobserve(prevNode);
|
|
415
415
|
}
|
|
416
|
-
_this.measureElementCache[item.key] = node;
|
|
417
416
|
ro == null ? void 0 : ro.observe(node);
|
|
417
|
+
_this.measureElementCache[item.key] = node;
|
|
418
|
+
} else {
|
|
419
|
+
if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {
|
|
420
|
+
prevNode.__virtualizerSkipFirstNotSync = true;
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
418
423
|
}
|
|
419
424
|
var measuredItemSize = _this.options.measureElement(node, _this);
|
|
420
425
|
var itemSize = (_this$itemSizeCache$i = _this.itemSizeCache[item.key]) != null ? _this$itemSizeCache$i : item.size;
|
|
@@ -458,25 +463,27 @@
|
|
|
458
463
|
}
|
|
459
464
|
});
|
|
460
465
|
this.getOffsetForAlignment = function (toOffset, align) {
|
|
461
|
-
var offset = _this.scrollOffset;
|
|
462
466
|
var size = _this.getSize();
|
|
463
467
|
if (align === 'auto') {
|
|
464
|
-
if (toOffset <=
|
|
468
|
+
if (toOffset <= _this.scrollOffset) {
|
|
465
469
|
align = 'start';
|
|
466
|
-
} else if (toOffset >=
|
|
470
|
+
} else if (toOffset >= _this.scrollOffset + size) {
|
|
467
471
|
align = 'end';
|
|
468
472
|
} else {
|
|
469
473
|
align = 'start';
|
|
470
474
|
}
|
|
471
475
|
}
|
|
472
476
|
if (align === 'start') {
|
|
473
|
-
|
|
477
|
+
toOffset = toOffset;
|
|
474
478
|
} else if (align === 'end') {
|
|
475
|
-
|
|
479
|
+
toOffset = toOffset - size;
|
|
476
480
|
} else if (align === 'center') {
|
|
477
|
-
|
|
481
|
+
toOffset = toOffset - size / 2;
|
|
478
482
|
}
|
|
479
|
-
|
|
483
|
+
var scrollSizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight';
|
|
484
|
+
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[scrollSizeProp] : _this.scrollElement[scrollSizeProp] : 0;
|
|
485
|
+
var maxOffset = scrollSize - _this.getSize();
|
|
486
|
+
return Math.max(Math.min(maxOffset, toOffset), 0);
|
|
480
487
|
};
|
|
481
488
|
this.scrollToOffset = function (toOffset, _temp) {
|
|
482
489
|
var _ref4 = _temp === void 0 ? {} : _temp,
|
|
@@ -529,10 +536,7 @@
|
|
|
529
536
|
}
|
|
530
537
|
var getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(measurement) {
|
|
531
538
|
var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;
|
|
532
|
-
|
|
533
|
-
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0;
|
|
534
|
-
var maxOffset = scrollSize - _this.getSize();
|
|
535
|
-
return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align));
|
|
539
|
+
return _this.getOffsetForAlignment(toOffset, align);
|
|
536
540
|
};
|
|
537
541
|
var toOffset = getOffsetForIndexAndAlignment(measurement);
|
|
538
542
|
var options = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const getMeasurement = () => {\n const measurements = this.getMeasurements()\n const measurement =\n measurements[Math.max(0, Math.min(index, this.options.count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n return measurement\n }\n\n const measurement = getMeasurement()\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n const sizeProp = this.options.horizontal ? 'scrollWidth' : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[sizeProp]\n : this.scrollElement[sizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.min(maxOffset, this.getOffsetForAlignment(toOffset, align))\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(getMeasurement())\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","entry","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","isDynamic","keys","sync","scrollToIndex","getMeasurement","Error","getOffsetForIndexAndAlignment","sizeProp","scrollSize","document","documentElement","maxOffset","approxEqual","a","b","abs","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const getMeasurement = () => {\n const measurements = this.getMeasurements()\n const measurement =\n measurements[Math.max(0, Math.min(index, this.options.count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n return measurement\n }\n\n const measurement = getMeasurement()\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(getMeasurement())\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","entry","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","scrollToOffset","isDynamic","keys","scrollToIndex","getMeasurement","Error","getOffsetForIndexAndAlignment","approxEqual","a","b","abs","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,r=[];return function(){var i;n.key&&null!=n.debug&&n.debug()&&(i=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return o;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),o=t.apply(void 0,l),null==n||null==n.onChange||n.onChange(o),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-i))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return o}}var o=function(e){return e},r=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=t;r<=n;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},s=function(e){return function(t,n){if(t.scrollElement){var o=i[e][0],r=i[e][1],s=t.scrollElement[o],l=t.scrollElement[r],a=function(){var e=t.scrollElement[t.options.horizontal?o:r];n(e)};a();var u=function(e){var n=e.currentTarget,i=n[o],u=n[r];(t.options.horizontal?s-i:l-u)&&a(),s=i,l=u};return t.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){t.scrollElement.removeEventListener("scroll",u)}}}},l=s("element"),a=s("window"),u=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,s=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){s._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),s.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:r,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==s.options.onChange||s.options.onChange(s)},this.cleanup=function(){s.unsubs.filter(Boolean).forEach((function(e){return e()})),s.unsubs=[],s.scrollElement=null},this._didMount=function(){var e=s.getResizeObserver();return Object.values(s.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),s.cleanup()}},this._willUpdate=function(){var e=s.options.getScrollElement();s.scrollElement!==e?(s.cleanup(),s.scrollElement=e,s._scrollToOffset(s.scrollOffset,{adjustments:void 0,behavior:void 0}),s.unsubs.push(s.options.observeElementRect(s,(function(e){s.scrollRect=e,s.calculateRange()}))),s.unsubs.push(s.options.observeElementOffset(s,(function(e){if(s.scrollAdjustments=0,s.scrollOffset!==e){null!==s.isScrollingTimeoutId&&(clearTimeout(s.isScrollingTimeoutId),s.isScrollingTimeoutId=null);var t=function(e){s.isScrolling!==e&&(s.isScrolling=e,s.notify())};s.scrollDirection=s.scrollOffset<e?"forward":"backward",s.scrollOffset=e,s.calculateRange(),t(!0),s.isScrollingTimeoutId=setTimeout((function(){s.isScrollingTimeoutId=null,s.scrollDirection=null,t(!1)}),s.options.scrollingDelay)}})))):s.isScrolling||s.calculateRange()},this.getSize=function(){return s.scrollRect[s.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[s.options.count,s.options.paddingStart,s.options.scrollMargin,s.options.getItemKey,s.itemSizeCache]}),(function(e,t,n,o,r){var i=s.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,s.pendingMeasuredCacheIndexes):0;s.pendingMeasuredCacheIndexes=[];for(var l=s.measurementsCache.slice(0,i),a=i;a<e;a++){var u=o(a),c=r[u],d=l[a-1]?l[a-1].end:t+n,f="number"==typeof c?c:s.options.estimateSize(a),h=d+f;l[a]={index:a,start:d,size:f,end:h,key:u}}return s.measurementsCache=l,l}),{key:!1,debug:function(){return s.options.debug}}),this.calculateRange=n((function(){return[s.getMeasurements(),s.getSize(),s.scrollOffset]}),(function(e,t,n){var o=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,r=t.length-1,i=function(e,t,n,o){for(;e<=t;){var r=(e+t)/2|0,i=n(r);if(i<o)e=r+1;else{if(!(i>o))return r;t=r-1}}return e>0?e-1:0}(0,r,(function(e){return t[e].start}),o),s=i;for(;s<r&&t[s].end<o+n;)s++;return{startIndex:i,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n});return o.startIndex===s.range.startIndex&&o.endIndex===s.range.endIndex||(s.range=o,s.notify()),s.range}),{key:!1,debug:function(){return s.options.debug}}),this.getIndexes=n((function(){return[s.options.rangeExtractor,s.range,s.options.overscan,s.options.count]}),(function(e,n,o,r){return e(t({},n,{overscan:o,count:r}))}),{key:!1,debug:function(){return s.options.debug}}),this.indexFromElement=function(e){var t=s.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,n){var o,r=s.indexFromElement(e),i=s.measurementsCache[r];if(i){var l=s.measureElementCache[i.key],a=s.getResizeObserver();if(e.isConnected){l&&l===e||(l&&(null==a||a.unobserve(l)),s.measureElementCache[i.key]=e,null==a||a.observe(e));var u,c=s.options.measureElement(e,s),d=c-(null!=(o=s.itemSizeCache[i.key])?o:i.size);if(0!==d)i.start<s.scrollOffset&&s._scrollToOffset(s.scrollOffset,{adjustments:s.scrollAdjustments+=d,behavior:void 0}),s.pendingMeasuredCacheIndexes.push(r),s.itemSizeCache=t({},s.itemSizeCache,((u={})[i.key]=c,u)),s.notify()}else l&&(null==a||a.unobserve(l),delete s.measureElementCache[i.key])}},this.measureElement=function(e){e&&s._measureElement(e,!0)},this.getVirtualItems=n((function(){return[s.getIndexes(),s.getMeasurements()]}),(function(e,t){for(var n=[],o=0,r=e.length;o<r;o++){var i=t[e[o]];n.push(i)}return n}),{key:!1,debug:function(){return s.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=s.scrollOffset,o=s.getSize();return"auto"===t&&(t=e<=n?"start":e>=n+o?"end":"start"),"start"===t?e:"end"===t?e-o:"center"===t?e-o/2:e},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"start":o,i=n.behavior;if(Object.keys(s.measureElementCache).length>0&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var l={adjustments:void 0,behavior:i,sync:!1};s._scrollToOffset(s.getOffsetForAlignment(e,r),l)}},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,i=n.behavior;null!==s.scrollToIndexTimeoutId&&(clearTimeout(s.scrollToIndexTimeoutId),s.scrollToIndexTimeoutId=null);var l=Object.keys(s.measureElementCache).length>0;if(l&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var a=function(){var t=s.getMeasurements()[Math.max(0,Math.min(e,s.options.count-1))];if(!t)throw new Error("VirtualItem not found for index = "+e);return t},u=a();if("auto"===r)if(u.end>=s.scrollOffset+s.getSize()-s.options.scrollPaddingEnd)r="end";else{if(!(u.start<=s.scrollOffset+s.options.scrollPaddingStart))return;r="start"}var c=function(e){var t="end"===r?e.end+s.options.scrollPaddingEnd:e.start-s.options.scrollPaddingStart,n=s.options.horizontal?"scrollWidth":"scrollHeight",o=(s.scrollElement?"document"in s.scrollElement?s.scrollElement.document.documentElement[n]:s.scrollElement[n]:0)-s.getSize();return Math.min(o,s.getOffsetForAlignment(t,r))},d=c(u),f={adjustments:void 0,behavior:i};s._scrollToOffset(d,f);l&&(s.scrollToIndexTimeoutId=setTimeout((function(){var t,n;if(s.scrollToIndexTimeoutId=null,!!s.measureElementCache[s.options.getItemKey(e)]){var o=c(a());t=o,n=s.scrollOffset,Math.abs(t-n)<1||s.scrollToIndex(e,{align:r,behavior:i})}else s.scrollToIndex(e,{align:r,behavior:i})})))}},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;Object.keys(s.measureElementCache).length>0&&"smooth"===n?console.warn("The `smooth` scroll behavior is not supported with dynamic size."):s._scrollToOffset(s.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=s.getMeasurements()[s.options.count-1])?void 0:e.end)||s.options.paddingStart)-s.options.scrollMargin+s.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;s.options.scrollToFn(e,{behavior:o,adjustments:n},s)},this.measure=function(){s.itemSizeCache={},s.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){s.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},e.measureElement=u,e.memo=n,e.observeElementOffset=l,e.observeElementRect=function(e,t){var n=new ResizeObserver((function(e){var n=e[0];if(n){var o=n.contentRect,r=o.width,i=o.height;t({width:Math.round(r),height:Math.round(i)})}else t({width:0,height:0})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),n.observe(e.scrollElement),function(){n.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,t){var n=function(e,t){var n={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==n.width:o.height!==n.height)&&t(o),n=o}}(e,t),o=function(){return n({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
11
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,r=[];return function(){var i;n.key&&null!=n.debug&&n.debug()&&(i=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return o;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),o=t.apply(void 0,l),null==n||null==n.onChange||n.onChange(o),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-i))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return o}}var o=function(e){return e},r=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=t;r<=n;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},s=function(e){return function(t,n){if(t.scrollElement){var o=i[e][0],r=i[e][1],s=t.scrollElement[o],l=t.scrollElement[r],a=function(){var e=t.scrollElement[t.options.horizontal?o:r];n(e)};a();var u=function(e){var n=e.currentTarget,i=n[o],u=n[r];(t.options.horizontal?s-i:l-u)&&a(),s=i,l=u};return t.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){t.scrollElement.removeEventListener("scroll",u)}}}},l=s("element"),a=s("window"),u=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,s=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){s._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),s.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:r,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==s.options.onChange||s.options.onChange(s)},this.cleanup=function(){s.unsubs.filter(Boolean).forEach((function(e){return e()})),s.unsubs=[],s.scrollElement=null},this._didMount=function(){var e=s.getResizeObserver();return Object.values(s.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),s.cleanup()}},this._willUpdate=function(){var e=s.options.getScrollElement();s.scrollElement!==e?(s.cleanup(),s.scrollElement=e,s._scrollToOffset(s.scrollOffset,{adjustments:void 0,behavior:void 0}),s.unsubs.push(s.options.observeElementRect(s,(function(e){s.scrollRect=e,s.calculateRange()}))),s.unsubs.push(s.options.observeElementOffset(s,(function(e){if(s.scrollAdjustments=0,s.scrollOffset!==e){null!==s.isScrollingTimeoutId&&(clearTimeout(s.isScrollingTimeoutId),s.isScrollingTimeoutId=null);var t=function(e){s.isScrolling!==e&&(s.isScrolling=e,s.notify())};s.scrollDirection=s.scrollOffset<e?"forward":"backward",s.scrollOffset=e,s.calculateRange(),t(!0),s.isScrollingTimeoutId=setTimeout((function(){s.isScrollingTimeoutId=null,s.scrollDirection=null,t(!1)}),s.options.scrollingDelay)}})))):s.isScrolling||s.calculateRange()},this.getSize=function(){return s.scrollRect[s.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[s.options.count,s.options.paddingStart,s.options.scrollMargin,s.options.getItemKey,s.itemSizeCache]}),(function(e,t,n,o,r){var i=s.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,s.pendingMeasuredCacheIndexes):0;s.pendingMeasuredCacheIndexes=[];for(var l=s.measurementsCache.slice(0,i),a=i;a<e;a++){var u=o(a),c=r[u],d=l[a-1]?l[a-1].end:t+n,f="number"==typeof c?c:s.options.estimateSize(a),h=d+f;l[a]={index:a,start:d,size:f,end:h,key:u}}return s.measurementsCache=l,l}),{key:!1,debug:function(){return s.options.debug}}),this.calculateRange=n((function(){return[s.getMeasurements(),s.getSize(),s.scrollOffset]}),(function(e,t,n){var o=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,r=t.length-1,i=function(e,t,n,o){for(;e<=t;){var r=(e+t)/2|0,i=n(r);if(i<o)e=r+1;else{if(!(i>o))return r;t=r-1}}return e>0?e-1:0}(0,r,(function(e){return t[e].start}),o),s=i;for(;s<r&&t[s].end<o+n;)s++;return{startIndex:i,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n});return o.startIndex===s.range.startIndex&&o.endIndex===s.range.endIndex||(s.range=o,s.notify()),s.range}),{key:!1,debug:function(){return s.options.debug}}),this.getIndexes=n((function(){return[s.options.rangeExtractor,s.range,s.options.overscan,s.options.count]}),(function(e,n,o,r){return e(t({},n,{overscan:o,count:r}))}),{key:!1,debug:function(){return s.options.debug}}),this.indexFromElement=function(e){var t=s.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,n){var o,r=s.indexFromElement(e),i=s.measurementsCache[r];if(i){var l=s.measureElementCache[i.key],a=s.getResizeObserver();if(!e.isConnected)return null==a||a.unobserve(e),void(e===l&&delete s.measureElementCache[i.key]);if(l!==e)l&&(null==a||a.unobserve(l)),null==a||a.observe(e),s.measureElementCache[i.key]=e;else if(!n&&!l.__virtualizerSkipFirstNotSync)return void(l.__virtualizerSkipFirstNotSync=!0);var u,c=s.options.measureElement(e,s),d=c-(null!=(o=s.itemSizeCache[i.key])?o:i.size);if(0!==d)i.start<s.scrollOffset&&s._scrollToOffset(s.scrollOffset,{adjustments:s.scrollAdjustments+=d,behavior:void 0}),s.pendingMeasuredCacheIndexes.push(r),s.itemSizeCache=t({},s.itemSizeCache,((u={})[i.key]=c,u)),s.notify()}},this.measureElement=function(e){e&&s._measureElement(e,!0)},this.getVirtualItems=n((function(){return[s.getIndexes(),s.getMeasurements()]}),(function(e,t){for(var n=[],o=0,r=e.length;o<r;o++){var i=t[e[o]];n.push(i)}return n}),{key:!1,debug:function(){return s.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=s.getSize();"auto"===t&&(t=e<=s.scrollOffset?"start":e>=s.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=s.options.horizontal?"scrollWidth":"scrollHeight",r=(s.scrollElement?"document"in s.scrollElement?s.scrollElement.document.documentElement[o]:s.scrollElement[o]:0)-s.getSize();return Math.max(Math.min(r,e),0)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"start":o,i=n.behavior;if(Object.keys(s.measureElementCache).length>0&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var l={adjustments:void 0,behavior:i,sync:!1};s._scrollToOffset(s.getOffsetForAlignment(e,r),l)}},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,i=n.behavior;null!==s.scrollToIndexTimeoutId&&(clearTimeout(s.scrollToIndexTimeoutId),s.scrollToIndexTimeoutId=null);var l=Object.keys(s.measureElementCache).length>0;if(l&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var a=function(){var t=s.getMeasurements()[Math.max(0,Math.min(e,s.options.count-1))];if(!t)throw new Error("VirtualItem not found for index = "+e);return t},u=a();if("auto"===r)if(u.end>=s.scrollOffset+s.getSize()-s.options.scrollPaddingEnd)r="end";else{if(!(u.start<=s.scrollOffset+s.options.scrollPaddingStart))return;r="start"}var c=function(e){var t="end"===r?e.end+s.options.scrollPaddingEnd:e.start-s.options.scrollPaddingStart;return s.getOffsetForAlignment(t,r)},d=c(u),f={adjustments:void 0,behavior:i};s._scrollToOffset(d,f);l&&(s.scrollToIndexTimeoutId=setTimeout((function(){var t,n;if(s.scrollToIndexTimeoutId=null,!!s.measureElementCache[s.options.getItemKey(e)]){var o=c(a());t=o,n=s.scrollOffset,Math.abs(t-n)<1||s.scrollToIndex(e,{align:r,behavior:i})}else s.scrollToIndex(e,{align:r,behavior:i})})))}},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;Object.keys(s.measureElementCache).length>0&&"smooth"===n?console.warn("The `smooth` scroll behavior is not supported with dynamic size."):s._scrollToOffset(s.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=s.getMeasurements()[s.options.count-1])?void 0:e.end)||s.options.paddingStart)-s.options.scrollMargin+s.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;s.options.scrollToFn(e,{behavior:o,adjustments:n},s)},this.measure=function(){s.itemSizeCache={},s.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){s.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},e.measureElement=u,e.memo=n,e.observeElementOffset=l,e.observeElementRect=function(e,t){var n=new ResizeObserver((function(e){var n=e[0];if(n){var o=n.contentRect,r=o.width,i=o.height;t({width:Math.round(r),height:Math.round(i)})}else t({width:0,height:0})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),n.observe(e.scrollElement),function(){n.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,t){var n=function(e,t){var n={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==n.width:o.height!==n.height)&&t(o),n=o}}(e,t),o=function(){return n({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
12
12
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const getMeasurement = () => {\n const measurements = this.getMeasurements()\n const measurement =\n measurements[Math.max(0, Math.min(index, this.options.count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n return measurement\n }\n\n const measurement = getMeasurement()\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n const sizeProp = this.options.horizontal ? 'scrollWidth' : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[sizeProp]\n : this.scrollElement[sizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.min(maxOffset, this.getOffsetForAlignment(toOffset, align))\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(getMeasurement())\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","result","deps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","scrollProps","element","window","createOffsetObserver","mode","instance","cb","scrollElement","propX","propY","prevX","prevY","scroll","offset","options","horizontal","onScroll","e","target","currentTarget","scrollX","scrollY","addEventListener","capture","passive","removeEventListener","observeElementOffset","observeWindowOffset","measureElement","getBoundingClientRect","_ro","_this","this","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","ResizeObserver","entries","forEach","entry","_measureElement","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","undefined","behavior","observeElementRect","rect","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","outerSize","_ref8","low","high","getCurrentValue","value","middle","currentValue","findNearestBinarySearch","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","_sync","_this$itemSizeCache$i","item","prevNode","isConnected","unobserve","_extends2","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","toOffset","align","scrollToOffset","_temp","_ref4","_ref4$align","keys","sync","scrollToIndex","_temp2","_ref5","_ref5$align","isDynamic","getMeasurement","Error","getOffsetForIndexAndAlignment","sizeProp","maxOffset","document","documentElement","a","b","abs","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref7","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","observer","contentRect","memoizedCallback","prev","memoRectCallback","onResize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n const getMeasurement = () => {\n const measurements = this.getMeasurements()\n const measurement =\n measurements[Math.max(0, Math.min(index, this.options.count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n return measurement\n }\n\n const measurement = getMeasurement()\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n\n if (isDynamic) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const toOffset = getOffsetForIndexAndAlignment(getMeasurement())\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic && behavior === 'smooth') {\n console.warn(\n 'The `smooth` scroll behavior is not supported with dynamic size.',\n )\n return\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","result","deps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","scrollProps","element","window","createOffsetObserver","mode","instance","cb","scrollElement","propX","propY","prevX","prevY","scroll","offset","options","horizontal","onScroll","e","target","currentTarget","scrollX","scrollY","addEventListener","capture","passive","removeEventListener","observeElementOffset","observeWindowOffset","measureElement","getBoundingClientRect","_ro","_this","this","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","ResizeObserver","entries","forEach","entry","_measureElement","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","undefined","behavior","observeElementRect","rect","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","outerSize","_ref8","low","high","getCurrentValue","value","middle","currentValue","findNearestBinarySearch","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","sync","_this$itemSizeCache$i","item","prevNode","isConnected","unobserve","__virtualizerSkipFirstNotSync","_extends2","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","scrollToOffset","_temp","_ref4","_ref4$align","keys","scrollToIndex","_temp2","_ref5","_ref5$align","isDynamic","getMeasurement","Error","getOffsetForIndexAndAlignment","a","b","abs","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref7","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","observer","contentRect","memoizedCallback","prev","memoRectCallback","onResize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref"],"mappings":";;;;;;;;;;udAIO,SAASA,EACdC,EACAC,EACAC,GAMA,IACIC,EADAC,EAAc,GAGlB,OAAO,WACL,IAAIC,EACAH,EAAKI,KAAOJ,MAAAA,EAAKK,OAALL,EAAKK,UAAWF,EAAUG,KAAKC,OAE/C,IAYIC,EAZEC,EAAUX,IAMhB,KAHEW,EAAQC,SAAWR,EAAKQ,QACxBD,EAAQE,MAAK,SAACC,EAAUC,GAAa,OAAKX,EAAKW,KAAWD,MAG1D,OAAOX,EAWT,GARAC,EAAOO,EAGHT,EAAKI,KAAOJ,MAAAA,EAAKK,OAALL,EAAKK,UAAWG,EAAaF,KAAKC,OAElDN,EAASF,EAAMU,WAAAA,EAAAA,GACX,MAAJT,GAAc,MAAdA,EAAMc,UAANd,EAAMc,SAAWb,GAEbD,EAAKI,KAAiB,MAAVJ,EAAKK,OAALL,EAAKK,QAAW,CAC9B,IAAMU,EAAaC,KAAKC,MAAgC,KAAzBX,KAAKC,MAAQJ,IAAmB,IACzDe,EAAgBF,KAAKC,MAAmC,KAA5BX,KAAKC,MAAQC,IAAsB,IAC/DW,EAAsBD,EAAgB,GAEtCE,EAAM,SAACC,EAAsBC,GAEjC,IADAD,EAAME,OAAOF,GACNA,EAAIX,OAASY,GAClBD,EAAM,IAAMA,EAEd,OAAOA,GAGTG,QAAQC,KAAI,OACHL,EAAIF,EAAe,QAAOE,EAAIL,EAAY,GAIhCC,MAAAA,2FAAAA,KAAKU,IAChB,EACAV,KAAKW,IAAI,IAAM,IAAMR,EAAqB,MAEhDnB,uBAAAA,SAAAA,EAAMI,IAEV,CAEA,OAAOH,EAEX,KCrBa2B,EAAsB,SAACf,GAAa,OAAKA,CAAK,EAE9CgB,EAAwB,SAACC,GAMpC,IALA,IAAMC,EAAQf,KAAKU,IAAII,EAAME,WAAaF,EAAMG,SAAU,GACpDC,EAAMlB,KAAKW,IAAIG,EAAMK,SAAWL,EAAMG,SAAUH,EAAMM,MAAQ,GAE9DC,EAAM,GAEHC,EAAIP,EAAOO,GAAKJ,EAAKI,IAC5BD,EAAIE,KAAKD,GAGX,OAAOD,CACT,EAgFMG,EAAc,CAClBC,QAAS,CAAC,aAAc,aACxBC,OAAQ,CAAC,UAAW,YAGhBC,EAAuB,SAACC,GAC5B,OAAO,SAACC,EAAiCC,GACvC,GAAKD,EAASE,cAAd,CAIA,IAAMC,EAAQR,EAAYI,GAAM,GAC1BK,EAAQT,EAAYI,GAAM,GAE5BM,EAAgBL,EAASE,cAAcC,GACvCG,EAAgBN,EAASE,cAAcE,GAErCG,EAAS,WACb,IAAMC,EACJR,EAASE,cAAcF,EAASS,QAAQC,WAAaP,EAAQC,GAE/DH,EAAGO,IAGLD,IAEA,IAAMI,EAAW,SAACC,GAChB,IAAMC,EAASD,EAAEE,cACXC,EAAUF,EAAOV,GACjBa,EAAUH,EAAOT,IAEnBJ,EAASS,QAAQC,WAAaL,EAAQU,EAAUT,EAAQU,IAC1DT,IAGFF,EAAQU,EACRT,EAAQU,GAQV,OALAhB,EAASE,cAAce,iBAAiB,SAAUN,EAAU,CAC1DO,SAAS,EACTC,SAAS,IAGJ,WACLnB,EAASE,cAAckB,oBAAoB,SAAUT,GApCvD,EAuCJ,EAEaU,EAAuBvB,EAAqB,WAC5CwB,EAAsBxB,EAAqB,UAE3CyB,EAAiB,SAC5B3B,EACAI,GAEA,OAAO7B,KAAKC,MACVwB,EAAQ4B,wBACNxB,EAASS,QAAQC,WAAa,QAAU,UAG9C,gBA4HE,SAAYvD,GAAwD,IArB9DsE,EAqB8DC,EAAAC,KAAAA,KAvC5DC,OAAkC,GAAED,KAE5CzB,cAAuC,KAAIyB,KAC3CE,aAAuB,EAAKF,KACpBG,qBAA6D,KAAIH,KACjEI,uBAA+D,KAAIJ,KAC3EK,kBAAmC,GAAEL,KAC7BM,cAAqC,GAAEN,KACvCO,4BAAwC,GAAEP,KAGlDQ,gBAA0C,KAAIR,KACtCS,kBAA4B,EAACT,KAC7BU,oBAGJ,GAAEV,KACEW,mBACFb,EAA6B,KAE1B,WACL,OAAIA,IAEiC,oBAAnBc,eACRd,EAAM,IAAIc,gBAAe,SAACC,GAChCA,EAAQC,SAAQ,SAACC,GACfhB,EAAKiB,gBAAgBD,EAAM7B,QAAwB,EACrD,GACF,IAEO,QAGTc,KACJ1C,MAAkD,CAChDE,WAAY,EACZG,SAAU,GACXqC,KAcDiB,WAAa,SAACzF,GACZ0F,OAAOL,QAAQrF,GAAMsF,SAAQ,SAAkBK,GAAA,IAAhBvF,EAAGuF,EAAA,QACX,IADkBA,EAAA,WACG3F,EAAaI,EACzD,IAEAmE,EAAKjB,QAAOsC,EAAA,CACVvF,OAAO,EACPwF,cAAe,EACf5D,SAAU,EACV6D,aAAc,EACdC,WAAY,EACZC,mBAAoB,EACpBC,iBAAkB,EAClB1C,YAAY,EACZ2C,WAAYtE,EACZuE,eAAgBtE,EAChBf,SAAU,WAAQ,EAClBsD,eAAAA,EACAgC,YAAa,CAAEC,MAAO,EAAGC,OAAQ,GACjCC,aAAc,EACdC,eAAgB,IAChBC,eAAgB,aAChBC,yBAA0B,IACvB1G,IAENwE,KAEOmC,OAAS,WACf,MAAApC,EAAKjB,QAAQxC,UAAbyD,EAAKjB,QAAQxC,SAAWyD,IACzBC,KAEOoC,QAAU,WAChBrC,EAAKE,OAAOoC,OAAOC,SAASxB,SAAQ,SAACyB,GAAC,OAAKA,OAC3CxC,EAAKE,OAAS,GACdF,EAAKxB,cAAgB,MACtByB,KAEDwC,UAAY,WACV,IAAMC,EAAK1C,EAAKY,oBAGhB,OAFAO,OAAOwB,OAAO3C,EAAKW,qBAAqBI,SAAQ,SAAC6B,GAAI,OAAKF,MAAAA,OAAAA,EAAAA,EAAIG,QAAQD,MAE/D,WACLF,MAAAA,GAAAA,EAAII,aAEJ9C,EAAKqC,YAERpC,KAED8C,YAAc,WACZ,IAAMvE,EAAgBwB,EAAKjB,QAAQiE,mBAE/BhD,EAAKxB,gBAAkBA,GACzBwB,EAAKqC,UAELrC,EAAKxB,cAAgBA,EAErBwB,EAAKiD,gBAAgBjD,EAAKkD,aAAc,CACtCC,iBAAaC,EACbC,cAAUD,IAGZpD,EAAKE,OAAOlC,KACVgC,EAAKjB,QAAQuE,mBAAmBtD,GAAM,SAACuD,GACrCvD,EAAKwD,WAAaD,EAClBvD,EAAKyD,gBACN,KAGHzD,EAAKE,OAAOlC,KACVgC,EAAKjB,QAAQY,qBAAqBK,GAAM,SAAClB,GAGvC,GAFAkB,EAAKU,kBAAoB,EAErBV,EAAKkD,eAAiBpE,EAA1B,CAIkC,OAA9BkB,EAAKI,uBACPsD,aAAa1D,EAAKI,sBAClBJ,EAAKI,qBAAuB,MAG9B,IAAMuD,EAAsB,SAACxD,GACvBH,EAAKG,cAAgBA,IACvBH,EAAKG,YAAcA,EACnBH,EAAKoC,WAITpC,EAAKS,gBACHT,EAAKkD,aAAepE,EAAS,UAAY,WAE3CkB,EAAKkD,aAAepE,EAEpBkB,EAAKyD,iBAELE,GAAoB,GAEpB3D,EAAKI,qBAAuBwD,YAAW,WACrC5D,EAAKI,qBAAuB,KAC5BJ,EAAKS,gBAAkB,KACvBkD,GAAoB,EACtB,GAAG3D,EAAKjB,QAAQkD,eA3BhB,CA4BD,MAEOjC,EAAKG,aACfH,EAAKyD,kBAERxD,KAEO4D,QAAU,WAChB,OAAO7D,EAAKwD,WAAWxD,EAAKjB,QAAQC,WAAa,QAAU,WAC5DiB,KAEO6D,gBAAkBxI,GACxB,WAAA,MAAM,CACJ0E,EAAKjB,QAAQlB,MACbmC,EAAKjB,QAAQwC,aACbvB,EAAKjB,QAAQiD,aACbhC,EAAKjB,QAAQ4C,WACb3B,EAAKO,cAEP,IAAA,SAAC1C,EAAO0D,EAAcS,EAAcL,EAAYpB,GAC9C,IAAMnD,EACJ4C,EAAKQ,4BAA4BrE,OAAS,EACtCM,KAAKW,UAALX,KAAYuD,EAAKQ,6BACjB,EACNR,EAAKQ,4BAA8B,GAInC,IAFA,IAAMuD,EAAe/D,EAAKM,kBAAkB0D,MAAM,EAAG5G,GAE5CW,EAAIX,EAAKW,EAAIF,EAAOE,IAAK,CAChC,IAAMlC,EAAM8F,EAAW5D,GACjBkG,EAAe1D,EAAc1E,GAC7B2B,EAAQuG,EAAahG,EAAI,GAC3BgG,EAAahG,EAAI,GAAIJ,IACrB4D,EAAeS,EACbkC,EACoB,iBAAjBD,EACHA,EACAjE,EAAKjB,QAAQoF,aAAapG,GAC1BJ,EAAMH,EAAQ0G,EACpBH,EAAahG,GAAK,CAAEzB,MAAOyB,EAAGP,MAAAA,EAAO0G,KAAAA,EAAMvG,IAAAA,EAAK9B,IAAAA,EAClD,CAIA,OAFAmE,EAAKM,kBAAoByD,EAElBA,CACT,GACA,CACElI,KAAKuI,EACLtI,MAAO,WAAA,OAAMkE,EAAKjB,QAAQjD,KAAK,IAElCmE,KAEDwD,eAAiBnI,GACf,WAAA,MAAM,CAAC0E,EAAK8D,kBAAmB9D,EAAK6D,UAAW7D,EAAKkD,aAAa,IACjE,SAACa,EAAcM,EAAWnB,GACxB,IAAM3F,EAgWZ,SAQG+G,GAAA,IAPDP,IAAAA,aACAM,IAAAA,UACAnB,IAAAA,aAMMrF,EAAQkG,EAAa5H,OAAS,EAG9BsB,EAtCwB,SAC9B8G,EACAC,EACAC,EACAC,GAEA,KAAOH,GAAOC,GAAM,CAClB,IAAMG,GAAWJ,EAAMC,GAAQ,EAAK,EAC9BI,EAAeH,EAAgBE,GAErC,GAAIC,EAAeF,EACjBH,EAAMI,EAAS,MACV,MAAIC,EAAeF,GAGxB,OAAOC,EAFPH,EAAOG,EAAS,CAGlB,CACF,CAEA,OAAIJ,EAAM,EACDA,EAAM,EAEN,CAEX,CAcqBM,CAAwB,EAAGhH,GAF5B,SAACvB,GAAa,OAAKyH,EAAazH,GAAQkB,KAAK,GAEC0F,GAC5DtF,EAAWH,EAEf,KACEG,EAAWC,GACXkG,EAAanG,GAAWD,IAAMuF,EAAemB,GAE7CzG,IAGF,MAAO,CAAEH,WAAAA,EAAYG,SAAAA,EACvB,CAvXoB6F,CAAe,CAC3BM,aAAAA,EACAM,UAAAA,EACAnB,aAAAA,IASF,OANE3F,EAAME,aAAeuC,EAAKzC,MAAME,YAChCF,EAAMK,WAAaoC,EAAKzC,MAAMK,WAE9BoC,EAAKzC,MAAQA,EACbyC,EAAKoC,UAEApC,EAAKzC,KACd,GACA,CACE1B,KAAKuI,EACLtI,MAAO,WAAA,OAAMkE,EAAKjB,QAAQjD,KAAK,IAElCmE,KAEO6E,WAAaxJ,GACnB,WAAA,MAAM,CACJ0E,EAAKjB,QAAQ6C,eACb5B,EAAKzC,MACLyC,EAAKjB,QAAQrB,SACbsC,EAAKjB,QAAQlB,MAEf,IAAA,SAAC+D,EAAgBrE,EAAOG,EAAUG,GAChC,OAAO+D,OACFrE,EAAK,CACRG,SAAAA,EACAG,MAAAA,IAEJ,GACA,CACEhC,KAAKuI,EACLtI,MAAO,WAAA,OAAMkE,EAAKjB,QAAQjD,KAAK,IAElCmE,KAED8E,iBAAmB,SAACnC,GAClB,IAAMoC,EAAgBhF,EAAKjB,QAAQmD,eAC7B+C,EAAWrC,EAAKsC,aAAaF,GAEnC,OAAKC,EAOEE,SAASF,EAAU,KANxBhI,QAAQmI,KACqBJ,2BAAAA,EAC5B,mCACO,IAIX/E,KAEOgB,gBAAkB,SAAC2B,EAAoByC,GAAkB,IAAAC,EACzDhJ,EAAQ0D,EAAK+E,iBAAiBnC,GAE9B2C,EAAOvF,EAAKM,kBAAkBhE,GACpC,GAAKiJ,EAAL,CAIA,IAAMC,EAAWxF,EAAKW,oBAAoB4E,EAAK1J,KAEzC6G,EAAK1C,EAAKY,oBAEhB,IAAKgC,EAAK6C,YAKR,aAJA/C,GAAAA,EAAIgD,UAAU9C,QACVA,IAAS4C,UACJxF,EAAKW,oBAAoB4E,EAAK1J,MAKzC,GAAI2J,IAAa5C,EACX4C,UACF9C,GAAAA,EAAIgD,UAAUF,UAEhB9C,GAAAA,EAAIG,QAAQD,GACZ5C,EAAKW,oBAAoB4E,EAAK1J,KAAO+G,OAErC,IAAKyC,IAASG,EAASG,8BAErB,YADAH,EAASG,+BAAgC,GAK7C,IAMiBC,EANXC,EAAmB7F,EAAKjB,QAAQc,eAAe+C,EAAM5C,GAIrD8F,EAAQD,GAFmCN,OAAnCD,EAAGtF,EAAKO,cAAcgF,EAAK1J,MAAQ0J,EAAAA,EAAKrB,MAItD,GAAc,IAAV4B,EACEP,EAAK/H,MAAQwC,EAAKkD,cAKpBlD,EAAKiD,gBAAgBjD,EAAKkD,aAAc,CACtCC,YAAcnD,EAAKU,mBAAqBoF,EACxCzC,cAAUD,IAIdpD,EAAKQ,4BAA4BxC,KAAK1B,GACtC0D,EAAKO,cACAc,EAAA,CAAA,EAAArB,EAAKO,gBACPgF,EAAAA,CAAAA,GAAAA,EAAK1J,KAAMgK,EACbD,IACD5F,EAAKoC,QAlDP,GAoDDnC,KAEDJ,eAAiB,SAAC+C,GACXA,GAIL5C,EAAKiB,gBAAgB2B,GAAM,IAC5B3C,KAED8F,gBAAkBzK,GAChB,WAAA,MAAM,CAAC0E,EAAK8E,aAAc9E,EAAK8D,kBAAkB,IACjD,SAACkC,EAASjC,GAGR,IAFA,IAAMkC,EAA8B,GAE3BC,EAAI,EAAGC,EAAMH,EAAQ7J,OAAQ+J,EAAIC,EAAKD,IAAK,CAClD,IACME,EAAcrC,EADViC,EAAQE,IAGlBD,EAAajI,KAAKoI,EACpB,CAEA,OAAOH,CACT,GACA,CACEpK,KAAKuI,EACLtI,MAAO,WAAA,OAAMkE,EAAKjB,QAAQjD,KAAK,IAElCmE,KAEDoG,sBAAwB,SAACC,EAAkBC,GACzC,IAAMrC,EAAOlE,EAAK6D,UAEJ,SAAV0C,IAEAA,EADED,GAAYtG,EAAKkD,aACX,QACCoD,GAAYtG,EAAKkD,aAAegB,EACjC,MAEA,SAIE,UAAVqC,IAEiB,QAAVA,EACTD,GAAsBpC,EACH,WAAVqC,IACTD,GAAsBpC,EAAO,IAG/B,IAAMsC,EAAiBxG,EAAKjB,QAAQC,WAChC,cACA,eAOEyH,GANazG,EAAKxB,cACpB,aAAcwB,EAAKxB,cACjBwB,EAAKxB,cAAckI,SAASC,gBAAgBH,GAC5CxG,EAAKxB,cAAcgI,GACrB,GAE2BxG,EAAK6D,UAEpC,OAAOpH,KAAKU,IAAIV,KAAKW,IAAIqJ,EAAWH,GAAW,IAChDrG,KAED2G,eAAiB,SACfN,EAEGO,GAAA,IAAAC,OAAA,IAAAD,EADoD,CAAE,EAAAA,EAAAE,EAAAD,EAAvDP,MAAAA,aAAQ,QAAOQ,EAAE1D,IAAAA,SAInB,GAFkBlC,OAAO6F,KAAKhH,EAAKW,qBAAqBxE,OAAS,GAEnC,WAAbkH,EACfpG,QAAQmI,KACN,wEAFJ,CAOA,IAAMrG,EAAU,CACdoE,iBAAaC,EACbC,SAAAA,EACAgC,MAAM,GAERrF,EAAKiD,gBAAgBjD,EAAKqG,sBAAsBC,EAAUC,GAAQxH,EAPlE,GAQDkB,KAEDgH,cAAgB,SACd3K,EAEG4K,GAAA,IAAAC,OAAA,IAAAD,EADkD,CAAE,EAAAA,EAAAE,EAAAD,EAArDZ,MAAAA,aAAQ,OAAMa,EAAE/D,IAAAA,SAEkB,OAAhCrD,EAAKK,yBACPqD,aAAa1D,EAAKK,wBAClBL,EAAKK,uBAAyB,MAGhC,IAAMgH,EAAYlG,OAAO6F,KAAKhH,EAAKW,qBAAqBxE,OAAS,EAEjE,GAAIkL,GAA0B,WAAbhE,EACfpG,QAAQmI,KACN,wEAFJ,CAOA,IAAMkC,EAAiB,WACrB,IACMlB,EADepG,EAAK8D,kBAEXrH,KAAKU,IAAI,EAAGV,KAAKW,IAAId,EAAO0D,EAAKjB,QAAQlB,MAAQ,KAEhE,IAAKuI,EACH,MAAM,IAAImB,MAA2CjL,qCAAAA,GAGvD,OAAO8J,GAGHA,EAAckB,IAEpB,GAAc,SAAVf,EACF,GACEH,EAAYzI,KACZqC,EAAKkD,aAAelD,EAAK6D,UAAY7D,EAAKjB,QAAQ2C,iBAElD6E,EAAQ,UACH,MACLH,EAAY5I,OACZwC,EAAKkD,aAAelD,EAAKjB,QAAQ0C,oBAIjC,OAFA8E,EAAQ,OAGV,CAGF,IAAMiB,EAAgC,SAACpB,GACrC,IAAME,EACM,QAAVC,EACIH,EAAYzI,IAAMqC,EAAKjB,QAAQ2C,iBAC/B0E,EAAY5I,MAAQwC,EAAKjB,QAAQ0C,mBAEvC,OAAOzB,EAAKqG,sBAAsBC,EAAUC,IAGxCD,EAAWkB,EAA8BpB,GAEzCrH,EAAU,CACdoE,iBAAaC,EACbC,SAAAA,GAEFrD,EAAKiD,gBAAgBqD,EAAUvH,GAI3BsI,IACFrH,EAAKK,uBAAyBuD,YAAW,WAGvC,IANiB6D,EAAWC,EAS5B,GALA1H,EAAKK,uBAAyB,OAG1BL,EAAKW,oBAAoBX,EAAKjB,QAAQ4C,WAAWrF,IAEnC,CAChB,IAAMgK,EAAWkB,EAA8BF,KAVhCG,EAYEnB,EAZSoB,EAYC1H,EAAKkD,aAZQzG,KAAKkL,IAAIF,EAAIC,GAAK,GAaxD1H,EAAKiH,cAAc3K,EAAO,CAAEiK,MAAAA,EAAOlD,SAAAA,GAEvC,MACErD,EAAKiH,cAAc3K,EAAO,CAAEiK,MAAAA,EAAOlD,SAAAA,GAEvC,IAnEF,GAqEDpD,KAED2H,SAAW,SAAC9B,EAA4D+B,GAAA,IAA3CxE,QAA2C,IAAAwE,EAAP,CAAE,EAAAA,GAAtCxE,SACTlC,OAAO6F,KAAKhH,EAAKW,qBAAqBxE,OAAS,GAEnC,WAAbkH,EACfpG,QAAQmI,KACN,oEAKJpF,EAAKiD,gBAAgBjD,EAAKkD,aAAe4C,EAAO,CAC9C3C,iBAAaC,EACbC,SAAAA,KAEHpD,KAED6H,aAAe,WAAA,IAAAC,EAAA,eACZA,EAAA/H,EAAK8D,kBAAkB9D,EAAKjB,QAAQlB,MAAQ,WAA5CkK,EAAgDpK,MAC/CqC,EAAKjB,QAAQwC,cACfvB,EAAKjB,QAAQiD,aACbhC,EAAKjB,QAAQyC,UAAU,EAAAvB,KAEjBgD,gBAAkB,SACxBnE,EAQGkJ,GAAA,IAND7E,IAAAA,YACAE,IAAAA,SAMFrD,EAAKjB,QAAQkJ,WAAWnJ,EAAQ,CAAEuE,SAAAA,EAAUF,YAAAA,GAAenD,IAC5DC,KAEDiI,QAAU,WACRlI,EAAKO,cAAgB,GACrBP,EAAKoC,UA1eLnC,KAAKiB,WAAWzF,GAChBwE,KAAKuD,WAAavD,KAAKlB,QAAQ8C,YAC/B5B,KAAKiD,aAAejD,KAAKlB,QAAQuC,cACjCrB,KAAKK,kBAAoBL,KAAKlB,QAAQoD,yBACtClC,KAAKK,kBAAkBS,SAAQ,SAACwE,GAC9BvF,EAAKO,cAAcgF,EAAK1J,KAAO0J,EAAKrB,IACtC,IAEAjE,KAAKwD,gBACP,oEApH2B,SAC3B3E,EAKAR,EAAAA,GACG,IAAA6J,EAAAC,EAAAC,EAAAC,EAJDnF,YAAAA,aAAc,EAACkF,EACfhF,IAAAA,SAIIiD,EAAWxH,EAASqE,EAE1B,OAAA7E,EAAAA,EAASE,gBAAT,MAAA2J,EAAwBI,UAAxBJ,EAAwBI,WAAQH,EAAA,CAAA,GAC7B9J,EAASS,QAAQC,WAAa,OAAS,OAAQsH,EAChDjD,EAAAA,SAAAA,EACA+E,GACJ,4EAzJkC,SAChC9J,EACAC,GAEA,IAAMiK,EAAW,IAAI3H,gBAAe,SAACC,GACnC,IAAME,EAAQF,EAAQ,GACtB,GAAIE,EAAO,CACT,IAA0BA,EAAAA,EAAMyH,YAAxB3G,IAAAA,MAAOC,IAAAA,OACfxD,EAAG,CACDuD,MAAOrF,KAAKC,MAAMoF,GAClBC,OAAQtF,KAAKC,MAAMqF,IAEvB,MACExD,EAAG,CAAEuD,MAAO,EAAGC,OAAQ,GAE3B,IAEA,GAAKzD,EAASE,cAQd,OAJAD,EAAGD,EAASE,cAAcsB,yBAE1B0I,EAAS3F,QAAQvE,EAASE,eAEnB,WACLgK,EAAS9C,UAAUpH,EAASE,eAEhC,8CAEiC,SAC/BF,EACAC,GAEA,IAAMmK,EArDiB,SACvBpK,EACAC,GAEA,IAAIoK,EAAa,CAAE5G,QAAS,EAAGD,OAAQ,GAEvC,OAAO,SAACyB,IAEJjF,EAASS,QAAQC,WACbuE,EAAKzB,QAAU6G,EAAK7G,MACpByB,EAAKxB,SAAW4G,EAAK5G,SAEzBxD,EAAGgF,GAGLoF,EAAOpF,EAEX,CAoC2BqF,CAAiBtK,EAAUC,GAC9CsK,EAAW,WAAH,OACZH,EAAiB,CACf5G,MAAOxD,EAASE,cAAcsK,WAC9B/G,OAAQzD,EAASE,cAAcuK,aAC/B,EAEJ,GAAKzK,EAASE,cAWd,OAPAqK,IAEAvK,EAASE,cAAce,iBAAiB,SAAUsJ,EAAU,CAC1DrJ,SAAS,EACTC,SAAS,IAGJ,WACLnB,EAASE,cAAckB,oBAAoB,SAAUmJ,GAEzD,iBAoE4B,SAC1B/J,EAKAR,EAAAA,GACG,IAAA0K,EAAAC,EAAAC,EAAAC,EAJDhG,YAAAA,aAAc,EAAC+F,EACf7F,IAAAA,SAIIiD,EAAWxH,EAASqE,EAE1B,OAAA7E,EAAAA,EAASE,gBAAT,MAAAwK,EAAwBT,UAAxBS,EAAwBT,WAAQU,EAAA,CAAA,GAC7B3K,EAASS,QAAQC,WAAa,OAAS,OAAQsH,EAChDjD,EAAAA,SAAAA,EACA4F,GACJ"}
|