virtua 0.4.0 → 0.4.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/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/react/utils.ts","../src/src/react/useRefWithUpdate.ts","../src/src/react/useStore.ts","../src/src/core/dom.ts","../src/src/core/scroller.ts","../src/src/react/useStatic.ts","../src/src/core/resizer.ts","../src/src/react/DefaultWindow.tsx","../src/src/react/VList.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 timeout = setTimeout;\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const range = <T>(length: number, cb: (i: number) => T): T[] =>\n Array.from({ length }, (_, i) => cb(i));\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: NodeJS.Timeout | undefined | null;\n\n const cancel = () => {\n if (exists(id)) {\n clearTimeout(id);\n }\n };\n const debouncedFn = () => {\n cancel();\n id = timeout(() => {\n id = null;\n fn();\n }, ms);\n };\n debouncedFn._cancel = cancel;\n return debouncedFn;\n};\n\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { exists, max, median, min, range } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _measuredOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._measuredOffsetIndex = min(index, cache._measuredOffsetIndex);\n return isInitialMeasurement;\n};\n\nconst computeOffset = (\n cache: Writeable<Cache>,\n index: number,\n isTotal?: boolean\n): number => {\n if (!cache._length) return 0;\n if (cache._measuredOffsetIndex >= index) {\n if (isTotal) {\n return cache._offsets[index]! + getItemSize(cache, index);\n } else {\n return cache._offsets[index]!;\n }\n }\n\n let i = cache._measuredOffsetIndex;\n let top = cache._offsets[i]!;\n while (i <= index) {\n cache._offsets[i] = top;\n if (i === index && !isTotal) {\n break;\n }\n top += getItemSize(cache, i);\n i++;\n }\n // mark as measured\n cache._measuredOffsetIndex = index;\n return top;\n};\n\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n return computeOffset(cache, cache._length - 1, true);\n};\n\nexport const computeStartOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n return computeOffset(cache, index);\n};\n\nconst findIndex = (cache: Cache, i: number, distance: number): number => {\n let sum = 0;\n if (distance >= 0) {\n // search forward\n while (i < cache._length - 1) {\n const h = getItemSize(cache, i++);\n if ((sum += h) >= distance) {\n if (sum - h / 2 >= distance) {\n i--;\n }\n break;\n }\n }\n } else {\n // search backward\n while (i > 0) {\n const h = getItemSize(cache, --i);\n if ((sum -= h) <= distance) {\n if (sum + h / 2 < distance) {\n i++;\n }\n break;\n }\n }\n }\n\n return min(max(i, 0), cache._length - 1);\n};\n\nexport const findStartIndexWithOffset = (\n cache: Cache,\n offset: number,\n prevStartIndex: number,\n prevOffset: number\n): number => {\n return findIndex(cache, prevStartIndex, offset - prevOffset);\n};\n\nexport { findIndex as findEndIndex };\n\nexport const hasUnmeasuredItemsInRange = (\n cache: Cache,\n startIndex: number,\n endIndex: number\n): boolean => {\n for (let i = startIndex; i <= endIndex; i++) {\n if (cache._sizes[i] === UNCACHED) {\n return true;\n }\n }\n return false;\n};\n\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nexport const resetCache = (\n length: number,\n itemSize: number,\n cache?: Cache\n): Cache => {\n return {\n _defaultItemSize: cache ? cache._defaultItemSize : itemSize,\n _length: length,\n _measuredOffsetIndex: cache\n ? min(cache._measuredOffsetIndex, length - 1)\n : 0,\n _sizes: range(length, (i) => {\n const size = cache && cache._sizes[i];\n if (exists(size)) {\n return size;\n }\n return UNCACHED;\n }),\n _offsets: range(length, (i) => {\n if (i === 0) {\n // first offset must be 0\n return 0;\n }\n const offset = cache && cache._offsets[i];\n if (exists(offset)) {\n return offset;\n }\n return UNCACHED;\n }),\n };\n};\n","import {\n findStartIndexWithOffset,\n resetCache,\n getItemSize,\n computeTotalSize,\n findEndIndex,\n computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n hasUnmeasuredItemsInRange,\n estimateDefaultItemSize,\n} from \"./cache\";\nimport type { Writeable } from \"./types\";\nimport { abs, exists, max, min, timeout } from \"./utils\";\n\ntype ItemJump = Readonly<[sizeDiff: number, index: number]>;\nexport type ScrollJump = Readonly<number>;\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\nconst sumJumps = (jump: readonly ItemJump[]): number =>\n jump.reduce((acc, [j]) => acc + j, 0);\nconst calculateJumps = (cache: Cache, items: ItemResize[]): ItemJump[] => {\n return items.map(([index, size]) => {\n return [size - getItemSize(cache, index), index];\n });\n};\n\nexport const SCROLL_STOP = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\nexport const SCROLL_MANUAL = 3;\ntype ScrollDirection =\n | typeof SCROLL_STOP\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP\n | typeof SCROLL_MANUAL;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_WINDOW_RESIZE = 2;\nexport const ACTION_SCROLL = 3;\nexport const ACTION_MANUAL_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_WINDOW_RESIZE, size: number]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_MANUAL_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, isManual: boolean];\n\ntype Subscriber = (sync?: boolean) => void;\n\nexport type VirtualStore = {\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInRange(startIndex: number): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getScrollOffset(): number;\n _getViewportSize(): number;\n _getScrollSize(): number;\n _getScrollableDomSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump | undefined;\n _getItemIndexForScrollTo(offset: number): number;\n _waitForScrollDestinationItemsMeasured(): Promise<void>;\n _subscribe(cb: Subscriber): () => void;\n _update(...action: Actions): void;\n _getScrollDirection(): ScrollDirection;\n _updateCacheLength(length: number): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number | undefined,\n initialItemCount: number = 0,\n isReverse: boolean,\n onScrollStateChange: (scrolling: boolean) => void,\n onScrollOffsetChange: (offset: number) => void\n): VirtualStore => {\n const shouldAutoEstimateItemSize = !itemSize;\n const initialItemSize = itemSize || 40;\n let viewportSize = initialItemSize * max(initialItemCount - 1, 0);\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump | undefined;\n let cache = resetCache(elementsCount, initialItemSize);\n let _scrollDirection: ScrollDirection = SCROLL_STOP;\n let _resized = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n let _scrollToQueue: [() => void, () => void] | undefined;\n\n const subscribers = new Set<Subscriber>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const flushIsJustResized = (): boolean => {\n const prev = _resized;\n _resized = false;\n return prev;\n };\n const updateScrollDirection = (dir: ScrollDirection): boolean | undefined => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n if (_scrollDirection === SCROLL_STOP) {\n return false;\n } else if (\n prev === SCROLL_STOP &&\n (_scrollDirection === SCROLL_DOWN || _scrollDirection === SCROLL_UP)\n ) {\n return true;\n }\n return;\n };\n\n return {\n _getRange() {\n const [prevStartIndex, prevEndIndex] = _prevRange;\n const prevOffset = computeStartOffset(\n cache as Writeable<Cache>,\n prevStartIndex\n );\n const start = findStartIndexWithOffset(\n cache,\n scrollOffset,\n prevStartIndex,\n prevOffset\n );\n const end = findEndIndex(cache, start, viewportSize);\n if (prevStartIndex === start && prevEndIndex === end) {\n return _prevRange;\n }\n return (_prevRange = [start, end]);\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInRange(startIndex) {\n return hasUnmeasuredItemsInRange(\n cache,\n max(0, startIndex - 2),\n min(cache._length - 1, startIndex + 2)\n );\n },\n _getItemOffset(index) {\n const offset = computeStartOffset(cache as Writeable<Cache>, index);\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getScrollSize() {\n return getScrollSize();\n },\n _getScrollableDomSize() {\n return max(getScrollSize(), viewportSize);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = undefined;\n return prevJump;\n },\n _getItemIndexForScrollTo(offset) {\n return findStartIndexWithOffset(cache, offset, 0, 0);\n },\n _waitForScrollDestinationItemsMeasured() {\n if (_scrollToQueue) {\n // Cancel waiting scrollTo\n _scrollToQueue[1]();\n }\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 return new Promise((resolve, reject) => {\n let resolved: boolean | undefined = false;\n\n const resolveQueue = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n _scrollToQueue = undefined;\n };\n _scrollToQueue = [resolveQueue, reject];\n\n // In some specific situation with VGrid, the promise never resolved so we cancel it if timed out.\n timeout(resolveQueue, 250);\n });\n },\n _subscribe(cb) {\n subscribers.add(cb);\n return () => {\n subscribers.delete(cb);\n };\n },\n _update(type, payload): void {\n let shouldSync: boolean | undefined;\n let updatedScrollState: boolean | undefined;\n let mutated = false;\n\n switch (type) {\n case ACTION_ITEM_RESIZE: {\n const updated = payload.filter(\n ([index, size]) => cache._sizes[index] !== size\n );\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n let diff = 0;\n // Calculate jump\n if (_scrollDirection === SCROLL_UP) {\n diff = sumJumps(calculateJumps(cache, updated));\n } else if (_scrollDirection === SCROLL_MANUAL) {\n const allJumps = calculateJumps(cache, updated);\n const [startIndex] = _prevRange;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (getScrollSize() <= scrollOffset + viewportSize) {\n // Keep end to stick to the end\n diff = sumJumps(allJumps);\n } else {\n // Keep start at mid\n diff = sumJumps(\n allJumps.filter(([, index]) => index < startIndex)\n );\n }\n } else {\n // Do nothing\n }\n\n if (diff) {\n jump = diff;\n jumpCount++;\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\n _resized = shouldSync = mutated = true;\n break;\n }\n case ACTION_WINDOW_RESIZE: {\n mutated = viewportSize !== payload;\n viewportSize = payload;\n break;\n }\n case ACTION_SCROLL:\n case ACTION_MANUAL_SCROLL: {\n // Skip if offset is not changed\n if (scrollOffset === payload) {\n break;\n }\n\n if (type === ACTION_SCROLL) {\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n const isJustResized = flushIsJustResized();\n if (\n (_scrollDirection === SCROLL_STOP || !isJustResized) &&\n // Ignore until manual scrolling\n _scrollDirection !== SCROLL_MANUAL\n ) {\n updatedScrollState = updateScrollDirection(\n scrollOffset > payload ? SCROLL_UP : SCROLL_DOWN\n );\n }\n\n // Ignore manual scroll because it may be called in useEffect/useLayoutEffect and cause the warn below.\n // Warning: flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\n //\n // Update synchronously if scrolled a lot\n shouldSync = abs(scrollOffset - payload) > viewportSize;\n }\n\n scrollOffset = payload;\n mutated = true;\n break;\n }\n case ACTION_SCROLL_END: {\n updatedScrollState = updateScrollDirection(\n payload ? SCROLL_MANUAL : SCROLL_STOP\n );\n break;\n }\n }\n\n if (mutated) {\n subscribers.forEach((cb) => {\n cb(shouldSync);\n });\n\n if (type === ACTION_SCROLL) {\n onScrollOffsetChange(scrollOffset);\n }\n }\n if (_scrollToQueue) {\n if (type === ACTION_ITEM_RESIZE) {\n _scrollToQueue[0]();\n }\n }\n if (exists(updatedScrollState)) {\n onScrollStateChange(updatedScrollState);\n }\n },\n _getScrollDirection() {\n return _scrollDirection;\n },\n _updateCacheLength(length) {\n // It's ok to be updated in render because states should be calculated consistently regardless cache length\n if (cache._length === length) return;\n cache = resetCache(length, initialItemSize, cache);\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\n\n// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { ReactNode } from \"react\";\nimport { exists } from \"../core/utils\";\n\nexport const refKey = \"current\";\n\nexport const isInvalidElement = <T extends ReactNode>(\n e: T\n): e is Extract<T, null | undefined | boolean> =>\n !exists(e) || typeof e === \"boolean\";\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useRefWithUpdate = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { refKey } from \"./utils\";\nimport { VirtualStore } from \"../core/store\";\n\nexport const useStore = <T>(\n store: VirtualStore,\n getSnapShot: () => T,\n shouldGetLatest?: boolean\n): T => {\n const [state, setState] = useState(getSnapShot);\n const getter = useRefWithUpdate(getSnapShot);\n\n useLayoutEffect(() => {\n const update = () => {\n setState(() => getter[refKey]());\n };\n return store._subscribe((sync) => {\n if (sync) {\n flushSync(update);\n } else {\n update();\n }\n });\n }, []);\n\n // especially for sort of items\n if (shouldGetLatest) {\n const snap = getSnapShot();\n if (state !== snap) {\n setState(snap);\n }\n }\n return state;\n};\n","import { once } from \"./utils\";\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRtl = once((scrollable: HTMLElement) => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n});\n","import { hasNegativeOffsetInRtl } from \"./dom\";\nimport {\n ACTION_SCROLL,\n ACTION_MANUAL_SCROLL,\n ScrollJump,\n VirtualStore,\n SCROLL_STOP,\n ACTION_SCROLL_END,\n} from \"./store\";\nimport { debounce, throttle, max, min } from \"./utils\";\n\nexport type Scroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _getActualScrollSize: () => number;\n _scrollTo: (offset: number) => void;\n _scrollToIndex: (index: number, count: number) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean,\n isRtl: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n\n const getActualScrollSize = (): number => {\n if (!rootElement) return 0;\n // Use element's scrollHeight/scrollWidth instead of stored scrollSize.\n // This is because stored size may differ from the actual size, for example when a new item is added and not yet measured.\n return isHorizontal ? rootElement.scrollWidth : rootElement.scrollHeight;\n };\n const normalizeRtlOffset = (offset: number, diff?: boolean): number => {\n if (hasNegativeOffsetInRtl(rootElement!)) {\n return -offset;\n } else {\n return diff\n ? -offset\n : store._getScrollSize() - store._getViewportSize() - offset;\n }\n };\n const scrollTo = (offset: number, diff?: boolean) => {\n if (!rootElement) return;\n if (isHorizontal && isRtl) {\n offset = normalizeRtlOffset(offset, diff);\n }\n if (diff) {\n rootElement[scrollToKey] += offset;\n } else {\n rootElement[scrollToKey] = offset;\n }\n };\n const scrollManually = async (\n index: number,\n getCurrentOffset: () => number\n ) => {\n const getOffset = (): number => {\n let offset = getCurrentOffset();\n const scrollSize = getActualScrollSize();\n const viewportSize = store._getViewportSize();\n if (scrollSize - (offset + viewportSize) <= 0) {\n // Adjust if the offset is over the end, to get correct startIndex.\n offset = scrollSize - viewportSize;\n }\n return offset;\n };\n\n while (true) {\n // Sync viewport to scroll destination\n // In order to scroll to the correct position, mount the items and measure their sizes before scrolling.\n store._update(ACTION_MANUAL_SCROLL, getOffset());\n\n if (!store._hasUnmeasuredItemsInRange(index)) {\n break;\n }\n\n try {\n // Wait for the scroll destination items to be measured.\n await store._waitForScrollDestinationItemsMeasured();\n } catch (e) {\n // canceled\n return;\n }\n }\n\n // Scroll with the updated value\n scrollTo(getOffset());\n store._update(ACTION_SCROLL_END, true);\n };\n\n return {\n _initRoot(root) {\n rootElement = root;\n\n const syncViewportToScrollPosition = () => {\n let offset = root[scrollToKey];\n if (isHorizontal && isRtl) {\n offset = normalizeRtlOffset(offset);\n }\n store._update(ACTION_SCROLL, offset);\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END, false);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n // Infer scroll state also from wheel events\n // Sometimes scroll events do not fire when frame dropped even if the visual have been already scrolled\n const onWheel = throttle((e: WheelEvent) => {\n if (store._getScrollDirection() === SCROLL_STOP) {\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 (\n offset > 0 &&\n offset < store._getScrollSize() - store._getViewportSize()\n ) {\n onScrollStopped();\n }\n }\n }, 50);\n\n root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _getActualScrollSize: getActualScrollSize,\n _scrollTo(offset) {\n offset = max(offset, 0);\n\n scrollManually(store._getItemIndexForScrollTo(offset), () => offset);\n },\n _scrollToIndex(index, count) {\n index = max(min(index, count - 1), 0);\n\n scrollManually(index, () => store._getItemOffset(index));\n },\n _fixScrollJump: (jump) => {\n scrollTo(jump, true);\n },\n };\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_WINDOW_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max, once } from \"./utils\";\n\nexport const createResizer = (store: VirtualStore, isHorizontal: boolean) => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n store._update(ACTION_WINDOW_RESIZE, contentRect[sizeKey]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type Resizer = ReturnType<typeof createResizer>;\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n vStore._update(ACTION_WINDOW_RESIZE, contentRect[heightKey]);\n hStore._update(ACTION_WINDOW_RESIZE, contentRect[widthKey]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type WindowComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomWindowComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: WindowComponentAttributes;\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 DefaultWindow = forwardRef<any, CustomWindowComponentProps>(\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 CustomWindowComponent = typeof DefaultWindow;\n","import {\n Children,\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n RefObject,\n useState,\n ReactFragment,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { exists, max, min } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { isInvalidElement, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { Resizer, createResizer } from \"../core/resizer\";\nimport { WindowComponentAttributes } from \"..\";\nimport {\n CustomWindowComponent,\n CustomWindowComponentProps,\n DefaultWindow,\n} from \"./DefaultWindow\";\n\nexport type ScrollMode = \"reverse\" | \"rtl\";\n\ntype ItemProps = {\n _children: ReactNode;\n _resizer: Resizer;\n _store: VirtualStore;\n _index: number;\n _element: \"div\";\n _isHorizontal: boolean;\n _isRtl: boolean;\n};\n\nconst Item = memo(\n ({\n _children: children,\n _resizer: resizer,\n _store: store,\n _index: index,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isRtl: isRtl,\n }: ItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const offset = useStore(store, () => store._getItemOffset(index), true);\n const hide = useStore(store, () => store._isUnmeasuredItem(index), true);\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const leftOrRightKey = isRtl ? \"right\" : \"left\";\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : leftOrRightKey]: 0,\n [isHorizontal ? leftOrRightKey : \"top\"]: offset,\n visibility: hide ? \"hidden\" : \"visible\",\n // willChange: \"transform\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n\nconst Window = ({\n _children: children,\n _ref: ref,\n _store: store,\n _element: Element,\n _scrolling: scrolling,\n _attrs: attrs,\n _isHorizontal: horizontal,\n}: {\n _children: ReactNode;\n _ref: RefObject<HTMLDivElement>;\n _store: VirtualStore;\n _element: CustomWindowComponent;\n _scrolling: boolean;\n _attrs: WindowComponentAttributes;\n _isHorizontal: boolean;\n}) => {\n const scrollSize = useStore(store, store._getScrollSize);\n\n return (\n <Element\n ref={ref}\n width={horizontal ? scrollSize : undefined}\n height={horizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...attrs,\n style: {\n overflow: horizontal ? \"auto hidden\" : \"hidden auto\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...attrs.style,\n },\n }),\n [attrs]\n )}\n >\n {children}\n </Element>\n );\n};\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 CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n */\n scrollToIndex(index: number): void;\n /**\n * Scroll to the given offset.\n * @param offset offset from start\n */\n scrollTo(offset: number): void;\n /**\n * Scroll by the given offset.\n * @param offset offset from current position\n */\n scrollBy(offset: number): void;\n}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps extends WindowComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * Scroll modes that should be set in certain situations.\n *\n * - `reverse`: This mode will Adjust some styles to be suitable for bottom-to-top scrolling.\n * - `rtl`: You have to set this mode if you use this component under `direction: rtl` style.\n */\n mode?: ScrollMode;\n /**\n * Customized element type for scrollable element. This element will get {@link CustomWindowComponentProps} as props.\n * @defaultValue {@link DefaultWindow}\n */\n element?: CustomWindowComponent;\n /**\n * Customized element type for item element. This element will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n itemElement?: CustomItemComponentOrElement;\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?: (payload: {\n /**\n * The start index of viewable items.\n */\n start: number;\n /**\n * The end index of viewable items.\n */\n end: number;\n /**\n * The total count of items.\n */\n count: number;\n }) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n mode,\n element = DefaultWindow,\n itemElement = \"div\",\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...windowAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => {\n const arr: (ReactElement | ReactFragment | string | number)[] = [];\n Children.forEach(children, (e) => {\n if (isInvalidElement(e)) {\n return;\n }\n arr.push(e);\n });\n return arr;\n }, [children]);\n const count = elements.length;\n\n const onScroll = useRefWithUpdate(onScrollProp);\n const onScrollStop = useRefWithUpdate(onScrollStopProp);\n\n const [scrolling, setScrolling] = useState(false);\n const [store, resizer, scroller, isHorizontal, isRtl] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _isRtl = mode === \"rtl\";\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n mode === \"reverse\",\n (isScrolling) => {\n setScrolling(isScrolling);\n if (!isScrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n },\n (offset) => {\n onScroll[refKey] && onScroll[refKey](offset);\n }\n );\n\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal, _isRtl),\n _isHorizontal,\n _isRtl,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useStore(store, store._getRange);\n const jumpCount = useStore(store, store._getJumpCount);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n return () => {\n unobserve();\n cleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp({\n start: startIndex,\n end: endIndex,\n count,\n });\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return scroller._getActualScrollSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex(index) {\n scroller._scrollToIndex(index, count);\n },\n scrollTo: scroller._scrollTo,\n scrollBy(offset) {\n scroller._scrollTo(store._getScrollOffset() + offset);\n },\n };\n },\n [count]\n );\n\n const startIndexWithMargin = max(startIndex - overscan, 0);\n const endIndexWithMargin = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = startIndexWithMargin; i <= endIndexWithMargin; i++) {\n const e = elements[i];\n // This can be undefined when items are removed\n if (exists(e)) {\n res.push(\n <Item\n key={(e as { key?: ReactElement[\"key\"] })?.key || i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={itemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={isRtl}\n />\n );\n }\n }\n return res;\n }, [elements, startIndexWithMargin, endIndexWithMargin]);\n\n return (\n <Window\n _ref={rootRef}\n _store={store}\n _element={element}\n _scrolling={scrolling}\n _children={items}\n _attrs={windowAttrs}\n _isHorizontal={isHorizontal}\n />\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n RefObject,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { max, min } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport {\n CustomWindowComponent,\n CustomWindowComponentProps,\n WindowComponentAttributes,\n} from \"..\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { DefaultWindow } from \"./DefaultWindow\";\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 _verticalStore: VirtualStore;\n _horizontalStore: VirtualStore;\n _rowIndex: number;\n _colIndex: number;\n _element: \"div\";\n _isRtl: boolean;\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _verticalStore: verticalStore,\n _horizontalStore: horizontalStore,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _element: Element,\n _isRtl: isRtl,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const top = useStore(\n verticalStore,\n () => verticalStore._getItemOffset(rowIndex),\n true\n );\n const left = useStore(\n horizontalStore,\n () => horizontalStore._getItemOffset(colIndex),\n true\n );\n const vHide = useStore(\n verticalStore,\n () => verticalStore._isUnmeasuredItem(rowIndex),\n true\n );\n const hHide = useStore(\n horizontalStore,\n () => horizontalStore._isUnmeasuredItem(colIndex),\n true\n );\n const height = useStore(\n verticalStore,\n () => verticalStore._getItemSize(rowIndex),\n true\n );\n const width = useStore(\n horizontalStore,\n () => horizontalStore._getItemSize(colIndex),\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, rowIndex, colIndex),\n [colIndex, rowIndex]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n display: \"grid\",\n margin: 0,\n padding: 0,\n position: \"absolute\",\n top: top,\n [isRtl ? \"right\" : \"left\"]: left,\n visibility: vHide || hHide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, vHide, hHide])}\n >\n {children}\n </Element>\n );\n }\n);\n\nconst Window = ({\n _children: children,\n _ref: ref,\n _vStore: vStore,\n _hStore: hStore,\n _element: Element,\n _scrolling: scrolling,\n _attrs: attrs,\n}: {\n _children: ReactNode;\n _ref: RefObject<HTMLDivElement>;\n _vStore: VirtualStore;\n _hStore: VirtualStore;\n _element: CustomWindowComponent;\n _scrolling: boolean;\n _attrs: WindowComponentAttributes;\n}) => {\n const height = useStore(vStore, vStore._getScrollSize);\n const width = useStore(hStore, hStore._getScrollSize);\n\n return (\n <Element\n ref={ref}\n width={width}\n height={height}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...attrs,\n style: {\n overflow: \"auto\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...attrs.style,\n },\n }),\n [attrs]\n )}\n >\n {children}\n </Element>\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 WindowComponentAttributes {\n /**\n * A function to create elements rendered by this component.\n */\n children: (arg: {\n /**\n * row index of cell\n */\n rowIndex: number;\n /**\n * column index of cell\n */\n colIndex: number;\n }) => ReactNode;\n /**\n * Total row length of grid.\n */\n row: number;\n /**\n * Total column length of grid.\n */\n col: number;\n /**\n * Cell height hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 40\n */\n cellHeight?: number;\n /**\n * Cell width hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 100\n */\n cellWidth?: number;\n /**\n * Number of items to render above/below the visible bounds of the grid. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 2\n */\n overscan?: number;\n /**\n * If set, the specified amount of rows will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialRowCount?: number;\n /**\n * If set, the specified amount of cols will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialColCount?: number;\n /**\n * You have to set true if you use this component under `direction: rtl` style.\n */\n rtl?: boolean;\n /**\n * Customized element type for scrollable element. This element will get {@link CustomWindowComponentProps} as props.\n * @defaultValue {@link DefaultWindow}\n */\n element?: CustomWindowComponent;\n /**\n * Customized element type for cell element. This element will get {@link CustomCellComponentProps} as props.\n * @defaultValue \"div\"\n */\n cellElement?: CustomCellComponentOrElement;\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n rtl: rtlProp,\n element = DefaultWindow,\n cellElement: itemElement = \"div\",\n ...windowAttrs\n },\n ref\n ): ReactElement => {\n const [verticalScrolling, setVerticalScrolling] = useState(false);\n const [horizontalScrolling, setHorizontalScrolling] = useState(false);\n const [vStore, hStore, resizer, vScroller, hScroller, isRtl] = useStatic(\n () => {\n const _isRtl = !!rtlProp;\n const dummy = () => {};\n const _vs = createVirtualStore(\n rowCount,\n cellHeight,\n initialRowCount,\n false,\n setVerticalScrolling,\n dummy\n );\n const _hs = createVirtualStore(\n colCount,\n cellWidth,\n initialColCount,\n false,\n setHorizontalScrolling,\n dummy\n );\n return [\n _vs,\n _hs,\n createGridResizer(_vs, _hs),\n createScroller(_vs, false, _isRtl),\n createScroller(_hs, true, _isRtl),\n _isRtl,\n ];\n }\n );\n // The elements length and cached items length are different just after element is added/removed.\n vStore._updateCacheLength(rowCount);\n hStore._updateCacheLength(colCount);\n\n const [startRowIndex, endRowIndex] = useStore(vStore, vStore._getRange);\n const [startColIndex, endColIndex] = useStore(hStore, hStore._getRange);\n const vJumpCount = useStore(vStore, vStore._getJumpCount);\n const hJumpCount = useStore(hStore, hStore._getJumpCount);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const vCleanup = vScroller._initRoot(root);\n const hCleanup = hScroller._initRoot(root);\n return () => {\n unobserve();\n vCleanup();\n hCleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [\n hScroller._getActualScrollSize(),\n vScroller._getActualScrollSize(),\n ];\n },\n get viewportSize(): [number, number] {\n return [hStore._getViewportSize(), vStore._getViewportSize()];\n },\n scrollToIndex(indexX, indexY) {\n hScroller._scrollToIndex(indexX, colCount);\n vScroller._scrollToIndex(indexY, rowCount);\n },\n scrollTo(offsetX, offsetY) {\n hScroller._scrollTo(offsetX);\n vScroller._scrollTo(offsetY);\n },\n scrollBy(offsetX, offsetY) {\n hScroller._scrollTo(hStore._getScrollOffset() + offsetX);\n vScroller._scrollTo(vStore._getScrollOffset() + offsetY);\n },\n };\n },\n [rowCount, colCount]\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 startRowIndexWithMargin = max(startRowIndex - overscan, 0);\n const endRowIndexWithMargin = min(endRowIndex + overscan, rowCount - 1);\n const startColIndexWithMargin = max(startColIndex - overscan, 0);\n const endColIndexWithMargin = min(endColIndex + overscan, colCount - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = startRowIndexWithMargin; i <= endRowIndexWithMargin; i++) {\n for (let j = startColIndexWithMargin; j <= endColIndexWithMargin; j++) {\n res.push(\n <Cell\n key={genKey(i, j)}\n _resizer={resizer}\n _verticalStore={vStore}\n _horizontalStore={hStore}\n _rowIndex={i}\n _colIndex={j}\n _element={itemElement as \"div\"}\n _children={render(i, j)}\n _isRtl={isRtl}\n />\n );\n }\n }\n\n return res;\n }, [\n render,\n startRowIndexWithMargin,\n endRowIndexWithMargin,\n startColIndexWithMargin,\n endColIndexWithMargin,\n ]);\n\n return (\n <Window\n _ref={rootRef}\n _vStore={vStore}\n _hStore={hStore}\n _element={element}\n _scrolling={verticalScrolling || horizontalScrolling}\n _children={items}\n _attrs={windowAttrs}\n />\n );\n }\n);\n"],"names":["min","Math","max","abs","now","Date","timeout","setTimeout","exists","v","range","length","cb","Array","from","_","i","once","fn","called","cache","args","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","isTotal","_length","_measuredOffsetIndex","_offsets","top","computeStartOffset","findIndex","distance","sum","h","findStartIndexWithOffset","offset","prevStartIndex","prevOffset","resetCache","itemSize","sumJumps","jump","reduce","acc","j","calculateJumps","items","map","createVirtualStore","elementsCount","initialItemCount","isReverse","onScrollStateChange","onScrollOffsetChange","shouldAutoEstimateItemSize","initialItemSize","_scrollToQueue","viewportSize","scrollOffset","jumpCount","_scrollDirection","_resized","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","updateScrollDirection","dir","prev","_getRange","prevEndIndex","start","end","findEndIndex","_isUnmeasuredItem","_hasUnmeasuredItemsInRange","startIndex","hasUnmeasuredItemsInRange","endIndex","_getItemOffset","_getItemSize","_getScrollOffset","_getViewportSize","_getScrollSize","_getScrollableDomSize","_getJumpCount","_flushJump","prevJump","undefined","_getItemIndexForScrollTo","_waitForScrollDestinationItemsMeasured","Promise","resolve","reject","resolved","resolveQueue","_subscribe","add","delete","_update","type","payload","shouldSync","updatedScrollState","mutated","updated","filter","diff","allJumps","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","isJustResized","flushIsJustResized","_getScrollDirection","_updateCacheLength","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","refKey","useRefWithUpdate","value","ref","useRef","useStore","store","getSnapShot","shouldGetLatest","state","setState","useState","getter","update","sync","flushSync","snap","hasNegativeOffsetInRtl","scrollable","key","isNegative","createScroller","isHorizontal","isRtl","rootElement","scrollToKey","getActualScrollSize","scrollWidth","scrollHeight","normalizeRtlOffset","scrollTo","scrollManually","async","getCurrentOffset","getOffset","scrollSize","e","_initRoot","root","syncViewportToScrollPosition","onScrollStopped","debounce","id","cancel","clearTimeout","debouncedFn","_cancel","onScroll","onWheel","throttle","time","n","ctrlKey","deltaX","deltaY","addEventListener","passive","removeEventListener","_getActualScrollSize","_scrollTo","_scrollToIndex","count","_fixScrollJump","useStatic","init","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","target","contentRect","get","push","_observeRoot","ro","observe","disconnect","_observeItem","el","set","unobserve","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","DefaultWindow","forwardRef","children","attrs","width","height","scrolling","_jsx","jsx","style","useMemo","position","visibility","pointerEvents","Item","memo","_children","_resizer","resizer","_store","_index","_element","Element","_isHorizontal","_isRtl","hide","leftOrRightKey","margin","padding","display","Window","Window$1","_ref","_scrolling","_attrs","horizontal","overflow","contain","VList","overscan","horizontalProp","mode","element","itemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","windowAttrs","elements","Children","isInvalidElement","setScrolling","scroller","isScrolling","rootRef","cleanup","useImperativeHandle","scrollToIndex","scrollBy","startIndexWithMargin","endIndexWithMargin","res","genKey","Cell","_verticalStore","verticalStore","_horizontalStore","horizontalStore","_rowIndex","_colIndex","left","vHide","hHide","minHeight","minWidth","_vStore","_hStore","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","rtl","rtlProp","cellElement","verticalScrolling","setVerticalScrolling","horizontalScrolling","setHorizontalScrolling","vScroller","hScroller","dummy","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","vJumpCount","hJumpCount","vCleanup","hCleanup","indexX","indexY","offsetX","offsetY","render","startRowIndexWithMargin","endRowIndexWithMargin","startColIndexWithMargin","endColIndexWithMargin"],"mappings":";iEAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,EAAMC,CAAKD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACXE,CAAMD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKC,IACXC,CAAMF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKE,CACXC,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,KAAKD,CACXE,CAAAA,CAAAA,CAAAA,CAAAA,CAAUC,CAEVC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAaC,GAAiD,CAALA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEzDC,CAAQA,CAAAA,CAAIC,EAAgBC,CACvCC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,KAAK,CAAEH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAACI,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAMJ,CAAGI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CA4CzBC,EAA2CC,CACtD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIC,CACAC,CAAAA,CAAAA,CAEJ,MAAQ,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACLF,CACHA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,EACTC,CAAQF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMG,IAETD,CACR,CAAA,CAAA,CC5DUE,GAAY,CAUZC,CAAAA,CAAAA,CAAcA,CAACH,CAAAA,CAAcI,KACxC,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOL,CAAMM,CAAAA,CAAAA,CAAOF,GAC1B,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASH,CAAWF,CAAAA,CAAAA,CAAMO,EAAmBF,CAAI,CAAA,CAepDG,EAAgBA,CACpBR,CAAAA,CACAI,EACAK,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAKT,CAAMU,CAAAA,CAAAA,CAAS,OAAO,CAC3B,CAAA,CAAA,CAAA,CAAIV,CAAMW,CAAAA,CAAAA,CAAAA,CAAwBP,EAChC,CAAIK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACKT,CAAMY,CAAAA,CAAAA,CAASR,GAAUD,CAAYH,CAAAA,CAAAA,CAAOI,GAE5CJ,CAAMY,CAAAA,CAAAA,CAASR,GAI1B,CAAIR,CAAAA,CAAAA,CAAAA,CAAAA,CAAII,CAAMW,CAAAA,CAAAA,CACVE,EAAMb,CAAMY,CAAAA,CAAAA,CAAShB,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,GAAKQ,CACVJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAMY,CAAShB,CAAAA,CAAAA,CAAAA,CAAKiB,EAChBjB,CAAMQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUK,IAGpBI,CAAOV,CAAAA,CAAAA,CAAAA,CAAYH,EAAOJ,CAC1BA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAIF,CADAI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMW,EAAuBP,CACtBS,CAAAA,CAAG,CAOCC,CAAAA,CAAAA,CAAqBA,CAChCd,CACAI,CAAAA,CAAAA,CAAAA,CAAAA,CAEOI,CAAcR,CAAAA,CAAAA,CAAOI,GAGxBW,CAAYA,CAAAA,CAACf,EAAcJ,CAAWoB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC1C,IAAIC,CAAM,CAAA,CAAA,CACV,CAAID,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,EAEd,CAAOpB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAII,CAAMU,CAAAA,CAAAA,CAAU,GAAG,CAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMQ,CAAIf,CAAAA,CAAAA,CAAYH,EAAOJ,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAKqB,GAAOC,CAAMF,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CACtBC,CAAMC,CAAAA,CAAAA,CAAI,CAAKF,CAAAA,CAAAA,CAAAA,CAAAA,CACjBpB,IAEF,CACD,CAAA,CAAA,CAAA,CAAA,CACF,CAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,EAAI,CAAG,CAAA,CAAA,CACZ,CAAMsB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIf,EAAYH,CAASJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC/B,CAAKqB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOC,IAAMF,CAAU,CAAA,CACtBC,CAAMC,CAAAA,CAAAA,CAAI,EAAIF,CAChBpB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEF,CACD,CAAA,CAAA,CAAA,CAAA,CACF,CAGH,CAAOhB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIE,CAAIc,CAAAA,CAAAA,CAAG,GAAII,CAAMU,CAAAA,CAAAA,CAAU,EAAE,CAG7BS,CAAAA,CAAAA,CAA2BA,CACtCnB,CACAoB,CAAAA,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAEOP,EAAUf,CAAOqB,CAAAA,CAAAA,CAAgBD,CAASE,CAAAA,CAAAA,CAAAA,CA8BtCC,EAAaA,CACxBhC,CAAAA,CACAiC,CACAxB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEO,CACLO,CAAkBP,CAAAA,CAAAA,CAAQA,EAAMO,CAAmBiB,CAAAA,CAAAA,CACnDd,EAASnB,CACToB,CAAAA,CAAAA,CAAsBX,CAClBpB,CAAAA,CAAAA,CAAIoB,EAAMW,CAAsBpB,CAAAA,CAAAA,CAAS,CACzC,CAAA,CAAA,CAAA,CACJe,EAAQhB,CAAMC,CAAAA,CAAAA,CAAAA,CAASK,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMS,EAAOL,CAASA,CAAAA,CAAAA,CAAAA,CAAMM,EAAOV,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIR,EAAOiB,CACFA,CAAAA,CAAAA,CAAAA,CAEFH,CAAQ,CAAA,CAAA,CAAA,CAEjBU,EAAUtB,CAAMC,CAAAA,CAAAA,CAAAA,CAASK,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,IAANA,CAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAET,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMwB,EAASpB,CAASA,CAAAA,CAAAA,CAAAA,CAAMY,EAAShB,CACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIR,EAAOgC,CACFA,CAAAA,CAAAA,CAAAA,CAEFlB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CC7IfuB,EAAYC,CAChBA,CAAAA,CAAAA,CAAAA,CAAKC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACC,GAAMC,CAAOD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,CAAG,CAAA,CAAA,CAAA,CAAA,CAC/BC,EAAiBA,CAAC9B,CAAAA,CAAc+B,IAC7BA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,EAAE5B,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACjB,CAACA,CAAAA,CAAOF,EAAYH,CAAOI,CAAAA,CAAAA,CAAAA,CAAQA,CAiDjC6B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAqBA,CAChCC,CACAV,CAAAA,CAAAA,CACAW,CAA2B,CAAA,CAAA,CAC3BC,EACAC,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEA,MAAMC,CAA8Bf,CAAAA,CAAAA,CAAAA,CAC9BgB,EAAkBhB,CAAY,CAAA,CAAA,CAAA,CAAA,CACpC,CAGIE,CAAAA,CAAAA,CAAAA,CAAAA,CAKAe,EARAC,CAAeF,CAAAA,CAAAA,CAAkB1D,CAAIqD,CAAAA,CAAAA,CAAmB,EAAG,CAC3DQ,CAAAA,CAAAA,CAAAA,CAAe,CACfC,CAAAA,CAAAA,CAAY,EAEZ5C,CAAQuB,CAAAA,CAAAA,CAAWW,EAAeM,CAClCK,CAAAA,CAAAA,CAAAA,CA5DqB,EA6DrBC,CAAW,CAAA,CAAA,CAAA,CACXC,CAAyB,CAAA,CAAC,EAAGZ,CAGjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMa,CAAc,CAAA,CAAA,CAAA,CAAA,CAAIC,IAClBC,CAAgBA,CAAAA,CAAAA,CAAAA,CAAAA,CDpCSlD,CACxBQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAcR,EAAOA,CAAMU,CAAAA,CAAAA,CAAU,CAAG,CAAA,CAAA,CAAA,CAAA,CCoC7CyC,CAAiBnD,CAMboD,CAAAA,CAAAA,CAAAA,CAAyBC,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAAOT,CAEb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CADAA,CAAmBQ,CAAAA,CAAAA,CA3EI,IA4EnBR,CA5EmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA+ErBS,CA9EqB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA+EpBT,GA9EkB,CA8EkBA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAFhC,EAMP,CAGF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CACLU,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOlC,CAAgBmC,CAAAA,CAAAA,CAAAA,CAAgBT,EACjCzB,CAAaR,CAAAA,CAAAA,CACjBd,CACAqB,CAAAA,CAAAA,CAAAA,CAEIoC,EAAQtC,CACZnB,CAAAA,CAAAA,CACA2C,CACAtB,CAAAA,CAAAA,CACAC,GAEIoC,CAAMC,CAAAA,CAAAA,CAAa3D,EAAOyD,CAAOf,CAAAA,CAAAA,CAAAA,CACvC,OAAIrB,CAAmBoC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASD,CAAiBE,CAAAA,CAAAA,CAAAA,CAAAA,CACxCX,EAEDA,CAAa,CAAA,CAACU,CAAOC,CAAAA,CAAAA,CAC9B,EACDE,CAAkBxD,CAAAA,CAAAA,CAAAA,CACTJ,CAAMM,CAAAA,CAAAA,CAAOF,KAAWF,CAEjC2D,CAAAA,CAAAA,CAA2BC,GD5BUC,CACvC/D,CAAAA,CAAAA,CACA8D,EACAE,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAIpE,CAAAA,CAAAA,CAAAA,CAAAA,CAAIkE,EAAYlE,CAAKoE,CAAAA,CAAAA,CAAAA,CAAUpE,CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAII,EAAMM,CAAOV,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOM,CACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EAGX,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,ECmBD6D,CACL/D,CAAAA,CACAlB,EAAI,CAAGgF,CAAAA,CAAAA,CAAa,CACpBlF,CAAAA,CAAAA,CAAAA,CAAIoB,EAAMU,CAAU,CAAA,CAAA,CAAGoD,CAAa,CAAA,CAAA,CAAA,CAAA,CAGxCG,EAAe7D,CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMgB,CAASN,CAAAA,CAAAA,CAAmBd,EAA2BI,CAC7D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIgC,EACKhB,CAAStC,CAAAA,CAAAA,CAAI,EAAG4D,CAAeQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEjC9B,CACR,CAAA,CACD8C,EAAa9D,CACJD,CAAAA,CAAAA,CAAAA,CAAYH,CAAOI,CAAAA,CAAAA,CAAAA,CAE5B+D,EAAgBA,CACPxB,CAAAA,CAAAA,CAAAA,CAAAA,CAETyB,CAAgBA,CAAAA,CAAAA,CAAAA,CAAAA,CACP1B,EAET2B,CAAcA,CAAAA,CAAAA,CAAAA,CAAAA,CACLnB,IAEToB,CAAqBA,CAAAA,CAAAA,CAAAA,CAAAA,CACZxF,EAAIoE,CAAiBR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAE9B6B,CAAaA,CAAAA,CAAAA,CAAAA,CAAAA,CACJ3B,EAET4B,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAW/C,CAAAA,CAAAA,CAEjB,OADAA,CAAOgD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACAD,CACR,CAAA,CACDE,EAAyBvD,CAChBD,CAAAA,CAAAA,CAAAA,CAAyBnB,EAAOoB,CAAQ,CAAA,CAAA,CAAG,GAEpDwD,CAAsCA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAChCnC,CAEFA,CAAAA,CAAAA,CAAAA,CAAe,KAIV,CAAIoC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAACC,CAAAA,CAASC,KAC3B,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgC,CAEpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAAeA,CACfD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACJA,GAAW,CACXF,CAAAA,CAAAA,CAAAA,CAAAA,CACArC,OAAiBiC,CAAS,CAAA,CAAA,CAE5BjC,CAAiB,CAAA,CAACwC,EAAcF,CAGhC7F,CAAAA,CAAAA,CAAAA,CAAQ+F,CAAc,CAAA,CAAA,CAAA,CAAA,CAAI,KAG9BC,CAAW1F,CAAAA,CAAAA,CAAAA,CAAAA,CACTwD,CAAYmC,CAAAA,CAAAA,CAAAA,CAAAA,CAAI3F,GACT,CACLwD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAYoC,OAAO5F,CAAG,CAAA,CAAA,CAAA,CAG1B6F,EAAQC,CAAMC,CAAAA,CAAAA,CAAAA,CACZ,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CACAC,EACAC,CAAU,CAAA,CAAA,CAAA,CAEd,CAAQJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACN,KA7K0B,CA6KD,CAAA,CACvB,CAAMK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUJ,EAAQK,CACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAExF,EAAOC,CAAUL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMM,EAAOF,CAAWC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAG7C,CAAKsF,CAAAA,CAAAA,CAAAA,CAAAA,CAAQpG,OACX,CAGF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIsG,CAAO,CAAA,CAAA,CAEX,GAhMe,CAgMXhD,CAAAA,CAAAA,CAAAA,CAAAA,CACFgD,CAAOpE,CAAAA,CAAAA,CAASK,EAAe9B,CAAO2F,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACjC,GAjMY,CAiMR9C,CAAAA,CAAAA,CAAAA,CAAAA,CAAoC,CAC7C,CAAMiD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWhE,CAAe9B,CAAAA,CAAAA,CAAO2F,IAChC7B,CAAcf,CAAAA,CAAAA,CAAAA,CAEA,CAAjBJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAIFkD,EAFS3C,CAAmBP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAeD,CAEpCjB,CAAAA,CAAAA,CAASqE,GAGTrE,CACLqE,CAAAA,CAAAA,CAASF,QAAO,CAAIxF,CAAAA,CAAAA,KAAWA,CAAQ0D,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAG5C,CAIG+B,CAAAA,CAAAA,CAAAA,CACFnE,EAAOmE,CACPjD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAIF,CAAImD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAoB,EACxBJ,CAAQK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAE5F,CAAAA,CAAAA,CAAOC,MDzOR4F,CACzBjG,CAAAA,CAAAA,CACAI,EACAC,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM6F,EAAuBlG,CAAMM,CAAAA,CAAAA,CAAOF,CAAWF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAIrD,OAHAF,CAAMM,CAAAA,CAAAA,CAAOF,CAASC,CAAAA,CAAAA,CAAAA,CAEtBL,EAAMW,CAAuB/B,CAAAA,CAAAA,CAAIwB,CAAOJ,CAAAA,CAAAA,CAAMW,GACvCuF,CAAoB,CAAA,CCiObD,CAAYjG,CAA2BI,CAAAA,CAAAA,CAAOC,KAChD0F,CAAoB,CAAA,CAAA,CAAA,CACrB,CAKDxD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACAwD,IAECpD,CD3I2B3C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACtC,CAAMmG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgBnG,EAAMM,CAAOsF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQQ,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMlG,IAEjDmG,CAAgBF,CAAAA,CAAAA,CAAc,GAEpCnG,CAAMO,CAAAA,CAAAA,CAAmB4F,EAAcG,CAAOF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEtDA,EDvHiBE,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMH,CAAI,CAAA,CAAA,CAAA,CAAA,CAAIG,GAAKC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAACC,CAAGC,CAAAA,CAAAA,CAAAA,CAAAA,CAAMD,EAAIC,CAChCC,CAAAA,CAAAA,CAAAA,CAAAA,CAAOJ,CAAIhH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,EAAK,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO6G,CAAE7G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,GAAM,CAAK6G,CAAAA,CAAAA,CAAAA,CAAEO,CAAM,CAAA,CAAA,CAAA,CAAMP,EAAEO,CAAS,CAAA,CAAA,CAAA,CAAA,CAAIP,CAAEO,CAAAA,CAAAA,CAAK,ECsH7DC,CAAOT,CAAAA,CAAc,ECoIfU,CAAwB7G,CAAAA,CAAAA,CAG1B8C,EAAW0C,CAAaE,CAAAA,CAAAA,CAAAA,CAAU,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,CACD,CAtO4B,CAAA,CAAA,CAAA,CAAA,CAAA,CAuO1BA,CAAUhD,CAAAA,CAAAA,CAAAA,CAAAA,CAAiB6C,EAC3B7C,CAAe6C,CAAAA,CAAAA,CACf,CAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA1OqB,EA2OrB,CA1O4B,CAAA,CAAA,CAAA,CAAA,CAAA,CA4O1B,GAAI5C,CAAiB4C,CAAAA,CAAAA,CAAAA,CAAAA,CACnB,MAGF,CAjPmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAiPfD,CAAwB,CAAA,CAG1B,MAAMwB,CA5LWC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACzB,CAAMzD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOR,EAEb,CADAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAW,CACJQ,CAAAA,CAAI,EAyLmByD,CAhQP,CAAA,CAAA,CAAA,CAAA,CAAA,CAkQZlE,GAAqCiE,CA/PvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAiQfjE,IAEA4C,CAAqBrC,CAAAA,CAAAA,CACnBT,CAAe4C,CAAAA,CAAAA,CArQN,EADE,CA8QfC,CAAAA,CAAAA,CAAAA,CAAAA,CAAazG,CAAI4D,CAAAA,CAAAA,CAAe4C,GAAW7C,CAC5C,CAEDC,CAAe4C,CAAAA,CAAAA,CACfG,GAAU,CACV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEF,KAxQyB,CAyQvBD,CAAAA,CAAAA,CAAqBrC,EACnBmC,CArRiB,CAAA,CAAA,CAHF,CA8RjBG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACF1C,EAAYgD,CAASxG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACnBA,CAAGgG,CAAAA,CAAAA,CAAW,IApRK,CAuRjBF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACFhD,CAAqBK,CAAAA,CAAAA,CAAAA,CAAAA,CAGrBF,GA7RwB,CA8RtB6C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACF7C,EAAe,CAGfrD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOqG,IACTpD,CAAoBoD,CAAAA,CAAAA,CAEvB,CACDuB,CAAAA,CAAAA,CAAmBA,IACVnE,CAEToE,CAAAA,CAAAA,CAAmB1H,CAEbS,CAAAA,CAAAA,CAAAA,CAAMU,IAAYnB,CACtBS,CAAAA,CAAAA,CAAAA,CAAAA,CAAQuB,CAAWhC,CAAAA,CAAAA,CAAQiD,EAAiBxC,CAC7C,CAAA,CAAA,CAAA,CACF,EClVUkH,CACO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAXC,OAAyBC,CAAeA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAGC,CAASA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CCDhDC,EAAS,CCCTC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAuBC,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAAMC,SAAUF,CAMtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAJAN,GAA0B,CACxBO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIH,GAAUE,CAAK,CAAA,CAAA,CAClB,CAACA,CAEGC,CAAAA,CAAAA,CAAAA,CAAG,CCLCE,CAAAA,CAAAA,CAAWA,CACtBC,CACAC,CAAAA,CAAAA,CACAC,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOC,EAAOC,CAAYC,CAAAA,CAAAA,CAAAA,CAAQA,CAACJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC7BK,EAASX,CAAiBM,CAAAA,CAAAA,CAAAA,CAgBhC,CAdAT,CAAAA,CAAAA,CAAAA,CAAAA,iBAAgB,CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMe,CAASA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACbH,GAAS,CAAME,CAAAA,CAAAA,CAAAA,CAAAA,CAAOZ,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAElC,OAAOM,CAAM1C,CAAAA,CAAAA,CAAAA,CAAYkD,CACnBA,CAAAA,CAAAA,CAAAA,CAAAA,CACFC,EAASA,CAACF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEVA,GACD,CACD,CAAA,CAAA,CAAA,CAAA,CACD,IAGCL,CAAiB,CAAA,CACnB,CAAMQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOT,IACTE,CAAUO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACZN,CAASM,CAAAA,CAAAA,CAEZ,CACD,CAAOP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CC1BDQ,CAAAA,CAAAA,CAAyB1I,GAAM2I,CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAAM,CACNnF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOkF,EAAWC,CACxBD,CAAAA,CAAAA,CAAAA,CAAWC,CAAO,CAAA,CAAA,CAAA,CAElB,MAAMC,CAAaF,CAAAA,CAAAA,CAAWC,CAAO,CAAA,CAAA,CAAA,CAErC,OADAD,CAAWC,CAAAA,CAAAA,CAAAA,CAAOnF,CACXoF,CAAAA,CAAU,ICINC,CAAiBA,CAAAA,CAC5Bf,EACAgB,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEA,IAAIC,CACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAcH,CAAAA,CAAAA,CAAe,aAAe,CAE5CI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAsBA,CACrBF,CAAAA,CAAAA,CAAAA,CAAAA,CAGEF,EAAeE,CAAYG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAcH,CAAYI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAHnC,EAKrBC,CAAqBA,CAAAA,CAAC/H,EAAgByE,CACtC0C,CAAAA,CAAAA,CAAAA,CAAAA,CAAuBO,IAGlBjD,CAFCzE,CAAAA,CAAAA,CAAAA,CAIJwG,CAAMvD,CAAAA,CAAAA,CAAAA,CAAAA,CAAmBuD,EAAMxD,CAAqBhD,CAAAA,CAAAA,CAAAA,CAAAA,CAGtDgI,CAAWA,CAAAA,CAAChI,EAAgByE,CAC3BiD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACDF,CAAgBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAClBzH,EAAS+H,CAAmB/H,CAAAA,CAAAA,CAAQyE,IAElCA,CACFiD,CAAAA,CAAAA,CAAYC,IAAgB3H,CAE5B0H,CAAAA,CAAAA,CAAYC,CAAe3H,CAAAA,CAAAA,CAAAA,CAC5B,EAEGiI,CAAiBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACrBlJ,CACAmJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAEA,MAAMC,CAAYA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAChB,CAAIpI,CAAAA,CAAAA,CAAAA,CAAAA,CAASmI,IACb,CAAME,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAaT,IACbtG,CAAekF,CAAAA,CAAAA,CAAMxD,IAK3B,CAJIqF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAcrI,CAASsB,CAAAA,CAAAA,CAAAA,CAAAA,CAAiB,IAE1CtB,CAASqI,CAAAA,CAAAA,CAAa/G,CAEjBtB,CAAAA,CAAAA,CAAM,EAGf,CAGEwG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMvC,CN7BwB,CAAA,CAAA,CM6BMmE,KAE/B5B,CAAM/D,CAAAA,CAAAA,CAA2BzD,IAItC,CAEQwH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMhD,GACb,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO8E,CAEP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,CAIHN,CAASI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACT5B,CAAMvC,CAAAA,CAAAA,CN7CuB,GM6CI,CAAK,CAAA,CAAA,CAGxC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CACLsE,EAAUC,CACRd,CAAAA,CAAAA,CAAAA,CAAcc,CAEd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAA+BA,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIzI,CAASwI,CAAAA,CAAAA,CAAKb,GACdH,CAAgBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAClBzH,CAAS+H,CAAAA,CAAAA,CAAmB/H,IAE9BwG,CAAMvC,CAAAA,CAAAA,CN3De,CM2DQjE,CAAAA,CAAAA,CAAO,EAGhC0I,CRtFYC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAItB,IAAIC,CAEJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,EAASA,CACT7K,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO4K,CACTE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAaF,EACd,CAEGG,CAAAA,CAAAA,CAAcA,CAClBF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACAD,EAAK9K,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX8K,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CQ0EHH,IACAjC,CAAMvC,CAAAA,CAAAA,CN/DmB,GM+DQ,CR1E/B,CAAA,CAAA,CAAA,CQ2ED,IR1EC,CAGR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CADA8E,CAAYC,CAAAA,CAAAA,CAAUH,EACfE,CAAW,CAAA,CQmEUJ,CAMlBM,CAAAA,CAAAA,CAAAA,CAAWA,KACfR,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAiB,CAKbQ,CAAAA,CAAAA,CR7EYC,MAItB,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAOxL,IQ8FJ,CR7FP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAIiB,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMwK,CAAIzL,CAAAA,CAAAA,CAAAA,CAAAA,CACNwL,EQ2FC,CR3FWC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACdD,CAAOC,CAAAA,CAAAA,CQqEmBf,KACxB,CNxFmB,CAAA,CAAA,CAAA,CAAA,CAAA,CMwFf9B,CAAMZ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAIN0C,EAAEgB,CAOF9B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAec,EAAEiB,CAASjB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAEkB,QAAQ,CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMxJ,CAASwG,CAAAA,CAAAA,CAAMzD,IAEnB/C,CAAS,CAAA,CAAA,CAAA,CACTA,CAASwG,CAAAA,CAAAA,CAAMvD,IAAmBuD,CAAMxD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAExC0F,CAEH,CAAA,CAAA,CAAA,CAAA,CRxFHhK,IAAMG,CACP,CAAA,CAAA,CACF,EQkEmBsK,CA0BhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAHAX,EAAKiB,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAUR,CAChCT,CAAAA,CAAAA,CAAAA,CAAKiB,iBAAiB,CAASP,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,CAAEQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,IAE5C,CACLlB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKmB,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAUV,GACnCT,CAAKmB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAoB,QAAST,CAClCR,CAAAA,CAAAA,CAAAA,CAAgBM,GAAS,CAE5B,CAAA,CACDY,CAAsBhC,CAAAA,CAAAA,CACtBiC,EAAU7J,CACRA,CAAAA,CAAAA,CAAAA,CAAStC,CAAIsC,CAAAA,CAAAA,CAAQ,GAErBiI,CAAezB,CAAAA,CAAAA,CAAMjD,CAAyBvD,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,IAAMA,CAC9D,CAAA,CAAA,CAAA,CACD8J,EAAe9K,CAAO+K,CAAAA,CAAAA,CAAAA,CACpB/K,EAAQtB,CAAIF,CAAAA,CAAAA,CAAIwB,CAAO+K,CAAAA,CAAAA,CAAQ,GAAI,CAEnC9B,CAAAA,CAAAA,CAAAA,CAAejJ,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMwH,EAAM3D,CAAe7D,CAAAA,CAAAA,CAAAA,CAAAA,CAClD,CACDgL,CAAAA,CAAAA,CAAiB1J,IACf0H,CAAS1H,CAAAA,CAAAA,CAAAA,CAAM,EAAK,CAEvB,CAAA,CAAA,CC/JU2J,EAAgBC,CAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM7D,CAAMC,CAAAA,CAAAA,CAAAA,SACZ,CAAOD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIH,CAAYG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIH,GAAUgE,CAAO,CAAA,CAAA,CAAA,CAAA,CCGjCC,CAAgBA,CAAAA,CAAC3D,EAAqBgB,CACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIE,EACJ,CAAM0C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU5C,EAAe,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnC6C,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAIC,QAGrBC,CAAoB9L,CAAAA,CAAAA,CAAAA,CAAK,CAEtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI+L,gBAAgBC,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAwB,CAAA,CAAA,CAAA,CAC9B,IAAK,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAEA,EAAMC,CAAEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAiBH,EACpC,CAAIE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWjD,CACblB,CAAAA,CAAAA,CAAMvC,ERoBoB,CQpBU2G,CAAAA,CAAAA,CAAYR,CAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,MAAMpL,CAAQqL,CAAAA,CAAAA,CAAeQ,CAAIF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC7B3M,EAAOgB,CACT0L,CAAAA,CAAAA,CAAAA,CAAAA,CAAQI,KAAK,CAAC9L,CAAAA,CAAO4L,EAAYR,CAEpC,CAAA,CAAA,CAAA,CAGCM,CAAQvM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACVqI,EAAMvC,CRSoB,CAAA,CAAA,CQTQyG,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIL,MAAO,CACLK,CAAAA,CAAavC,CACXd,CAAAA,CAAAA,CAAAA,CAAcc,EACd,CAAMwC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKT,IAEX,CADAS,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAGC,QAAQzC,CACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACLwC,CAAGE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CAElB,CACDC,CAAAA,CAAAA,CAAaC,CAAiB5M,CAAAA,CAAAA,CAAAA,CAC5B,MAAMwM,CAAKT,CAAAA,CAAAA,CAAAA,CAAAA,CAGX,CAFAF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAegB,IAAID,CAAI5M,CAAAA,CAAAA,CAAAA,CACvBwM,EAAGC,CAAQG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACJ,KACLf,CAAerG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOoH,CACtBJ,CAAAA,CAAAA,CAAAA,CAAGM,UAAUF,CAAG,CAAA,CAEnB,CACF,CAAA,CAAA,CAKUG,EAAoBA,CAC/BC,CAAAA,CACAC,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI/D,EAEJ,CAAMgE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,SACZC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACXtB,EAAiB,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAMrBsB,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAI/J,IAC5BgK,CAAwB,CAAA,CAAA,CAAA,CAAA,CAAIhK,CAC5BiK,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,IAAIC,CAChBC,CAAAA,CAAAA,CAAAA,CAAAA,CAASA,CAACC,CAAAA,CAAkBC,IAC7B,CAAAD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAYC,IAGX3B,CAAoB9L,CAAAA,CAAAA,CAAAA,CAAK,IAEtB,CAAI+L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgBC,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM0B,EAAc,CAAItK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAClBuK,CAAc,CAAA,CAAA,CAAA,CAAA,CAAIvK,IACxB,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM8I,CAAEA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,YAAEA,CAAiBH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACpC,CAAIE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWjD,EACb8D,CAAOvH,CAAAA,CAAAA,CR9CmB,CQ8CW2G,CAAAA,CAAAA,CAAYc,IACjDD,CAAOxH,CAAAA,CAAAA,CR/CmB,CQ+CW2G,CAAAA,CAAAA,CAAYe,QAC5C,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMU,CAAOhC,CAAAA,CAAAA,CAAeQ,IAAIF,CAChC,CAAA,CAAA,CAAA,CAAA,CAAI0B,EAAM,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOJ,EAAUC,CAAYG,CAAAA,CAAAA,CAAAA,CACvBhF,CAAM2E,CAAAA,CAAAA,CAAOC,EAAUC,CACvBI,CAAAA,CAAAA,CAAAA,CAAWR,CAAUjB,CAAAA,CAAAA,CAAAA,CAAAA,CAAIxD,GACzBpI,CAAiB,CAAA,CACrB2L,CAAYc,CAAAA,CAAAA,CAAAA,CACZd,EAAYe,CAEd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIY,EACAC,CACCF,CAAAA,CAAAA,CAAAA,CAGCA,EAAS,CAAOrN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CACvBsN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,GAEXD,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOrN,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CACvBuN,GAAa,CANfD,CAAAA,CAAAA,CAAAA,CAAAA,CAAaC,CAAa,CAAA,CAAA,CAAA,CASxBD,GACFJ,CAAYpI,CAAAA,CAAAA,CAAAA,CAAAA,CAAIkI,GAEdO,CACFJ,CAAAA,CAAAA,CAAAA,CAAYrI,IAAImI,CAEdK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAcC,CAChBV,CAAAA,CAAAA,CAAAA,CAAAA,CAAUT,IAAIhE,CAAKpI,CAAAA,CAAAA,CAEtB,CACF,CAGH,GAAIkN,CAAYlN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMwN,EAA8B,CACpCN,CAAAA,CAAAA,CAAAA,CAAYvH,SAASqH,CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIS,EAAY,CAChBb,CAAAA,CAAAA,CAAsBjH,CAASsH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC7B,MAAMjN,CAAO6M,CAAAA,CAAAA,CAAUjB,CAAImB,CAAAA,CAAAA,CAAAA,CAAAA,CAAOC,EAAUC,CACxCjN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACFyN,CAAYhP,CAAAA,CAAAA,CAAIgP,EAAWzN,CAAK,CAAA,CAAA,CAAA,CAAA,CACjC,IAECyN,CACFD,CAAAA,CAAAA,CAAAA,CAAc3B,KAAK,CAACmB,CAAAA,CAAUS,CAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAEHlB,EAAOvH,CRlGmB,CAAA,CAAA,CQkGSwI,CACpC,CAAA,CACD,GAAIL,CAAYnN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,CACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM0N,EAA6B,CACnCP,CAAAA,CAAAA,CAAAA,CAAYxH,SAASsH,CACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIU,EAAW,CACfhB,CAAAA,CAAAA,CAAsBhH,CAASqH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAC7B,MAAMhN,CAAO6M,CAAAA,CAAAA,CAAUjB,CAAImB,CAAAA,CAAAA,CAAAA,CAAAA,CAAOC,EAAUC,CACxCjN,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACF2N,CAAWlP,CAAAA,CAAAA,CAAIkP,EAAU3N,CAAK,CAAA,CAAA,CAAA,CAAA,CAC/B,IAEC2N,CACFD,CAAAA,CAAAA,CAAAA,CAAa7B,KAAK,CAACoB,CAAAA,CAAUU,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAEHnB,EAAOxH,CRlHmB,CAAA,CAAA,CQkHS0I,CACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIL,MAAO,CACL5B,CAAAA,CAAavC,CACXd,CAAAA,CAAAA,CAAAA,CAAcc,EACd,CAAMwC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKT,CAEX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CADAS,EAAGC,CAAQzC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACJ,CACLwC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAGE,YAAY,CAElB,CAAA,CACDC,CAAaC,CAAAA,CAAAA,CAAiBa,EAAkBC,CAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMlB,CAAKT,CAAAA,CAAAA,CAAAA,CAAAA,CAKX,OAJAF,CAAegB,CAAAA,CAAAA,CAAAA,CAAAA,CAAID,EAAI,CAACa,CAAAA,CAAUC,IAClCN,CAAsB7H,CAAAA,CAAAA,CAAAA,CAAAA,CAAIkI,CAC1BJ,CAAAA,CAAAA,CAAAA,CAAsB9H,IAAImI,CAC1BlB,CAAAA,CAAAA,CAAAA,CAAGC,CAAQG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACJ,KACLf,CAAerG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOoH,CACtBJ,CAAAA,CAAAA,CAAAA,CAAGM,UAAUF,CAAG,CAAA,CAEnB,EACF,CC1IUyB,CAAAA,CAAAA,CAAgBC,EAAAA,CAC3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAGC,CAAUC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOC,QAAOC,CAAQC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa9G,CAE5C+G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAC,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAKhH,CAAKA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS2G,EACjBD,CAAAK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAC,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEC,MAAOC,CAAOA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAC,CACN,CAAA,CAAA,CAAA,CAAA,CACLC,SAAU,CACVC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CACZR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOA,QAAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChBC,CAAQA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAU,CAClBQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAeP,EAAY,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAErC,CAACF,CAAOC,CAAAA,CAAAA,CAAQC,CAElBJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,QCZLY,CAAOC,CAAAA,CAAAA,CAAIA,CACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEC,EAAWd,CACXe,CAAAA,CAAAA,CAAUC,CACVC,CAAAA,CAAAA,CAAQxH,EACRyH,CAAQjP,CAAAA,CAAAA,CACRkP,EAAUC,CACVC,CAAAA,CAAAA,CAAe5G,EACf6G,CAAQ5G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAER,CAAMpB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,GAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAE7BtG,CAASuG,CAAAA,CAAAA,CAASC,GAAO,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM3D,CAAe7D,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,GAC5DsP,CAAO/H,CAAAA,CAAAA,CAASC,GAAO,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMhE,EAAkBxD,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAQnE,CALA8G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACE,IAAMiI,CAAQ5C,CAAAA,CAAAA,CAAa9E,CAAIH,CAAAA,CAAAA,CAAAA,CAAUlH,IACzC,CAACA,CAAAA,CAAAA,CAAAA,CAIDoO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACe,EAAO,CACN9H,CAAAA,CAAAA,CAAAA,CAAKA,EACLiH,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAQ,CACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMgB,CAAiB9G,CAAAA,CAAAA,CAAQ,QAAU,CACnC6F,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAuB,CAC3BkB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,EACRC,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACTjB,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACV,CAAChG,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACrC,CAACA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ+G,CAAiB,CAAA,CAAA,CAAA,CACzC,CAAC/G,CAAe+G,CAAAA,CAAAA,CAAiB,CAAQvO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACzCyN,WAAYa,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAMhC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAHI9G,IACF8F,CAAMoB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,QAEXpB,CAAK,CAAA,CAAA,CACX,CAACtN,CAAQsO,CAAAA,CAAAA,CAAAA,CAAAA,CAEXvB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACO,IAKV4B,CAASC,CAAAA,CAAAA,CACbf,CAAWd,CAAAA,CAAAA,CACX8B,EAAMxI,CACN2H,CAAAA,CAAAA,CAAQxH,CACR0H,CAAAA,CAAAA,CAAUC,EACVW,CAAY3B,CAAAA,CAAAA,CACZ4B,GAAQ/B,CACRoB,CAAAA,CAAAA,CAAeY,MAUf,CAAM3G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa9B,CAASC,CAAAA,CAAAA,CAAOA,EAAMvD,CAEzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEmK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACe,GACC9H,CAAAA,CAAAA,CAAAA,CAAKA,CACL4G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO+B,EAAa3G,CAAa/E,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACjC4J,OAAQ8B,CAAa1L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY+E,EACjC8E,CAAWA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACXH,CAAOO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SACL,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACFP,CACHM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CACL2B,CAAUD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvCE,QAAS,CAMTjC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,OACPC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACRuB,QAAS,CACTD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CACLxB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMM,UAGb,CAACN,CAAAA,CAAAA,CAAAA,CAGFD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACO,EAiIDoC,CAAQrC,CAAAA,CAAAA,CAAUA,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIC,WACAqC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACXhO,kBACAL,CACAiO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAYK,EACZC,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU1C,CACV2C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAc,MACdvG,CAAUwG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACVC,CAAcC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACdC,cAAeC,CACZC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAELzJ,CAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM0J,EAAWxC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,KACvB,CAAMpI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA0D,GAOhE,CANA6K,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASpL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQmI,GAAWzE,CR1RhCA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAECtK,CAAOsK,CAAAA,CAAAA,CAAAA,CAAAA,CAAmB,kBAANA,CQyRX2H,CAAAA,CAAiB3H,CAGrBnD,CAAAA,CAAAA,CAAAA,CAAAA,CAAI2F,KAAKxC,CAAE,CAAA,CAAA,CAAA,CAAA,CAENnD,CAAG,CACT,CAAA,CAAA,CAAC4H,IACEhD,CAAQgG,CAAAA,CAAAA,CAAS5R,CAEjB8K,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAW9C,EAAiBsJ,CAC5BC,CAAAA,CAAAA,CAAAA,CAAevJ,CAAiBwJ,CAAAA,CAAAA,CAAAA,CAAAA,CAE/BxC,EAAW+C,CAAgBrJ,CAAAA,CAAAA,CAAAA,CAAQA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACpCL,EAAOuH,CAASoC,CAAAA,CAAAA,CAAU3I,EAAcC,CAASwC,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,KAChE,CAAMmE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAkBiB,CAClBhB,CAAAA,CAAAA,CAAkB,QAATiB,CACTtB,CAAAA,CAAAA,CAASnN,CACbkJ,CAAAA,CAAAA,CACA3I,EACAL,CACS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAATuO,CACCc,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACCF,EAAaE,CACRA,CAAAA,CAAAA,CAAAA,CAAAA,CACHV,EAAaxJ,CAAWwJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAaxJ,IACtC,CAEFlG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACCiJ,CAAS/C,CAAAA,CAAAA,CAAAA,CAAAA,CAAW+C,EAAS/C,CAAQlG,CAAAA,CAAAA,CAAAA,CAAO,CAIhD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CACLgO,CACA7D,CAAAA,CAAAA,CAAc6D,CAAQI,CAAAA,CAAAA,CAAAA,CACtB7G,EAAeyG,CAAQI,CAAAA,CAAAA,CAAeC,GACtCD,CACAC,CAAAA,CAAAA,CACD,IAGH7H,CAAMX,CAAAA,CAAAA,CAAmBkE,CAEzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOrH,EAAYE,CAAY2D,CAAAA,CAAAA,CAAAA,CAASC,CAAOA,CAAAA,CAAAA,CAAMrE,GAC/CX,CAAY+E,CAAAA,CAAAA,CAASC,CAAOA,CAAAA,CAAAA,CAAMrD,GAClCkN,CAAU/J,CAAAA,CAAAA,QAAuB,CAEvCR,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA0B,KACxB,CAAM0C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO6H,CAAQnK,CAAAA,CAAAA,CAAAA,CACfoF,EAAYyC,CAAQhD,CAAAA,CAAAA,CAAavC,CACjC8H,CAAAA,CAAAA,CAAAA,CAAUH,EAAS5H,CAAUC,CAAAA,CAAAA,CAAAA,CACnC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL8C,IACAgF,CAAS,CAAA,CAAA,CACV,GACA,CAEHxK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA0B,KACxB,CAAMxF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOkG,CAAMpD,CAAAA,CAAAA,CAAAA,CAAAA,CACd9C,GAEL6P,CAASnG,CAAAA,CAAAA,CAAe1J,CAAK,CAAA,CAAA,CAAA,CAC5B,CAACkB,CAEJyE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH4J,GAELA,CAAkB,CAAA,CAChBxN,MAAOK,CACPJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAKM,EACLmH,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACD,CAACrH,CAAAA,CAAYE,IAEhB2N,CAAmBA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACjBlK,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACS,CACD9E,CACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOiF,CAAMzD,CAAAA,CAAAA,CAAAA,CACd,EACGsF,CACF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO8H,EAASvG,CACjB,CAAA,CAAA,CAAA,CACGtI,mBACF,CAAOkF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMxD,CACd,CAAA,CAAA,CAAA,CACDwN,cAAcxR,CACZmR,CAAAA,CAAAA,CAAAA,CAASrG,CAAe9K,CAAAA,CAAAA,CAAO+K,EAChC,CACD/B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAUmI,CAAStG,CAAAA,CAAAA,CACnB4G,SAASzQ,CACPmQ,CAAAA,CAAAA,CAAAA,CAAStG,EAAUrD,CAAMzD,CAAAA,CAAAA,CAAAA,CAAAA,CAAqB/C,EAC/C,CAGL,CAAA,CAAA,CAAA,CAAA,CAAC+J,CAGH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM2G,EAAuBhT,CAAIgF,CAAAA,CAAAA,CAAa0M,CAAU,CAAA,CAAA,CAAA,CAClDuB,EAAqBnT,CAAIoF,CAAAA,CAAAA,CAAWwM,CAAUrF,CAAAA,CAAAA,CAAQ,GACtDpJ,CAAQ4M,CAAAA,CAAAA,CAAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACpB,MAAMqD,CAAsB,CAAA,CAAA,CAAA,CAC5B,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIpS,EAAIkS,CAAsBlS,CAAAA,CAAAA,CAAAA,CAAKmS,CAAoBnS,CAAAA,CAAAA,CAAAA,CAAAA,CAAK,CAC/D,CAAM8J,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAIyH,CAASvR,CAAAA,CAAAA,CAAAA,CAEfR,EAAOsK,CACTsI,CAAAA,CAAAA,CAAAA,CAAAA,CAAI9F,KACFsC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACO,EAEC,CAAAG,CAAAA,CAAUC,CACVC,CAAAA,CAAAA,CAAQxH,EACRyH,CAAQzP,CAAAA,CAAAA,CACR0P,CAAUsB,CAAAA,CAAAA,CACV3B,EAAWvF,CACX8F,CAAAA,CAAAA,CAAe5G,CACf6G,CAAAA,CAAAA,CAAQ5G,IAPFa,eAAAA,EAAqCjB,CAAO7I,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAWzD,CACD,CAAOoS,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAG,CACT,CAAA,CAAA,CAACb,EAAUW,CAAsBC,CAAAA,CAAAA,CAAAA,CAAAA,CAEpC,CACEvD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAACuB,CAAM,CAAA,CACLE,CAAMwB,CAAAA,CAAAA,CACNrC,EAAQxH,CACR0H,CAAAA,CAAAA,CAAUqB,EACVT,CAAY3B,CAAAA,CAAAA,CACZU,EAAWlN,CACXoO,CAAAA,CAAAA,CAAAA,CAAQe,CACR1B,CAAAA,CAAAA,CAAe5G,GACf,CC3YFqJ,CAAAA,CAAAA,CAAAA,CAAAA,CAASA,CAACrS,CAAAA,CAAWiC,IAAiB,CAAAjC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAKiC,CA6B3CqQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAOlD,EAAAA,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEC,EAAWd,CACXe,CAAAA,CAAAA,CAAUC,EACVgD,CAAgBC,CAAAA,CAAAA,CAAAA,CAChBC,CAAkBC,CAAAA,CAAAA,CAAAA,CAClBC,GAAWlF,CACXmF,CAAAA,CAAAA,CAAAA,CAAWlF,CACXgC,CAAAA,CAAAA,CAAUC,EACVE,CAAQ5G,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAER,CAAMpB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMC,GAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAE7B7G,EAAM8G,CACVyK,CAAAA,CAAAA,CAAAA,CACA,IAAMA,CAAcnO,CAAAA,CAAAA,CAAeoJ,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIoF,EAAO9K,CACX2K,CAAAA,CAAAA,CAAAA,CACA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgBrO,EAAeqJ,CACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIoF,CAAQ/K,CAAAA,CAAAA,CACZyK,GACA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAcxO,EAAkByJ,CACtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIsF,EAAQhL,CACZ2K,CAAAA,CAAAA,CAAAA,CACA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgB1O,EAAkB0J,CACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIgB,CAAS3G,CAAAA,CAAAA,CACbyK,GACA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAclO,CAAamJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACjC,GAEIgB,CAAQ1G,CAAAA,CAAAA,CACZ2K,GACA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAgBpO,EAAaoJ,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CASF,CALApG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACE,IAAMiI,CAAQ5C,CAAAA,CAAAA,CAAa9E,CAAIH,CAAAA,CAAAA,CAAAA,CAAU+F,EAAUC,CACnD,CAAA,CAAA,CAAA,CAACA,CAAUD,CAAAA,CAAAA,CAAAA,CAAAA,CAIXmB,EAAAA,CAACe,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CACN9H,CAAKA,CAAAA,CAAAA,CAAAA,CAAAA,CACLiH,MAAOC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CACgB,CAAA,CAAA,CAAA,CAAA,CAC3BmB,QAAS,CACTF,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CACRC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS,EACTjB,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACV/N,CAAKA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,CAACgI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,QAAS4J,CAC5B5D,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY6D,GAASC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CACxCC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWtE,EACXuE,CAAUxE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAGX,CAACxN,CAAAA,CAAK4R,EAAMpE,CAAOC,CAAAA,CAAAA,CAAQoE,CAAOC,CAAAA,CAAAA,CAAAA,CAAAA,UAEpCxE,CACO,CAAA,CAAA,CAAA,CAAA,CAAA,CAKV4B,EAASA,CACbd,CAAAA,CAAAA,CAAWd,EACX8B,CAAMxI,CAAAA,CAAAA,CACNqL,CAASlG,CAAAA,CAAAA,CAAAA,CACTmG,GAASlG,CACTyC,CAAAA,CAAAA,CAAUC,CACVW,CAAAA,CAAAA,CAAY3B,EACZ4B,CAAQ/B,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAUR,CAAME,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAS3G,EAASiF,CAAQA,CAAAA,CAAAA,CAAOvI,GACjCgK,CAAQ1G,CAAAA,CAAAA,CAASkF,EAAQA,CAAOxI,CAAAA,CAAAA,CAAAA,CAEtC,CACEmK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAACC,IAAAc,CACC,CAAA,CAAA9H,CAAKA,CAAAA,CAAAA,CAAAA,CAAAA,CACL4G,MAAOA,CACPC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQA,CACRC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAWA,EACXH,CAAOO,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAOA,SACZ,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACFP,EACHM,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CACL2B,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACVC,QAAS,CAITjC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,CACPC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,OACRuB,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACTD,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACLxB,EAAMM,CAGb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACN,IAGFD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACO,EA2GD6E,CAAQ9E,CAAAA,CAAAA,CAAUA,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEIC,WACA8E,CAAKC,CAAAA,CAAAA,CAAAA,CAAAA,CACLC,CAAKC,CAAAA,CAAAA,CAAAA,CAAAA,CACLC,aAAa,CACbC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAY,CACZ9C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAW,EACX+C,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACAC,IAAKC,CACL/C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU1C,EACV0F,CAAa/C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAc,CACxBM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAELzJ,KAEA,CAAOmM,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAmBC,CAAwB5L,CAAAA,CAAAA,CAAAA,CAAQA,UAAC,CACpD6L,CAAAA,CAAAA,CAAAA,CAAAA,CAAqBC,CAA0B9L,CAAAA,CAAAA,CAAAA,CAAQA,UAAC,CACxD2E,CAAAA,CAAAA,CAAAA,CAAAA,CAAQC,EAAQsC,CAAS6E,CAAAA,CAAAA,CAAWC,EAAWpL,CAASwC,CAAAA,CAAAA,CAAAA,CAAAA,CAC7D,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMoE,IAAWiE,CACXQ,CAAAA,CAAAA,CAAQA,CACRC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAMlS,EACViR,CACAG,CAAAA,CAAAA,CACAE,CACA,CAAA,CAAA,CAAA,CACAM,EACAK,CAEIE,CAAAA,CAAAA,CAAAA,CAAMnS,CACVmR,CAAAA,CAAAA,CACAE,EACAE,CACA,CAAA,CAAA,CAAA,CACAO,CACAG,CAAAA,CAAAA,CAAAA,CAEF,MAAO,CACLC,CAAAA,CACAC,CACAzH,CAAAA,CAAAA,CAAkBwH,EAAKC,CACvBzL,CAAAA,CAAAA,CAAAA,CAAewL,CAAK,CAAA,CAAA,CAAA,CAAO1E,GAC3B9G,CAAeyL,CAAAA,CAAAA,CAAAA,CAAK,EAAM3E,CAC1BA,CAAAA,CAAAA,CAAAA,CACD,IAIL7C,CAAO3F,CAAAA,CAAAA,CAAmBiM,CAC1BrG,CAAAA,CAAAA,CAAAA,CAAO5F,EAAmBmM,CAE1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOiB,CAAeC,CAAAA,CAAAA,CAAAA,CAAe3M,EAASiF,CAAQA,CAAAA,CAAAA,CAAOrJ,CACtDgR,CAAAA,CAAAA,CAAAA,CAAAA,CAAeC,GAAe7M,CAASkF,CAAAA,CAAAA,CAAQA,EAAOtJ,CACvDkR,CAAAA,CAAAA,CAAAA,CAAa9M,EAASiF,CAAQA,CAAAA,CAAAA,CAAOrI,CACrCmQ,CAAAA,CAAAA,CAAAA,CAAa/M,EAASkF,CAAQA,CAAAA,CAAAA,CAAOtI,CACrCkN,CAAAA,CAAAA,CAAAA,CAAU/J,GAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEvCR,CAA0B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACxB,MAAM0C,CAAO6H,CAAAA,CAAAA,CAAQnK,GACfoF,CAAYyC,CAAAA,CAAAA,CAAQhD,EAAavC,CACjC+K,CAAAA,CAAAA,CAAAA,CAAWX,CAAUrK,CAAAA,CAAAA,CAAUC,GAC/BgL,CAAWX,CAAAA,CAAAA,CAAUtK,CAAUC,CAAAA,CAAAA,CAAAA,CACrC,MAAO,CACL8C,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACAiI,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,CACX,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEH1N,GAA0B,CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMxF,EAAOkL,CAAOpI,CAAAA,CAAAA,CAAAA,CAAAA,CACf9C,CAELsS,CAAAA,CAAAA,CAAAA,CAAU5I,EAAe1J,CAAK,CAAA,CAAA,CAAA,CAC7B,CAAC+S,CAAAA,CAAAA,CAAAA,CACJvN,GAA0B,CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMxF,CAAOmL,CAAAA,CAAAA,CAAOrI,IACf9C,CAELuS,CAAAA,CAAAA,CAAAA,CAAU7I,EAAe1J,CAAK,CAAA,CAAA,CAAA,CAC7B,CAACgT,CAEJ/C,CAAAA,CAAAA,CAAAA,CAAAA,CAAmBA,CACjBlK,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACA,KACS,CACD9E,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACF,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAACkK,EAAO1I,CAAoByI,CAAAA,CAAAA,CAAAA,CAAAA,CAAOzI,CAC3C,CAAA,CAAA,CAAA,CAAA,CACGsF,iBACF,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CACLwK,EAAUjJ,CACVgJ,CAAAA,CAAAA,CAAAA,CAAAA,CAAUhJ,IAEb,CACGtI,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACF,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAACmK,EAAOzI,CAAoBwI,CAAAA,CAAAA,CAAAA,CAAAA,CAAOxI,CAC3C,CAAA,CAAA,CAAA,CAAA,CACDwN,cAAciD,CAAQC,CAAAA,CAAAA,CAAAA,CACpBb,CAAU/I,CAAAA,CAAAA,CAAe2J,EAAQzB,CACjCY,CAAAA,CAAAA,CAAAA,CAAU9I,EAAe4J,CAAQ5B,CAAAA,CAAAA,CAClC,EACD9J,CAAS2L,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,CAChBf,CAAAA,CAAAA,CAAAA,CAAUhJ,EAAU8J,CACpBf,CAAAA,CAAAA,CAAAA,CAAU/I,CAAU+J,CAAAA,CAAAA,CACrB,EACDnD,CAASkD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAASC,CAChBf,CAAAA,CAAAA,CAAAA,CAAUhJ,EAAU4B,CAAO1I,CAAAA,CAAAA,CAAAA,CAAAA,CAAqB4Q,GAChDf,CAAU/I,CAAAA,CAAAA,CAAU2B,EAAOzI,CAAqB6Q,CAAAA,CAAAA,CAAAA,CAAAA,CACjD,CAGL,CAAA,CAAA,CAAA,CAAA,CAAC9B,EAAUE,CAGb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM6B,CAAStG,CAAAA,CAAAA,CAAAA,SAAQ,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM3O,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAImN,IAClB,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAACE,EAAkBC,CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI5D,EAA2B1J,CAAMiM,CAAAA,CAAAA,CAAAA,CAAAA,CAAIgG,CAAO5E,CAAAA,CAAAA,CAAUC,IAO1D,CANK5D,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACH1J,CAAMyM,CAAAA,CAAAA,CAAAA,CAAAA,CACJwF,EAAO5E,CAAUC,CAAAA,CAAAA,CAAAA,CAChB5D,CAAIyE,CAAAA,CAAAA,CAAS,CAAEd,CAAUC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAGvB5D,CAAC,CACT,CAAA,CAAA,CACA,CAACyE,CAEE+G,CAAAA,CAAAA,CAAAA,CAAAA,CAA0BpW,CAAIuV,CAAAA,CAAAA,CAAgB7D,EAAU,CACxD2E,CAAAA,CAAAA,CAAAA,CAAwBvW,CAAI0V,CAAAA,CAAAA,CAAc9D,EAAU0C,CAAW,CAAA,CAAA,CAAA,CAC/DkC,CAA0BtW,CAAAA,CAAAA,CAAIyV,EAAgB/D,CAAU,CAAA,CAAA,CAAA,CACxD6E,EAAwBzW,CAAI4V,CAAAA,CAAAA,CAAchE,EAAU4C,CAAW,CAAA,CAAA,CAAA,CAC/DrR,CAAQ4M,CAAAA,CAAAA,CAAAA,SAAQ,CACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMqD,CAAsB,CAAA,CAAA,CAAA,CAC5B,IAAK,CAAIpS,CAAAA,CAAAA,CAAAA,CAAAA,CAAIsV,CAAyBtV,CAAAA,CAAAA,CAAAA,CAAKuV,EAAuBvV,CAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,IAAIiC,CAAIuT,CAAAA,CAAAA,CAAyBvT,GAAKwT,CAAuBxT,CAAAA,CAAAA,CAAAA,CAAAA,CAChEmQ,CAAI9F,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACFsC,EAAAA,CAAC0D,CAAAA,CAAAA,CAAAA,CAAAA,CAEC,CAAAhD,CAAAA,CAAUC,EACVgD,CAAgBvF,CAAAA,CAAAA,CAAAA,CAChByF,CAAkBxF,CAAAA,CAAAA,CAAAA,CAClB0F,GAAW3S,CACX4S,CAAAA,CAAAA,CAAAA,CAAW3Q,EACXyN,CAAUsB,CAAAA,CAAAA,CACV3B,EAAWgG,CAAOrV,CAAAA,CAAAA,CAAGiC,CACrB4N,CAAAA,CAAAA,CAAAA,CAAQ5G,GARHoJ,CAAOrS,CAAAA,CAAAA,CAAGiC,CAcvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOmQ,CAAG,CACT,CAAA,CAAA,CACDiD,CACAC,CAAAA,CAAAA,CACAC,EACAC,CACAC,CAAAA,CAAAA,CAAAA,CAAAA,CAGF,OACE7G,CAAAC,CAAAA,CAAAA,CAAAA,CAAAA,CAACsB,EAAM,CACLE,CAAAA,CAAMwB,CACNqB,CAAAA,CAAAA,CAAAA,CAASlG,EACTmG,CAASlG,CAAAA,CAAAA,CAAAA,CACTyC,CAAUqB,CAAAA,CAAAA,CACVT,EAAY0D,CAAqBE,CAAAA,CAAAA,CAAAA,CACjC7E,CAAWlN,CAAAA,CAAAA,CACXoO,GAAQe,CACR,CAAA,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"index.js","sources":["../src/src/core/utils.ts","../src/src/core/cache.ts","../src/src/core/store.ts","../src/src/react/useIsomorphicLayoutEffect.ts","../src/src/react/utils.ts","../src/src/react/useRefWithUpdate.ts","../src/src/react/useStore.ts","../src/src/core/dom.ts","../src/src/core/scroller.ts","../src/src/react/useStatic.ts","../src/src/core/resizer.ts","../src/src/react/DefaultWindow.tsx","../src/src/react/ListItem.tsx","../src/src/react/VList.tsx","../src/src/react/VGrid.tsx","../src/src/react/WVList.tsx"],"sourcesContent":["export const min = Math.min;\nexport const max = Math.max;\nexport const abs = Math.abs;\nexport const now = Date.now;\nexport const timeout = setTimeout;\n\nexport const exists = <T>(v: T): v is Exclude<T, null | undefined> => v != null;\n\nexport const range = <T>(length: number, cb: (i: number) => T): T[] =>\n Array.from({ length }, (_, i) => cb(i));\n\nexport const median = (arr: number[]): number => {\n const s = [...arr].sort((a, b) => a - b);\n const mid = (arr.length / 2) | 0;\n return s.length % 2 === 0 ? (s[mid - 1]! + s[mid]!) / 2 : s[mid]!;\n};\n\nexport const debounce = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let id: NodeJS.Timeout | undefined | null;\n\n const cancel = () => {\n if (exists(id)) {\n clearTimeout(id);\n }\n };\n const debouncedFn = () => {\n cancel();\n id = timeout(() => {\n id = null;\n fn();\n }, ms);\n };\n debouncedFn._cancel = cancel;\n return debouncedFn;\n};\n\nexport const throttle = <T extends (...args: any[]) => void>(\n fn: T,\n ms: number\n) => {\n let time = now() - ms;\n return (...args: Parameters<T>) => {\n const n = now();\n if (time + ms < n) {\n time = n;\n fn(...args);\n }\n };\n};\n\nexport const once = <F extends (...args: any[]) => any>(fn: F): F => {\n let called: undefined | boolean;\n let cache: ReturnType<F>;\n\n return ((...args) => {\n if (!called) {\n called = true;\n cache = fn(...args);\n }\n return cache;\n }) as F;\n};\n","import type { DeepReadonly, Writeable } from \"./types\";\nimport { exists, max, median, min, range } from \"./utils\";\n\nexport const UNCACHED = -1;\n\nexport type Cache = DeepReadonly<{\n _defaultItemSize: number;\n _length: number;\n _sizes: number[];\n _measuredOffsetIndex: number;\n _offsets: number[];\n}>;\n\nexport const getItemSize = (cache: Cache, index: number): number => {\n const size = cache._sizes[index]!;\n return size === UNCACHED ? cache._defaultItemSize : size;\n};\n\nexport const setItemSize = (\n cache: Writeable<Cache>,\n index: number,\n size: number\n): boolean => {\n const isInitialMeasurement = cache._sizes[index] === UNCACHED;\n cache._sizes[index] = size;\n // mark as dirty\n cache._measuredOffsetIndex = min(index, cache._measuredOffsetIndex);\n return isInitialMeasurement;\n};\n\nconst computeOffset = (\n cache: Writeable<Cache>,\n index: number,\n isTotal?: boolean\n): number => {\n if (!cache._length) return 0;\n if (cache._measuredOffsetIndex >= index) {\n if (isTotal) {\n return cache._offsets[index]! + getItemSize(cache, index);\n } else {\n return cache._offsets[index]!;\n }\n }\n\n let i = cache._measuredOffsetIndex;\n let top = cache._offsets[i]!;\n while (i <= index) {\n cache._offsets[i] = top;\n if (i === index && !isTotal) {\n break;\n }\n top += getItemSize(cache, i);\n i++;\n }\n // mark as measured\n cache._measuredOffsetIndex = index;\n return top;\n};\n\nexport const computeTotalSize = (cache: Writeable<Cache>): number => {\n return computeOffset(cache, cache._length - 1, true);\n};\n\nexport const computeStartOffset = (\n cache: Writeable<Cache>,\n index: number\n): number => {\n return computeOffset(cache, index);\n};\n\nconst findIndex = (cache: Cache, i: number, distance: number): number => {\n let sum = 0;\n if (distance >= 0) {\n // search forward\n while (i < cache._length - 1) {\n const h = getItemSize(cache, i++);\n if ((sum += h) >= distance) {\n if (sum - h / 2 >= distance) {\n i--;\n }\n break;\n }\n }\n } else {\n // search backward\n while (i > 0) {\n const h = getItemSize(cache, --i);\n if ((sum -= h) <= distance) {\n if (sum + h / 2 < distance) {\n i++;\n }\n break;\n }\n }\n }\n\n return min(max(i, 0), cache._length - 1);\n};\n\nexport const findStartIndexWithOffset = (\n cache: Cache,\n offset: number,\n prevStartIndex: number,\n prevOffset: number\n): number => {\n return findIndex(cache, prevStartIndex, offset - prevOffset);\n};\n\nexport { findIndex as findEndIndex };\n\nexport const hasUnmeasuredItemsInRange = (\n cache: Cache,\n startIndex: number,\n endIndex: number\n): boolean => {\n for (let i = startIndex; i <= endIndex; i++) {\n if (cache._sizes[i] === UNCACHED) {\n return true;\n }\n }\n return false;\n};\n\nexport const estimateDefaultItemSize = (cache: Writeable<Cache>) => {\n const measuredSizes = cache._sizes.filter((s) => s !== UNCACHED);\n // This function will be called after measurement so measured size array must be longer than 0\n const startItemSize = measuredSizes[0]!;\n\n cache._defaultItemSize = measuredSizes.every((s) => s === startItemSize)\n ? // Maybe a fixed size array\n startItemSize\n : // Maybe a variable size array\n median(measuredSizes);\n};\n\nexport const resetCache = (\n length: number,\n itemSize: number,\n cache?: Cache\n): Cache => {\n return {\n _defaultItemSize: cache ? cache._defaultItemSize : itemSize,\n _length: length,\n _measuredOffsetIndex: cache\n ? min(cache._measuredOffsetIndex, length - 1)\n : 0,\n _sizes: range(length, (i) => {\n const size = cache && cache._sizes[i];\n if (exists(size)) {\n return size;\n }\n return UNCACHED;\n }),\n _offsets: range(length, (i) => {\n if (i === 0) {\n // first offset must be 0\n return 0;\n }\n const offset = cache && cache._offsets[i];\n if (exists(offset)) {\n return offset;\n }\n return UNCACHED;\n }),\n };\n};\n","import {\n findStartIndexWithOffset,\n resetCache,\n getItemSize,\n computeTotalSize,\n findEndIndex,\n computeStartOffset,\n Cache,\n UNCACHED,\n setItemSize,\n hasUnmeasuredItemsInRange,\n estimateDefaultItemSize,\n} from \"./cache\";\nimport type { Writeable } from \"./types\";\nimport { abs, exists, max, min, timeout } from \"./utils\";\n\ntype ItemJump = Readonly<[sizeDiff: number, index: number]>;\nexport type ScrollJump = Readonly<number>;\nexport type ItemResize = Readonly<[index: number, size: number]>;\ntype ItemsRange = Readonly<[startIndex: number, endIndex: number]>;\n\nconst sumJumps = (jump: readonly ItemJump[]): number =>\n jump.reduce((acc, [j]) => acc + j, 0);\nconst calculateJumps = (cache: Cache, items: ItemResize[]): ItemJump[] => {\n return items.map(([index, size]) => {\n return [size - getItemSize(cache, index), index];\n });\n};\n\nexport const SCROLL_IDLE = 0;\nexport const SCROLL_DOWN = 1;\nexport const SCROLL_UP = 2;\nexport const SCROLL_MANUAL = 3;\ntype ScrollDirection =\n | typeof SCROLL_IDLE\n | typeof SCROLL_DOWN\n | typeof SCROLL_UP\n | typeof SCROLL_MANUAL;\n\nexport const ACTION_ITEM_RESIZE = 1;\nexport const ACTION_WINDOW_RESIZE = 2;\nexport const ACTION_SCROLL = 3;\nexport const ACTION_MANUAL_SCROLL = 4;\nexport const ACTION_SCROLL_END = 5;\n\ntype Actions =\n | [type: typeof ACTION_ITEM_RESIZE, entries: ItemResize[]]\n | [type: typeof ACTION_WINDOW_RESIZE, size: number]\n | [type: typeof ACTION_SCROLL, offset: number]\n | [type: typeof ACTION_MANUAL_SCROLL, offset: number]\n | [type: typeof ACTION_SCROLL_END, isManual: boolean];\n\ntype Subscriber = (sync?: boolean) => void;\n\nexport type VirtualStore = {\n _getRange(): ItemsRange;\n _isUnmeasuredItem(index: number): boolean;\n _hasUnmeasuredItemsInRange(startIndex: number): boolean;\n _getItemOffset(index: number): number;\n _getItemSize(index: number): number;\n _getScrollOffset(): number;\n _getViewportSize(): number;\n _getScrollSize(): number;\n _getCorrectedScrollSize(): number;\n _getJumpCount(): number;\n _flushJump(): ScrollJump | undefined;\n _getItemIndexForScrollTo(offset: number): number;\n _waitForScrollDestinationItemsMeasured(): Promise<void>;\n _subscribe(cb: Subscriber): () => void;\n _update(...action: Actions): void;\n _getScrollDirection(): ScrollDirection;\n _updateCacheLength(length: number): void;\n};\n\nexport const createVirtualStore = (\n elementsCount: number,\n itemSize: number | undefined,\n initialItemCount: number = 0,\n isReverse: boolean,\n onScrollStateChange: (scrolling: boolean) => void,\n onScrollOffsetChange: (offset: number) => void\n): VirtualStore => {\n const shouldAutoEstimateItemSize = !itemSize;\n const initialItemSize = itemSize || 40;\n let viewportSize = initialItemSize * max(initialItemCount - 1, 0);\n let scrollOffset = 0;\n let jumpCount = 0;\n let jump: ScrollJump | undefined;\n let cache = resetCache(elementsCount, initialItemSize);\n let _scrollDirection: ScrollDirection = SCROLL_IDLE;\n let _resized = false;\n let _prevRange: ItemsRange = [0, initialItemCount];\n let _scrollToQueue: [() => void, () => void] | undefined;\n\n const subscribers = new Set<Subscriber>();\n const getScrollSize = (): number =>\n computeTotalSize(cache as Writeable<Cache>);\n const flushIsJustResized = (): boolean => {\n const prev = _resized;\n _resized = false;\n return prev;\n };\n const updateScrollDirection = (dir: ScrollDirection): boolean | undefined => {\n const prev = _scrollDirection;\n _scrollDirection = dir;\n if (_scrollDirection === SCROLL_IDLE) {\n return false;\n } else if (\n prev === SCROLL_IDLE &&\n (_scrollDirection === SCROLL_DOWN || _scrollDirection === SCROLL_UP)\n ) {\n return true;\n }\n return;\n };\n\n return {\n _getRange() {\n const [prevStartIndex, prevEndIndex] = _prevRange;\n const prevOffset = computeStartOffset(\n cache as Writeable<Cache>,\n prevStartIndex\n );\n const start = findStartIndexWithOffset(\n cache,\n scrollOffset,\n prevStartIndex,\n prevOffset\n );\n const end = findEndIndex(cache, start, viewportSize);\n if (prevStartIndex === start && prevEndIndex === end) {\n return _prevRange;\n }\n return (_prevRange = [start, end]);\n },\n _isUnmeasuredItem(index) {\n return cache._sizes[index] === UNCACHED;\n },\n _hasUnmeasuredItemsInRange(startIndex) {\n return hasUnmeasuredItemsInRange(\n cache,\n max(0, startIndex - 2),\n min(cache._length - 1, startIndex + 2)\n );\n },\n _getItemOffset(index) {\n const offset = computeStartOffset(cache as Writeable<Cache>, index);\n if (isReverse) {\n return offset + max(0, viewportSize - getScrollSize());\n }\n return offset;\n },\n _getItemSize(index) {\n return getItemSize(cache, index);\n },\n _getScrollOffset() {\n return scrollOffset;\n },\n _getViewportSize() {\n return viewportSize;\n },\n _getScrollSize() {\n return getScrollSize();\n },\n _getCorrectedScrollSize() {\n return max(getScrollSize(), viewportSize);\n },\n _getJumpCount() {\n return jumpCount;\n },\n _flushJump() {\n const prevJump = jump;\n jump = undefined;\n return prevJump;\n },\n _getItemIndexForScrollTo(offset) {\n return findStartIndexWithOffset(cache, offset, 0, 0);\n },\n _waitForScrollDestinationItemsMeasured() {\n if (_scrollToQueue) {\n // Cancel waiting scrollTo\n _scrollToQueue[1]();\n }\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 return new Promise((resolve, reject) => {\n let resolved: boolean | undefined = false;\n\n const resolveQueue = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n _scrollToQueue = undefined;\n };\n _scrollToQueue = [resolveQueue, reject];\n\n // In some specific situation with VGrid, the promise never resolved so we cancel it if timed out.\n timeout(resolveQueue, 250);\n });\n },\n _subscribe(cb) {\n subscribers.add(cb);\n return () => {\n subscribers.delete(cb);\n };\n },\n _update(type, payload): void {\n let shouldSync: boolean | undefined;\n let updatedScrollState: boolean | undefined;\n let mutated = false;\n\n switch (type) {\n case ACTION_ITEM_RESIZE: {\n const updated = payload.filter(\n ([index, size]) => cache._sizes[index] !== size\n );\n // Skip if all items are cached and not updated\n if (!updated.length) {\n break;\n }\n\n let diff = 0;\n // Calculate jump\n if (_scrollDirection === SCROLL_UP) {\n diff = sumJumps(calculateJumps(cache, updated));\n } else if (_scrollDirection === SCROLL_MANUAL) {\n const allJumps = calculateJumps(cache, updated);\n const [startIndex] = _prevRange;\n\n if (scrollOffset === 0) {\n // Do nothing to stick to the start\n } else if (getScrollSize() <= scrollOffset + viewportSize) {\n // Keep end to stick to the end\n diff = sumJumps(allJumps);\n } else {\n // Keep start at mid\n diff = sumJumps(\n allJumps.filter(([, index]) => index < startIndex)\n );\n }\n } else {\n // Do nothing\n }\n\n if (diff) {\n jump = diff;\n jumpCount++;\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\n _resized = shouldSync = mutated = true;\n break;\n }\n case ACTION_WINDOW_RESIZE: {\n mutated = viewportSize !== payload;\n viewportSize = payload;\n break;\n }\n case ACTION_SCROLL:\n case ACTION_MANUAL_SCROLL: {\n // Skip if offset is not changed\n if (scrollOffset === payload) {\n break;\n }\n\n if (type === ACTION_SCROLL) {\n // Skip scroll direction detection just after resizing because it may result in the opposite direction.\n // Scroll events are dispatched enough so it's ok to skip some of them.\n const isJustResized = flushIsJustResized();\n if (\n (_scrollDirection === SCROLL_IDLE || !isJustResized) &&\n // Ignore until manual scrolling\n _scrollDirection !== SCROLL_MANUAL\n ) {\n updatedScrollState = updateScrollDirection(\n scrollOffset > payload ? SCROLL_UP : SCROLL_DOWN\n );\n }\n\n // Ignore manual scroll because it may be called in useEffect/useLayoutEffect and cause the warn below.\n // Warning: flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\n //\n // Update synchronously if scrolled a lot\n shouldSync = abs(scrollOffset - payload) > viewportSize;\n }\n\n scrollOffset = payload;\n mutated = true;\n break;\n }\n case ACTION_SCROLL_END: {\n updatedScrollState = updateScrollDirection(\n payload ? SCROLL_MANUAL : SCROLL_IDLE\n );\n break;\n }\n }\n\n if (mutated) {\n subscribers.forEach((cb) => {\n cb(shouldSync);\n });\n\n if (type === ACTION_SCROLL) {\n onScrollOffsetChange(scrollOffset);\n }\n }\n if (_scrollToQueue) {\n if (type === ACTION_ITEM_RESIZE) {\n _scrollToQueue[0]();\n }\n }\n if (exists(updatedScrollState)) {\n onScrollStateChange(updatedScrollState);\n }\n },\n _getScrollDirection() {\n return _scrollDirection;\n },\n _updateCacheLength(length) {\n // It's ok to be updated in render because states should be calculated consistently regardless cache length\n if (cache._length === length) return;\n cache = resetCache(length, initialItemSize, cache);\n },\n };\n};\n","import { useEffect, useLayoutEffect } from \"react\";\n\n// https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import { ReactNode } from \"react\";\nimport { exists } from \"../core/utils\";\n\nexport const refKey = \"current\";\n\nexport const isInvalidElement = <T extends ReactNode>(\n e: T\n): e is Extract<T, null | undefined | boolean> =>\n !exists(e) || typeof e === \"boolean\";\n","import { useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { refKey } from \"./utils\";\n\nexport const useRefWithUpdate = <T>(value: T) => {\n const ref = useRef<T>(value);\n\n useIsomorphicLayoutEffect(() => {\n ref[refKey] = value;\n }, [value]);\n\n return ref;\n};\n","import { useLayoutEffect, useState } from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { refKey } from \"./utils\";\nimport { VirtualStore } from \"../core/store\";\n\nexport const useStore = <T>(\n store: VirtualStore,\n getSnapShot: () => T,\n shouldGetLatest?: boolean\n): T => {\n const [state, setState] = useState(getSnapShot);\n const getter = useRefWithUpdate(getSnapShot);\n\n useLayoutEffect(() => {\n const update = () => {\n setState(() => getter[refKey]());\n };\n return store._subscribe((sync) => {\n if (sync) {\n flushSync(update);\n } else {\n update();\n }\n });\n }, []);\n\n // especially for sort of items\n if (shouldGetLatest) {\n const snap = getSnapShot();\n if (state !== snap) {\n setState(snap);\n }\n }\n return state;\n};\n","import { once } from \"./utils\";\n\n// The scroll position may be negative value in rtl direction.\n//\n// left right result\n// -100 0 true spec compliant\n// 0 100 false probably Chrome earlier than v85\n// https://github.com/othree/jquery.rtl-scroll-type\nexport const hasNegativeOffsetInRtl = /*#__PURE__*/ once(\n (scrollable: HTMLElement) => {\n const key = \"scrollLeft\";\n const prev = scrollable[key];\n scrollable[key] = 1;\n // scrollLeft can be positive under some specific situations even if negative mode, so we use `<` for now.\n const isNegative = scrollable[key] < 1;\n scrollable[key] = prev;\n return isNegative;\n }\n);\n","import { hasNegativeOffsetInRtl } from \"./dom\";\nimport {\n ACTION_SCROLL,\n ACTION_MANUAL_SCROLL,\n ScrollJump,\n VirtualStore,\n SCROLL_IDLE,\n ACTION_SCROLL_END,\n} from \"./store\";\nimport { debounce, throttle, max, min } 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 (\n offset > 0 &&\n offset < store._getScrollSize() - store._getViewportSize()\n ) {\n onScrollStopped();\n }\n }\n }, 50);\n};\n\nexport type Scroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _getActualScrollSize: () => number;\n _scrollTo: (offset: number) => void;\n _scrollToIndex: (index: number, count: number) => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createScroller = (\n store: VirtualStore,\n isHorizontal: boolean,\n isRtl: boolean\n): Scroller => {\n let rootElement: HTMLElement | undefined;\n const scrollToKey = isHorizontal ? \"scrollLeft\" : \"scrollTop\";\n\n const getActualScrollSize = (): number => {\n if (!rootElement) return 0;\n // Use element's scrollHeight/scrollWidth instead of stored scrollSize.\n // This is because stored size may differ from the actual size, for example when a new item is added and not yet measured.\n return isHorizontal ? rootElement.scrollWidth : rootElement.scrollHeight;\n };\n const normalizeOffset = (offset: number, diff?: boolean): number => {\n if (isHorizontal && isRtl) {\n if (hasNegativeOffsetInRtl(rootElement!)) {\n return -offset;\n } else {\n return diff\n ? -offset\n : store._getScrollSize() - store._getViewportSize() - offset;\n }\n }\n return offset;\n };\n\n const scrollManually = async (\n index: number,\n getCurrentOffset: () => number\n ) => {\n if (!rootElement) return;\n\n const getOffset = (): number => {\n let offset = getCurrentOffset();\n const scrollSize = getActualScrollSize();\n const viewportSize = store._getViewportSize();\n if (scrollSize - (offset + viewportSize) <= 0) {\n // Adjust if the offset is over the end, to get correct startIndex.\n offset = scrollSize - viewportSize;\n }\n return offset;\n };\n\n while (true) {\n // Sync viewport to scroll destination\n // In order to scroll to the correct position, mount the items and measure their sizes before scrolling.\n store._update(ACTION_MANUAL_SCROLL, getOffset());\n\n if (!store._hasUnmeasuredItemsInRange(index)) {\n break;\n }\n\n try {\n // Wait for the scroll destination items to be measured.\n await store._waitForScrollDestinationItemsMeasured();\n } catch (e) {\n // canceled\n return;\n }\n }\n\n // Scroll with the updated value\n rootElement[scrollToKey] = normalizeOffset(getOffset());\n store._update(ACTION_SCROLL_END, true);\n };\n\n return {\n _initRoot(root) {\n rootElement = root;\n\n const syncViewportToScrollPosition = () => {\n store._update(ACTION_SCROLL, normalizeOffset(root[scrollToKey]));\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END, false);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n root.addEventListener(\"scroll\", onScroll);\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n root.removeEventListener(\"scroll\", onScroll);\n root.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _getActualScrollSize: getActualScrollSize,\n _scrollTo(offset) {\n offset = max(offset, 0);\n\n scrollManually(store._getItemIndexForScrollTo(offset), () => offset);\n },\n _scrollToIndex(index, count) {\n index = max(min(index, count - 1), 0);\n\n scrollManually(index, () => store._getItemOffset(index));\n },\n _fixScrollJump: (jump) => {\n if (!rootElement) return;\n rootElement[scrollToKey] += normalizeOffset(jump, true);\n },\n };\n};\n\nexport type WindowScroller = {\n _initRoot: (rootElement: HTMLElement) => () => void;\n _fixScrollJump: (jump: ScrollJump) => void;\n};\n\nexport const createWindowScroller = (\n store: VirtualStore,\n isHorizontal: boolean\n): WindowScroller => {\n const scrollToKey = isHorizontal ? \"scrollX\" : \"scrollY\";\n const offsetKey = isHorizontal ? \"offsetLeft\" : \"offsetTop\";\n\n return {\n _initRoot(rootElement) {\n let visible = false;\n\n const getOffsetToWindow = (node: HTMLElement, offset: number): number => {\n const nodeOffset = offset + node[offsetKey];\n\n const parent = node.offsetParent;\n if (node === document.body || !parent) {\n return nodeOffset;\n }\n\n return getOffsetToWindow(parent as HTMLElement, nodeOffset);\n };\n\n const syncViewportToScrollPosition = () => {\n if (!visible) return;\n store._update(\n ACTION_SCROLL,\n window[scrollToKey] - getOffsetToWindow(rootElement, 0)\n );\n };\n\n const onScrollStopped = debounce(() => {\n // Check scroll position once just after scrolling stopped\n syncViewportToScrollPosition();\n store._update(ACTION_SCROLL_END, false);\n }, 150);\n\n const onScroll = () => {\n syncViewportToScrollPosition();\n onScrollStopped();\n };\n\n const onWheel = createOnWheel(store, isHorizontal, onScrollStopped);\n\n const io = new IntersectionObserver(([entry]) => {\n visible = entry!.isIntersecting;\n });\n io.observe(rootElement);\n\n window.addEventListener(\"scroll\", onScroll);\n window.addEventListener(\"wheel\", onWheel, { passive: true });\n\n return () => {\n io.disconnect();\n window.removeEventListener(\"scroll\", onScroll);\n window.removeEventListener(\"wheel\", onWheel);\n onScrollStopped._cancel();\n };\n },\n _fixScrollJump: (jump) => {\n // TODO support case two window scrollers exist in the same view\n window.scrollBy(isHorizontal ? jump : 0, isHorizontal ? 0 : jump);\n },\n };\n};\n","import { useRef } from \"react\";\nimport { refKey } from \"./utils\";\n\nexport const useStatic = <T>(init: () => T): T => {\n const ref = useRef<T>();\n return ref[refKey] || (ref[refKey] = init());\n};\n","import {\n ACTION_ITEM_RESIZE,\n ACTION_WINDOW_RESIZE,\n ItemResize,\n VirtualStore,\n} from \"./store\";\nimport { exists, max, once } from \"./utils\";\n\nexport interface ListResizer {\n _observeRoot(root: HTMLElement): () => void;\n _observeItem(el: HTMLElement, i: number): () => void;\n}\n\nexport const createResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n let rootElement: HTMLElement | undefined;\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n store._update(ACTION_WINDOW_RESIZE, contentRect[sizeKey]);\n } else {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createWindowResizer = (\n store: VirtualStore,\n isHorizontal: boolean\n): ListResizer => {\n const sizeKey = isHorizontal ? \"width\" : \"height\";\n const windowSizeKey = isHorizontal ? \"innerWidth\" : \"innerHeight\";\n const mountedIndexes = new WeakMap<Element, number>();\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizes: ItemResize[] = [];\n for (const { target, contentRect } of entries) {\n const index = mountedIndexes.get(target);\n if (exists(index)) {\n resizes.push([index, contentRect[sizeKey]]);\n }\n }\n\n if (resizes.length) {\n store._update(ACTION_ITEM_RESIZE, resizes);\n }\n });\n });\n\n return {\n _observeRoot() {\n const cb = () => {\n store._update(ACTION_WINDOW_RESIZE, window[windowSizeKey]);\n };\n window.addEventListener(\"resize\", cb);\n cb();\n return () => {\n window.removeEventListener(\"resize\", cb);\n };\n },\n _observeItem(el: HTMLElement, i: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, i);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport const createGridResizer = (\n vStore: VirtualStore,\n hStore: VirtualStore\n) => {\n let rootElement: HTMLElement | undefined;\n\n const heightKey = \"height\";\n const widthKey = \"width\";\n const mountedIndexes = new WeakMap<\n Element,\n [rowIndex: number, colIndex: number]\n >();\n\n type CellSize = [height: number, width: number];\n const maybeCachedRowIndexes = new Set<number>();\n const maybeCachedColIndexes = new Set<number>();\n const sizeCache = new Map<string, CellSize>();\n const getKey = (rowIndex: number, colIndex: number): string =>\n `${rowIndex}-${colIndex}`;\n\n // Initialize ResizeObserver lazily for SSR\n const getResizeObserver = once(() => {\n // https://www.w3.org/TR/resize-observer/#intro\n return new ResizeObserver((entries) => {\n const resizedRows = new Set<number>();\n const resizedCols = new Set<number>();\n for (const { target, contentRect } of entries) {\n if (target === rootElement) {\n vStore._update(ACTION_WINDOW_RESIZE, contentRect[heightKey]);\n hStore._update(ACTION_WINDOW_RESIZE, contentRect[widthKey]);\n } else {\n const cell = mountedIndexes.get(target);\n if (cell) {\n const [rowIndex, colIndex] = cell;\n const key = getKey(rowIndex, colIndex);\n const prevSize = sizeCache.get(key);\n const size: CellSize = [\n contentRect[heightKey],\n contentRect[widthKey],\n ];\n let rowResized: boolean | undefined;\n let colResized: boolean | undefined;\n if (!prevSize) {\n rowResized = colResized = true;\n } else {\n if (prevSize[0] !== size[0]) {\n rowResized = true;\n }\n if (prevSize[1] !== size[1]) {\n colResized = true;\n }\n }\n if (rowResized) {\n resizedRows.add(rowIndex);\n }\n if (colResized) {\n resizedCols.add(colIndex);\n }\n if (rowResized || colResized) {\n sizeCache.set(key, size);\n }\n }\n }\n }\n\n if (resizedRows.size) {\n const heightResizes: ItemResize[] = [];\n resizedRows.forEach((rowIndex) => {\n let maxHeight = 0;\n maybeCachedColIndexes.forEach((colIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxHeight = max(maxHeight, size[0]);\n }\n });\n if (maxHeight) {\n heightResizes.push([rowIndex, maxHeight]);\n }\n });\n vStore._update(ACTION_ITEM_RESIZE, heightResizes);\n }\n if (resizedCols.size) {\n const widthResizes: ItemResize[] = [];\n resizedCols.forEach((colIndex) => {\n let maxWidth = 0;\n maybeCachedRowIndexes.forEach((rowIndex) => {\n const size = sizeCache.get(getKey(rowIndex, colIndex));\n if (size) {\n maxWidth = max(maxWidth, size[1]);\n }\n });\n if (maxWidth) {\n widthResizes.push([colIndex, maxWidth]);\n }\n });\n hStore._update(ACTION_ITEM_RESIZE, widthResizes);\n }\n });\n });\n\n return {\n _observeRoot(root: HTMLElement) {\n rootElement = root;\n const ro = getResizeObserver();\n ro.observe(root);\n return () => {\n ro.disconnect();\n };\n },\n _observeItem(el: HTMLElement, rowIndex: number, colIndex: number) {\n const ro = getResizeObserver();\n mountedIndexes.set(el, [rowIndex, colIndex]);\n maybeCachedRowIndexes.add(rowIndex);\n maybeCachedColIndexes.add(colIndex);\n ro.observe(el);\n return () => {\n mountedIndexes.delete(el);\n ro.unobserve(el);\n };\n },\n };\n};\n\nexport type GridResizer = ReturnType<typeof createGridResizer>;\n","import {\n CSSProperties,\n ReactElement,\n ReactNode,\n forwardRef,\n useMemo,\n} from \"react\";\n\nexport type WindowComponentAttributes = Pick<\n React.HTMLAttributes<HTMLElement>,\n \"className\" | \"style\" | \"id\" | \"role\" | \"tabIndex\"\n> &\n React.AriaAttributes;\n\n/**\n * Props of customized scrollable component.\n */\nexport interface CustomWindowComponentProps {\n /**\n * Renderable item elements.\n */\n children: ReactNode;\n /**\n * Attributes that should be passed to the scrollable element.\n */\n attrs: WindowComponentAttributes;\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 DefaultWindow = forwardRef<any, CustomWindowComponentProps>(\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 CustomWindowComponent = typeof DefaultWindow;\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { VirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { ListResizer } from \"../core/resizer\";\nimport { refKey } from \"./utils\";\n\n/**\n * Props of customized item component for {@link VList}.\n */\nexport interface CustomItemComponentProps {\n style: CSSProperties;\n children: ReactNode;\n}\n\nexport type CustomItemComponent = React.ForwardRefExoticComponent<\n React.PropsWithoutRef<CustomItemComponentProps> & React.RefAttributes<any>\n>;\n\ntype ListItemProps = {\n _children: ReactNode;\n _resizer: ListResizer;\n _store: VirtualStore;\n _index: number;\n _element: \"div\";\n _isHorizontal: boolean;\n _isRtl: boolean;\n};\n\nexport const ListItem = memo(\n ({\n _children: children,\n _resizer: resizer,\n _store: store,\n _index: index,\n _element: Element,\n _isHorizontal: isHorizontal,\n _isRtl: isRtl,\n }: ListItemProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const offset = useStore(store, () => store._getItemOffset(index), true);\n const hide = useStore(store, () => store._isUnmeasuredItem(index), true);\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, index),\n [index]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const leftOrRightKey = isRtl ? \"right\" : \"left\";\n const style: CSSProperties = {\n margin: 0,\n padding: 0,\n position: \"absolute\",\n [isHorizontal ? \"height\" : \"width\"]: \"100%\",\n [isHorizontal ? \"top\" : leftOrRightKey]: 0,\n [isHorizontal ? leftOrRightKey : \"top\"]: offset,\n visibility: hide ? \"hidden\" : \"visible\",\n // willChange: \"transform\",\n };\n if (isHorizontal) {\n style.display = \"flex\";\n }\n return style;\n }, [offset, hide])}\n >\n {children}\n </Element>\n );\n }\n);\n","import {\n Children,\n useRef,\n useMemo,\n ReactElement,\n forwardRef,\n useImperativeHandle,\n ReactNode,\n useEffect,\n RefObject,\n useState,\n ReactFragment,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { exists, max, min } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { isInvalidElement, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { createResizer } from \"../core/resizer\";\nimport { WindowComponentAttributes } from \"..\";\nimport {\n CustomWindowComponent,\n CustomWindowComponentProps,\n DefaultWindow,\n} from \"./DefaultWindow\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\n\nexport type ScrollMode = \"reverse\" | \"rtl\";\n\nconst Window = ({\n _children: children,\n _ref: ref,\n _store: store,\n _element: Element,\n _scrolling: scrolling,\n _attrs: attrs,\n _isHorizontal: horizontal,\n}: {\n _children: ReactNode;\n _ref: RefObject<HTMLDivElement>;\n _store: VirtualStore;\n _element: CustomWindowComponent;\n _scrolling: boolean;\n _attrs: WindowComponentAttributes;\n _isHorizontal: boolean;\n}) => {\n const scrollSize = useStore(store, store._getCorrectedScrollSize);\n\n return (\n <Element\n ref={ref}\n width={horizontal ? scrollSize : undefined}\n height={horizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...attrs,\n style: {\n overflow: horizontal ? \"auto hidden\" : \"hidden auto\",\n display: horizontal ? \"inline-block\" : \"block\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...attrs.style,\n },\n }),\n [attrs]\n )}\n >\n {children}\n </Element>\n );\n};\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Methods of {@link VList}.\n */\nexport interface VListHandle {\n /**\n * Get current scrollTop or scrollLeft.\n */\n readonly scrollOffset: number;\n /**\n * Get current scrollHeight or scrollWidth.\n */\n readonly scrollSize: number;\n /**\n * Get current offsetHeight or offsetWidth.\n */\n readonly viewportSize: number;\n /**\n * Scroll to the item specified by index.\n * @param index index of item\n */\n scrollToIndex(index: number): void;\n /**\n * Scroll to the given offset.\n * @param offset offset from start\n */\n scrollTo(offset: number): void;\n /**\n * Scroll by the given offset.\n * @param offset offset from current position\n */\n scrollBy(offset: number): void;\n}\n\n/**\n * Props of {@link VList}.\n */\nexport interface VListProps extends WindowComponentAttributes {\n /**\n * Elements rendered by this component.\n */\n children: ReactNode;\n /**\n * Number of items to render above/below the visible bounds of the list. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 4\n */\n overscan?: number;\n /**\n * Item size hint for unmeasured items. It will help to reduce scroll jump when items are measured if used properly.\n *\n * - If not set, initial item sizes will be automatically estimated from measured sizes. This is recommended for most cases.\n * - If set, you can opt out estimation and use the value as initial item size.\n */\n initialItemSize?: number;\n /**\n * If set, the specified amount of items will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialItemCount?: number;\n /**\n * If true, rendered as a horizontally scrollable list. Otherwise rendered as a vertically scrollable list.\n */\n horizontal?: boolean;\n /**\n * Scroll modes that should be set in certain situations.\n *\n * - `reverse`: This mode will adjust some styles to be suitable for bottom-to-top scrolling.\n * - `rtl`: You have to set this mode if you use this component under `direction: rtl` style.\n */\n mode?: ScrollMode;\n /**\n * Customized element type for scrollable element. This element will get {@link CustomWindowComponentProps} as props.\n * @defaultValue {@link DefaultWindow}\n */\n element?: CustomWindowComponent;\n /**\n * Customized element type for item element. This element will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n itemElement?: CustomItemComponentOrElement;\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?: (payload: {\n /**\n * The start index of viewable items.\n */\n start: number;\n /**\n * The end index of viewable items.\n */\n end: number;\n /**\n * The total count of items.\n */\n count: number;\n }) => void;\n}\n\n/**\n * Virtualized list component. See {@link VListProps} and {@link VListHandle}.\n */\nexport const VList = forwardRef<VListHandle, VListProps>(\n (\n {\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n mode,\n element = DefaultWindow,\n itemElement = \"div\",\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...windowAttrs\n },\n ref\n ): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => {\n const arr: (ReactElement | ReactFragment | string | number)[] = [];\n Children.forEach(children, (e) => {\n if (isInvalidElement(e)) {\n return;\n }\n arr.push(e);\n });\n return arr;\n }, [children]);\n const count = elements.length;\n\n const onScroll = useRefWithUpdate(onScrollProp);\n const onScrollStop = useRefWithUpdate(onScrollStopProp);\n\n const [scrolling, setScrolling] = useState(false);\n const [store, resizer, scroller, isHorizontal, isRtl] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _isRtl = mode === \"rtl\";\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n mode === \"reverse\",\n (isScrolling) => {\n setScrolling(isScrolling);\n if (!isScrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n },\n (offset) => {\n onScroll[refKey] && onScroll[refKey](offset);\n }\n );\n\n return [\n _store,\n createResizer(_store, _isHorizontal),\n createScroller(_store, _isHorizontal, _isRtl),\n _isHorizontal,\n _isRtl,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useStore(store, store._getRange);\n const jumpCount = useStore(store, store._getJumpCount);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n return () => {\n unobserve();\n cleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp({\n start: startIndex,\n end: endIndex,\n count,\n });\n }, [startIndex, endIndex]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset() {\n return store._getScrollOffset();\n },\n get scrollSize() {\n return scroller._getActualScrollSize();\n },\n get viewportSize() {\n return store._getViewportSize();\n },\n scrollToIndex(index) {\n scroller._scrollToIndex(index, count);\n },\n scrollTo: scroller._scrollTo,\n scrollBy(offset) {\n scroller._scrollTo(store._getScrollOffset() + offset);\n },\n };\n },\n [count]\n );\n\n const startIndexWithMargin = max(startIndex - overscan, 0);\n const endIndexWithMargin = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = startIndexWithMargin; i <= endIndexWithMargin; i++) {\n const e = elements[i];\n // This can be undefined when items are removed\n if (exists(e)) {\n res.push(\n <ListItem\n key={(e as { key?: ReactElement[\"key\"] })?.key || i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={itemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={isRtl}\n />\n );\n }\n }\n return res;\n }, [elements, startIndexWithMargin, endIndexWithMargin]);\n\n return (\n <Window\n _ref={rootRef}\n _store={store}\n _element={element}\n _scrolling={scrolling}\n _children={items}\n _attrs={windowAttrs}\n _isHorizontal={isHorizontal}\n />\n );\n }\n);\n","import {\n memo,\n useRef,\n useMemo,\n CSSProperties,\n ReactElement,\n forwardRef,\n ReactNode,\n RefObject,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { max, min } from \"../core/utils\";\nimport { createScroller } from \"../core/scroller\";\nimport { refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport {\n CustomWindowComponent,\n CustomWindowComponentProps,\n WindowComponentAttributes,\n} from \"..\";\nimport { createGridResizer, GridResizer } from \"../core/resizer\";\nimport { DefaultWindow } from \"./DefaultWindow\";\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 _verticalStore: VirtualStore;\n _horizontalStore: VirtualStore;\n _rowIndex: number;\n _colIndex: number;\n _element: \"div\";\n _isRtl: boolean;\n};\n\nconst Cell = memo(\n ({\n _children: children,\n _resizer: resizer,\n _verticalStore: verticalStore,\n _horizontalStore: horizontalStore,\n _rowIndex: rowIndex,\n _colIndex: colIndex,\n _element: Element,\n _isRtl: isRtl,\n }: CellProps): ReactElement => {\n const ref = useRef<HTMLDivElement>(null);\n\n const top = useStore(\n verticalStore,\n () => verticalStore._getItemOffset(rowIndex),\n true\n );\n const left = useStore(\n horizontalStore,\n () => horizontalStore._getItemOffset(colIndex),\n true\n );\n const vHide = useStore(\n verticalStore,\n () => verticalStore._isUnmeasuredItem(rowIndex),\n true\n );\n const hHide = useStore(\n horizontalStore,\n () => horizontalStore._isUnmeasuredItem(colIndex),\n true\n );\n const height = useStore(\n verticalStore,\n () => verticalStore._getItemSize(rowIndex),\n true\n );\n const width = useStore(\n horizontalStore,\n () => horizontalStore._getItemSize(colIndex),\n true\n );\n\n // The index may be changed if elements are inserted to or removed from the start of props.children\n useIsomorphicLayoutEffect(\n () => resizer._observeItem(ref[refKey]!, rowIndex, colIndex),\n [colIndex, rowIndex]\n );\n\n return (\n <Element\n ref={ref}\n style={useMemo((): CSSProperties => {\n const style: CSSProperties = {\n display: \"grid\",\n margin: 0,\n padding: 0,\n position: \"absolute\",\n top: top,\n [isRtl ? \"right\" : \"left\"]: left,\n visibility: vHide || hHide ? \"hidden\" : \"visible\",\n minHeight: height,\n minWidth: width,\n };\n return style;\n }, [top, left, width, height, vHide, hHide])}\n >\n {children}\n </Element>\n );\n }\n);\n\nconst Window = ({\n _children: children,\n _ref: ref,\n _vStore: vStore,\n _hStore: hStore,\n _element: Element,\n _scrolling: scrolling,\n _attrs: attrs,\n}: {\n _children: ReactNode;\n _ref: RefObject<HTMLDivElement>;\n _vStore: VirtualStore;\n _hStore: VirtualStore;\n _element: CustomWindowComponent;\n _scrolling: boolean;\n _attrs: WindowComponentAttributes;\n}) => {\n const height = useStore(vStore, vStore._getCorrectedScrollSize);\n const width = useStore(hStore, hStore._getCorrectedScrollSize);\n\n return (\n <Element\n ref={ref}\n width={width}\n height={height}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...attrs,\n style: {\n overflow: \"auto\",\n contain: \"strict\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n width: \"100%\",\n height: \"100%\",\n padding: 0,\n margin: 0,\n ...attrs.style,\n },\n }),\n [attrs]\n )}\n >\n {children}\n </Element>\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 WindowComponentAttributes {\n /**\n * A function to create elements rendered by this component.\n */\n children: (arg: {\n /**\n * row index of cell\n */\n rowIndex: number;\n /**\n * column index of cell\n */\n colIndex: number;\n }) => ReactNode;\n /**\n * Total row length of grid.\n */\n row: number;\n /**\n * Total column length of grid.\n */\n col: number;\n /**\n * Cell height hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 40\n */\n cellHeight?: number;\n /**\n * Cell width hint for unmeasured items. It's recommended to specify this prop if item sizes are fixed and known, or much larger than the defaultValue. It will help to reduce scroll jump when items are measured.\n * @defaultValue 100\n */\n cellWidth?: number;\n /**\n * Number of items to render above/below the visible bounds of the grid. You can increase to avoid showing blank items in fast scrolling.\n * @defaultValue 2\n */\n overscan?: number;\n /**\n * If set, the specified amount of rows will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialRowCount?: number;\n /**\n * If set, the specified amount of cols will be mounted in the initial rendering regardless of the container size. This prop is mostly for SSR.\n */\n initialColCount?: number;\n /**\n * You have to set true if you use this component under `direction: rtl` style.\n */\n rtl?: boolean;\n /**\n * Customized element type for scrollable element. This element will get {@link CustomWindowComponentProps} as props.\n * @defaultValue {@link DefaultWindow}\n */\n element?: CustomWindowComponent;\n /**\n * Customized element type for cell element. This element will get {@link CustomCellComponentProps} as props.\n * @defaultValue \"div\"\n */\n cellElement?: CustomCellComponentOrElement;\n}\n\n/**\n * Virtualized grid component. See {@link VGridProps} and {@link VGridHandle}.\n */\nexport const VGrid = forwardRef<VGridHandle, VGridProps>(\n (\n {\n children,\n row: rowCount,\n col: colCount,\n cellHeight = 40,\n cellWidth = 100,\n overscan = 2,\n initialRowCount,\n initialColCount,\n rtl: rtlProp,\n element = DefaultWindow,\n cellElement: itemElement = \"div\",\n ...windowAttrs\n },\n ref\n ): ReactElement => {\n const [verticalScrolling, setVerticalScrolling] = useState(false);\n const [horizontalScrolling, setHorizontalScrolling] = useState(false);\n const [vStore, hStore, resizer, vScroller, hScroller, isRtl] = useStatic(\n () => {\n const _isRtl = !!rtlProp;\n const dummy = () => {};\n const _vs = createVirtualStore(\n rowCount,\n cellHeight,\n initialRowCount,\n false,\n setVerticalScrolling,\n dummy\n );\n const _hs = createVirtualStore(\n colCount,\n cellWidth,\n initialColCount,\n false,\n setHorizontalScrolling,\n dummy\n );\n return [\n _vs,\n _hs,\n createGridResizer(_vs, _hs),\n createScroller(_vs, false, _isRtl),\n createScroller(_hs, true, _isRtl),\n _isRtl,\n ];\n }\n );\n // The elements length and cached items length are different just after element is added/removed.\n vStore._updateCacheLength(rowCount);\n hStore._updateCacheLength(colCount);\n\n const [startRowIndex, endRowIndex] = useStore(vStore, vStore._getRange);\n const [startColIndex, endColIndex] = useStore(hStore, hStore._getRange);\n const vJumpCount = useStore(vStore, vStore._getJumpCount);\n const hJumpCount = useStore(hStore, hStore._getJumpCount);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const vCleanup = vScroller._initRoot(root);\n const hCleanup = hScroller._initRoot(root);\n return () => {\n unobserve();\n vCleanup();\n hCleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = vStore._flushJump();\n if (!jump) return;\n\n vScroller._fixScrollJump(jump);\n }, [vJumpCount]);\n useIsomorphicLayoutEffect(() => {\n const jump = hStore._flushJump();\n if (!jump) return;\n\n hScroller._fixScrollJump(jump);\n }, [hJumpCount]);\n\n useImperativeHandle(\n ref,\n () => {\n return {\n get scrollOffset(): [number, number] {\n return [hStore._getScrollOffset(), vStore._getScrollOffset()];\n },\n get scrollSize(): [number, number] {\n return [\n hScroller._getActualScrollSize(),\n vScroller._getActualScrollSize(),\n ];\n },\n get viewportSize(): [number, number] {\n return [hStore._getViewportSize(), vStore._getViewportSize()];\n },\n scrollToIndex(indexX, indexY) {\n hScroller._scrollToIndex(indexX, colCount);\n vScroller._scrollToIndex(indexY, rowCount);\n },\n scrollTo(offsetX, offsetY) {\n hScroller._scrollTo(offsetX);\n vScroller._scrollTo(offsetY);\n },\n scrollBy(offsetX, offsetY) {\n hScroller._scrollTo(hStore._getScrollOffset() + offsetX);\n vScroller._scrollTo(vStore._getScrollOffset() + offsetY);\n },\n };\n },\n [rowCount, colCount]\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 startRowIndexWithMargin = max(startRowIndex - overscan, 0);\n const endRowIndexWithMargin = min(endRowIndex + overscan, rowCount - 1);\n const startColIndexWithMargin = max(startColIndex - overscan, 0);\n const endColIndexWithMargin = min(endColIndex + overscan, colCount - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = startRowIndexWithMargin; i <= endRowIndexWithMargin; i++) {\n for (let j = startColIndexWithMargin; j <= endColIndexWithMargin; j++) {\n res.push(\n <Cell\n key={genKey(i, j)}\n _resizer={resizer}\n _verticalStore={vStore}\n _horizontalStore={hStore}\n _rowIndex={i}\n _colIndex={j}\n _element={itemElement as \"div\"}\n _children={render(i, j)}\n _isRtl={isRtl}\n />\n );\n }\n }\n\n return res;\n }, [\n render,\n startRowIndexWithMargin,\n endRowIndexWithMargin,\n startColIndexWithMargin,\n endColIndexWithMargin,\n ]);\n\n return (\n <Window\n _ref={rootRef}\n _vStore={vStore}\n _hStore={hStore}\n _element={element}\n _scrolling={verticalScrolling || horizontalScrolling}\n _children={items}\n _attrs={windowAttrs}\n />\n );\n }\n);\n","import {\n Children,\n useRef,\n useMemo,\n ReactElement,\n ReactNode,\n useEffect,\n RefObject,\n useState,\n ReactFragment,\n} from \"react\";\nimport { VirtualStore, createVirtualStore } from \"../core/store\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\nimport { useStore } from \"./useStore\";\nimport { exists, max, min } from \"../core/utils\";\nimport { createWindowScroller } from \"../core/scroller\";\nimport { isInvalidElement, refKey } from \"./utils\";\nimport { useStatic } from \"./useStatic\";\nimport { useRefWithUpdate } from \"./useRefWithUpdate\";\nimport { createWindowResizer } from \"../core/resizer\";\nimport { WindowComponentAttributes } from \"..\";\nimport {\n CustomWindowComponent,\n CustomWindowComponentProps,\n DefaultWindow,\n} from \"./DefaultWindow\";\nimport { CustomItemComponent, ListItem } from \"./ListItem\";\n\nconst Window = ({\n _children: children,\n _ref: ref,\n _store: store,\n _element: Element,\n _scrolling: scrolling,\n _attrs: attrs,\n _isHorizontal: horizontal,\n}: {\n _children: ReactNode;\n _ref: RefObject<HTMLDivElement>;\n _store: VirtualStore;\n _element: CustomWindowComponent;\n _scrolling: boolean;\n _attrs: WindowComponentAttributes;\n _isHorizontal: boolean;\n}) => {\n const scrollSize = useStore(store, store._getCorrectedScrollSize);\n\n return (\n <Element\n ref={ref}\n width={horizontal ? scrollSize : undefined}\n height={horizontal ? undefined : scrollSize}\n scrolling={scrolling}\n attrs={useMemo(\n () => ({\n ...attrs,\n style: {\n overflow: \"visible\",\n display: horizontal ? \"inline-block\" : \"block\",\n // transform: \"translate3d(0px, 0px, 0px)\",\n // willChange: \"scroll-position\",\n // backfaceVisibility: \"hidden\",\n // https://github.com/bvaughn/react-window/issues/395\n // willChange: \"transform\",\n width: horizontal ? \"auto\" : \"100%\",\n height: horizontal ? \"100%\" : \"auto\",\n padding: 0,\n margin: 0,\n ...attrs.style,\n },\n }),\n [attrs]\n )}\n >\n {children}\n </Element>\n );\n};\n\ntype CustomItemComponentOrElement =\n | keyof JSX.IntrinsicElements\n | CustomItemComponent;\n\n/**\n * Props of {@link WVList}.\n */\nexport interface WVListProps extends WindowComponentAttributes {\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 * Customized element type for scrollable element. This element will get {@link CustomWindowComponentProps} as props.\n * @defaultValue {@link DefaultWindow}\n */\n element?: CustomWindowComponent;\n /**\n * Customized element type for item element. This element will get {@link CustomItemComponentProps} as props.\n * @defaultValue \"div\"\n */\n itemElement?: CustomItemComponentOrElement;\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?: (payload: {\n /**\n * The start index of viewable items.\n */\n start: number;\n /**\n * The end index of viewable items.\n */\n end: number;\n /**\n * The total count of items.\n */\n count: number;\n }) => void;\n}\n\n/**\n * Virtualized list component controlled by the window scrolling. See {@link WVListProps}.\n */\nexport const WVList = ({\n children,\n overscan = 4,\n initialItemSize,\n initialItemCount,\n horizontal: horizontalProp,\n element = DefaultWindow,\n itemElement = \"div\",\n onScroll: onScrollProp,\n onScrollStop: onScrollStopProp,\n onRangeChange: onRangeChangeProp,\n ...windowAttrs\n}: WVListProps): ReactElement => {\n // Memoize element array\n const elements = useMemo(() => {\n const arr: (ReactElement | ReactFragment | string | number)[] = [];\n Children.forEach(children, (e) => {\n if (isInvalidElement(e)) {\n return;\n }\n arr.push(e);\n });\n return arr;\n }, [children]);\n const count = elements.length;\n\n const onScroll = useRefWithUpdate(onScrollProp);\n const onScrollStop = useRefWithUpdate(onScrollStopProp);\n\n const [scrolling, setScrolling] = useState(false);\n const [store, resizer, scroller, isHorizontal] = useStatic(() => {\n const _isHorizontal = !!horizontalProp;\n const _store = createVirtualStore(\n count,\n initialItemSize,\n initialItemCount,\n false,\n (isScrolling) => {\n setScrolling(isScrolling);\n if (!isScrolling) {\n onScrollStop[refKey] && onScrollStop[refKey]();\n }\n },\n (offset) => {\n onScroll[refKey] && onScroll[refKey](offset);\n }\n );\n\n return [\n _store,\n createWindowResizer(_store, _isHorizontal),\n createWindowScroller(_store, _isHorizontal),\n _isHorizontal,\n ];\n });\n // The elements length and cached items length are different just after element is added/removed.\n store._updateCacheLength(count);\n\n const [startIndex, endIndex] = useStore(store, store._getRange);\n const jumpCount = useStore(store, store._getJumpCount);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useIsomorphicLayoutEffect(() => {\n const root = rootRef[refKey]!;\n const unobserve = resizer._observeRoot(root);\n const cleanup = scroller._initRoot(root);\n return () => {\n unobserve();\n cleanup();\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n const jump = store._flushJump();\n if (!jump) return;\n\n scroller._fixScrollJump(jump);\n }, [jumpCount]);\n\n useEffect(() => {\n if (!onRangeChangeProp) return;\n\n onRangeChangeProp({\n start: startIndex,\n end: endIndex,\n count,\n });\n }, [startIndex, endIndex]);\n\n const startIndexWithMargin = max(startIndex - overscan, 0);\n const endIndexWithMargin = min(endIndex + overscan, count - 1);\n const items = useMemo(() => {\n const res: ReactElement[] = [];\n for (let i = startIndexWithMargin; i <= endIndexWithMargin; i++) {\n const e = elements[i];\n // This can be undefined when items are removed\n if (exists(e)) {\n res.push(\n <ListItem\n key={(e as { key?: ReactElement[\"key\"] })?.key || i}\n _resizer={resizer}\n _store={store}\n _index={i}\n _element={itemElement as \"div\"}\n _children={e}\n _isHorizontal={isHorizontal}\n _isRtl={false}\n />\n );\n }\n }\n return res;\n }, [elements, startIndexWithMargin, endIndexWithMargin]);\n\n return (\n <Window\n _ref={rootRef}\n _store={store}\n _element={element}\n _scrolling={scrolling}\n _children={items}\n _attrs={windowAttrs}\n _isHorizontal={isHorizontal}\n />\n );\n};\n"],"names":["min","Math","max","abs","now","Date","timeout","setTimeout","exists","v","range","length","cb","Array","from","_","i","debounce","fn","ms","id","cancel","clearTimeout","debouncedFn","_cancel","once","called","cache","args","UNCACHED","getItemSize","index","size","_sizes","_defaultItemSize","computeOffset","isTotal","_length","_measuredOffsetIndex","_offsets","top","computeStartOffset","findIndex","distance","sum","h","findStartIndexWithOffset","offset","prevStartIndex","prevOffset","resetCache","itemSize","sumJumps","jump","reduce","acc","j","calculateJumps","items","map","createVirtualStore","elementsCount","initialItemCount","isReverse","onScrollStateChange","onScrollOffsetChange","shouldAutoEstimateItemSize","initialItemSize","_scrollToQueue","viewportSize","scrollOffset","jumpCount","_scrollDirection","_resized","_prevRange","subscribers","Set","getScrollSize","computeTotalSize","updateScrollDirection","dir","prev","_getRange","prevEndIndex","start","end","findEndIndex","_isUnmeasuredItem","_hasUnmeasuredItemsInRange","startIndex","hasUnmeasuredItemsInRange","endIndex","_getItemOffset","_getItemSize","_getScrollOffset","_getViewportSize","_getScrollSize","_getCorrectedScrollSize","_getJumpCount","_flushJump","prevJump","undefined","_getItemIndexForScrollTo","_waitForScrollDestinationItemsMeasured","Promise","resolve","reject","resolved","resolveQueue","_subscribe","add","delete","_update","type","payload","shouldSync","updatedScrollState","mutated","updated","filter","diff","allJumps","isNewItemMeasured","forEach","setItemSize","isInitialMeasurement","measuredSizes","s","startItemSize","every","arr","sort","a","b","mid","median","estimateDefaultItemSize","isJustResized","flushIsJustResized","_getScrollDirection","_updateCacheLength","useIsomorphicLayoutEffect","window","useLayoutEffect","useEffect","refKey","isInvalidElement","e","useRefWithUpdate","value","ref","useRef","useStore","store","getSnapShot","shouldGetLatest","state","setState","useState","getter","update","sync","flushSync","snap","hasNegativeOffsetInRtl","scrollable","key","isNegative","createOnWheel","isHorizontal","onScrollStopped","throttle","time","n","ctrlKey","deltaX","deltaY","createScroller","isRtl","rootElement","scrollToKey","getActualScrollSize","scrollWidth","scrollHeight","normalizeOffset","scrollManually","async","getCurrentOffset","getOffset","scrollSize","_initRoot","root","syncViewportToScrollPosition","onScroll","onWheel","addEventListener","passive","removeEventListener","_getActualScrollSize","_scrollTo","_scrollToIndex","count","_fixScrollJump","createWindowScroller","offsetKey","visible","getOffsetToWindow","node","nodeOffset","parent","offsetParent","document","body","io","IntersectionObserver","entry","isIntersecting","observe","disconnect","scrollBy","useStatic","init","createResizer","sizeKey","mountedIndexes","WeakMap","getResizeObserver","ResizeObserver","entries","resizes","target","contentRect","get","push","_observeRoot","ro","_observeItem","el","set","unobserve","createWindowResizer","windowSizeKey","createGridResizer","vStore","hStore","heightKey","widthKey","maybeCachedRowIndexes","maybeCachedColIndexes","sizeCache","Map","getKey","rowIndex","colIndex","resizedRows","resizedCols","cell","prevSize","rowResized","colResized","heightResizes","maxHeight","widthResizes","maxWidth","DefaultWindow","forwardRef","children","attrs","width","height","scrolling","_jsx","jsx","style","useMemo","position","visibility","pointerEvents","ListItem","memo","_children","_resizer","resizer","_store","_index","_element","Element","_isHorizontal","_isRtl","hide","leftOrRightKey","margin","padding","display","Window","Window$2","_ref","_scrolling","_attrs","horizontal","overflow","contain","VList","overscan","horizontalProp","mode","element","itemElement","onScrollProp","onScrollStop","onScrollStopProp","onRangeChange","onRangeChangeProp","windowAttrs","elements","Children","setScrolling","scroller","isScrolling","rootRef","cleanup","useImperativeHandle","scrollToIndex","scrollTo","startIndexWithMargin","endIndexWithMargin","res","genKey","Cell","_verticalStore","verticalStore","_horizontalStore","horizontalStore","_rowIndex","_colIndex","left","vHide","hHide","minHeight","minWidth","Window$1","_vStore","_hStore","VGrid","row","rowCount","col","colCount","cellHeight","cellWidth","initialRowCount","initialColCount","rtl","rtlProp","cellElement","verticalScrolling","setVerticalScrolling","horizontalScrolling","setHorizontalScrolling","vScroller","hScroller","dummy","_vs","_hs","startRowIndex","endRowIndex","startColIndex","endColIndex","vJumpCount","hJumpCount","vCleanup","hCleanup","indexX","indexY","offsetX","offsetY","render","startRowIndexWithMargin","endRowIndexWithMargin","startColIndexWithMargin","endColIndexWithMargin","WVList"],"mappings":"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"}