@tanstack/virtual-core 3.0.0-beta.33 → 3.0.0-beta.34
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 +1 -1
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +1 -1
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/index.mjs.map +1 -1
- package/build/umd/index.development.js +1 -1
- 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 +1 -1
package/build/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (toOffset === offset) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (Math.round(toOffset) === Math.round(offset)) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","onIsScrollingChange","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollToOffset","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
@@ -1 +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 cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (toOffset === offset) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["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","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","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_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","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.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 cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n const onIsScrollingChange = (isScrolling: boolean) => {\n if (this.isScrolling !== isScrolling) {\n this.isScrolling = isScrolling\n this.notify()\n }\n }\n\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n\n this.scrollOffset = offset\n\n this.calculateRange()\n\n onIsScrollingChange(true)\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.scrollDirection = null\n onIsScrollingChange(false)\n }, this.options.scrollingDelay)\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (\n item.start < this.scrollOffset &&\n this.isScrolling &&\n this.scrollDirection === 'backward'\n ) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n return toOffset\n } else if (align === 'end') {\n return toOffset - size\n } else if (align === 'center') {\n return toOffset - size / 2\n }\n return toOffset\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), options)\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\n\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurements = this.getMeasurements()\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n throw new Error(`VirtualItem not found for index = ${index}`)\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const getOffsetForIndexAndAlignment = (measurement: VirtualItem) => {\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return this.getOffsetForAlignment(toOffset, align)\n }\n\n const toOffset = getOffsetForIndexAndAlignment(measurement)\n\n if (Math.round(toOffset) === Math.round(offset)) {\n return\n }\n\n const options = {\n adjustments: undefined,\n behavior,\n }\n this._scrollToOffset(toOffset, options)\n\n const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n this.pendingScrollToIndexCallback = () => {\n this.scrollToIndex(index, { align, behavior })\n }\n }\n }\n\n scrollBy = (adjustments: number, options?: { behavior: ScrollBehavior }) => {\n this._scrollToOffset(this.scrollOffset, {\n adjustments,\n behavior: options?.behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["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","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","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_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","sync","scrollToIndex","Error","getOffsetForIndexAndAlignment","isDynamic","keys","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIO,SAASA,IAAI,CAClBC,OAAyB,EACzBC,EAA6C,EAC7CC,IAIC,EACc;IACf,IAAIC,IAAW,GAAG,EAAE,CAAA;EACpB,EAAA,IAAIC,MAA2B,CAAA;EAE/B,EAAA,OAAO,YAAM;EACX,IAAA,IAAIC,OAAe,CAAA;EACnB,IAAA,IAAIH,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAEF,OAAO,GAAGG,IAAI,CAACC,GAAG,EAAE,CAAA;MAEpD,IAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;EAEzB,IAAA,IAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,UAACC,GAAQ,EAAEC,KAAa,EAAA;EAAA,MAAA,OAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAA;OAAC,CAAA,CAAA;MAEhE,IAAI,CAACH,WAAW,EAAE;EAChB,MAAA,OAAOP,MAAM,CAAA;EACf,KAAA;EAEAD,IAAAA,IAAI,GAAGO,OAAO,CAAA;EAEd,IAAA,IAAIM,UAAkB,CAAA;EACtB,IAAA,IAAId,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAES,UAAU,GAAGR,IAAI,CAACC,GAAG,EAAE,CAAA;EAEvDL,IAAAA,MAAM,GAAGH,EAAE,CAAIS,KAAAA,CAAAA,KAAAA,CAAAA,EAAAA,OAAO,CAAC,CAAA;MACvBR,IAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEe,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAdf,IAAI,CAAEe,QAAQ,CAAGb,MAAM,CAAC,CAAA;EAExB,IAAA,IAAIF,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAA,IAAA,IAAVL,IAAI,CAACK,KAAK,EAAI,EAAE;EAC9B,MAAA,IAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EAClE,MAAA,IAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;EACxE,MAAA,IAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;QAE9C,IAAME,GAAG,GAAG,SAANA,GAAG,CAAIC,GAAoB,EAAEC,GAAW,EAAK;EACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAA;EACjB,QAAA,OAAOA,GAAG,CAACZ,MAAM,GAAGa,GAAG,EAAE;YACvBD,GAAG,GAAG,GAAG,GAAGA,GAAG,CAAA;EACjB,SAAA;EACA,QAAA,OAAOA,GAAG,CAAA;SACX,CAAA;EAEDG,MAAAA,OAAO,CAACC,IAAI,CAAA,WAAA,GACHL,GAAG,CAACF,aAAa,EAAE,CAAC,CAAC,UAAKE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAC,GAIlCC,KAAAA,EAAAA,0FAAAA,GAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC/C,GACLpB,gBAAAA,EAAAA,IAAI,oBAAJA,IAAI,CAAEI,GAAG,CACV,CAAA;EACH,KAAA;EAEA,IAAA,OAAOF,MAAM,CAAA;KACd,CAAA;EACH;;EC9DA;;EAuCA;;MAEa2B,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAIhB,KAAa,EAAA;EAAA,EAAA,OAAKA,KAAK,CAAA;EAAA,EAAA;MAE9CiB,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,KAAY,EAAK;EACrD,EAAA,IAAMC,KAAK,GAAGf,IAAI,CAACU,GAAG,CAACI,KAAK,CAACE,UAAU,GAAGF,KAAK,CAACG,QAAQ,EAAE,CAAC,CAAC,CAAA;EAC5D,EAAA,IAAMC,GAAG,GAAGlB,IAAI,CAACW,GAAG,CAACG,KAAK,CAACK,QAAQ,GAAGL,KAAK,CAACG,QAAQ,EAAEH,KAAK,CAACM,KAAK,GAAG,CAAC,CAAC,CAAA;IAEtE,IAAMC,GAAG,GAAG,EAAE,CAAA;IAEd,KAAK,IAAIC,EAAC,GAAGP,KAAK,EAAEO,EAAC,IAAIJ,GAAG,EAAEI,EAAC,EAAE,EAAE;EACjCD,IAAAA,GAAG,CAACE,IAAI,CAACD,EAAC,CAAC,CAAA;EACb,GAAA;EAEA,EAAA,OAAOD,GAAG,CAAA;EACZ,EAAC;EAED,IAAMG,gBAAgB,GAAG,SAAnBA,gBAAgB,CACpBC,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAIC,IAAU,GAAG;MAAEC,MAAM,EAAE,CAAC,CAAC;EAAEC,IAAAA,KAAK,EAAE,CAAC,CAAA;KAAG,CAAA;IAE1C,OAAO,UAACC,IAAU,EAAK;MACrB,IACEL,QAAQ,CAACM,OAAO,CAACC,UAAU,GACvBF,IAAI,CAACD,KAAK,KAAKF,IAAI,CAACE,KAAK,GACzBC,IAAI,CAACF,MAAM,KAAKD,IAAI,CAACC,MAAM,EAC/B;QACAF,EAAE,CAACI,IAAI,CAAC,CAAA;EACV,KAAA;EAEAH,IAAAA,IAAI,GAAGG,IAAI,CAAA;KACZ,CAAA;EACH,CAAC,CAAA;AAEM,MAAMG,kBAAkB,GAAG,SAArBA,kBAAkB,CAC7BR,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAMQ,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAK;EAAA,IAAA,IAAA,SAAA,EAAA,UAAA,CAAA;EAC/CV,IAAAA,EAAE,CAAC;QACDG,KAAK,EAAA,CAAA,SAAA,GAAEO,OAAO,CAAC,CAAC,CAAC,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAYC,WAAW,CAACR,KAAe;QAC9CD,MAAM,EAAA,CAAA,UAAA,GAAEQ,OAAO,CAAC,CAAC,CAAC,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAYC,WAAW,CAACT,MAAAA;EAClC,KAAC,CAAC,CAAA;EACJ,GAAC,CAAC,CAAA;EAEF,EAAA,IAAI,CAACH,QAAQ,CAACa,aAAa,EAAE;EAC3B,IAAA,OAAA;EACF,GAAA;EAEAZ,EAAAA,EAAE,CAACD,QAAQ,CAACa,aAAa,CAACC,qBAAqB,EAAE,CAAC,CAAA;EAElDL,EAAAA,QAAQ,CAACM,OAAO,CAACf,QAAQ,CAACa,aAAa,CAAC,CAAA;EAExC,EAAA,OAAO,YAAM;EACXJ,IAAAA,QAAQ,CAACO,SAAS,CAAChB,QAAQ,CAACa,aAAa,CAAC,CAAA;KAC3C,CAAA;EACH,EAAC;AAEM,MAAMI,iBAAiB,GAAG,SAApBA,iBAAiB,CAC5BjB,QAA+B,EAC/BC,EAAwB,EACrB;EACH,EAAA,IAAMiB,gBAAgB,GAAGnB,gBAAgB,CAACC,QAAQ,EAAEC,EAAE,CAAC,CAAA;IACvD,IAAMkB,QAAQ,GAAG,SAAXA,QAAQ,GAAA;EAAA,IAAA,OACZD,gBAAgB,CAAC;EACfd,MAAAA,KAAK,EAAEJ,QAAQ,CAACa,aAAa,CAACO,UAAU;EACxCjB,MAAAA,MAAM,EAAEH,QAAQ,CAACa,aAAa,CAACQ,WAAAA;EACjC,KAAC,CAAC,CAAA;EAAA,GAAA,CAAA;EAEJ,EAAA,IAAI,CAACrB,QAAQ,CAACa,aAAa,EAAE;EAC3B,IAAA,OAAA;EACF,GAAA;EAEAM,EAAAA,QAAQ,EAAE,CAAA;IAEVnB,QAAQ,CAACa,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEH,QAAQ,EAAE;EAC1DI,IAAAA,OAAO,EAAE,KAAK;EACdC,IAAAA,OAAO,EAAE,IAAA;EACX,GAAC,CAAC,CAAA;EAEF,EAAA,OAAO,YAAM;MACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEN,QAAQ,CAAC,CAAA;KAC/D,CAAA;EACH,EAAC;EAID,IAAMO,WAAW,GAAG;EAClBC,EAAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;EACpCC,EAAAA,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAA;EAC/B,CAAU,CAAA;EAEV,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoB,CAAIC,IAAkB,EAAK;EACnD,EAAA,OAAO,UAAC9B,QAA+B,EAAEC,EAA4B,EAAK;EACxE,IAAA,IAAI,CAACD,QAAQ,CAACa,aAAa,EAAE;EAC3B,MAAA,OAAA;EACF,KAAA;MAEA,IAAMkB,KAAK,GAAGL,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;MAClC,IAAME,KAAK,GAAGN,WAAW,CAACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;EAElC,IAAA,IAAIG,KAAa,GAAGjC,QAAQ,CAACa,aAAa,CAACkB,KAAK,CAAC,CAAA;EACjD,IAAA,IAAIG,KAAa,GAAGlC,QAAQ,CAACa,aAAa,CAACmB,KAAK,CAAC,CAAA;EAEjD,IAAA,IAAMG,MAAM,GAAG,SAATA,MAAM,GAAS;EACnB,MAAA,IAAMC,MAAM,GACVpC,QAAQ,CAACa,aAAa,CAACb,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAGwB,KAAK,GAAGC,KAAK,CAAC,CAAA;QAErE/B,EAAE,CAACmC,MAAM,CAAC,CAAA;OACX,CAAA;EAEDD,IAAAA,MAAM,EAAE,CAAA;EAER,IAAA,IAAME,QAAQ,GAAG,SAAXA,QAAQ,CAAIC,CAAQ,EAAK;EAC7B,MAAA,IAAMC,MAAM,GAAGD,CAAC,CAACE,aAAqC,CAAA;EACtD,MAAA,IAAMC,OAAO,GAAGF,MAAM,CAACR,KAAK,CAAC,CAAA;EAC7B,MAAA,IAAMW,OAAO,GAAGH,MAAM,CAACP,KAAK,CAAC,CAAA;EAE7B,MAAA,IAAIhC,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG0B,KAAK,GAAGQ,OAAO,GAAGP,KAAK,GAAGQ,OAAO,EAAE;EACnEP,QAAAA,MAAM,EAAE,CAAA;EACV,OAAA;EAEAF,MAAAA,KAAK,GAAGQ,OAAO,CAAA;EACfP,MAAAA,KAAK,GAAGQ,OAAO,CAAA;OAChB,CAAA;MAED1C,QAAQ,CAACa,aAAa,CAACS,gBAAgB,CAAC,QAAQ,EAAEe,QAAQ,EAAE;EAC1Dd,MAAAA,OAAO,EAAE,KAAK;EACdC,MAAAA,OAAO,EAAE,IAAA;EACX,KAAC,CAAC,CAAA;EAEF,IAAA,OAAO,YAAM;QACXxB,QAAQ,CAACa,aAAa,CAACY,mBAAmB,CAAC,QAAQ,EAAEY,QAAQ,CAAC,CAAA;OAC/D,CAAA;KACF,CAAA;EACH,CAAC,CAAA;MAEYM,oBAAoB,GAAGd,oBAAoB,CAAC,SAAS,EAAC;MACtDe,mBAAmB,GAAGf,oBAAoB,CAAC,QAAQ,EAAC;AAE1D,MAAMgB,cAAc,GAAG,SAAjBA,cAAc,CACzBlB,OAAqB,EACrB3B,QAAwC,EACrC;EACH,EAAA,OAAOzB,IAAI,CAACC,KAAK,CACfmD,OAAO,CAACb,qBAAqB,EAAE,CAC7Bd,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CACjD,CACF,CAAA;EACH,EAAC;AAEM,MAAMuC,YAAY,GAAG,SAAfA,YAAY,CACvBV,MAAc,EAKdpC,IAAAA,EAAAA,QAA6B,EAC1B;EAAA,EAAA,IAAA,qBAAA,EAAA,sBAAA,CAAA;EAAA,EAAA,IAAA,gBAAA,GAAA,IAAA,CAJD+C,WAAW;EAAXA,IAAAA,WAAW,iCAAG,CAAC,GAAA,gBAAA;EACfC,IAAAA,QAAQ,QAARA,QAAQ,CAAA;EAIV,EAAA,IAAMC,QAAQ,GAAGb,MAAM,GAAGW,WAAW,CAAA;IAErC,CAAA/C,qBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBqC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BlD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG0C,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;EACJ,EAAC;AAEM,MAAMG,aAAa,GAAG,SAAhBA,aAAa,CACxBf,MAAc,EAKdpC,KAAAA,EAAAA,QAA6B,EAC1B;EAAA,EAAA,IAAA,sBAAA,EAAA,sBAAA,CAAA;EAAA,EAAA,IAAA,iBAAA,GAAA,KAAA,CAJD+C,WAAW;EAAXA,IAAAA,WAAW,kCAAG,CAAC,GAAA,iBAAA;EACfC,IAAAA,QAAQ,SAARA,QAAQ,CAAA;EAIV,EAAA,IAAMC,QAAQ,GAAGb,MAAM,GAAGW,WAAW,CAAA;IAErC,CAAA/C,sBAAAA,GAAAA,QAAQ,CAACa,aAAa,KAAtB,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBqC,QAAQ,IAAhC,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAwBA,QAAQ,EAAA,sBAAA,GAAA,EAAA,EAAA,sBAAA,CAC7BlD,QAAQ,CAACM,OAAO,CAACC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAG0C,GAAAA,QAAQ,EACxDD,sBAAAA,CAAAA,QAAQ,GAARA,QAAQ,EACR,sBAAA,EAAA,CAAA;EACJ,EAAC;AAiDD,MAAaI,WAAW,GAwCtB,SAAY9F,WAAAA,CAAAA,KAAsD,EAAE;EAAA,EAAA,IAAA,KAAA,GAAA,IAAA,CAAA;IAAA,IApC5D+F,CAAAA,MAAM,GAA4B,EAAE,CAAA;IAAA,IAE5CxC,CAAAA,aAAa,GAA0B,IAAI,CAAA;IAAA,IAC3CyC,CAAAA,WAAW,GAAY,KAAK,CAAA;IAAA,IACpBC,CAAAA,oBAAoB,GAAyC,IAAI,CAAA;IAAA,IACzEC,CAAAA,iBAAiB,GAAkB,EAAE,CAAA;IAAA,IAC7BC,CAAAA,aAAa,GAAwB,EAAE,CAAA;IAAA,IACvCC,CAAAA,2BAA2B,GAAa,EAAE,CAAA;IAAA,IAGlDC,CAAAA,eAAe,GAA2B,IAAI,CAAA;IAAA,IACtCC,CAAAA,iBAAiB,GAAW,CAAC,CAAA;IAAA,IAC7BC,CAAAA,mBAAmB,GAA8B,EAAE,CAAA;IAAA,IACnDC,CAAAA,4BAA4B,GAAwB,IAAI,CAAA;IAAA,IACxDC,CAAAA,iBAAiB,GAAI,YAAM;MACjC,IAAIC,GAA0B,GAAG,IAAI,CAAA;EAErC,IAAA,OAAO,YAAM;EACX,MAAA,IAAIA,GAAG,EAAE;EACP,QAAA,OAAOA,GAAG,CAAA;EACZ,OAAC,MAAM,IAAI,OAAOtD,cAAc,KAAK,WAAW,EAAE;EAChD,QAAA,OAAQsD,GAAG,GAAG,IAAItD,cAAc,CAAC,UAACC,OAAO,EAAK;EAC5CA,UAAAA,OAAO,CAACsD,OAAO,CAAC,UAACC,KAAK,EAAK;cACzB,KAAI,CAACC,eAAe,CAACD,KAAK,CAAC3B,MAAM,EAAkB,KAAK,CAAC,CAAA;EAC3D,WAAC,CAAC,CAAA;EACJ,SAAC,CAAC,CAAA;EACJ,OAAC,MAAM;EACL,QAAA,OAAO,IAAI,CAAA;EACb,OAAA;OACD,CAAA;EACH,GAAC,EAAG,CAAA;EAAA,EAAA,IAAA,CACJlD,KAAK,GAA6C;EAChDE,IAAAA,UAAU,EAAE,CAAC;EACbG,IAAAA,QAAQ,EAAE,CAAA;KACX,CAAA;EAAA,EAAA,IAAA,CAcD0E,UAAU,GAAG,UAAC9G,IAAsD,EAAK;MACvE+G,MAAM,CAAC1D,OAAO,CAACrD,IAAI,CAAC,CAAC2G,OAAO,CAAC,UAAkB,KAAA,EAAA;EAAA,MAAA,IAAhBvG,GAAG,GAAA,KAAA,CAAA,CAAA,CAAA;UAAE4G,KAAK,GAAA,KAAA,CAAA,CAAA,CAAA,CAAA;QACvC,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE,OAAQhH,IAAI,CAASI,GAAG,CAAC,CAAA;EAC7D,KAAC,CAAC,CAAA;EAEF,IAAA,KAAI,CAAC4C,OAAO,GAAA,QAAA,CAAA;EACV3C,MAAAA,KAAK,EAAE,KAAK;EACZ4G,MAAAA,aAAa,EAAE,CAAC;EAChB/E,MAAAA,QAAQ,EAAE,CAAC;EACXgF,MAAAA,YAAY,EAAE,CAAC;EACfC,MAAAA,UAAU,EAAE,CAAC;EACbC,MAAAA,kBAAkB,EAAE,CAAC;EACrBC,MAAAA,gBAAgB,EAAE,CAAC;EACnBpE,MAAAA,UAAU,EAAE,KAAK;EACjBqE,MAAAA,UAAU,EAAEzF,mBAAmB;EAC/B0F,MAAAA,cAAc,EAAEzF,qBAAqB;QACrCf,QAAQ,EAAE,SAAM,QAAA,GAAA,EAAE;EAClBwE,MAAAA,cAAc,EAAdA,cAAc;EACdiC,MAAAA,WAAW,EAAE;EAAE1E,QAAAA,KAAK,EAAE,CAAC;EAAED,QAAAA,MAAM,EAAE,CAAA;SAAG;EACpC4E,MAAAA,YAAY,EAAE,CAAC;EACfC,MAAAA,cAAc,EAAE,GAAG;EACnBC,MAAAA,cAAc,EAAE,YAAY;EAC5BC,MAAAA,wBAAwB,EAAE,EAAA;EAAE,KAAA,EACzB5H,IAAI,CACR,CAAA;KACF,CAAA;IAAA,IAEO6H,CAAAA,MAAM,GAAG,YAAM;EACrB,IAAA,KAAI,CAAC7E,OAAO,CAACjC,QAAQ,IAArB,IAAA,GAAA,KAAA,CAAA,GAAA,KAAI,CAACiC,OAAO,CAACjC,QAAQ,CAAG,KAAI,CAAC,CAAA;KAC9B,CAAA;IAAA,IAEO+G,CAAAA,OAAO,GAAG,YAAM;MACtB,KAAI,CAAC/B,MAAM,CAACgC,MAAM,CAACC,OAAO,CAAC,CAACrB,OAAO,CAAC,UAACsB,CAAC,EAAA;EAAA,MAAA,OAAKA,CAAC,EAAG,CAAA;OAAC,CAAA,CAAA;MAChD,KAAI,CAAClC,MAAM,GAAG,EAAE,CAAA;MAChB,KAAI,CAACxC,aAAa,GAAG,IAAI,CAAA;KAC1B,CAAA;IAAA,IAED2E,CAAAA,SAAS,GAAG,YAAM;EAChB,IAAA,IAAMC,EAAE,GAAG,KAAI,CAAC1B,iBAAiB,EAAE,CAAA;MACnCM,MAAM,CAACqB,MAAM,CAAC,KAAI,CAAC7B,mBAAmB,CAAC,CAACI,OAAO,CAAC,UAAC0B,IAAI,EAAA;EAAA,MAAA,OAAKF,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAE1E,OAAO,CAAC4E,IAAI,CAAC,CAAA;OAAC,CAAA,CAAA;EAE5E,IAAA,OAAO,YAAM;EACXF,MAAAA,EAAE,IAAFA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAE,CAAEG,UAAU,EAAE,CAAA;QAEhB,KAAI,CAACR,OAAO,EAAE,CAAA;OACf,CAAA;KACF,CAAA;IAAA,IAEDS,CAAAA,WAAW,GAAG,YAAM;EAClB,IAAA,KAAI,CAAC/B,4BAA4B,IAAA,IAAA,GAAA,KAAA,CAAA,GAAjC,KAAI,CAACA,4BAA4B,EAAI,CAAA;EAErC,IAAA,IAAMjD,aAAa,GAAG,KAAI,CAACP,OAAO,CAACwF,gBAAgB,EAAE,CAAA;EAErD,IAAA,IAAI,KAAI,CAACjF,aAAa,KAAKA,aAAa,EAAE;QACxC,KAAI,CAACuE,OAAO,EAAE,CAAA;QAEd,KAAI,CAACvE,aAAa,GAAGA,aAAa,CAAA;EAElC,MAAA,KAAI,CAACkF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtCjD,QAAAA,WAAW,EAAEkD,SAAS;EACtBjD,QAAAA,QAAQ,EAAEiD,SAAAA;EACZ,OAAC,CAAC,CAAA;EAEF,MAAA,KAAI,CAAC5C,MAAM,CAACvD,IAAI,CACd,KAAI,CAACQ,OAAO,CAACE,kBAAkB,CAAC,KAAI,EAAE,UAACH,IAAI,EAAK;UAC9C,KAAI,CAAC6F,UAAU,GAAG7F,IAAI,CAAA;UACtB,KAAI,CAAC8F,cAAc,EAAE,CAAA;EACvB,OAAC,CAAC,CACH,CAAA;EAED,MAAA,KAAI,CAAC9C,MAAM,CAACvD,IAAI,CACd,KAAI,CAACQ,OAAO,CAACqC,oBAAoB,CAAC,KAAI,EAAE,UAACP,MAAM,EAAK;UAClD,KAAI,CAACwB,iBAAiB,GAAG,CAAC,CAAA;EAE1B,QAAA,IAAI,KAAI,CAACoC,YAAY,KAAK5D,MAAM,EAAE;EAChC,UAAA,OAAA;EACF,SAAA;EAEA,QAAA,IAAI,KAAI,CAACmB,oBAAoB,KAAK,IAAI,EAAE;EACtC6C,UAAAA,YAAY,CAAC,KAAI,CAAC7C,oBAAoB,CAAC,CAAA;YACvC,KAAI,CAACA,oBAAoB,GAAG,IAAI,CAAA;EAClC,SAAA;EAEA,QAAA,IAAM8C,mBAAmB,GAAG,SAAtBA,mBAAmB,CAAI/C,WAAoB,EAAK;EACpD,UAAA,IAAI,KAAI,CAACA,WAAW,KAAKA,WAAW,EAAE;cACpC,KAAI,CAACA,WAAW,GAAGA,WAAW,CAAA;cAC9B,KAAI,CAAC6B,MAAM,EAAE,CAAA;EACf,WAAA;WACD,CAAA;UAED,KAAI,CAACxB,eAAe,GAClB,KAAI,CAACqC,YAAY,GAAG5D,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;UAErD,KAAI,CAAC4D,YAAY,GAAG5D,MAAM,CAAA;UAE1B,KAAI,CAAC+D,cAAc,EAAE,CAAA;UAErBE,mBAAmB,CAAC,IAAI,CAAC,CAAA;EAEzB,QAAA,KAAI,CAAC9C,oBAAoB,GAAG+C,UAAU,CAAC,YAAM;YAC3C,KAAI,CAAC/C,oBAAoB,GAAG,IAAI,CAAA;YAChC,KAAI,CAACI,eAAe,GAAG,IAAI,CAAA;YAC3B0C,mBAAmB,CAAC,KAAK,CAAC,CAAA;EAC5B,SAAC,EAAE,KAAI,CAAC/F,OAAO,CAAC0E,cAAc,CAAC,CAAA;EACjC,OAAC,CAAC,CACH,CAAA;EACH,KAAC,MAAM,IAAI,CAAC,KAAI,CAAC1B,WAAW,EAAE;QAC5B,KAAI,CAAC6C,cAAc,EAAE,CAAA;EACvB,KAAA;KACD,CAAA;IAAA,IAEOI,CAAAA,OAAO,GAAG,YAAM;EACtB,IAAA,OAAO,KAAI,CAACL,UAAU,CAAC,KAAI,CAAC5F,OAAO,CAACC,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;KACrE,CAAA;IAAA,IAEOiG,CAAAA,eAAe,GAAGrJ,IAAI,CAC5B,YAAA;EAAA,IAAA,OAAM,CACJ,KAAI,CAACmD,OAAO,CAACX,KAAK,EAClB,KAAI,CAACW,OAAO,CAACkE,YAAY,EACzB,KAAI,CAAClE,OAAO,CAACyE,YAAY,EACzB,KAAI,CAACzE,OAAO,CAACsE,UAAU,EACvB,KAAI,CAACnB,aAAa,CACnB,CAAA;KACD,EAAA,UAAC9D,KAAK,EAAE6E,YAAY,EAAEO,YAAY,EAAEH,UAAU,EAAEnB,aAAa,EAAK;MAChE,IAAMvE,GAAG,GACP,KAAI,CAACwE,2BAA2B,CAAC1F,MAAM,GAAG,CAAC,GACvCO,IAAI,CAACW,GAAG,OAARX,IAAI,EAAQ,KAAI,CAACmF,2BAA2B,CAAC,GAC7C,CAAC,CAAA;MACP,KAAI,CAACA,2BAA2B,GAAG,EAAE,CAAA;MAErC,IAAM+C,YAAY,GAAG,KAAI,CAACjD,iBAAiB,CAACkD,KAAK,CAAC,CAAC,EAAExH,GAAG,CAAC,CAAA;MAEzD,KAAK,IAAIW,GAAC,GAAGX,GAAG,EAAEW,GAAC,GAAGF,KAAK,EAAEE,GAAC,EAAE,EAAE;EAChC,MAAA,IAAMnC,GAAG,GAAGkH,UAAU,CAAC/E,GAAC,CAAC,CAAA;EACzB,MAAA,IAAM8G,YAAY,GAAGlD,aAAa,CAAC/F,GAAG,CAAC,CAAA;QACvC,IAAM4B,KAAK,GAAGmH,YAAY,CAAC5G,GAAC,GAAG,CAAC,CAAC,GAC7B4G,YAAY,CAAC5G,GAAC,GAAG,CAAC,CAAC,CAAEJ,GAAG,GACxB+E,YAAY,GAAGO,YAAY,CAAA;EAC/B,MAAA,IAAM6B,IAAI,GACR,OAAOD,YAAY,KAAK,QAAQ,GAC5BA,YAAY,GACZ,KAAI,CAACrG,OAAO,CAACuG,YAAY,CAAChH,GAAC,CAAC,CAAA;EAClC,MAAA,IAAMJ,GAAG,GAAGH,KAAK,GAAGsH,IAAI,CAAA;QACxBH,YAAY,CAAC5G,GAAC,CAAC,GAAG;EAAE1B,QAAAA,KAAK,EAAE0B,GAAC;EAAEP,QAAAA,KAAK,EAALA,KAAK;EAAEsH,QAAAA,IAAI,EAAJA,IAAI;EAAEnH,QAAAA,GAAG,EAAHA,GAAG;EAAE/B,QAAAA,GAAG,EAAHA,GAAAA;SAAK,CAAA;EACvD,KAAA;MAEA,KAAI,CAAC8F,iBAAiB,GAAGiD,YAAY,CAAA;EAErC,IAAA,OAAOA,YAAY,CAAA;EACrB,GAAC,EACD;MACE/I,GAAG,EAA2C,iBAAiB;EAC/DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;IAAA,IAEDwI,CAAAA,cAAc,GAAGhJ,IAAI,CACnB,YAAA;EAAA,IAAA,OAAM,CAAC,KAAI,CAACqJ,eAAe,EAAE,EAAE,KAAI,CAACD,OAAO,EAAE,EAAE,KAAI,CAACP,YAAY,CAAC,CAAA;EAAA,GAAA,EACjE,UAACS,YAAY,EAAEK,SAAS,EAAEd,YAAY,EAAK;MACzC,IAAM3G,KAAK,GAAG8G,cAAc,CAAC;EAC3BM,MAAAA,YAAY,EAAZA,YAAY;EACZK,MAAAA,SAAS,EAATA,SAAS;EACTd,MAAAA,YAAY,EAAZA,YAAAA;EACF,KAAC,CAAC,CAAA;EACF,IAAA,IACE3G,KAAK,CAACE,UAAU,KAAK,KAAI,CAACF,KAAK,CAACE,UAAU,IAC1CF,KAAK,CAACK,QAAQ,KAAK,KAAI,CAACL,KAAK,CAACK,QAAQ,EACtC;QACA,KAAI,CAACL,KAAK,GAAGA,KAAK,CAAA;QAClB,KAAI,CAAC8F,MAAM,EAAE,CAAA;EACf,KAAA;MACA,OAAO,KAAI,CAAC9F,KAAK,CAAA;EACnB,GAAC,EACD;MACE3B,GAAG,EAA2C,gBAAgB;EAC9DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;IAAA,IAEOoJ,CAAAA,UAAU,GAAG5J,IAAI,CACvB,YAAA;MAAA,OAAM,CACJ,KAAI,CAACmD,OAAO,CAACuE,cAAc,EAC3B,KAAI,CAACxF,KAAK,EACV,KAAI,CAACiB,OAAO,CAACd,QAAQ,EACrB,KAAI,CAACc,OAAO,CAACX,KAAK,CACnB,CAAA;KACD,EAAA,UAACkF,cAAc,EAAExF,KAAK,EAAEG,QAAQ,EAAEG,KAAK,EAAK;MAC1C,OAAOkF,cAAc,cAChBxF,KAAK,EAAA;EACRG,MAAAA,QAAQ,EAARA,QAAQ;EACRG,MAAAA,KAAK,EAAEA,KAAAA;OACP,CAAA,CAAA,CAAA;EACJ,GAAC,EACD;MACEjC,GAAG,EAA2C,YAAY;EAC1DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;EAAA,EAAA,IAAA,CAEDqJ,gBAAgB,GAAG,UAACrB,IAAkB,EAAK;EACzC,IAAA,IAAMsB,aAAa,GAAG,KAAI,CAAC3G,OAAO,CAAC2E,cAAc,CAAA;EACjD,IAAA,IAAMiC,QAAQ,GAAGvB,IAAI,CAACwB,YAAY,CAACF,aAAa,CAAC,CAAA;MAEjD,IAAI,CAACC,QAAQ,EAAE;EACbnI,MAAAA,OAAO,CAACqI,IAAI,CACiBH,0BAAAA,GAAAA,aAAa,GACzC,gCAAA,CAAA,CAAA;EACD,MAAA,OAAO,CAAC,CAAC,CAAA;EACX,KAAA;EAEA,IAAA,OAAOI,QAAQ,CAACH,QAAQ,EAAE,EAAE,CAAC,CAAA;KAC9B,CAAA;EAAA,EAAA,IAAA,CAEO/C,eAAe,GAAG,UAACwB,IAAkB,EAAE2B,KAAc,EAAK;EAAA,IAAA,IAAA,qBAAA,CAAA;EAChE,IAAA,IAAMnJ,KAAK,GAAG,KAAI,CAAC6I,gBAAgB,CAACrB,IAAI,CAAC,CAAA;EAEzC,IAAA,IAAM4B,IAAI,GAAG,KAAI,CAAC/D,iBAAiB,CAACrF,KAAK,CAAC,CAAA;MAC1C,IAAI,CAACoJ,IAAI,EAAE;EACT,MAAA,OAAA;EACF,KAAA;MAEA,IAAMC,QAAQ,GAAG,KAAI,CAAC3D,mBAAmB,CAAC0D,IAAI,CAAC7J,GAAG,CAAC,CAAA;EAEnD,IAAA,IAAM+H,EAAE,GAAG,KAAI,CAAC1B,iBAAiB,EAAE,CAAA;EAEnC,IAAA,IAAI,CAAC4B,IAAI,CAAC8B,WAAW,EAAE;EACrB,MAAA,IAAID,QAAQ,EAAE;EACZ/B,QAAAA,EAAE,oBAAFA,EAAE,CAAEzE,SAAS,CAACwG,QAAQ,CAAC,CAAA;EACvB,QAAA,OAAO,KAAI,CAAC3D,mBAAmB,CAAC0D,IAAI,CAAC7J,GAAG,CAAC,CAAA;EAC3C,OAAA;EACA,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAAC8J,QAAQ,IAAIA,QAAQ,KAAK7B,IAAI,EAAE;EAClC,MAAA,IAAI6B,QAAQ,EAAE;EACZ/B,QAAAA,EAAE,oBAAFA,EAAE,CAAEzE,SAAS,CAACwG,QAAQ,CAAC,CAAA;EACzB,OAAA;QACA,KAAI,CAAC3D,mBAAmB,CAAC0D,IAAI,CAAC7J,GAAG,CAAC,GAAGiI,IAAI,CAAA;EACzCF,MAAAA,EAAE,oBAAFA,EAAE,CAAE1E,OAAO,CAAC4E,IAAI,CAAC,CAAA;EACnB,KAAA;MAEA,IAAM+B,gBAAgB,GAAG,KAAI,CAACpH,OAAO,CAACuC,cAAc,CAAC8C,IAAI,EAAE,KAAI,CAAC,CAAA;EAEhE,IAAA,IAAMgC,QAAQ,GAAA,CAAA,qBAAA,GAAG,KAAI,CAAClE,aAAa,CAAC8D,IAAI,CAAC7J,GAAG,CAAC,KAAI6J,IAAAA,GAAAA,qBAAAA,GAAAA,IAAI,CAACX,IAAI,CAAA;EAE1D,IAAA,IAAMgB,KAAK,GAAGF,gBAAgB,GAAGC,QAAQ,CAAA;MAEzC,IAAIC,KAAK,KAAK,CAAC,EAAE;EAAA,MAAA,IAAA,SAAA,CAAA;EACf,MAAA,IACEL,IAAI,CAACjI,KAAK,GAAG,KAAI,CAAC0G,YAAY,IAC9B,KAAI,CAAC1C,WAAW,IAChB,KAAI,CAACK,eAAe,KAAK,UAAU,EACnC;EACA,QAAA,IAA6C,KAAI,CAACrD,OAAO,CAAC3C,KAAK,EAAE;EAC/DoB,UAAAA,OAAO,CAACC,IAAI,CAAC,YAAY,EAAE4I,KAAK,CAAC,CAAA;EACnC,SAAA;EAEA,QAAA,KAAI,CAAC7B,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtCjD,UAAAA,WAAW,EAAG,KAAI,CAACa,iBAAiB,IAAIgE,KAAM;EAC9C5E,UAAAA,QAAQ,EAAEiD,SAAAA;EACZ,SAAC,CAAC,CAAA;EACJ,OAAA;EAEA,MAAA,KAAI,CAACvC,2BAA2B,CAAC5D,IAAI,CAAC3B,KAAK,CAAC,CAAA;EAC5C,MAAA,KAAI,CAACsF,aAAa,GACb,QAAA,CAAA,EAAA,EAAA,KAAI,CAACA,aAAa,GACpB8D,SAAAA,GAAAA,EAAAA,EAAAA,SAAAA,CAAAA,IAAI,CAAC7J,GAAG,CAAGgK,GAAAA,gBAAgB,EAC7B,SAAA,EAAA,CAAA;QACD,KAAI,CAACvC,MAAM,EAAE,CAAA;EACf,KAAA;KACD,CAAA;EAAA,EAAA,IAAA,CAEDtC,cAAc,GAAG,UAAC8C,IAAyB,EAAK;MAC9C,IAAI,CAACA,IAAI,EAAE;EACT,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,KAAI,CAACxB,eAAe,CAACwB,IAAI,EAAE,IAAI,CAAC,CAAA;KACjC,CAAA;IAAA,IAEDkC,CAAAA,eAAe,GAAG1K,IAAI,CACpB,YAAA;MAAA,OAAM,CAAC,KAAI,CAAC4J,UAAU,EAAE,EAAE,KAAI,CAACP,eAAe,EAAE,CAAC,CAAA;EAAA,GAAA,EACjD,UAACsB,OAAO,EAAErB,YAAY,EAAK;MACzB,IAAMsB,YAA2B,GAAG,EAAE,CAAA;EAEtC,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGH,OAAO,CAAC9J,MAAM,EAAEgK,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;EAClD,MAAA,IAAMnI,GAAC,GAAGiI,OAAO,CAACE,CAAC,CAAE,CAAA;EACrB,MAAA,IAAME,WAAW,GAAGzB,YAAY,CAAC5G,GAAC,CAAE,CAAA;EAEpCkI,MAAAA,YAAY,CAACjI,IAAI,CAACoI,WAAW,CAAC,CAAA;EAChC,KAAA;EAEA,IAAA,OAAOH,YAAY,CAAA;EACrB,GAAC,EACD;MACErK,GAAG,EAA2C,YAAY;EAC1DC,IAAAA,KAAK,EAAE,SAAA,KAAA,GAAA;EAAA,MAAA,OAAM,KAAI,CAAC2C,OAAO,CAAC3C,KAAK,CAAA;EAAA,KAAA;EACjC,GAAC,CACF,CAAA;EAAA,EAAA,IAAA,CAEDwK,qBAAqB,GAAG,UAAClF,QAAgB,EAAEmF,KAAsB,EAAK;EACpE,IAAA,IAAMhG,MAAM,GAAG,KAAI,CAAC4D,YAAY,CAAA;EAChC,IAAA,IAAMY,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;MAE3B,IAAI6B,KAAK,KAAK,MAAM,EAAE;QACpB,IAAInF,QAAQ,IAAIb,MAAM,EAAE;EACtBgG,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAC,MAAM,IAAInF,QAAQ,IAAIb,MAAM,GAAGwE,IAAI,EAAE;EACpCwB,QAAAA,KAAK,GAAG,KAAK,CAAA;EACf,OAAC,MAAM;EACLA,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAA;EACF,KAAA;MAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;EACrB,MAAA,OAAOnF,QAAQ,CAAA;EACjB,KAAC,MAAM,IAAImF,KAAK,KAAK,KAAK,EAAE;QAC1B,OAAOnF,QAAQ,GAAG2D,IAAI,CAAA;EACxB,KAAC,MAAM,IAAIwB,KAAK,KAAK,QAAQ,EAAE;EAC7B,MAAA,OAAOnF,QAAQ,GAAG2D,IAAI,GAAG,CAAC,CAAA;EAC5B,KAAA;EACA,IAAA,OAAO3D,QAAQ,CAAA;KAChB,CAAA;EAAA,EAAA,IAAA,CAEDoF,cAAc,GAAG,UACfpF,QAAgB,EAEb,KAAA,EAAA;EAAA,IAAA,IAAA,KAAA,GAAA,KAAA,KAAA,KAAA,CAAA,GADoD,EAAE,GAAA,KAAA;EAAA,MAAA,WAAA,GAAA,KAAA,CAAvDmF,KAAK;EAALA,MAAAA,KAAK,4BAAG,OAAO,GAAA,WAAA;EAAEpF,MAAAA,QAAQ,SAARA,QAAQ,CAAA;EAE3B,IAAA,IAAM1C,OAAO,GAAG;EACdyC,MAAAA,WAAW,EAAEkD,SAAS;EACtBjD,MAAAA,QAAQ,EAARA,QAAQ;EACRsF,MAAAA,IAAI,EAAE,KAAA;OACP,CAAA;EACD,IAAA,KAAI,CAACvC,eAAe,CAAC,KAAI,CAACoC,qBAAqB,CAAClF,QAAQ,EAAEmF,KAAK,CAAC,EAAE9H,OAAO,CAAC,CAAA;KAC3E,CAAA;EAAA,EAAA,IAAA,CAEDiI,aAAa,GAAG,UACdpK,KAAa,EAEV,MAAA,EAAA;EAAA,IAAA,IAAA,KAAA,GAAA,MAAA,KAAA,KAAA,CAAA,GADkD,EAAE,GAAA,MAAA;EAAA,MAAA,WAAA,GAAA,KAAA,CAArDiK,KAAK;EAALA,MAAAA,KAAK,4BAAG,MAAM,GAAA,WAAA;EAAEpF,MAAAA,QAAQ,SAARA,QAAQ,CAAA;MAE1B,KAAI,CAACc,4BAA4B,GAAG,IAAI,CAAA;EAExC,IAAA,IAAM1B,MAAM,GAAG,KAAI,CAAC4D,YAAY,CAAA;EAChC,IAAA,IAAMY,IAAI,GAAG,KAAI,CAACL,OAAO,EAAE,CAAA;EAC3B,IAAA,IAAQ5G,KAAK,GAAK,KAAI,CAACW,OAAO,CAAtBX,KAAK,CAAA;EAEb,IAAA,IAAM8G,YAAY,GAAG,KAAI,CAACD,eAAe,EAAE,CAAA;MAC3C,IAAM0B,WAAW,GAAGzB,YAAY,CAAClI,IAAI,CAACU,GAAG,CAAC,CAAC,EAAEV,IAAI,CAACW,GAAG,CAACf,KAAK,EAAEwB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;MAEzE,IAAI,CAACuI,WAAW,EAAE;EAChB,MAAA,MAAM,IAAIM,KAAK,CAAsCrK,oCAAAA,GAAAA,KAAK,CAAG,CAAA;EAC/D,KAAA;MAEA,IAAIiK,KAAK,KAAK,MAAM,EAAE;EACpB,MAAA,IAAIF,WAAW,CAACzI,GAAG,IAAI2C,MAAM,GAAGwE,IAAI,GAAG,KAAI,CAACtG,OAAO,CAACqE,gBAAgB,EAAE;EACpEyD,QAAAA,KAAK,GAAG,KAAK,CAAA;EACf,OAAC,MAAM,IACLF,WAAW,CAAC5I,KAAK,IACjB8C,MAAM,GAAG,KAAI,CAAC9B,OAAO,CAACoE,kBAAkB,EACxC;EACA0D,QAAAA,KAAK,GAAG,OAAO,CAAA;EACjB,OAAC,MAAM;EACL,QAAA,OAAA;EACF,OAAA;EACF,KAAA;EAEA,IAAA,IAAMK,6BAA6B,GAAG,SAAhCA,6BAA6B,CAAIP,WAAwB,EAAK;QAClE,IAAMjF,QAAQ,GACZmF,KAAK,KAAK,KAAK,GACXF,WAAW,CAACzI,GAAG,GAAG,KAAI,CAACa,OAAO,CAACqE,gBAAgB,GAC/CuD,WAAW,CAAC5I,KAAK,GAAG,KAAI,CAACgB,OAAO,CAACoE,kBAAkB,CAAA;EAEzD,MAAA,OAAO,KAAI,CAACyD,qBAAqB,CAAClF,QAAQ,EAAEmF,KAAK,CAAC,CAAA;OACnD,CAAA;EAED,IAAA,IAAMnF,QAAQ,GAAGwF,6BAA6B,CAACP,WAAW,CAAC,CAAA;EAE3D,IAAA,IAAI3J,IAAI,CAACC,KAAK,CAACyE,QAAQ,CAAC,KAAK1E,IAAI,CAACC,KAAK,CAAC4D,MAAM,CAAC,EAAE;EAC/C,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAM9B,OAAO,GAAG;EACdyC,MAAAA,WAAW,EAAEkD,SAAS;EACtBjD,MAAAA,QAAQ,EAARA,QAAAA;OACD,CAAA;EACD,IAAA,KAAI,CAAC+C,eAAe,CAAC9C,QAAQ,EAAE3C,OAAO,CAAC,CAAA;EAEvC,IAAA,IAAMoI,SAAS,GAAGrE,MAAM,CAACsE,IAAI,CAAC,KAAI,CAAC9E,mBAAmB,CAAC,CAAC7F,MAAM,GAAG,CAAC,CAAA;EAElE,IAAA,IAAI0K,SAAS,EAAE;QACb,KAAI,CAAC5E,4BAA4B,GAAG,YAAM;EACxC,QAAA,KAAI,CAACyE,aAAa,CAACpK,KAAK,EAAE;EAAEiK,UAAAA,KAAK,EAALA,KAAK;EAAEpF,UAAAA,QAAQ,EAARA,QAAAA;EAAS,SAAC,CAAC,CAAA;SAC/C,CAAA;EACH,KAAA;KACD,CAAA;EAAA,EAAA,IAAA,CAED4F,QAAQ,GAAG,UAAC7F,WAAmB,EAAEzC,OAAsC,EAAK;EAC1E,IAAA,KAAI,CAACyF,eAAe,CAAC,KAAI,CAACC,YAAY,EAAE;EACtCjD,MAAAA,WAAW,EAAXA,WAAW;EACXC,MAAAA,QAAQ,EAAE1C,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE0C,QAAAA;EACrB,KAAC,CAAC,CAAA;KACH,CAAA;EAAA,EAAA,IAAA,CAED6F,YAAY,GAAG,YAAA;EAAA,IAAA,IAAA,qBAAA,CAAA;EAAA,IAAA,OACb,CAAC,CAAA,CAAA,qBAAA,GAAA,KAAI,CAACrC,eAAe,EAAE,CAAC,KAAI,CAAClG,OAAO,CAACX,KAAK,GAAG,CAAC,CAAC,qBAA9C,qBAAgDF,CAAAA,GAAG,KAClD,KAAI,CAACa,OAAO,CAACkE,YAAY,IAC3B,KAAI,CAAClE,OAAO,CAACyE,YAAY,GACzB,KAAI,CAACzE,OAAO,CAACmE,UAAU,CAAA;EAAA,GAAA,CAAA;EAAA,EAAA,IAAA,CAEjBsB,eAAe,GAAG,UACxB3D,MAAc,EAQX,KAAA,EAAA;MAAA,IANDW,WAAW,SAAXA,WAAW;EACXC,MAAAA,QAAQ,SAARA,QAAQ,CAAA;EAMV,IAAA,KAAI,CAAC1C,OAAO,CAACwI,UAAU,CAAC1G,MAAM,EAAE;EAAEY,MAAAA,QAAQ,EAARA,QAAQ;EAAED,MAAAA,WAAW,EAAXA,WAAAA;OAAa,EAAE,KAAI,CAAC,CAAA;KACjE,CAAA;IAAA,IAEDgG,CAAAA,OAAO,GAAG,YAAM;EACd,IAAA,KAAI,CAACtF,aAAa,GAAG,EAAE,CAAA;MACvB,KAAI,CAAC0B,MAAM,EAAE,CAAA;KACd,CAAA;EApbC,EAAA,IAAI,CAACf,UAAU,CAAC9G,KAAI,CAAC,CAAA;EACrB,EAAA,IAAI,CAAC4I,UAAU,GAAG,IAAI,CAAC5F,OAAO,CAACwE,WAAW,CAAA;EAC1C,EAAA,IAAI,CAACkB,YAAY,GAAG,IAAI,CAAC1F,OAAO,CAACiE,aAAa,CAAA;EAC9C,EAAA,IAAI,CAACf,iBAAiB,GAAG,IAAI,CAAClD,OAAO,CAAC4E,wBAAwB,CAAA;EAC9D,EAAA,IAAI,CAAC1B,iBAAiB,CAACS,OAAO,CAAC,UAACsD,IAAI,EAAK;MACvC,KAAI,CAAC9D,aAAa,CAAC8D,IAAI,CAAC7J,GAAG,CAAC,GAAG6J,IAAI,CAACX,IAAI,CAAA;EAC1C,GAAC,CAAC,CAAA;IAEF,IAAI,CAACT,cAAc,EAAE,CAAA;EACvB,EAAC;EA8aH,IAAM6C,uBAAuB,GAAG,SAA1BA,uBAAuB,CAC3BC,GAAW,EACXC,IAAY,EACZC,eAAsC,EACtC7E,KAAa,EACV;IACH,OAAO2E,GAAG,IAAIC,IAAI,EAAE;MAClB,IAAME,MAAM,GAAI,CAACH,GAAG,GAAGC,IAAI,IAAI,CAAC,GAAI,CAAC,CAAA;EACrC,IAAA,IAAMG,YAAY,GAAGF,eAAe,CAACC,MAAM,CAAC,CAAA;MAE5C,IAAIC,YAAY,GAAG/E,KAAK,EAAE;QACxB2E,GAAG,GAAGG,MAAM,GAAG,CAAC,CAAA;EAClB,KAAC,MAAM,IAAIC,YAAY,GAAG/E,KAAK,EAAE;QAC/B4E,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAA;EACnB,KAAC,MAAM;EACL,MAAA,OAAOA,MAAM,CAAA;EACf,KAAA;EACF,GAAA;IAEA,IAAIH,GAAG,GAAG,CAAC,EAAE;MACX,OAAOA,GAAG,GAAG,CAAC,CAAA;EAChB,GAAC,MAAM;EACL,IAAA,OAAO,CAAC,CAAA;EACV,GAAA;EACF,CAAC,CAAA;EAED,SAAS9C,cAAc,CAQpB,KAAA,EAAA;IAAA,IAPDM,YAAY,SAAZA,YAAY;EACZK,IAAAA,SAAS,SAATA,SAAS;EACTd,IAAAA,YAAY,SAAZA,YAAY,CAAA;EAMZ,EAAA,IAAMrG,KAAK,GAAG8G,YAAY,CAACzI,MAAM,GAAG,CAAC,CAAA;EACrC,EAAA,IAAMsL,SAAS,GAAG,SAAZA,SAAS,CAAInL,KAAa,EAAA;EAAA,IAAA,OAAKsI,YAAY,CAACtI,KAAK,CAAC,CAAEmB,KAAK,CAAA;EAAA,GAAA,CAAA;IAE/D,IAAMC,UAAU,GAAGyJ,uBAAuB,CAAC,CAAC,EAAErJ,KAAK,EAAE2J,SAAS,EAAEtD,YAAY,CAAC,CAAA;IAC7E,IAAItG,QAAQ,GAAGH,UAAU,CAAA;EAEzB,EAAA,OACEG,QAAQ,GAAGC,KAAK,IAChB8G,YAAY,CAAC/G,QAAQ,CAAC,CAAED,GAAG,GAAGuG,YAAY,GAAGc,SAAS,EACtD;EACApH,IAAAA,QAAQ,EAAE,CAAA;EACZ,GAAA;IAEA,OAAO;EAAEH,IAAAA,UAAU,EAAVA,UAAU;EAAEG,IAAAA,QAAQ,EAARA,QAAAA;KAAU,CAAA;EACjC;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},n.apply(this,arguments)}function t(e,n,t){var o,i=[];return function(){var r;t.key&&null!=t.debug&&t.debug()&&(r=Date.now());var l,s=e();if(!(s.length!==i.length||s.some((function(e,n){return i[n]!==e}))))return o;if(i=s,t.key&&null!=t.debug&&t.debug()&&(l=Date.now()),o=n.apply(void 0,s),null==t||null==t.onChange||t.onChange(o),t.key&&null!=t.debug&&t.debug()){var a=Math.round(100*(Date.now()-r))/100,u=Math.round(100*(Date.now()-l))/100,c=u/16,d=function(e,n){for(e=String(e);e.length<n;)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==t?void 0:t.key)}return o}}var o=function(e){return e},i=function(e){for(var n=Math.max(e.startIndex-e.overscan,0),t=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=n;i<=t;i++)o.push(i);return o},r={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},l=function(e){return function(n,t){if(n.scrollElement){var o=r[e][0],i=r[e][1],l=n.scrollElement[o],s=n.scrollElement[i],a=function(){var e=n.scrollElement[n.options.horizontal?o:i];t(e)};a();var u=function(e){var t=e.currentTarget,r=t[o],u=t[i];(n.options.horizontal?l-r:s-u)&&a(),l=r,s=u};return n.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){n.scrollElement.removeEventListener("scroll",u)}}}},s=l("element"),a=l("window"),u=function(e,n){return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var r,l=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.pendingScrollToIndexCallback=null,this.getResizeObserver=(r=null,function(){return r||("undefined"!=typeof ResizeObserver?r=new ResizeObserver((function(e){e.forEach((function(e){l._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(n){var t=n[0];void 0===n[1]&&delete e[t]})),l.options=n({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:i,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==l.options.onChange||l.options.onChange(l)},this.cleanup=function(){l.unsubs.filter(Boolean).forEach((function(e){return e()})),l.unsubs=[],l.scrollElement=null},this._didMount=function(){var e=l.getResizeObserver();return Object.values(l.measureElementCache).forEach((function(n){return null==e?void 0:e.observe(n)})),function(){null==e||e.disconnect(),l.cleanup()}},this._willUpdate=function(){null==l.pendingScrollToIndexCallback||l.pendingScrollToIndexCallback();var e=l.options.getScrollElement();l.scrollElement!==e?(l.cleanup(),l.scrollElement=e,l._scrollToOffset(l.scrollOffset,{adjustments:void 0,behavior:void 0}),l.unsubs.push(l.options.observeElementRect(l,(function(e){l.scrollRect=e,l.calculateRange()}))),l.unsubs.push(l.options.observeElementOffset(l,(function(e){if(l.scrollAdjustments=0,l.scrollOffset!==e){null!==l.isScrollingTimeoutId&&(clearTimeout(l.isScrollingTimeoutId),l.isScrollingTimeoutId=null);var n=function(e){l.isScrolling!==e&&(l.isScrolling=e,l.notify())};l.scrollDirection=l.scrollOffset<e?"forward":"backward",l.scrollOffset=e,l.calculateRange(),n(!0),l.isScrollingTimeoutId=setTimeout((function(){l.isScrollingTimeoutId=null,l.scrollDirection=null,n(!1)}),l.options.scrollingDelay)}})))):l.isScrolling||l.calculateRange()},this.getSize=function(){return l.scrollRect[l.options.horizontal?"width":"height"]},this.getMeasurements=t((function(){return[l.options.count,l.options.paddingStart,l.options.scrollMargin,l.options.getItemKey,l.itemSizeCache]}),(function(e,n,t,o,i){var r=l.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,l.pendingMeasuredCacheIndexes):0;l.pendingMeasuredCacheIndexes=[];for(var s=l.measurementsCache.slice(0,r),a=r;a<e;a++){var u=o(a),c=i[u],d=s[a-1]?s[a-1].end:n+t,f="number"==typeof c?c:l.options.estimateSize(a),h=d+f;s[a]={index:a,start:d,size:f,end:h,key:u}}return l.measurementsCache=s,s}),{key:!1,debug:function(){return l.options.debug}}),this.calculateRange=t((function(){return[l.getMeasurements(),l.getSize(),l.scrollOffset]}),(function(e,n,t){var o=function(e){var n=e.measurements,t=e.outerSize,o=e.scrollOffset,i=n.length-1,r=function(e,n,t,o){for(;e<=n;){var i=(e+n)/2|0,r=t(i);if(r<o)e=i+1;else{if(!(r>o))return i;n=i-1}}return e>0?e-1:0}(0,i,(function(e){return n[e].start}),o),l=r;for(;l<i&&n[l].end<o+t;)l++;return{startIndex:r,endIndex:l}}({measurements:e,outerSize:n,scrollOffset:t});return o.startIndex===l.range.startIndex&&o.endIndex===l.range.endIndex||(l.range=o,l.notify()),l.range}),{key:!1,debug:function(){return l.options.debug}}),this.getIndexes=t((function(){return[l.options.rangeExtractor,l.range,l.options.overscan,l.options.count]}),(function(e,t,o,i){return e(n({},t,{overscan:o,count:i}))}),{key:!1,debug:function(){return l.options.debug}}),this.indexFromElement=function(e){var n=l.options.indexAttribute,t=e.getAttribute(n);return t?parseInt(t,10):(console.warn("Missing attribute name '"+n+"={index}' on measured element."),-1)},this._measureElement=function(e,t){var o,i=l.indexFromElement(e),r=l.measurementsCache[i];if(r){var s=l.measureElementCache[r.key],a=l.getResizeObserver();if(e.isConnected){s&&s===e||(s&&(null==a||a.unobserve(s)),l.measureElementCache[r.key]=e,null==a||a.observe(e));var u,c=l.options.measureElement(e,l),d=c-(null!=(o=l.itemSizeCache[r.key])?o:r.size);if(0!==d)r.start<l.scrollOffset&&l.isScrolling&&"backward"===l.scrollDirection&&l._scrollToOffset(l.scrollOffset,{adjustments:l.scrollAdjustments+=d,behavior:void 0}),l.pendingMeasuredCacheIndexes.push(i),l.itemSizeCache=n({},l.itemSizeCache,((u={})[r.key]=c,u)),l.notify()}else s&&(null==a||a.unobserve(s),delete l.measureElementCache[r.key])}},this.measureElement=function(e){e&&l._measureElement(e,!0)},this.getVirtualItems=t((function(){return[l.getIndexes(),l.getMeasurements()]}),(function(e,n){for(var t=[],o=0,i=e.length;o<i;o++){var r=n[e[o]];t.push(r)}return t}),{key:!1,debug:function(){return l.options.debug}}),this.getOffsetForAlignment=function(e,n){var t=l.scrollOffset,o=l.getSize();return"auto"===n&&(n=e<=t?"start":e>=t+o?"end":"start"),"start"===n?e:"end"===n?e-o:"center"===n?e-o/2:e},this.scrollToOffset=function(e,n){var t=void 0===n?{}:n,o=t.align,i=void 0===o?"start":o,r={adjustments:void 0,behavior:t.behavior,sync:!1};l._scrollToOffset(l.getOffsetForAlignment(e,i),r)},this.scrollToIndex=function(e,n){var t=void 0===n?{}:n,o=t.align,i=void 0===o?"auto":o,r=t.behavior;l.pendingScrollToIndexCallback=null;var s=l.scrollOffset,a=l.getSize(),u=l.options.count,c=l.getMeasurements()[Math.max(0,Math.min(e,u-1))];if(!c)throw new Error("VirtualItem not found for index = "+e);if("auto"===i)if(c.end>=s+a-l.options.scrollPaddingEnd)i="end";else{if(!(c.start<=s+l.options.scrollPaddingStart))return;i="start"}var d=function(e){var n="end"===i?e.end+l.options.scrollPaddingEnd:e.start-l.options.scrollPaddingStart;return l.getOffsetForAlignment(n,i)}(c);if(d!==s){var f={adjustments:void 0,behavior:r};l._scrollToOffset(d,f),Object.keys(l.measureElementCache).length>0&&(l.pendingScrollToIndexCallback=function(){l.scrollToIndex(e,{align:i,behavior:r})})}},this.scrollBy=function(e,n){l._scrollToOffset(l.scrollOffset,{adjustments:e,behavior:null==n?void 0:n.behavior})},this.getTotalSize=function(){var e;return((null==(e=l.getMeasurements()[l.options.count-1])?void 0:e.end)||l.options.paddingStart)-l.options.scrollMargin+l.options.paddingEnd},this._scrollToOffset=function(e,n){var t=n.adjustments,o=n.behavior;l.options.scrollToFn(e,{behavior:o,adjustments:t},l)},this.measure=function(){l.itemSizeCache={},l.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){l.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=i,e.elementScroll=function(e,n,t){var o,i,r=n.adjustments,l=void 0===r?0:r,s=n.behavior,a=e+l;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[t.options.horizontal?"left":"top"]=a,i.behavior=s,i))},e.measureElement=u,e.memo=t,e.observeElementOffset=s,e.observeElementRect=function(e,n){var t=new ResizeObserver((function(e){var t,o;n({width:null==(t=e[0])?void 0:t.contentRect.width,height:null==(o=e[0])?void 0:o.contentRect.height})}));if(e.scrollElement)return n(e.scrollElement.getBoundingClientRect()),t.observe(e.scrollElement),function(){t.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,n){var t=function(e,n){var t={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==t.width:o.height!==t.height)&&n(o),t=o}}(e,n),o=function(){return t({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,n,t){var o,i,r=n.adjustments,l=void 0===r?0:r,s=n.behavior,a=e+l;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[t.options.horizontal?"left":"top"]=a,i.behavior=s,i))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
11
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},n.apply(this,arguments)}function t(e,n,t){var o,r=[];return function(){var i;t.key&&null!=t.debug&&t.debug()&&(i=Date.now());var l,s=e();if(!(s.length!==r.length||s.some((function(e,n){return r[n]!==e}))))return o;if(r=s,t.key&&null!=t.debug&&t.debug()&&(l=Date.now()),o=n.apply(void 0,s),null==t||null==t.onChange||t.onChange(o),t.key&&null!=t.debug&&t.debug()){var a=Math.round(100*(Date.now()-i))/100,u=Math.round(100*(Date.now()-l))/100,c=u/16,d=function(e,n){for(e=String(e);e.length<n;)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==t?void 0:t.key)}return o}}var o=function(e){return e},r=function(e){for(var n=Math.max(e.startIndex-e.overscan,0),t=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=n;r<=t;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},l=function(e){return function(n,t){if(n.scrollElement){var o=i[e][0],r=i[e][1],l=n.scrollElement[o],s=n.scrollElement[r],a=function(){var e=n.scrollElement[n.options.horizontal?o:r];t(e)};a();var u=function(e){var t=e.currentTarget,i=t[o],u=t[r];(n.options.horizontal?l-i:s-u)&&a(),l=i,s=u};return n.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){n.scrollElement.removeEventListener("scroll",u)}}}},s=l("element"),a=l("window"),u=function(e,n){return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,l=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.pendingScrollToIndexCallback=null,this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){l._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(n){var t=n[0];void 0===n[1]&&delete e[t]})),l.options=n({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==l.options.onChange||l.options.onChange(l)},this.cleanup=function(){l.unsubs.filter(Boolean).forEach((function(e){return e()})),l.unsubs=[],l.scrollElement=null},this._didMount=function(){var e=l.getResizeObserver();return Object.values(l.measureElementCache).forEach((function(n){return null==e?void 0:e.observe(n)})),function(){null==e||e.disconnect(),l.cleanup()}},this._willUpdate=function(){null==l.pendingScrollToIndexCallback||l.pendingScrollToIndexCallback();var e=l.options.getScrollElement();l.scrollElement!==e?(l.cleanup(),l.scrollElement=e,l._scrollToOffset(l.scrollOffset,{adjustments:void 0,behavior:void 0}),l.unsubs.push(l.options.observeElementRect(l,(function(e){l.scrollRect=e,l.calculateRange()}))),l.unsubs.push(l.options.observeElementOffset(l,(function(e){if(l.scrollAdjustments=0,l.scrollOffset!==e){null!==l.isScrollingTimeoutId&&(clearTimeout(l.isScrollingTimeoutId),l.isScrollingTimeoutId=null);var n=function(e){l.isScrolling!==e&&(l.isScrolling=e,l.notify())};l.scrollDirection=l.scrollOffset<e?"forward":"backward",l.scrollOffset=e,l.calculateRange(),n(!0),l.isScrollingTimeoutId=setTimeout((function(){l.isScrollingTimeoutId=null,l.scrollDirection=null,n(!1)}),l.options.scrollingDelay)}})))):l.isScrolling||l.calculateRange()},this.getSize=function(){return l.scrollRect[l.options.horizontal?"width":"height"]},this.getMeasurements=t((function(){return[l.options.count,l.options.paddingStart,l.options.scrollMargin,l.options.getItemKey,l.itemSizeCache]}),(function(e,n,t,o,r){var i=l.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,l.pendingMeasuredCacheIndexes):0;l.pendingMeasuredCacheIndexes=[];for(var s=l.measurementsCache.slice(0,i),a=i;a<e;a++){var u=o(a),c=r[u],d=s[a-1]?s[a-1].end:n+t,f="number"==typeof c?c:l.options.estimateSize(a),h=d+f;s[a]={index:a,start:d,size:f,end:h,key:u}}return l.measurementsCache=s,s}),{key:!1,debug:function(){return l.options.debug}}),this.calculateRange=t((function(){return[l.getMeasurements(),l.getSize(),l.scrollOffset]}),(function(e,n,t){var o=function(e){var n=e.measurements,t=e.outerSize,o=e.scrollOffset,r=n.length-1,i=function(e,n,t,o){for(;e<=n;){var r=(e+n)/2|0,i=t(r);if(i<o)e=r+1;else{if(!(i>o))return r;n=r-1}}return e>0?e-1:0}(0,r,(function(e){return n[e].start}),o),l=i;for(;l<r&&n[l].end<o+t;)l++;return{startIndex:i,endIndex:l}}({measurements:e,outerSize:n,scrollOffset:t});return o.startIndex===l.range.startIndex&&o.endIndex===l.range.endIndex||(l.range=o,l.notify()),l.range}),{key:!1,debug:function(){return l.options.debug}}),this.getIndexes=t((function(){return[l.options.rangeExtractor,l.range,l.options.overscan,l.options.count]}),(function(e,t,o,r){return e(n({},t,{overscan:o,count:r}))}),{key:!1,debug:function(){return l.options.debug}}),this.indexFromElement=function(e){var n=l.options.indexAttribute,t=e.getAttribute(n);return t?parseInt(t,10):(console.warn("Missing attribute name '"+n+"={index}' on measured element."),-1)},this._measureElement=function(e,t){var o,r=l.indexFromElement(e),i=l.measurementsCache[r];if(i){var s=l.measureElementCache[i.key],a=l.getResizeObserver();if(e.isConnected){s&&s===e||(s&&(null==a||a.unobserve(s)),l.measureElementCache[i.key]=e,null==a||a.observe(e));var u,c=l.options.measureElement(e,l),d=c-(null!=(o=l.itemSizeCache[i.key])?o:i.size);if(0!==d)i.start<l.scrollOffset&&l.isScrolling&&"backward"===l.scrollDirection&&l._scrollToOffset(l.scrollOffset,{adjustments:l.scrollAdjustments+=d,behavior:void 0}),l.pendingMeasuredCacheIndexes.push(r),l.itemSizeCache=n({},l.itemSizeCache,((u={})[i.key]=c,u)),l.notify()}else s&&(null==a||a.unobserve(s),delete l.measureElementCache[i.key])}},this.measureElement=function(e){e&&l._measureElement(e,!0)},this.getVirtualItems=t((function(){return[l.getIndexes(),l.getMeasurements()]}),(function(e,n){for(var t=[],o=0,r=e.length;o<r;o++){var i=n[e[o]];t.push(i)}return t}),{key:!1,debug:function(){return l.options.debug}}),this.getOffsetForAlignment=function(e,n){var t=l.scrollOffset,o=l.getSize();return"auto"===n&&(n=e<=t?"start":e>=t+o?"end":"start"),"start"===n?e:"end"===n?e-o:"center"===n?e-o/2:e},this.scrollToOffset=function(e,n){var t=void 0===n?{}:n,o=t.align,r=void 0===o?"start":o,i={adjustments:void 0,behavior:t.behavior,sync:!1};l._scrollToOffset(l.getOffsetForAlignment(e,r),i)},this.scrollToIndex=function(e,n){var t=void 0===n?{}:n,o=t.align,r=void 0===o?"auto":o,i=t.behavior;l.pendingScrollToIndexCallback=null;var s=l.scrollOffset,a=l.getSize(),u=l.options.count,c=l.getMeasurements()[Math.max(0,Math.min(e,u-1))];if(!c)throw new Error("VirtualItem not found for index = "+e);if("auto"===r)if(c.end>=s+a-l.options.scrollPaddingEnd)r="end";else{if(!(c.start<=s+l.options.scrollPaddingStart))return;r="start"}var d=function(e){var n="end"===r?e.end+l.options.scrollPaddingEnd:e.start-l.options.scrollPaddingStart;return l.getOffsetForAlignment(n,r)}(c);if(Math.round(d)!==Math.round(s)){var f={adjustments:void 0,behavior:i};l._scrollToOffset(d,f),Object.keys(l.measureElementCache).length>0&&(l.pendingScrollToIndexCallback=function(){l.scrollToIndex(e,{align:r,behavior:i})})}},this.scrollBy=function(e,n){l._scrollToOffset(l.scrollOffset,{adjustments:e,behavior:null==n?void 0:n.behavior})},this.getTotalSize=function(){var e;return((null==(e=l.getMeasurements()[l.options.count-1])?void 0:e.end)||l.options.paddingStart)-l.options.scrollMargin+l.options.paddingEnd},this._scrollToOffset=function(e,n){var t=n.adjustments,o=n.behavior;l.options.scrollToFn(e,{behavior:o,adjustments:t},l)},this.measure=function(){l.itemSizeCache={},l.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){l.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,n,t){var o,r,i=n.adjustments,l=void 0===i?0:i,s=n.behavior,a=e+l;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[t.options.horizontal?"left":"top"]=a,r.behavior=s,r))},e.measureElement=u,e.memo=t,e.observeElementOffset=s,e.observeElementRect=function(e,n){var t=new ResizeObserver((function(e){var t,o;n({width:null==(t=e[0])?void 0:t.contentRect.width,height:null==(o=e[0])?void 0:o.contentRect.height})}));if(e.scrollElement)return n(e.scrollElement.getBoundingClientRect()),t.observe(e.scrollElement),function(){t.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,n){var t=function(e,n){var t={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==t.width:o.height!==t.height)&&n(o),t=o}}(e,n),o=function(){return t({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,n,t){var o,r,i=n.adjustments,l=void 0===i?0:i,s=n.behavior,a=e+l;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[t.options.horizontal?"left":"top"]=a,r.behavior=s,r))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
12
12
|
//# sourceMappingURL=index.production.js.map
|