virtua 0.16.0 → 0.16.2

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 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/Viewport.tsx","../src/src/react/ListItem.tsx","../src/src/react/useRerender.ts","../src/src/react/VList.tsx","../src/src/react/WVList.tsx","../src/src/react/VGrid.tsx"],"sourcesContent":["export const min = Math.min;\nexport const max = Math.max;\nexport const abs = Math.abs;\nexport const now = Date.now;\nexport const values = Object.values;\nexport const isArray = Array.isArray;\nexport const timeout = setTimeout;\n\nexport const clamp = (\n value: number,\n minValue: number,\n maxValue: number\n): number => min(maxValue, max(minValue, value));\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: NodeJS.Timeout | undefined | null;\n\n const cancel = () => {\n if (exists(id)) {\n clearTimeout(id);\n }\n };\n const debouncedFn = () => {\n cancel();\n id = timeout(() => {\n id = null;\n fn();\n }, ms);\n };\n debouncedFn._cancel = cancel;\n return debouncedFn;\n};\n\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n\n// wrap for SSR\nexport const computeStyle = (e: HTMLElement) => getComputedStyle(e);\n\nexport const getStyleNumber = (v: string): number => {\n if (v) {\n return parseFloat(v);\n } else {\n return 0;\n }\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { clamp, median, min } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _computedOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._computedOffsetIndex = min(index, cache._computedOffsetIndex);\n return isInitialMeasurement;\n};\n\nexport const computeOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n if (!cache._length) return 0;\n if (cache._computedOffsetIndex >= index) {\n return cache._offsets[index]!;\n }\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\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n if (!cache._length) return 0;\n return (\n computeOffset(cache, cache._length - 1) +\n getItemSize(cache, cache._length - 1)\n );\n};\n\nexport const findIndex = (\n cache: Writeable<Cache>,\n offset: number,\n i: number\n): 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\nexport const computeRange = (\n cache: Writeable<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\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nconst appendCache = (\n cache: Writeable<Cache>,\n length: number,\n prepend?: boolean\n) => {\n const key = prepend ? \"unshift\" : \"push\";\n for (let i = cache._length; i < length; i++) {\n cache._sizes[key](UNCACHED);\n // first offset must be 0\n cache._offsets.push(i === 0 ? 0 : UNCACHED);\n }\n cache._length = length;\n};\n\nexport const initCache = (length: number, itemSize: number): Cache => {\n const cache: Cache = {\n _defaultItemSize: itemSize,\n _length: 0,\n _computedOffsetIndex: 0,\n _sizes: [],\n _offsets: [],\n };\n appendCache(cache as Writeable<Cache>, length);\n return cache;\n};\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 isRemove = diff < 0;\n let shift: number;\n if (isRemove) {\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 } else {\n // Added\n shift = cache._defaultItemSize * diff;\n appendCache(cache, cache._length + diff, isShift);\n }\n\n cache._computedOffsetIndex = isShift\n ? // Discard cache for now\n 0\n : // measuredOffsetIndex shouldn't be less than 0 because it makes scrollSize NaN and cause infinite rerender.\n // https://github.com/inokawa/virtua/pull/160\n clamp(length - 1, 0, cache._computedOffsetIndex);\n cache._length = length;\n return [shift, isRemove];\n};\n","import { computeStyle, once } from \"./utils\";\n\nexport const isBrowser = typeof window !== \"undefined\";\n\nconst getDocumentRoot = () => document.documentElement;\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRTL = /*#__PURE__*/ once(\n (scrollable: HTMLElement): boolean => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n }\n);\n\nexport const isRTLDocument = /*#__PURE__*/ once((): boolean => {\n // TODO support SSR in rtl\n return isBrowser\n ? computeStyle(getDocumentRoot()).direction === \"rtl\"\n : false;\n});\n\n// Currently, all browsers on iOS/iPadOS are WebKit, including WebView.\nexport const isIOSWebKit = /*#__PURE__*/ once((): boolean => {\n return /iP(hone|od|ad)/.test(navigator.userAgent);\n});\n\nexport const isSmoothScrollSupported = /*#__PURE__*/ once((): boolean => {\n return \"scrollBehavior\" in getDocumentRoot().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, Writeable } from \"./types\";\nimport { abs, clamp, max, min } from \"./utils\";\n\nexport type ScrollJump = number;\ntype ViewportResize = [size: number, paddingStart: number, paddingEnd: number];\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\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\n// Scroll offset and sizes can have sub-pixel value if window.devicePixelRatio has decimal value\nconst SUBPIXEL_THRESHOLD = 1.5; // 0.5 * 3\n\nexport const SCROLL_IDLE = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\nexport type ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_VIEWPORT_RESIZE = 2;\nexport const ACTION_ITEMS_LENGTH_CHANGE = 3;\nexport const ACTION_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\nexport const ACTION_MANUAL_SCROLL = 6;\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: ViewportResize]\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\ntype Subscriber = (sync?: boolean) => void;\n\nexport const UPDATE_SCROLL_STATE = 0b0001;\nexport const UPDATE_SIZE_STATE = 0b0010;\nexport const UPDATE_SCROLL_WITH_EVENT = 0b0100;\n\nexport type VirtualStore = {\n _getCache(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInSmoothScrollRange(): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemsLength(): number;\n _getScrollOffset(): number;\n _getScrollOffsetMax(): number;\n _getScrollDirection(): ScrollDirection;\n _getViewportSize(): number;\n _getViewportPaddingStart(): number;\n _getCorrectedScrollSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump;\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number = 40,\n initialItemCount: number = 0,\n cache: Cache = initCache(elementsCount, itemSize),\n isReverse?: boolean,\n shouldAutoEstimateItemSize?: boolean\n): VirtualStore => {\n let viewportSize = itemSize * max(initialItemCount - 1, 0);\n let paddingStart = 0;\n let paddingEnd = 0;\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump = 0;\n let pendingJump: ScrollJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _isManualScrolling = false;\n let _smoothScrollRange: ItemsRange | null = null;\n let _maybeJumped = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n\n const subscribers = new Set<[number, Subscriber]>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const getScrollOffsetMax = () =>\n getScrollSize() - viewportSize + paddingStart + paddingEnd;\n\n const clampScrollOffset = (value: number): number => {\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n return clamp(value, 0, getScrollOffsetMax());\n };\n const applyJump = (j: ScrollJump) => {\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 const updateScrollDirection = (dir: ScrollDirection): boolean => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n // Return true if scrolling is just started or stopped\n return _scrollDirection !== prev;\n };\n\n return {\n _getCache() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n if (_smoothScrollRange) {\n return [\n min(_prevRange[0], _smoothScrollRange[0]),\n max(_prevRange[1], _smoothScrollRange[1]),\n ];\n }\n return (_prevRange = computeRange(\n cache as Writeable<Cache>,\n scrollOffset + pendingJump,\n _prevRange[0],\n viewportSize\n ));\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInSmoothScrollRange() {\n if (!_smoothScrollRange) return false;\n return cache._sizes\n .slice(\n max(0, _smoothScrollRange[0] - 1),\n min(cache._length - 1, _smoothScrollRange[1] + 1) + 1\n )\n .includes(UNCACHED);\n },\n _getItemOffset(index) {\n const offset =\n computeStartOffset(cache as Writeable<Cache>, index) - pendingJump;\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemsLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollOffsetMax: getScrollOffsetMax,\n _getScrollDirection() {\n return _scrollDirection;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getViewportPaddingStart() {\n return paddingStart;\n },\n _getCorrectedScrollSize() {\n return max(getScrollSize(), viewportSize);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = 0;\n return prevJump;\n },\n _subscribe(target, cb) {\n const sub: [number, Subscriber] = [target, cb];\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n _update(type, payload): void {\n let 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 // 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 > getScrollOffsetMax() - SUBPIXEL_THRESHOLD) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated, true);\n } else {\n const [startIndex] = _prevRange;\n // Keep start at mid\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\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 as Writeable<Cache>, index, size)) {\n isNewItemMeasured = true;\n }\n });\n\n // Estimate initial item size from measured sizes\n if (\n shouldAutoEstimateItemSize &&\n isNewItemMeasured &&\n // TODO support reverse scroll also\n !scrollOffset\n ) {\n estimateDefaultItemSize(cache as Writeable<Cache>);\n }\n mutated += UPDATE_SIZE_STATE;\n _maybeJumped = shouldSync = true;\n break;\n }\n case ACTION_VIEWPORT_RESIZE: {\n const total = payload[0] + payload[1] + payload[2];\n if (viewportSize !== total) {\n viewportSize = total;\n paddingStart = payload[1];\n paddingEnd = payload[2];\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 = getScrollOffsetMax() - scrollOffset;\n\n const [shift, isRemove] = updateCacheLength(\n cache as Writeable<Cache>,\n payload[0],\n true\n );\n const diff = isRemove ? -min(shift, distanceToEnd) : shift;\n applyJump(diff);\n if (!isIOSWebKit()) {\n scrollOffset = clampScrollOffset(scrollOffset + diff);\n }\n\n mutated = UPDATE_SCROLL_STATE;\n } else {\n updateCacheLength(cache as Writeable<Cache>, payload[0]);\n }\n break;\n }\n case ACTION_SCROLL: {\n // Skip if offset is not changed\n if (payload === scrollOffset) {\n break;\n }\n\n const delta = payload - scrollOffset;\n // Scrolling after resizing will be caused by jump compensation\n const isJustJumped = _maybeJumped;\n _maybeJumped = false;\n\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n if (\n (_scrollDirection === SCROLL_IDLE || !isJustJumped) &&\n // Ignore until manual scrolling\n !_isManualScrolling\n ) {\n updateScrollDirection(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 // Ignore manual scroll because it may be called in useEffect/useLayoutEffect and cause the warn below.\n // Warning: flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\n //\n // Update synchronously if scrolled a lot\n shouldSync = abs(delta) > viewportSize;\n\n mutated += UPDATE_SCROLL_WITH_EVENT;\n\n scrollOffset = clampScrollOffset(payload);\n mutated += UPDATE_SCROLL_STATE;\n break;\n }\n case ACTION_SCROLL_END: {\n if (updateScrollDirection(SCROLL_IDLE)) {\n shouldFlushPendingJump = true;\n mutated = UPDATE_SCROLL_STATE;\n }\n _isManualScrolling = false;\n _smoothScrollRange = null;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _isManualScrolling = true;\n break;\n }\n case ACTION_BEFORE_MANUAL_SMOOTH_SCROLL: {\n _smoothScrollRange = computeRange(\n cache as Writeable<Cache>,\n payload,\n _prevRange[0],\n viewportSize\n );\n mutated = UPDATE_SCROLL_STATE;\n break;\n }\n }\n\n if (mutated) {\n if (shouldFlushPendingJump && pendingJump) {\n _maybeJumped = true;\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// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","import {\n hasNegativeOffsetInRTL,\n isIOSWebKit,\n isRTLDocument,\n isSmoothScrollSupported,\n} from \"./environment\";\nimport {\n ACTION_SCROLL,\n ScrollJump,\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, throttle, timeout, clamp } from \"./utils\";\n\n// Infer scroll state also from wheel events\n// Sometimes scroll events do not fire when frame dropped even if the visual have been already scrolled\nconst createOnWheel = (\n store: VirtualStore,\n isHorizontal: boolean,\n onScrollStopped: () => void\n) => {\n return throttle((e: WheelEvent) => {\n if (store._getScrollDirection() === SCROLL_IDLE) {\n // Scroll start should be detected with scroll event\n return;\n }\n if (e.ctrlKey) {\n // Probably a pinch-to-zoom gesture\n return;\n }\n // Get delta before checking deltaMode for firefox behavior\n // https://github.com/w3c/uievents/issues/181#issuecomment-392648065\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1392460#c34\n if (isHorizontal ? e.deltaX : e.deltaY) {\n const offset = store._getScrollOffset();\n if (offset > 0 && offset < store._getScrollOffsetMax()) {\n onScrollStopped();\n }\n }\n }, 50);\n};\n\nconst normalizeRTLOffset = (\n rootElement: HTMLElement,\n store: VirtualStore,\n offset: number,\n diff?: boolean\n): number => {\n if (hasNegativeOffsetInRTL(rootElement)) {\n return -offset;\n } else {\n return diff ? -offset : store._getScrollOffsetMax() - offset;\n }\n};\n\nexport type Scroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _scrollTo: (offset: number) => void;\n _scrollBy: (offset: number) => void;\n _scrollToIndex: (index: number, opts?: ScrollToIndexOpts) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n let cancelScroll: (() => void) | undefined;\n let stillMomentumScrolling = false;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return normalizeRTLOffset(rootElement!, store, offset, diff);\n }\n return offset;\n };\n\n const scrollManually = async (getOffset: () => number, smooth?: boolean) => {\n if (!rootElement) return;\n\n if (cancelScroll) {\n // Cancel waiting scrollTo\n cancelScroll();\n }\n\n const getTargetOffset = (): number => {\n // Adjust if the offset is over the end, to get correct startIndex.\n return clamp(getOffset(), 0, store._getScrollOffsetMax());\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._hasUnmeasuredItemsInSmoothScrollRange()) {\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 rootElement.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: normalizeOffset(getTargetOffset()),\n behavior: \"smooth\",\n });\n } else {\n while (true) {\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n rootElement[scrollToKey] = normalizeOffset(getTargetOffset());\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 _initRoot(root) {\n rootElement = root;\n\n let touching = false;\n let justTouchEnded = false;\n\n const onScrollStopped = debounce(() => {\n if (touching) {\n // Wait while touching\n onScrollStopped();\n return;\n }\n\n justTouchEnded = false;\n\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n if (justTouchEnded) {\n stillMomentumScrolling = true;\n }\n\n store._update(ACTION_SCROLL, normalizeOffset(root[scrollToKey]));\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\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 root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n root.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n root.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"touchstart\", onTouchStart);\n root.removeEventListener(\"touchend\", onTouchEnd);\n onScrollStopped._cancel();\n };\n },\n _scrollTo(offset) {\n scrollManually(() => offset);\n },\n _scrollBy(offset) {\n offset += store._getScrollOffset();\n scrollManually(() => 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 scrollManually(() => {\n if (align === \"end\") {\n return (\n store._getViewportPaddingStart() +\n store._getItemOffset(index) +\n store._getItemSize(index) -\n store._getViewportSize()\n );\n } else if (align === \"center\") {\n return (\n store._getViewportPaddingStart() +\n store._getItemOffset(index) +\n (store._getItemSize(index) - store._getViewportSize()) / 2\n );\n } else {\n return store._getViewportPaddingStart() + store._getItemOffset(index);\n }\n }, smooth);\n },\n _fixScrollJump: (jump) => {\n if (!rootElement) return;\n\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 (stillMomentumScrolling) {\n stillMomentumScrolling = false;\n\n const style = rootElement.style;\n const prev = style.overflow;\n style.overflow = \"hidden\";\n timeout(() => {\n style.overflow = prev;\n });\n }\n\n rootElement[scrollToKey] += normalizeOffset(jump, true);\n },\n };\n};\n\nexport type WindowScroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n let rootElement: HTMLElement | undefined;\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return normalizeRTLOffset(rootElement!, store, offset, diff);\n }\n return offset;\n };\n\n return {\n _initRoot(root) {\n rootElement = root;\n\n // TODO calc offset only when it changes (maybe impossible)\n const getOffsetToWindow = (node: HTMLElement, offset: number): number => {\n const nodeOffset =\n offset +\n (isHorizontal && isRTLDocument()\n ? window.innerWidth - node[offsetKey] - node.offsetWidth\n : node[offsetKey]);\n\n const parent = node.offsetParent;\n if (node === document.body || !parent) {\n return nodeOffset;\n }\n\n return getOffsetToWindow(parent as HTMLElement, nodeOffset);\n };\n\n const onScrollStopped = debounce(() => {\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n store._update(\n ACTION_SCROLL,\n normalizeOffset(window[scrollToKey]) - getOffsetToWindow(root, 0)\n );\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n window.addEventListener(\"scroll\", onScroll);\n window.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _fixScrollJump: (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(\n isHorizontal ? normalizeOffset(jump, true) : 0,\n isHorizontal ? 0 : jump\n );\n },\n };\n};\n","import { ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists, max, min, isArray } from \"../core/utils\";\nimport { SCROLL_DOWN, SCROLL_UP, ScrollDirection } from \"../core/store\";\n\nexport const refKey = \"current\";\n\nexport const emptyComponents = {};\n\ntype ItemElement = ReactElement | ReactFragment | string | number;\n\nconst forEach = (children: ReactNode, elements: ItemElement[]) => {\n if (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// 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\nexport const flattenChildren = (children: ReactNode): ItemElement[] => {\n const elements: ItemElement[] = [];\n forEach(children, elements);\n return elements;\n};\n\nexport type MayHaveKey = { key?: React.Key };\n\nexport const clampStartIndex = (\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\nexport const clampEndIndex = (\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","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useLatestRef = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_VIEWPORT_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, computeStyle, getStyleNumber, max, once } from \"./utils\";\n\nconst rootObserveOpts: ResizeObserverOptions = { box: \"border-box\" };\n\nexport interface ListResizer {\n _observeRoot(root: HTMLElement): () => void;\n _observeItem(el: HTMLElement, i: number): () => void;\n}\n\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === rootElement) {\n store._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[sizeKey],\n contentRect[isHorizontal ? \"left\" : \"top\"],\n // contentRect doesn't have paddingRight/paddingBottom so get them from computed style\n // https://www.w3.org/TR/resize-observer/#css-definitions\n getStyleNumber(\n computeStyle(rootElement)[\n isHorizontal ? \"paddingRight\" : \"paddingBottom\"\n ]\n ),\n ]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root, rootObserveOpts);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // 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\n return {\n _observeRoot() {\n const cb = () => {\n store._update(ACTION_VIEWPORT_RESIZE, [window[windowSizeKey], 0, 0]);\n };\n window.addEventListener(\"resize\", cb);\n cb();\n return () => {\n window.removeEventListener(\"resize\", cb);\n getResizeObserver().disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === rootElement) {\n // contentRect doesn't have paddingRight/paddingBottom so get them from computed style\n // https://www.w3.org/TR/resize-observer/#css-definitions\n // TODO subtract scroll bar width/height\n // https://github.com/w3c/csswg-drafts/issues/3536\n const style = computeStyle(rootElement);\n vStore._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[heightKey],\n contentRect.top,\n getStyleNumber(style.paddingBottom),\n ]);\n hStore._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[widthKey],\n contentRect.left,\n getStyleNumber(style.paddingRight),\n ]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root, rootObserveOpts);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type ViewportComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\" | \"onKeyDown\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomViewportComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: ViewportComponentAttributes;\n /**\n * Total height of items. It's undefined if component is not vertically scrollable.\n */\n height: number | undefined;\n /**\n * Total width of items. It's undefined if component is not horizontally scrollable.\n */\n width: number | undefined;\n /**\n * Currently component is scrolling or not.\n */\n scrolling: boolean;\n}\n\nexport const Viewport = forwardRef<any, CustomViewportComponentProps>(\n ({ children, attrs, width, height, scrolling }, ref): ReactElement => {\n return (\n <div ref={ref} {...attrs}>\n <div\n style={useMemo((): CSSProperties => {\n return {\n position: \"relative\",\n visibility: \"hidden\",\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n pointerEvents: scrolling ? \"none\" : \"auto\",\n };\n }, [width, height, scrolling])}\n >\n {children}\n </div>\n </div>\n );\n }\n);\n\nexport type CustomViewportComponent = typeof Viewport;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { ListResizer } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\nimport { isRTLDocument } from \"../core/environment\";\n\n/**\n * Props of customized item component for {@link VList}.\n */\nexport interface CustomItemComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomItemComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomItemComponentProps> & React.RefAttributes<any>\n>;\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ListResizer;\n _index: number;\n _offset: number;\n _hide: boolean;\n _element: \"div\";\n _isHorizontal: boolean;\n};\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 }: 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(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : \"left\"]: 0,\n [isHorizontal ? (isRTLDocument() ? \"right\" : \"left\") : \"top\"]:\n offset,\n visibility: hide ? \"hidden\" : \"visible\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n","import { useReducer } from \"react\";\n\nconst update = () => [];\n\nexport const useRerender = (): (() => void) => {\n return useReducer(update, undefined, update)[1];\n};\n","import {\n useRef,\n useMemo,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n} from \"react\";\nimport {\n UPDATE_SCROLL_WITH_EVENT,\n ACTION_ITEMS_LENGTH_CHANGE,\n createVirtualStore,\n UPDATE_SIZE_STATE,\n UPDATE_SCROLL_STATE,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { exists, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport {\n MayHaveKey,\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n flattenChildren,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createResizer } from \"../core/resizer\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { CacheSnapshot, ScrollToIndexOpts } from \"../core/types\";\nimport { Cache } from \"../core/cache\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n * @param 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 VList}.\n */\nexport interface VListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are shifted/unshifted. It 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, some styles will be adjusted to be suitable for bottom-to-top scrolling.\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 VListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked whenever scroll offset changes.\n * @param offset Current scrollTop or scrollLeft.\n */\n onScroll?: (offset: number) => void;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n shift,\n horizontal: horizontalProp,\n reverse: reverseProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScroll = useLatestRef(onScrollProp);\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n !!reverseProp,\n !initialItemSize\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();\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const scrollSize = store._getCorrectedScrollSize();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrolling = scrollDirection !== SCROLL_IDLE;\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 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(\n UPDATE_SCROLL_WITH_EVENT,\n () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n }\n );\n const cleanupResizer = resizer._observeRoot(root);\n const cleanupScroller = scroller._initRoot(root);\n return () => {\n unsubscribeStore();\n unsubscribeOnScroll();\n cleanupResizer();\n cleanupScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return store._getCorrectedScrollSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex: scroller._scrollToIndex,\n scrollTo: scroller._scrollTo,\n scrollBy: scroller._scrollBy,\n };\n },\n []\n );\n\n const overscanedStartIndex = clampStartIndex(\n startIndex,\n overscan,\n scrollDirection\n );\n const overscanedEndIndex = clampEndIndex(\n endIndex,\n overscan,\n scrollDirection,\n count\n );\n\n const items: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n items.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\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 />\n );\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n [isHorizontal ? \"overflowX\" : \"overflowY\"]: \"auto\",\n display: isHorizontal ? \"inline-block\" : \"block\",\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","import {\n useRef,\n useMemo,\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n createVirtualStore,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { exists, values } from \"../core/utils\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport {\n MayHaveKey,\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n flattenChildren,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot } from \"../core/types\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { Cache } from \"../core/cache\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link WVList}.\n */\nexport interface WVListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WVList}.\n */\nexport interface WVListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link WVListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component controlled by the window scrolling. See {@link WVListProps} and {@link WVListHandle}.\n */\nexport const WVList = forwardRef<WVListHandle, WVListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n false,\n !initialItemSize\n );\n\n return [\n _store,\n createWindowResizer(_store, _isHorizontal),\n createWindowScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count]);\n }\n\n const rerender = useRerender();\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const scrollSize = store._getCorrectedScrollSize();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrolling = scrollDirection !== SCROLL_IDLE;\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 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 cleanupResizer = resizer._observeRoot(root);\n const cleanupScroller = scroller._initRoot(root);\n return () => {\n unsubscribeStore();\n cleanupResizer();\n cleanupScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n };\n },\n []\n );\n\n const overscanedStartIndex = clampStartIndex(\n startIndex,\n overscan,\n scrollDirection\n );\n const overscanedEndIndex = clampEndIndex(\n endIndex,\n overscan,\n scrollDirection,\n count\n );\n\n const items: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n items.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\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 />\n );\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n display: isHorizontal ? \"inline-block\" : \"block\",\n width: isHorizontal ? \"auto\" : \"100%\",\n height: isHorizontal ? \"100%\" : \"auto\",\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n createVirtualStore,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport {\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport {\n Viewport as DefaultViewport,\n CustomViewportComponent,\n CustomViewportComponentProps,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { flushSync } from \"react-dom\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { useRerender } from \"./useRerender\";\n\nconst genKey = (i: number, j: number) => `${i}-${j}`;\n\n/**\n * Props of customized cell component for {@link VGrid}.\n */\nexport interface CustomCellComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomCellComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomCellComponentProps> & React.RefAttributes<any>\n>;\n\ntype CustomCellComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomCellComponent;\n\ntype CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _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. 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?: CustomCellComponentOrElement;\n };\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Cell?: undefined;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller] = 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 rerender = useRerender();\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 = vStore._getCorrectedScrollSize();\n const width = hStore._getCorrectedScrollSize();\n const rootRef = useRef<HTMLDivElement>(null);\n const vScrolling = vScrollDirection !== SCROLL_IDLE;\n const hScrolling = hScrollDirection !== SCROLL_IDLE;\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const onRerender = (sync?: boolean) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n };\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 onRerender\n );\n const unsubscribeHStore = hStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n onRerender\n );\n const cleanUpResizer = resizer._observeRoot(root);\n const cleanupVScroller = vScroller._initRoot(root);\n const cleanupHScroller = hScroller._initRoot(root);\n return () => {\n unsubscribeVStore();\n unsubscribeHStore();\n cleanUpResizer();\n cleanupVScroller();\n cleanupHScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [\n hStore._getCorrectedScrollSize(),\n vStore._getCorrectedScrollSize(),\n ];\n },\n get viewportSize(): [number, number] {\n return [hStore._getViewportSize(), vStore._getViewportSize()];\n },\n scrollToIndex(indexX, indexY) {\n hScroller._scrollToIndex(indexX);\n vScroller._scrollToIndex(indexY);\n },\n scrollTo(offsetX, offsetY) {\n hScroller._scrollTo(offsetX);\n vScroller._scrollTo(offsetY);\n },\n scrollBy(offsetX, offsetY) {\n hScroller._scrollBy(offsetX);\n vScroller._scrollBy(offsetY);\n },\n };\n },\n []\n );\n\n const render = useMemo(() => {\n const cache = new Map<string, ReactNode>();\n return (rowIndex: number, colIndex: number) => {\n let e: ReactNode | undefined = cache.get(genKey(rowIndex, colIndex));\n if (!e) {\n cache.set(\n genKey(rowIndex, colIndex),\n (e = children({ rowIndex, colIndex }))\n );\n }\n return e;\n };\n }, [children]);\n\n const overscanedStartRowIndex = clampStartIndex(\n startRowIndex,\n overscan,\n vScrollDirection\n );\n const overscanedEndRowIndex = clampEndIndex(\n endRowIndex,\n overscan,\n vScrollDirection,\n rowCount\n );\n const overscanedStartColIndex = clampStartIndex(\n startColIndex,\n overscan,\n hScrollDirection\n );\n const overscanedEndColIndex = clampEndIndex(\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={vScrolling || hScrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\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","now","Date","values","Object","isArray","Array","timeout","setTimeout","clamp","value","minValue","maxValue","exists","v","debounce","fn","ms","id","cancel","clearTimeout","debouncedFn","_cancel","once","called","cache","args","computeStyle","e","getComputedStyle","getStyleNumber","parseFloat","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","_length","_computedOffsetIndex","_offsets","i","top","findIndex","offset","sum","next","computeRange","scrollOffset","prevStartIndex","viewportSize","start","appendCache","length","prepend","key","push","updateCacheLength","isShift","diff","isRemove","shift","splice","reduce","acc","removed","isBrowser","window","getDocumentRoot","document","documentElement","hasNegativeOffsetInRTL","scrollable","prev","isNegative","isRTLDocument","direction","isIOSWebKit","test","navigator","userAgent","isSmoothScrollSupported","style","calculateJump","items","keepEnd","createVirtualStore","elementsCount","itemSize","initialItemCount","initCache","isReverse","shouldAutoEstimateItemSize","paddingStart","paddingEnd","jumpCount","jump","pendingJump","_scrollDirection","_isManualScrolling","_smoothScrollRange","_maybeJumped","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","getScrollOffsetMax","clampScrollOffset","applyJump","j","updateScrollDirection","dir","_getCache","JSON","parse","stringify","_getRange","_isUnmeasuredItem","_hasUnmeasuredItemsInSmoothScrollRange","slice","includes","_getItemOffset","computeStartOffset","_getItemSize","_getItemsLength","_getScrollOffset","_getScrollOffsetMax","_getScrollDirection","_getViewportSize","_getViewportPaddingStart","_getCorrectedScrollSize","_getJumpCount","_flushJump","prevJump","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldFlushPendingJump","shouldSync","mutated","updated","filter","startIndex","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","total","distanceToEnd","delta","isJustJumped","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","createOnWheel","store","isHorizontal","onScrollStopped","throttle","time","n","ctrlKey","deltaX","deltaY","normalizeRTLOffset","rootElement","createScroller","cancelScroll","stillMomentumScrolling","scrollToKey","normalizeOffset","scrollManually","async","getOffset","smooth","getTargetOffset","waitForMeasurement","queue","Promise","resolve","reject","promise","unsubscribe","scrollTo","behavior","_initRoot","root","touching","justTouchEnded","onScroll","onWheel","onTouchStart","onTouchEnd","addEventListener","passive","removeEventListener","_scrollTo","_scrollBy","_scrollToIndex","align","itemOffset","_fixScrollJump","overflow","createWindowScroller","offsetKey","getOffsetToWindow","node","nodeOffset","innerWidth","offsetWidth","parent","offsetParent","body","scrollBy","refKey","emptyComponents","children","elements","c","flattenChildren","clampStartIndex","overscan","scrollDirection","clampEndIndex","endIndex","count","useStatic","init","ref","useRef","useLatestRef","rootObserveOpts","box","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","contentRect","get","_observeRoot","ro","observe","disconnect","_observeItem","el","set","unobserve","createWindowResizer","windowSizeKey","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","paddingBottom","left","paddingRight","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","Viewport","forwardRef","attrs","width","height","scrolling","_jsx","jsx","useMemo","position","visibility","pointerEvents","ListItem","memo","_children","_resizer","resizer","_index","_offset","_hide","hide","_element","Element","_isHorizontal","margin","padding","display","update","useRerender","useReducer","undefined","VList","initialItemSize","horizontal","horizontalProp","reverse","reverseProp","components","Root","DefaultViewport","Item","ItemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","viewportAttrs","scroller","_store","rerender","scrollSize","rootRef","unsubscribeStore","UPDATE_SCROLL_STATE","sync","flushSync","unsubscribeOnScroll","cleanupResizer","cleanupScroller","useImperativeHandle","scrollToIndex","overscanedStartIndex","overscanedEndIndex","contain","WVList","genKey","Cell","_rowIndex","_colIndex","_top","_left","_height","_width","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","vScroller","hScroller","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","vScrollDirection","hScrollDirection","vJumpCount","hJumpCount","vScrolling","hScrolling","onRerender","unsubscribeVStore","unsubscribeHStore","cleanUpResizer","cleanupVScroller","cleanupHScroller","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex"],"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/Viewport.tsx","../src/src/react/ListItem.tsx","../src/src/react/useRerender.ts","../src/src/react/VList.tsx","../src/src/react/WVList.tsx","../src/src/react/VGrid.tsx"],"sourcesContent":["export const min = Math.min;\nexport const max = Math.max;\nexport const abs = Math.abs;\nexport const now = Date.now;\nexport const values = Object.values;\nexport const isArray = Array.isArray;\nexport const timeout = setTimeout;\n\nexport const clamp = (\n value: number,\n minValue: number,\n maxValue: number\n): number => min(maxValue, max(minValue, value));\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: 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\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n\n// wrap for SSR\nexport const computeStyle = (e: HTMLElement) => getComputedStyle(e);\n\nexport const getStyleNumber = (v: string): number => {\n if (v) {\n return parseFloat(v);\n } else {\n return 0;\n }\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { clamp, median, min } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _computedOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._computedOffsetIndex = min(index, cache._computedOffsetIndex);\n return isInitialMeasurement;\n};\n\nexport const computeOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n if (!cache._length) return 0;\n if (cache._computedOffsetIndex >= index) {\n return cache._offsets[index]!;\n }\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\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n if (!cache._length) return 0;\n return (\n computeOffset(cache, cache._length - 1) +\n getItemSize(cache, cache._length - 1)\n );\n};\n\nexport const findIndex = (\n cache: Writeable<Cache>,\n offset: number,\n i: number\n): 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\nexport const computeRange = (\n cache: Writeable<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\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nconst appendCache = (\n cache: Writeable<Cache>,\n length: number,\n prepend?: boolean\n) => {\n const key = prepend ? \"unshift\" : \"push\";\n for (let i = cache._length; i < length; i++) {\n cache._sizes[key](UNCACHED);\n // first offset must be 0\n cache._offsets.push(i === 0 ? 0 : UNCACHED);\n }\n cache._length = length;\n};\n\nexport const initCache = (length: number, itemSize: number): Cache => {\n const cache: Cache = {\n _defaultItemSize: itemSize,\n _length: 0,\n _computedOffsetIndex: 0,\n _sizes: [],\n _offsets: [],\n };\n appendCache(cache as Writeable<Cache>, length);\n return cache;\n};\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 isRemove = diff < 0;\n let shift: number;\n if (isRemove) {\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 } else {\n // Added\n shift = cache._defaultItemSize * diff;\n appendCache(cache, cache._length + diff, isShift);\n }\n\n cache._computedOffsetIndex = isShift\n ? // Discard cache for now\n 0\n : // measuredOffsetIndex shouldn't be less than 0 because it makes scrollSize NaN and cause infinite rerender.\n // https://github.com/inokawa/virtua/pull/160\n clamp(length - 1, 0, cache._computedOffsetIndex);\n cache._length = length;\n return [shift, isRemove];\n};\n","import { computeStyle, once } from \"./utils\";\n\nexport const isBrowser = typeof window !== \"undefined\";\n\nconst getDocumentRoot = () => document.documentElement;\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRTL = /*#__PURE__*/ once(\n (scrollable: HTMLElement): boolean => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n }\n);\n\nexport const isRTLDocument = /*#__PURE__*/ once((): boolean => {\n // TODO support SSR in rtl\n return isBrowser\n ? computeStyle(getDocumentRoot()).direction === \"rtl\"\n : false;\n});\n\n// Currently, all browsers on iOS/iPadOS are WebKit, including WebView.\nexport const isIOSWebKit = /*#__PURE__*/ once((): boolean => {\n return /iP(hone|od|ad)/.test(navigator.userAgent);\n});\n\nexport const isSmoothScrollSupported = /*#__PURE__*/ once((): boolean => {\n return \"scrollBehavior\" in getDocumentRoot().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, Writeable } from \"./types\";\nimport { abs, clamp, max, min } from \"./utils\";\n\nexport type ScrollJump = number;\ntype ViewportResize = [size: number, paddingStart: number, paddingEnd: number];\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\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\n// Scroll offset and sizes can have sub-pixel value if window.devicePixelRatio has decimal value\nconst SUBPIXEL_THRESHOLD = 1.5; // 0.5 * 3\n\nexport const SCROLL_IDLE = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\nexport type ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_VIEWPORT_RESIZE = 2;\nexport const ACTION_ITEMS_LENGTH_CHANGE = 3;\nexport const ACTION_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\nexport const ACTION_MANUAL_SCROLL = 6;\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: ViewportResize]\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\ntype Subscriber = (sync?: boolean) => void;\n\nexport const UPDATE_SCROLL_STATE = 0b0001;\nexport const UPDATE_SIZE_STATE = 0b0010;\nexport const UPDATE_SCROLL_WITH_EVENT = 0b0100;\n\nexport type VirtualStore = {\n _getCache(): CacheSnapshot;\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInSmoothScrollRange(): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getItemsLength(): number;\n _getScrollOffset(): number;\n _getScrollOffsetMax(): number;\n _getScrollDirection(): ScrollDirection;\n _getViewportSize(): number;\n _getViewportPaddingStart(): number;\n _getTotalSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump;\n _subscribe(target: number, cb: Subscriber): () => void;\n _update(...action: Actions): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number = 40,\n initialItemCount: number = 0,\n cache: Cache = initCache(elementsCount, itemSize),\n isReverse?: boolean,\n shouldAutoEstimateItemSize?: boolean\n): VirtualStore => {\n let viewportSize = itemSize * max(initialItemCount - 1, 0);\n let paddingStart = 0;\n let paddingEnd = 0;\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump = 0;\n let pendingJump: ScrollJump = 0;\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _isManualScrolling = false;\n let _smoothScrollRange: ItemsRange | null = null;\n let _maybeJumped = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n\n const subscribers = new Set<[number, Subscriber]>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const getScrollOffsetMax = () =>\n getScrollSize() - viewportSize + paddingStart + paddingEnd;\n\n const clampScrollOffset = (value: number): number => {\n // Scroll offset may exceed min or max especially in Safari's elastic scrolling.\n return clamp(value, 0, getScrollOffsetMax());\n };\n const applyJump = (j: ScrollJump) => {\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 const updateScrollDirection = (dir: ScrollDirection): boolean => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n // Return true if scrolling is just started or stopped\n return _scrollDirection !== prev;\n };\n\n return {\n _getCache() {\n return JSON.parse(JSON.stringify(cache)) as unknown as CacheSnapshot;\n },\n _getRange() {\n if (_smoothScrollRange) {\n return [\n min(_prevRange[0], _smoothScrollRange[0]),\n max(_prevRange[1], _smoothScrollRange[1]),\n ];\n }\n return (_prevRange = computeRange(\n cache as Writeable<Cache>,\n scrollOffset + pendingJump,\n _prevRange[0],\n viewportSize\n ));\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInSmoothScrollRange() {\n if (!_smoothScrollRange) return false;\n return cache._sizes\n .slice(\n max(0, _smoothScrollRange[0] - 1),\n min(cache._length - 1, _smoothScrollRange[1] + 1) + 1\n )\n .includes(UNCACHED);\n },\n _getItemOffset(index) {\n const offset =\n computeStartOffset(cache as Writeable<Cache>, index) - pendingJump;\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getItemsLength() {\n return cache._length;\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getScrollOffsetMax: getScrollOffsetMax,\n _getScrollDirection() {\n return _scrollDirection;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getViewportPaddingStart() {\n return paddingStart;\n },\n _getTotalSize() {\n return max(getScrollSize(), viewportSize - paddingStart - paddingEnd);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = 0;\n return prevJump;\n },\n _subscribe(target, cb) {\n const sub: [number, Subscriber] = [target, cb];\n subscribers.add(sub);\n return () => {\n subscribers.delete(sub);\n };\n },\n _update(type, payload): void {\n let 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 // 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 > getScrollOffsetMax() - SUBPIXEL_THRESHOLD) {\n // Keep end to stick to the end\n diff = calculateJump(cache, updated, true);\n } else {\n const [startIndex] = _prevRange;\n // Keep start at mid\n diff = calculateJump(\n cache,\n updated.filter(([index]) => index < startIndex)\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 as Writeable<Cache>, index, size)) {\n isNewItemMeasured = true;\n }\n });\n\n // Estimate initial item size from measured sizes\n if (\n shouldAutoEstimateItemSize &&\n isNewItemMeasured &&\n // TODO support reverse scroll also\n !scrollOffset\n ) {\n estimateDefaultItemSize(cache as Writeable<Cache>);\n }\n mutated += UPDATE_SIZE_STATE;\n _maybeJumped = shouldSync = true;\n break;\n }\n case ACTION_VIEWPORT_RESIZE: {\n const total = payload[0] + payload[1] + payload[2];\n if (viewportSize !== total) {\n viewportSize = total;\n paddingStart = payload[1];\n paddingEnd = payload[2];\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 = getScrollOffsetMax() - scrollOffset;\n\n const [shift, isRemove] = updateCacheLength(\n cache as Writeable<Cache>,\n payload[0],\n true\n );\n const diff = isRemove ? -min(shift, distanceToEnd) : shift;\n applyJump(diff);\n if (!isIOSWebKit()) {\n scrollOffset = clampScrollOffset(scrollOffset + diff);\n }\n\n mutated = UPDATE_SCROLL_STATE;\n } else {\n updateCacheLength(cache as Writeable<Cache>, payload[0]);\n }\n break;\n }\n case ACTION_SCROLL: {\n // Skip if offset is not changed\n if (payload === scrollOffset) {\n break;\n }\n\n const delta = payload - scrollOffset;\n // Scrolling after resizing will be caused by jump compensation\n const isJustJumped = _maybeJumped;\n _maybeJumped = false;\n\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n if (\n (_scrollDirection === SCROLL_IDLE || !isJustJumped) &&\n // Ignore until manual scrolling\n !_isManualScrolling\n ) {\n updateScrollDirection(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 // Update synchronously if scrolled a lot\n shouldSync = abs(delta) > viewportSize;\n\n mutated += UPDATE_SCROLL_WITH_EVENT;\n\n scrollOffset = clampScrollOffset(payload);\n mutated += UPDATE_SCROLL_STATE;\n break;\n }\n case ACTION_SCROLL_END: {\n if (updateScrollDirection(SCROLL_IDLE)) {\n shouldFlushPendingJump = true;\n mutated = UPDATE_SCROLL_STATE;\n }\n _isManualScrolling = false;\n _smoothScrollRange = null;\n break;\n }\n case ACTION_MANUAL_SCROLL: {\n _isManualScrolling = true;\n break;\n }\n case ACTION_BEFORE_MANUAL_SMOOTH_SCROLL: {\n _smoothScrollRange = computeRange(\n cache as Writeable<Cache>,\n payload,\n _prevRange[0],\n viewportSize\n );\n mutated = UPDATE_SCROLL_STATE;\n break;\n }\n }\n\n if (mutated) {\n if (shouldFlushPendingJump && pendingJump) {\n _maybeJumped = true;\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// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect = isBrowser\n ? useLayoutEffect\n : useEffect;\n","import {\n hasNegativeOffsetInRTL,\n isIOSWebKit,\n isRTLDocument,\n isSmoothScrollSupported,\n} from \"./environment\";\nimport {\n ACTION_SCROLL,\n ScrollJump,\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, throttle, timeout, clamp } from \"./utils\";\n\n// Infer scroll state also from wheel events\n// Sometimes scroll events do not fire when frame dropped even if the visual have been already scrolled\nconst createOnWheel = (\n store: VirtualStore,\n isHorizontal: boolean,\n onScrollStopped: () => void\n) => {\n return throttle((e: WheelEvent) => {\n if (store._getScrollDirection() === SCROLL_IDLE) {\n // Scroll start should be detected with scroll event\n return;\n }\n if (e.ctrlKey) {\n // Probably a pinch-to-zoom gesture\n return;\n }\n // Get delta before checking deltaMode for firefox behavior\n // https://github.com/w3c/uievents/issues/181#issuecomment-392648065\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1392460#c34\n if (isHorizontal ? e.deltaX : e.deltaY) {\n const offset = store._getScrollOffset();\n if (offset > 0 && offset < store._getScrollOffsetMax()) {\n onScrollStopped();\n }\n }\n }, 50);\n};\n\nconst normalizeRTLOffset = (\n rootElement: HTMLElement,\n store: VirtualStore,\n offset: number,\n diff?: boolean\n): number => {\n if (hasNegativeOffsetInRTL(rootElement)) {\n return -offset;\n } else {\n return diff ? -offset : store._getScrollOffsetMax() - offset;\n }\n};\n\nexport type Scroller = {\n _observe: (rootElement: HTMLElement) => () => void;\n _scrollTo: (offset: number) => void;\n _scrollBy: (offset: number) => void;\n _scrollToIndex: (index: number, opts?: ScrollToIndexOpts) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n let cancelScroll: (() => void) | undefined;\n let stillMomentumScrolling = false;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n const overflowKey = isHorizontal ? \"overflowX\" : \"overflowY\";\n\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return normalizeRTLOffset(rootElement!, store, offset, diff);\n }\n return offset;\n };\n\n const scrollManually = async (getOffset: () => number, smooth?: boolean) => {\n if (!rootElement) return;\n\n if (cancelScroll) {\n // Cancel waiting scrollTo\n cancelScroll();\n }\n\n const getTargetOffset = (): number => {\n // Adjust if the offset is over the end, to get correct startIndex.\n return clamp(getOffset(), 0, store._getScrollOffsetMax());\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._hasUnmeasuredItemsInSmoothScrollRange()) {\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 rootElement.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: normalizeOffset(getTargetOffset()),\n behavior: \"smooth\",\n });\n } else {\n while (true) {\n const [promise, unsubscribe] = waitForMeasurement();\n\n try {\n rootElement[scrollToKey] = normalizeOffset(getTargetOffset());\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(root) {\n rootElement = root;\n\n let touching = false;\n let justTouchEnded = false;\n\n const onScrollStopped = debounce(() => {\n if (touching) {\n // Wait while touching\n onScrollStopped();\n return;\n }\n\n justTouchEnded = false;\n\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n if (justTouchEnded) {\n stillMomentumScrolling = true;\n }\n\n store._update(ACTION_SCROLL, normalizeOffset(root[scrollToKey]));\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\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 root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n root.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n root.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"touchstart\", onTouchStart);\n root.removeEventListener(\"touchend\", onTouchEnd);\n onScrollStopped._cancel();\n };\n },\n _scrollTo(offset) {\n scrollManually(() => offset);\n },\n _scrollBy(offset) {\n offset += store._getScrollOffset();\n scrollManually(() => 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 scrollManually(() => {\n if (align === \"end\") {\n return (\n store._getViewportPaddingStart() +\n store._getItemOffset(index) +\n store._getItemSize(index) -\n store._getViewportSize()\n );\n } else if (align === \"center\") {\n return (\n store._getViewportPaddingStart() +\n store._getItemOffset(index) +\n (store._getItemSize(index) - store._getViewportSize()) / 2\n );\n } else {\n return store._getViewportPaddingStart() + store._getItemOffset(index);\n }\n }, smooth);\n },\n _fixScrollJump: (jump) => {\n if (!rootElement) return;\n\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 (stillMomentumScrolling) {\n stillMomentumScrolling = false;\n\n const style = rootElement.style;\n const prev = style[overflowKey];\n style[overflowKey] = \"hidden\";\n timeout(() => {\n style[overflowKey] = prev;\n });\n }\n\n rootElement[scrollToKey] += normalizeOffset(jump, true);\n },\n };\n};\n\nexport type WindowScroller = {\n _observe: (rootElement: HTMLElement) => () => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n let rootElement: HTMLElement | undefined;\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRTLDocument()) {\n return normalizeRTLOffset(rootElement!, store, offset, diff);\n }\n return offset;\n };\n\n return {\n _observe(root) {\n rootElement = root;\n\n // TODO calc offset only when it changes (maybe impossible)\n const getOffsetToWindow = (node: HTMLElement, offset: number): number => {\n const nodeOffset =\n offset +\n (isHorizontal && isRTLDocument()\n ? window.innerWidth - node[offsetKey] - node.offsetWidth\n : node[offsetKey]);\n\n const parent = node.offsetParent;\n if (node === document.body || !parent) {\n return nodeOffset;\n }\n\n return getOffsetToWindow(parent as HTMLElement, nodeOffset);\n };\n\n const onScrollStopped = debounce(() => {\n store._update(ACTION_SCROLL_END);\n }, 150);\n\n const onScroll = () => {\n store._update(\n ACTION_SCROLL,\n normalizeOffset(window[scrollToKey]) - getOffsetToWindow(root, 0)\n );\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n window.addEventListener(\"scroll\", onScroll);\n window.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _fixScrollJump: (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(\n isHorizontal ? normalizeOffset(jump, true) : 0,\n isHorizontal ? 0 : jump\n );\n },\n };\n};\n","import { ReactElement, ReactFragment, ReactNode } from \"react\";\nimport { exists, max, min, isArray } from \"../core/utils\";\nimport { SCROLL_DOWN, SCROLL_UP, ScrollDirection } from \"../core/store\";\n\nexport const refKey = \"current\";\n\nexport const emptyComponents = {};\n\ntype ItemElement = ReactElement | ReactFragment | string | number;\n\nconst forEach = (children: ReactNode, elements: ItemElement[]) => {\n if (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// 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\nexport const flattenChildren = (children: ReactNode): ItemElement[] => {\n const elements: ItemElement[] = [];\n forEach(children, elements);\n return elements;\n};\n\nexport type MayHaveKey = { key?: React.Key };\n\nexport const clampStartIndex = (\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\nexport const clampEndIndex = (\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","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useLatestRef = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_VIEWPORT_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, computeStyle, getStyleNumber, max, once } from \"./utils\";\n\nconst rootObserveOpts: ResizeObserverOptions = { box: \"border-box\" };\n\nexport interface ListResizer {\n _observeRoot(root: HTMLElement): () => void;\n _observeItem(el: HTMLElement, i: number): () => void;\n}\n\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === rootElement) {\n store._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[sizeKey],\n contentRect[isHorizontal ? \"left\" : \"top\"],\n // contentRect doesn't have paddingRight/paddingBottom so get them from computed style\n // https://www.w3.org/TR/resize-observer/#css-definitions\n getStyleNumber(\n computeStyle(rootElement)[\n isHorizontal ? \"paddingRight\" : \"paddingBottom\"\n ]\n ),\n ]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root, rootObserveOpts);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n // 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\n return {\n _observeRoot() {\n const cb = () => {\n store._update(ACTION_VIEWPORT_RESIZE, [window[windowSizeKey], 0, 0]);\n };\n window.addEventListener(\"resize\", cb);\n cb();\n return () => {\n window.removeEventListener(\"resize\", cb);\n getResizeObserver().disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n // Skip zero-sized rects that may be observed under `display: none` style\n if (!(target as HTMLElement).offsetParent) continue;\n\n if (target === rootElement) {\n // contentRect doesn't have paddingRight/paddingBottom so get them from computed style\n // https://www.w3.org/TR/resize-observer/#css-definitions\n // TODO subtract scroll bar width/height\n // https://github.com/w3c/csswg-drafts/issues/3536\n const style = computeStyle(rootElement);\n vStore._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[heightKey],\n contentRect.top,\n getStyleNumber(style.paddingBottom),\n ]);\n hStore._update(ACTION_VIEWPORT_RESIZE, [\n contentRect[widthKey],\n contentRect.left,\n getStyleNumber(style.paddingRight),\n ]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root, rootObserveOpts);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type ViewportComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\" | \"onKeyDown\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomViewportComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: ViewportComponentAttributes;\n /**\n * Total height of items. It's undefined if component is not vertically scrollable.\n */\n height: number | undefined;\n /**\n * Total width of items. It's undefined if component is not horizontally scrollable.\n */\n width: number | undefined;\n /**\n * Currently component is scrolling or not.\n */\n scrolling: boolean;\n}\n\nexport const Viewport = forwardRef<any, CustomViewportComponentProps>(\n ({ children, attrs, width, height, scrolling }, ref): ReactElement => {\n return (\n <div ref={ref} {...attrs}>\n <div\n style={useMemo((): CSSProperties => {\n return {\n position: \"relative\",\n visibility: \"hidden\",\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n pointerEvents: scrolling ? \"none\" : \"auto\",\n };\n }, [width, height, scrolling])}\n >\n {children}\n </div>\n </div>\n );\n }\n);\n\nexport type CustomViewportComponent = typeof Viewport;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { ListResizer } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\nimport { isRTLDocument } from \"../core/environment\";\n\n/**\n * Props of customized item component for {@link VList}.\n */\nexport interface CustomItemComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomItemComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomItemComponentProps> & React.RefAttributes<any>\n>;\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ListResizer;\n _index: number;\n _offset: number;\n _hide: boolean;\n _element: \"div\";\n _isHorizontal: boolean;\n};\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 }: 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(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : \"left\"]: 0,\n [isHorizontal ? (isRTLDocument() ? \"right\" : \"left\") : \"top\"]:\n offset,\n visibility: hide ? \"hidden\" : \"visible\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n","import { useReducer } from \"react\";\n\nconst update = () => [];\n\nexport const useRerender = (): (() => void) => {\n return useReducer(update, undefined, update)[1];\n};\n","import {\n useRef,\n useMemo,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n} from \"react\";\nimport {\n UPDATE_SCROLL_WITH_EVENT,\n ACTION_ITEMS_LENGTH_CHANGE,\n createVirtualStore,\n UPDATE_SIZE_STATE,\n UPDATE_SCROLL_STATE,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { exists, values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport {\n MayHaveKey,\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n flattenChildren,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createResizer } from \"../core/resizer\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { CacheSnapshot, ScrollToIndexOpts } from \"../core/types\";\nimport { Cache } from \"../core/cache\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n * @param 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 VList}.\n */\nexport interface VListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * While true is set, scroll position will be maintained from the end not usual start when items are shifted/unshifted. It 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, some styles will be adjusted to be suitable for bottom-to-top scrolling.\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 VListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked whenever scroll offset changes.\n * @param offset Current scrollTop or scrollLeft.\n */\n onScroll?: (offset: number) => void;\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n shift,\n horizontal: horizontalProp,\n reverse: reverseProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScroll = useLatestRef(onScrollProp);\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n !!reverseProp,\n !initialItemSize\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();\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const scrollSize = store._getTotalSize();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrolling = scrollDirection !== SCROLL_IDLE;\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 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(\n UPDATE_SCROLL_WITH_EVENT,\n () => {\n onScroll[refKey] && onScroll[refKey](store._getScrollOffset());\n }\n );\n const cleanupResizer = resizer._observeRoot(root);\n const cleanupScroller = scroller._observe(root);\n return () => {\n unsubscribeStore();\n unsubscribeOnScroll();\n cleanupResizer();\n cleanupScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return store._getTotalSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex: scroller._scrollToIndex,\n scrollTo: scroller._scrollTo,\n scrollBy: scroller._scrollBy,\n };\n },\n []\n );\n\n const overscanedStartIndex = clampStartIndex(\n startIndex,\n overscan,\n scrollDirection\n );\n const overscanedEndIndex = clampEndIndex(\n endIndex,\n overscan,\n scrollDirection,\n count\n );\n\n const items: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n items.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\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 />\n );\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n [isHorizontal ? \"overflowX\" : \"overflowY\"]: \"auto\",\n display: isHorizontal ? \"inline-block\" : \"block\",\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","import {\n useRef,\n useMemo,\n ReactElement,\n ReactNode,\n useEffect,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n createVirtualStore,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { exists, values } from \"../core/utils\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport {\n MayHaveKey,\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n flattenChildren,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useLatestRef } from \"./useLatestRef\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { CacheSnapshot } from \"../core/types\";\nimport {\n CustomViewportComponent,\n CustomViewportComponentProps,\n Viewport as DefaultViewport,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\nimport { Cache } from \"../core/cache\";\nimport { flushSync } from \"react-dom\";\nimport { useRerender } from \"./useRerender\";\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link WVList}.\n */\nexport interface WVListHandle {\n /**\n * Get current {@link CacheSnapshot}.\n */\n readonly cache: CacheSnapshot;\n}\n\n/**\n * Props of {@link WVList}.\n */\nexport interface WVListProps extends ViewportComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * You can restore cache by passing a {@link CacheSnapshot} on mount. This is useful when you want to restore scroll position after navigation. The snapshot can be obtained from {@link WVListHandle.cache}.\n */\n cache?: CacheSnapshot;\n /**\n * Customized components for advanced usage.\n */\n components?: {\n /**\n * Component for scrollable element. This component will get {@link CustomViewportComponentProps} as props.\n * @defaultValue {@link DefaultViewport}\n */\n Root?: CustomViewportComponent;\n /**\n * Component or element type for item element. This component will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n Item?: CustomItemComponentOrElement;\n };\n /**\n * Callback invoked when scrolling stops.\n */\n onScrollStop?: () => void;\n /**\n * Callback invoked when visible items range changes.\n */\n onRangeChange?: (\n /**\n * The start index of viewable items.\n */\n startIndex: number,\n /**\n * The end index of viewable items.\n */\n endIndex: number\n ) => void;\n}\n\n/**\n * Virtualized list component controlled by the window scrolling. See {@link WVListProps} and {@link WVListHandle}.\n */\nexport const WVList = forwardRef<WVListHandle, WVListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n cache,\n components: {\n Root: Viewport = DefaultViewport,\n Item: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Item?: undefined;\n },\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => flattenChildren(children), [children]);\n const count = elements.length;\n\n const onScrollStop = useLatestRef(onScrollStopProp);\n\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n cache as unknown as Cache | undefined,\n false,\n !initialItemSize\n );\n\n return [\n _store,\n createWindowResizer(_store, _isHorizontal),\n createWindowScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n if (count !== store._getItemsLength()) {\n store._update(ACTION_ITEMS_LENGTH_CHANGE, [count]);\n }\n\n const rerender = useRerender();\n\n const [startIndex, endIndex] = store._getRange();\n const scrollDirection = store._getScrollDirection();\n const jumpCount = store._getJumpCount();\n const scrollSize = store._getTotalSize();\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrolling = scrollDirection !== SCROLL_IDLE;\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 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 cleanupResizer = resizer._observeRoot(root);\n const cleanupScroller = scroller._observe(root);\n return () => {\n unsubscribeStore();\n cleanupResizer();\n cleanupScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!scrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n }, [scrolling]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp(startIndex, endIndex);\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get cache() {\n return store._getCache();\n },\n };\n },\n []\n );\n\n const overscanedStartIndex = clampStartIndex(\n startIndex,\n overscan,\n scrollDirection\n );\n const overscanedEndIndex = clampEndIndex(\n endIndex,\n overscan,\n scrollDirection,\n count\n );\n\n const items: ReactElement[] = [];\n for (let i = overscanedStartIndex; i <= overscanedEndIndex; i++) {\n const e = elements[i]!;\n const key = (e as MayHaveKey).key;\n items.push(\n <ListItem\n key={exists(key) ? key : \"_\" + i}\n _resizer={resizer}\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 />\n );\n }\n\n return (\n <Viewport\n ref={rootRef}\n width={isHorizontal ? scrollSize : undefined}\n height={isHorizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n display: isHorizontal ? \"inline-block\" : \"block\",\n width: isHorizontal ? \"auto\" : \"100%\",\n height: isHorizontal ? \"100%\" : \"auto\",\n ...viewportAttrs.style,\n },\n }),\n values(viewportAttrs)\n )}\n >\n {items}\n </Viewport>\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n useImperativeHandle,\n} from \"react\";\nimport {\n ACTION_ITEMS_LENGTH_CHANGE,\n UPDATE_SCROLL_STATE,\n UPDATE_SIZE_STATE,\n createVirtualStore,\n SCROLL_IDLE,\n} from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { values } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport {\n clampEndIndex,\n clampStartIndex,\n emptyComponents,\n refKey,\n} from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport {\n Viewport as DefaultViewport,\n CustomViewportComponent,\n CustomViewportComponentProps,\n ViewportComponentAttributes,\n} from \"./Viewport\";\nimport { flushSync } from \"react-dom\";\nimport { isRTLDocument } from \"../core/environment\";\nimport { useRerender } from \"./useRerender\";\n\nconst genKey = (i: number, j: number) => `${i}-${j}`;\n\n/**\n * Props of customized cell component for {@link VGrid}.\n */\nexport interface CustomCellComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomCellComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomCellComponentProps> & React.RefAttributes<any>\n>;\n\ntype CustomCellComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomCellComponent;\n\ntype CellProps = {\n _children: ReactNode;\n _resizer: GridResizer;\n _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. 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?: CustomCellComponentOrElement;\n };\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n components: {\n Root: Viewport = DefaultViewport,\n Cell: ItemElement = \"div\",\n } = emptyComponents as {\n Root?: undefined;\n Cell?: undefined;\n },\n ...viewportAttrs\n },\n ref\n ): ReactElement => {\n const [vStore, hStore, resizer, vScroller, hScroller] = 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 rerender = useRerender();\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 = vStore._getTotalSize();\n const width = hStore._getTotalSize();\n const rootRef = useRef<HTMLDivElement>(null);\n const vScrolling = vScrollDirection !== SCROLL_IDLE;\n const hScrolling = hScrollDirection !== SCROLL_IDLE;\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const onRerender = (sync?: boolean) => {\n if (sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n };\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 onRerender\n );\n const unsubscribeHStore = hStore._subscribe(\n UPDATE_SCROLL_STATE + UPDATE_SIZE_STATE,\n onRerender\n );\n const cleanUpResizer = resizer._observeRoot(root);\n const cleanupVScroller = vScroller._observe(root);\n const cleanupHScroller = hScroller._observe(root);\n return () => {\n unsubscribeVStore();\n unsubscribeHStore();\n cleanUpResizer();\n cleanupVScroller();\n cleanupHScroller();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [hStore._getTotalSize(), vStore._getTotalSize()];\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 = clampStartIndex(\n startRowIndex,\n overscan,\n vScrollDirection\n );\n const overscanedEndRowIndex = clampEndIndex(\n endRowIndex,\n overscan,\n vScrollDirection,\n rowCount\n );\n const overscanedStartColIndex = clampStartIndex(\n startColIndex,\n overscan,\n hScrollDirection\n );\n const overscanedEndColIndex = clampEndIndex(\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={vScrolling || hScrolling}\n attrs={useMemo(\n () => ({\n ...viewportAttrs,\n style: {\n overflow: \"auto\",\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","now","Date","values","Object","isArray","Array","timeout","setTimeout","clamp","value","minValue","maxValue","exists","v","debounce","fn","ms","id","cancel","clearTimeout","debouncedFn","_cancel","once","called","cache","args","computeStyle","e","getComputedStyle","getStyleNumber","parseFloat","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","_length","_computedOffsetIndex","_offsets","i","top","findIndex","offset","sum","next","computeRange","scrollOffset","prevStartIndex","viewportSize","start","appendCache","length","prepend","key","push","updateCacheLength","isShift","diff","isRemove","shift","splice","reduce","acc","removed","isBrowser","window","getDocumentRoot","document","documentElement","hasNegativeOffsetInRTL","scrollable","prev","isNegative","isRTLDocument","direction","isIOSWebKit","test","navigator","userAgent","isSmoothScrollSupported","style","calculateJump","items","keepEnd","createVirtualStore","elementsCount","itemSize","initialItemCount","initCache","isReverse","shouldAutoEstimateItemSize","paddingStart","paddingEnd","jumpCount","jump","pendingJump","_scrollDirection","_isManualScrolling","_smoothScrollRange","_maybeJumped","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","getScrollOffsetMax","clampScrollOffset","applyJump","j","updateScrollDirection","dir","_getCache","JSON","parse","stringify","_getRange","_isUnmeasuredItem","_hasUnmeasuredItemsInSmoothScrollRange","slice","includes","_getItemOffset","computeStartOffset","_getItemSize","_getItemsLength","_getScrollOffset","_getScrollOffsetMax","_getScrollDirection","_getViewportSize","_getViewportPaddingStart","_getTotalSize","_getJumpCount","_flushJump","prevJump","_subscribe","target","cb","sub","add","delete","_update","type","payload","shouldFlushPendingJump","shouldSync","mutated","updated","filter","startIndex","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","total","distanceToEnd","delta","isJustJumped","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","createOnWheel","store","isHorizontal","onScrollStopped","throttle","time","n","ctrlKey","deltaX","deltaY","normalizeRTLOffset","rootElement","createScroller","cancelScroll","stillMomentumScrolling","scrollToKey","overflowKey","normalizeOffset","scrollManually","async","getOffset","smooth","getTargetOffset","waitForMeasurement","queue","Promise","resolve","reject","promise","unsubscribe","scrollTo","behavior","_observe","root","touching","justTouchEnded","onScroll","onWheel","onTouchStart","onTouchEnd","addEventListener","passive","removeEventListener","_scrollTo","_scrollBy","_scrollToIndex","align","itemOffset","_fixScrollJump","createWindowScroller","offsetKey","getOffsetToWindow","node","nodeOffset","innerWidth","offsetWidth","parent","offsetParent","body","scrollBy","refKey","emptyComponents","children","elements","c","flattenChildren","clampStartIndex","overscan","scrollDirection","clampEndIndex","endIndex","count","useStatic","init","ref","useRef","useLatestRef","rootObserveOpts","box","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","contentRect","get","_observeRoot","ro","observe","disconnect","_observeItem","el","set","unobserve","createWindowResizer","windowSizeKey","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","paddingBottom","left","paddingRight","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","Viewport","forwardRef","attrs","width","height","scrolling","_jsx","jsx","useMemo","position","visibility","pointerEvents","ListItem","memo","_children","_resizer","resizer","_index","_offset","_hide","hide","_element","Element","_isHorizontal","margin","padding","display","update","useRerender","useReducer","undefined","VList","initialItemSize","horizontal","horizontalProp","reverse","reverseProp","components","Root","DefaultViewport","Item","ItemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","viewportAttrs","scroller","_store","rerender","scrollSize","rootRef","unsubscribeStore","UPDATE_SCROLL_STATE","sync","flushSync","unsubscribeOnScroll","cleanupResizer","cleanupScroller","useImperativeHandle","scrollToIndex","overscanedStartIndex","overscanedEndIndex","contain","WVList","genKey","Cell","_rowIndex","_colIndex","_top","_left","_height","_width","minHeight","minWidth","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","vScroller","hScroller","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","vScrollDirection","hScrollDirection","vJumpCount","hJumpCount","vScrolling","hScrolling","onRerender","unsubscribeVStore","unsubscribeHStore","cleanUpResizer","cleanupVScroller","cleanupHScroller","indexX","indexY","offsetX","offsetY","render","overscanedStartRowIndex","overscanedEndRowIndex","overscanedStartColIndex","overscanedEndColIndex","overflow"],"mappings":"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"}