@tanstack/virtual-core 3.0.0-beta.23 → 3.0.0-beta.28

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/index.ts"],"sourcesContent":["import { memo } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nconst memoRectCallback = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n let prev: Rect = { height: -1, width: -1 }\n\n return (rect: Rect) => {\n if (\n instance.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n cb(rect)\n }\n\n prev = rect\n }\n}\n\nexport const observeElementRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const observer = new ResizeObserver((entries) => {\n cb({\n width: entries[0]?.contentRect.width as number,\n height: entries[0]?.contentRect.height as number,\n })\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n cb(instance.scrollElement.getBoundingClientRect())\n\n observer.observe(instance.scrollElement)\n\n return () => {\n observer.unobserve(instance.scrollElement)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<any, any>,\n cb: (rect: Rect) => void,\n) => {\n const memoizedCallback = memoRectCallback(instance, cb)\n const onResize = () =>\n memoizedCallback({\n width: instance.scrollElement.innerWidth,\n height: instance.scrollElement.innerHeight,\n })\n\n if (!instance.scrollElement) {\n return\n }\n\n onResize()\n\n instance.scrollElement.addEventListener('resize', onResize, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('resize', onResize)\n }\n}\n\ntype ObserverMode = 'element' | 'window'\n\nconst scrollProps = {\n element: ['scrollLeft', 'scrollTop'],\n window: ['scrollX', 'scrollY'],\n} as const\n\nconst createOffsetObserver = (mode: ObserverMode) => {\n return (instance: Virtualizer<any, any>, cb: (offset: number) => void) => {\n if (!instance.scrollElement) {\n return\n }\n\n const propX = scrollProps[mode][0]\n const propY = scrollProps[mode][1]\n\n let prevX: number = instance.scrollElement[propX]\n let prevY: number = instance.scrollElement[propY]\n\n const scroll = () => {\n const offset =\n instance.scrollElement[instance.options.horizontal ? propX : propY]\n\n cb(Math.max(0, offset - instance.options.scrollMargin))\n }\n\n scroll()\n\n const onScroll = (e: Event) => {\n const target = e.currentTarget as HTMLElement & Window\n const scrollX = target[propX]\n const scrollY = target[propY]\n\n if (instance.options.horizontal ? prevX - scrollX : prevY - scrollY) {\n scroll()\n }\n\n prevX = scrollX\n prevY = scrollY\n }\n\n instance.scrollElement.addEventListener('scroll', onScroll, {\n capture: false,\n passive: true,\n })\n\n return () => {\n instance.scrollElement.removeEventListener('scroll', onScroll)\n }\n }\n}\n\nexport const observeElementOffset = createOffsetObserver('element')\nexport const observeWindowOffset = createOffsetObserver('window')\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n instance: Virtualizer<any, TItemElement>,\n) => {\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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,\n behavior,\n sync,\n }: { adjustments?: number; behavior?: ScrollBehavior; sync: boolean },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset =\n (sync ? offset : offset + instance.options.scrollMargin) +\n (adjustments ?? 0)\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; sync: 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 scrollMargin?: number\n scrollingDelay?: number\n indexAttribute?: string\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemMeasurementsCache: Record<Key, number> = {}\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n private scrollOffset: number\n private scrollAdjustments: number = 0\n private measureElementCache: Record<Key, TItemElement> = {}\n private pendingScrollToIndexCallback: (() => void) | null = null\n private getResizeObserver = (() => {\n let _ro: ResizeObserver | null = null\n\n return () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, false)\n })\n }))\n } else {\n return null\n }\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n\n this.calculateRange()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n ...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 return () => {\n this.getResizeObserver()?.disconnect()\n this.measureElementCache = {}\n\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n this.pendingScrollToIndexCallback?.()\n\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n sync: true,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect\n this.calculateRange()\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n if (this.scrollOffset !== offset) {\n this.scrollOffset = offset\n this.isScrolling = true\n this.scrollAdjustments = 0\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n\n this.notify()\n }, this.options.scrollingDelay)\n } else {\n this.isScrolling = false\n this.scrollAdjustments = 0\n }\n\n this.calculateRange()\n }),\n )\n } else if (!this.isScrolling) {\n this.calculateRange()\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private getMeasurements = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.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 !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n const range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n })\n if (\n range.startIndex !== this.range.startIndex ||\n range.endIndex !== this.range.endIndex\n ) {\n this.range = range\n this.notify()\n }\n return this.range\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.range,\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count: count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (node: TItemElement, _sync: boolean) => {\n const index = this.indexFromElement(node)\n\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const prevNode = this.measureElementCache[item.key]\n\n const ro = this.getResizeObserver()\n\n if (!node.isConnected) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n delete this.measureElementCache[item.key]\n }\n return\n }\n\n if (!prevNode || prevNode !== node) {\n if (prevNode) {\n ro?.unobserve(prevNode)\n }\n this.measureElementCache[item.key] = node\n ro?.observe(node)\n }\n\n const measuredItemSize = this.options.measureElement(node, this)\n\n const itemSize = this.itemMeasurementsCache[item.key] ?? item.size\n\n const delta = measuredItemSize - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset && this.isScrolling) {\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 sync: false,\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 measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, true)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\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 const options = {\n adjustments: undefined,\n behavior,\n sync: false,\n }\n if (align === 'start') {\n this._scrollToOffset(toOffset, options)\n } else if (align === 'end') {\n this._scrollToOffset(toOffset - size, options)\n } else if (align === 'center') {\n this._scrollToOffset(toOffset - size / 2, options)\n }\n }\n\n scrollToIndex = (\n index: number,\n { align = 'auto', ...rest }: ScrollToIndexOptions = {},\n ) => {\n this.pendingScrollToIndexCallback = null\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 const isDynamic = Object.keys(this.measureElementCache).length > 0\n\n if (isDynamic) {\n const didSeen = () =>\n typeof this.itemMeasurementsCache[this.options.getItemKey(index)] ===\n 'number'\n\n if (!didSeen()) {\n this.pendingScrollToIndexCallback = () => {\n if (didSeen()) {\n this.pendingScrollToIndexCallback = null\n this.scrollToIndex(index, { align, ...rest })\n }\n }\n }\n }\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) + this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n sync,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n sync: boolean\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, sync, adjustments }, this)\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: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["defaultKeyExtractor","index","defaultRangeExtractor","range","start","Math","max","startIndex","overscan","end","min","endIndex","count","arr","i","push","memoRectCallback","instance","cb","prev","height","width","rect","options","horizontal","observeElementRect","observer","ResizeObserver","entries","contentRect","scrollElement","getBoundingClientRect","observe","unobserve","observeWindowRect","memoizedCallback","onResize","innerWidth","innerHeight","addEventListener","capture","passive","removeEventListener","scrollProps","element","window","createOffsetObserver","mode","propX","propY","prevX","prevY","scroll","offset","scrollMargin","onScroll","e","target","currentTarget","scrollX","scrollY","observeElementOffset","observeWindowOffset","measureElement","round","windowScroll","adjustments","behavior","sync","toOffset","scrollTo","elementScroll","Virtualizer","constructor","opts","unsubs","isScrolling","isScrollingTimeoutId","measurementsCache","itemMeasurementsCache","pendingMeasuredCacheIndexes","scrollAdjustments","measureElementCache","pendingScrollToIndexCallback","getResizeObserver","_ro","forEach","entry","_measureElement","setOptions","Object","key","value","debug","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","onChange","initialRect","scrollingDelay","indexAttribute","notify","cleanup","filter","Boolean","d","_didMount","disconnect","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","undefined","scrollRect","calculateRange","clearTimeout","setTimeout","getSize","getMeasurements","memo","length","measurements","slice","measuredSize","size","estimateSize","process","env","NODE_ENV","outerSize","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","console","warn","parseInt","_sync","item","prevNode","ro","isConnected","measuredItemSize","itemSize","delta","info","getVirtualItems","indexes","virtualItems","k","len","measurement","scrollToOffset","align","scrollToIndex","rest","isDynamic","keys","didSeen","getTotalSize","scrollToFn","measure","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","getOffset"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type NoInfer<A extends any> = [A][A extends any ? 0 : never];
2
+ export type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
3
+ export declare function memo<TDeps extends readonly any[], TResult>(getDeps: () => [...TDeps], fn: (...args: NoInfer<[...TDeps]>) => TResult, opts: {
4
+ key: any;
5
+ debug?: () => any;
6
+ onChange?: (result: TResult) => void;
7
+ }): () => TResult;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * virtual-core
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ function memo(getDeps, fn, opts) {
12
+ let deps = [];
13
+ let result;
14
+ return () => {
15
+ let depTime;
16
+ if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
17
+ const newDeps = getDeps();
18
+ const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
19
+ if (!depsChanged) {
20
+ return result;
21
+ }
22
+ deps = newDeps;
23
+ let resultTime;
24
+ if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
25
+ result = fn(...newDeps);
26
+ opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
27
+ if (opts.key && opts.debug != null && opts.debug()) {
28
+ const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
29
+ const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
30
+ const resultFpsPercentage = resultEndTime / 16;
31
+ const pad = (str, num) => {
32
+ str = String(str);
33
+ while (str.length < num) {
34
+ str = ' ' + str;
35
+ }
36
+ return str;
37
+ };
38
+ console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `
39
+ font-size: .6rem;
40
+ font-weight: bold;
41
+ color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);
42
+ }
43
+ return result;
44
+ };
45
+ }
46
+
47
+ export { memo };
48
+ //# sourceMappingURL=utils.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.esm.js","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n"],"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"],"mappings":";;;;;;;;;;AAIO,SAASA,IAAI,CAClBC,OAAyB,EACzBC,EAA6C,EAC7CC,IAIC,EACc;EACf,IAAIC,IAAW,GAAG,EAAE,CAAA;AACpB,EAAA,IAAIC,MAA2B,CAAA;AAE/B,EAAA,OAAO,MAAM;AACX,IAAA,IAAIC,OAAe,CAAA;AACnB,IAAA,IAAIH,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAEF,OAAO,GAAGG,IAAI,CAACC,GAAG,EAAE,CAAA;IAEpD,MAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;IAEzB,MAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,CAACC,GAAQ,EAAEC,KAAa,KAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAC,CAAA;IAEhE,IAAI,CAACH,WAAW,EAAE;AAChB,MAAA,OAAOP,MAAM,CAAA;AACf,KAAA;AAEAD,IAAAA,IAAI,GAAGO,OAAO,CAAA;AAEd,IAAA,IAAIM,UAAkB,CAAA;AACtB,IAAA,IAAId,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAES,UAAU,GAAGR,IAAI,CAACC,GAAG,EAAE,CAAA;AAEvDL,IAAAA,MAAM,GAAGH,EAAE,CAAC,GAAGS,OAAO,CAAC,CAAA;IACvBR,IAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEe,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAdf,IAAI,CAAEe,QAAQ,CAAGb,MAAM,CAAC,CAAA;AAExB,IAAA,IAAIF,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAA,IAAA,IAAVL,IAAI,CAACK,KAAK,EAAI,EAAE;AAC9B,MAAA,MAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AAClE,MAAA,MAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AACxE,MAAA,MAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;AAE9C,MAAA,MAAME,GAAG,GAAG,CAACC,GAAoB,EAAEC,GAAW,KAAK;AACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAA;AACjB,QAAA,OAAOA,GAAG,CAACZ,MAAM,GAAGa,GAAG,EAAE;UACvBD,GAAG,GAAG,GAAG,GAAGA,GAAG,CAAA;AACjB,SAAA;AACA,QAAA,OAAOA,GAAG,CAAA;OACX,CAAA;AAEDG,MAAAA,OAAO,CAACC,IAAI,CACT,OAAML,GAAG,CAACF,aAAa,EAAE,CAAC,CAAE,CAAA,EAAA,EAAIE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAE,KAAI,EACvD,CAAA;AACT;AACA;AACA,uBAAyBC,EAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC9C,CAAA,cAAA,CAAe,EACrBpB,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEI,GAAG,CACV,CAAA;AACH,KAAA;AAEA,IAAA,OAAOF,MAAM,CAAA;GACd,CAAA;AACH;;;;"}
@@ -20,35 +20,30 @@ function memo(getDeps, fn, opts) {
20
20
  if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
21
21
  const newDeps = getDeps();
22
22
  const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
23
-
24
23
  if (!depsChanged) {
25
24
  return result;
26
25
  }
27
-
28
26
  deps = newDeps;
29
27
  let resultTime;
30
28
  if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
31
29
  result = fn(...newDeps);
32
30
  opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
33
-
34
31
  if (opts.key && opts.debug != null && opts.debug()) {
35
32
  const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
36
33
  const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
37
34
  const resultFpsPercentage = resultEndTime / 16;
38
-
39
35
  const pad = (str, num) => {
40
36
  str = String(str);
41
-
42
37
  while (str.length < num) {
43
38
  str = ' ' + str;
44
39
  }
45
-
46
40
  return str;
47
41
  };
48
-
49
- console.info("%c\u23F1 " + pad(resultEndTime, 5) + " /" + pad(depEndTime, 5) + " ms", "\n font-size: .6rem;\n font-weight: bold;\n color: hsl(" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + "deg 100% 31%);", opts == null ? void 0 : opts.key);
42
+ console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `
43
+ font-size: .6rem;
44
+ font-weight: bold;
45
+ color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);
50
46
  }
51
-
52
47
  return result;
53
48
  };
54
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n"],"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"],"mappings":";;;;;;;;;;;;;;AAIO,SAASA,IAAT,CACLC,OADK,EAELC,EAFK,EAGLC,IAHK,EAQU;EACf,IAAIC,IAAW,GAAG,EAAlB,CAAA;AACA,EAAA,IAAIC,MAAJ,CAAA;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,IAAIC,OAAJ,CAAA;AACA,IAAA,IAAIH,IAAI,CAACI,GAAL,IAAYJ,IAAI,CAACK,KAAjB,IAAYL,IAAAA,IAAAA,IAAI,CAACK,KAAL,EAAhB,EAAgCF,OAAO,GAAGG,IAAI,CAACC,GAAL,EAAV,CAAA;IAEhC,MAAMC,OAAO,GAAGV,OAAO,EAAvB,CAAA;IAEA,MAAMW,WAAW,GACfD,OAAO,CAACE,MAAR,KAAmBT,IAAI,CAACS,MAAxB,IACAF,OAAO,CAACG,IAAR,CAAa,CAACC,GAAD,EAAWC,KAAX,KAA6BZ,IAAI,CAACY,KAAD,CAAJ,KAAgBD,GAA1D,CAFF,CAAA;;IAIA,IAAI,CAACH,WAAL,EAAkB;AAChB,MAAA,OAAOP,MAAP,CAAA;AACD,KAAA;;AAEDD,IAAAA,IAAI,GAAGO,OAAP,CAAA;AAEA,IAAA,IAAIM,UAAJ,CAAA;AACA,IAAA,IAAId,IAAI,CAACI,GAAL,IAAYJ,IAAI,CAACK,KAAjB,IAAYL,IAAAA,IAAAA,IAAI,CAACK,KAAL,EAAhB,EAAgCS,UAAU,GAAGR,IAAI,CAACC,GAAL,EAAb,CAAA;AAEhCL,IAAAA,MAAM,GAAGH,EAAE,CAAC,GAAGS,OAAJ,CAAX,CAAA;IACAR,IAAI,IAAA,IAAJ,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEe,QAAN,oBAAAf,IAAI,CAAEe,QAAN,CAAiBb,MAAjB,CAAA,CAAA;;AAEA,IAAA,IAAIF,IAAI,CAACI,GAAL,IAAYJ,IAAI,CAACK,KAAjB,IAAA,IAAA,IAAYL,IAAI,CAACK,KAAL,EAAhB,EAAgC;AAC9B,MAAA,MAAMW,UAAU,GAAGC,IAAI,CAACC,KAAL,CAAW,CAACZ,IAAI,CAACC,GAAL,EAAaJ,GAAAA,OAAd,IAA0B,GAArC,IAA4C,GAA/D,CAAA;AACA,MAAA,MAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAL,CAAW,CAACZ,IAAI,CAACC,GAAL,EAAaO,GAAAA,UAAd,IAA6B,GAAxC,IAA+C,GAArE,CAAA;AACA,MAAA,MAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAA5C,CAAA;;AAEA,MAAA,MAAME,GAAG,GAAG,CAACC,GAAD,EAAuBC,GAAvB,KAAuC;AACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAD,CAAZ,CAAA;;AACA,QAAA,OAAOA,GAAG,CAACZ,MAAJ,GAAaa,GAApB,EAAyB;UACvBD,GAAG,GAAG,MAAMA,GAAZ,CAAA;AACD,SAAA;;AACD,QAAA,OAAOA,GAAP,CAAA;OALF,CAAA;;AAQAG,MAAAA,OAAO,CAACC,IAAR,CAAA,WAAA,GACSL,GAAG,CAACF,aAAD,EAAgB,CAAhB,CADZ,GAAA,IAAA,GACmCE,GAAG,CAACL,UAAD,EAAa,CAAb,CADtC,uGAKmBC,IAAI,CAACU,GAAL,CACX,CADW,EAEXV,IAAI,CAACW,GAAL,CAAS,MAAM,GAAMR,GAAAA,mBAArB,EAA0C,GAA1C,CAFW,CALnB,GAAA,gBAAA,EASEpB,IATF,IASEA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEI,GATR,CAAA,CAAA;AAWD,KAAA;;AAED,IAAA,OAAOF,MAAP,CAAA;GAhDF,CAAA;AAkDD;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n"],"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"],"mappings":";;;;;;;;;;;;;;AAIO,SAASA,IAAI,CAClBC,OAAyB,EACzBC,EAA6C,EAC7CC,IAIC,EACc;EACf,IAAIC,IAAW,GAAG,EAAE,CAAA;AACpB,EAAA,IAAIC,MAA2B,CAAA;AAE/B,EAAA,OAAO,MAAM;AACX,IAAA,IAAIC,OAAe,CAAA;AACnB,IAAA,IAAIH,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAEF,OAAO,GAAGG,IAAI,CAACC,GAAG,EAAE,CAAA;IAEpD,MAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;IAEzB,MAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,CAACC,GAAQ,EAAEC,KAAa,KAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAC,CAAA;IAEhE,IAAI,CAACH,WAAW,EAAE;AAChB,MAAA,OAAOP,MAAM,CAAA;AACf,KAAA;AAEAD,IAAAA,IAAI,GAAGO,OAAO,CAAA;AAEd,IAAA,IAAIM,UAAkB,CAAA;AACtB,IAAA,IAAId,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAES,UAAU,GAAGR,IAAI,CAACC,GAAG,EAAE,CAAA;AAEvDL,IAAAA,MAAM,GAAGH,EAAE,CAAC,GAAGS,OAAO,CAAC,CAAA;IACvBR,IAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEe,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAdf,IAAI,CAAEe,QAAQ,CAAGb,MAAM,CAAC,CAAA;AAExB,IAAA,IAAIF,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAA,IAAA,IAAVL,IAAI,CAACK,KAAK,EAAI,EAAE;AAC9B,MAAA,MAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AAClE,MAAA,MAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AACxE,MAAA,MAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;AAE9C,MAAA,MAAME,GAAG,GAAG,CAACC,GAAoB,EAAEC,GAAW,KAAK;AACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAA;AACjB,QAAA,OAAOA,GAAG,CAACZ,MAAM,GAAGa,GAAG,EAAE;UACvBD,GAAG,GAAG,GAAG,GAAGA,GAAG,CAAA;AACjB,SAAA;AACA,QAAA,OAAOA,GAAG,CAAA;OACX,CAAA;AAEDG,MAAAA,OAAO,CAACC,IAAI,CACT,OAAML,GAAG,CAACF,aAAa,EAAE,CAAC,CAAE,CAAA,EAAA,EAAIE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAE,KAAI,EACvD,CAAA;AACT;AACA;AACA,uBAAyBC,EAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC9C,CAAA,cAAA,CAAe,EACrBpB,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEI,GAAG,CACV,CAAA;AACH,KAAA;AAEA,IAAA,OAAOF,MAAM,CAAA;GACd,CAAA;AACH;;;;"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * virtual-core
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ function memo(getDeps, fn, opts) {
12
+ let deps = [];
13
+ let result;
14
+ return () => {
15
+ let depTime;
16
+ if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();
17
+ const newDeps = getDeps();
18
+ const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
19
+ if (!depsChanged) {
20
+ return result;
21
+ }
22
+ deps = newDeps;
23
+ let resultTime;
24
+ if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();
25
+ result = fn(...newDeps);
26
+ opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);
27
+ if (opts.key && opts.debug != null && opts.debug()) {
28
+ const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
29
+ const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
30
+ const resultFpsPercentage = resultEndTime / 16;
31
+ const pad = (str, num) => {
32
+ str = String(str);
33
+ while (str.length < num) {
34
+ str = ' ' + str;
35
+ }
36
+ return str;
37
+ };
38
+ console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `
39
+ font-size: .6rem;
40
+ font-weight: bold;
41
+ color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);
42
+ }
43
+ return result;
44
+ };
45
+ }
46
+
47
+ export { memo };
48
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n },\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n return result!\n }\n}\n"],"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"],"mappings":";;;;;;;;;;AAIO,SAASA,IAAI,CAClBC,OAAyB,EACzBC,EAA6C,EAC7CC,IAIC,EACc;EACf,IAAIC,IAAW,GAAG,EAAE,CAAA;AACpB,EAAA,IAAIC,MAA2B,CAAA;AAE/B,EAAA,OAAO,MAAM;AACX,IAAA,IAAIC,OAAe,CAAA;AACnB,IAAA,IAAIH,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAEF,OAAO,GAAGG,IAAI,CAACC,GAAG,EAAE,CAAA;IAEpD,MAAMC,OAAO,GAAGV,OAAO,EAAE,CAAA;IAEzB,MAAMW,WAAW,GACfD,OAAO,CAACE,MAAM,KAAKT,IAAI,CAACS,MAAM,IAC9BF,OAAO,CAACG,IAAI,CAAC,CAACC,GAAQ,EAAEC,KAAa,KAAKZ,IAAI,CAACY,KAAK,CAAC,KAAKD,GAAG,CAAC,CAAA;IAEhE,IAAI,CAACH,WAAW,EAAE;AAChB,MAAA,OAAOP,MAAM,CAAA;AACf,KAAA;AAEAD,IAAAA,IAAI,GAAGO,OAAO,CAAA;AAEd,IAAA,IAAIM,UAAkB,CAAA;AACtB,IAAA,IAAId,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAVL,IAAAA,IAAAA,IAAI,CAACK,KAAK,EAAI,EAAES,UAAU,GAAGR,IAAI,CAACC,GAAG,EAAE,CAAA;AAEvDL,IAAAA,MAAM,GAAGH,EAAE,CAAC,GAAGS,OAAO,CAAC,CAAA;IACvBR,IAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEe,QAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAdf,IAAI,CAAEe,QAAQ,CAAGb,MAAM,CAAC,CAAA;AAExB,IAAA,IAAIF,IAAI,CAACI,GAAG,IAAIJ,IAAI,CAACK,KAAK,IAAA,IAAA,IAAVL,IAAI,CAACK,KAAK,EAAI,EAAE;AAC9B,MAAA,MAAMW,UAAU,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGJ,OAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AAClE,MAAA,MAAMgB,aAAa,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,IAAI,CAACC,GAAG,EAAE,GAAGO,UAAW,IAAI,GAAG,CAAC,GAAG,GAAG,CAAA;AACxE,MAAA,MAAMM,mBAAmB,GAAGD,aAAa,GAAG,EAAE,CAAA;AAE9C,MAAA,MAAME,GAAG,GAAG,CAACC,GAAoB,EAAEC,GAAW,KAAK;AACjDD,QAAAA,GAAG,GAAGE,MAAM,CAACF,GAAG,CAAC,CAAA;AACjB,QAAA,OAAOA,GAAG,CAACZ,MAAM,GAAGa,GAAG,EAAE;UACvBD,GAAG,GAAG,GAAG,GAAGA,GAAG,CAAA;AACjB,SAAA;AACA,QAAA,OAAOA,GAAG,CAAA;OACX,CAAA;AAEDG,MAAAA,OAAO,CAACC,IAAI,CACT,OAAML,GAAG,CAACF,aAAa,EAAE,CAAC,CAAE,CAAA,EAAA,EAAIE,GAAG,CAACL,UAAU,EAAE,CAAC,CAAE,KAAI,EACvD,CAAA;AACT;AACA;AACA,uBAAyBC,EAAAA,IAAI,CAACU,GAAG,CACnB,CAAC,EACDV,IAAI,CAACW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAGR,mBAAmB,EAAE,GAAG,CAAC,CAC9C,CAAA,cAAA,CAAe,EACrBpB,IAAI,IAAJA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEI,GAAG,CACV,CAAA;AACH,KAAA;AAEA,IAAA,OAAOF,MAAM,CAAA;GACd,CAAA;AACH;;;;"}