virtua 0.23.3 → 0.24.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/lib/index.js.map +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/solid/VList.d.ts +3 -84
- package/lib/solid/Virtualizer.d.ts +100 -0
- package/lib/solid/WindowVirtualizer.d.ts +57 -0
- package/lib/solid/index.d.ts +4 -0
- package/lib/solid/index.js +1 -1
- package/lib/solid/index.js.map +1 -1
- package/lib/solid/index.mjs +1 -1
- package/lib/solid/index.mjs.map +1 -1
- package/lib/solid/utils.d.ts +1 -0
- package/lib/vue/index.js.map +1 -1
- package/lib/vue/index.mjs.map +1 -1
- package/package.json +1 -1
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/environment.ts","../src/src/core/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/core/scroller.ts","../src/src/react/utils.ts","../src/src/react/useStatic.ts","../src/src/react/useLatestRef.ts","../src/src/core/resizer.ts","../src/src/react/ListItem.tsx","../src/src/react/useRerender.ts","../src/src/react/useChildren.ts","../src/src/react/Virtualizer.tsx","../src/src/react/VList.tsx","../src/src/react/WindowVirtualizer.tsx","../src/src/react/VGrid.tsx"],"sourcesContent":["/** @internal */\nexport const min = Math.min;\n/** @internal */\nexport const max = Math.max;\n/** @internal */\nexport const abs = Math.abs;\n/** @internal */\nexport const values = Object.values;\n/** @internal */\nexport const isArray = Array.isArray;\n/** @internal */\nexport const timeout = setTimeout;\n\n/**\n * @internal\n */\nexport const clamp = (\n value: number,\n minValue: number,\n maxValue: number\n): number => min(maxValue, max(minValue, value));\n\n/**\n * @internal\n */\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\n/**\n * @internal\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 microtask: (fn: () => void) => void =\n typeof queueMicrotask === \"function\"\n ? queueMicrotask\n : (fn) => {\n Promise.resolve().then(fn);\n };\n\n/**\n * @internal\n */\nexport const debounce = <T extends () => void>(fn: T, ms: number) => {\n let id: ReturnType<typeof setTimeout> | 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\n/**\n * @internal\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\n/**\n * @internal\n */\nexport const getStyleNumber = (v: string): number => {\n if (v) {\n return parseFloat(v);\n } else {\n return 0;\n }\n};\n","import { clamp, median, min } from \"./utils\";\n\ntype Writeable<T> = {\n -readonly [key in keyof T]: Writeable<T[key]>;\n};\n\n/** @internal */\nexport const UNCACHED = -1;\n\n/**\n * @internal\n */\nexport type Cache = {\n readonly _length: number;\n // sizes\n readonly _sizes: number[];\n readonly _defaultItemSize: number;\n // offsets\n readonly _computedOffsetIndex: number;\n readonly _offsets: number[];\n};\n\nconst fill = (array: number[], length: number, prepend?: boolean): number[] => {\n const key = prepend ? \"unshift\" : \"push\";\n for (let i = 0; i < length; i++) {\n array[key](UNCACHED);\n }\n return array;\n};\n\n/**\n * @internal\n */\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\n/**\n * @internal\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._computedOffsetIndex = min(index, cache._computedOffsetIndex);\n return isInitialMeasurement;\n};\n\n/**\n * @internal\n */\nexport const computeOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n if (!cache._length) return 0;\n if (cache._computedOffsetIndex >= index) {\n return cache._offsets[index]!;\n }\n\n if (cache._computedOffsetIndex < 0) {\n // first offset must be 0 to avoid returning NaN, which can cause infinite rerender.\n // https://github.com/inokawa/virtua/pull/160\n cache._offsets[0] = 0;\n cache._computedOffsetIndex = 0;\n }\n let i = cache._computedOffsetIndex;\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._computedOffsetIndex = index;\n return top;\n};\n\n/**\n * @internal\n */\nexport const computeTotalSize = (cache: 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\n/**\n * @internal\n */\nexport const findIndex = (cache: Cache, offset: number, i: number): number => {\n let sum = computeOffset(cache, i);\n while (i >= 0 && i < cache._length) {\n if (sum <= offset) {\n const next = getItemSize(cache, i);\n if (sum + next > offset) {\n break;\n } else {\n sum += next;\n i++;\n }\n } else {\n sum -= getItemSize(cache, --i);\n }\n }\n return clamp(i, 0, cache._length - 1);\n};\n\n/**\n * @internal\n */\nexport const computeRange = (\n cache: Cache,\n scrollOffset: number,\n prevStartIndex: number,\n viewportSize: number\n): [number, number] => {\n const start = findIndex(\n cache,\n scrollOffset,\n // Clamp because prevStartIndex may exceed the limit when children decreased a lot after scrolling\n min(prevStartIndex, cache._length - 1)\n );\n return [start, findIndex(cache, scrollOffset + viewportSize, start)];\n};\n\n/**\n * @internal\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\n/**\n * @internal\n */\nexport const initCache = (length: number, itemSize: number): Cache => {\n return {\n _defaultItemSize: itemSize,\n _length: length,\n _computedOffsetIndex: -1,\n _sizes: fill([], length),\n _offsets: fill([], length),\n };\n};\n\n/**\n * @internal\n */\nexport const updateCacheLength = (\n cache: Writeable<Cache>,\n length: number,\n isShift?: boolean\n): [number, boolean] => {\n const diff = length - cache._length;\n\n const isAdd = diff > 0;\n let shift: number;\n if (isAdd) {\n // Added\n shift = cache._defaultItemSize * diff;\n fill(cache._sizes, diff, isShift);\n fill(cache._offsets, diff);\n } else {\n // Removed\n shift = (\n isShift ? cache._sizes.splice(0, -diff) : cache._sizes.splice(diff)\n ).reduce(\n (acc, removed) =>\n acc + (removed === UNCACHED ? cache._defaultItemSize : removed),\n 0\n );\n cache._offsets.splice(diff);\n }\n\n cache._computedOffsetIndex = isShift\n ? // Discard cache for now\n -1\n : min(length - 1, cache._computedOffsetIndex);\n cache._length = length;\n return [shift, isAdd];\n};\n","import { once } from \"./utils\";\n\n/**\n * @internal\n */\nexport const isBrowser = typeof window !== \"undefined\";\n\nconst getDocumentElement = () => document.documentElement;\n\n/**\n * @internal\n */\nexport const getCurrentDocument = (node: HTMLElement): Document =>\n node.ownerDocument;\n\n/**\n * @internal\n */\nexport const getCurrentWindow = (doc: Document) => doc.defaultView!;\n\n/**\n * @internal\n */\nexport const isRTLDocument = /*#__PURE__*/ once((): boolean => {\n // TODO support SSR in rtl\n return isBrowser\n ? getComputedStyle(getDocumentElement()).direction === \"rtl\"\n : false;\n});\n\n/**\n * Currently, all browsers on iOS/iPadOS are WebKit, including WebView.\n * @internal\n */\nexport const isIOSWebKit = /*#__PURE__*/ once((): boolean => {\n return /iP(hone|od|ad)/.test(navigator.userAgent);\n});\n\n/**\n * @internal\n */\nexport const isSmoothScrollSupported = /*#__PURE__*/ once((): boolean => {\n return \"scrollBehavior\" in getDocumentElement().style;\n});\n","import {\n initCache,\n getItemSize,\n computeTotalSize,\n computeOffset as computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n estimateDefaultItemSize,\n updateCacheLength,\n computeRange,\n} from \"./cache\";\nimport { isIOSWebKit } from \"./environment\";\nimport type { CacheSnapshot } from \"./types\";\nimport { abs, clamp, max, min } from \"./utils\";\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\n/** @internal */\nexport const SCROLL_IDLE = 0;\n/** @internal */\nexport const SCROLL_DOWN = 1;\n/** @internal */\nexport const SCROLL_UP = 2;\n/** @internal */\nexport type ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nconst SCROLL_BY_NATIVE = 0;\nconst SCROLL_BY_MANUAL_SCROLL = 1;\nconst SCROLL_BY_PREPENDING = 2;\ntype ScrollMode =\n | typeof SCROLL_BY_NATIVE\n | typeof SCROLL_BY_MANUAL_SCROLL\n | typeof SCROLL_BY_PREPENDING;\n\n/** @internal */\nexport const ACTION_ITEM_RESIZE = 1;\n/** @internal */\nexport const ACTION_VIEWPORT_RESIZE = 2;\n/** @internal */\nexport const ACTION_ITEMS_LENGTH_CHANGE = 3;\n/** @internal */\nexport const ACTION_SCROLL = 4;\n/** @internal */\nexport const ACTION_SCROLL_END = 5;\n/** @internal */\nexport const ACTION_MANUAL_SCROLL = 6;\n/** @internal */\nexport const ACTION_BEFORE_MANUAL_SMOOTH_SCROLL = 7;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_VIEWPORT_RESIZE, size: number]\n | [\n type: typeof ACTION_ITEMS_LENGTH_CHANGE,\n arg: [length: number, isShift?: boolean | undefined]\n ]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, dummy?: void]\n | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void]\n | [type: typeof ACTION_BEFORE_MANUAL_SMOOTH_SCROLL, offset: number];\n\n/** @internal */\nexport const UPDATE_SCROLL_STATE = 0b0001;\n/** @internal */\nexport const UPDATE_SIZE_STATE = 0b0010;\n/** @internal */\nexport const UPDATE_SCROLL_EVENT = 0b0100;\n/** @internal */\nexport const UPDATE_SCROLL_END_EVENT = 0b1000;\n\n/** @internal */\nexport type ItemResize = Readonly<[index: number, size: number]>;\n/** @internal */\nexport type ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\n/**\n * @internal\n */\nexport const getScrollSize = (store: VirtualStore): number => {\n return max(store._getTotalSize(), store._getViewportSize());\n};\n\n/**\n * @internal\n */\nexport const getMinContainerSize = (store: VirtualStore): number => {\n return max(\n store._getTotalSize(),\n store._getViewportSize() -\n store._getStartSpacerSize() -\n store._getEndSpacerSize()\n );\n};\n\n/**\n * @internal\n */\nexport const overscanStartIndex = (\n startIndex: number,\n overscan: number,\n scrollDirection: ScrollDirection\n): number => {\n return max(\n startIndex - (scrollDirection === SCROLL_DOWN ? 1 : max(1, overscan)),\n 0\n );\n};\n\n/**\n * @internal\n */\nexport const overscanEndIndex = (\n endIndex: number,\n overscan: number,\n scrollDirection: ScrollDirection,\n count: number\n): number => {\n return min(\n endIndex + (scrollDirection === SCROLL_UP ? 1 : max(1, overscan)),\n count - 1\n );\n};\n\nconst calculateJump = (\n cache: Cache,\n items: readonly ItemResize[],\n keepEnd?: boolean\n): number => {\n return items.reduce((acc, [index, size]) => {\n const diff = size - getItemSize(cache, index);\n if (!keepEnd || diff > 0) {\n acc += diff;\n }\n return acc;\n }, 0);\n};\n\ntype Subscriber = (sync?: boolean) => void;\n\ntype StateVersion = readonly [];\n\n/**\n * @internal\n */\nexport type VirtualStore = {\n _getStateVersion(): StateVersion;\n _getCacheSnapshot(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInFrozenRange(): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemsLength(): number;\n _getScrollOffset(): number;\n _getScrollDirection(): ScrollDirection;\n _getViewportSize(): number;\n _getStartSpacerSize(): number;\n _getEndSpacerSize(): number;\n _getTotalSize(): number;\n _getJumpCount(): number;\n _flushJump(): [number, boolean];\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n};\n\n/**\n * @internal\n */\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number = 40,\n ssrCount: number = 0,\n cacheSnapshot?: CacheSnapshot | undefined,\n shouldAutoEstimateItemSize?: boolean | undefined,\n startSpacerSize: number = 0,\n endSpacerSize: number = 0\n): VirtualStore => {\n let isSSR = !!ssrCount;\n let stateVersion: StateVersion = [];\n let viewportSize = 0;\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump = 0;\n let pendingJump = 0;\n let isJumpByPrepend = false;\n let _flushedJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _scrollMode: ScrollMode = SCROLL_BY_NATIVE;\n let _frozenRange: ItemsRange | null = isSSR\n ? [0, max(ssrCount - 1, 0)]\n : null;\n let _prevRange: ItemsRange = [0, 0];\n\n const cache =\n (cacheSnapshot as Cache | undefined) || initCache(elementsCount, itemSize);\n const subscribers = new Set<[number, Subscriber]>();\n const getTotalSize = (): number => computeTotalSize(cache);\n const getScrollableSize = (): number =>\n getTotalSize() + startSpacerSize + endSpacerSize;\n const getRelativeScrollOffset = (): number => scrollOffset - startSpacerSize;\n const getMaxScrollOffset = (): number =>\n // total size can become smaller than viewport size\n max(0, getScrollableSize() - viewportSize);\n\n const applyJump = (j: number) => {\n // In iOS WebKit browsers, updating scroll position will stop scrolling so it have to be deferred during scrolling.\n if (isIOSWebKit() && _scrollDirection !== SCROLL_IDLE) {\n pendingJump += j;\n } else {\n jump += j;\n jumpCount++;\n }\n };\n\n return {\n _getStateVersion() {\n return stateVersion;\n },\n _getCacheSnapshot() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n if (_frozenRange) {\n return [\n min(_prevRange[0], _frozenRange[0]),\n max(_prevRange[1], _frozenRange[1]),\n ];\n }\n // Return previous range for consistent render until next scroll event comes in.\n if (_flushedJump) {\n return _prevRange;\n }\n return (_prevRange = computeRange(\n cache,\n getRelativeScrollOffset() + pendingJump + jump,\n _prevRange[0],\n viewportSize\n ));\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInFrozenRange() {\n if (!_frozenRange) return false;\n return cache._sizes\n .slice(\n max(0, _frozenRange[0] - 1),\n min(cache._length - 1, _frozenRange[1] + 1) + 1\n )\n .includes(UNCACHED);\n },\n _getItemOffset(index) {\n return computeStartOffset(cache, index) - pendingJump;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemsLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollDirection() {\n return _scrollDirection;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getStartSpacerSize() {\n return startSpacerSize;\n },\n _getEndSpacerSize() {\n return endSpacerSize;\n },\n _getTotalSize: getTotalSize,\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const flushedJump = jump;\n const flushedIsJumpByPrepend = isJumpByPrepend;\n jump = 0;\n isJumpByPrepend = false;\n if (viewportSize > getScrollableSize()) {\n // In this case applying jump will not cause scroll.\n // Current logic expects scroll event occurs after applying jump so discard it.\n return [0, false];\n } else {\n return [(_flushedJump = flushedJump), flushedIsJumpByPrepend];\n }\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 shouldFlushPendingJump: boolean | undefined;\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\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n // Calculate jump\n // Should maintain visible position to minimize junks in appearance\n let diff = 0;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (scrollOffset > getMaxScrollOffset() - SUBPIXEL_THRESHOLD) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated, true);\n } else {\n if (_scrollMode === SCROLL_BY_PREPENDING) {\n // Keep distance from end immediately after prepending\n // We can assume jumps occurred on the upper outside\n diff = calculateJump(cache, updated);\n } else {\n // Keep start at mid\n const [startIndex] = _prevRange;\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\n );\n }\n }\n\n if (diff) {\n applyJump(diff);\n }\n\n // Update item sizes\n let isNewItemMeasured = false;\n updated.forEach(([index, size]) => {\n if (setItemSize(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);\n }\n mutated = UPDATE_SIZE_STATE;\n\n // Synchronous update is necessary in current design to minimize visible glitch in concurrent rendering.\n // However in React, synchronous update with flushSync after asynchronous update will overtake the asynchronous one.\n // If items resize happens just after scroll, race condition can occur depending on implementation.\n shouldSync = true;\n break;\n }\n case ACTION_VIEWPORT_RESIZE: {\n if (viewportSize !== payload) {\n viewportSize = payload;\n mutated = UPDATE_SIZE_STATE;\n }\n break;\n }\n case ACTION_ITEMS_LENGTH_CHANGE: {\n if (payload[1]) {\n // Calc distance before updating cache\n const distanceToEnd = getMaxScrollOffset() - scrollOffset;\n\n const [shift, isAdd] = updateCacheLength(cache, payload[0], true);\n applyJump(isAdd ? shift : -min(shift, distanceToEnd));\n\n if (isAdd) {\n _scrollMode = SCROLL_BY_PREPENDING;\n isJumpByPrepend = true;\n }\n mutated = UPDATE_SCROLL_STATE;\n } else {\n updateCacheLength(cache, payload[0]);\n }\n break;\n }\n case ACTION_SCROLL: {\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n const nextScrollOffset = clamp(payload, 0, getMaxScrollOffset());\n const flushedJump = _flushedJump;\n _flushedJump = 0;\n // Skip if offset is not changed\n if (nextScrollOffset === scrollOffset) {\n break;\n }\n\n const delta = nextScrollOffset - scrollOffset;\n const distance = abs(delta);\n\n // Scroll event after jump compensation is not reliable because it may result in the opposite direction.\n // The delta of artificial scroll may not be equal with the jump because it may be batched with other scrolls.\n // And at least in latest Chrome/Firefox/Safari in 2023, setting value to scrollTop/scrollLeft can lose subpixel because its integer (sometimes float probably depending on dpr).\n const isJustJumped = flushedJump && distance < abs(flushedJump) + 1;\n\n // Scroll events are dispatched enough so it's ok to skip some of them.\n if (\n !isJustJumped &&\n // Ignore until manual scrolling\n _scrollMode === SCROLL_BY_NATIVE\n ) {\n _scrollDirection = delta < 0 ? SCROLL_UP : SCROLL_DOWN;\n }\n\n // TODO This will cause glitch in reverse infinite scrolling. Disable this until better solution is found.\n // if (\n // pendingJump &&\n // ((_scrollDirection === SCROLL_UP &&\n // payload - max(pendingJump, 0) <= 0) ||\n // (_scrollDirection === SCROLL_DOWN &&\n // payload - min(pendingJump, 0) >= getScrollOffsetMax()))\n // ) {\n // // Flush if almost reached to start or end\n // shouldFlushPendingJump = true;\n // }\n\n if (isSSR) {\n _frozenRange = null;\n isSSR = false;\n }\n\n // Update synchronously if scrolled a lot\n shouldSync = distance > viewportSize;\n\n scrollOffset = nextScrollOffset;\n mutated = UPDATE_SCROLL_STATE + UPDATE_SCROLL_EVENT;\n break;\n }\n case ACTION_SCROLL_END: {\n mutated = UPDATE_SCROLL_END_EVENT;\n if (_scrollDirection !== SCROLL_IDLE) {\n shouldFlushPendingJump = true;\n mutated += UPDATE_SCROLL_STATE;\n }\n _scrollDirection = SCROLL_IDLE;\n _scrollMode = SCROLL_BY_NATIVE;\n _frozenRange = null;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _scrollMode = SCROLL_BY_MANUAL_SCROLL;\n break;\n }\n case ACTION_BEFORE_MANUAL_SMOOTH_SCROLL: {\n _frozenRange = computeRange(\n cache,\n payload,\n _prevRange[0],\n viewportSize\n );\n mutated = UPDATE_SCROLL_STATE;\n break;\n }\n }\n\n if (mutated) {\n stateVersion = [];\n\n if (shouldFlushPendingJump && pendingJump) {\n jump += pendingJump;\n pendingJump = 0;\n jumpCount++;\n }\n\n subscribers.forEach(([target, cb]) => {\n // Early return to skip React's computation\n if (!(mutated & target)) {\n return;\n }\n // https://github.com/facebook/react/issues/25191\n // https://github.com/facebook/react/blob/a5fc797db14c6e05d4d5c4dbb22a0dd70d41f5d5/packages/react-reconciler/src/ReactFiberWorkLoop.js#L1443-L1447\n cb(shouldSync);\n });\n }\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"../core/environment\";\n\n/**\n * https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * @internal\n */\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","import {\n getCurrentDocument,\n getCurrentWindow,\n isIOSWebKit,\n isRTLDocument,\n isSmoothScrollSupported,\n} from \"./environment\";\nimport {\n ACTION_SCROLL,\n VirtualStore,\n ACTION_SCROLL_END,\n UPDATE_SIZE_STATE,\n ACTION_MANUAL_SCROLL,\n SCROLL_IDLE,\n ACTION_BEFORE_MANUAL_SMOOTH_SCROLL,\n} from \"./store\";\nimport { ScrollToIndexOpts } from \"./types\";\nimport { debounce, timeout, clamp, microtask } from \"./utils\";\n\n/**\n * scrollLeft is negative value in rtl direction.\n *\n * left right\n * 0 100 spec compliant (ltr)\n * -100 0 spec compliant (rtl)\n * https://github.com/othree/jquery.rtl-scroll-type\n */\nconst normalizeOffset = (offset: number, isHorizontal: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return -offset;\n } else {\n return offset;\n }\n};\n\nconst createScrollObserver = (\n store: VirtualStore,\n viewport: HTMLElement | Window,\n isHorizontal: boolean,\n getScrollOffset: () => number,\n updateScrollOffset: (value: number, isMomentumScrolling: boolean) => void\n) => {\n const now = Date.now;\n\n let lastScrollTime = 0;\n let wheeling = false;\n let touching = false;\n let justTouchEnded = false;\n let stillMomentumScrolling = false;\n\n const onScrollEnd = debounce(() => {\n if (wheeling || touching) {\n wheeling = false;\n\n // Wait while wheeling or touching\n onScrollEnd();\n return;\n }\n\n justTouchEnded = false;\n\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n lastScrollTime = now();\n\n if (justTouchEnded) {\n stillMomentumScrolling = true;\n }\n\n store._update(ACTION_SCROLL, getScrollOffset());\n onScrollEnd();\n };\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\n const onWheel = ((e: WheelEvent) => {\n if (\n wheeling ||\n // Scroll start should be detected with scroll event\n store._getScrollDirection() === SCROLL_IDLE ||\n // Probably a pinch-to-zoom gesture\n e.ctrlKey\n ) {\n return;\n }\n\n const timeDelta = now() - lastScrollTime;\n if (\n // Check if wheel event occurs some time after scrolling\n 150 > timeDelta &&\n 50 < timeDelta &&\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 (isHorizontal ? e.deltaX : e.deltaY)\n ) {\n wheeling = true;\n }\n }) as (e: Event) => void; // FIXME type error. why only here?\n\n const onTouchStart = () => {\n touching = true;\n justTouchEnded = stillMomentumScrolling = false;\n };\n const onTouchEnd = () => {\n touching = false;\n if (isIOSWebKit()) {\n justTouchEnded = true;\n }\n };\n\n viewport.addEventListener(\"scroll\", onScroll);\n viewport.addEventListener(\"wheel\", onWheel, { passive: true });\n viewport.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n viewport.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\n return {\n _dispose: () => {\n viewport.removeEventListener(\"scroll\", onScroll);\n viewport.removeEventListener(\"wheel\", onWheel);\n viewport.removeEventListener(\"touchstart\", onTouchStart);\n viewport.removeEventListener(\"touchend\", onTouchEnd);\n onScrollEnd._cancel();\n },\n _fixScrollJump: () => {\n const [jump, prepend] = store._flushJump();\n if (!jump) return;\n updateScrollOffset(jump, stillMomentumScrolling);\n stillMomentumScrolling = false;\n return prepend;\n },\n };\n};\n\ntype ScrollObserver = ReturnType<typeof createScrollObserver>;\n\n/**\n * @internal\n */\nexport type Scroller = {\n _observe: (viewportElement: HTMLElement) => void;\n _dispose(): void;\n _scrollTo: (offset: number) => void;\n _scrollBy: (offset: number) => void;\n _scrollToIndex: (index: number, opts?: ScrollToIndexOpts) => void;\n _fixScrollJump: () => void;\n};\n\n/**\n * @internal\n */\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): Scroller => {\n let viewportElement: HTMLElement | undefined;\n let scrollObserver: ScrollObserver | undefined;\n let cancelScroll: (() => void) | undefined;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n const overflowKey = isHorizontal ? \"overflowX\" : \"overflowY\";\n\n // The given offset will be clamped by browser\n // https://drafts.csswg.org/cssom-view/#dom-element-scrolltop\n const scheduleImperativeScroll = async (\n getTargetOffset: () => number,\n smooth?: boolean\n ) => {\n if (!viewportElement) {\n // Wait for element assign. The element may be undefined if scrollRef prop is used and scroll is scheduled on mount.\n microtask(() => scheduleImperativeScroll(getTargetOffset, smooth));\n return;\n }\n\n if (cancelScroll) {\n // Cancel waiting scrollTo\n cancelScroll();\n }\n\n const waitForMeasurement = (): [Promise<void>, () => void] => {\n // Wait for the scroll destination items to be measured.\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 let queue: (() => void) | undefined;\n return [\n new Promise<void>((resolve, reject) => {\n queue = resolve;\n // Reject when items around scroll destination completely measured\n timeout((cancelScroll = reject), 150);\n }),\n store._subscribe(UPDATE_SIZE_STATE, () => {\n queue && queue();\n }),\n ];\n };\n\n if (smooth && isSmoothScrollSupported()) {\n while (true) {\n store._update(ACTION_BEFORE_MANUAL_SMOOTH_SCROLL, getTargetOffset());\n\n if (!store._hasUnmeasuredItemsInFrozenRange()) {\n break;\n }\n\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n await promise;\n } catch (e) {\n // canceled\n return;\n } finally {\n unsubscribe();\n }\n }\n\n viewportElement.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: normalizeOffset(\n getTargetOffset(),\n isHorizontal\n ),\n behavior: \"smooth\",\n });\n } else {\n while (true) {\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n viewportElement[scrollToKey] = normalizeOffset(\n getTargetOffset(),\n isHorizontal\n );\n store._update(ACTION_MANUAL_SCROLL);\n\n await promise;\n } catch (e) {\n // canceled or finished\n return;\n } finally {\n unsubscribe();\n }\n }\n }\n };\n\n return {\n _observe(viewport) {\n viewportElement = viewport;\n\n scrollObserver = createScrollObserver(\n store,\n viewport,\n isHorizontal,\n () => normalizeOffset(viewport[scrollToKey], isHorizontal),\n (jump, isMomentumScrolling) => {\n // If we update scroll position while touching on iOS, the position will be reverted.\n // However iOS WebKit fires touch events only once at the beginning of momentum scrolling.\n // That means we have no reliable way to confirm still touched or not if user touches more than once during momentum scrolling...\n // This is a hack for the suspectable situations, inspired by https://github.com/prud/ios-overflow-scroll-to-top\n if (isMomentumScrolling) {\n const style = viewport.style;\n const prev = style[overflowKey];\n style[overflowKey] = \"hidden\";\n timeout(() => {\n style[overflowKey] = prev;\n });\n }\n\n viewport[scrollToKey] += normalizeOffset(jump, isHorizontal);\n }\n );\n },\n _dispose() {\n scrollObserver && scrollObserver._dispose();\n },\n _scrollTo(offset) {\n scheduleImperativeScroll(() => offset);\n },\n _scrollBy(offset) {\n offset += store._getScrollOffset();\n scheduleImperativeScroll(() => offset);\n },\n _scrollToIndex(index, { align, smooth } = {}) {\n index = clamp(index, 0, store._getItemsLength() - 1);\n\n if (align === \"nearest\") {\n const itemOffset = store._getItemOffset(index);\n const scrollOffset = store._getScrollOffset();\n\n if (itemOffset < scrollOffset) {\n align = \"start\";\n } else if (\n itemOffset + store._getItemSize(index) >\n scrollOffset + store._getViewportSize()\n ) {\n align = \"end\";\n } else {\n // already completely visible\n return;\n }\n }\n\n scheduleImperativeScroll(() => {\n return (\n store._getStartSpacerSize() +\n (align === \"end\"\n ? store._getItemOffset(index) +\n store._getItemSize(index) -\n store._getViewportSize()\n : align === \"center\"\n ? store._getItemOffset(index) +\n (store._getItemSize(index) - store._getViewportSize()) / 2\n : store._getItemOffset(index))\n );\n }, smooth);\n },\n _fixScrollJump: () => {\n if (scrollObserver) {\n if (scrollObserver._fixScrollJump()) {\n // https://github.com/inokawa/virtua/issues/357\n cancelScroll && cancelScroll();\n }\n }\n },\n };\n};\n\n/**\n * @internal\n */\nexport type WindowScroller = {\n _observe(containerElement: HTMLElement): void;\n _dispose(): void;\n _fixScrollJump: () => void;\n};\n\n/**\n * @internal\n */\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n let scrollObserver: ScrollObserver | undefined;\n\n return {\n _observe(container) {\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n\n const document = getCurrentDocument(container);\n const window = getCurrentWindow(document);\n const documentBody = document.body;\n\n const calcOffsetToViewport = (\n node: HTMLElement,\n viewport: HTMLElement,\n isHorizontal: boolean,\n offset: number = 0\n ): number => {\n // TODO calc offset only when it changes (maybe impossible)\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n const offsetSum =\n offset +\n (isHorizontal && isRTLDocument()\n ? window.innerWidth - node[offsetKey] - node.offsetWidth\n : node[offsetKey]);\n\n const parent = node.offsetParent;\n if (node === viewport || !parent) {\n return offsetSum;\n }\n\n return calcOffsetToViewport(\n parent as HTMLElement,\n viewport,\n isHorizontal,\n offsetSum\n );\n };\n\n scrollObserver = createScrollObserver(\n store,\n window,\n isHorizontal,\n () =>\n normalizeOffset(window[scrollToKey], isHorizontal) -\n calcOffsetToViewport(container, documentBody, isHorizontal),\n (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(\n isHorizontal ? normalizeOffset(jump, isHorizontal) : 0,\n isHorizontal ? 0 : jump\n );\n }\n );\n },\n _dispose() {\n scrollObserver && scrollObserver._dispose();\n },\n _fixScrollJump: () => {\n scrollObserver && scrollObserver._fixScrollJump();\n },\n };\n};\n","import { ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists, isArray } from \"../core/utils\";\n\n/**\n * @internal\n */\nexport const refKey = \"current\";\n\n/**\n * @internal\n */\nexport type ItemElement = ReactElement | ReactFragment | string | number;\n\nconst forEach = (children: ReactNode, elements: ItemElement[]) => {\n if (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/**\n * Replace 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\n *\n * @internal\n */\nexport const flattenChildren = (children: ReactNode): ItemElement[] => {\n const elements: ItemElement[] = [];\n forEach(children, elements);\n return elements;\n};\n\ntype MayHaveKey = { key?: React.Key };\n\n/**\n * @internal\n */\nexport const getKey = (e: ItemElement, i: number): React.Key => {\n const key = (e as MayHaveKey).key;\n return exists(key) ? key : \"_\" + i;\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\n/**\n * @internal\n */\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\n/**\n * @internal\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 { getCurrentDocument, getCurrentWindow } from \"./environment\";\nimport {\n ACTION_ITEM_RESIZE,\n ACTION_VIEWPORT_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max } from \"./utils\";\n\nconst createResizeObserver = (cb: ResizeObserverCallback) => {\n let ro: ResizeObserver | undefined;\n\n return {\n _observe(e: HTMLElement) {\n // Initialize ResizeObserver lazily for SSR\n // https://www.w3.org/TR/resize-observer/#intro\n (\n ro ||\n (ro = new (getCurrentWindow(getCurrentDocument(e)).ResizeObserver)(cb))\n ).observe(e);\n },\n _unobserve(e: HTMLElement) {\n ro!.unobserve(e);\n },\n _dispose() {\n ro && ro.disconnect();\n },\n };\n};\n\n/**\n * @internal\n */\nexport type ItemResizeObserver = (el: HTMLElement, i: number) => () => void;\n\ninterface ListResizer {\n _observeRoot(viewportElement: HTMLElement): void;\n _observeItem: ItemResizeObserver;\n _dispose(): void;\n}\n\n/**\n * @internal\n */\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let viewportElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n const resizeObserver = createResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === viewportElement) {\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 return {\n _observeRoot(viewport: HTMLElement) {\n resizeObserver._observe((viewportElement = viewport));\n },\n _observeItem: (el: HTMLElement, i: number) => {\n mountedIndexes.set(el, i);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose: resizeObserver._dispose,\n };\n};\n\ninterface WindowListResizer {\n _observeRoot(container: HTMLElement): void;\n _observeItem: ItemResizeObserver;\n _dispose(): void;\n}\n\n/**\n * @internal\n */\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n const resizeObserver = createResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\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 let cleanupOnWindowResize: (() => void) | undefined;\n\n return {\n _observeRoot(container) {\n const window = getCurrentWindow(getCurrentDocument(container));\n const onWindowResize = () => {\n store._update(ACTION_VIEWPORT_RESIZE, window[windowSizeKey]);\n };\n window.addEventListener(\"resize\", onWindowResize);\n onWindowResize();\n\n cleanupOnWindowResize = () => {\n window.removeEventListener(\"resize\", onWindowResize);\n };\n },\n _observeItem: (el: HTMLElement, i: number) => {\n mountedIndexes.set(el, i);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose() {\n cleanupOnWindowResize && cleanupOnWindowResize();\n resizeObserver._dispose();\n },\n };\n};\n\n/**\n * @internal\n */\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let viewportElement: 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 const resizeObserver = createResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === viewportElement) {\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 return {\n _observeRoot(viewport: HTMLElement) {\n resizeObserver._observe((viewportElement = viewport));\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose: resizeObserver._dispose,\n };\n};\n\n/**\n * @internal\n */\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { ItemResizeObserver } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { CustomItemComponent } from \"./types\";\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ItemResizeObserver;\n _index: number;\n _offset: number;\n _hide: boolean;\n _element: \"div\" | CustomItemComponent;\n _isHorizontal: boolean;\n _isSSR: boolean | undefined;\n};\n\n/**\n * @internal\n */\nexport const ListItem = memo(\n ({\n _children: children,\n _resizer: resizer,\n _index: index,\n _offset: offset,\n _hide: hide,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isSSR: isSSR,\n }: ListItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(() => resizer(ref[refKey]!, index), [index]);\n\n const style = useMemo((): CSSProperties => {\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: hide && isSSR ? undefined : \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : \"left\"]: 0,\n [isHorizontal ? (isRTLDocument() ? \"right\" : \"left\") : \"top\"]: offset,\n visibility: !hide || isSSR ? \"visible\" : \"hidden\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide, isSSR]);\n\n if (typeof Element === \"string\") {\n return (\n <Element ref={ref} style={style}>\n {children}\n </Element>\n );\n } else {\n return (\n <Element ref={ref} style={style} index={index}>\n {children}\n </Element>\n );\n }\n }\n);\n","import { useReducer } from \"react\";\nimport { VirtualStore } from \"../core/store\";\n\n/**\n * @internal\n */\nexport const useRerender = (store: VirtualStore): (() => void) => {\n return useReducer(\n store._getStateVersion,\n undefined,\n store._getStateVersion\n )[1];\n};\n","import { ReactElement, ReactNode, useMemo } from \"react\";\nimport { ItemElement, flattenChildren } from \"./utils\";\n\n/**\n * @internal\n */\nexport const useChildren = (\n children: ReactNode | ((i: number) => ReactElement),\n count: number | undefined\n) => {\n return useMemo((): [(i: number) => ItemElement, number] => {\n if (typeof children === \"function\") {\n return [children, count || 0];\n }\n // Memoize element array\n const _elements = flattenChildren(children);\n return [(i) => _elements[i]!, _elements.length];\n }, [children, count]);\n};\n","import {\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n useRef,\n RefObject,\n} from \"react\";\nimport {\n UPDATE_SCROLL_EVENT,\n ACTION_ITEMS_LENGTH_CHANGE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n UPDATE_SIZE_STATE,\n UPDATE_SCROLL_STATE,\n SCROLL_IDLE,\n UPDATE_SCROLL_END_EVENT,\n getScrollSize,\n getMinContainerSize,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { createScroller } from \"../core/scroller\";\nimport { getKey, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createResizer } from \"../core/resizer\";\nimport { ListItem } from \"./ListItem\";\nimport { CacheSnapshot, ScrollToIndexOpts } from \"../core/types\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\nimport { useChildren } from \"./useChildren\";\nimport { CustomContainerComponent, CustomItemComponent } from \"./types\";\nimport { max, microtask } from \"../core/utils\";\n\n/**\n * Methods of {@link Virtualizer}.\n */\nexport interface VirtualizerHandle {\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 opts options\n */\n scrollToIndex(index: number, opts?: ScrollToIndexOpts): 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 Virtualizer}.\n */\nexport interface VirtualizerProps {\n /**\n * Elements rendered by this component.\n *\n * You can also pass a function and set {@link VirtualizerProps.count} to create elements lazily.\n */\n children: ReactNode | ((index: number) => ReactElement);\n /**\n * If you set a function to {@link VirtualizerProps.children}, you have to set total number of items to this prop.\n */\n count?: number;\n /**\n * Number of items to render above/below the visible bounds of the list. Lower value will give better performance but 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 itemSize?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are added to/removed from start. It's recommended to set false if you add to/remove from mid/end of the list because it can cause unexpected behavior. This prop is useful for reverse infinite scrolling.\n */\n shift?: boolean;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * If true, items are aligned to the end of the list when total size of items are smaller than viewport size. It's useful for chat like app.\n */\n reverse?: 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 VirtualizerHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * If you put an element before virtualizer, you have to define its height with this prop.\n */\n startMargin?: number;\n /**\n * If you put an element after virtualizer, you have to define its height with this prop.\n */\n endMargin?: number;\n /**\n * A prop for SSR. If set, the specified amount of items will be mounted in the initial rendering regardless of the container size until hydrated.\n */\n ssrCount?: number;\n /**\n * Component or element type for container element.\n * @defaultValue \"div\"\n */\n as?: keyof JSX.IntrinsicElements | CustomContainerComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n item?: keyof JSX.IntrinsicElements | CustomItemComponent;\n /**\n * Reference to the scrollable element. The default will get the parent element of virtualizer.\n */\n scrollRef?: RefObject<HTMLElement>;\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 onScrollEnd?: () => 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 * Customizable list virtualizer for advanced usage. See {@link VirtualizerProps} and {@link VirtualizerHandle}.\n */\nexport const Virtualizer = forwardRef<VirtualizerHandle, VirtualizerProps>(\n (\n {\n children,\n count: renderCountProp,\n overscan = 4,\n itemSize,\n shift,\n horizontal: horizontalProp,\n reverse,\n cache,\n startMargin,\n endMargin,\n ssrCount,\n as: Element = \"div\",\n item: ItemElement = \"div\",\n scrollRef,\n onScroll: onScrollProp,\n onScrollEnd: onScrollEndProp,\n onRangeChange: onRangeChangeProp,\n },\n ref\n ): ReactElement => {\n Element = Element as \"div\";\n\n const [getElement, count] = useChildren(children, renderCountProp);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const isSSR = useRef(!!ssrCount);\n\n const onScroll = useLatestRef(onScrollProp);\n const onScrollEnd = useLatestRef(onScrollEndProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n itemSize,\n ssrCount,\n cache,\n !itemSize,\n startMargin,\n endMargin\n );\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n\n // The elements length and cached items length are different just after element is added/removed.\n if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count, shift]);\n }\n\n const rerender = useRerender(store);\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const totalSize = store._getTotalSize();\n\n // https://github.com/inokawa/virtua/issues/252#issuecomment-1822861368\n const minSize = getMinContainerSize(store);\n const reverseOffset = reverse ? max(0, minSize - totalSize) : 0;\n\n const items: ReactElement[] = [];\n\n useIsomorphicLayoutEffect(() => {\n isSSR[refKey] = false;\n\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeStore = store._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n }\n );\n const unsubscribeOnScroll = store._subscribe(UPDATE_SCROLL_EVENT, () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n });\n const unsubscribeOnScrollEnd = store._subscribe(\n UPDATE_SCROLL_END_EVENT,\n () => {\n onScrollEnd[refKey] && onScrollEnd[refKey]();\n }\n );\n const assignScrollableElement = (e: HTMLElement) => {\n resizer._observeRoot(e);\n scroller._observe(e);\n };\n if (scrollRef) {\n // parent's ref doesn't exist when useLayoutEffect is called\n microtask(() => assignScrollableElement(scrollRef[refKey]!));\n } else {\n assignScrollableElement(containerRef[refKey]!.parentElement!);\n }\n\n return () => {\n unsubscribeStore();\n unsubscribeOnScroll();\n unsubscribeOnScrollEnd();\n resizer._dispose();\n scroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n scroller._fixScrollJump();\n }, [jumpCount]);\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._getCacheSnapshot();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return getScrollSize(store);\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 for (\n let i = overscanStartIndex(startIndex, overscan, scrollDirection),\n j = overscanEndIndex(endIndex, overscan, scrollDirection, count);\n i <= j;\n i++\n ) {\n const e = getElement(i);\n items.push(\n <ListItem\n key={getKey(e, i)}\n _resizer={resizer._observeItem}\n _index={i}\n _offset={store._getItemOffset(i) + reverseOffset}\n _hide={store._isUnmeasuredItem(i)}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isSSR={isSSR[refKey]}\n />\n );\n }\n\n return (\n <Element\n ref={containerRef}\n style={{\n // contain: \"content\",\n overflowAnchor: \"none\", // opt out browser's scroll anchoring because it will conflict to scroll anchoring of virtualizer\n flex: \"none\", // flex style on parent can break layout\n position: \"relative\",\n visibility: \"hidden\",\n width: isHorizontal ? totalSize : \"100%\",\n height: isHorizontal ? \"100%\" : totalSize,\n [isHorizontal ? \"minWidth\" : \"minHeight\"]: minSize,\n pointerEvents: scrollDirection !== SCROLL_IDLE ? \"none\" : \"auto\",\n }}\n >\n {items}\n </Element>\n );\n }\n);\n","import { ReactElement, forwardRef } from \"react\";\nimport { ViewportComponentAttributes } from \"./types\";\nimport {\n Virtualizer,\n VirtualizerHandle,\n VirtualizerProps,\n} from \"./Virtualizer\";\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle extends VirtualizerHandle {}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps\n extends Pick<\n VirtualizerProps,\n | \"children\"\n | \"count\"\n | \"overscan\"\n | \"itemSize\"\n | \"shift\"\n | \"horizontal\"\n | \"reverse\"\n | \"cache\"\n | \"ssrCount\"\n | \"item\"\n | \"onScroll\"\n | \"onScrollEnd\"\n | \"onRangeChange\"\n >,\n ViewportComponentAttributes {}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n count,\n overscan,\n itemSize,\n shift,\n horizontal,\n reverse,\n cache,\n ssrCount,\n item,\n onScroll,\n onScrollEnd,\n onRangeChange,\n style,\n ...attrs\n },\n ref\n ): ReactElement => {\n return (\n <div\n {...attrs}\n style={{\n display: horizontal ? \"inline-block\" : \"block\",\n [horizontal ? \"overflowX\" : \"overflowY\"]: \"auto\",\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\",\n ...style,\n }}\n >\n <Virtualizer\n ref={ref}\n count={count}\n overscan={overscan}\n itemSize={itemSize}\n shift={shift}\n horizontal={horizontal}\n reverse={reverse}\n cache={cache}\n ssrCount={ssrCount}\n item={item}\n onScroll={onScroll}\n onScrollEnd={onScrollEnd}\n onRangeChange={onRangeChange}\n >\n {children}\n </Virtualizer>\n </div>\n );\n }\n);\n","import {\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n SCROLL_IDLE,\n UPDATE_SCROLL_END_EVENT,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport { getKey, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot } from \"../core/types\";\nimport { CustomContainerComponent, CustomItemComponent } from \"./types\";\nimport { ListItem } from \"./ListItem\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\nimport { useChildren } from \"./useChildren\";\n\n/**\n * Methods of {@link WindowVirtualizer}.\n */\nexport interface WindowVirtualizerHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WindowVirtualizer}.\n */\nexport interface WindowVirtualizerProps {\n /**\n * Elements rendered by this component.\n *\n * You can also pass a function and set {@link WindowVirtualizerProps.count} to create elements lazily.\n */\n children: ReactNode | ((index: number) => ReactElement);\n /**\n * If you set a function to {@link WindowVirtualizerProps.children}, you have to set total number of items to this prop.\n */\n count?: number;\n /**\n * Number of items to render above/below the visible bounds of the list. Lower value will give better performance but 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 itemSize?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are added to/removed from start. It's recommended to set false if you add to/remove from mid/end of the list because it can cause unexpected behavior. This prop is useful for reverse infinite scrolling.\n */\n shift?: boolean;\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 WindowVirtualizerHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * A prop for SSR. If set, the specified amount of items will be mounted in the initial rendering regardless of the container size until hydrated.\n */\n ssrCount?: number;\n /**\n * Component or element type for container element.\n * @defaultValue \"div\"\n */\n as?: keyof JSX.IntrinsicElements | CustomContainerComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n item?: keyof JSX.IntrinsicElements | CustomItemComponent;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollEnd?: () => 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 * {@link Virtualizer} controlled by the window scrolling. See {@link WindowVirtualizerProps} and {@link WindowVirtualizer}.\n */\nexport const WindowVirtualizer = forwardRef<\n WindowVirtualizerHandle,\n WindowVirtualizerProps\n>(\n (\n {\n children,\n count: renderCountProp,\n overscan = 4,\n itemSize,\n shift,\n horizontal: horizontalProp,\n cache,\n ssrCount,\n as: Element = \"div\",\n item: ItemElement = \"div\",\n onScrollEnd: onScrollEndProp,\n onRangeChange: onRangeChangeProp,\n },\n ref\n ): ReactElement => {\n Element = Element as \"div\";\n\n const [getElement, count] = useChildren(children, renderCountProp);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const onScrollEnd = useLatestRef(onScrollEndProp);\n\n const isSSR = useRef(!!ssrCount);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n itemSize,\n ssrCount,\n cache,\n !itemSize\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 if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count, shift]);\n }\n\n const rerender = useRerender(store);\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const totalSize = store._getTotalSize();\n\n const items: ReactElement[] = [];\n\n useIsomorphicLayoutEffect(() => {\n isSSR[refKey] = false;\n\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeStore = store._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n }\n );\n const unsubscribeOnScrollEnd = store._subscribe(\n UPDATE_SCROLL_END_EVENT,\n () => {\n onScrollEnd[refKey] && onScrollEnd[refKey]();\n }\n );\n\n const el = containerRef[refKey]!;\n resizer._observeRoot(el);\n scroller._observe(el);\n return () => {\n unsubscribeStore();\n unsubscribeOnScrollEnd();\n resizer._dispose();\n scroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n scroller._fixScrollJump();\n }, [jumpCount]);\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._getCacheSnapshot();\n },\n };\n },\n []\n );\n\n for (\n let i = overscanStartIndex(startIndex, overscan, scrollDirection),\n j = overscanEndIndex(endIndex, overscan, scrollDirection, count);\n i <= j;\n i++\n ) {\n const e = getElement(i);\n items.push(\n <ListItem\n key={getKey(e, i)}\n _resizer={resizer._observeItem}\n _index={i}\n _offset={store._getItemOffset(i)}\n _hide={store._isUnmeasuredItem(i)}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isSSR={isSSR[refKey]}\n />\n );\n }\n\n return (\n <Element\n ref={containerRef}\n style={{\n // contain: \"content\",\n flex: \"none\", // flex style on parent can break layout\n position: \"relative\",\n visibility: \"hidden\",\n width: isHorizontal ? totalSize : \"100%\",\n height: isHorizontal ? \"100%\" : totalSize,\n pointerEvents: scrollDirection !== SCROLL_IDLE ? \"none\" : \"auto\",\n }}\n >\n {items}\n </Element>\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 {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n SCROLL_IDLE,\n getScrollSize,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { ViewportComponentAttributes } from \"./types\";\nimport { flushSync } from \"react-dom\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { useRerender } from \"./useRerender\";\n\n/**\n * Props of customized scrollable component.\n */\ninterface 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\nconst DefaultViewport = 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 // contain: \"content\",\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 DefaultViewport;\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 CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _rowIndex: number;\n _colIndex: number;\n _top: number;\n _left: number;\n _height: number;\n _width: number;\n _hide: boolean;\n _element: \"div\";\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _top: top,\n _left: left,\n _height: height,\n _width: width,\n _hide: hide,\n _element: Element,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\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 [isRTLDocument() ? \"right\" : \"left\"]: left,\n visibility: hide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, hide])}\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. Lower value will give better performance but 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 * 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?: keyof JSX.IntrinsicElements | CustomCellComponent;\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 components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = {} as {\n Root?: undefined;\n Cell?: undefined;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller] = useStatic(() => {\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),\n createScroller(_hs, true),\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n if (rowCount !== vStore._getItemsLength()) {\n vStore._update(ACTION_ITEMS_LENGTH_CHANGE, [rowCount]);\n }\n if (colCount !== hStore._getItemsLength()) {\n hStore._update(ACTION_ITEMS_LENGTH_CHANGE, [colCount]);\n }\n\n const vRerender = useRerender(vStore);\n const hRerender = useRerender(hStore);\n\n const [startRowIndex, endRowIndex] = vStore._getRange();\n const [startColIndex, endColIndex] = hStore._getRange();\n const vScrollDirection = vStore._getScrollDirection();\n const hScrollDirection = hStore._getScrollDirection();\n const vJumpCount = vStore._getJumpCount();\n const hJumpCount = hStore._getJumpCount();\n const height = getScrollSize(vStore);\n const width = getScrollSize(hStore);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeVStore = vStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(vRerender);\n } else {\n vRerender();\n }\n }\n );\n const unsubscribeHStore = hStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(hRerender);\n } else {\n hRerender();\n }\n }\n );\n resizer._observeRoot(root);\n vScroller._observe(root);\n hScroller._observe(root);\n return () => {\n unsubscribeVStore();\n unsubscribeHStore();\n resizer._dispose();\n vScroller._dispose();\n hScroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n vScroller._fixScrollJump();\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n hScroller._fixScrollJump();\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 [getScrollSize(hStore), getScrollSize(vStore)];\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 = overscanStartIndex(\n startRowIndex,\n overscan,\n vScrollDirection\n );\n const overscanedEndRowIndex = overscanEndIndex(\n endRowIndex,\n overscan,\n vScrollDirection,\n rowCount\n );\n const overscanedStartColIndex = overscanStartIndex(\n startColIndex,\n overscan,\n hScrollDirection\n );\n const overscanedEndColIndex = overscanEndIndex(\n endColIndex,\n overscan,\n hScrollDirection,\n colCount\n );\n\n const items: ReactElement[] = [];\n for (\n let rowIndex = overscanedStartRowIndex;\n rowIndex <= overscanedEndRowIndex;\n rowIndex++\n ) {\n for (\n let colIndex = overscanedStartColIndex;\n colIndex <= overscanedEndColIndex;\n colIndex++\n ) {\n items.push(\n <Cell\n key={genKey(rowIndex, colIndex)}\n _resizer={resizer}\n _rowIndex={rowIndex}\n _colIndex={colIndex}\n _top={vStore._getItemOffset(rowIndex)}\n _left={hStore._getItemOffset(colIndex)}\n _height={vStore._getItemSize(rowIndex)}\n _width={hStore._getItemSize(colIndex)}\n _hide={\n vStore._isUnmeasuredItem(rowIndex) ||\n hStore._isUnmeasuredItem(colIndex)\n }\n _element={ItemElement as \"div\"}\n _children={render(rowIndex, colIndex)}\n />\n );\n }\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={width}\n height={height}\n scrolling={\n vScrollDirection !== SCROLL_IDLE || hScrollDirection !== SCROLL_IDLE\n }\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\n overflowAnchor: \"none\", // opt out browser's scroll anchoring because it will conflict to scroll anchoring of virtualizer\n flex: \"none\", // flex style on parent can break layout\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\",\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n"],"names":["min","Math","max","abs","values","Object","isArray","Array","timeout","setTimeout","clamp","value","minValue","maxValue","exists","v","microtask","queueMicrotask","fn","Promise","resolve","then","once","called","cache","args","UNCACHED","fill","array","length","prepend","key","i","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","_length","_computedOffsetIndex","_offsets","top","findIndex","offset","sum","next","computeRange","scrollOffset","prevStartIndex","viewportSize","start","updateCacheLength","isShift","diff","isAdd","shift","splice","reduce","acc","removed","isBrowser","window","getDocumentElement","document","documentElement","getCurrentDocument","node","ownerDocument","getCurrentWindow","doc","defaultView","isRTLDocument","getComputedStyle","direction","isIOSWebKit","test","navigator","userAgent","isSmoothScrollSupported","style","getScrollSize","store","_getTotalSize","_getViewportSize","overscanStartIndex","startIndex","overscan","scrollDirection","overscanEndIndex","endIndex","count","calculateJump","items","keepEnd","createVirtualStore","elementsCount","itemSize","ssrCount","cacheSnapshot","shouldAutoEstimateItemSize","startSpacerSize","endSpacerSize","isSSR","stateVersion","jumpCount","jump","pendingJump","isJumpByPrepend","_flushedJump","_scrollDirection","_scrollMode","_frozenRange","_prevRange","initCache","subscribers","Set","getTotalSize","computeTotalSize","getScrollableSize","getMaxScrollOffset","applyJump","j","_getStateVersion","_getCacheSnapshot","JSON","parse","stringify","_getRange","_isUnmeasuredItem","_hasUnmeasuredItemsInFrozenRange","slice","includes","_getItemOffset","computeStartOffset","_getItemSize","_getItemsLength","_getScrollOffset","_getScrollDirection","_getStartSpacerSize","_getEndSpacerSize","_getJumpCount","_flushJump","flushedJump","flushedIsJumpByPrepend","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldFlushPendingJump","shouldSync","mutated","updated","filter","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","distanceToEnd","nextScrollOffset","delta","distance","UPDATE_SCROLL_STATE","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","normalizeOffset","isHorizontal","createScrollObserver","viewport","getScrollOffset","updateScrollOffset","now","Date","lastScrollTime","wheeling","touching","justTouchEnded","stillMomentumScrolling","onScrollEnd","debounce","id","cancel","clearTimeout","debouncedFn","_cancel","onScroll","onWheel","e","ctrlKey","timeDelta","deltaX","deltaY","onTouchStart","onTouchEnd","addEventListener","passive","_dispose","removeEventListener","_fixScrollJump","createScroller","viewportElement","scrollObserver","cancelScroll","scrollToKey","overflowKey","scheduleImperativeScroll","async","getTargetOffset","smooth","waitForMeasurement","queue","reject","promise","unsubscribe","scrollTo","behavior","_observe","isMomentumScrolling","prev","_scrollTo","_scrollBy","_scrollToIndex","align","itemOffset","createWindowScroller","container","documentBody","body","calcOffsetToViewport","offsetKey","offsetSum","innerWidth","offsetWidth","parent","offsetParent","scrollBy","refKey","children","elements","c","push","getKey","useStatic","init","ref","useRef","useLatestRef","createResizeObserver","ro","observe","_unobserve","unobserve","disconnect","createResizer","sizeKey","mountedIndexes","WeakMap","resizeObserver","entries","resizes","contentRect","get","_observeRoot","_observeItem","el","set","createWindowResizer","windowSizeKey","cleanupOnWindowResize","onWindowResize","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","ListItem","memo","_children","_resizer","resizer","_index","_offset","_hide","hide","_element","Element","_isHorizontal","_isSSR","useMemo","margin","padding","position","undefined","visibility","display","_jsx","jsx","useRerender","useReducer","useChildren","_elements","flattenChildren","Virtualizer","forwardRef","renderCountProp","horizontal","horizontalProp","reverse","startMargin","endMargin","as","item","ItemElement","scrollRef","onScrollProp","onScrollEndProp","onRangeChange","onRangeChangeProp","getElement","containerRef","scroller","_store","rerender","totalSize","minSize","getMinContainerSize","reverseOffset","unsubscribeStore","sync","flushSync","unsubscribeOnScroll","unsubscribeOnScrollEnd","assignScrollableElement","parentElement","useImperativeHandle","scrollSize","scrollToIndex","overflowAnchor","flex","width","height","pointerEvents","VList","attrs","contain","WindowVirtualizer","DefaultViewport","scrolling","genKey","Cell","_rowIndex","_colIndex","_top","_left","left","_height","_width","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","components","Root","Viewport","viewportAttrs","vScroller","hScroller","_vs","_hs","vRerender","hRerender","startRowIndex","endRowIndex","startColIndex","endColIndex","vScrollDirection","hScrollDirection","vJumpCount","hJumpCount","rootRef","root","unsubscribeVStore","unsubscribeHStore","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex","overflow"],"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/environment.ts","../src/src/core/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/core/scroller.ts","../src/src/react/utils.ts","../src/src/react/useStatic.ts","../src/src/react/useLatestRef.ts","../src/src/core/resizer.ts","../src/src/react/ListItem.tsx","../src/src/react/useRerender.ts","../src/src/react/useChildren.ts","../src/src/react/Virtualizer.tsx","../src/src/react/VList.tsx","../src/src/react/WindowVirtualizer.tsx","../src/src/react/VGrid.tsx"],"sourcesContent":["/** @internal */\nexport const min = Math.min;\n/** @internal */\nexport const max = Math.max;\n/** @internal */\nexport const abs = Math.abs;\n/** @internal */\nexport const values = Object.values;\n/** @internal */\nexport const isArray = Array.isArray;\n/** @internal */\nexport const timeout = setTimeout;\n\n/**\n * @internal\n */\nexport const clamp = (\n value: number,\n minValue: number,\n maxValue: number\n): number => min(maxValue, max(minValue, value));\n\n/**\n * @internal\n */\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\n/**\n * @internal\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 microtask: (fn: () => void) => void =\n typeof queueMicrotask === \"function\"\n ? queueMicrotask\n : (fn) => {\n Promise.resolve().then(fn);\n };\n\n/**\n * @internal\n */\nexport const debounce = <T extends () => void>(fn: T, ms: number) => {\n let id: ReturnType<typeof setTimeout> | 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\n/**\n * @internal\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\n/**\n * @internal\n */\nexport const getStyleNumber = (v: string): number => {\n if (v) {\n return parseFloat(v);\n } else {\n return 0;\n }\n};\n","import { clamp, median, min } from \"./utils\";\n\ntype Writeable<T> = {\n -readonly [key in keyof T]: Writeable<T[key]>;\n};\n\n/** @internal */\nexport const UNCACHED = -1;\n\n/**\n * @internal\n */\nexport type Cache = {\n readonly _length: number;\n // sizes\n readonly _sizes: number[];\n readonly _defaultItemSize: number;\n // offsets\n readonly _computedOffsetIndex: number;\n readonly _offsets: number[];\n};\n\nconst fill = (array: number[], length: number, prepend?: boolean): number[] => {\n const key = prepend ? \"unshift\" : \"push\";\n for (let i = 0; i < length; i++) {\n array[key](UNCACHED);\n }\n return array;\n};\n\n/**\n * @internal\n */\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\n/**\n * @internal\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._computedOffsetIndex = min(index, cache._computedOffsetIndex);\n return isInitialMeasurement;\n};\n\n/**\n * @internal\n */\nexport const computeOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n if (!cache._length) return 0;\n if (cache._computedOffsetIndex >= index) {\n return cache._offsets[index]!;\n }\n\n if (cache._computedOffsetIndex < 0) {\n // first offset must be 0 to avoid returning NaN, which can cause infinite rerender.\n // https://github.com/inokawa/virtua/pull/160\n cache._offsets[0] = 0;\n cache._computedOffsetIndex = 0;\n }\n let i = cache._computedOffsetIndex;\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._computedOffsetIndex = index;\n return top;\n};\n\n/**\n * @internal\n */\nexport const computeTotalSize = (cache: 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\n/**\n * @internal\n */\nexport const findIndex = (cache: Cache, offset: number, i: number): number => {\n let sum = computeOffset(cache, i);\n while (i >= 0 && i < cache._length) {\n if (sum <= offset) {\n const next = getItemSize(cache, i);\n if (sum + next > offset) {\n break;\n } else {\n sum += next;\n i++;\n }\n } else {\n sum -= getItemSize(cache, --i);\n }\n }\n return clamp(i, 0, cache._length - 1);\n};\n\n/**\n * @internal\n */\nexport const computeRange = (\n cache: Cache,\n scrollOffset: number,\n prevStartIndex: number,\n viewportSize: number\n): [number, number] => {\n const start = findIndex(\n cache,\n scrollOffset,\n // Clamp because prevStartIndex may exceed the limit when children decreased a lot after scrolling\n min(prevStartIndex, cache._length - 1)\n );\n return [start, findIndex(cache, scrollOffset + viewportSize, start)];\n};\n\n/**\n * @internal\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\n/**\n * @internal\n */\nexport const initCache = (length: number, itemSize: number): Cache => {\n return {\n _defaultItemSize: itemSize,\n _length: length,\n _computedOffsetIndex: -1,\n _sizes: fill([], length),\n _offsets: fill([], length),\n };\n};\n\n/**\n * @internal\n */\nexport const updateCacheLength = (\n cache: Writeable<Cache>,\n length: number,\n isShift?: boolean\n): [number, boolean] => {\n const diff = length - cache._length;\n\n const isAdd = diff > 0;\n let shift: number;\n if (isAdd) {\n // Added\n shift = cache._defaultItemSize * diff;\n fill(cache._sizes, diff, isShift);\n fill(cache._offsets, diff);\n } else {\n // Removed\n shift = (\n isShift ? cache._sizes.splice(0, -diff) : cache._sizes.splice(diff)\n ).reduce(\n (acc, removed) =>\n acc + (removed === UNCACHED ? cache._defaultItemSize : removed),\n 0\n );\n cache._offsets.splice(diff);\n }\n\n cache._computedOffsetIndex = isShift\n ? // Discard cache for now\n -1\n : min(length - 1, cache._computedOffsetIndex);\n cache._length = length;\n return [shift, isAdd];\n};\n","import { once } from \"./utils\";\n\n/**\n * @internal\n */\nexport const isBrowser = typeof window !== \"undefined\";\n\nconst getDocumentElement = () => document.documentElement;\n\n/**\n * @internal\n */\nexport const getCurrentDocument = (node: HTMLElement): Document =>\n node.ownerDocument;\n\n/**\n * @internal\n */\nexport const getCurrentWindow = (doc: Document) => doc.defaultView!;\n\n/**\n * @internal\n */\nexport const isRTLDocument = /*#__PURE__*/ once((): boolean => {\n // TODO support SSR in rtl\n return isBrowser\n ? getComputedStyle(getDocumentElement()).direction === \"rtl\"\n : false;\n});\n\n/**\n * Currently, all browsers on iOS/iPadOS are WebKit, including WebView.\n * @internal\n */\nexport const isIOSWebKit = /*#__PURE__*/ once((): boolean => {\n return /iP(hone|od|ad)/.test(navigator.userAgent);\n});\n\n/**\n * @internal\n */\nexport const isSmoothScrollSupported = /*#__PURE__*/ once((): boolean => {\n return \"scrollBehavior\" in getDocumentElement().style;\n});\n","import {\n initCache,\n getItemSize,\n computeTotalSize,\n computeOffset as computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n estimateDefaultItemSize,\n updateCacheLength,\n computeRange,\n} from \"./cache\";\nimport { isIOSWebKit } from \"./environment\";\nimport type { CacheSnapshot } from \"./types\";\nimport { abs, clamp, max, min } from \"./utils\";\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\n/** @internal */\nexport const SCROLL_IDLE = 0;\n/** @internal */\nexport const SCROLL_DOWN = 1;\n/** @internal */\nexport const SCROLL_UP = 2;\n/** @internal */\nexport type ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nconst SCROLL_BY_NATIVE = 0;\nconst SCROLL_BY_MANUAL_SCROLL = 1;\nconst SCROLL_BY_PREPENDING = 2;\ntype ScrollMode =\n | typeof SCROLL_BY_NATIVE\n | typeof SCROLL_BY_MANUAL_SCROLL\n | typeof SCROLL_BY_PREPENDING;\n\n/** @internal */\nexport const ACTION_ITEM_RESIZE = 1;\n/** @internal */\nexport const ACTION_VIEWPORT_RESIZE = 2;\n/** @internal */\nexport const ACTION_ITEMS_LENGTH_CHANGE = 3;\n/** @internal */\nexport const ACTION_SCROLL = 4;\n/** @internal */\nexport const ACTION_SCROLL_END = 5;\n/** @internal */\nexport const ACTION_MANUAL_SCROLL = 6;\n/** @internal */\nexport const ACTION_BEFORE_MANUAL_SMOOTH_SCROLL = 7;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_VIEWPORT_RESIZE, size: number]\n | [\n type: typeof ACTION_ITEMS_LENGTH_CHANGE,\n arg: [length: number, isShift?: boolean | undefined]\n ]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, dummy?: void]\n | [type: typeof ACTION_MANUAL_SCROLL, dummy?: void]\n | [type: typeof ACTION_BEFORE_MANUAL_SMOOTH_SCROLL, offset: number];\n\n/** @internal */\nexport const UPDATE_SCROLL_STATE = 0b0001;\n/** @internal */\nexport const UPDATE_SIZE_STATE = 0b0010;\n/** @internal */\nexport const UPDATE_SCROLL_EVENT = 0b0100;\n/** @internal */\nexport const UPDATE_SCROLL_END_EVENT = 0b1000;\n\n/** @internal */\nexport type ItemResize = Readonly<[index: number, size: number]>;\n/** @internal */\nexport type ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\n/**\n * @internal\n */\nexport const getScrollSize = (store: VirtualStore): number => {\n return max(store._getTotalSize(), store._getViewportSize());\n};\n\n/**\n * @internal\n */\nexport const getMinContainerSize = (store: VirtualStore): number => {\n return max(\n store._getTotalSize(),\n store._getViewportSize() -\n store._getStartSpacerSize() -\n store._getEndSpacerSize()\n );\n};\n\n/**\n * @internal\n */\nexport const overscanStartIndex = (\n startIndex: number,\n overscan: number,\n scrollDirection: ScrollDirection\n): number => {\n return max(\n startIndex - (scrollDirection === SCROLL_DOWN ? 1 : max(1, overscan)),\n 0\n );\n};\n\n/**\n * @internal\n */\nexport const overscanEndIndex = (\n endIndex: number,\n overscan: number,\n scrollDirection: ScrollDirection,\n count: number\n): number => {\n return min(\n endIndex + (scrollDirection === SCROLL_UP ? 1 : max(1, overscan)),\n count - 1\n );\n};\n\nconst calculateJump = (\n cache: Cache,\n items: readonly ItemResize[],\n keepEnd?: boolean\n): number => {\n return items.reduce((acc, [index, size]) => {\n const diff = size - getItemSize(cache, index);\n if (!keepEnd || diff > 0) {\n acc += diff;\n }\n return acc;\n }, 0);\n};\n\ntype Subscriber = (sync?: boolean) => void;\n\ntype StateVersion = readonly [];\n\n/**\n * @internal\n */\nexport type VirtualStore = {\n _getStateVersion(): StateVersion;\n _getCacheSnapshot(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInFrozenRange(): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemsLength(): number;\n _getScrollOffset(): number;\n _getScrollDirection(): ScrollDirection;\n _getViewportSize(): number;\n _getStartSpacerSize(): number;\n _getEndSpacerSize(): number;\n _getTotalSize(): number;\n _getJumpCount(): number;\n _flushJump(): [number, boolean];\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n};\n\n/**\n * @internal\n */\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number = 40,\n ssrCount: number = 0,\n cacheSnapshot?: CacheSnapshot | undefined,\n shouldAutoEstimateItemSize?: boolean | undefined,\n startSpacerSize: number = 0,\n endSpacerSize: number = 0\n): VirtualStore => {\n let isSSR = !!ssrCount;\n let stateVersion: StateVersion = [];\n let viewportSize = 0;\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump = 0;\n let pendingJump = 0;\n let isJumpByPrepend = false;\n let _flushedJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _scrollMode: ScrollMode = SCROLL_BY_NATIVE;\n let _frozenRange: ItemsRange | null = isSSR\n ? [0, max(ssrCount - 1, 0)]\n : null;\n let _prevRange: ItemsRange = [0, 0];\n\n const cache =\n (cacheSnapshot as Cache | undefined) || initCache(elementsCount, itemSize);\n const subscribers = new Set<[number, Subscriber]>();\n const getTotalSize = (): number => computeTotalSize(cache);\n const getScrollableSize = (): number =>\n getTotalSize() + startSpacerSize + endSpacerSize;\n const getRelativeScrollOffset = (): number => scrollOffset - startSpacerSize;\n const getMaxScrollOffset = (): number =>\n // total size can become smaller than viewport size\n max(0, getScrollableSize() - viewportSize);\n\n const applyJump = (j: number) => {\n // In iOS WebKit browsers, updating scroll position will stop scrolling so it have to be deferred during scrolling.\n if (isIOSWebKit() && _scrollDirection !== SCROLL_IDLE) {\n pendingJump += j;\n } else {\n jump += j;\n jumpCount++;\n }\n };\n\n return {\n _getStateVersion() {\n return stateVersion;\n },\n _getCacheSnapshot() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n if (_frozenRange) {\n return [\n min(_prevRange[0], _frozenRange[0]),\n max(_prevRange[1], _frozenRange[1]),\n ];\n }\n // Return previous range for consistent render until next scroll event comes in.\n if (_flushedJump) {\n return _prevRange;\n }\n return (_prevRange = computeRange(\n cache,\n getRelativeScrollOffset() + pendingJump + jump,\n _prevRange[0],\n viewportSize\n ));\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInFrozenRange() {\n if (!_frozenRange) return false;\n return cache._sizes\n .slice(\n max(0, _frozenRange[0] - 1),\n min(cache._length - 1, _frozenRange[1] + 1) + 1\n )\n .includes(UNCACHED);\n },\n _getItemOffset(index) {\n return computeStartOffset(cache, index) - pendingJump;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemsLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollDirection() {\n return _scrollDirection;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getStartSpacerSize() {\n return startSpacerSize;\n },\n _getEndSpacerSize() {\n return endSpacerSize;\n },\n _getTotalSize: getTotalSize,\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const flushedJump = jump;\n const flushedIsJumpByPrepend = isJumpByPrepend;\n jump = 0;\n isJumpByPrepend = false;\n if (viewportSize > getScrollableSize()) {\n // In this case applying jump will not cause scroll.\n // Current logic expects scroll event occurs after applying jump so discard it.\n return [0, false];\n } else {\n return [(_flushedJump = flushedJump), flushedIsJumpByPrepend];\n }\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 shouldFlushPendingJump: boolean | undefined;\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\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n // Calculate jump\n // Should maintain visible position to minimize junks in appearance\n let diff = 0;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (scrollOffset > getMaxScrollOffset() - SUBPIXEL_THRESHOLD) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated, true);\n } else {\n if (_scrollMode === SCROLL_BY_PREPENDING) {\n // Keep distance from end immediately after prepending\n // We can assume jumps occurred on the upper outside\n diff = calculateJump(cache, updated);\n } else {\n // Keep start at mid\n const [startIndex] = _prevRange;\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\n );\n }\n }\n\n if (diff) {\n applyJump(diff);\n }\n\n // Update item sizes\n let isNewItemMeasured = false;\n updated.forEach(([index, size]) => {\n if (setItemSize(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);\n }\n mutated = UPDATE_SIZE_STATE;\n\n // Synchronous update is necessary in current design to minimize visible glitch in concurrent rendering.\n // However in React, synchronous update with flushSync after asynchronous update will overtake the asynchronous one.\n // If items resize happens just after scroll, race condition can occur depending on implementation.\n shouldSync = true;\n break;\n }\n case ACTION_VIEWPORT_RESIZE: {\n if (viewportSize !== payload) {\n viewportSize = payload;\n mutated = UPDATE_SIZE_STATE;\n }\n break;\n }\n case ACTION_ITEMS_LENGTH_CHANGE: {\n if (payload[1]) {\n // Calc distance before updating cache\n const distanceToEnd = getMaxScrollOffset() - scrollOffset;\n\n const [shift, isAdd] = updateCacheLength(cache, payload[0], true);\n applyJump(isAdd ? shift : -min(shift, distanceToEnd));\n\n if (isAdd) {\n _scrollMode = SCROLL_BY_PREPENDING;\n isJumpByPrepend = true;\n }\n mutated = UPDATE_SCROLL_STATE;\n } else {\n updateCacheLength(cache, payload[0]);\n }\n break;\n }\n case ACTION_SCROLL: {\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n const nextScrollOffset = clamp(payload, 0, getMaxScrollOffset());\n const flushedJump = _flushedJump;\n _flushedJump = 0;\n // Skip if offset is not changed\n if (nextScrollOffset === scrollOffset) {\n break;\n }\n\n const delta = nextScrollOffset - scrollOffset;\n const distance = abs(delta);\n\n // Scroll event after jump compensation is not reliable because it may result in the opposite direction.\n // The delta of artificial scroll may not be equal with the jump because it may be batched with other scrolls.\n // And at least in latest Chrome/Firefox/Safari in 2023, setting value to scrollTop/scrollLeft can lose subpixel because its integer (sometimes float probably depending on dpr).\n const isJustJumped = flushedJump && distance < abs(flushedJump) + 1;\n\n // Scroll events are dispatched enough so it's ok to skip some of them.\n if (\n !isJustJumped &&\n // Ignore until manual scrolling\n _scrollMode === SCROLL_BY_NATIVE\n ) {\n _scrollDirection = delta < 0 ? SCROLL_UP : SCROLL_DOWN;\n }\n\n // TODO This will cause glitch in reverse infinite scrolling. Disable this until better solution is found.\n // if (\n // pendingJump &&\n // ((_scrollDirection === SCROLL_UP &&\n // payload - max(pendingJump, 0) <= 0) ||\n // (_scrollDirection === SCROLL_DOWN &&\n // payload - min(pendingJump, 0) >= getScrollOffsetMax()))\n // ) {\n // // Flush if almost reached to start or end\n // shouldFlushPendingJump = true;\n // }\n\n if (isSSR) {\n _frozenRange = null;\n isSSR = false;\n }\n\n // Update synchronously if scrolled a lot\n shouldSync = distance > viewportSize;\n\n scrollOffset = nextScrollOffset;\n mutated = UPDATE_SCROLL_STATE + UPDATE_SCROLL_EVENT;\n break;\n }\n case ACTION_SCROLL_END: {\n mutated = UPDATE_SCROLL_END_EVENT;\n if (_scrollDirection !== SCROLL_IDLE) {\n shouldFlushPendingJump = true;\n mutated += UPDATE_SCROLL_STATE;\n }\n _scrollDirection = SCROLL_IDLE;\n _scrollMode = SCROLL_BY_NATIVE;\n _frozenRange = null;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _scrollMode = SCROLL_BY_MANUAL_SCROLL;\n break;\n }\n case ACTION_BEFORE_MANUAL_SMOOTH_SCROLL: {\n _frozenRange = computeRange(\n cache,\n payload,\n _prevRange[0],\n viewportSize\n );\n mutated = UPDATE_SCROLL_STATE;\n break;\n }\n }\n\n if (mutated) {\n stateVersion = [];\n\n if (shouldFlushPendingJump && pendingJump) {\n jump += pendingJump;\n pendingJump = 0;\n jumpCount++;\n }\n\n subscribers.forEach(([target, cb]) => {\n // Early return to skip React's computation\n if (!(mutated & target)) {\n return;\n }\n // https://github.com/facebook/react/issues/25191\n // https://github.com/facebook/react/blob/a5fc797db14c6e05d4d5c4dbb22a0dd70d41f5d5/packages/react-reconciler/src/ReactFiberWorkLoop.js#L1443-L1447\n cb(shouldSync);\n });\n }\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"../core/environment\";\n\n/**\n * https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * @internal\n */\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","import {\n getCurrentDocument,\n getCurrentWindow,\n isIOSWebKit,\n isRTLDocument,\n isSmoothScrollSupported,\n} from \"./environment\";\nimport {\n ACTION_SCROLL,\n VirtualStore,\n ACTION_SCROLL_END,\n UPDATE_SIZE_STATE,\n ACTION_MANUAL_SCROLL,\n SCROLL_IDLE,\n ACTION_BEFORE_MANUAL_SMOOTH_SCROLL,\n} from \"./store\";\nimport { ScrollToIndexOpts } from \"./types\";\nimport { debounce, timeout, clamp, microtask } from \"./utils\";\n\n/**\n * scrollLeft is negative value in rtl direction.\n *\n * left right\n * 0 100 spec compliant (ltr)\n * -100 0 spec compliant (rtl)\n * https://github.com/othree/jquery.rtl-scroll-type\n */\nconst normalizeOffset = (offset: number, isHorizontal: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return -offset;\n } else {\n return offset;\n }\n};\n\nconst createScrollObserver = (\n store: VirtualStore,\n viewport: HTMLElement | Window,\n isHorizontal: boolean,\n getScrollOffset: () => number,\n updateScrollOffset: (value: number, isMomentumScrolling: boolean) => void\n) => {\n const now = Date.now;\n\n let lastScrollTime = 0;\n let wheeling = false;\n let touching = false;\n let justTouchEnded = false;\n let stillMomentumScrolling = false;\n\n const onScrollEnd = debounce(() => {\n if (wheeling || touching) {\n wheeling = false;\n\n // Wait while wheeling or touching\n onScrollEnd();\n return;\n }\n\n justTouchEnded = false;\n\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n lastScrollTime = now();\n\n if (justTouchEnded) {\n stillMomentumScrolling = true;\n }\n\n store._update(ACTION_SCROLL, getScrollOffset());\n onScrollEnd();\n };\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\n const onWheel = ((e: WheelEvent) => {\n if (\n wheeling ||\n // Scroll start should be detected with scroll event\n store._getScrollDirection() === SCROLL_IDLE ||\n // Probably a pinch-to-zoom gesture\n e.ctrlKey\n ) {\n return;\n }\n\n const timeDelta = now() - lastScrollTime;\n if (\n // Check if wheel event occurs some time after scrolling\n 150 > timeDelta &&\n 50 < timeDelta &&\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 (isHorizontal ? e.deltaX : e.deltaY)\n ) {\n wheeling = true;\n }\n }) as (e: Event) => void; // FIXME type error. why only here?\n\n const onTouchStart = () => {\n touching = true;\n justTouchEnded = stillMomentumScrolling = false;\n };\n const onTouchEnd = () => {\n touching = false;\n if (isIOSWebKit()) {\n justTouchEnded = true;\n }\n };\n\n viewport.addEventListener(\"scroll\", onScroll);\n viewport.addEventListener(\"wheel\", onWheel, { passive: true });\n viewport.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n viewport.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\n return {\n _dispose: () => {\n viewport.removeEventListener(\"scroll\", onScroll);\n viewport.removeEventListener(\"wheel\", onWheel);\n viewport.removeEventListener(\"touchstart\", onTouchStart);\n viewport.removeEventListener(\"touchend\", onTouchEnd);\n onScrollEnd._cancel();\n },\n _fixScrollJump: () => {\n const [jump, prepend] = store._flushJump();\n if (!jump) return;\n updateScrollOffset(jump, stillMomentumScrolling);\n stillMomentumScrolling = false;\n return prepend;\n },\n };\n};\n\ntype ScrollObserver = ReturnType<typeof createScrollObserver>;\n\n/**\n * @internal\n */\nexport type Scroller = {\n _observe: (viewportElement: HTMLElement) => void;\n _dispose(): void;\n _scrollTo: (offset: number) => void;\n _scrollBy: (offset: number) => void;\n _scrollToIndex: (index: number, opts?: ScrollToIndexOpts) => void;\n _fixScrollJump: () => void;\n};\n\n/**\n * @internal\n */\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): Scroller => {\n let viewportElement: HTMLElement | undefined;\n let scrollObserver: ScrollObserver | undefined;\n let cancelScroll: (() => void) | undefined;\n const scrollOffsetKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n const overflowKey = isHorizontal ? \"overflowX\" : \"overflowY\";\n\n // The given offset will be clamped by browser\n // https://drafts.csswg.org/cssom-view/#dom-element-scrolltop\n const scheduleImperativeScroll = async (\n getTargetOffset: () => number,\n smooth?: boolean\n ) => {\n if (!viewportElement) {\n // Wait for element assign. The element may be undefined if scrollRef prop is used and scroll is scheduled on mount.\n microtask(() => scheduleImperativeScroll(getTargetOffset, smooth));\n return;\n }\n\n if (cancelScroll) {\n // Cancel waiting scrollTo\n cancelScroll();\n }\n\n const waitForMeasurement = (): [Promise<void>, () => void] => {\n // Wait for the scroll destination items to be measured.\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 let queue: (() => void) | undefined;\n return [\n new Promise<void>((resolve, reject) => {\n queue = resolve;\n // Reject when items around scroll destination completely measured\n timeout((cancelScroll = reject), 150);\n }),\n store._subscribe(UPDATE_SIZE_STATE, () => {\n queue && queue();\n }),\n ];\n };\n\n if (smooth && isSmoothScrollSupported()) {\n while (true) {\n store._update(ACTION_BEFORE_MANUAL_SMOOTH_SCROLL, getTargetOffset());\n\n if (!store._hasUnmeasuredItemsInFrozenRange()) {\n break;\n }\n\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n await promise;\n } catch (e) {\n // canceled\n return;\n } finally {\n unsubscribe();\n }\n }\n\n viewportElement.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: normalizeOffset(\n getTargetOffset(),\n isHorizontal\n ),\n behavior: \"smooth\",\n });\n } else {\n while (true) {\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n viewportElement[scrollOffsetKey] = normalizeOffset(\n getTargetOffset(),\n isHorizontal\n );\n store._update(ACTION_MANUAL_SCROLL);\n\n await promise;\n } catch (e) {\n // canceled or finished\n return;\n } finally {\n unsubscribe();\n }\n }\n }\n };\n\n return {\n _observe(viewport) {\n viewportElement = viewport;\n\n scrollObserver = createScrollObserver(\n store,\n viewport,\n isHorizontal,\n () => normalizeOffset(viewport[scrollOffsetKey], isHorizontal),\n (jump, isMomentumScrolling) => {\n // If we update scroll position while touching on iOS, the position will be reverted.\n // However iOS WebKit fires touch events only once at the beginning of momentum scrolling.\n // That means we have no reliable way to confirm still touched or not if user touches more than once during momentum scrolling...\n // This is a hack for the suspectable situations, inspired by https://github.com/prud/ios-overflow-scroll-to-top\n if (isMomentumScrolling) {\n const style = viewport.style;\n const prev = style[overflowKey];\n style[overflowKey] = \"hidden\";\n timeout(() => {\n style[overflowKey] = prev;\n });\n }\n\n viewport[scrollOffsetKey] += normalizeOffset(jump, isHorizontal);\n }\n );\n },\n _dispose() {\n scrollObserver && scrollObserver._dispose();\n },\n _scrollTo(offset) {\n scheduleImperativeScroll(() => offset);\n },\n _scrollBy(offset) {\n offset += store._getScrollOffset();\n scheduleImperativeScroll(() => offset);\n },\n _scrollToIndex(index, { align, smooth } = {}) {\n index = clamp(index, 0, store._getItemsLength() - 1);\n\n if (align === \"nearest\") {\n const itemOffset = store._getItemOffset(index);\n const scrollOffset = store._getScrollOffset();\n\n if (itemOffset < scrollOffset) {\n align = \"start\";\n } else if (\n itemOffset + store._getItemSize(index) >\n scrollOffset + store._getViewportSize()\n ) {\n align = \"end\";\n } else {\n // already completely visible\n return;\n }\n }\n\n scheduleImperativeScroll(() => {\n return (\n store._getStartSpacerSize() +\n (align === \"end\"\n ? store._getItemOffset(index) +\n store._getItemSize(index) -\n store._getViewportSize()\n : align === \"center\"\n ? store._getItemOffset(index) +\n (store._getItemSize(index) - store._getViewportSize()) / 2\n : store._getItemOffset(index))\n );\n }, smooth);\n },\n _fixScrollJump: () => {\n if (scrollObserver) {\n if (scrollObserver._fixScrollJump()) {\n // https://github.com/inokawa/virtua/issues/357\n cancelScroll && cancelScroll();\n }\n }\n },\n };\n};\n\n/**\n * @internal\n */\nexport type WindowScroller = {\n _observe(containerElement: HTMLElement): void;\n _dispose(): void;\n _fixScrollJump: () => void;\n};\n\n/**\n * @internal\n */\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n let scrollObserver: ScrollObserver | undefined;\n\n return {\n _observe(container) {\n const scrollOffsetKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n\n const document = getCurrentDocument(container);\n const window = getCurrentWindow(document);\n const documentBody = document.body;\n\n const calcOffsetToViewport = (\n node: HTMLElement,\n viewport: HTMLElement,\n isHorizontal: boolean,\n offset: number = 0\n ): number => {\n // TODO calc offset only when it changes (maybe impossible)\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n const offsetSum =\n offset +\n (isHorizontal && isRTLDocument()\n ? window.innerWidth - node[offsetKey] - node.offsetWidth\n : node[offsetKey]);\n\n const parent = node.offsetParent;\n if (node === viewport || !parent) {\n return offsetSum;\n }\n\n return calcOffsetToViewport(\n parent as HTMLElement,\n viewport,\n isHorizontal,\n offsetSum\n );\n };\n\n scrollObserver = createScrollObserver(\n store,\n window,\n isHorizontal,\n () =>\n normalizeOffset(window[scrollOffsetKey], isHorizontal) -\n calcOffsetToViewport(container, documentBody, isHorizontal),\n (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(\n isHorizontal ? normalizeOffset(jump, isHorizontal) : 0,\n isHorizontal ? 0 : jump\n );\n }\n );\n },\n _dispose() {\n scrollObserver && scrollObserver._dispose();\n },\n _fixScrollJump: () => {\n scrollObserver && scrollObserver._fixScrollJump();\n },\n };\n};\n","import { ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists, isArray } from \"../core/utils\";\n\n/**\n * @internal\n */\nexport const refKey = \"current\";\n\n/**\n * @internal\n */\nexport type ItemElement = ReactElement | ReactFragment | string | number;\n\nconst forEach = (children: ReactNode, elements: ItemElement[]) => {\n if (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/**\n * Replace 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\n *\n * @internal\n */\nexport const flattenChildren = (children: ReactNode): ItemElement[] => {\n const elements: ItemElement[] = [];\n forEach(children, elements);\n return elements;\n};\n\ntype MayHaveKey = { key?: React.Key };\n\n/**\n * @internal\n */\nexport const getKey = (e: ItemElement, i: number): React.Key => {\n const key = (e as MayHaveKey).key;\n return exists(key) ? key : \"_\" + i;\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\n/**\n * @internal\n */\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\n/**\n * @internal\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 { getCurrentDocument, getCurrentWindow } from \"./environment\";\nimport {\n ACTION_ITEM_RESIZE,\n ACTION_VIEWPORT_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max } from \"./utils\";\n\nconst createResizeObserver = (cb: ResizeObserverCallback) => {\n let ro: ResizeObserver | undefined;\n\n return {\n _observe(e: HTMLElement) {\n // Initialize ResizeObserver lazily for SSR\n // https://www.w3.org/TR/resize-observer/#intro\n (\n ro ||\n (ro = new (getCurrentWindow(getCurrentDocument(e)).ResizeObserver)(cb))\n ).observe(e);\n },\n _unobserve(e: HTMLElement) {\n ro!.unobserve(e);\n },\n _dispose() {\n ro && ro.disconnect();\n },\n };\n};\n\n/**\n * @internal\n */\nexport type ItemResizeObserver = (el: HTMLElement, i: number) => () => void;\n\ninterface ListResizer {\n _observeRoot(viewportElement: HTMLElement): void;\n _observeItem: ItemResizeObserver;\n _dispose(): void;\n}\n\n/**\n * @internal\n */\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let viewportElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n const resizeObserver = createResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === viewportElement) {\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 return {\n _observeRoot(viewport: HTMLElement) {\n resizeObserver._observe((viewportElement = viewport));\n },\n _observeItem: (el: HTMLElement, i: number) => {\n mountedIndexes.set(el, i);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose: resizeObserver._dispose,\n };\n};\n\ninterface WindowListResizer {\n _observeRoot(container: HTMLElement): void;\n _observeItem: ItemResizeObserver;\n _dispose(): void;\n}\n\n/**\n * @internal\n */\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n const resizeObserver = createResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\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 let cleanupOnWindowResize: (() => void) | undefined;\n\n return {\n _observeRoot(container) {\n const window = getCurrentWindow(getCurrentDocument(container));\n const onWindowResize = () => {\n store._update(ACTION_VIEWPORT_RESIZE, window[windowSizeKey]);\n };\n window.addEventListener(\"resize\", onWindowResize);\n onWindowResize();\n\n cleanupOnWindowResize = () => {\n window.removeEventListener(\"resize\", onWindowResize);\n };\n },\n _observeItem: (el: HTMLElement, i: number) => {\n mountedIndexes.set(el, i);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose() {\n cleanupOnWindowResize && cleanupOnWindowResize();\n resizeObserver._dispose();\n },\n };\n};\n\n/**\n * @internal\n */\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let viewportElement: 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 const resizeObserver = createResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === viewportElement) {\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 return {\n _observeRoot(viewport: HTMLElement) {\n resizeObserver._observe((viewportElement = viewport));\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n resizeObserver._observe(el);\n return () => {\n mountedIndexes.delete(el);\n resizeObserver._unobserve(el);\n };\n },\n _dispose: resizeObserver._dispose,\n };\n};\n\n/**\n * @internal\n */\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { ItemResizeObserver } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { CustomItemComponent } from \"./types\";\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ItemResizeObserver;\n _index: number;\n _offset: number;\n _hide: boolean;\n _element: \"div\" | CustomItemComponent;\n _isHorizontal: boolean;\n _isSSR: boolean | undefined;\n};\n\n/**\n * @internal\n */\nexport const ListItem = memo(\n ({\n _children: children,\n _resizer: resizer,\n _index: index,\n _offset: offset,\n _hide: hide,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isSSR: isSSR,\n }: ListItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(() => resizer(ref[refKey]!, index), [index]);\n\n const style = useMemo((): CSSProperties => {\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: hide && isSSR ? undefined : \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : \"left\"]: 0,\n [isHorizontal ? (isRTLDocument() ? \"right\" : \"left\") : \"top\"]: offset,\n visibility: !hide || isSSR ? \"visible\" : \"hidden\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide, isSSR]);\n\n if (typeof Element === \"string\") {\n return (\n <Element ref={ref} style={style}>\n {children}\n </Element>\n );\n } else {\n return (\n <Element ref={ref} style={style} index={index}>\n {children}\n </Element>\n );\n }\n }\n);\n","import { useReducer } from \"react\";\nimport { VirtualStore } from \"../core/store\";\n\n/**\n * @internal\n */\nexport const useRerender = (store: VirtualStore): (() => void) => {\n return useReducer(\n store._getStateVersion,\n undefined,\n store._getStateVersion\n )[1];\n};\n","import { ReactElement, ReactNode, useMemo } from \"react\";\nimport { ItemElement, flattenChildren } from \"./utils\";\n\n/**\n * @internal\n */\nexport const useChildren = (\n children: ReactNode | ((i: number) => ReactElement),\n count: number | undefined\n) => {\n return useMemo((): [(i: number) => ItemElement, number] => {\n if (typeof children === \"function\") {\n return [children, count || 0];\n }\n // Memoize element array\n const _elements = flattenChildren(children);\n return [(i) => _elements[i]!, _elements.length];\n }, [children, count]);\n};\n","import {\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n useRef,\n RefObject,\n} from \"react\";\nimport {\n UPDATE_SCROLL_EVENT,\n ACTION_ITEMS_LENGTH_CHANGE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n UPDATE_SIZE_STATE,\n UPDATE_SCROLL_STATE,\n SCROLL_IDLE,\n UPDATE_SCROLL_END_EVENT,\n getScrollSize,\n getMinContainerSize,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { createScroller } from \"../core/scroller\";\nimport { getKey, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createResizer } from \"../core/resizer\";\nimport { ListItem } from \"./ListItem\";\nimport { CacheSnapshot, ScrollToIndexOpts } from \"../core/types\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\nimport { useChildren } from \"./useChildren\";\nimport { CustomContainerComponent, CustomItemComponent } from \"./types\";\nimport { max, microtask } from \"../core/utils\";\n\n/**\n * Methods of {@link Virtualizer}.\n */\nexport interface VirtualizerHandle {\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 opts options\n */\n scrollToIndex(index: number, opts?: ScrollToIndexOpts): 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 Virtualizer}.\n */\nexport interface VirtualizerProps {\n /**\n * Elements rendered by this component.\n *\n * You can also pass a function and set {@link VirtualizerProps.count} to create elements lazily.\n */\n children: ReactNode | ((index: number) => ReactElement);\n /**\n * If you set a function to {@link VirtualizerProps.children}, you have to set total number of items to this prop.\n */\n count?: number;\n /**\n * Number of items to render above/below the visible bounds of the list. Lower value will give better performance but 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 itemSize?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are added to/removed from start. It's recommended to set false if you add to/remove from mid/end of the list because it can cause unexpected behavior. This prop is useful for reverse infinite scrolling.\n */\n shift?: boolean;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * If true, items are aligned to the end of the list when total size of items are smaller than viewport size. It's useful for chat like app.\n */\n reverse?: 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 VirtualizerHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * If you put an element before virtualizer, you have to define its height with this prop.\n */\n startMargin?: number;\n /**\n * If you put an element after virtualizer, you have to define its height with this prop.\n */\n endMargin?: number;\n /**\n * A prop for SSR. If set, the specified amount of items will be mounted in the initial rendering regardless of the container size until hydrated.\n */\n ssrCount?: number;\n /**\n * Component or element type for container element.\n * @defaultValue \"div\"\n */\n as?: keyof JSX.IntrinsicElements | CustomContainerComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n item?: keyof JSX.IntrinsicElements | CustomItemComponent;\n /**\n * Reference to the scrollable element. The default will get the parent element of virtualizer.\n */\n scrollRef?: RefObject<HTMLElement>;\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 onScrollEnd?: () => 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 * Customizable list virtualizer for advanced usage. See {@link VirtualizerProps} and {@link VirtualizerHandle}.\n */\nexport const Virtualizer = forwardRef<VirtualizerHandle, VirtualizerProps>(\n (\n {\n children,\n count: renderCountProp,\n overscan = 4,\n itemSize,\n shift,\n horizontal: horizontalProp,\n reverse,\n cache,\n startMargin,\n endMargin,\n ssrCount,\n as: Element = \"div\",\n item: ItemElement = \"div\",\n scrollRef,\n onScroll: onScrollProp,\n onScrollEnd: onScrollEndProp,\n onRangeChange: onRangeChangeProp,\n },\n ref\n ): ReactElement => {\n Element = Element as \"div\";\n\n const [getElement, count] = useChildren(children, renderCountProp);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const isSSR = useRef(!!ssrCount);\n\n const onScroll = useLatestRef(onScrollProp);\n const onScrollEnd = useLatestRef(onScrollEndProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n itemSize,\n ssrCount,\n cache,\n !itemSize,\n startMargin,\n endMargin\n );\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n\n // The elements length and cached items length are different just after element is added/removed.\n if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count, shift]);\n }\n\n const rerender = useRerender(store);\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const totalSize = store._getTotalSize();\n\n // https://github.com/inokawa/virtua/issues/252#issuecomment-1822861368\n const minSize = getMinContainerSize(store);\n const reverseOffset = reverse ? max(0, minSize - totalSize) : 0;\n\n const items: ReactElement[] = [];\n\n useIsomorphicLayoutEffect(() => {\n isSSR[refKey] = false;\n\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeStore = store._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n }\n );\n const unsubscribeOnScroll = store._subscribe(UPDATE_SCROLL_EVENT, () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n });\n const unsubscribeOnScrollEnd = store._subscribe(\n UPDATE_SCROLL_END_EVENT,\n () => {\n onScrollEnd[refKey] && onScrollEnd[refKey]();\n }\n );\n const assignScrollableElement = (e: HTMLElement) => {\n resizer._observeRoot(e);\n scroller._observe(e);\n };\n if (scrollRef) {\n // parent's ref doesn't exist when useLayoutEffect is called\n microtask(() => assignScrollableElement(scrollRef[refKey]!));\n } else {\n assignScrollableElement(containerRef[refKey]!.parentElement!);\n }\n\n return () => {\n unsubscribeStore();\n unsubscribeOnScroll();\n unsubscribeOnScrollEnd();\n resizer._dispose();\n scroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n scroller._fixScrollJump();\n }, [jumpCount]);\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._getCacheSnapshot();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return getScrollSize(store);\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 for (\n let i = overscanStartIndex(startIndex, overscan, scrollDirection),\n j = overscanEndIndex(endIndex, overscan, scrollDirection, count);\n i <= j;\n i++\n ) {\n const e = getElement(i);\n items.push(\n <ListItem\n key={getKey(e, i)}\n _resizer={resizer._observeItem}\n _index={i}\n _offset={store._getItemOffset(i) + reverseOffset}\n _hide={store._isUnmeasuredItem(i)}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isSSR={isSSR[refKey]}\n />\n );\n }\n\n return (\n <Element\n ref={containerRef}\n style={{\n // contain: \"content\",\n overflowAnchor: \"none\", // opt out browser's scroll anchoring because it will conflict to scroll anchoring of virtualizer\n flex: \"none\", // flex style on parent can break layout\n position: \"relative\",\n visibility: \"hidden\",\n width: isHorizontal ? totalSize : \"100%\",\n height: isHorizontal ? \"100%\" : totalSize,\n [isHorizontal ? \"minWidth\" : \"minHeight\"]: minSize,\n pointerEvents: scrollDirection !== SCROLL_IDLE ? \"none\" : \"auto\",\n }}\n >\n {items}\n </Element>\n );\n }\n);\n","import { ReactElement, forwardRef } from \"react\";\nimport { ViewportComponentAttributes } from \"./types\";\nimport {\n Virtualizer,\n VirtualizerHandle,\n VirtualizerProps,\n} from \"./Virtualizer\";\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle extends VirtualizerHandle {}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps\n extends Pick<\n VirtualizerProps,\n | \"children\"\n | \"count\"\n | \"overscan\"\n | \"itemSize\"\n | \"shift\"\n | \"horizontal\"\n | \"reverse\"\n | \"cache\"\n | \"ssrCount\"\n | \"item\"\n | \"onScroll\"\n | \"onScrollEnd\"\n | \"onRangeChange\"\n >,\n ViewportComponentAttributes {}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n count,\n overscan,\n itemSize,\n shift,\n horizontal,\n reverse,\n cache,\n ssrCount,\n item,\n onScroll,\n onScrollEnd,\n onRangeChange,\n style,\n ...attrs\n },\n ref\n ): ReactElement => {\n return (\n <div\n {...attrs}\n style={{\n display: horizontal ? \"inline-block\" : \"block\",\n [horizontal ? \"overflowX\" : \"overflowY\"]: \"auto\",\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\",\n ...style,\n }}\n >\n <Virtualizer\n ref={ref}\n count={count}\n overscan={overscan}\n itemSize={itemSize}\n shift={shift}\n horizontal={horizontal}\n reverse={reverse}\n cache={cache}\n ssrCount={ssrCount}\n item={item}\n onScroll={onScroll}\n onScrollEnd={onScrollEnd}\n onRangeChange={onRangeChange}\n >\n {children}\n </Virtualizer>\n </div>\n );\n }\n);\n","import {\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n SCROLL_IDLE,\n UPDATE_SCROLL_END_EVENT,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport { getKey, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot } from \"../core/types\";\nimport { CustomContainerComponent, CustomItemComponent } from \"./types\";\nimport { ListItem } from \"./ListItem\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\nimport { useChildren } from \"./useChildren\";\n\n/**\n * Methods of {@link WindowVirtualizer}.\n */\nexport interface WindowVirtualizerHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WindowVirtualizer}.\n */\nexport interface WindowVirtualizerProps {\n /**\n * Elements rendered by this component.\n *\n * You can also pass a function and set {@link WindowVirtualizerProps.count} to create elements lazily.\n */\n children: ReactNode | ((index: number) => ReactElement);\n /**\n * If you set a function to {@link WindowVirtualizerProps.children}, you have to set total number of items to this prop.\n */\n count?: number;\n /**\n * Number of items to render above/below the visible bounds of the list. Lower value will give better performance but 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 itemSize?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are added to/removed from start. It's recommended to set false if you add to/remove from mid/end of the list because it can cause unexpected behavior. This prop is useful for reverse infinite scrolling.\n */\n shift?: boolean;\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 WindowVirtualizerHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * A prop for SSR. If set, the specified amount of items will be mounted in the initial rendering regardless of the container size until hydrated.\n */\n ssrCount?: number;\n /**\n * Component or element type for container element.\n * @defaultValue \"div\"\n */\n as?: keyof JSX.IntrinsicElements | CustomContainerComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n item?: keyof JSX.IntrinsicElements | CustomItemComponent;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollEnd?: () => 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 * {@link Virtualizer} controlled by the window scrolling. See {@link WindowVirtualizerProps} and {@link WindowVirtualizer}.\n */\nexport const WindowVirtualizer = forwardRef<\n WindowVirtualizerHandle,\n WindowVirtualizerProps\n>(\n (\n {\n children,\n count: renderCountProp,\n overscan = 4,\n itemSize,\n shift,\n horizontal: horizontalProp,\n cache,\n ssrCount,\n as: Element = \"div\",\n item: ItemElement = \"div\",\n onScrollEnd: onScrollEndProp,\n onRangeChange: onRangeChangeProp,\n },\n ref\n ): ReactElement => {\n Element = Element as \"div\";\n\n const [getElement, count] = useChildren(children, renderCountProp);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const onScrollEnd = useLatestRef(onScrollEndProp);\n\n const isSSR = useRef(!!ssrCount);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n itemSize,\n ssrCount,\n cache,\n !itemSize\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 if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count, shift]);\n }\n\n const rerender = useRerender(store);\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const totalSize = store._getTotalSize();\n\n const items: ReactElement[] = [];\n\n useIsomorphicLayoutEffect(() => {\n isSSR[refKey] = false;\n\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeStore = store._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n }\n );\n const unsubscribeOnScrollEnd = store._subscribe(\n UPDATE_SCROLL_END_EVENT,\n () => {\n onScrollEnd[refKey] && onScrollEnd[refKey]();\n }\n );\n\n const el = containerRef[refKey]!;\n resizer._observeRoot(el);\n scroller._observe(el);\n return () => {\n unsubscribeStore();\n unsubscribeOnScrollEnd();\n resizer._dispose();\n scroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n scroller._fixScrollJump();\n }, [jumpCount]);\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._getCacheSnapshot();\n },\n };\n },\n []\n );\n\n for (\n let i = overscanStartIndex(startIndex, overscan, scrollDirection),\n j = overscanEndIndex(endIndex, overscan, scrollDirection, count);\n i <= j;\n i++\n ) {\n const e = getElement(i);\n items.push(\n <ListItem\n key={getKey(e, i)}\n _resizer={resizer._observeItem}\n _index={i}\n _offset={store._getItemOffset(i)}\n _hide={store._isUnmeasuredItem(i)}\n _element={ItemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isSSR={isSSR[refKey]}\n />\n );\n }\n\n return (\n <Element\n ref={containerRef}\n style={{\n // contain: \"content\",\n flex: \"none\", // flex style on parent can break layout\n position: \"relative\",\n visibility: \"hidden\",\n width: isHorizontal ? totalSize : \"100%\",\n height: isHorizontal ? \"100%\" : totalSize,\n pointerEvents: scrollDirection !== SCROLL_IDLE ? \"none\" : \"auto\",\n }}\n >\n {items}\n </Element>\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 {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n overscanEndIndex,\n overscanStartIndex,\n createVirtualStore,\n SCROLL_IDLE,\n getScrollSize,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { ViewportComponentAttributes } from \"./types\";\nimport { flushSync } from \"react-dom\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { useRerender } from \"./useRerender\";\n\n/**\n * Props of customized scrollable component.\n */\ninterface 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\nconst DefaultViewport = 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 // contain: \"content\",\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 DefaultViewport;\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 CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _rowIndex: number;\n _colIndex: number;\n _top: number;\n _left: number;\n _height: number;\n _width: number;\n _hide: boolean;\n _element: \"div\";\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _top: top,\n _left: left,\n _height: height,\n _width: width,\n _hide: hide,\n _element: Element,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\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 [isRTLDocument() ? \"right\" : \"left\"]: left,\n visibility: hide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, hide])}\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. Lower value will give better performance but 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 * 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?: keyof JSX.IntrinsicElements | CustomCellComponent;\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 components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = {} as {\n Root?: undefined;\n Cell?: undefined;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller] = useStatic(() => {\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),\n createScroller(_hs, true),\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n if (rowCount !== vStore._getItemsLength()) {\n vStore._update(ACTION_ITEMS_LENGTH_CHANGE, [rowCount]);\n }\n if (colCount !== hStore._getItemsLength()) {\n hStore._update(ACTION_ITEMS_LENGTH_CHANGE, [colCount]);\n }\n\n const vRerender = useRerender(vStore);\n const hRerender = useRerender(hStore);\n\n const [startRowIndex, endRowIndex] = vStore._getRange();\n const [startColIndex, endColIndex] = hStore._getRange();\n const vScrollDirection = vStore._getScrollDirection();\n const hScrollDirection = hStore._getScrollDirection();\n const vJumpCount = vStore._getJumpCount();\n const hJumpCount = hStore._getJumpCount();\n const height = getScrollSize(vStore);\n const width = getScrollSize(hStore);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n // store must be subscribed first because others may dispatch update on init depending on implementation\n const unsubscribeVStore = vStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(vRerender);\n } else {\n vRerender();\n }\n }\n );\n const unsubscribeHStore = hStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n (sync) => {\n if (sync) {\n flushSync(hRerender);\n } else {\n hRerender();\n }\n }\n );\n resizer._observeRoot(root);\n vScroller._observe(root);\n hScroller._observe(root);\n return () => {\n unsubscribeVStore();\n unsubscribeHStore();\n resizer._dispose();\n vScroller._dispose();\n hScroller._dispose();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n vScroller._fixScrollJump();\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n hScroller._fixScrollJump();\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 [getScrollSize(hStore), getScrollSize(vStore)];\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 = overscanStartIndex(\n startRowIndex,\n overscan,\n vScrollDirection\n );\n const overscanedEndRowIndex = overscanEndIndex(\n endRowIndex,\n overscan,\n vScrollDirection,\n rowCount\n );\n const overscanedStartColIndex = overscanStartIndex(\n startColIndex,\n overscan,\n hScrollDirection\n );\n const overscanedEndColIndex = overscanEndIndex(\n endColIndex,\n overscan,\n hScrollDirection,\n colCount\n );\n\n const items: ReactElement[] = [];\n for (\n let rowIndex = overscanedStartRowIndex;\n rowIndex <= overscanedEndRowIndex;\n rowIndex++\n ) {\n for (\n let colIndex = overscanedStartColIndex;\n colIndex <= overscanedEndColIndex;\n colIndex++\n ) {\n items.push(\n <Cell\n key={genKey(rowIndex, colIndex)}\n _resizer={resizer}\n _rowIndex={rowIndex}\n _colIndex={colIndex}\n _top={vStore._getItemOffset(rowIndex)}\n _left={hStore._getItemOffset(colIndex)}\n _height={vStore._getItemSize(rowIndex)}\n _width={hStore._getItemSize(colIndex)}\n _hide={\n vStore._isUnmeasuredItem(rowIndex) ||\n hStore._isUnmeasuredItem(colIndex)\n }\n _element={ItemElement as \"div\"}\n _children={render(rowIndex, colIndex)}\n />\n );\n }\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={width}\n height={height}\n scrolling={\n vScrollDirection !== SCROLL_IDLE || hScrollDirection !== SCROLL_IDLE\n }\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\n overflowAnchor: \"none\", // opt out browser's scroll anchoring because it will conflict to scroll anchoring of virtualizer\n flex: \"none\", // flex style on parent can break layout\n contain: \"strict\",\n width: \"100%\",\n height: \"100%\",\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n"],"names":["min","Math","max","abs","values","Object","isArray","Array","timeout","setTimeout","clamp","value","minValue","maxValue","exists","v","microtask","queueMicrotask","fn","Promise","resolve","then","once","called","cache","args","UNCACHED","fill","array","length","prepend","key","i","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","_length","_computedOffsetIndex","_offsets","top","findIndex","offset","sum","next","computeRange","scrollOffset","prevStartIndex","viewportSize","start","updateCacheLength","isShift","diff","isAdd","shift","splice","reduce","acc","removed","isBrowser","window","getDocumentElement","document","documentElement","getCurrentDocument","node","ownerDocument","getCurrentWindow","doc","defaultView","isRTLDocument","getComputedStyle","direction","isIOSWebKit","test","navigator","userAgent","isSmoothScrollSupported","style","getScrollSize","store","_getTotalSize","_getViewportSize","overscanStartIndex","startIndex","overscan","scrollDirection","overscanEndIndex","endIndex","count","calculateJump","items","keepEnd","createVirtualStore","elementsCount","itemSize","ssrCount","cacheSnapshot","shouldAutoEstimateItemSize","startSpacerSize","endSpacerSize","isSSR","stateVersion","jumpCount","jump","pendingJump","isJumpByPrepend","_flushedJump","_scrollDirection","_scrollMode","_frozenRange","_prevRange","initCache","subscribers","Set","getTotalSize","computeTotalSize","getScrollableSize","getMaxScrollOffset","applyJump","j","_getStateVersion","_getCacheSnapshot","JSON","parse","stringify","_getRange","_isUnmeasuredItem","_hasUnmeasuredItemsInFrozenRange","slice","includes","_getItemOffset","computeStartOffset","_getItemSize","_getItemsLength","_getScrollOffset","_getScrollDirection","_getStartSpacerSize","_getEndSpacerSize","_getJumpCount","_flushJump","flushedJump","flushedIsJumpByPrepend","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldFlushPendingJump","shouldSync","mutated","updated","filter","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","distanceToEnd","nextScrollOffset","delta","distance","UPDATE_SCROLL_STATE","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","normalizeOffset","isHorizontal","createScrollObserver","viewport","getScrollOffset","updateScrollOffset","now","Date","lastScrollTime","wheeling","touching","justTouchEnded","stillMomentumScrolling","onScrollEnd","debounce","id","cancel","clearTimeout","debouncedFn","_cancel","onScroll","onWheel","e","ctrlKey","timeDelta","deltaX","deltaY","onTouchStart","onTouchEnd","addEventListener","passive","_dispose","removeEventListener","_fixScrollJump","createScroller","viewportElement","scrollObserver","cancelScroll","scrollOffsetKey","overflowKey","scheduleImperativeScroll","async","getTargetOffset","smooth","waitForMeasurement","queue","reject","promise","unsubscribe","scrollTo","behavior","_observe","isMomentumScrolling","prev","_scrollTo","_scrollBy","_scrollToIndex","align","itemOffset","createWindowScroller","container","documentBody","body","calcOffsetToViewport","offsetKey","offsetSum","innerWidth","offsetWidth","parent","offsetParent","scrollBy","refKey","children","elements","c","push","getKey","useStatic","init","ref","useRef","useLatestRef","createResizeObserver","ro","observe","_unobserve","unobserve","disconnect","createResizer","sizeKey","mountedIndexes","WeakMap","resizeObserver","entries","resizes","contentRect","get","_observeRoot","_observeItem","el","set","createWindowResizer","windowSizeKey","cleanupOnWindowResize","onWindowResize","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","ListItem","memo","_children","_resizer","resizer","_index","_offset","_hide","hide","_element","Element","_isHorizontal","_isSSR","useMemo","margin","padding","position","undefined","visibility","display","_jsx","jsx","useRerender","useReducer","useChildren","_elements","flattenChildren","Virtualizer","forwardRef","renderCountProp","horizontal","horizontalProp","reverse","startMargin","endMargin","as","item","ItemElement","scrollRef","onScrollProp","onScrollEndProp","onRangeChange","onRangeChangeProp","getElement","containerRef","scroller","_store","rerender","totalSize","minSize","getMinContainerSize","reverseOffset","unsubscribeStore","sync","flushSync","unsubscribeOnScroll","unsubscribeOnScrollEnd","assignScrollableElement","parentElement","useImperativeHandle","scrollSize","scrollToIndex","overflowAnchor","flex","width","height","pointerEvents","VList","attrs","contain","WindowVirtualizer","DefaultViewport","scrolling","genKey","Cell","_rowIndex","_colIndex","_top","_left","left","_height","_width","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","components","Root","Viewport","viewportAttrs","vScroller","hScroller","_vs","_hs","vRerender","hRerender","startRowIndex","endRowIndex","startColIndex","endColIndex","vScrollDirection","hScrollDirection","vJumpCount","hJumpCount","rootRef","root","unsubscribeVStore","unsubscribeHStore","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex","overflow"],"mappings":"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"}
|