react-window 2.0.0-alpha.5 → 2.0.0-alpha.7
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/dist/react-window.cjs +2 -1
- package/dist/react-window.cjs.map +1 -0
- package/dist/react-window.d.ts +41 -23
- package/dist/react-window.js +558 -404
- package/dist/react-window.js.map +1 -0
- package/docs/assets/index-BLMZr8Ze.css +1 -0
- package/docs/assets/index-Cvqxb3fG.js +68 -0
- package/docs/generated/code-snippets/FixedHeightRowComponent.json +2 -2
- package/docs/generated/code-snippets/FlexboxLayout.json +2 -2
- package/docs/generated/code-snippets/HorizontalList.json +4 -0
- package/docs/generated/code-snippets/HorizontalListCellRenderer.json +4 -0
- package/docs/generated/code-snippets/ListVariableRowHeights.json +2 -2
- package/docs/generated/code-snippets/RtlGrid.json +4 -0
- package/docs/generated/js-docs/Grid.json +83 -45
- package/docs/generated/js-docs/List.json +7 -4
- package/docs/index.html +2 -2
- package/docs/stats.html +1 -1
- package/package.json +2 -1
- package/docs/assets/index-BsBvdJUI.css +0 -1
- package/docs/assets/index-DcPBnht2.js +0 -67
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-window.js","sources":["../lib/utils/isRtl.ts","../lib/core/useIsRtl.ts","../lib/hooks/useIsomorphicLayoutEffect.ts","../lib/utils/parseNumericStyleValue.ts","../lib/hooks/useResizeObserver.ts","../lib/hooks/useStableCallback.ts","../lib/utils/getRTLOffsetType.ts","../lib/utils/adjustScrollOffsetForRtl.ts","../lib/utils/assert.ts","../lib/core/getEstimatedSize.ts","../lib/core/getOffsetForIndex.ts","../lib/core/getStartStopIndices.ts","../lib/core/createCachedBounds.ts","../lib/core/useCachedBounds.ts","../lib/core/useItemSize.ts","../lib/core/useVirtualizer.ts","../lib/hooks/useMemoizedObject.ts","../lib/utils/shallowCompare.ts","../lib/utils/arePropsEqual.ts","../lib/components/grid/Grid.tsx","../lib/components/grid/useGridCallbackRef.ts","../lib/components/grid/useGridRef.ts","../lib/components/list/List.tsx","../lib/components/list/useListCallbackRef.ts","../lib/components/list/useListRef.ts","../lib/utils/getScrollbarSize.ts"],"sourcesContent":["export function isRtl(element: HTMLElement) {\n let currentElement: HTMLElement | null = element;\n while (currentElement) {\n if (currentElement.dir) {\n return currentElement.dir === \"rtl\";\n }\n\n currentElement = currentElement.parentElement;\n }\n\n return false;\n}\n","import { useLayoutEffect, useState, type HTMLAttributes } from \"react\";\nimport { isRtl } from \"../utils/isRtl\";\n\nexport function useIsRtl(\n element: HTMLElement | null,\n dir: HTMLAttributes<HTMLElement>[\"dir\"]\n) {\n const [value, setValue] = useState(dir === \"rtl\");\n\n useLayoutEffect(() => {\n if (element) {\n if (!dir) {\n setValue(isRtl(element));\n }\n }\n }, [dir, element]);\n\n return value;\n}\n","import { useEffect, useLayoutEffect } from \"react\";\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n","import type { CSSProperties } from \"react\";\n\nexport function parseNumericStyleValue(\n value: CSSProperties[\"height\"]\n): number | undefined {\n if (value !== undefined) {\n switch (typeof value) {\n case \"number\": {\n return value;\n }\n case \"string\": {\n if (value.endsWith(\"px\")) {\n return parseFloat(value);\n }\n break;\n }\n }\n }\n}\n","import { useMemo, useState, type CSSProperties } from \"react\";\nimport { parseNumericStyleValue } from \"../utils/parseNumericStyleValue\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\nexport function useResizeObserver({\n box,\n defaultHeight,\n defaultWidth,\n disabled: disabledProp,\n element,\n mode,\n style\n}: {\n box?: ResizeObserverBoxOptions;\n defaultHeight?: number;\n defaultWidth?: number;\n disabled?: boolean;\n element: HTMLElement | null;\n mode?: \"only-height\" | \"only-width\";\n style?: CSSProperties;\n}) {\n const { styleHeight, styleWidth } = useMemo(\n () => ({\n styleHeight: parseNumericStyleValue(style?.height),\n styleWidth: parseNumericStyleValue(style?.width)\n }),\n [style?.height, style?.width]\n );\n\n const [state, setState] = useState<{\n height: number | undefined;\n width: number | undefined;\n }>({\n height: defaultHeight,\n width: defaultWidth\n });\n\n const disabled =\n disabledProp ||\n (mode === \"only-height\" && styleHeight !== undefined) ||\n (mode === \"only-width\" && styleWidth !== undefined) ||\n (styleHeight !== undefined && styleWidth !== undefined);\n\n useIsomorphicLayoutEffect(() => {\n if (element === null || disabled) {\n return;\n }\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { contentRect, target } = entry;\n if (element === target) {\n setState((prevState) => {\n if (\n prevState.height === contentRect.height &&\n prevState.width === contentRect.width\n ) {\n return prevState;\n }\n\n return {\n height: contentRect.height,\n width: contentRect.width\n };\n });\n }\n }\n });\n resizeObserver.observe(element, { box });\n\n return () => {\n resizeObserver?.unobserve(element);\n };\n }, [box, disabled, element, styleHeight, styleWidth]);\n\n return useMemo(\n () => ({\n height: styleHeight ?? state.height,\n width: styleWidth ?? state.width\n }),\n [state, styleHeight, styleWidth]\n );\n}\n","import { useCallback, useRef } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"./useIsomorphicLayoutEffect\";\n\n// Forked from useEventCallback (usehooks-ts)\nexport function useStableCallback<Args, Return>(\n fn: (args: Args) => Return\n): (args: Args) => Return {\n const ref = useRef<typeof fn>(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n\n return useCallback((args: Args) => ref.current?.(args), [ref]) as (\n args: Args\n ) => Return;\n}\n","export type RTLOffsetType =\n | \"negative\"\n | \"positive-descending\"\n | \"positive-ascending\";\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement(\"div\");\n const outerStyle = outerDiv.style;\n outerStyle.width = \"50px\";\n outerStyle.height = \"50px\";\n outerStyle.overflow = \"scroll\";\n outerStyle.direction = \"rtl\";\n\n const innerDiv = document.createElement(\"div\");\n const innerStyle = innerDiv.style;\n innerStyle.width = \"100px\";\n innerStyle.height = \"100px\";\n\n outerDiv.appendChild(innerDiv);\n\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = \"positive-descending\";\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = \"negative\";\n } else {\n cachedRTLResult = \"positive-ascending\";\n }\n }\n\n document.body.removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","import type { Direction } from \"../core/types\";\nimport { getRTLOffsetType } from \"./getRTLOffsetType\";\n\nexport function adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n}: {\n containerElement: HTMLElement | null;\n direction: Direction;\n isRtl: boolean;\n scrollOffset: number;\n}) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n if (direction === \"horizontal\") {\n if (isRtl) {\n switch (getRTLOffsetType()) {\n case \"negative\": {\n return -scrollOffset;\n }\n case \"positive-descending\": {\n if (containerElement) {\n const { clientWidth, scrollLeft, scrollWidth } = containerElement;\n return scrollWidth - clientWidth - scrollLeft;\n }\n break;\n }\n }\n }\n }\n return scrollOffset;\n}\n","export function assert(\n expectedCondition: unknown,\n message: string = \"Assertion error\"\n): asserts expectedCondition {\n if (!expectedCondition) {\n console.error(message);\n\n throw Error(message);\n }\n}\n","import type { CachedBounds, SizeFunction } from \"./types\";\nimport { assert } from \"../utils/assert\";\n\nexport function getEstimatedSize<Props extends object>({\n cachedBounds,\n itemCount,\n itemSize\n}: {\n cachedBounds: CachedBounds;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n}) {\n if (itemCount === 0) {\n return 0;\n } else if (typeof itemSize === \"number\") {\n return itemCount * itemSize;\n } else {\n const bounds = cachedBounds.get(\n cachedBounds.size === 0 ? 0 : cachedBounds.size - 1\n );\n assert(bounds !== undefined, \"Unexpected bounds cache miss\");\n\n const averageItemSize =\n (bounds.scrollOffset + bounds.size) / cachedBounds.size;\n\n return itemCount * averageItemSize;\n }\n}\n","import type { Align } from \"../types\";\nimport { getEstimatedSize } from \"./getEstimatedSize\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function getOffsetForIndex<Props extends object>({\n align,\n cachedBounds,\n index,\n itemCount,\n itemSize,\n containerScrollOffset,\n containerSize\n}: {\n align: Align;\n cachedBounds: CachedBounds;\n index: number;\n itemCount: number;\n itemSize: number | SizeFunction<Props>;\n containerScrollOffset: number;\n containerSize: number;\n}) {\n const estimatedTotalSize = getEstimatedSize({\n cachedBounds,\n itemCount,\n itemSize\n });\n\n const bounds = cachedBounds.get(index);\n const maxOffset = Math.max(\n 0,\n Math.min(estimatedTotalSize - containerSize, bounds.scrollOffset)\n );\n const minOffset = Math.max(\n 0,\n bounds.scrollOffset - containerSize + bounds.size\n );\n\n if (align === \"smart\") {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n align = \"auto\";\n } else {\n align = \"center\";\n }\n }\n\n switch (align) {\n case \"start\": {\n return maxOffset;\n }\n case \"end\": {\n return minOffset;\n }\n case \"center\": {\n if (bounds.scrollOffset <= containerSize / 2) {\n // Too near the beginning to center-align\n return 0;\n } else if (\n bounds.scrollOffset + bounds.size / 2 >=\n estimatedTotalSize - containerSize / 2\n ) {\n // Too near the end to center-align\n return estimatedTotalSize - containerSize;\n } else {\n return bounds.scrollOffset + bounds.size / 2 - containerSize / 2;\n }\n }\n case \"auto\":\n default: {\n if (\n containerScrollOffset >= minOffset &&\n containerScrollOffset <= maxOffset\n ) {\n return containerScrollOffset;\n } else if (containerScrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n }\n}\n","import type { CachedBounds } from \"./types\";\n\nexport function getStartStopIndices({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n}: {\n cachedBounds: CachedBounds;\n containerScrollOffset: number;\n containerSize: number;\n itemCount: number;\n overscanCount: number;\n}): [number, number] {\n const maxIndex = itemCount - 1;\n\n let startIndex = 0;\n let stopIndex = -1;\n let currentIndex = 0;\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (bounds.scrollOffset + bounds.size > containerScrollOffset) {\n break;\n }\n\n currentIndex++;\n }\n\n startIndex = currentIndex;\n startIndex = Math.max(0, startIndex - overscanCount);\n\n while (currentIndex < maxIndex) {\n const bounds = cachedBounds.get(currentIndex);\n\n if (\n bounds.scrollOffset + bounds.size >=\n containerScrollOffset + containerSize\n ) {\n break;\n }\n\n currentIndex++;\n }\n\n stopIndex = Math.min(maxIndex, currentIndex);\n stopIndex = Math.min(itemCount - 1, stopIndex + overscanCount);\n\n return startIndex < 0 ? [0, -1] : [startIndex, stopIndex];\n}\n","import { assert } from \"../utils/assert\";\nimport type { Bounds, CachedBounds, SizeFunction } from \"./types\";\n\nexport function createCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n const cache = new Map<number, Bounds>();\n\n return {\n get(index: number) {\n assert(index < itemCount, `Invalid index ${index}`);\n\n while (cache.size - 1 < index) {\n const currentIndex = cache.size;\n\n let size: number;\n switch (typeof itemSize) {\n case \"function\": {\n size = itemSize(currentIndex, itemProps);\n break;\n }\n case \"number\": {\n size = itemSize;\n break;\n }\n }\n\n if (currentIndex === 0) {\n cache.set(currentIndex, {\n size,\n scrollOffset: 0\n });\n } else {\n const previousRowBounds = cache.get(currentIndex - 1);\n assert(\n previousRowBounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n cache.set(currentIndex, {\n scrollOffset:\n previousRowBounds.scrollOffset + previousRowBounds.size,\n size\n });\n }\n }\n\n const bounds = cache.get(index);\n assert(\n bounds !== undefined,\n `Unexpected bounds cache miss for index ${index}`\n );\n\n return bounds;\n },\n set(index: number, bounds: Bounds) {\n cache.set(index, bounds);\n },\n get size() {\n return cache.size;\n }\n };\n}\n","import { useMemo } from \"react\";\nimport { createCachedBounds } from \"./createCachedBounds\";\nimport type { CachedBounds, SizeFunction } from \"./types\";\n\nexport function useCachedBounds<Props extends object>({\n itemCount,\n itemProps,\n itemSize\n}: {\n itemCount: number;\n itemProps: Props;\n itemSize: number | SizeFunction<Props>;\n}): CachedBounds {\n return useMemo(\n () =>\n createCachedBounds({\n itemCount,\n itemProps,\n itemSize\n }),\n [itemCount, itemProps, itemSize]\n );\n}\n","import { assert } from \"../utils/assert\";\nimport type { SizeFunction } from \"./types\";\n\nexport function useItemSize<Props extends object>({\n containerSize,\n itemSize: itemSizeProp\n}: {\n containerSize: number;\n itemSize: number | string | SizeFunction<Props>;\n}) {\n let itemSize: number | SizeFunction<Props>;\n switch (typeof itemSizeProp) {\n case \"string\": {\n assert(\n itemSizeProp.endsWith(\"%\"),\n `Invalid item size: \"${itemSizeProp}\"; string values must be percentages (e.g. \"100%\")`\n );\n assert(\n containerSize !== undefined,\n \"Container size must be defined if a percentage item size is specified\"\n );\n\n itemSize = (containerSize * parseInt(itemSizeProp)) / 100;\n break;\n }\n default: {\n itemSize = itemSizeProp;\n break;\n }\n }\n\n return itemSize;\n}\n","import {\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties\n} from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../hooks/useIsomorphicLayoutEffect\";\nimport { useResizeObserver } from \"../hooks/useResizeObserver\";\nimport { useStableCallback } from \"../hooks/useStableCallback\";\nimport type { Align } from \"../types\";\nimport { adjustScrollOffsetForRtl } from \"../utils/adjustScrollOffsetForRtl\";\nimport { getEstimatedSize as getEstimatedSizeUtil } from \"./getEstimatedSize\";\nimport { getOffsetForIndex } from \"./getOffsetForIndex\";\nimport { getStartStopIndices as getStartStopIndicesUtil } from \"./getStartStopIndices\";\nimport type { Direction, SizeFunction } from \"./types\";\nimport { useCachedBounds } from \"./useCachedBounds\";\nimport { useItemSize } from \"./useItemSize\";\n\nexport function useVirtualizer<Props extends object>({\n containerElement,\n containerStyle,\n defaultContainerSize = 0,\n direction,\n isRtl = false,\n itemCount,\n itemProps,\n itemSize: itemSizeProp,\n onResize,\n overscanCount\n}: {\n containerElement: HTMLElement | null;\n containerStyle?: CSSProperties;\n defaultContainerSize?: number;\n direction: Direction;\n isRtl?: boolean;\n itemCount: number;\n itemProps: Props;\n itemSize: number | string | SizeFunction<Props>;\n onResize:\n | ((\n size: { height: number; width: number },\n prevSize: { height: number; width: number }\n ) => void)\n | undefined;\n overscanCount: number;\n}) {\n const [indices, setIndices] = useState([0, -1]);\n\n // Guard against temporarily invalid indices that may occur when item count decreases\n // Cached bounds object will be re-created and a second render will restore things\n const [startIndex, stopIndex] = [\n Math.min(itemCount - 1, indices[0]),\n Math.min(itemCount - 1, indices[1])\n ];\n\n const { height = defaultContainerSize, width = defaultContainerSize } =\n useResizeObserver({\n defaultHeight:\n direction === \"vertical\" ? defaultContainerSize : undefined,\n defaultWidth:\n direction === \"horizontal\" ? defaultContainerSize : undefined,\n element: containerElement,\n mode: direction === \"vertical\" ? \"only-height\" : \"only-width\",\n style: containerStyle\n });\n\n const prevSizeRef = useRef<{ height: number; width: number }>({\n height: 0,\n width: 0\n });\n\n const containerSize = direction === \"vertical\" ? height : width;\n\n const itemSize = useItemSize({ containerSize, itemSize: itemSizeProp });\n\n useLayoutEffect(() => {\n if (typeof onResize === \"function\") {\n const prevSize = prevSizeRef.current;\n\n if (prevSize.height !== height || prevSize.width !== width) {\n onResize({ height, width }, { ...prevSize });\n\n prevSize.height = height;\n prevSize.width = width;\n }\n }\n }, [height, onResize, width]);\n\n const cachedBounds = useCachedBounds({\n itemCount,\n itemProps,\n itemSize\n });\n\n const getCellBounds = useCallback(\n (index: number) => cachedBounds.get(index),\n [cachedBounds]\n );\n\n const getEstimatedSize = useCallback(\n () =>\n getEstimatedSizeUtil({\n cachedBounds,\n itemCount,\n itemSize\n }),\n [cachedBounds, itemCount, itemSize]\n );\n\n const getStartStopIndices = useCallback(\n (scrollOffset: number) => {\n const containerScrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n return getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n },\n [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n isRtl,\n itemCount,\n overscanCount\n ]\n );\n\n useIsomorphicLayoutEffect(() => {\n const scrollOffset =\n (direction === \"vertical\"\n ? containerElement?.scrollTop\n : containerElement?.scrollLeft) ?? 0;\n\n setIndices(getStartStopIndices(scrollOffset));\n }, [containerElement, direction, getStartStopIndices]);\n\n useIsomorphicLayoutEffect(() => {\n if (!containerElement) {\n return;\n }\n\n const onScroll = () => {\n setIndices((prev) => {\n const { scrollLeft, scrollTop } = containerElement;\n\n const scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset: direction === \"vertical\" ? scrollTop : scrollLeft\n });\n\n const next = getStartStopIndicesUtil({\n cachedBounds,\n containerScrollOffset: scrollOffset,\n containerSize,\n itemCount,\n overscanCount\n });\n\n if (next[0] === prev[0] && next[1] === prev[1]) {\n return prev;\n }\n\n return next;\n });\n };\n\n containerElement.addEventListener(\"scroll\", onScroll);\n\n return () => {\n containerElement.removeEventListener(\"scroll\", onScroll);\n };\n }, [\n cachedBounds,\n containerElement,\n containerSize,\n direction,\n itemCount,\n overscanCount\n ]);\n\n const scrollToIndex = useStableCallback(\n ({\n align = \"auto\",\n behavior = \"auto\",\n containerScrollOffset,\n index\n }: {\n align?: Align;\n behavior?: ScrollBehavior;\n containerScrollOffset: number;\n index: number;\n }) => {\n let scrollOffset = getOffsetForIndex({\n align,\n cachedBounds,\n containerScrollOffset,\n containerSize,\n index,\n itemCount,\n itemSize\n });\n\n if (containerElement) {\n scrollOffset = adjustScrollOffsetForRtl({\n containerElement,\n direction,\n isRtl,\n scrollOffset\n });\n\n if (typeof containerElement.scrollTo === \"function\") {\n if (direction === \"horizontal\") {\n containerElement.scrollTo({\n left: scrollOffset,\n behavior: behavior || undefined\n });\n } else {\n containerElement.scrollTo({\n behavior: behavior || undefined,\n top: scrollOffset\n });\n }\n } else {\n // Special case for environments like jsdom that don't implement scrollTo\n const next = getStartStopIndices(scrollOffset);\n if (next[0] !== startIndex || next[1] !== stopIndex) {\n setIndices(next);\n }\n }\n }\n }\n );\n\n return {\n getCellBounds,\n getEstimatedSize,\n scrollToIndex,\n startIndex,\n stopIndex\n };\n}\n","import { useMemo } from \"react\";\n\nexport function useMemoizedObject<Type extends object>(\n unstableObject: Type\n): Type {\n return useMemo(() => {\n return unstableObject;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, Object.values(unstableObject));\n}\n","import { assert } from \"./assert\";\n\nexport function shallowCompare<Type extends object>(\n a: Type | undefined,\n b: Type | undefined\n) {\n if (a === b) {\n return true;\n }\n\n if (!!a !== !!b) {\n return false;\n }\n\n assert(a !== undefined);\n assert(b !== undefined);\n\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n\n for (const key in a) {\n if (!Object.is(b[key], a[key])) {\n return false;\n }\n }\n\n return true;\n}\n","import type { CSSProperties } from \"react\";\nimport { shallowCompare } from \"./shallowCompare\";\n\n// Custom comparison function for React.memo()\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://react.dev/reference/react/memo#memo\nexport function arePropsEqual(\n prevProps: { style: CSSProperties },\n nextProps: { style: CSSProperties }\n): boolean {\n const { style: prevStyle, ...prevRest } = prevProps;\n const { style: nextStyle, ...nextRest } = nextProps;\n\n return (\n shallowCompare(prevStyle, nextStyle) && shallowCompare(prevRest, nextRest)\n );\n}\n","import {\n memo,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n type ReactNode\n} from \"react\";\nimport { useIsRtl } from \"../../core/useIsRtl\";\nimport { useVirtualizer } from \"../../core/useVirtualizer\";\nimport { useMemoizedObject } from \"../../hooks/useMemoizedObject\";\nimport type { Align } from \"../../types\";\nimport { arePropsEqual } from \"../../utils/arePropsEqual\";\nimport type { GridProps } from \"./types\";\n\n// TODO Handle scrollbar sizes (add width/height if necessary)\n\nexport function Grid<CellProps extends object>({\n cellComponent: CellComponentProp,\n cellProps: cellPropsUnstable,\n className,\n columnCount,\n columnWidth,\n defaultHeight = 0,\n defaultWidth = 0,\n dir,\n gridRef,\n onCellsRendered,\n onResize,\n overscanCount = 3,\n rowCount,\n rowHeight,\n style,\n ...rest\n}: GridProps<CellProps>) {\n const cellProps = useMemoizedObject(cellPropsUnstable);\n const CellComponent = useMemo(\n () => memo(CellComponentProp, arePropsEqual),\n [CellComponentProp]\n );\n\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n\n const isRtl = useIsRtl(element, dir);\n\n const {\n getCellBounds: getColumnBounds,\n getEstimatedSize: getEstimatedWidth,\n startIndex: columnStartIndex,\n scrollToIndex: scrollToColumnIndex,\n stopIndex: columnStopIndex\n } = useVirtualizer({\n containerElement: element,\n defaultContainerSize: defaultWidth,\n direction: \"horizontal\",\n isRtl,\n itemCount: columnCount,\n itemProps: cellProps,\n itemSize: columnWidth,\n onResize,\n overscanCount\n });\n\n const {\n getCellBounds: getRowBounds,\n getEstimatedSize: getEstimatedHeight,\n startIndex: rowStartIndex,\n scrollToIndex: scrollToRowIndex,\n stopIndex: rowStopIndex\n } = useVirtualizer({\n containerElement: element,\n defaultContainerSize: defaultHeight,\n direction: \"vertical\",\n itemCount: rowCount,\n itemProps: cellProps,\n itemSize: rowHeight,\n onResize,\n overscanCount\n });\n\n useImperativeHandle(\n gridRef,\n () => ({\n get element() {\n return element;\n },\n\n scrollToCell({\n behavior = \"auto\",\n columnAlign = \"auto\",\n columnIndex,\n rowAlign = \"auto\",\n rowIndex\n }: {\n behavior?: ScrollBehavior;\n columnAlign?: Align;\n columnIndex: number;\n rowAlign?: Align;\n rowIndex: number;\n }) {\n scrollToRowIndex({\n align: rowAlign,\n behavior,\n containerScrollOffset: element?.scrollTop ?? 0,\n index: rowIndex\n });\n scrollToColumnIndex({\n align: columnAlign,\n behavior,\n containerScrollOffset: element?.scrollLeft ?? 0,\n index: columnIndex\n });\n },\n\n scrollToColumn({\n align = \"auto\",\n behavior = \"auto\",\n index\n }: {\n align?: Align;\n behavior?: ScrollBehavior;\n index: number;\n }) {\n scrollToColumnIndex({\n align,\n behavior,\n containerScrollOffset: element?.scrollLeft ?? 0,\n index\n });\n },\n\n scrollToRow({\n align = \"auto\",\n behavior = \"auto\",\n index\n }: {\n align?: Align;\n behavior?: ScrollBehavior;\n index: number;\n }) {\n scrollToRowIndex({\n align,\n behavior,\n containerScrollOffset: element?.scrollTop ?? 0,\n index\n });\n }\n }),\n [element, scrollToColumnIndex, scrollToRowIndex]\n );\n\n useEffect(() => {\n if (\n columnStartIndex >= 0 &&\n columnStopIndex >= 0 &&\n rowStartIndex >= 0 &&\n rowStopIndex >= 0 &&\n onCellsRendered\n ) {\n onCellsRendered({\n columnStartIndex,\n columnStopIndex,\n rowStartIndex,\n rowStopIndex\n });\n }\n }, [\n onCellsRendered,\n columnStartIndex,\n columnStopIndex,\n rowStartIndex,\n rowStopIndex\n ]);\n\n const cells = useMemo(() => {\n const children: ReactNode[] = [];\n if (columnCount > 0 && rowCount > 0) {\n for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n const rowBounds = getRowBounds(rowIndex);\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n const columnBounds = getColumnBounds(columnIndex);\n\n children.push(\n <CellComponent\n {...(cellProps as CellProps)}\n columnIndex={columnIndex}\n key={`${rowIndex}-${columnIndex}`}\n rowIndex={rowIndex}\n style={{\n position: \"absolute\",\n left: isRtl ? undefined : 0,\n right: isRtl ? 0 : undefined,\n transform: `translate(${isRtl ? -columnBounds.scrollOffset : columnBounds.scrollOffset}px, ${rowBounds.scrollOffset}px)`,\n height: rowCount > 1 ? rowBounds.size : \"100%\",\n width: columnBounds.size\n }}\n />\n );\n }\n }\n }\n return children;\n }, [\n CellComponent,\n cellProps,\n columnCount,\n columnStartIndex,\n columnStopIndex,\n getColumnBounds,\n getRowBounds,\n isRtl,\n rowCount,\n rowStartIndex,\n rowStopIndex\n ]);\n\n return (\n <div\n role=\"grid\"\n {...rest}\n className={className}\n dir={dir}\n ref={setElement}\n style={{\n width: \"100%\",\n height: \"100%\",\n ...style,\n maxHeight: \"100%\",\n maxWidth: \"100%\",\n flexGrow: 1,\n overflow: \"auto\"\n }}\n >\n <div\n className={className}\n style={{\n position: \"relative\",\n height: getEstimatedHeight(),\n width: getEstimatedWidth()\n }}\n >\n {cells}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { GridImperativeAPI } from \"./types\";\n\n/**\n * Convenience hook to return a properly typed ref callback for the Grid component.\n *\n * Use this hook when you need to share the ref with another component or hook.\n */\nexport const useGridCallbackRef =\n useState as typeof useState<GridImperativeAPI | null>;\n","import { useRef } from \"react\";\nimport type { GridImperativeAPI } from \"./types\";\n\n/**\n * Convenience hook to return a properly typed ref for the Grid component.\n */\nexport const useGridRef = useRef as typeof useRef<GridImperativeAPI>;\n","import {\n memo,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n type ReactNode\n} from \"react\";\nimport { useVirtualizer } from \"../../core/useVirtualizer\";\nimport { useMemoizedObject } from \"../../hooks/useMemoizedObject\";\nimport type { Align } from \"../../types\";\nimport { arePropsEqual } from \"../../utils/arePropsEqual\";\nimport type { ListProps } from \"./types\";\n\nexport function List<RowProps extends object>({\n className,\n defaultHeight = 0,\n listRef,\n onResize,\n onRowsRendered,\n overscanCount = 3,\n rowComponent: RowComponentProp,\n rowCount,\n rowHeight,\n rowProps: rowPropsUnstable,\n style,\n ...rest\n}: ListProps<RowProps>) {\n const rowProps = useMemoizedObject(rowPropsUnstable);\n const RowComponent = useMemo(\n () => memo(RowComponentProp, arePropsEqual),\n [RowComponentProp]\n );\n\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n\n const {\n getCellBounds,\n getEstimatedSize,\n scrollToIndex,\n startIndex,\n stopIndex\n } = useVirtualizer({\n containerElement: element,\n defaultContainerSize: defaultHeight,\n direction: \"vertical\",\n itemCount: rowCount,\n itemProps: rowProps,\n itemSize: rowHeight,\n onResize,\n overscanCount\n });\n\n useImperativeHandle(\n listRef,\n () => ({\n get element() {\n return element;\n },\n\n scrollToRow({\n align = \"auto\",\n behavior = \"auto\",\n index\n }: {\n align?: Align;\n behavior?: ScrollBehavior;\n index: number;\n }) {\n scrollToIndex({\n align,\n behavior,\n containerScrollOffset: element?.scrollTop ?? 0,\n index\n });\n }\n }),\n [element, scrollToIndex]\n );\n\n useEffect(() => {\n if (startIndex >= 0 && stopIndex >= 0 && onRowsRendered) {\n onRowsRendered({\n startIndex,\n stopIndex\n });\n }\n }, [onRowsRendered, startIndex, stopIndex]);\n\n const rows = useMemo(() => {\n const children: ReactNode[] = [];\n if (rowCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n const bounds = getCellBounds(index);\n\n children.push(\n <RowComponent\n {...(rowProps as RowProps)}\n key={index}\n index={index}\n style={{\n position: \"absolute\",\n left: 0,\n transform: `translateY(${bounds.scrollOffset}px)`,\n height: bounds.size,\n width: \"100%\"\n }}\n />\n );\n }\n }\n return children;\n }, [RowComponent, getCellBounds, rowCount, rowProps, startIndex, stopIndex]);\n\n return (\n <div\n role=\"list\"\n {...rest}\n className={className}\n ref={setElement}\n style={{\n ...style,\n maxHeight: \"100%\",\n flexGrow: 1,\n overflowY: \"auto\"\n }}\n >\n <div\n className={className}\n style={{\n height: getEstimatedSize(),\n position: \"relative\",\n width: \"100%\"\n }}\n >\n {rows}\n </div>\n </div>\n );\n}\n","import { useState } from \"react\";\nimport type { ListImperativeAPI } from \"./types\";\n\n/**\n * Convenience hook to return a properly typed ref callback for the List component.\n *\n * Use this hook when you need to share the ref with another component or hook.\n */\nexport const useListCallbackRef =\n useState as typeof useState<ListImperativeAPI | null>;\n","import { useRef } from \"react\";\nimport type { ListImperativeAPI } from \"./types\";\n\n/**\n * Convenience hook to return a properly typed ref for the List component.\n */\nexport const useListRef = useRef as typeof useRef<ListImperativeAPI>;\n","let size: number = -1;\n\nexport function getScrollbarSize(recalculate: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement(\"div\");\n const style = div.style;\n style.width = \"50px\";\n style.height = \"50px\";\n style.overflow = \"scroll\";\n\n document.body.appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n document.body.removeChild(div);\n }\n\n return size;\n}\n\nexport function setScrollbarSizeForTests(value: number) {\n size = value;\n}\n"],"names":["isRtl","element","currentElement","useIsRtl","dir","value","setValue","useState","useLayoutEffect","useIsomorphicLayoutEffect","useEffect","parseNumericStyleValue","useResizeObserver","box","defaultHeight","defaultWidth","disabledProp","mode","style","styleHeight","styleWidth","useMemo","state","setState","disabled","resizeObserver","entries","entry","contentRect","target","prevState","useStableCallback","fn","ref","useRef","useCallback","args","cachedRTLResult","getRTLOffsetType","recalculate","outerDiv","outerStyle","innerDiv","innerStyle","adjustScrollOffsetForRtl","containerElement","direction","scrollOffset","clientWidth","scrollLeft","scrollWidth","assert","expectedCondition","message","getEstimatedSize","cachedBounds","itemCount","itemSize","bounds","averageItemSize","getOffsetForIndex","align","index","containerScrollOffset","containerSize","estimatedTotalSize","maxOffset","minOffset","getStartStopIndices","overscanCount","maxIndex","startIndex","stopIndex","currentIndex","createCachedBounds","itemProps","cache","size","previousRowBounds","useCachedBounds","useItemSize","itemSizeProp","useVirtualizer","containerStyle","defaultContainerSize","onResize","indices","setIndices","height","width","prevSizeRef","prevSize","getCellBounds","getEstimatedSizeUtil","getStartStopIndicesUtil","onScroll","prev","scrollTop","next","scrollToIndex","behavior","useMemoizedObject","unstableObject","shallowCompare","a","b","key","arePropsEqual","prevProps","nextProps","prevStyle","prevRest","nextStyle","nextRest","Grid","CellComponentProp","cellPropsUnstable","className","columnCount","columnWidth","gridRef","onCellsRendered","rowCount","rowHeight","rest","cellProps","CellComponent","memo","setElement","getColumnBounds","getEstimatedWidth","columnStartIndex","scrollToColumnIndex","columnStopIndex","getRowBounds","getEstimatedHeight","rowStartIndex","scrollToRowIndex","rowStopIndex","useImperativeHandle","columnAlign","columnIndex","rowAlign","rowIndex","cells","children","rowBounds","columnBounds","createElement","jsx","useGridCallbackRef","useGridRef","List","listRef","onRowsRendered","RowComponentProp","rowPropsUnstable","rowProps","RowComponent","rows","useListCallbackRef","useListRef","getScrollbarSize","div"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-text-shadow-color:initial;--tw-text-shadow-alpha:100%}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-800:oklch(44.4% .177 26.899);--color-red-950:oklch(25.8% .092 26.042);--color-orange-400:oklch(75% .183 55.934);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-950:oklch(27.9% .077 45.635);--color-green-400:oklch(79.2% .209 151.711);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-600:oklch(60% .118 184.704);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-600:oklch(54.6% .245 262.881);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-400:oklch(70.7% .022 261.325);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--font-weight-bold:700;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-3xl:1.5rem;--drop-shadow-xs:0 1px 1px #0000000d;--drop-shadow-sm:0 1px 2px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-2{top:calc(var(--spacing)*2)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-400{z-index:400}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-auto{margin-inline:auto}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.h-0{height:calc(var(--spacing)*0)}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-12{height:calc(var(--spacing)*12)}.h-20{height:calc(var(--spacing)*20)}.h-50{height:calc(var(--spacing)*50)}.h-55{height:calc(var(--spacing)*55)}.h-100{height:calc(var(--spacing)*100)}.h-full{height:100%}.max-h-50{max-height:calc(var(--spacing)*50)}.w-0{width:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-350{max-width:calc(var(--spacing)*350)}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.shrink-1{flex-shrink:1}.grow{flex-grow:1}.grow-0{flex-grow:0}.grow-1{flex-grow:1}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-stretch{justify-content:stretch}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-10{gap:calc(var(--spacing)*10)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-none\!{--tw-border-style:none!important;border-style:none!important}.border-amber-400{border-color:var(--color-amber-400)}.border-emerald-400{border-color:var(--color-emerald-400)}.border-red-400{border-color:var(--color-red-400)}.border-sky-400{border-color:var(--color-sky-400)}.border-transparent{border-color:#0000}.border-white\/40{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.border-white\/40{border-color:color-mix(in oklab,var(--color-white)40%,transparent)}}.border-r-slate-800{border-right-color:var(--color-slate-800)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-black{background-color:var(--color-black)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-green-400{background-color:var(--color-green-400)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-red-400{background-color:var(--color-red-400)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-950\/50{background-color:#052f4a80}@supports (color:color-mix(in lab,red,red)){.bg-sky-950\/50{background-color:color-mix(in oklab,var(--color-sky-950)50%,transparent)}}.bg-slate-800{background-color:var(--color-slate-800)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.\[mask-image\:linear-gradient\(to_bottom\,transparent\,black_1\.5rem\)\]{-webkit-mask-image:linear-gradient(#0000,#000 1.5rem);mask-image:linear-gradient(#0000,#000 1.5rem)}.fill-blue-600{fill:var(--color-blue-600)}.fill-current{fill:currentColor}.fill-slate-600{fill:var(--color-slate-600)}.fill-white{fill:var(--color-white)}.fill-white\/60{fill:#fff9}@supports (color:color-mix(in lab,red,red)){.fill-white\/60{fill:color-mix(in oklab,var(--color-white)60%,transparent)}}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.pr-2{padding-right:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.indent-\[-1rem\]{text-indent:-1rem}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-8xl{font-size:var(--text-8xl);line-height:var(--tw-leading,var(--text-8xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-\[2\.5\]{--tw-leading:2.5;line-height:2.5}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-800{color:var(--color-amber-800)}.text-black{color:var(--color-black)}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-800{color:var(--color-emerald-800)}.text-gray-400{color:var(--color-gray-400)}.text-red-300{color:var(--color-red-300)}.text-red-800{color:var(--color-red-800)}.text-sky-300{color:var(--color-sky-300)}.text-sky-800{color:var(--color-sky-800)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-xs{--tw-drop-shadow-size:drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000d));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xs));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.drop-shadow-black\/20{--tw-drop-shadow-color:#0003}@supports (color:color-mix(in lab,red,red)){.drop-shadow-black\/20{--tw-drop-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-drop-shadow-alpha),transparent)}}.drop-shadow-black\/20{--tw-drop-shadow:var(--tw-drop-shadow-size)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.text-shadow-black\/20{--tw-text-shadow-color:#0003}@supports (color:color-mix(in lab,red,red)){.text-shadow-black\/20{--tw-text-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-text-shadow-alpha),transparent)}}.text-shadow-sm{text-shadow:0px 1px 0px var(--tw-text-shadow-color,#00000013),0px 1px 1px var(--tw-text-shadow-color,#00000013),0px 2px 2px var(--tw-text-shadow-color,#00000013)}.text-shadow-white\/50{--tw-text-shadow-color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-shadow-white\/50{--tw-text-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-white)50%,transparent)var(--tw-text-shadow-alpha),transparent)}}.text-shadow-xs{text-shadow:0px 1px 1px var(--tw-text-shadow-color,#0003)}.group-data-hover\:fill-white\/50:is(:where(.group)[data-hover] *){fill:#ffffff80}@supports (color:color-mix(in lab,red,red)){.group-data-hover\:fill-white\/50:is(:where(.group)[data-hover] *){fill:color-mix(in oklab,var(--color-white)50%,transparent)}}.group-data-open\:rotate-90:is(:where(.group)[data-open] *){rotate:90deg}.focus-within\:bg-white\/10:focus-within{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus-within\:bg-white\/10:focus-within{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}@media (hover:hover){.hover\:bg-amber-500:hover{background-color:var(--color-amber-500)}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-red-500:hover{background-color:var(--color-red-500)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-sky-950:hover{background-color:var(--color-sky-950)}.hover\:text-amber-950:hover{color:var(--color-amber-950)}.hover\:text-emerald-950:hover{color:var(--color-emerald-950)}.hover\:text-red-950:hover{color:var(--color-red-950)}.hover\:text-sky-300:hover{color:var(--color-sky-300)}.hover\:text-sky-950:hover{color:var(--color-sky-950)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:border-emerald-300:focus{border-color:var(--color-emerald-300)}.focus\:border-teal-300:focus{border-color:var(--color-teal-300)}.focus\:bg-white\/10:focus{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus\:bg-white\/10:focus{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.focus\:text-black:focus{color:var(--color-black)}.data-active\:bg-black[data-active]{background-color:var(--color-black)}.data-active\:text-teal-300[data-active]{color:var(--color-teal-300)}.data-focus\:bg-black[data-focus]{background-color:var(--color-black)}.data-focus\:bg-white\/10[data-focus]{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.data-focus\:bg-white\/10[data-focus]{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.data-focus\:text-teal-300[data-focus]{color:var(--color-teal-300)}.data-selected\:font-bold[data-selected]{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.data-selected\:text-teal-300[data-selected]{color:var(--color-teal-300)}@media (min-width:48rem){.md\:relative{position:relative}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-50{width:calc(var(--spacing)*50)}.md\:w-80{width:calc(var(--spacing)*80)}.md\:bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.md\:bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.\[\&_code\]\:text-sky-300 code{color:var(--color-sky-300)}.\[\&_svg\]\:text-amber-400 svg{color:var(--color-amber-400)}.\[\&_svg\]\:text-emerald-400 svg{color:var(--color-emerald-400)}.\[\&_svg\]\:text-red-400 svg{color:var(--color-red-400)}.\[\&_svg\]\:text-sky-400 svg{color:var(--color-sky-400)}.\[\&_svg\]\:text-white\/60 svg{color:#fff9}@supports (color:color-mix(in lab,red,red)){.\[\&_svg\]\:text-white\/60 svg{color:color-mix(in oklab,var(--color-white)60%,transparent)}}}:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.5}@media only screen and (max-width:600px){:root{font-size:16px}}:root{color-scheme:dark;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes background-gradient-animation{0%{background-position:0%}50%{background-position:100%}to{background-position:0%}}#root{background:linear-gradient(-45deg,var(--color-pink-500),var(--color-sky-500),var(--color-emerald-400));background-size:400% 400%;width:100dvw;height:100dvh;animation:20s infinite background-gradient-animation;overflow:auto}*{scrollbar-width:thin;scrollbar-color:var(--color-slate-600)transparent;outline:none;transition:color .25s,background-color .25s,border-color .25s,outline-color .25s}main a{color:var(--color-teal-400)}main a:hover{color:var(--color-teal-300)}[data-focus]{border:2px solid #0000}[data-focus]:focus{border:2px solid var(--color-teal-300)}[data-focus-within]{border:2px solid #0000}[data-focus-within]:focus-within{border:2px solid var(--color-teal-300)}[data-focus-within][data-focus-within=bold]{border-color:var(--color-teal-600)}[data-focus-within][data-focus-within=bold]:focus-within{border:2px solid var(--color-teal-300)}code{color:var(--color-slate-300)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-text-shadow-color{syntax:"*";inherits:false}@property --tw-text-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@keyframes spin{to{transform:rotate(360deg)}}.tok-comment{color:var(--color-slate-500)}.tok-keyword{color:var(--color-pink-400)}.tok-operator{color:var(--color-slate-400)}.tok-propertyName{color:var(--color-sky-300)}.tok-punctuation{color:var(--color-slate-400)}.tok-string{color:var(--color-teal-300)}.tok-string2{color:var(--color-sky-300)}.tok-typeName{color:var(--color-pink-400)}
|