virtua 0.6.0 → 0.7.0
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/README.md +2 -2
- package/lib/core/cache.d.ts +3 -4
- package/lib/core/scroller.d.ts +3 -1
- package/lib/core/store.d.ts +6 -7
- package/lib/core/types.d.ts +7 -0
- package/lib/core/utils.d.ts +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/react/VList.d.ts +3 -2
- package/lib/react/useLatestRef.d.ts +2 -0
- package/lib/react/utils.d.ts +3 -1
- package/package.json +18 -10
- package/lib/react/useRefWithUpdate.d.ts +0 -2
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/src/core/utils.ts","../src/src/core/cache.ts","../src/src/core/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/react/utils.ts","../src/src/react/useRefWithUpdate.ts","../src/src/react/useSelector.ts","../src/src/core/dom.ts","../src/src/core/scroller.ts","../src/src/react/useStatic.ts","../src/src/core/resizer.ts","../src/src/react/Viewport.tsx","../src/src/react/ListItem.tsx","../src/src/react/VList.tsx","../src/src/react/VGrid.tsx","../src/src/react/WVList.tsx"],"sourcesContent":["export const min = Math.min;\nexport const max = Math.max;\nexport const abs = Math.abs;\nexport const now = Date.now;\nexport const values = Object.values;\nexport const timeout = setTimeout;\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: NodeJS.Timeout | undefined | null;\n\n const cancel = () => {\n if (exists(id)) {\n clearTimeout(id);\n }\n };\n const debouncedFn = () => {\n cancel();\n id = timeout(() => {\n id = null;\n fn();\n }, ms);\n };\n debouncedFn._cancel = cancel;\n return debouncedFn;\n};\n\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { exists, max, median, min } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _measuredOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._measuredOffsetIndex = min(index, cache._measuredOffsetIndex);\n return isInitialMeasurement;\n};\n\nconst computeOffset = (\n cache: Writeable<Cache>,\n index: number,\n isTotal?: boolean\n): number => {\n if (!cache._length) return 0;\n if (cache._measuredOffsetIndex >= index) {\n if (isTotal) {\n return cache._offsets[index]! + getItemSize(cache, index);\n } else {\n return cache._offsets[index]!;\n }\n }\n\n let i = cache._measuredOffsetIndex;\n let top = cache._offsets[i]!;\n while (i <= index) {\n cache._offsets[i] = top;\n if (i === index && !isTotal) {\n break;\n }\n top += getItemSize(cache, i);\n i++;\n }\n // mark as measured\n cache._measuredOffsetIndex = index;\n return top;\n};\n\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n return computeOffset(cache, cache._length - 1, true);\n};\n\nexport const computeStartOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n return computeOffset(cache, index);\n};\n\nconst findIndex = (cache: Cache, i: number, distance: number): number => {\n let sum = 0;\n if (distance >= 0) {\n // search forward\n while (i < cache._length - 1) {\n const h = getItemSize(cache, i++);\n if ((sum += h) >= distance) {\n if (sum - h / 2 >= distance) {\n i--;\n }\n break;\n }\n }\n } else {\n // search backward\n while (i > 0) {\n const h = getItemSize(cache, --i);\n if ((sum -= h) <= distance) {\n if (sum + h / 2 < distance) {\n i++;\n }\n break;\n }\n }\n }\n\n return min(max(i, 0), cache._length - 1);\n};\n\nexport const findStartIndexWithOffset = (\n cache: Cache,\n offset: number,\n prevStartIndex: number,\n prevOffset: number\n): number => {\n return findIndex(cache, prevStartIndex, offset - prevOffset);\n};\n\nexport { findIndex as findEndIndex };\n\nexport const hasUnmeasuredItemsInRange = (\n cache: Cache,\n startIndex: number,\n endIndex: number\n): boolean => {\n for (let i = startIndex; i <= endIndex; i++) {\n if (cache._sizes[i] === UNCACHED) {\n return true;\n }\n }\n return false;\n};\n\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nexport const initCache = (length: number, itemSize: number): Cache => {\n const sizes: number[] = [];\n const offsets: number[] = [];\n for (let i = 0; i < length; i++) {\n sizes.push(UNCACHED);\n // first offset must be 0\n offsets.push(i === 0 ? 0 : UNCACHED);\n }\n\n return {\n _defaultItemSize: itemSize,\n _length: length,\n _measuredOffsetIndex: 0,\n _sizes: sizes,\n _offsets: offsets,\n };\n};\n\nexport const updateCache = (cache: Writeable<Cache>, length: number) => {\n const sizes: number[] = [];\n const offsets: number[] = [];\n for (let i = 0; i < length; i++) {\n const size = cache._sizes[i];\n sizes.push(exists(size) ? size : UNCACHED);\n\n if (i === 0) {\n // first offset must be 0\n offsets.push(0);\n } else {\n const offset = cache._offsets[i];\n offsets.push(exists(offset) ? offset : UNCACHED);\n }\n }\n\n cache._length = length;\n cache._measuredOffsetIndex = min(cache._measuredOffsetIndex, length - 1);\n cache._sizes = sizes;\n cache._offsets = offsets;\n};\n","import {\n findStartIndexWithOffset,\n initCache,\n getItemSize,\n computeTotalSize,\n findEndIndex,\n computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n hasUnmeasuredItemsInRange,\n estimateDefaultItemSize,\n updateCache,\n} from \"./cache\";\nimport type { CacheSnapshot, Writeable } from \"./types\";\nimport { abs, max, min } from \"./utils\";\n\nexport type ScrollJump = Readonly<number>;\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\nconst calculateJump = (cache: Cache, items: readonly ItemResize[]): number => {\n return items.reduce((acc, [index, size]) => {\n return acc + (size - getItemSize(cache, index));\n }, 0);\n};\n\n// Scroll offset and sizes can have sub-pixel value if window.devicePixelRatio has decimal value\nconst SUBPIXEL_THRESHOLD = 1.5; // 0.5 * 3\n\nexport const SCROLL_IDLE = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\ntype ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_WINDOW_RESIZE = 2;\nexport const ACTION_SCROLL = 3;\nexport const ACTION_BEFORE_MANUAL_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\nexport const ACTION_MANUAL_SCROLL = 6;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_WINDOW_RESIZE, size: number]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_BEFORE_MANUAL_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, dummy?: void]\n | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void];\n\ntype Subscriber = (sync?: boolean) => void;\n\nexport const UPDATE_SCROLL = 0b00001;\nexport const UPDATE_SIZE = 0b00010;\nexport const UPDATE_JUMP = 0b00100;\nexport const UPDATE_IS_SCROLLING = 0b01000;\nexport const UPDATE_SCROLL_WITH_EVENT = 0b10000;\n\nexport type VirtualStore = {\n _getCache(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInRange(startIndex: number): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemLength(): number;\n _getScrollOffset(): number;\n _getScrollOffsetMax(): number;\n _getViewportSize(): number;\n _getScrollSize(): number;\n _getCorrectedScrollSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump;\n _getItemIndexForScrollTo(offset: number): number;\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n _getIsScrolling(): boolean;\n _updateCacheLength(length: number): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number | undefined,\n initialItemCount: number = 0,\n isReverse: boolean,\n cacheSnapshot?: CacheSnapshot\n): VirtualStore => {\n const shouldAutoEstimateItemSize = !itemSize;\n const initialItemSize = itemSize || 40;\n const cache =\n (cacheSnapshot as unknown as Cache | undefined) ||\n initCache(elementsCount, initialItemSize);\n let viewportSize = initialItemSize * max(initialItemCount - 1, 0);\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _isManualScrolling = false;\n let _resized = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n\n const subscribers = new Set<[number, Subscriber]>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const getScrollOffsetMax = () => getScrollSize() - viewportSize;\n\n const updateScrollDirection = (dir: ScrollDirection): boolean => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n if (\n _scrollDirection !== prev &&\n (_scrollDirection === SCROLL_IDLE || prev === SCROLL_IDLE)\n ) {\n return true;\n }\n return false;\n };\n\n return {\n _getCache() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n const [prevStartIndex, prevEndIndex] = _prevRange;\n const prevOffset = computeStartOffset(\n cache as Writeable<Cache>,\n prevStartIndex\n );\n const start = findStartIndexWithOffset(\n cache,\n scrollOffset,\n prevStartIndex,\n prevOffset\n );\n const end = findEndIndex(cache, start, viewportSize);\n if (prevStartIndex === start && prevEndIndex === end) {\n return _prevRange;\n }\n return (_prevRange = [start, end]);\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInRange(startIndex) {\n return hasUnmeasuredItemsInRange(\n cache,\n max(0, startIndex - 2),\n min(cache._length - 1, startIndex + 2)\n );\n },\n _getItemOffset(index) {\n const offset = computeStartOffset(cache as Writeable<Cache>, index);\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollOffsetMax: getScrollOffsetMax,\n _getViewportSize() {\n return viewportSize;\n },\n _getScrollSize: getScrollSize,\n _getCorrectedScrollSize() {\n return max(getScrollSize(), viewportSize);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = 0;\n return prevJump;\n },\n _getItemIndexForScrollTo(offset) {\n return findStartIndexWithOffset(cache, offset, 0, 0);\n },\n _subscribe(target, cb) {\n const sub: [number, Subscriber] = [target, cb];\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n _update(type, payload): void {\n let shouldSync: boolean | undefined;\n let mutated = 0;\n\n switch (type) {\n case ACTION_ITEM_RESIZE: {\n const updated = payload.filter(\n ([index, size]) => cache._sizes[index] !== size\n );\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n let diff = 0;\n // Calculate jump\n if (_scrollDirection === SCROLL_UP) {\n diff = calculateJump(cache, updated);\n } else if (_isManualScrolling) {\n const [startIndex] = _prevRange;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (\n scrollOffset >\n getScrollOffsetMax() - SUBPIXEL_THRESHOLD\n ) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated);\n } else {\n // Keep start at mid\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\n );\n }\n } else {\n // Do nothing\n }\n\n if (diff) {\n jump = diff;\n jumpCount++;\n mutated += UPDATE_JUMP;\n }\n\n // Update item sizes\n let isNewItemMeasured = false;\n updated.forEach(([index, size]) => {\n if (setItemSize(cache as Writeable<Cache>, index, size)) {\n isNewItemMeasured = true;\n }\n });\n\n // Estimate initial item size from measured sizes\n if (\n shouldAutoEstimateItemSize &&\n isNewItemMeasured &&\n // TODO support reverse scroll also\n !scrollOffset\n ) {\n estimateDefaultItemSize(cache as Writeable<Cache>);\n }\n mutated += UPDATE_SIZE;\n _resized = shouldSync = true;\n break;\n }\n case ACTION_WINDOW_RESIZE: {\n if (viewportSize !== payload) {\n viewportSize = payload;\n mutated = UPDATE_SIZE;\n }\n break;\n }\n case ACTION_SCROLL:\n case ACTION_BEFORE_MANUAL_SCROLL: {\n // Skip if offset is not changed\n if (scrollOffset === payload) {\n break;\n }\n\n if (type === ACTION_SCROLL) {\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n const isJustResized = _resized;\n _resized = false;\n if (\n (_scrollDirection === SCROLL_IDLE || !isJustResized) &&\n // Ignore until manual scrolling\n !_isManualScrolling\n ) {\n if (\n updateScrollDirection(\n scrollOffset > payload ? SCROLL_UP : SCROLL_DOWN\n )\n ) {\n mutated += UPDATE_IS_SCROLLING;\n }\n }\n\n // Ignore manual scroll because it may be called in useEffect/useLayoutEffect and cause the warn below.\n // Warning: flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\n //\n // Update synchronously if scrolled a lot\n shouldSync = abs(scrollOffset - payload) > viewportSize;\n\n mutated += UPDATE_SCROLL_WITH_EVENT;\n }\n\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n scrollOffset = max(0, min(getScrollOffsetMax(), payload));\n mutated += UPDATE_SCROLL;\n break;\n }\n case ACTION_SCROLL_END: {\n if (updateScrollDirection(SCROLL_IDLE)) {\n mutated = UPDATE_IS_SCROLLING;\n }\n _isManualScrolling = false;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _isManualScrolling = true;\n break;\n }\n }\n\n if (mutated) {\n subscribers.forEach(([target, cb]) => {\n // Early return to skip React's computation\n if (!(mutated & target)) {\n return;\n }\n cb(shouldSync);\n });\n }\n },\n _getIsScrolling() {\n return _scrollDirection !== SCROLL_IDLE;\n },\n _updateCacheLength(length) {\n // It's ok to be updated in render because states should be calculated consistently regardless cache length\n if (cache._length === length) return;\n updateCache(cache as Writeable<Cache>, length);\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\n\n// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { Children, ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists } from \"../core/utils\";\n\nexport const refKey = \"current\";\n\nexport const emptyComponents = {};\n\nexport const flattenChildren = (children: ReactNode) => {\n const arr: (ReactElement | ReactFragment | string | number)[] = [];\n Children.forEach(children, (e) => {\n if (!exists(e) || typeof e === \"boolean\") {\n return;\n }\n arr.push(e);\n });\n return arr;\n};\n\nexport type MayHaveKey = { key?: React.Key };\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useRefWithUpdate = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { refKey } from \"./utils\";\nimport {\n UPDATE_IS_SCROLLING,\n UPDATE_JUMP,\n UPDATE_SCROLL,\n UPDATE_SIZE,\n VirtualStore,\n} from \"../core/store\";\n\nexport const SELECT_RANGE = UPDATE_SCROLL + UPDATE_SIZE;\nexport const SELECT_SCROLL_SIZE = UPDATE_SIZE;\nexport const SELECT_JUMP_COUNT = UPDATE_JUMP;\nexport const SELECT_IS_SCROLLING = UPDATE_IS_SCROLLING;\nexport const SELECT_ITEM = UPDATE_SIZE;\n\nexport const useSelector = <T>(\n store: VirtualStore,\n getSnapShot: () => T,\n target: number,\n shouldGetLatest?: boolean\n): T => {\n const [state, setState] = useState(getSnapShot);\n const getter = useRefWithUpdate(getSnapShot);\n\n useLayoutEffect(() => {\n const update = () => {\n setState(() => getter[refKey]());\n };\n return store._subscribe(target, (sync) => {\n // TODO batch flushSync to remove shouldGetLatest argument if possible\n // https://github.com/facebook/react/issues/25191\n if (sync) {\n flushSync(update);\n } else {\n update();\n }\n });\n }, []);\n\n // especially for sort of items\n if (shouldGetLatest) {\n const snap = getSnapShot();\n if (state !== snap) {\n setState(snap);\n }\n }\n return state;\n};\n","import { once } from \"./utils\";\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRtl = /*#__PURE__*/ once(\n (scrollable: HTMLElement) => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n }\n);\n","import { hasNegativeOffsetInRtl } from \"./dom\";\nimport {\n ACTION_SCROLL,\n ACTION_BEFORE_MANUAL_SCROLL,\n ScrollJump,\n VirtualStore,\n ACTION_SCROLL_END,\n UPDATE_SIZE,\n ACTION_MANUAL_SCROLL,\n} from \"./store\";\nimport { debounce, throttle, max, min, timeout } from \"./utils\";\n\n// Infer scroll state also from wheel events\n// Sometimes scroll events do not fire when frame dropped even if the visual have been already scrolled\nconst createOnWheel = (\n store: VirtualStore,\n isHorizontal: boolean,\n onScrollStopped: () => void\n) => {\n return throttle((e: WheelEvent) => {\n if (!store._getIsScrolling()) {\n // Scroll start should be detected with scroll event\n return;\n }\n if (e.ctrlKey) {\n // Probably a pinch-to-zoom gesture\n return;\n }\n // Get delta before checking deltaMode for firefox behavior\n // https://github.com/w3c/uievents/issues/181#issuecomment-392648065\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1392460#c34\n if (isHorizontal ? e.deltaX : e.deltaY) {\n const offset = store._getScrollOffset();\n if (offset > 0 && offset < store._getScrollOffsetMax()) {\n onScrollStopped();\n }\n }\n }, 50);\n};\n\nexport type Scroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _getActualScrollSize: () => number;\n _scrollTo: (offset: number) => void;\n _scrollToIndex: (index: number) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean,\n isRtl: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n let scrollToQueue: [() => void, () => void] | undefined;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n\n const getActualScrollSize = (): number => {\n if (!rootElement) return 0;\n // Use element's scrollHeight/scrollWidth instead of stored scrollSize.\n // This is because stored size may differ from the actual size, for example when a new item is added and not yet measured.\n return isHorizontal ? rootElement.scrollWidth : rootElement.scrollHeight;\n };\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRtl) {\n if (hasNegativeOffsetInRtl(rootElement!)) {\n return -offset;\n } else {\n return diff ? -offset : store._getScrollOffsetMax() - offset;\n }\n }\n return offset;\n };\n\n const scrollManually = async (\n index: number,\n getCurrentOffset: () => number\n ) => {\n if (!rootElement) return;\n\n const getOffset = (): number => {\n // Adjust if the offset is over the end, to get correct startIndex.\n return min(\n getCurrentOffset(),\n getActualScrollSize() - store._getViewportSize()\n );\n };\n\n while (true) {\n // Sync viewport to scroll destination\n // In order to scroll to the correct position, mount the items and measure their sizes before scrolling.\n store._update(ACTION_BEFORE_MANUAL_SCROLL, getOffset());\n\n if (!store._hasUnmeasuredItemsInRange(index)) {\n break;\n }\n\n if (scrollToQueue) {\n // Cancel waiting scrollTo\n scrollToQueue[1]();\n }\n\n // Wait for the scroll destination items to be measured.\n const unsubscribe = store._subscribe(UPDATE_SIZE, () => {\n scrollToQueue && scrollToQueue[0]();\n });\n try {\n // The measurement will be done asynchronously and the timing is not predictable so we use promise.\n // For example, ResizeObserver may not fire when window is not visible.\n await new Promise<void>((resolve, reject) => {\n let resolved = false;\n\n const resolveQueue = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n scrollToQueue = undefined;\n };\n scrollToQueue = [resolveQueue, reject];\n\n // In some specific situation with VGrid, the promise never resolved so we resolve it if timed out.\n timeout(resolveQueue, 250);\n });\n } catch (e) {\n // canceled\n return;\n } finally {\n unsubscribe();\n }\n }\n\n // Scroll with the updated value\n rootElement[scrollToKey] = normalizeOffset(getOffset());\n store._update(ACTION_MANUAL_SCROLL);\n };\n\n return {\n _initRoot(root) {\n rootElement = root;\n\n const syncViewportToScrollPosition = () => {\n store._update(ACTION_SCROLL, normalizeOffset(root[scrollToKey]));\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _getActualScrollSize: getActualScrollSize,\n _scrollTo(offset) {\n offset = max(offset, 0);\n\n scrollManually(store._getItemIndexForScrollTo(offset), () => offset);\n },\n _scrollToIndex(index) {\n index = max(min(index, store._getItemLength() - 1), 0);\n\n scrollManually(index, () => store._getItemOffset(index));\n },\n _fixScrollJump: (jump) => {\n if (!rootElement) return;\n rootElement[scrollToKey] += normalizeOffset(jump, true);\n },\n };\n};\n\nexport type WindowScroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n\n return {\n _initRoot(rootElement) {\n let visible = false;\n\n const getOffsetToWindow = (node: HTMLElement, offset: number): number => {\n const nodeOffset = offset + node[offsetKey];\n\n const parent = node.offsetParent;\n if (node === document.body || !parent) {\n return nodeOffset;\n }\n\n return getOffsetToWindow(parent as HTMLElement, nodeOffset);\n };\n\n const syncViewportToScrollPosition = () => {\n if (!visible) return;\n store._update(\n ACTION_SCROLL,\n window[scrollToKey] - getOffsetToWindow(rootElement, 0)\n );\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n const io = new IntersectionObserver(([entry]) => {\n visible = entry!.isIntersecting;\n });\n io.observe(rootElement);\n\n window.addEventListener(\"scroll\", onScroll);\n window.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n io.disconnect();\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _fixScrollJump: (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(isHorizontal ? jump : 0, isHorizontal ? 0 : jump);\n },\n };\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_WINDOW_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max, once } from \"./utils\";\n\nexport interface ListResizer {\n _observeRoot(root: HTMLElement): () => void;\n _observeItem(el: HTMLElement, i: number): () => void;\n}\n\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n store._update(ACTION_WINDOW_RESIZE, contentRect[sizeKey]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot() {\n const cb = () => {\n store._update(ACTION_WINDOW_RESIZE, window[windowSizeKey]);\n };\n window.addEventListener(\"resize\", cb);\n cb();\n return () => {\n window.removeEventListener(\"resize\", cb);\n getResizeObserver().disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n vStore._update(ACTION_WINDOW_RESIZE, contentRect[heightKey]);\n hStore._update(ACTION_WINDOW_RESIZE, contentRect[widthKey]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type ViewportComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomViewportComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: ViewportComponentAttributes;\n /**\n * Total height of items. It's undefined if component is not vertically scrollable.\n */\n height: number | undefined;\n /**\n * Total width of items. It's undefined if component is not horizontally scrollable.\n */\n width: number | undefined;\n /**\n * Currently component is scrolling or not.\n */\n scrolling: boolean;\n}\n\nexport const Viewport = forwardRef<any, CustomViewportComponentProps>(\n ({ children, attrs, width, height, scrolling }, ref): ReactElement => {\n return (\n <div ref={ref} {...attrs}>\n <div\n style={useMemo((): CSSProperties => {\n return {\n position: \"relative\",\n visibility: \"hidden\",\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n pointerEvents: scrolling ? \"none\" : \"auto\",\n };\n }, [width, height, scrolling])}\n >\n {children}\n </div>\n </div>\n );\n }\n);\n\nexport type CustomViewportComponent = typeof Viewport;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { VirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { SELECT_ITEM, useSelector } from \"./useSelector\";\nimport { ListResizer } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\n\n/**\n * Props of customized item component for {@link VList}.\n */\nexport interface CustomItemComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomItemComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomItemComponentProps> & React.RefAttributes<any>\n>;\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ListResizer;\n _store: VirtualStore;\n _index: number;\n _element: \"div\";\n _isHorizontal: boolean;\n _isRtl: boolean;\n};\n\nexport const ListItem = memo(\n ({\n _children: children,\n _resizer: resizer,\n _store: store,\n _index: index,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isRtl: isRtl,\n }: ListItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const offset = useSelector(\n store,\n () => store._getItemOffset(index),\n SELECT_ITEM,\n true\n );\n const hide = useSelector(\n store,\n () => store._isUnmeasuredItem(index),\n SELECT_ITEM,\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const leftOrRightKey = isRtl ? \"right\" : \"left\";\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : leftOrRightKey]: 0,\n [isHorizontal ? leftOrRightKey : \"top\"]: offset,\n visibility: hide ? \"hidden\" : \"visible\",\n // willChange: \"transform\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n","import {\n useRef,\n useMemo,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n} from \"react\";\nimport { UPDATE_SCROLL_WITH_EVENT, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { exists, max, min, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { MayHaveKey, emptyComponents, flattenChildren, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { createResizer } from \"../core/resizer\";\nimport { ViewportComponentAttributes } from \"..\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { CacheSnapshot } from \"../core/types\";\n\nexport type ScrollMode = \"reverse\" | \"rtl\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n */\n scrollToIndex(index: number): void;\n /**\n * Scroll to the given offset.\n * @param offset offset from start\n */\n scrollTo(offset: number): void;\n /**\n * Scroll by the given offset.\n * @param offset offset from current position\n */\n scrollBy(offset: number): void;\n}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * Scroll modes that should be set in certain situations.\n *\n * - `reverse`: This mode will adjust some styles to be suitable for bottom-to-top scrolling.\n * - `rtl`: You have to set this mode if you use this component under `direction: rtl` style.\n */\n mode?: ScrollMode;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link VListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked whenever scroll offset changes.\n * @param offset Current scrollTop or scrollLeft.\n */\n onScroll?: (offset: number) => void;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n mode,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: CustomViewportComponent;\n Item?: CustomItemComponentOrElement;\n },\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScroll = useRefWithUpdate(onScrollProp);\n const onScrollStop = useRefWithUpdate(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal, isRtl] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _isRtl = mode === \"rtl\";\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n mode === \"reverse\",\n cache\n );\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal, _isRtl),\n _isHorizontal,\n _isRtl,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useSelector(\n store,\n store._getRange,\n SELECT_RANGE\n );\n const scrolling = useSelector(\n store,\n store._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const jumpCount = useSelector(\n store,\n store._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const scrollSize = useSelector(\n store,\n store._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n const cleanupOnScroll = store._subscribe(UPDATE_SCROLL_WITH_EVENT, () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n });\n return () => {\n unobserve();\n cleanup();\n cleanupOnScroll();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return scroller._getActualScrollSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex: scroller._scrollToIndex,\n scrollTo: scroller._scrollTo,\n scrollBy(offset) {\n scroller._scrollTo(store._getScrollOffset() + offset);\n },\n };\n },\n []\n );\n\n const overscanedStartIndex = max(startIndex - overscan, 0);\n const overscanedEndIndex = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i];\n // This can be undefined when items are removed\n if (exists(e)) {\n res.push(\n <ListItem\n key={(e as MayHaveKey).key || i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={isRtl}\n />\n );\n }\n }\n return res;\n }, [elements, overscanedStartIndex, overscanedEndIndex]);\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: isHorizontal ? \"auto hidden\" : \"hidden auto\",\n display: isHorizontal ? \"inline-block\" : \"block\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_ITEM,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { max, min, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { emptyComponents, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n ViewportComponentAttributes,\n} from \"..\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { Viewport as DefaultViewport } from \"./Viewport\";\n\nconst genKey = (i: number, j: number) => `${i}-${j}`;\n\n/**\n * Props of customized cell component for {@link VGrid}.\n */\nexport interface CustomCellComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomCellComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomCellComponentProps> & React.RefAttributes<any>\n>;\n\ntype CustomCellComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomCellComponent;\n\ntype CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _vStore: VirtualStore;\n _hStore: VirtualStore;\n _rowIndex: number;\n _colIndex: number;\n _element: \"div\";\n _isRtl: boolean;\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _vStore: vStore,\n _hStore: hStore,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _element: Element,\n _isRtl: isRtl,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const top = useSelector(\n vStore,\n () => vStore._getItemOffset(rowIndex),\n SELECT_ITEM,\n true\n );\n const left = useSelector(\n hStore,\n () => hStore._getItemOffset(colIndex),\n SELECT_ITEM,\n true\n );\n const vHide = useSelector(\n vStore,\n () => vStore._isUnmeasuredItem(rowIndex),\n SELECT_ITEM,\n true\n );\n const hHide = useSelector(\n hStore,\n () => hStore._isUnmeasuredItem(colIndex),\n SELECT_ITEM,\n true\n );\n const height = useSelector(\n vStore,\n () => vStore._getItemSize(rowIndex),\n SELECT_ITEM,\n true\n );\n const width = useSelector(\n hStore,\n () => hStore._getItemSize(colIndex),\n SELECT_ITEM,\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, rowIndex, colIndex),\n [colIndex, rowIndex]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n display: \"grid\",\n margin: 0,\n padding: 0,\n position: \"absolute\",\n top: top,\n [isRtl ? \"right\" : \"left\"]: left,\n visibility: vHide || hHide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, vHide, hHide])}\n >\n {children}\n </Element>\n );\n }\n);\n\n/**\n * Methods of {@link VGrid}.\n */\nexport interface VGridHandle {\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: [x: number, y: number];\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: [width: number, height: number];\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: [width: number, height: number];\n /**\n * Scroll to the item specified by index.\n * @param indexX horizontal index of item\n * @param indexY vertical index of item\n */\n scrollToIndex(indexX: number, indexY: number): void;\n /**\n * Scroll to the given offset.\n * @param offsetX offset from left\n * @param offsetY offset from top\n */\n scrollTo(offsetX: number, offsetY: number): void;\n /**\n * Scroll by the given offset.\n * @param offsetX horizontal offset from current position\n * @param offsetY vertical offset from current position\n */\n scrollBy(offsetX: number, offsetY: number): void;\n}\n\n/**\n * Props of {@link VGrid}.\n */\nexport interface VGridProps extends ViewportComponentAttributes {\n /**\n * A function to create elements rendered by this component.\n */\n children: (arg: {\n /**\n * row index of cell\n */\n rowIndex: number;\n /**\n * column index of cell\n */\n colIndex: number;\n }) => ReactNode;\n /**\n * Total row length of grid.\n */\n row: number;\n /**\n * Total column length of grid.\n */\n col: number;\n /**\n * Cell height hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 40\n */\n cellHeight?: number;\n /**\n * Cell width hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 100\n */\n cellWidth?: number;\n /**\n * Number of items to render above/below the visible bounds of the grid. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 2\n */\n overscan?: number;\n /**\n * If set, the specified amount of rows will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialRowCount?: number;\n /**\n * If set, the specified amount of cols will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialColCount?: number;\n /**\n * You have to set true if you use this component under `direction: rtl` style.\n */\n rtl?: boolean;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for cell element. This component will get {@link CustomCellComponentProps} as props.\n * @defaultValue \"div\"\n */\n Cell?: CustomCellComponentOrElement;\n };\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n rtl: rtlProp,\n components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: CustomViewportComponent;\n Cell?: CustomCellComponentOrElement;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller, isRtl] = useStatic(\n () => {\n const _isRtl = !!rtlProp;\n const _vs = createVirtualStore(\n rowCount,\n cellHeight,\n initialRowCount,\n false\n );\n const _hs = createVirtualStore(\n colCount,\n cellWidth,\n initialColCount,\n false\n );\n return [\n _vs,\n _hs,\n createGridResizer(_vs, _hs),\n createScroller(_vs, false, _isRtl),\n createScroller(_hs, true, _isRtl),\n _isRtl,\n ];\n }\n );\n // The elements length and cached items length are different just after element is added/removed.\n vStore._updateCacheLength(rowCount);\n hStore._updateCacheLength(colCount);\n\n const [startRowIndex, endRowIndex] = useSelector(\n vStore,\n vStore._getRange,\n SELECT_RANGE\n );\n const [startColIndex, endColIndex] = useSelector(\n hStore,\n hStore._getRange,\n SELECT_RANGE\n );\n const verticalScrolling = useSelector(\n vStore,\n vStore._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const horizontalScrolling = useSelector(\n hStore,\n hStore._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const vJumpCount = useSelector(\n vStore,\n vStore._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const hJumpCount = useSelector(\n hStore,\n hStore._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const height = useSelector(\n vStore,\n vStore._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const width = useSelector(\n hStore,\n hStore._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const vCleanup = vScroller._initRoot(root);\n const hCleanup = hScroller._initRoot(root);\n return () => {\n unobserve();\n vCleanup();\n hCleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [\n hScroller._getActualScrollSize(),\n vScroller._getActualScrollSize(),\n ];\n },\n get viewportSize(): [number, number] {\n return [hStore._getViewportSize(), vStore._getViewportSize()];\n },\n scrollToIndex(indexX, indexY) {\n hScroller._scrollToIndex(indexX);\n vScroller._scrollToIndex(indexY);\n },\n scrollTo(offsetX, offsetY) {\n hScroller._scrollTo(offsetX);\n vScroller._scrollTo(offsetY);\n },\n scrollBy(offsetX, offsetY) {\n hScroller._scrollTo(hStore._getScrollOffset() + offsetX);\n vScroller._scrollTo(vStore._getScrollOffset() + offsetY);\n },\n };\n },\n []\n );\n\n const render = useMemo(() => {\n const cache = new Map<string, ReactNode>();\n return (rowIndex: number, colIndex: number) => {\n let e: ReactNode | undefined = cache.get(genKey(rowIndex, colIndex));\n if (!e) {\n cache.set(\n genKey(rowIndex, colIndex),\n (e = children({ rowIndex, colIndex }))\n );\n }\n return e;\n };\n }, [children]);\n\n const overscanedStartRowIndex = max(startRowIndex - overscan, 0);\n const overscanedEndRowIndex = min(endRowIndex + overscan, rowCount - 1);\n const overscanedStartColIndex = max(startColIndex - overscan, 0);\n const overscanedEndColIndex = min(endColIndex + overscan, colCount - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartRowIndex; i <= overscanedEndRowIndex; i++) {\n for (let j = overscanedStartColIndex; j <= overscanedEndColIndex; j++) {\n res.push(\n <Cell\n key={genKey(i, j)}\n _resizer={resizer}\n _vStore={vStore}\n _hStore={hStore}\n _rowIndex={i}\n _colIndex={j}\n _element={ItemElement as \"div\"}\n _children={render(i, j)}\n _isRtl={isRtl}\n />\n );\n }\n }\n\n return res;\n }, [\n render,\n overscanedStartRowIndex,\n overscanedEndRowIndex,\n overscanedStartColIndex,\n overscanedEndColIndex,\n ]);\n\n return (\n <Viewport\n ref={rootRef}\n width={width}\n height={height}\n scrolling={verticalScrolling || horizontalScrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n useRef,\n useMemo,\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport { createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { exists, max, min, values } from \"../core/utils\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport { MayHaveKey, emptyComponents, flattenChildren, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot, ViewportComponentAttributes } from \"..\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link WVList}.\n */\nexport interface WVListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WVList}.\n */\nexport interface WVListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link WVListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component controlled by the window scrolling. See {@link WVListProps} and {@link WVListHandle}.\n */\nexport const WVList = forwardRef<WVListHandle, WVListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: CustomViewportComponent;\n Item?: CustomItemComponentOrElement;\n },\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScrollStop = useRefWithUpdate(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n false,\n cache\n );\n\n return [\n _store,\n createWindowResizer(_store, _isHorizontal),\n createWindowScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useSelector(\n store,\n store._getRange,\n SELECT_RANGE\n );\n const scrolling = useSelector(\n store,\n store._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const jumpCount = useSelector(\n store,\n store._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const scrollSize = useSelector(\n store,\n store._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n return () => {\n unobserve();\n cleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n };\n },\n []\n );\n\n const overscanedStartIndex = max(startIndex - overscan, 0);\n const overscanedEndIndex = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i];\n // This can be undefined when items are removed\n if (exists(e)) {\n res.push(\n <ListItem\n key={(e as MayHaveKey).key || i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={false}\n />\n );\n }\n }\n return res;\n }, [elements, overscanedStartIndex, overscanedEndIndex]);\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"visible\",\n display: isHorizontal ? \"inline-block\" : \"block\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: isHorizontal ? \"auto\" : \"100%\",\n height: isHorizontal ? \"100%\" : \"auto\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n"],"names":["min","Math","max","abs","now","Date","values","Object","timeout","setTimeout","exists","v","debounce","fn","ms","id","cancel","clearTimeout","debouncedFn","_cancel","once","called","cache","args","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","isTotal","_length","_measuredOffsetIndex","_offsets","i","top","computeStartOffset","findIndex","distance","sum","h","findStartIndexWithOffset","offset","prevStartIndex","prevOffset","calculateJump","items","reduce","acc","createVirtualStore","elementsCount","itemSize","initialItemCount","isReverse","cacheSnapshot","shouldAutoEstimateItemSize","initialItemSize","initCache","length","sizes","offsets","push","viewportSize","scrollOffset","jumpCount","jump","_scrollDirection","_isManualScrolling","_resized","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","getScrollOffsetMax","updateScrollDirection","dir","prev","_getCache","JSON","parse","stringify","_getRange","prevEndIndex","start","end","findEndIndex","_isUnmeasuredItem","_hasUnmeasuredItemsInRange","startIndex","hasUnmeasuredItemsInRange","endIndex","_getItemOffset","_getItemSize","_getItemLength","_getScrollOffset","_getScrollOffsetMax","_getViewportSize","_getScrollSize","_getCorrectedScrollSize","_getJumpCount","_flushJump","prevJump","_getItemIndexForScrollTo","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldSync","mutated","updated","filter","diff","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","isJustResized","_getIsScrolling","_updateCacheLength","updateCache","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","refKey","emptyComponents","flattenChildren","children","Children","e","useRefWithUpdate","value","ref","useRef","useSelector","store","getSnapShot","shouldGetLatest","state","setState","useState","getter","update","sync","flushSync","snap","hasNegativeOffsetInRtl","scrollable","key","isNegative","createOnWheel","isHorizontal","onScrollStopped","throttle","time","n","ctrlKey","deltaX","deltaY","createScroller","isRtl","rootElement","scrollToQueue","scrollToKey","getActualScrollSize","scrollWidth","scrollHeight","normalizeOffset","scrollManually","async","getCurrentOffset","getOffset","unsubscribe","Promise","resolve","reject","resolved","resolveQueue","undefined","_initRoot","root","syncViewportToScrollPosition","onScroll","onWheel","addEventListener","passive","removeEventListener","_getActualScrollSize","_scrollTo","_scrollToIndex","_fixScrollJump","createWindowScroller","offsetKey","visible","getOffsetToWindow","node","nodeOffset","parent","offsetParent","document","body","io","IntersectionObserver","entry","isIntersecting","observe","disconnect","scrollBy","useStatic","init","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","contentRect","get","_observeRoot","ro","_observeItem","el","set","unobserve","createWindowResizer","windowSizeKey","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","Viewport","forwardRef","attrs","width","height","scrolling","_jsx","jsx","style","useMemo","position","visibility","pointerEvents","ListItem","memo","_children","_resizer","resizer","_store","_index","_element","Element","_isHorizontal","_isRtl","hide","leftOrRightKey","margin","padding","display","VList","overscan","horizontal","horizontalProp","mode","components","Root","DefaultViewport","Item","ItemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","viewportAttrs","elements","count","scroller","UPDATE_SCROLL","scrollSize","rootRef","cleanup","cleanupOnScroll","useImperativeHandle","scrollToIndex","scrollTo","overscanedStartIndex","overscanedEndIndex","res","overflow","contain","genKey","j","Cell","_vStore","_hStore","_rowIndex","_colIndex","left","vHide","hHide","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","rtl","rtlProp","vScroller","hScroller","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","verticalScrolling","horizontalScrolling","vJumpCount","hJumpCount","vCleanup","hCleanup","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex","WVList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/src/core/utils.ts","../src/src/core/cache.ts","../src/src/core/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/react/utils.ts","../src/src/react/useLatestRef.ts","../src/src/react/useSelector.ts","../src/src/core/dom.ts","../src/src/core/scroller.ts","../src/src/react/useStatic.ts","../src/src/core/resizer.ts","../src/src/react/Viewport.tsx","../src/src/react/ListItem.tsx","../src/src/react/VList.tsx","../src/src/react/VGrid.tsx","../src/src/react/WVList.tsx"],"sourcesContent":["export const min = Math.min;\nexport const max = Math.max;\nexport const abs = Math.abs;\nexport const now = Date.now;\nexport const values = Object.values;\nexport const timeout = setTimeout;\n\nexport const clamp = (\n value: number,\n minValue: number,\n maxValue: number\n): number => min(maxValue, max(minValue, value));\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: NodeJS.Timeout | undefined | null;\n\n const cancel = () => {\n if (exists(id)) {\n clearTimeout(id);\n }\n };\n const debouncedFn = () => {\n cancel();\n id = timeout(() => {\n id = null;\n fn();\n }, ms);\n };\n debouncedFn._cancel = cancel;\n return debouncedFn;\n};\n\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { clamp, median, min } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _measuredOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._measuredOffsetIndex = min(index, cache._measuredOffsetIndex);\n return isInitialMeasurement;\n};\n\nexport const computeOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n if (!cache._length) return 0;\n if (cache._measuredOffsetIndex >= index) {\n return cache._offsets[index]!;\n }\n\n let i = cache._measuredOffsetIndex;\n let top = cache._offsets[i]!;\n while (i < index) {\n top += getItemSize(cache, i);\n cache._offsets[++i] = top;\n }\n // mark as measured\n cache._measuredOffsetIndex = index;\n return top;\n};\n\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n if (!cache._length) return 0;\n return (\n computeOffset(cache, cache._length - 1) +\n getItemSize(cache, cache._length - 1)\n );\n};\n\nexport const findIndex = (\n cache: Cache,\n i: number,\n distance: number\n): number => {\n let sum = 0;\n if (distance >= 0) {\n // search forward\n while (i < cache._length - 1) {\n const h = getItemSize(cache, i++);\n if ((sum += h) >= distance) {\n if (sum - h / 2 >= distance) {\n i--;\n }\n break;\n }\n }\n } else {\n // search backward\n while (i > 0) {\n const h = getItemSize(cache, --i);\n if ((sum -= h) <= distance) {\n if (sum + h / 2 < distance) {\n i++;\n }\n break;\n }\n }\n }\n\n return clamp(i, 0, cache._length - 1);\n};\n\nexport const findStartIndexWithOffset = (\n cache: Writeable<Cache>,\n offset: number,\n initialIndex: number\n): number => {\n return findIndex(\n cache,\n initialIndex,\n offset - computeOffset(cache, initialIndex)\n );\n};\n\nexport const hasUnmeasuredItemsInRange = (\n cache: Cache,\n startIndex: number,\n endIndex: number\n): boolean => {\n return cache._sizes.slice(startIndex, endIndex + 1).includes(UNCACHED);\n};\n\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nconst appendCache = (cache: Writeable<Cache>, length: number) => {\n for (let i = cache._length; i < length; i++) {\n cache._sizes.push(UNCACHED);\n // first offset must be 0\n cache._offsets.push(i === 0 ? 0 : UNCACHED);\n }\n cache._length = length;\n};\n\nexport const initCache = (length: number, itemSize: number): Cache => {\n const cache: Cache = {\n _defaultItemSize: itemSize,\n _length: 0,\n _measuredOffsetIndex: 0,\n _sizes: [],\n _offsets: [],\n };\n appendCache(cache as Writeable<Cache>, length);\n return cache;\n};\n\nexport const updateCache = (cache: Writeable<Cache>, length: number) => {\n const diff = length - cache._length;\n\n if (diff > 0) {\n appendCache(cache as Writeable<Cache>, length);\n } else {\n for (let i = diff; i < 0; i++) {\n cache._sizes.pop();\n cache._offsets.pop();\n }\n cache._length = length;\n cache._measuredOffsetIndex = min(cache._measuredOffsetIndex, length - 1);\n }\n};\n","import {\n findStartIndexWithOffset,\n initCache,\n getItemSize,\n computeTotalSize,\n findIndex as findEndIndex,\n computeOffset as computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n hasUnmeasuredItemsInRange,\n estimateDefaultItemSize,\n updateCache,\n} from \"./cache\";\nimport type { CacheSnapshot, Writeable } from \"./types\";\nimport { abs, clamp, max, min } from \"./utils\";\n\nexport type ScrollJump = Readonly<number>;\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\nconst calculateJump = (cache: Cache, items: readonly ItemResize[]): number => {\n return items.reduce((acc, [index, size]) => {\n return acc + (size - getItemSize(cache, index));\n }, 0);\n};\n\n// Scroll offset and sizes can have sub-pixel value if window.devicePixelRatio has decimal value\nconst SUBPIXEL_THRESHOLD = 1.5; // 0.5 * 3\n\nexport const SCROLL_IDLE = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\ntype ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_VIEWPORT_RESIZE = 2;\nexport const ACTION_SCROLL = 3;\nexport const ACTION_BEFORE_MANUAL_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\nexport const ACTION_MANUAL_SCROLL = 6;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_VIEWPORT_RESIZE, size: number]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_BEFORE_MANUAL_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, dummy?: void]\n | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void];\n\ntype Subscriber = (sync?: boolean) => void;\n\nexport const UPDATE_SCROLL = 0b00001;\nexport const UPDATE_SIZE = 0b00010;\nexport const UPDATE_JUMP = 0b00100;\nexport const UPDATE_IS_SCROLLING = 0b01000;\nexport const UPDATE_SCROLL_WITH_EVENT = 0b10000;\n\nexport type VirtualStore = {\n _getCache(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInTargetViewport(offset: number): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemLength(): number;\n _getScrollOffset(): number;\n _getScrollOffsetMax(): number;\n _getIsScrolling(): boolean;\n _getViewportSize(): number;\n _getCorrectedScrollSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump;\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n _updateCacheLength(length: number): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number = 40,\n initialItemCount: number = 0,\n cache: Cache = initCache(elementsCount, itemSize),\n isReverse?: boolean,\n shouldAutoEstimateItemSize?: boolean\n): VirtualStore => {\n let viewportSize = itemSize * max(initialItemCount - 1, 0);\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _isManualScrolling = false;\n let _resized = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n\n const subscribers = new Set<[number, Subscriber]>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const getScrollOffsetMax = () => getScrollSize() - viewportSize;\n\n const updateScrollDirection = (dir: ScrollDirection): boolean => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n if (\n _scrollDirection !== prev &&\n (_scrollDirection === SCROLL_IDLE || prev === SCROLL_IDLE)\n ) {\n return true;\n }\n return false;\n };\n\n return {\n _getCache() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n const [prevStartIndex, prevEndIndex] = _prevRange;\n const start = findStartIndexWithOffset(\n cache as Writeable<Cache>,\n scrollOffset,\n prevStartIndex\n );\n const end = findEndIndex(cache, start, viewportSize);\n if (prevStartIndex === start && prevEndIndex === end) {\n return _prevRange;\n }\n return (_prevRange = [start, end]);\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInTargetViewport(offset) {\n const startIndex = findStartIndexWithOffset(\n cache as Writeable<Cache>,\n offset,\n _prevRange[0] // TODO binary search may be better here\n );\n return hasUnmeasuredItemsInRange(\n cache,\n max(0, startIndex - 1),\n min(\n cache._length - 1,\n findEndIndex(cache, startIndex, viewportSize) + 1\n )\n );\n },\n _getItemOffset(index) {\n const offset = computeStartOffset(cache as Writeable<Cache>, index);\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollOffsetMax: getScrollOffsetMax,\n _getIsScrolling() {\n return _scrollDirection !== SCROLL_IDLE;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getCorrectedScrollSize() {\n return max(getScrollSize(), viewportSize);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = 0;\n return prevJump;\n },\n _subscribe(target, cb) {\n const sub: [number, Subscriber] = [target, cb];\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n _update(type, payload): void {\n let shouldSync: boolean | undefined;\n let mutated = 0;\n\n switch (type) {\n case ACTION_ITEM_RESIZE: {\n const updated = payload.filter(\n ([index, size]) => cache._sizes[index] !== size\n );\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n let diff = 0;\n // Calculate jump\n if (_scrollDirection === SCROLL_UP) {\n diff = calculateJump(cache, updated);\n } else if (_isManualScrolling) {\n const [startIndex] = _prevRange;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (\n scrollOffset >\n getScrollOffsetMax() - SUBPIXEL_THRESHOLD\n ) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated);\n } else {\n // Keep start at mid\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\n );\n }\n } else {\n // Do nothing\n }\n\n if (diff) {\n jump = diff;\n jumpCount++;\n mutated += UPDATE_JUMP;\n }\n\n // Update item sizes\n let isNewItemMeasured = false;\n updated.forEach(([index, size]) => {\n if (setItemSize(cache as Writeable<Cache>, index, size)) {\n isNewItemMeasured = true;\n }\n });\n\n // Estimate initial item size from measured sizes\n if (\n shouldAutoEstimateItemSize &&\n isNewItemMeasured &&\n // TODO support reverse scroll also\n !scrollOffset\n ) {\n estimateDefaultItemSize(cache as Writeable<Cache>);\n }\n mutated += UPDATE_SIZE;\n _resized = shouldSync = true;\n break;\n }\n case ACTION_VIEWPORT_RESIZE: {\n if (viewportSize !== payload) {\n viewportSize = payload;\n mutated = UPDATE_SIZE;\n }\n break;\n }\n case ACTION_SCROLL:\n case ACTION_BEFORE_MANUAL_SCROLL: {\n // Skip if offset is not changed\n if (scrollOffset === payload) {\n break;\n }\n\n if (type === ACTION_SCROLL) {\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n const isJustResized = _resized;\n _resized = false;\n if (\n (_scrollDirection === SCROLL_IDLE || !isJustResized) &&\n // Ignore until manual scrolling\n !_isManualScrolling\n ) {\n if (\n updateScrollDirection(\n scrollOffset > payload ? SCROLL_UP : SCROLL_DOWN\n )\n ) {\n mutated += UPDATE_IS_SCROLLING;\n }\n }\n\n // Ignore manual scroll because it may be called in useEffect/useLayoutEffect and cause the warn below.\n // Warning: flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\n //\n // Update synchronously if scrolled a lot\n shouldSync = abs(scrollOffset - payload) > viewportSize;\n\n mutated += UPDATE_SCROLL_WITH_EVENT;\n }\n\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n scrollOffset = clamp(payload, 0, getScrollOffsetMax());\n mutated += UPDATE_SCROLL;\n break;\n }\n case ACTION_SCROLL_END: {\n if (updateScrollDirection(SCROLL_IDLE)) {\n mutated = UPDATE_IS_SCROLLING;\n }\n _isManualScrolling = false;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _isManualScrolling = true;\n break;\n }\n }\n\n if (mutated) {\n subscribers.forEach(([target, cb]) => {\n // Early return to skip React's computation\n if (!(mutated & target)) {\n return;\n }\n cb(shouldSync);\n });\n }\n },\n _updateCacheLength(length) {\n // It's ok to be updated in render because states should be calculated consistently regardless cache length\n if (cache._length === length) return;\n updateCache(cache as Writeable<Cache>, length);\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\n\n// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists } from \"../core/utils\";\n\nexport const refKey = \"current\";\n\nexport const emptyComponents = {};\n\ntype ItemElement = ReactElement | ReactFragment | string | number;\n\nconst forEach = (children: ReactNode, elements: ItemElement[]) => {\n if (Array.isArray(children)) {\n for (const c of children) {\n forEach(c, elements);\n }\n } else if (!exists(children) || typeof children === \"boolean\") {\n // filter out, that is the same as React.Children.toArray\n } else {\n elements.push(children);\n }\n};\n\n// Relace React.Children.forEach with our tiny implementation.\n// In our usage, just flatten children array keeping element instances and their keys, React.Children is redundant and slow.\n//\n// - React.Children.toArray is slow because it clones element instance.\n// - React.Children.map is slow because it clones element instance.\n// - React.Children.forEach is slow because it escapes and modifies keys even if they are unused.\n//\n// And React.Children seems to be in maintenance mode so it's unlikely it would be improved and ported to older versions.\n// https://github.com/reactjs/rfcs/pull/61#issuecomment-584402735\nexport const flattenChildren = (children: ReactNode): ItemElement[] => {\n const elements: ItemElement[] = [];\n forEach(children, elements);\n return elements;\n};\n\nexport type MayHaveKey = { key?: React.Key };\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useLatestRef = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { refKey } from \"./utils\";\nimport {\n UPDATE_IS_SCROLLING,\n UPDATE_JUMP,\n UPDATE_SCROLL,\n UPDATE_SIZE,\n VirtualStore,\n} from \"../core/store\";\n\nexport const SELECT_RANGE = UPDATE_SCROLL + UPDATE_SIZE;\nexport const SELECT_SCROLL_SIZE = UPDATE_SIZE;\nexport const SELECT_JUMP_COUNT = UPDATE_JUMP;\nexport const SELECT_IS_SCROLLING = UPDATE_IS_SCROLLING;\nexport const SELECT_ITEM = UPDATE_SIZE;\n\nexport const useSelector = <T>(\n store: VirtualStore,\n getSnapShot: () => T,\n target: number,\n shouldGetLatest?: boolean\n): T => {\n const [state, setState] = useState(getSnapShot);\n const getter = useLatestRef(getSnapShot);\n\n useLayoutEffect(() => {\n const update = () => {\n setState(() => getter[refKey]());\n };\n return store._subscribe(target, (sync) => {\n // TODO batch flushSync to remove shouldGetLatest argument if possible\n // https://github.com/facebook/react/issues/25191\n if (sync) {\n flushSync(update);\n } else {\n update();\n }\n });\n }, []);\n\n // especially for sort of items\n if (shouldGetLatest) {\n const snap = getSnapShot();\n if (state !== snap) {\n setState(snap);\n }\n }\n return state;\n};\n","import { once } from \"./utils\";\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRtl = /*#__PURE__*/ once(\n (scrollable: HTMLElement) => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n }\n);\n","import { hasNegativeOffsetInRtl } from \"./dom\";\nimport {\n ACTION_SCROLL,\n ACTION_BEFORE_MANUAL_SCROLL,\n ScrollJump,\n VirtualStore,\n ACTION_SCROLL_END,\n UPDATE_SIZE,\n ACTION_MANUAL_SCROLL,\n} from \"./store\";\nimport { ScrollToIndexAlign } from \"./types\";\nimport { debounce, throttle, timeout, clamp } from \"./utils\";\n\n// Infer scroll state also from wheel events\n// Sometimes scroll events do not fire when frame dropped even if the visual have been already scrolled\nconst createOnWheel = (\n store: VirtualStore,\n isHorizontal: boolean,\n onScrollStopped: () => void\n) => {\n return throttle((e: WheelEvent) => {\n if (!store._getIsScrolling()) {\n // Scroll start should be detected with scroll event\n return;\n }\n if (e.ctrlKey) {\n // Probably a pinch-to-zoom gesture\n return;\n }\n // Get delta before checking deltaMode for firefox behavior\n // https://github.com/w3c/uievents/issues/181#issuecomment-392648065\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1392460#c34\n if (isHorizontal ? e.deltaX : e.deltaY) {\n const offset = store._getScrollOffset();\n if (offset > 0 && offset < store._getScrollOffsetMax()) {\n onScrollStopped();\n }\n }\n }, 50);\n};\n\nexport type Scroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _getActualScrollSize: () => number;\n _scrollTo: (offset: number) => void;\n _scrollBy: (offset: number) => void;\n _scrollToIndex: (index: number, align?: ScrollToIndexAlign) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean,\n isRtl: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n let scrollToQueue: [() => void, () => void] | undefined;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n\n const getActualScrollSize = (): number => {\n if (!rootElement) return 0;\n // Use element's scrollHeight/scrollWidth instead of stored scrollSize.\n // This is because stored size may differ from the actual size, for example when a new item is added and not yet measured.\n return isHorizontal ? rootElement.scrollWidth : rootElement.scrollHeight;\n };\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRtl) {\n if (hasNegativeOffsetInRtl(rootElement!)) {\n return -offset;\n } else {\n return diff ? -offset : store._getScrollOffsetMax() - offset;\n }\n }\n return offset;\n };\n\n const scrollManually = async (getOffset: () => number) => {\n if (!rootElement) return;\n\n const getTargetOffset = (): number => {\n // Adjust if the offset is over the end, to get correct startIndex.\n return clamp(\n getOffset(),\n 0,\n getActualScrollSize() - store._getViewportSize()\n );\n };\n\n while (true) {\n // Sync viewport to scroll destination\n // In order to scroll to the correct position, mount the items and measure their sizes before scrolling.\n const targetOffset = getTargetOffset();\n store._update(ACTION_BEFORE_MANUAL_SCROLL, targetOffset);\n\n if (!store._hasUnmeasuredItemsInTargetViewport(targetOffset)) {\n break;\n }\n\n if (scrollToQueue) {\n // Cancel waiting scrollTo\n scrollToQueue[1]();\n }\n\n // Wait for the scroll destination items to be measured.\n const unsubscribe = store._subscribe(UPDATE_SIZE, () => {\n scrollToQueue && scrollToQueue[0]();\n });\n try {\n // The measurement will be done asynchronously and the timing is not predictable so we use promise.\n // For example, ResizeObserver may not fire when window is not visible.\n await new Promise<void>((resolve, reject) => {\n let resolved = false;\n\n const resolveQueue = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n scrollToQueue = undefined;\n };\n scrollToQueue = [resolveQueue, reject];\n\n // In some specific situation with VGrid, the promise never resolved so we resolve it if timed out.\n timeout(resolveQueue, 250);\n });\n } catch (e) {\n // canceled\n return;\n } finally {\n unsubscribe();\n }\n }\n\n // Scroll with the updated value\n rootElement[scrollToKey] = normalizeOffset(getTargetOffset());\n store._update(ACTION_MANUAL_SCROLL);\n };\n\n return {\n _initRoot(root) {\n rootElement = root;\n\n const syncViewportToScrollPosition = () => {\n store._update(ACTION_SCROLL, normalizeOffset(root[scrollToKey]));\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _getActualScrollSize: getActualScrollSize,\n _scrollTo(offset) {\n scrollManually(() => offset);\n },\n _scrollBy(offset) {\n offset += store._getScrollOffset();\n scrollManually(() => offset);\n },\n _scrollToIndex(index, align) {\n index = clamp(index, 0, store._getItemLength() - 1);\n\n scrollManually(\n align === \"end\"\n ? () =>\n store._getItemOffset(index) +\n store._getItemSize(index) -\n store._getViewportSize()\n : () => store._getItemOffset(index)\n );\n },\n _fixScrollJump: (jump) => {\n if (!rootElement) return;\n rootElement[scrollToKey] += normalizeOffset(jump, true);\n },\n };\n};\n\nexport type WindowScroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n\n return {\n _initRoot(rootElement) {\n let visible = false;\n\n const getOffsetToWindow = (node: HTMLElement, offset: number): number => {\n const nodeOffset = offset + node[offsetKey];\n\n const parent = node.offsetParent;\n if (node === document.body || !parent) {\n return nodeOffset;\n }\n\n return getOffsetToWindow(parent as HTMLElement, nodeOffset);\n };\n\n const syncViewportToScrollPosition = () => {\n if (!visible) return;\n store._update(\n ACTION_SCROLL,\n window[scrollToKey] - getOffsetToWindow(rootElement, 0)\n );\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n const io = new IntersectionObserver(([entry]) => {\n visible = entry!.isIntersecting;\n });\n io.observe(rootElement);\n\n window.addEventListener(\"scroll\", onScroll);\n window.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n io.disconnect();\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _fixScrollJump: (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(isHorizontal ? jump : 0, isHorizontal ? 0 : jump);\n },\n };\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_VIEWPORT_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max, once } from \"./utils\";\n\nexport interface ListResizer {\n _observeRoot(root: HTMLElement): () => void;\n _observeItem(el: HTMLElement, i: number): () => void;\n}\n\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n store._update(ACTION_VIEWPORT_RESIZE, contentRect[sizeKey]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot() {\n const cb = () => {\n store._update(ACTION_VIEWPORT_RESIZE, window[windowSizeKey]);\n };\n window.addEventListener(\"resize\", cb);\n cb();\n return () => {\n window.removeEventListener(\"resize\", cb);\n getResizeObserver().disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n vStore._update(ACTION_VIEWPORT_RESIZE, contentRect[heightKey]);\n hStore._update(ACTION_VIEWPORT_RESIZE, contentRect[widthKey]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type ViewportComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomViewportComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: ViewportComponentAttributes;\n /**\n * Total height of items. It's undefined if component is not vertically scrollable.\n */\n height: number | undefined;\n /**\n * Total width of items. It's undefined if component is not horizontally scrollable.\n */\n width: number | undefined;\n /**\n * Currently component is scrolling or not.\n */\n scrolling: boolean;\n}\n\nexport const Viewport = forwardRef<any, CustomViewportComponentProps>(\n ({ children, attrs, width, height, scrolling }, ref): ReactElement => {\n return (\n <div ref={ref} {...attrs}>\n <div\n style={useMemo((): CSSProperties => {\n return {\n position: \"relative\",\n visibility: \"hidden\",\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n pointerEvents: scrolling ? \"none\" : \"auto\",\n };\n }, [width, height, scrolling])}\n >\n {children}\n </div>\n </div>\n );\n }\n);\n\nexport type CustomViewportComponent = typeof Viewport;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { VirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { SELECT_ITEM, useSelector } from \"./useSelector\";\nimport { ListResizer } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\n\n/**\n * Props of customized item component for {@link VList}.\n */\nexport interface CustomItemComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomItemComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomItemComponentProps> & React.RefAttributes<any>\n>;\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ListResizer;\n _store: VirtualStore;\n _index: number;\n _element: \"div\";\n _isHorizontal: boolean;\n _isRtl: boolean;\n};\n\nexport const ListItem = memo(\n ({\n _children: children,\n _resizer: resizer,\n _store: store,\n _index: index,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isRtl: isRtl,\n }: ListItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const offset = useSelector(\n store,\n () => store._getItemOffset(index),\n SELECT_ITEM,\n true\n );\n const hide = useSelector(\n store,\n () => store._isUnmeasuredItem(index),\n SELECT_ITEM,\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const leftOrRightKey = isRtl ? \"right\" : \"left\";\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : leftOrRightKey]: 0,\n [isHorizontal ? leftOrRightKey : \"top\"]: offset,\n visibility: hide ? \"hidden\" : \"visible\",\n // willChange: \"transform\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n","import {\n useRef,\n useMemo,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n} from \"react\";\nimport { UPDATE_SCROLL_WITH_EVENT, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { exists, max, min, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { MayHaveKey, emptyComponents, flattenChildren, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createResizer } from \"../core/resizer\";\nimport { ViewportComponentAttributes } from \"..\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { CacheSnapshot, ScrollToIndexAlign } from \"../core/types\";\nimport { Cache } from \"../core/cache\";\n\nexport type ScrollMode = \"reverse\" | \"rtl\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n * @param align alignment of item\n */\n scrollToIndex(index: number, align?: ScrollToIndexAlign): void;\n /**\n * Scroll to the given offset.\n * @param offset offset from start\n */\n scrollTo(offset: number): void;\n /**\n * Scroll by the given offset.\n * @param offset offset from current position\n */\n scrollBy(offset: number): void;\n}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * Scroll modes that should be set in certain situations.\n *\n * - `reverse`: This mode will adjust some styles to be suitable for bottom-to-top scrolling.\n * - `rtl`: You have to set this mode if you use this component under `direction: rtl` style.\n */\n mode?: ScrollMode;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link VListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked whenever scroll offset changes.\n * @param offset Current scrollTop or scrollLeft.\n */\n onScroll?: (offset: number) => void;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n mode,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScroll = useLatestRef(onScrollProp);\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal, isRtl] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _isRtl = mode === \"rtl\";\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n mode === \"reverse\",\n !initialItemSize\n );\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal, _isRtl),\n _isHorizontal,\n _isRtl,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useSelector(\n store,\n store._getRange,\n SELECT_RANGE\n );\n const scrolling = useSelector(\n store,\n store._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const jumpCount = useSelector(\n store,\n store._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const scrollSize = useSelector(\n store,\n store._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n const cleanupOnScroll = store._subscribe(UPDATE_SCROLL_WITH_EVENT, () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n });\n return () => {\n unobserve();\n cleanup();\n cleanupOnScroll();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return scroller._getActualScrollSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex: scroller._scrollToIndex,\n scrollTo: scroller._scrollTo,\n scrollBy: scroller._scrollBy,\n };\n },\n []\n );\n\n const overscanedStartIndex = max(startIndex - overscan, 0);\n const overscanedEndIndex = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n res.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={isRtl}\n />\n );\n }\n return res;\n }, [elements, overscanedStartIndex, overscanedEndIndex]);\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: isHorizontal ? \"auto hidden\" : \"hidden auto\",\n display: isHorizontal ? \"inline-block\" : \"block\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_ITEM,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { max, min, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { emptyComponents, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n ViewportComponentAttributes,\n} from \"..\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { Viewport as DefaultViewport } from \"./Viewport\";\n\nconst genKey = (i: number, j: number) => `${i}-${j}`;\n\n/**\n * Props of customized cell component for {@link VGrid}.\n */\nexport interface CustomCellComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomCellComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomCellComponentProps> & React.RefAttributes<any>\n>;\n\ntype CustomCellComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomCellComponent;\n\ntype CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _vStore: VirtualStore;\n _hStore: VirtualStore;\n _rowIndex: number;\n _colIndex: number;\n _element: \"div\";\n _isRtl: boolean;\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _vStore: vStore,\n _hStore: hStore,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _element: Element,\n _isRtl: isRtl,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const top = useSelector(\n vStore,\n () => vStore._getItemOffset(rowIndex),\n SELECT_ITEM,\n true\n );\n const left = useSelector(\n hStore,\n () => hStore._getItemOffset(colIndex),\n SELECT_ITEM,\n true\n );\n const vHide = useSelector(\n vStore,\n () => vStore._isUnmeasuredItem(rowIndex),\n SELECT_ITEM,\n true\n );\n const hHide = useSelector(\n hStore,\n () => hStore._isUnmeasuredItem(colIndex),\n SELECT_ITEM,\n true\n );\n const height = useSelector(\n vStore,\n () => vStore._getItemSize(rowIndex),\n SELECT_ITEM,\n true\n );\n const width = useSelector(\n hStore,\n () => hStore._getItemSize(colIndex),\n SELECT_ITEM,\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, rowIndex, colIndex),\n [colIndex, rowIndex]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n display: \"grid\",\n margin: 0,\n padding: 0,\n position: \"absolute\",\n top: top,\n [isRtl ? \"right\" : \"left\"]: left,\n visibility: vHide || hHide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, vHide, hHide])}\n >\n {children}\n </Element>\n );\n }\n);\n\n/**\n * Methods of {@link VGrid}.\n */\nexport interface VGridHandle {\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: [x: number, y: number];\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: [width: number, height: number];\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: [width: number, height: number];\n /**\n * Scroll to the item specified by index.\n * @param indexX horizontal index of item\n * @param indexY vertical index of item\n */\n scrollToIndex(indexX: number, indexY: number): void;\n /**\n * Scroll to the given offset.\n * @param offsetX offset from left\n * @param offsetY offset from top\n */\n scrollTo(offsetX: number, offsetY: number): void;\n /**\n * Scroll by the given offset.\n * @param offsetX horizontal offset from current position\n * @param offsetY vertical offset from current position\n */\n scrollBy(offsetX: number, offsetY: number): void;\n}\n\n/**\n * Props of {@link VGrid}.\n */\nexport interface VGridProps extends ViewportComponentAttributes {\n /**\n * A function to create elements rendered by this component.\n */\n children: (arg: {\n /**\n * row index of cell\n */\n rowIndex: number;\n /**\n * column index of cell\n */\n colIndex: number;\n }) => ReactNode;\n /**\n * Total row length of grid.\n */\n row: number;\n /**\n * Total column length of grid.\n */\n col: number;\n /**\n * Cell height hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 40\n */\n cellHeight?: number;\n /**\n * Cell width hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 100\n */\n cellWidth?: number;\n /**\n * Number of items to render above/below the visible bounds of the grid. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 2\n */\n overscan?: number;\n /**\n * If set, the specified amount of rows will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialRowCount?: number;\n /**\n * If set, the specified amount of cols will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialColCount?: number;\n /**\n * You have to set true if you use this component under `direction: rtl` style.\n */\n rtl?: boolean;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for cell element. This component will get {@link CustomCellComponentProps} as props.\n * @defaultValue \"div\"\n */\n Cell?: CustomCellComponentOrElement;\n };\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n rtl: rtlProp,\n components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Cell?: undefined;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller, isRtl] = useStatic(\n () => {\n const _isRtl = !!rtlProp;\n const _vs = createVirtualStore(rowCount, cellHeight, initialRowCount);\n const _hs = createVirtualStore(colCount, cellWidth, initialColCount);\n return [\n _vs,\n _hs,\n createGridResizer(_vs, _hs),\n createScroller(_vs, false, _isRtl),\n createScroller(_hs, true, _isRtl),\n _isRtl,\n ];\n }\n );\n // The elements length and cached items length are different just after element is added/removed.\n vStore._updateCacheLength(rowCount);\n hStore._updateCacheLength(colCount);\n\n const [startRowIndex, endRowIndex] = useSelector(\n vStore,\n vStore._getRange,\n SELECT_RANGE\n );\n const [startColIndex, endColIndex] = useSelector(\n hStore,\n hStore._getRange,\n SELECT_RANGE\n );\n const verticalScrolling = useSelector(\n vStore,\n vStore._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const horizontalScrolling = useSelector(\n hStore,\n hStore._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const vJumpCount = useSelector(\n vStore,\n vStore._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const hJumpCount = useSelector(\n hStore,\n hStore._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const height = useSelector(\n vStore,\n vStore._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const width = useSelector(\n hStore,\n hStore._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const vCleanup = vScroller._initRoot(root);\n const hCleanup = hScroller._initRoot(root);\n return () => {\n unobserve();\n vCleanup();\n hCleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [\n hScroller._getActualScrollSize(),\n vScroller._getActualScrollSize(),\n ];\n },\n get viewportSize(): [number, number] {\n return [hStore._getViewportSize(), vStore._getViewportSize()];\n },\n scrollToIndex(indexX, indexY) {\n hScroller._scrollToIndex(indexX);\n vScroller._scrollToIndex(indexY);\n },\n scrollTo(offsetX, offsetY) {\n hScroller._scrollTo(offsetX);\n vScroller._scrollTo(offsetY);\n },\n scrollBy(offsetX, offsetY) {\n hScroller._scrollBy(offsetX);\n vScroller._scrollBy(offsetY);\n },\n };\n },\n []\n );\n\n const render = useMemo(() => {\n const cache = new Map<string, ReactNode>();\n return (rowIndex: number, colIndex: number) => {\n let e: ReactNode | undefined = cache.get(genKey(rowIndex, colIndex));\n if (!e) {\n cache.set(\n genKey(rowIndex, colIndex),\n (e = children({ rowIndex, colIndex }))\n );\n }\n return e;\n };\n }, [children]);\n\n const overscanedStartRowIndex = max(startRowIndex - overscan, 0);\n const overscanedEndRowIndex = min(endRowIndex + overscan, rowCount - 1);\n const overscanedStartColIndex = max(startColIndex - overscan, 0);\n const overscanedEndColIndex = min(endColIndex + overscan, colCount - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartRowIndex; i <= overscanedEndRowIndex; i++) {\n for (let j = overscanedStartColIndex; j <= overscanedEndColIndex; j++) {\n res.push(\n <Cell\n key={genKey(i, j)}\n _resizer={resizer}\n _vStore={vStore}\n _hStore={hStore}\n _rowIndex={i}\n _colIndex={j}\n _element={ItemElement as \"div\"}\n _children={render(i, j)}\n _isRtl={isRtl}\n />\n );\n }\n }\n\n return res;\n }, [\n render,\n overscanedStartRowIndex,\n overscanedEndRowIndex,\n overscanedStartColIndex,\n overscanedEndColIndex,\n ]);\n\n return (\n <Viewport\n ref={rootRef}\n width={width}\n height={height}\n scrolling={verticalScrolling || horizontalScrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n useRef,\n useMemo,\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport { createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport {\n SELECT_IS_SCROLLING,\n SELECT_JUMP_COUNT,\n SELECT_RANGE,\n SELECT_SCROLL_SIZE,\n useSelector,\n} from \"./useSelector\";\nimport { exists, max, min, values } from \"../core/utils\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport { MayHaveKey, emptyComponents, flattenChildren, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot, ViewportComponentAttributes } from \"..\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { Cache } from \"../core/cache\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link WVList}.\n */\nexport interface WVListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WVList}.\n */\nexport interface WVListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link WVListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component controlled by the window scrolling. See {@link WVListProps} and {@link WVListHandle}.\n */\nexport const WVList = forwardRef<WVListHandle, WVListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n false,\n !initialItemSize\n );\n\n return [\n _store,\n createWindowResizer(_store, _isHorizontal),\n createWindowScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useSelector(\n store,\n store._getRange,\n SELECT_RANGE\n );\n const scrolling = useSelector(\n store,\n store._getIsScrolling,\n SELECT_IS_SCROLLING\n );\n const jumpCount = useSelector(\n store,\n store._getJumpCount,\n SELECT_JUMP_COUNT\n );\n const scrollSize = useSelector(\n store,\n store._getCorrectedScrollSize,\n SELECT_SCROLL_SIZE,\n true\n );\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n return () => {\n unobserve();\n cleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n };\n },\n []\n );\n\n const overscanedStartIndex = max(startIndex - overscan, 0);\n const overscanedEndIndex = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n res.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={false}\n />\n );\n }\n return res;\n }, [elements, overscanedStartIndex, overscanedEndIndex]);\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"visible\",\n display: isHorizontal ? \"inline-block\" : \"block\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: isHorizontal ? \"auto\" : \"100%\",\n height: isHorizontal ? \"100%\" : \"auto\",\n padding: 0,\n margin: 0,\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n"],"names":["min","Math","max","abs","now","Date","values","Object","timeout","setTimeout","clamp","value","minValue","maxValue","exists","v","debounce","fn","ms","id","cancel","clearTimeout","debouncedFn","_cancel","once","called","cache","args","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","_length","_measuredOffsetIndex","_offsets","i","top","findIndex","distance","sum","h","findStartIndexWithOffset","offset","initialIndex","appendCache","length","push","calculateJump","items","reduce","acc","createVirtualStore","elementsCount","itemSize","initialItemCount","initCache","isReverse","shouldAutoEstimateItemSize","viewportSize","scrollOffset","jumpCount","jump","_scrollDirection","_isManualScrolling","_resized","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","getScrollOffsetMax","updateScrollDirection","dir","prev","_getCache","JSON","parse","stringify","_getRange","prevStartIndex","prevEndIndex","start","end","findEndIndex","_isUnmeasuredItem","_hasUnmeasuredItemsInTargetViewport","startIndex","hasUnmeasuredItemsInRange","endIndex","slice","includes","_getItemOffset","computeStartOffset","_getItemSize","_getItemLength","_getScrollOffset","_getScrollOffsetMax","_getIsScrolling","_getViewportSize","_getCorrectedScrollSize","_getJumpCount","_flushJump","prevJump","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldSync","mutated","updated","filter","diff","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","isJustResized","_updateCacheLength","updateCache","pop","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","refKey","emptyComponents","children","elements","Array","isArray","c","flattenChildren","useLatestRef","ref","useRef","useSelector","store","getSnapShot","shouldGetLatest","state","setState","useState","getter","update","sync","flushSync","snap","hasNegativeOffsetInRtl","scrollable","key","isNegative","createOnWheel","isHorizontal","onScrollStopped","throttle","time","n","e","ctrlKey","deltaX","deltaY","createScroller","isRtl","rootElement","scrollToQueue","scrollToKey","getActualScrollSize","scrollWidth","scrollHeight","normalizeOffset","scrollManually","async","getTargetOffset","getOffset","targetOffset","unsubscribe","Promise","resolve","reject","resolved","resolveQueue","undefined","_initRoot","root","syncViewportToScrollPosition","onScroll","onWheel","addEventListener","passive","removeEventListener","_getActualScrollSize","_scrollTo","_scrollBy","_scrollToIndex","align","_fixScrollJump","createWindowScroller","offsetKey","visible","getOffsetToWindow","node","nodeOffset","parent","offsetParent","document","body","io","IntersectionObserver","entry","isIntersecting","observe","disconnect","scrollBy","useStatic","init","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","contentRect","get","_observeRoot","ro","_observeItem","el","set","unobserve","createWindowResizer","windowSizeKey","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","Viewport","forwardRef","attrs","width","height","scrolling","_jsx","jsx","style","useMemo","position","visibility","pointerEvents","ListItem","memo","_children","_resizer","resizer","_store","_index","_element","Element","_isHorizontal","_isRtl","hide","leftOrRightKey","margin","padding","display","VList","overscan","initialItemSize","horizontal","horizontalProp","mode","components","Root","DefaultViewport","Item","ItemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","viewportAttrs","count","scroller","UPDATE_SCROLL","scrollSize","rootRef","cleanup","cleanupOnScroll","useImperativeHandle","scrollToIndex","scrollTo","overscanedStartIndex","overscanedEndIndex","res","overflow","contain","genKey","j","Cell","_vStore","_hStore","_rowIndex","_colIndex","left","vHide","hHide","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","rtl","rtlProp","vScroller","hScroller","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","verticalScrolling","horizontalScrolling","vJumpCount","hJumpCount","vCleanup","hCleanup","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex","WVList"],"mappings":"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"}
|