@tanstack/virtual-core 3.0.0-alpha.1
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/cjs/packages/virtual-core/src/index.js +445 -0
- package/build/cjs/packages/virtual-core/src/index.js.map +1 -0
- package/build/cjs/packages/virtual-core/src/utils.js +57 -0
- package/build/cjs/packages/virtual-core/src/utils.js.map +1 -0
- package/build/esm/index.js +538 -0
- package/build/esm/index.js.map +1 -0
- package/build/stats-html.html +2689 -0
- package/build/stats-react.json +101 -0
- package/build/types/index.d.ts +87 -0
- package/build/types/utils.d.ts +7 -0
- package/build/umd/index.development.js +559 -0
- package/build/umd/index.development.js.map +1 -0
- package/build/umd/index.production.js +12 -0
- package/build/umd/index.production.js.map +1 -0
- package/package.json +42 -0
- package/src/index.ts +602 -0
- package/src/utils.ts +67 -0
|
@@ -0,0 +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 React from 'react'\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 defaultEstimateSize = () => 50\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 defaultMeasureElement = (\n element: unknown,\n instance: Virtualizer<any, any>,\n) => {\n return (element as Element).getBoundingClientRect()[instance.getSizeKey()]\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 count: number\n scrollToFn: (\n offset: number,\n canSmooth: boolean,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n getScrollElement: () => TScrollElement\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 //\n\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 estimateSize?: (index: number) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n initialOffset?: number\n keyExtractor?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n enableSmoothScroll?: boolean\n}\n\nexport class Virtualizer<TScrollElement = unknown, TItemElement = unknown> {\n 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\n //\n // virtualItems: VirtualItem<TItemElement>[]\n // totalSize: number\n // scrollToOffset: (offset: number, options?: ScrollToOffsetOptions) => void\n // scrollToIndex: (index: number, options?: ScrollToIndexOptions) => void\n // measure: (index: number) => void\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 estimateSize: defaultEstimateSize,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n horizontal: false,\n keyExtractor: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n enableSmoothScroll: false,\n onChange: () => {},\n measureElement: defaultMeasureElement,\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.getSizeKey()]\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.getEstimateSizeFn(),\n this.options.keyExtractor,\n this.itemMeasurementsCache,\n ],\n (count, paddingStart, estimateSize, keyExtractor, 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 = keyExtractor(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' ? measuredSize : 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 virtualItems: VirtualItem<TItemElement>[] = []\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: (measurableItem: TItemElement | null) => {\n if (measurableItem) {\n const measuredItemSize = measureElement(measurableItem, this)\n\n if (measuredItemSize !== item.size) {\n if (item.start < this.scrollOffset) {\n if (\n process.env.NODE_ENV === 'development' &&\n this.options.debug\n )\n console.info('correction', measuredItemSize - item.size)\n\n this._scrollToOffset(\n this.scrollOffset + (measuredItemSize - item.size),\n false,\n )\n }\n\n this.pendingMeasuredCacheIndexes.push(i)\n this.itemMeasurementsCache = {\n ...this.itemMeasurementsCache,\n [item.key]: measuredItemSize,\n }\n this.notify()\n }\n }\n },\n }\n\n virtualItems.push(item)\n }\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 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 private tryScrollToIndex = (\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) {\n align = 'end'\n } else if (measurement.start <= offset) {\n align = 'start'\n } else {\n return\n }\n }\n\n const toOffset =\n align === 'center'\n ? measurement.start + measurement.size / 2\n : align === 'end'\n ? measurement.end\n : measurement.start\n\n this.scrollToOffset(toOffset, { align, ...rest })\n }\n\n scrollToIndex = (index: number, options?: ScrollToIndexOptions) => {\n // We do a double request here because of\n // dynamic sizes which can cause offset shift\n // and end up in the wrong spot. Unfortunately,\n // we can't know about those dynamic sizes until\n // we try and render them. So double down!\n this.tryScrollToIndex(index, options)\n requestAnimationFrame(() => {\n this.tryScrollToIndex(index, options)\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n getSizeKey = () => (this.options.horizontal ? 'width' : 'height')\n\n private _scrollToOffset = (offset: number, canSmooth: boolean) => {\n this.options.scrollToFn(\n offset,\n this.options.enableSmoothScroll && canSmooth,\n this,\n )\n }\n\n private getEstimateSizeFn = memo(\n () => [this.options.estimateSize],\n (d) => d,\n {\n key: false,\n onChange: () => {\n this.itemMeasurementsCache = {}\n },\n },\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","defaultEstimateSize","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","defaultMeasureElement","element","instance","getSizeKey","constructor","_this","this","unsubs","scrollElement","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","setOptions","Object","entries","_ref","value","options","initialOffset","estimateSize","paddingStart","paddingEnd","horizontal","keyExtractor","rangeExtractor","enableSmoothScroll","measureElement","initialRect","width","height","notify","_this$options$onChang","_this$options","call","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","observeElementRect","scrollRect","observeElementOffset","offset","scrollOffset","getSize","getMeasurements","getEstimateSizeFn","measurements","slice","measuredSize","size","process","calculateRange","outerSize","_ref2","low","high","getCurrentValue","middle","currentValue","findNearestBinarySearch","getIndexes","getVirtualItems","indexes","virtualItems","k","len","item","measurableItem","measuredItemSize","_scrollToOffset","scrollToOffset","toOffset","_temp","align","tryScrollToIndex","_temp2","rest","measurement","scrollToIndex","getTotalSize","_this$getMeasurements","canSmooth","scrollToFn","measure","_instance$scrollEleme2","scrollTo","behavior","undefined","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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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tanstack/virtual-core",
|
|
3
|
+
"author": "Tanner Linsley",
|
|
4
|
+
"version": "3.0.0-alpha.1",
|
|
5
|
+
"description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/tanstack/virtual#readme",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/tanstack/virtual.git"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"registry": "https://registry.npmjs.org/"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"react",
|
|
17
|
+
"vue",
|
|
18
|
+
"solid",
|
|
19
|
+
"virtual",
|
|
20
|
+
"virtual-core",
|
|
21
|
+
"datagrid"
|
|
22
|
+
],
|
|
23
|
+
"funding": {
|
|
24
|
+
"type": "github",
|
|
25
|
+
"url": "https://github.com/sponsors/tannerlinsley"
|
|
26
|
+
},
|
|
27
|
+
"module": "build/esm/index.js",
|
|
28
|
+
"main": "build/cjs/packages/virtual-core/src/index.js",
|
|
29
|
+
"browser": "build/umd/index.production.js",
|
|
30
|
+
"types": "build/types/index.d.ts",
|
|
31
|
+
"sideEffects": false,
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=12"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"build",
|
|
37
|
+
"src"
|
|
38
|
+
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@reach/observe-rect": "^1.1.0"
|
|
41
|
+
}
|
|
42
|
+
}
|