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

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.
@@ -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 initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","entry","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","windowScroll","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","forEach","_measureElement","setOptions","Object","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","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
1
+ {"version":3,"file":"index.development.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n const { width, height } = element.getBoundingClientRect()\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n handler()\n\n const observer = new ResizeObserver(() => {\n handler()\n })\n\n observer.observe(element)\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","observeElementRect","instance","cb","element","scrollElement","handler","getBoundingClientRect","width","height","observer","ResizeObserver","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","_ro","entries","forEach","entry","_measureElement","target","setOptions","Object","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","rect","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","warn","parseInt","sync","item","prevNode","isConnected","__virtualizerSkipFirstNotSync","measuredItemSize","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -8,5 +8,5 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,i,r=null!=(o=n.initialDeps)?o:[];return function(){var o;n.key&&null!=n.debug&&n.debug()&&(o=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return i;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),i=t.apply(void 0,l),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-o))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return null==n||null==n.onChange||n.onChange(i),i}}function o(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?": "+t:""));return e}var i=function(e,t){return Math.abs(e-t)<1},r=function(e){return e},s=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=t;i<=n;i++)o.push(i);return o},l={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},a=function(e){return function(t,n){if(t.scrollElement){var o=l[e][0],i=l[e][1],r=t.scrollElement[o],s=t.scrollElement[i],a=function(){var e=t.scrollElement[t.options.horizontal?o:i];n(e)};a();var u=function(e){var n=e.currentTarget,l=n[o],u=n[i];(t.options.horizontal?r-l:s-u)&&a(),r=l,s=u};return t.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){t.scrollElement.removeEventListener("scroll",u)}}}},u=a("element"),c=a("window"),d=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var l,a=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(l=null,function(){return l||("undefined"!=typeof ResizeObserver?l=new ResizeObserver((function(e){e.forEach((function(e){a._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),a.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:r,rangeExtractor:s,onChange:function(){},measureElement:d,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==a.options.onChange||a.options.onChange(a)},this.cleanup=function(){a.unsubs.filter(Boolean).forEach((function(e){return e()})),a.unsubs=[],a.scrollElement=null},this._didMount=function(){var e=a.getResizeObserver();return Object.values(a.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),a.cleanup()}},this._willUpdate=function(){var e=a.options.getScrollElement();a.scrollElement!==e&&(a.cleanup(),a.scrollElement=e,a._scrollToOffset(a.scrollOffset,{adjustments:void 0,behavior:void 0}),a.unsubs.push(a.options.observeElementRect(a,(function(e){a.scrollRect=e,a.maybeNotify()}))),a.unsubs.push(a.options.observeElementOffset(a,(function(e){a.scrollAdjustments=0,a.scrollOffset!==e&&(null!==a.isScrollingTimeoutId&&(clearTimeout(a.isScrollingTimeoutId),a.isScrollingTimeoutId=null),a.isScrolling=!0,a.scrollDirection=a.scrollOffset<e?"forward":"backward",a.scrollOffset=e,a.maybeNotify(),a.isScrollingTimeoutId=setTimeout((function(){a.isScrollingTimeoutId=null,a.isScrolling=!1,a.scrollDirection=null,a.maybeNotify()}),a.options.scrollingDelay))}))))},this.getSize=function(){return a.scrollRect[a.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[a.options.count,a.options.paddingStart,a.options.scrollMargin,a.options.getItemKey,a.itemSizeCache]}),(function(e,t,n,o,i){var r=a.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,a.pendingMeasuredCacheIndexes):0;a.pendingMeasuredCacheIndexes=[];for(var s=a.measurementsCache.slice(0,r),l=r;l<e;l++){var u=o(l),c=i[u],d=s[l-1]?s[l-1].end:t+n,f="number"==typeof c?c:a.options.estimateSize(l),h=d+f;s[l]={index:l,start:d,size:f,end:h,key:u}}return a.measurementsCache=s,s}),{key:!1,debug:function(){return a.options.debug}}),this.calculateRange=n((function(){return[a.getMeasurements(),a.getSize(),a.scrollOffset]}),(function(e,t,n){return a.range=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,i=t.length-1,r=function(e,t,n,o){for(;e<=t;){var i=(e+t)/2|0,r=n(i);if(r<o)e=i+1;else{if(!(r>o))return i;t=i-1}}return e>0?e-1:0}(0,i,(function(e){return t[e].start}),o),s=r;for(;s<i&&t[s].end<o+n;)s++;return{startIndex:r,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n})}),{key:!1,debug:function(){return a.options.debug}}),this.maybeNotify=n((function(){return[].concat(Object.values(a.calculateRange()),[a.isScrolling])}),(function(){a.notify()}),{key:!1,debug:function(){return a.options.debug},initialDeps:[].concat(Object.values(this.range),[this.isScrolling])}),this.getIndexes=n((function(){return[a.options.rangeExtractor,a.calculateRange(),a.options.overscan,a.options.count]}),(function(e,n,o,i){return e(t({},n,{overscan:o,count:i}))}),{key:!1,debug:function(){return a.options.debug}}),this.indexFromElement=function(e){var t=a.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,n){var o,i=a.indexFromElement(e),r=a.measurementsCache[i];if(r){var s=a.measureElementCache[r.key],l=a.getResizeObserver();if(!e.isConnected)return null==l||l.unobserve(e),void(e===s&&delete a.measureElementCache[r.key]);if(s!==e)s&&(null==l||l.unobserve(s)),null==l||l.observe(e),a.measureElementCache[r.key]=e;else if(!n&&!s.__virtualizerSkipFirstNotSync)return void(s.__virtualizerSkipFirstNotSync=!0);var u,c=a.options.measureElement(e,a),d=c-(null!=(o=a.itemSizeCache[r.key])?o:r.size);if(0!==d)r.start<a.scrollOffset&&a._scrollToOffset(a.scrollOffset,{adjustments:a.scrollAdjustments+=d,behavior:void 0}),a.pendingMeasuredCacheIndexes.push(i),a.itemSizeCache=t({},a.itemSizeCache,((u={})[r.key]=c,u)),a.notify()}},this.measureElement=function(e){e&&a._measureElement(e,!0)},this.getVirtualItems=n((function(){return[a.getIndexes(),a.getMeasurements()]}),(function(e,t){for(var n=[],o=0,i=e.length;o<i;o++){var r=t[e[o]];n.push(r)}return n}),{key:!1,debug:function(){return a.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=a.getSize();"auto"===t&&(t=e<=a.scrollOffset?"start":e>=a.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=a.options.horizontal?"scrollWidth":"scrollHeight",i=(a.scrollElement?"document"in a.scrollElement?a.scrollElement.document.documentElement[o]:a.scrollElement[o]:0)-a.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=function(e,t){void 0===t&&(t="auto"),e=Math.max(0,Math.min(e,a.options.count-1));var n=o(a.getMeasurements()[e]);if("auto"===t)if(n.end>=a.scrollOffset+a.getSize()-a.options.scrollPaddingEnd)t="end";else{if(!(n.start<=a.scrollOffset+a.options.scrollPaddingStart))return[a.scrollOffset,t];t="start"}var i="end"===t?n.end+a.options.scrollPaddingEnd:n.start-a.options.scrollPaddingStart;return[a.getOffsetForAlignment(i,t),t]},this.isDynamicMode=function(){return Object.keys(a.measureElementCache).length>0},this.cancelScrollToIndex=function(){null!==a.scrollToIndexTimeoutId&&(clearTimeout(a.scrollToIndexTimeoutId),a.scrollToIndexTimeoutId=null)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,i=void 0===o?"start":o,r=n.behavior;a.cancelScrollToIndex(),"smooth"===r&&a.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),a._scrollToOffset(a.getOffsetForAlignment(e,i),{adjustments:void 0,behavior:r})},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,s=n.behavior;e=Math.max(0,Math.min(e,a.options.count-1)),a.cancelScrollToIndex(),"smooth"===s&&a.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");var l=a.getOffsetForIndex(e,r),u=l[0],c=l[1];a._scrollToOffset(u,{adjustments:void 0,behavior:s}),"smooth"!==s&&a.isDynamicMode()&&(a.scrollToIndexTimeoutId=setTimeout((function(){if(a.scrollToIndexTimeoutId=null,!!a.measureElementCache[a.options.getItemKey(e)]){var t=a.getOffsetForIndex(e,c)[0];i(t,a.scrollOffset)||a.scrollToIndex(e,{align:c,behavior:s})}else a.scrollToIndex(e,{align:c,behavior:s})})))},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;a.cancelScrollToIndex(),"smooth"===n&&a.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),a._scrollToOffset(a.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=a.getMeasurements()[a.options.count-1])?void 0:e.end)||a.options.paddingStart)-a.options.scrollMargin+a.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;a.options.scrollToFn(e,{behavior:o,adjustments:n},a)},this.measure=function(){a.itemSizeCache={},a.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){a.itemSizeCache[e.key]=e.size})),this.maybeNotify()},e.approxEqual=i,e.defaultKeyExtractor=r,e.defaultRangeExtractor=s,e.elementScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},e.measureElement=d,e.memo=n,e.notUndefined=o,e.observeElementOffset=u,e.observeElementRect=function(e,t){var n=new ResizeObserver((function(e){var n=e[0];if(n){var o=n.contentRect,i=o.width,r=o.height;t({width:Math.round(i),height:Math.round(r)})}else t({width:0,height:0})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),n.observe(e.scrollElement),function(){n.unobserve(e.scrollElement)}},e.observeWindowOffset=c,e.observeWindowRect=function(e,t){var n=function(e,t){var n={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==n.width:o.height!==n.height)&&t(o),n=o}}(e,t),o=function(){return n({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},Object.defineProperty(e,"__esModule",{value:!0})}));
11
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,i,r=null!=(o=n.initialDeps)?o:[];return function(){var o;n.key&&null!=n.debug&&n.debug()&&(o=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return i;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),i=t.apply(void 0,l),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-o))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return null==n||null==n.onChange||n.onChange(i),i}}function o(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?": "+t:""));return e}var i=function(e,t){return Math.abs(e-t)<1},r=function(e){return e},s=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=t;i<=n;i++)o.push(i);return o},l=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var a,u=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(a=null,function(){return a||("undefined"!=typeof ResizeObserver?a=new ResizeObserver((function(e){e.forEach((function(e){u._measureElement(e.target,!1)}))})):null)}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),u.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:r,rangeExtractor:s,onChange:function(){},measureElement:l,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==u.options.onChange||u.options.onChange(u)},this.cleanup=function(){u.unsubs.filter(Boolean).forEach((function(e){return e()})),u.unsubs=[],u.scrollElement=null},this._didMount=function(){var e=u.getResizeObserver();return Object.values(u.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),u.cleanup()}},this._willUpdate=function(){var e=u.options.getScrollElement();u.scrollElement!==e&&(u.cleanup(),u.scrollElement=e,u._scrollToOffset(u.scrollOffset,{adjustments:void 0,behavior:void 0}),u.unsubs.push(u.options.observeElementRect(u,(function(e){var t=u.scrollRect;u.scrollRect=e,(u.options.horizontal?e.width!==t.width:e.height!==t.height)&&u.maybeNotify()}))),u.unsubs.push(u.options.observeElementOffset(u,(function(e){u.scrollAdjustments=0,u.scrollOffset!==e&&(null!==u.isScrollingTimeoutId&&(clearTimeout(u.isScrollingTimeoutId),u.isScrollingTimeoutId=null),u.isScrolling=!0,u.scrollDirection=u.scrollOffset<e?"forward":"backward",u.scrollOffset=e,u.maybeNotify(),u.isScrollingTimeoutId=setTimeout((function(){u.isScrollingTimeoutId=null,u.isScrolling=!1,u.scrollDirection=null,u.maybeNotify()}),u.options.scrollingDelay))}))))},this.getSize=function(){return u.scrollRect[u.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[u.options.count,u.options.paddingStart,u.options.scrollMargin,u.options.getItemKey,u.itemSizeCache]}),(function(e,t,n,o,i){var r=u.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,u.pendingMeasuredCacheIndexes):0;u.pendingMeasuredCacheIndexes=[];for(var s=u.measurementsCache.slice(0,r),l=r;l<e;l++){var a=o(l),c=i[a],d=s[l-1]?s[l-1].end:t+n,f="number"==typeof c?c:u.options.estimateSize(l),h=d+f;s[l]={index:l,start:d,size:f,end:h,key:a}}return u.measurementsCache=s,s}),{key:!1,debug:function(){return u.options.debug}}),this.calculateRange=n((function(){return[u.getMeasurements(),u.getSize(),u.scrollOffset]}),(function(e,t,n){return u.range=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,i=t.length-1,r=function(e,t,n,o){for(;e<=t;){var i=(e+t)/2|0,r=n(i);if(r<o)e=i+1;else{if(!(r>o))return i;t=i-1}}return e>0?e-1:0}(0,i,(function(e){return t[e].start}),o),s=r;for(;s<i&&t[s].end<o+n;)s++;return{startIndex:r,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n})}),{key:!1,debug:function(){return u.options.debug}}),this.maybeNotify=n((function(){return[].concat(Object.values(u.calculateRange()),[u.isScrolling])}),(function(){u.notify()}),{key:!1,debug:function(){return u.options.debug},initialDeps:[].concat(Object.values(this.range),[this.isScrolling])}),this.getIndexes=n((function(){return[u.options.rangeExtractor,u.calculateRange(),u.options.overscan,u.options.count]}),(function(e,n,o,i){return e(t({},n,{overscan:o,count:i}))}),{key:!1,debug:function(){return u.options.debug}}),this.indexFromElement=function(e){var t=u.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,n){var o,i=u.indexFromElement(e),r=u.measurementsCache[i];if(r){var s=u.measureElementCache[r.key],l=u.getResizeObserver();if(!e.isConnected)return null==l||l.unobserve(e),void(e===s&&delete u.measureElementCache[r.key]);if(s!==e)s&&(null==l||l.unobserve(s)),null==l||l.observe(e),u.measureElementCache[r.key]=e;else if(!n&&!s.__virtualizerSkipFirstNotSync)return void(s.__virtualizerSkipFirstNotSync=!0);var a,c=u.options.measureElement(e,u),d=c-(null!=(o=u.itemSizeCache[r.key])?o:r.size);if(0!==d)r.start<u.scrollOffset&&u._scrollToOffset(u.scrollOffset,{adjustments:u.scrollAdjustments+=d,behavior:void 0}),u.pendingMeasuredCacheIndexes.push(i),u.itemSizeCache=t({},u.itemSizeCache,((a={})[r.key]=c,a)),u.notify()}},this.measureElement=function(e){e&&u._measureElement(e,!0)},this.getVirtualItems=n((function(){return[u.getIndexes(),u.getMeasurements()]}),(function(e,t){for(var n=[],o=0,i=e.length;o<i;o++){var r=t[e[o]];n.push(r)}return n}),{key:!1,debug:function(){return u.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=u.getSize();"auto"===t&&(t=e<=u.scrollOffset?"start":e>=u.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=u.options.horizontal?"scrollWidth":"scrollHeight",i=(u.scrollElement?"document"in u.scrollElement?u.scrollElement.document.documentElement[o]:u.scrollElement[o]:0)-u.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=function(e,t){void 0===t&&(t="auto"),e=Math.max(0,Math.min(e,u.options.count-1));var n=o(u.getMeasurements()[e]);if("auto"===t)if(n.end>=u.scrollOffset+u.getSize()-u.options.scrollPaddingEnd)t="end";else{if(!(n.start<=u.scrollOffset+u.options.scrollPaddingStart))return[u.scrollOffset,t];t="start"}var i="end"===t?n.end+u.options.scrollPaddingEnd:n.start-u.options.scrollPaddingStart;return[u.getOffsetForAlignment(i,t),t]},this.isDynamicMode=function(){return Object.keys(u.measureElementCache).length>0},this.cancelScrollToIndex=function(){null!==u.scrollToIndexTimeoutId&&(clearTimeout(u.scrollToIndexTimeoutId),u.scrollToIndexTimeoutId=null)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,i=void 0===o?"start":o,r=n.behavior;u.cancelScrollToIndex(),"smooth"===r&&u.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),u._scrollToOffset(u.getOffsetForAlignment(e,i),{adjustments:void 0,behavior:r})},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,s=n.behavior;e=Math.max(0,Math.min(e,u.options.count-1)),u.cancelScrollToIndex(),"smooth"===s&&u.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");var l=u.getOffsetForIndex(e,r),a=l[0],c=l[1];u._scrollToOffset(a,{adjustments:void 0,behavior:s}),"smooth"!==s&&u.isDynamicMode()&&(u.scrollToIndexTimeoutId=setTimeout((function(){if(u.scrollToIndexTimeoutId=null,!!u.measureElementCache[u.options.getItemKey(e)]){var t=u.getOffsetForIndex(e,c)[0];i(t,u.scrollOffset)||u.scrollToIndex(e,{align:c,behavior:s})}else u.scrollToIndex(e,{align:c,behavior:s})})))},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;u.cancelScrollToIndex(),"smooth"===n&&u.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),u._scrollToOffset(u.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=u.getMeasurements()[u.options.count-1])?void 0:e.end)||u.options.paddingStart)-u.options.scrollMargin+u.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;u.options.scrollToFn(e,{behavior:o,adjustments:n},u)},this.measure=function(){u.itemSizeCache={},u.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){u.itemSizeCache[e.key]=e.size})),this.maybeNotify()},e.approxEqual=i,e.defaultKeyExtractor=r,e.defaultRangeExtractor=s,e.elementScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},e.measureElement=l,e.memo=n,e.notUndefined=o,e.observeElementOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollLeft":"scrollTop"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeElementRect=function(e,t){var n=e.scrollElement;if(n){var o=function(){var e=n.getBoundingClientRect(),o=e.width,i=e.height;t({width:Math.round(o),height:Math.round(i)})};o();var i=new ResizeObserver((function(){o()}));return i.observe(n),function(){i.unobserve(n)}}},e.observeWindowOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollX":"scrollY"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeWindowRect=function(e,t){var n=e.scrollElement;if(n){var o=function(){t({width:n.innerWidth,height:n.innerHeight})};return o(),n.addEventListener("resize",o,{passive:!0}),function(){n.removeEventListener("resize",o)}}},e.windowScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},Object.defineProperty(e,"__esModule",{value:!0})}));
12
12
  //# sourceMappingURL=index.production.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry) {\n const { width, height } = entry.contentRect\n cb({\n width: Math.round(width),\n height: Math.round(height),\n })\n } else {\n cb({ width: 0, height: 0 })\n }\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(offset)\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.maybeNotify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","_opts$initialDeps","result","deps","initialDeps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","scrollProps","element","window","createOffsetObserver","mode","instance","cb","scrollElement","propX","propY","prevX","prevY","scroll","offset","options","horizontal","onScroll","e","target","currentTarget","scrollX","scrollY","addEventListener","capture","passive","removeEventListener","observeElementOffset","observeWindowOffset","measureElement","getBoundingClientRect","_ro","_this","this","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","ResizeObserver","entries","forEach","entry","_measureElement","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","behavior","observeElementRect","rect","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","calculateRange","outerSize","_ref8","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","concat","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","sync","_this$itemSizeCache$i","item","prevNode","isConnected","unobserve","__virtualizerSkipFirstNotSync","_extends2","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","getOffsetForIndex","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","_temp","_ref4","_ref4$align","scrollToIndex","_temp2","_ref5","_ref5$align","initialAlign","_this$getOffsetForInd","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref7","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","observer","contentRect","memoizedCallback","prev","memoRectCallback","onResize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref"],"mappings":"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"}
1
+ {"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\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\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 opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n const { width, height } = element.getBoundingClientRect()\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n handler()\n\n const observer = new ResizeObserver(() => {\n handler()\n })\n\n observer.observe(element)\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n el: TItemElement,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n private measureElementCache: Record<\n Key,\n TItemElement & { __virtualizerSkipFirstNotSync?: boolean }\n > = {}\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache[item.key] = item.size\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n const ro = this.getResizeObserver()\n Object.values(this.measureElementCache).forEach((node) => ro?.observe(node))\n\n return () => {\n ro?.disconnect()\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.itemSizeCache,\n ],\n (count, paddingStart, scrollMargin, getItemKey, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n const measuredSize = itemSizeCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart + scrollMargin\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n const end = start + size\n measurements[i] = { index: i, start, size, end, key }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => [...Object.values(this.calculateRange()), this.isScrolling],\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [...Object.values(this.range), this.isScrolling],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n ro?.unobserve(node)\n if (node === prevNode) {\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n ro?.observe(node)\n this.measureElementCache[item.key] = node\n } else {\n if (!sync && !prevNode.__virtualizerSkipFirstNotSync) {\n prevNode.__virtualizerSkipFirstNotSync = true\n return\n }\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemSizeCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemSizeCache = {\n ...this.itemSizeCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => Object.keys(this.measureElementCache).length > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM =\n !!this.measureElementCache[this.options.getItemKey(index)]\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = {}\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","_opts$initialDeps","result","deps","initialDeps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","measureElement","element","instance","getBoundingClientRect","options","horizontal","_ro","_this","this","unsubs","scrollElement","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","getResizeObserver","ResizeObserver","entries","forEach","entry","_measureElement","target","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","notify","cleanup","filter","Boolean","d","_didMount","ro","values","node","observe","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","behavior","observeElementRect","rect","prev","scrollRect","maybeNotify","observeElementOffset","offset","clearTimeout","setTimeout","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","calculateRange","outerSize","_ref8","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","concat","getIndexes","indexFromElement","attributeName","indexStr","getAttribute","parseInt","warn","sync","_this$itemSizeCache$i","item","prevNode","isConnected","unobserve","__virtualizerSkipFirstNotSync","_extends2","measuredItemSize","delta","getVirtualItems","indexes","virtualItems","k","len","measurement","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","getOffsetForIndex","isDynamicMode","keys","cancelScrollToIndex","scrollToOffset","_temp","_ref4","_ref4$align","scrollToIndex","_temp2","_ref5","_ref5$align","initialAlign","_this$getOffsetForInd","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref7","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","cb","handler","addEventListener","passive","removeEventListener","observer","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tanstack/virtual-core",
3
3
  "author": "Tanner Linsley",
4
- "version": "3.0.0-beta.44",
4
+ "version": "3.0.0-beta.45",
5
5
  "description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/tanstack/virtual#readme",