@tanstack/virtual-core 3.0.0-beta.6 → 3.0.0-beta.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js +27 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js +31 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs +27 -0
- package/build/lib/_virtual/_rollupPluginBabelHelpers.mjs.map +1 -0
- package/build/lib/index.d.ts +126 -0
- package/build/lib/index.esm.js +652 -0
- package/build/lib/index.esm.js.map +1 -0
- package/build/lib/index.js +667 -0
- package/build/lib/index.js.map +1 -0
- package/build/lib/index.mjs +652 -0
- package/build/lib/index.mjs.map +1 -0
- package/build/lib/utils.d.ts +10 -0
- package/build/lib/utils.esm.js +58 -0
- package/build/lib/utils.esm.js.map +1 -0
- package/build/{cjs/packages/virtual-core/src → lib}/utils.js +28 -21
- package/build/lib/utils.js.map +1 -0
- package/build/lib/utils.mjs +58 -0
- package/build/lib/utils.mjs.map +1 -0
- package/build/umd/index.development.js +604 -452
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +15 -13
- package/src/index.ts +546 -233
- package/src/utils.ts +17 -5
- package/build/cjs/packages/virtual-core/src/index.js +0 -465
- package/build/cjs/packages/virtual-core/src/index.js.map +0 -1
- package/build/cjs/packages/virtual-core/src/utils.js.map +0 -1
- package/build/esm/index.js +0 -559
- package/build/esm/index.js.map +0 -1
- package/build/stats-html.html +0 -2689
- package/build/stats.json +0 -101
- package/build/types/index.d.ts +0 -88
- package/build/types/utils.d.ts +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../../../../node_modules/@reach/observe-rect/dist/observe-rect.esm.js","../../src/utils.ts","../../src/index.ts"],"sourcesContent":["var props = [\"bottom\", \"height\", \"left\", \"right\", \"top\", \"width\"];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n var changedStates = [];\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.rect = newRect;\n changedStates.push(state);\n }\n });\n changedStates.forEach(function (state) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n });\n rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n}\n\nexport default observeRect;\n//# sourceMappingURL=observe-rect.esm.js.map\n","export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import observeRect from '@reach/observe-rect'\nimport { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ninterface ScrollToOptions {\n align: ScrollAlignment\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\ninterface Item {\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\nexport interface VirtualItem<TItemElement> extends Item {\n measureElement: (el: TItemElement | null) => void\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 = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = observeRect(instance.scrollElement as Element, (rect) => {\n cb(rect)\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe()\n\n return () => {\n observer.unobserve()\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const onResize = () => {\n cb({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\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\nexport const observeElementOffset = (\n instance: Virtualizer<any, any>,\n cb: (offset: number) => void,\n) => {\n const onScroll = () =>\n cb(\n instance.scrollElement[\n instance.options.horizontal ? 'scrollLeft' : 'scrollTop'\n ],\n )\n\n if (!instance.scrollElement) {\n return\n }\n\n onScroll()\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\nexport const observeWindowOffset = (\n instance: Virtualizer<any, any>,\n cb: (offset: number) => void,\n) => {\n const onScroll = () =>\n cb(\n instance.scrollElement[\n instance.options.horizontal ? 'scrollX' : 'scrollY'\n ],\n )\n\n if (!instance.scrollElement) {\n return\n }\n\n onScroll()\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\nexport const measureElement = (\n element: unknown,\n instance: Virtualizer<any, any>,\n) => {\n return (element as Element).getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ]\n}\n\nexport const windowScroll = (\n offset: number,\n canSmooth: boolean,\n instance: Virtualizer<any, any>,\n) => {\n ;(instance.scrollElement as Window)?.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport const elementScroll = (\n offset: number,\n canSmooth: boolean,\n instance: Virtualizer<any, any>,\n) => {\n ;(instance.scrollElement as Element)?.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement = unknown,\n TItemElement = unknown,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n canSmooth: boolean,\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 enableSmoothScroll?: boolean\n}\n\nexport class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n private measurementsCache: Item[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<\n number,\n (measurableItem: TItemElement | null) => void\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 }\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 enableSmoothScroll: true,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\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 }\n\n _didMount = () => {\n return () => {\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.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.notify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollOffset = offset\n this.notify()\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.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\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 return measurements\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n private calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'calculateRange',\n debug: () => this.options.debug,\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: count,\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getIndexes',\n },\n )\n\n getVirtualItems = memo(\n () => [\n this.getIndexes(),\n this.getMeasurements(),\n this.options.measureElement,\n ],\n (indexes, measurements, measureElement) => {\n const makeMeasureElement =\n (index: number) => (measurableItem: TItemElement | null) => {\n const item = this.measurementsCache[index]!\n\n if (!measurableItem) {\n return\n }\n\n const measuredItemSize = measureElement(measurableItem, this)\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n if (measuredItemSize !== itemSize) {\n if (item.start < this.scrollOffset) {\n if (\n process.env.NODE_ENV === 'development' &&\n this.options.debug\n ) {\n console.info('correction', measuredItemSize - itemSize)\n }\n\n if (!this.destinationOffset) {\n this._scrollToOffset(\n this.scrollOffset + (measuredItemSize - itemSize),\n false,\n )\n }\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n const virtualItems: VirtualItem<TItemElement>[] = []\n\n const currentMeasureElements: typeof this.measureElementCache = {}\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n const item = {\n ...measurement,\n measureElement: (currentMeasureElements[i] =\n this.measureElementCache[i] ?? makeMeasureElement(i)),\n }\n virtualItems.push(item)\n }\n\n this.measureElementCache = currentMeasureElements\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getIndexes',\n },\n )\n\n scrollToOffset = (\n toOffset: number,\n { align }: ScrollToOffsetOptions = { align: 'start' },\n ) => {\n const attempt = () => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n this._scrollToOffset(toOffset, true)\n } else if (align === 'end') {\n this._scrollToOffset(toOffset - size, true)\n } else if (align === 'center') {\n this._scrollToOffset(toOffset - size / 2, true)\n }\n }\n\n attempt()\n requestAnimationFrame(() => {\n attempt()\n })\n }\n\n scrollToIndex = (\n index: number,\n { align, ...rest }: ScrollToIndexOptions = { align: 'auto' },\n ) => {\n const measurements = this.getMeasurements()\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n return\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n this.scrollToOffset(toOffset, { align, ...rest })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (offset: number, canSmooth: boolean) => {\n clearTimeout(this.scrollCheckFrame)\n\n this.destinationOffset = offset\n this.options.scrollToFn(\n offset,\n this.options.enableSmoothScroll && canSmooth,\n this,\n )\n\n let scrollCheckFrame: ReturnType<typeof setTimeout>\n\n const check = () => {\n let lastOffset = this.scrollOffset\n this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {\n if (this.scrollCheckFrame !== scrollCheckFrame) {\n return\n }\n\n if (this.scrollOffset === lastOffset) {\n this.destinationOffset = undefined\n return\n }\n lastOffset = this.scrollOffset\n check()\n }, 100)\n }\n\n check()\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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: Item[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","deps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","observeElementRect","instance","cb","observer","observeRect","scrollElement","rect","getBoundingClientRect","observe","unobserve","observeWindowRect","onResize","width","innerWidth","height","innerHeight","addEventListener","capture","passive","removeEventListener","observeElementOffset","onScroll","options","horizontal","observeWindowOffset","measureElement","element","windowScroll","offset","canSmooth","scrollTo","behavior","undefined","elementScroll","Virtualizer","constructor","unsubs","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","measureElementCache","setOptions","Object","entries","forEach","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","scrollRect","scrollOffset","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","calculateRange","outerSize","getIndexes","getVirtualItems","indexes","makeMeasureElement","measurableItem","item","measuredItemSize","itemSize","destinationOffset","_scrollToOffset","virtualItems","currentMeasureElements","k","len","measurement","scrollToOffset","toOffset","align","attempt","requestAnimationFrame","scrollToIndex","rest","getTotalSize","clearTimeout","scrollCheckFrame","scrollToFn","check","lastOffset","setTimeout","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: false | string\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 lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const item = this.measurementsCache[this.indexFromElement(node)]\n if (!item) {\n this.measureElementCache.forEach((cached, key) => {\n if (cached === node) {\n this.observer.unobserve(node)\n this.measureElementCache.delete(key)\n }\n })\n return\n }\n\n const prevNode = this.measureElementCache.get(item.key)\n\n if (!node.isConnected) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n this.measureElementCache.delete(item.key)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(item.key, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(item, measuredItemSize)\n }\n\n resizeItem = (item: VirtualItem, size: number) => {\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n const delta = size - 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(item.index)\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size))\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["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","rect","width","height","getBoundingClientRect","observer","ResizeObserver","entries","entry","borderBoxSize","box","inlineSize","blockSize","observe","unobserve","observeWindowRect","innerWidth","innerHeight","addEventListener","passive","removeEventListener","observeElementOffset","options","horizontal","observeWindowOffset","measureElement","size","windowScroll","offset","adjustments","behavior","toOffset","scrollTo","elementScroll","Virtualizer","unsubs","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","_ro","get","forEach","_measureElement","target","disconnect","setOptions","Object","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","prev","scrollRect","maybeNotify","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","Array","from","values","sort","getMeasurements","slice","furthestMeasurement","measuredSize","estimateSize","calculateRange","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","warn","parseInt","item","cached","prevNode","isConnected","measuredItemSize","resizeItem","itemSize","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","findNearestBinarySearch","getOffsetForAlignment","align","scrollSizeProp","scrollSize","document","documentElement","maxOffset","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","scrollToIndex","initialAlign","elementInDOM","scrollBy","getTotalSize","scrollToFn","measure","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";var t,s=["bottom","height","left","right","top","width"],n=new Map,o=function e(){var o=[];n.forEach((function(e,t){var n,i,l=t.getBoundingClientRect();n=l,i=e.rect,void 0===n&&(n={}),void 0===i&&(i={}),s.some((function(e){return n[e]!==i[e]}))&&(e.rect=l,o.push(e))})),o.forEach((function(e){e.callbacks.forEach((function(t){return t(e.rect)}))})),t=window.requestAnimationFrame(e)};function i(e,t,s){let n,o=[];return()=>{let i;s.key&&null!=s.debug&&s.debug()&&(i=Date.now());const l=e();if(!(l.length!==o.length||l.some(((e,t)=>o[t]!==e))))return n;let r;if(o=l,s.key&&null!=s.debug&&s.debug()&&(r=Date.now()),n=t(...l),null==s||null==s.onChange||s.onChange(n),s.key&&null!=s.debug&&s.debug()){const e=Math.round(100*(Date.now()-i))/100,t=Math.round(100*(Date.now()-r))/100,n=t/16,o=(e,t)=>{for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+o(t,5)+" /"+o(e,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*n,120))+"deg 100% 31%);",null==s?void 0:s.key)}return n}}const l=e=>e,r=e=>{const t=Math.max(e.startIndex-e.overscan,0),s=Math.min(e.endIndex+e.overscan,e.count-1),n=[];for(let e=t;e<=s;e++)n.push(e);return n},a=(e,t)=>e.getBoundingClientRect()[t.options.horizontal?"width":"height"];e.Virtualizer=class{constructor(e){var t=this;this.unsubs=[],this.scrollElement=null,this.measurementsCache=[],this.itemMeasurementsCache={},this.pendingMeasuredCacheIndexes=[],this.measureElementCache={},this.setOptions=e=>{Object.entries(e).forEach((t=>{let[s,n]=t;void 0===n&&delete e[s]})),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:l,rangeExtractor:r,enableSmoothScroll:!0,onChange:()=>{},measureElement:a,initialRect:{width:0,height:0},...e}},this.notify=()=>{var e,t;null==(e=(t=this.options).onChange)||e.call(t,this)},this.cleanup=()=>{this.unsubs.filter(Boolean).forEach((e=>e())),this.unsubs=[]},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{const e=this.options.getScrollElement();this.scrollElement!==e&&(this.cleanup(),this.scrollElement=e,this.unsubs.push(this.options.observeElementRect(this,(e=>{this.scrollRect=e,this.notify()}))),this.unsubs.push(this.options.observeElementOffset(this,(e=>{this.scrollOffset=e,this.notify()}))))},this.getSize=()=>this.scrollRect[this.options.horizontal?"width":"height"],this.getMeasurements=i((()=>[this.options.count,this.options.paddingStart,this.options.getItemKey,this.itemMeasurementsCache]),((e,t,s,n)=>{const o=this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[];const i=this.measurementsCache.slice(0,o);for(let l=o;l<e;l++){const e=s(l),o=n[e],r=i[l-1]?i[l-1].end:t,a="number"==typeof o?o:this.options.estimateSize(l),c=r+a;i[l]={index:l,start:r,size:a,end:c,key:e}}return this.measurementsCache=i,i}),{key:!1,debug:()=>this.options.debug}),this.calculateRange=i((()=>[this.getMeasurements(),this.getSize(),this.scrollOffset]),((e,t,s)=>function(e){let{measurements:t,outerSize:s,scrollOffset:n}=e;const o=t.length-1,i=((e,t,s,n)=>{for(;e<=t;){const o=(e+t)/2|0,i=s(o);if(i<n)e=o+1;else{if(!(i>n))return o;t=o-1}}return e>0?e-1:0})(0,o,(e=>t[e].start),n);let l=i;for(;l<o&&t[l].end<n+s;)l++;return{startIndex:i,endIndex:l}}({measurements:e,outerSize:t,scrollOffset:s})),{key:!1,debug:()=>this.options.debug}),this.getIndexes=i((()=>[this.options.rangeExtractor,this.calculateRange(),this.options.overscan,this.options.count]),((e,t,s,n)=>e({...t,overscan:s,count:n})),{key:!1}),this.getVirtualItems=i((()=>[this.getIndexes(),this.getMeasurements(),this.options.measureElement]),((e,t,s)=>{const n=e=>t=>{var n;const o=this.measurementsCache[e];if(!t)return;const i=s(t,this),l=null!=(n=this.itemMeasurementsCache[o.key])?n:o.size;i!==l&&(o.start<this.scrollOffset&&(this.destinationOffset||this._scrollToOffset(this.scrollOffset+(i-l),!1)),this.pendingMeasuredCacheIndexes.push(e),this.itemMeasurementsCache={...this.itemMeasurementsCache,[o.key]:i},this.notify())},o=[],i={};for(let s=0,r=e.length;s<r;s++){var l;const r=e[s],a={...t[r],measureElement:i[r]=null!=(l=this.measureElementCache[r])?l:n(r)};o.push(a)}return this.measureElementCache=i,o}),{key:!1}),this.scrollToOffset=function(e,s){let{align:n}=void 0===s?{align:"start"}:s;const o=()=>{const s=t.scrollOffset,o=t.getSize();"auto"===n&&(n=e<=s?"start":e>=s+o?"end":"start"),"start"===n?t._scrollToOffset(e,!0):"end"===n?t._scrollToOffset(e-o,!0):"center"===n&&t._scrollToOffset(e-o/2,!0)};o(),requestAnimationFrame((()=>{o()}))},this.scrollToIndex=function(e,s){let{align:n,...o}=void 0===s?{align:"auto"}:s;const i=t.getMeasurements(),l=t.scrollOffset,r=t.getSize(),{count:a}=t.options,c=i[Math.max(0,Math.min(e,a-1))];if(!c)return;if("auto"===n)if(c.end>=l+r-t.options.scrollPaddingEnd)n="end";else{if(!(c.start<=l+t.options.scrollPaddingStart))return;n="start"}const h="end"===n?c.end+t.options.scrollPaddingEnd:c.start-t.options.scrollPaddingStart;t.scrollToOffset(h,{align:n,...o})},this.getTotalSize=()=>{var e;return((null==(e=this.getMeasurements()[this.options.count-1])?void 0:e.end)||this.options.paddingStart)+this.options.paddingEnd},this._scrollToOffset=(e,t)=>{let s;clearTimeout(this.scrollCheckFrame),this.destinationOffset=e,this.options.scrollToFn(e,this.options.enableSmoothScroll&&t,this);const n=()=>{let e=this.scrollOffset;this.scrollCheckFrame=s=setTimeout((()=>{this.scrollCheckFrame===s&&(this.scrollOffset!==e?(e=this.scrollOffset,n()):this.destinationOffset=void 0)}),100)};n()},this.measure=()=>{this.itemMeasurementsCache={},this.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset}},e.defaultKeyExtractor=l,e.defaultRangeExtractor=r,e.elementScroll=(e,t,s)=>{var n;null==(n=s.scrollElement)||n.scrollTo({[s.options.horizontal?"left":"top"]:e,behavior:t?"smooth":void 0})},e.measureElement=a,e.memo=i,e.observeElementOffset=(e,t)=>{const s=()=>t(e.scrollElement[e.options.horizontal?"scrollLeft":"scrollTop"]);if(e.scrollElement)return s(),e.scrollElement.addEventListener("scroll",s,{capture:!1,passive:!0}),()=>{e.scrollElement.removeEventListener("scroll",s)}},e.observeElementRect=(e,s)=>{const i=function(e,s){return{observe:function(){var t=0===n.size;n.has(e)?n.get(e).callbacks.push(s):n.set(e,{rect:void 0,hasRectChanged:!1,callbacks:[s]}),t&&o()},unobserve:function(){var o=n.get(e);if(o){var i=o.callbacks.indexOf(s);i>=0&&o.callbacks.splice(i,1),o.callbacks.length||n.delete(e),n.size||cancelAnimationFrame(t)}}}}(e.scrollElement,(e=>{s(e)}));if(e.scrollElement)return s(e.scrollElement.getBoundingClientRect()),i.observe(),()=>{i.unobserve()}},e.observeWindowOffset=(e,t)=>{const s=()=>t(e.scrollElement[e.options.horizontal?"scrollX":"scrollY"]);if(e.scrollElement)return s(),e.scrollElement.addEventListener("scroll",s,{capture:!1,passive:!0}),()=>{e.scrollElement.removeEventListener("scroll",s)}},e.observeWindowRect=(e,t)=>{const s=()=>{t({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return s(),e.scrollElement.addEventListener("resize",s,{capture:!1,passive:!0}),()=>{e.scrollElement.removeEventListener("resize",s)}},e.windowScroll=(e,t,s)=>{var n;null==(n=s.scrollElement)||n.scrollTo({[s.options.horizontal?"left":"top"]:e,behavior:t?"smooth":void 0})},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
11
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function n(){return n=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},n.apply(this,arguments)}function t(e,n,t){var o,i,r=null!=(o=t.initialDeps)?o:[];return function(){var o;t.key&&null!=t.debug&&t.debug()&&(o=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,n){return r[n]!==e}))))return i;if(r=l,t.key&&null!=t.debug&&t.debug()&&(s=Date.now()),i=n.apply(void 0,l),t.key&&null!=t.debug&&t.debug()){var a=Math.round(100*(Date.now()-o))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,n){for(e=String(e);e.length<n;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==t?void 0:t.key)}return null==t||null==t.onChange||t.onChange(i),i}}function o(e,n){if(void 0===e)throw new Error("Unexpected undefined"+(n?": "+n:""));return e}var i=function(e,n){return Math.abs(e-n)<1},r=function(e){return e},s=function(e){for(var n=Math.max(e.startIndex-e.overscan,0),t=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=n;i<=t;i++)o.push(i);return o},l=function(e,n,t){if(null!=n&&n.borderBoxSize){var o=n.borderBoxSize[0];if(o)return Math.round(o[t.options.horizontal?"inlineSize":"blockSize"])}return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])},a=function(e,n,t,o){for(;e<=n;){var i=(e+n)/2|0,r=t(i);if(r<o)e=i+1;else{if(!(r>o))return i;n=i-1}}return e>0?e-1:0};e.Virtualizer=function(e){var u,c,d=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache=new Map,this.observer=(u=null,c=function(){return u||("undefined"!=typeof ResizeObserver?u=new ResizeObserver((function(e){e.forEach((function(e){d._measureElement(e.target,e)}))})):null)},{disconnect:function(){var e;return null==(e=c())?void 0:e.disconnect()},observe:function(e){var n;return null==(n=c())?void 0:n.observe(e,{box:"border-box"})},unobserve:function(e){var n;return null==(n=c())?void 0:n.unobserve(e)}}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(n){var t=n[0];void 0===n[1]&&delete e[t]})),d.options=n({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:[],lanes:1},e)},this.notify=function(){null==d.options.onChange||d.options.onChange(d)},this.cleanup=function(){d.unsubs.filter(Boolean).forEach((function(e){return e()})),d.unsubs=[],d.scrollElement=null},this._didMount=function(){return d.measureElementCache.forEach(d.observer.observe),function(){d.observer.disconnect(),d.cleanup()}},this._willUpdate=function(){var e=d.options.getScrollElement();d.scrollElement!==e&&(d.cleanup(),d.scrollElement=e,d._scrollToOffset(d.scrollOffset,{adjustments:void 0,behavior:void 0}),d.unsubs.push(d.options.observeElementRect(d,(function(e){var n=d.scrollRect;d.scrollRect=e,(d.options.horizontal?e.width!==n.width:e.height!==n.height)&&d.maybeNotify()}))),d.unsubs.push(d.options.observeElementOffset(d,(function(e){d.scrollAdjustments=0,d.scrollOffset!==e&&(null!==d.isScrollingTimeoutId&&(clearTimeout(d.isScrollingTimeoutId),d.isScrollingTimeoutId=null),d.isScrolling=!0,d.scrollDirection=d.scrollOffset<e?"forward":"backward",d.scrollOffset=e,d.maybeNotify(),d.isScrollingTimeoutId=setTimeout((function(){d.isScrollingTimeoutId=null,d.isScrolling=!1,d.scrollDirection=null,d.maybeNotify()}),d.options.scrollingDelay))}))))},this.getSize=function(){return d.scrollRect[d.options.horizontal?"width":"height"]},this.memoOptions=t((function(){return[d.options.count,d.options.paddingStart,d.options.scrollMargin,d.options.getItemKey]}),(function(e,n,t,o){return d.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:n,scrollMargin:t,getItemKey:o}}),{key:!1}),this.getFurthestMeasurement=function(e,n){for(var t=new Map,o=new Map,i=n-1;i>=0;i--){var r=e[i];if(!t.has(r.lane)){var s=o.get(r.lane);if(null==s||r.end>s.end?o.set(r.lane,r):r.end<s.end&&t.set(r.lane,!0),t.size===d.options.lanes)break}}return o.size===d.options.lanes?Array.from(o.values()).sort((function(e,n){return e.end-n.end}))[0]:void 0},this.getMeasurements=t((function(){return[d.memoOptions(),d.itemSizeCache]}),(function(e,n){var t=e.count,o=e.paddingStart,i=e.scrollMargin,r=e.getItemKey,s=d.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,d.pendingMeasuredCacheIndexes):0;d.pendingMeasuredCacheIndexes=[];for(var l=d.measurementsCache.slice(0,s),a=s;a<t;a++){var u=r(a),c=1===d.options.lanes?l[a-1]:d.getFurthestMeasurement(l,a),f=c?c.end:o+i,h=n.get(u),m="number"==typeof h?h:d.options.estimateSize(a),v=f+m,g=c?c.lane:a%d.options.lanes;l[a]={index:a,start:f,size:m,end:v,key:u,lane:g}}return d.measurementsCache=l,l}),{key:!1,debug:function(){return d.options.debug}}),this.calculateRange=t((function(){return[d.getMeasurements(),d.getSize(),d.scrollOffset]}),(function(e,n,t){return d.range=function(e){var n=e.measurements,t=e.outerSize,o=e.scrollOffset,i=n.length-1,r=a(0,i,(function(e){return n[e].start}),o),s=r;for(;s<i&&n[s].end<o+t;)s++;return{startIndex:r,endIndex:s}}({measurements:e,outerSize:n,scrollOffset:t})}),{key:!1,debug:function(){return d.options.debug}}),this.maybeNotify=t((function(){var e=d.calculateRange();return[e.startIndex,e.endIndex,d.isScrolling]}),(function(){d.notify()}),{key:!1,debug:function(){return d.options.debug},initialDeps:[this.range.startIndex,this.range.endIndex,this.isScrolling]}),this.getIndexes=t((function(){return[d.options.rangeExtractor,d.calculateRange(),d.options.overscan,d.options.count]}),(function(e,t,o,i){return e(n({},t,{overscan:o,count:i}))}),{key:!1,debug:function(){return d.options.debug}}),this.indexFromElement=function(e){var n=d.options.indexAttribute,t=e.getAttribute(n);return t?parseInt(t,10):(console.warn("Missing attribute name '"+n+"={index}' on measured element."),-1)},this._measureElement=function(e,n){var t=d.measurementsCache[d.indexFromElement(e)];if(t){var o=d.measureElementCache.get(t.key);if(e.isConnected){o!==e&&(o&&d.observer.unobserve(o),d.observer.observe(e),d.measureElementCache.set(t.key,e));var i=d.options.measureElement(e,n,d);d.resizeItem(t,i)}else o&&(d.observer.unobserve(o),d.measureElementCache.delete(t.key))}else d.measureElementCache.forEach((function(n,t){n===e&&(d.observer.unobserve(e),d.measureElementCache.delete(t))}))},this.resizeItem=function(e,n){var t,o=n-(null!=(t=d.itemSizeCache.get(e.key))?t:e.size);0!==o&&(e.start<d.scrollOffset&&d._scrollToOffset(d.scrollOffset,{adjustments:d.scrollAdjustments+=o,behavior:void 0}),d.pendingMeasuredCacheIndexes.push(e.index),d.itemSizeCache=new Map(d.itemSizeCache.set(e.key,n)),d.notify())},this.measureElement=function(e){e&&d._measureElement(e,void 0)},this.getVirtualItems=t((function(){return[d.getIndexes(),d.getMeasurements()]}),(function(e,n){for(var t=[],o=0,i=e.length;o<i;o++){var r=n[e[o]];t.push(r)}return t}),{key:!1,debug:function(){return d.options.debug}}),this.getVirtualItemForOffset=function(e){var n=d.getMeasurements();return o(n[a(0,n.length-1,(function(e){return o(n[e]).start}),e)])},this.getOffsetForAlignment=function(e,n){var t=d.getSize();"auto"===n&&(n=e<=d.scrollOffset?"start":e>=d.scrollOffset+t?"end":"start"),"start"===n||("end"===n?e-=t:"center"===n&&(e-=t/2));var o=d.options.horizontal?"scrollWidth":"scrollHeight",i=(d.scrollElement?"document"in d.scrollElement?d.scrollElement.document.documentElement[o]:d.scrollElement[o]:0)-d.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=function(e,n){void 0===n&&(n="auto"),e=Math.max(0,Math.min(e,d.options.count-1));var t=o(d.getMeasurements()[e]);if("auto"===n)if(t.end>=d.scrollOffset+d.getSize()-d.options.scrollPaddingEnd)n="end";else{if(!(t.start<=d.scrollOffset+d.options.scrollPaddingStart))return[d.scrollOffset,n];n="start"}var i="end"===n?t.end+d.options.scrollPaddingEnd:t.start-d.options.scrollPaddingStart;return[d.getOffsetForAlignment(i,n),n]},this.isDynamicMode=function(){return d.measureElementCache.size>0},this.cancelScrollToIndex=function(){null!==d.scrollToIndexTimeoutId&&(clearTimeout(d.scrollToIndexTimeoutId),d.scrollToIndexTimeoutId=null)},this.scrollToOffset=function(e,n){var t=void 0===n?{}:n,o=t.align,i=void 0===o?"start":o,r=t.behavior;d.cancelScrollToIndex(),"smooth"===r&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.getOffsetForAlignment(e,i),{adjustments:void 0,behavior:r})},this.scrollToIndex=function(e,n){var t=void 0===n?{}:n,o=t.align,r=void 0===o?"auto":o,s=t.behavior;e=Math.max(0,Math.min(e,d.options.count-1)),d.cancelScrollToIndex(),"smooth"===s&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");var l=d.getOffsetForIndex(e,r),a=l[0],u=l[1];d._scrollToOffset(a,{adjustments:void 0,behavior:s}),"smooth"!==s&&d.isDynamicMode()&&(d.scrollToIndexTimeoutId=setTimeout((function(){if(d.scrollToIndexTimeoutId=null,d.measureElementCache.has(d.options.getItemKey(e))){var n=d.getOffsetForIndex(e,u)[0];i(n,d.scrollOffset)||d.scrollToIndex(e,{align:u,behavior:s})}else d.scrollToIndex(e,{align:u,behavior:s})})))},this.scrollBy=function(e,n){var t=(void 0===n?{}:n).behavior;d.cancelScrollToIndex(),"smooth"===t&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.scrollOffset+e,{adjustments:void 0,behavior:t})},this.getTotalSize=function(){var e;return((null==(e=d.getMeasurements()[d.options.count-1])?void 0:e.end)||d.options.paddingStart)-d.options.scrollMargin+d.options.paddingEnd},this._scrollToOffset=function(e,n){var t=n.adjustments,o=n.behavior;d.options.scrollToFn(e,{behavior:o,adjustments:t},d)},this.measure=function(){d.itemSizeCache=new Map,d.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){d.itemSizeCache.set(e.key,e.size)})),this.maybeNotify()},e.approxEqual=i,e.defaultKeyExtractor=r,e.defaultRangeExtractor=s,e.elementScroll=function(e,n,t){var o,i,r=n.adjustments,s=void 0===r?0:r,l=n.behavior,a=e+s;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[t.options.horizontal?"left":"top"]=a,i.behavior=l,i))},e.measureElement=l,e.memo=t,e.notUndefined=o,e.observeElementOffset=function(e,n){var t=e.scrollElement;if(t){var o=function(){n(t[e.options.horizontal?"scrollLeft":"scrollTop"])};return o(),t.addEventListener("scroll",o,{passive:!0}),function(){t.removeEventListener("scroll",o)}}},e.observeElementRect=function(e,n){var t=e.scrollElement;if(t){var o=function(e){var t=e.width,o=e.height;n({width:Math.round(t),height:Math.round(o)})};o(t.getBoundingClientRect());var i=new ResizeObserver((function(e){var n=e[0];if(null!=n&&n.borderBoxSize){var i=n.borderBoxSize[0];if(i)return void o({width:i.inlineSize,height:i.blockSize})}o(t.getBoundingClientRect())}));return i.observe(t,{box:"border-box"}),function(){i.unobserve(t)}}},e.observeWindowOffset=function(e,n){var t=e.scrollElement;if(t){var o=function(){n(t[e.options.horizontal?"scrollX":"scrollY"])};return o(),t.addEventListener("scroll",o,{passive:!0}),function(){t.removeEventListener("scroll",o)}}},e.observeWindowRect=function(e,n){var t=e.scrollElement;if(t){var o=function(){n({width:t.innerWidth,height:t.innerHeight})};return o(),t.addEventListener("resize",o,{passive:!0}),function(){t.removeEventListener("resize",o)}}},e.windowScroll=function(e,n,t){var o,i,r=n.adjustments,s=void 0===r?0:r,l=n.behavior,a=e+s;null==(o=t.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[t.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":["../../../../node_modules/@reach/observe-rect/dist/observe-rect.esm.js","../../src/utils.ts","../../src/index.ts"],"sourcesContent":["var props = [\"bottom\", \"height\", \"left\", \"right\", \"top\", \"width\"];\n\nvar rectChanged = function rectChanged(a, b) {\n if (a === void 0) {\n a = {};\n }\n\n if (b === void 0) {\n b = {};\n }\n\n return props.some(function (prop) {\n return a[prop] !== b[prop];\n });\n};\n\nvar observedNodes = /*#__PURE__*/new Map();\nvar rafId;\n\nvar run = function run() {\n var changedStates = [];\n observedNodes.forEach(function (state, node) {\n var newRect = node.getBoundingClientRect();\n\n if (rectChanged(newRect, state.rect)) {\n state.rect = newRect;\n changedStates.push(state);\n }\n });\n changedStates.forEach(function (state) {\n state.callbacks.forEach(function (cb) {\n return cb(state.rect);\n });\n });\n rafId = window.requestAnimationFrame(run);\n};\n\nfunction observeRect(node, cb) {\n return {\n observe: function observe() {\n var wasEmpty = observedNodes.size === 0;\n\n if (observedNodes.has(node)) {\n observedNodes.get(node).callbacks.push(cb);\n } else {\n observedNodes.set(node, {\n rect: undefined,\n hasRectChanged: false,\n callbacks: [cb]\n });\n }\n\n if (wasEmpty) run();\n },\n unobserve: function unobserve() {\n var state = observedNodes.get(node);\n\n if (state) {\n // Remove the callback\n var index = state.callbacks.indexOf(cb);\n if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference\n\n if (!state.callbacks.length) observedNodes[\"delete\"](node); // Stop the loop\n\n if (!observedNodes.size) cancelAnimationFrame(rafId);\n }\n }\n };\n}\n\nexport default observeRect;\n//# sourceMappingURL=observe-rect.esm.js.map\n","export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n","import observeRect from '@reach/observe-rect'\nimport { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ninterface ScrollToOptions {\n align: ScrollAlignment\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\ninterface Item {\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\nexport interface VirtualItem<TItemElement> extends Item {\n measureElement: (el: TItemElement | null) => void\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 = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = observeRect(instance.scrollElement as Element, (rect) => {\n cb(rect)\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe()\n\n return () => {\n observer.unobserve()\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const onResize = () => {\n cb({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\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\nexport const observeElementOffset = (\n instance: Virtualizer<any, any>,\n cb: (offset: number) => void,\n) => {\n const onScroll = () =>\n cb(\n instance.scrollElement[\n instance.options.horizontal ? 'scrollLeft' : 'scrollTop'\n ],\n )\n\n if (!instance.scrollElement) {\n return\n }\n\n onScroll()\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\nexport const observeWindowOffset = (\n instance: Virtualizer<any, any>,\n cb: (offset: number) => void,\n) => {\n const onScroll = () =>\n cb(\n instance.scrollElement[\n instance.options.horizontal ? 'scrollX' : 'scrollY'\n ],\n )\n\n if (!instance.scrollElement) {\n return\n }\n\n onScroll()\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\nexport const measureElement = (\n element: unknown,\n instance: Virtualizer<any, any>,\n) => {\n return (element as Element).getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ]\n}\n\nexport const windowScroll = (\n offset: number,\n canSmooth: boolean,\n instance: Virtualizer<any, any>,\n) => {\n ;(instance.scrollElement as Window)?.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport const elementScroll = (\n offset: number,\n canSmooth: boolean,\n instance: Virtualizer<any, any>,\n) => {\n ;(instance.scrollElement as Element)?.scrollTo({\n [instance.options.horizontal ? 'left' : 'top']: offset,\n behavior: canSmooth ? 'smooth' : undefined,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement = unknown,\n TItemElement = unknown,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n canSmooth: boolean,\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 enableSmoothScroll?: boolean\n}\n\nexport class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n private measurementsCache: Item[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private destinationOffset: undefined | number\n private scrollCheckFrame!: ReturnType<typeof setTimeout>\n private measureElementCache: Record<\n number,\n (measurableItem: TItemElement | null) => void\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 }\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 enableSmoothScroll: true,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\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 }\n\n _didMount = () => {\n return () => {\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.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.notify()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollOffset = offset\n this.notify()\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.getItemKey,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, getItemKey, measurementsCache) => {\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 = measurementsCache[key]\n const start = measurements[i - 1]\n ? measurements[i - 1]!.end\n : paddingStart\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 return measurements\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n private calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'calculateRange',\n debug: () => this.options.debug,\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: count,\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getIndexes',\n },\n )\n\n getVirtualItems = memo(\n () => [\n this.getIndexes(),\n this.getMeasurements(),\n this.options.measureElement,\n ],\n (indexes, measurements, measureElement) => {\n const makeMeasureElement =\n (index: number) => (measurableItem: TItemElement | null) => {\n const item = this.measurementsCache[index]!\n\n if (!measurableItem) {\n return\n }\n\n const measuredItemSize = measureElement(measurableItem, this)\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n if (measuredItemSize !== itemSize) {\n if (item.start < this.scrollOffset) {\n if (\n process.env.NODE_ENV === 'development' &&\n this.options.debug\n ) {\n console.info('correction', measuredItemSize - itemSize)\n }\n\n if (!this.destinationOffset) {\n this._scrollToOffset(\n this.scrollOffset + (measuredItemSize - itemSize),\n false,\n )\n }\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n\n const virtualItems: VirtualItem<TItemElement>[] = []\n\n const currentMeasureElements: typeof this.measureElementCache = {}\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n const item = {\n ...measurement,\n measureElement: (currentMeasureElements[i] =\n this.measureElementCache[i] ?? makeMeasureElement(i)),\n }\n virtualItems.push(item)\n }\n\n this.measureElementCache = currentMeasureElements\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getIndexes',\n },\n )\n\n scrollToOffset = (\n toOffset: number,\n { align }: ScrollToOffsetOptions = { align: 'start' },\n ) => {\n const attempt = () => {\n const offset = this.scrollOffset\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= offset) {\n align = 'start'\n } else if (toOffset >= offset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n this._scrollToOffset(toOffset, true)\n } else if (align === 'end') {\n this._scrollToOffset(toOffset - size, true)\n } else if (align === 'center') {\n this._scrollToOffset(toOffset - size / 2, true)\n }\n }\n\n attempt()\n requestAnimationFrame(() => {\n attempt()\n })\n }\n\n scrollToIndex = (\n index: number,\n { align, ...rest }: ScrollToIndexOptions = { align: 'auto' },\n ) => {\n const measurements = this.getMeasurements()\n const offset = this.scrollOffset\n const size = this.getSize()\n const { count } = this.options\n\n const measurement = measurements[Math.max(0, Math.min(index, count - 1))]\n\n if (!measurement) {\n return\n }\n\n if (align === 'auto') {\n if (measurement.end >= offset + size - this.options.scrollPaddingEnd) {\n align = 'end'\n } else if (\n measurement.start <=\n offset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n this.scrollToOffset(toOffset, { align, ...rest })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (offset: number, canSmooth: boolean) => {\n clearTimeout(this.scrollCheckFrame)\n\n this.destinationOffset = offset\n this.options.scrollToFn(\n offset,\n this.options.enableSmoothScroll && canSmooth,\n this,\n )\n\n let scrollCheckFrame: ReturnType<typeof setTimeout>\n\n const check = () => {\n let lastOffset = this.scrollOffset\n this.scrollCheckFrame = scrollCheckFrame = setTimeout(() => {\n if (this.scrollCheckFrame !== scrollCheckFrame) {\n return\n }\n\n if (this.scrollOffset === lastOffset) {\n this.destinationOffset = undefined\n return\n }\n lastOffset = this.scrollOffset\n check()\n }, 100)\n }\n\n check()\n }\n\n measure = () => {\n this.itemMeasurementsCache = {}\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: Item[]\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":["rafId","props","observedNodes","Map","run","changedStates","forEach","state","node","a","b","newRect","getBoundingClientRect","rect","some","prop","push","callbacks","cb","window","requestAnimationFrame","memo","getDeps","fn","opts","result","deps","depTime","key","debug","Date","now","newDeps","length","dep","index","resultTime","onChange","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","measureElement","element","instance","options","horizontal","constructor","_this","this","unsubs","scrollElement","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","measureElementCache","setOptions","Object","entries","_ref","value","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","enableSmoothScroll","initialRect","width","height","notify","_this$options$onChang","_this$options","call","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","observeElementRect","scrollRect","observeElementOffset","offset","scrollOffset","getSize","getMeasurements","measurements","slice","measuredSize","size","estimateSize","process","calculateRange","outerSize","_ref2","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","getIndexes","getVirtualItems","indexes","makeMeasureElement","measurableItem","_this$itemMeasurement","item","measuredItemSize","itemSize","destinationOffset","_scrollToOffset","virtualItems","currentMeasureElements","k","len","_this$measureElementC","scrollToOffset","toOffset","_temp","align","attempt","scrollToIndex","_temp2","rest","measurement","getTotalSize","_this$getMeasurements","canSmooth","scrollCheckFrame","clearTimeout","scrollToFn","check","lastOffset","setTimeout","undefined","measure","_instance$scrollEleme2","scrollTo","behavior","onScroll","addEventListener","capture","passive","removeEventListener","observer","observe","wasEmpty","has","get","set","hasRectChanged","unobserve","indexOf","splice","cancelAnimationFrame","observeRect","onResize","innerWidth","innerHeight","_instance$scrollEleme"],"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: false | string\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 lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const item = this.measurementsCache[this.indexFromElement(node)]\n if (!item) {\n this.measureElementCache.forEach((cached, key) => {\n if (cached === node) {\n this.observer.unobserve(node)\n this.measureElementCache.delete(key)\n }\n })\n return\n }\n\n const prevNode = this.measureElementCache.get(item.key)\n\n if (!node.isConnected) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n this.measureElementCache.delete(item.key)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(item.key, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(item, measuredItemSize)\n }\n\n resizeItem = (item: VirtualItem, size: number) => {\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n const delta = size - 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(item.index)\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size))\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["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","entry","instance","borderBoxSize","box","options","horizontal","getBoundingClientRect","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","_ro","get","_this","this","unsubs","scrollElement","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","observer","ResizeObserver","entries","forEach","_measureElement","target","disconnect","_get","observe","_get2","unobserve","_get3","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","behavior","observeElementRect","rect","prev","scrollRect","maybeNotify","observeElementOffset","offset","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","size","Array","from","values","sort","getMeasurements","_ref4","slice","furthestMeasurement","measuredSize","estimateSize","process","calculateRange","outerSize","_ref9","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","parseInt","warn","item","prevNode","isConnected","measuredItemSize","resizeItem","cached","_this$itemSizeCache$g","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","_temp","_ref5","_ref5$align","scrollToIndex","_temp2","_ref6","_ref6$align","initialAlign","_this$getOffsetForInd","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref8","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","cb","handler","addEventListener","passive","removeEventListener","inlineSize","blockSize","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.
|
|
4
|
+
"version": "3.0.0-beta.61",
|
|
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",
|
|
@@ -24,19 +24,21 @@
|
|
|
24
24
|
"type": "github",
|
|
25
25
|
"url": "https://github.com/sponsors/tannerlinsley"
|
|
26
26
|
},
|
|
27
|
-
"
|
|
28
|
-
"main": "build/
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
"types": "build/lib/index.d.ts",
|
|
28
|
+
"main": "build/lib/index.js",
|
|
29
|
+
"module": "build/lib/index.esm.js",
|
|
30
|
+
"exports": {
|
|
31
|
+
".": {
|
|
32
|
+
"types": "./build/lib/index.d.ts",
|
|
33
|
+
"import": "./build/lib/index.mjs",
|
|
34
|
+
"default": "./build/lib/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./package.json": "./package.json"
|
|
34
37
|
},
|
|
38
|
+
"sideEffects": false,
|
|
35
39
|
"files": [
|
|
36
|
-
"build",
|
|
40
|
+
"build/lib/*",
|
|
41
|
+
"build/umd/*",
|
|
37
42
|
"src"
|
|
38
|
-
]
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@reach/observe-rect": "^1.1.0"
|
|
41
|
-
}
|
|
43
|
+
]
|
|
42
44
|
}
|