@candidstartup/react-virtual-scroll 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -4
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,17 +5,29 @@
|
|
|
5
5
|
|
|
6
6
|
# @candidstartup/react-virtual-scroll
|
|
7
7
|
|
|
8
|
-
React virtual scrolling components for lists and grids
|
|
8
|
+
React virtual scrolling components for lists and grids inspired by [react-window](https://github.com/bvaughn/react-window). Written in TypeScript using modern React. Scalable to trillions of rows and columns.
|
|
9
9
|
|
|
10
10
|
## Interface
|
|
11
11
|
|
|
12
|
-
The interface is similar to `react-window` with
|
|
12
|
+
The interface is similar to `react-window` with three main changes. First, the components are functional rather than class based.
|
|
13
13
|
|
|
14
|
-
The interface is [designed](https://www.thecandidstartup.org/2024/02/12/modern-react-virtual-scroll-grid-3.html) to ensure that the components have no scaling issues even with trillions of rows or columns. The package includes basic fixed and variable size item mappings.
|
|
14
|
+
Second, rather than having fixed and variable size variants of each component, the components are passed an `ItemOffsetMapping` object as a prop. This is an interface that the components query to determine the size and position of each item. The interface is [designed](https://www.thecandidstartup.org/2024/02/12/modern-react-virtual-scroll-grid-3.html) to ensure that the components have no scaling issues even with trillions of rows or columns. The package includes basic fixed and variable size item mappings.
|
|
15
|
+
|
|
16
|
+
Finally, customization options have been reworked and extended. Basic customization is provided by render props rather than component props. The virtual scrolling list and grid components are composed from simpler components rather than being self contained. Consumers can put together their own combination of basic components rather than being limited to the pre-composed high level components.
|
|
15
17
|
|
|
16
18
|
## Implementation
|
|
17
19
|
|
|
18
|
-
Most of the logic is implemented by custom hooks that are
|
|
20
|
+
Most of the scrolling logic is implemented by custom hooks that are packaged up as the `VirtualScroll` basic component. The logic that manages scrolling in a single dimension is implemented in `useVirtualScroll`. It's based on an [improved version](https://www.thecandidstartup.org/2024/04/29/modern-react-virtual-scroll-grid-9.html) of [SlickGrid's](https://github.com/6pac/SlickGrid) paged scrolling algorithm. `VirtualScroll` uses two instances of the hook to handle scrolling in two dimensions.
|
|
21
|
+
|
|
22
|
+
`VirtualScroll` provides scrolling over an arbitrary size scrollable area. Rendering visible content in response to changes in scroll position is left to child components.
|
|
23
|
+
|
|
24
|
+
`DisplayList` and `DisplayGrid` are controlled components that render a window onto virtualized lists and grids.
|
|
25
|
+
|
|
26
|
+
`AutoSizer` is a higher level component that dynamically measures the size available and passes an explicit width and height to its children.
|
|
27
|
+
|
|
28
|
+
`VirtualList` = `VirtualScroll` + `AutoSizer` + `DisplayList`.
|
|
29
|
+
|
|
30
|
+
`VirtualGrid` = `VirtualScroll` + `AutoSizer` + `DisplayGrid`.
|
|
19
31
|
|
|
20
32
|
## VirtualList Example
|
|
21
33
|
|
package/dist/index.d.ts
CHANGED
|
@@ -261,6 +261,10 @@ interface VirtualContentProps {
|
|
|
261
261
|
* Only defined if {@link VirtualScrollableProps.useIsScrolling} is true.
|
|
262
262
|
* */
|
|
263
263
|
isScrolling?: boolean;
|
|
264
|
+
/** Current scroll position vertical offset */
|
|
265
|
+
verticalOffset: number;
|
|
266
|
+
/** Current scroll position horizontal offset */
|
|
267
|
+
horizontalOffset: number;
|
|
264
268
|
}
|
|
265
269
|
/**
|
|
266
270
|
* Render prop for content container in {@link VirtualScroll}
|
package/dist/index.js
CHANGED
|
@@ -333,7 +333,9 @@ const VirtualScroll = React.forwardRef(function VirtualScroll(props, ref) {
|
|
|
333
333
|
onScrollCallback?.(newRowScrollState.scrollOffset + newRowScrollState.renderOffset, newColumnScrollState.scrollOffset + newColumnScrollState.renderOffset, newRowScrollState, newColumnScrollState);
|
|
334
334
|
}
|
|
335
335
|
const isScrolling = useIsScrolling$1 ? isActuallyScrolling : undefined;
|
|
336
|
-
|
|
336
|
+
const verticalOffset = currentVerticalOffset;
|
|
337
|
+
const horizontalOffset = currentHorizontalOffset;
|
|
338
|
+
return (jsxs(VirtualContainer, { className: className, render: outerRender, onScroll: onScroll, ref: outerRef, style: { position: "relative", height, width, overflow: "auto", willChange: "transform" }, children: [jsx(VirtualContainer, { className: innerClassName, render: innerRender, style: { zIndex: 1, position: 'sticky', top: 0, left: 0, width: '100%', height: '100%' }, children: children({ isScrolling, verticalOffset, horizontalOffset }) }), jsx("div", { style: { position: 'absolute', top: 0, left: 0,
|
|
337
339
|
height: scrollHeight ? renderRowSize : '100%',
|
|
338
340
|
width: scrollWidth ? renderColumnSize : '100%' } })] }));
|
|
339
341
|
});
|
|
@@ -497,7 +499,6 @@ const VirtualGrid = React.forwardRef(function VirtualGrid(props, ref) {
|
|
|
497
499
|
// Total size is same as offset to item one off the end
|
|
498
500
|
const totalRowSize = rowOffsetMapping.itemOffset(rowCount);
|
|
499
501
|
const totalColumnSize = columnOffsetMapping.itemOffset(columnCount);
|
|
500
|
-
const [state, setState] = React.useState([0, 0]);
|
|
501
502
|
const scrollRef = React.useRef(null);
|
|
502
503
|
React.useImperativeHandle(ref, () => {
|
|
503
504
|
return {
|
|
@@ -522,10 +523,9 @@ const VirtualGrid = React.forwardRef(function VirtualGrid(props, ref) {
|
|
|
522
523
|
// naming convention as components do.
|
|
523
524
|
const ChildVar = children;
|
|
524
525
|
return (jsx(VirtualScroll, { ref: scrollRef, ...scrollProps, scrollHeight: totalRowSize, scrollWidth: totalColumnSize, onScroll: (verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {
|
|
525
|
-
setState([verticalOffset, horizontalOffset]);
|
|
526
526
|
if (onScrollCallback)
|
|
527
527
|
onScrollCallback(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState);
|
|
528
|
-
}, children: ({ isScrolling }) => (jsx(AutoSizer, { style: { height: '100%', width: '100%' }, children: ({ height, width }) => (jsx(DisplayGrid, { innerClassName: innerClassName, innerRender: innerRender, rowOffset:
|
|
528
|
+
}, children: ({ isScrolling, verticalOffset, horizontalOffset }) => (jsx(AutoSizer, { style: { height: '100%', width: '100%' }, children: ({ height, width }) => (jsx(DisplayGrid, { innerClassName: innerClassName, innerRender: innerRender, rowOffset: verticalOffset, columnOffset: horizontalOffset, height: height, rowCount: rowCount, columnCount: columnCount, itemData: itemData, itemKey: itemKey, isScrolling: isScrolling, rowOffsetMapping: rowOffsetMapping, columnOffsetMapping: columnOffsetMapping, width: width, children: ChildVar })) })) }));
|
|
529
529
|
});
|
|
530
530
|
|
|
531
531
|
/**
|
|
@@ -560,7 +560,6 @@ const VirtualList = React.forwardRef(function VirtualList(props, ref) {
|
|
|
560
560
|
const { itemCount, itemOffsetMapping, children, layout = 'vertical', onScroll: onScrollCallback, innerClassName, innerRender, itemData, itemKey, ...scrollProps } = props;
|
|
561
561
|
// Total size is same as offset to item one off the end
|
|
562
562
|
const renderSize = itemOffsetMapping.itemOffset(itemCount);
|
|
563
|
-
const [offset, setOffset] = React.useState(0);
|
|
564
563
|
const scrollRef = React.useRef(null);
|
|
565
564
|
const isVertical = layout === 'vertical';
|
|
566
565
|
React.useImperativeHandle(ref, () => {
|
|
@@ -585,10 +584,9 @@ const VirtualList = React.forwardRef(function VirtualList(props, ref) {
|
|
|
585
584
|
const ChildVar = children;
|
|
586
585
|
return (jsx(VirtualScroll, { ref: scrollRef, ...scrollProps, scrollHeight: isVertical ? renderSize : undefined, scrollWidth: isVertical ? undefined : renderSize, onScroll: (verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {
|
|
587
586
|
const newOffset = isVertical ? verticalOffset : horizontalOffset;
|
|
588
|
-
setOffset(newOffset);
|
|
589
587
|
if (onScrollCallback)
|
|
590
588
|
onScrollCallback(newOffset, isVertical ? verticalScrollState : horizontalScrollState);
|
|
591
|
-
}, children: ({ isScrolling }) => (jsx(AutoSizer, { style: { height: '100%', width: '100%' }, children: ({ height, width }) => (jsx(DisplayList, { innerClassName: innerClassName, innerRender: innerRender, layout: layout, offset:
|
|
589
|
+
}, children: ({ isScrolling, verticalOffset, horizontalOffset }) => (jsx(AutoSizer, { style: { height: '100%', width: '100%' }, children: ({ height, width }) => (jsx(DisplayList, { innerClassName: innerClassName, innerRender: innerRender, layout: layout, offset: isVertical ? verticalOffset : horizontalOffset, height: height, itemCount: itemCount, itemData: itemData, itemKey: itemKey, isScrolling: isScrolling, itemOffsetMapping: itemOffsetMapping, width: width, children: ChildVar })) })) }));
|
|
592
590
|
});
|
|
593
591
|
|
|
594
592
|
class FixedSizeItemOffsetMapping {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/VirtualContainer.tsx","../src/AutoSizer.tsx","../src/useVirtualScroll.ts","../src/useEventListener.ts","../src/useAnimationTimeout.ts","../src/useIsScrolling.ts","../src/VirtualScrollProxy.ts","../src/VirtualScroll.tsx","../src/VirtualCommon.ts","../src/DisplayList.tsx","../src/DisplayGrid.tsx","../src/VirtualGridProxy.ts","../src/VirtualGrid.tsx","../src/VirtualListProxy.ts","../src/VirtualList.tsx","../src/useFixedSizeItemOffsetMapping.ts","../src/useVariableSizeItemOffsetMapping.ts"],"sourcesContent":["import React from \"react\";\n\n/**\n * Props that an implementation of {@link VirtualContainerRender} must accept.\n * \n * Includes all the props that a {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement | HTMLDivElement} would accept.\n */\nexport type VirtualContainerRenderProps = React.ComponentPropsWithoutRef<'div'>;\n\n/**\n * Render prop for a {@link VirtualContainer}\n *\n * Can be passed to {@link VirtualContainer} to replace default implementation. \n * Function must render a div and forward {@link VirtualContainerRenderProps}\n * and any `ref` to it. \n * \n * @example Minimal compliant implementation\n * ```\n * const containerRender: VirtualContainerRender = ({...rest}, ref) => (\n * <div ref={ref} {...rest} />\n * )\n * ```\n */\nexport type VirtualContainerRender = (props: VirtualContainerRenderProps, ref?: React.ForwardedRef<HTMLDivElement>) => JSX.Element;\n\n/**\n * Props that {@link VirtualContainer} accepts.\n */\nexport interface VirtualContainerComponentProps extends VirtualContainerRenderProps {\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualContainer}. */\n render?: VirtualContainerRender;\n}\n\nconst defaultContainerRender: VirtualContainerRender = ({...rest}, ref) => (\n <div ref={ref} {...rest} />\n)\n\n/**\n * Wrapper around a div used by other components in {@link @candidstartup/react-virtual-scroll!}. Most props are passed through to the div. Use the\n * {@link VirtualContainerComponentProps.render} prop to override the default behavior. \n * \n * @group Components\n */\nexport const VirtualContainer = React.forwardRef<HTMLDivElement, VirtualContainerComponentProps >(\n function VirtualContainer({render = defaultContainerRender, ...rest}, ref) {\n return render(rest, ref)\n})\n","import React from \"react\";\n\n/**\n * Props that an implementation of {@link AutoSizerRender} must accept.\n */\nexport interface AutoSizerRenderProps {\n /** Computed height */\n height: number,\n\n /** Computed width */\n width: number,\n}\n\n/**\n * Render prop for content in an {@link AutoSizer}\n *\n * Function renders content and forwards `width` and `height`\n * to whatever needs it.\n * \n * @example Simple implementation\n * ```\n * const autoSizeRender: AutoSizeRender = ({width, height}) => (\n * <VirtualList width={width} height={height} {...props} />\n * )\n * ```\n */\nexport type AutoSizerRender = (props: AutoSizerRenderProps) => JSX.Element;\n\n/**\n * Props accepted by {@link AutoSizer}\n */\nexport interface AutoSizerProps {\n /** Function implementing {@link AutoSizerRender} that renders the content that needs explicit sizing */\n children: AutoSizerRender\n\n /** The `className` applied to the container element */\n className?: string,\n\n /** Inline style to apply to the container element */\n style?: React.CSSProperties;\n}\n\n/**\n * HOC that calculates the size available to it and makes the computed size available to children.\n * The size available depends on DOM layout and style applied wherever the AutoSizer finds itself.\n * You will probably want to pass something appropriate via the `className` or `style` props.\n * \n * Accepts props defined by {@link AutoSizerProps}. \n * You must pass a single instance of {@link AutoSizerRender} as a child.\n * @group Components\n */\nexport function AutoSizer(props: AutoSizerProps) {\n const { children, className, style } = props;\n\n // Using separate primitive states rather than one composite so that React\n // can detect duplicates values and bail out of redundant renders.\n const [width, setWidth] = React.useState<number>(0);\n const [height, setHeight] = React.useState<number>(0);\n const ref = React.useRef<HTMLDivElement>(null);\n\n // Make sure resize callback is a stable value so we're not constantly\n // creating and disconnecting resize observers.\n const resizeCallback: ResizeObserverCallback = React.useCallback((entries) => {\n entries.forEach(entry => {\n // Context box sizes can contain fractional values while clientWidth\n // and clientHeight properties are always rounded to nearest integer.\n // Always use integer values to avoid confusion.\n const newWidth = Math.round(entry.contentBoxSize[0].inlineSize);\n setWidth(newWidth);\n const newHeight = Math.round(entry.borderBoxSize[0].blockSize);\n setHeight(newHeight);\n })\n }, []);\n\n // Expect effect to run only on initial mount\n React.useLayoutEffect(() => {\n const div = ref.current;\n /* istanbul ignore if*/\n if (!div)\n return;\n\n // Size on initial mount\n setHeight(div.clientHeight);\n setWidth(div.clientWidth);\n\n // Updates size on any subsequent resize. Only available in browser\n // environment so avoid crashing out when server side rendering, or\n // running unit test without ResizeObserver being mocked. \n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver(resizeCallback);\n resizeObserver.observe(div);\n return () => { resizeObserver.disconnect() }\n }\n }, [resizeCallback])\n\n // No point rendering children until we've measured size and found a usable area\n const renderChildren = height > 0 && width > 0;\n\n // Ensure that size is driven only by parent. Wrapping child in a zero sized inner div\n // which it can overflow stops child's size having any impact on size of outer div. \n // Otherwise can end up in infinite loop if child makes itself bigger than the \n // actual width and height we pass to it. That could be because child has \n // padding/borders/margins or because child renders itself bigger than size it's given.\n return (\n <div ref={ref} className={className} style={style}>\n <div style={{ overflow: 'visible', width: 0, height: 0 }}>\n {renderChildren && children({height, width})}\n </div>\n </div>\n );\n}\n\nexport default AutoSizer;\n","import { useState } from \"react\";\n\n/** Direction of scrolling */\nexport type ScrollDirection = \"forward\" | \"backward\";\n\n/**\n * Overall scroll state for a single dimension.\n */\nexport interface ScrollState { \n /** Scroll bar offset. Equal to outer container's `scrollTop` or `scrollLeft` depending on dimension. */\n scrollOffset: number, \n\n /** Offset used to position current page of items in virtual space. Overall offset is `scrollOffset+renderOffset`. */\n renderOffset: number,\n\n /** Index of current page. */\n page: number, \n\n /** Current scrolling direction. Calculated by comparing current overall offset to that when last rendered. */\n scrollDirection: ScrollDirection, \n}\n\nexport interface VirtualScrollState extends ScrollState {\n renderSize: number;\n\n // Returns updated scrollOffset. Caller should update scroll bar position if different from value passed in. \n onScroll(clientExtent: number, scrollExtent: number, scrollOffset: number): [number, ScrollState];\n\n // Scroll to offset in logical space returning offset to update scroll bar position to\n doScrollTo(offset: number, clientExtent: number): number;\n}\n\n// Max size that is safe across all browsers (Firefox is the limiting factor)\n// SlickGrid tries to dynamically determine limit on other browsers (Chrome will do 30M) but\n// I prefer simplicity of same behavior across all browsers.\nconst MAX_SUPPORTED_CSS_SIZE = 6000000;\nconst MIN_NUMBER_PAGES = 100;\n\nexport function useVirtualScroll(totalSize: number, maxCssSize = MAX_SUPPORTED_CSS_SIZE, minNumberPages = MIN_NUMBER_PAGES): VirtualScrollState {\n let renderSize=0, pageSize=0, numPages=0;\n if (totalSize < maxCssSize) {\n // No paging needed\n renderSize = pageSize = totalSize;\n numPages = 1;\n } else {\n // Break into pages\n renderSize = maxCssSize;\n pageSize = renderSize / minNumberPages;\n numPages = Math.floor(totalSize / pageSize);\n }\n\n function pageToRenderOffset(page: number): number {\n if (page <= 0)\n return 0;\n\n if (page >= numPages-1)\n return totalSize - renderSize;\n\n return Math.round((page-1) * (totalSize - renderSize) / (numPages - 3));\n }\n\n const initValue: ScrollState = { \n scrollOffset: 0, \n renderOffset: 0,\n page: 0,\n scrollDirection: \"forward\",\n };\n const [scrollState, setScrollState] = useState(initValue);\n\n function onScroll(clientExtent: number, scrollExtent: number, scrollOffset: number): [number, ScrollState] {\n if (scrollState.scrollOffset == scrollOffset) {\n // No need to change state if scroll position unchanged\n return [scrollOffset, scrollState];\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n let newOffset = Math.max(0, Math.min(scrollOffset, scrollExtent - clientExtent));\n const newScrollDirection = scrollState.scrollOffset <= newOffset ? 'forward' : 'backward';\n\n // Switch pages if needed\n let newPage, newRenderOffset;\n let retScrollOffset = scrollOffset;\n const scrollDist = Math.abs(newOffset - scrollState.scrollOffset);\n if (scrollDist < clientExtent) {\n // Scrolling part of visible window, don't want to skip items, so can't scale up movement\n // If we cross page boundary we need to reset scroll bar position back to where it should be at start of page\n newPage = Math.min(numPages - 1, Math.floor((scrollOffset + scrollState.renderOffset) / pageSize));\n newRenderOffset = pageToRenderOffset(newPage);\n if (newPage != scrollState.page) {\n // Be very intentional about when we ask caller to reset scroll bar\n // Don't want to trigger event loops\n newOffset = scrollOffset + scrollState.renderOffset - newRenderOffset;\n retScrollOffset = newOffset;\n }\n } else {\n // Large scale scrolling, choosing page from a rolodex\n // First and last page are mapped 1:1 between grid and container\n if (newOffset < pageSize) {\n newPage = 0;\n } else if (newOffset >= renderSize - pageSize) {\n newPage = numPages - 1;\n } else {\n const scaleFactor = (totalSize - pageSize*2) / (renderSize - pageSize*2);\n newPage = Math.min(numPages - 3, Math.floor((newOffset - pageSize) * scaleFactor / pageSize)) + 1;\n }\n newRenderOffset = pageToRenderOffset(newPage);\n }\n\n const newScrollState: ScrollState = \n { scrollOffset: newOffset, renderOffset: newRenderOffset, page: newPage, scrollDirection: newScrollDirection };\n setScrollState(newScrollState);\n return [retScrollOffset, newScrollState];\n }\n\n function doScrollTo(offset: number, clientExtent: number) {\n const safeOffset = Math.min(totalSize - clientExtent, Math.max(offset, 0));\n const scrollDirection = (scrollState.scrollOffset + scrollState.renderOffset) <= safeOffset ? 'forward' : 'backward';\n const page = Math.min(numPages - 1, Math.floor(safeOffset / pageSize));\n const renderOffset = pageToRenderOffset(page);\n const scrollOffset = safeOffset - renderOffset;\n\n setScrollState({ scrollOffset, renderOffset, page, scrollDirection });\n return scrollOffset;\n }\n\n return {...scrollState, renderSize, onScroll, doScrollTo} as const;\n}\n\nexport default useVirtualScroll;\n","// Based on https://github.com/realwugang/use-event-listener\n// and https://github.com/donavon/use-event-listener/blob/develop/src/index.js\n\nimport { useRef, useEffect, RefObject, createRef } from 'react';\n\ninterface Options {\n capture?: boolean\n once?: boolean\n passive?: boolean\n}\n\ntype Listener = Window | Document | HTMLElement;\n\nfunction isListener(element: Listener | RefObject<HTMLElement>): element is Listener {\n return (element as Listener).addEventListener !== undefined;\n}\n\ntype EventHandler = (event: Event) => void;\n\nexport function useEventListener (eventName: string, \n handler: EventHandler, \n element: Listener | RefObject<HTMLElement> | null = window, \n options: Options = {}) {\n const savedHandler = useRef<EventHandler>();\n const { capture, passive, once } = options;\n\n useEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n if (!element)\n return;\n\n const el = isListener(element) ? element : element.current;\n if (!el)\n return;\n\n const eventListener = (event: Event) => savedHandler.current?.(event);\n const opts = { capture, passive, once };\n el.addEventListener(eventName, eventListener, opts);\n return () => {\n el.removeEventListener(eventName, eventListener, opts);\n };\n }, [eventName, element, capture, passive, once]);\n}\n\nexport default useEventListener;\n\n// In-source testing for private helper functions\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest\n it('isListener', () => {\n expect(isListener(window)).toBe(true)\n expect(isListener(document)).toBe(true)\n expect(isListener(document.createElement(\"div\"))).toBe(true)\n expect(isListener(createRef())).toBe(false)\n })\n}","// Based on https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n// and https://www.joshwcomeau.com/snippets/react-hooks/use-timeout/\n// and https://github.com/bvaughn/react-window/blob/master/src/timer.js\n//\n// Equivalent functionality to a useTimeout hook but based on requestAnimationFrame instead of setTimeout. Use\n// when making frequent requests for short duration timeouts where browser may throttle setTimeout.\nimport { useEffect, useRef } from 'react';\n\ntype Callback = () => void;\n\nexport function useAnimationTimeout(callback: Callback, delay: number | null, key?: unknown) {\n const requestRef = useRef<number>();\n const savedCallback = useRef<Callback>(callback);\n\n // Remember the latest callback\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n \n const start = performance.now();\n \n useEffect(() => {\n function tick() {\n requestRef.current = undefined;\n if (delay === null)\n return;\n\n if (performance.now() - start >= delay) {\n savedCallback.current();\n } else {\n requestRef.current = requestAnimationFrame(tick);\n }\n }\n\n tick();\n\n return () => {\n if (typeof requestRef.current === 'number') {\n cancelAnimationFrame(requestRef.current);\n requestRef.current = undefined;\n }\n }\n }, [start, delay, key]);\n}\n\nexport default useAnimationTimeout;","import { useState, RefObject } from \"react\";\nimport { useEventListener } from './useEventListener';\nimport { useAnimationTimeout } from './useAnimationTimeout';\n\nconst DEBOUNCE_INTERVAL = 150;\nconst FALLBACK_INTERVAL = 500;\n\nexport function useIsScrolling(element: Window | HTMLElement | RefObject<HTMLElement> | null = window): boolean {\n const [scrollCount, setScrollCount] = useState(0);\n\n // scrollend implementations in both Chrome and Firefox are buggy with missing scrollend events\n // in some circumstances (using keyboard to scroll past end in Chrome, intermittently when using mouse wheel in Firefox)\n // Use a timeout even when scrollend is supported to handle missing events. In this case we use a longer interval as\n // don't want it to be over sensitive. \n const supportsScrollEnd = ('onscrollend' in window);\n const delay = supportsScrollEnd ? FALLBACK_INTERVAL : DEBOUNCE_INTERVAL;\n\n useEventListener(\"scroll\", () => setScrollCount(c => c + 1), element);\n useEventListener(\"scrollend\", () => setScrollCount(0), supportsScrollEnd ? element : null);\n useAnimationTimeout(() => setScrollCount(0), (scrollCount == 0) ? null : delay, scrollCount);\n\n return scrollCount > 0;\n}\n\nexport default useIsScrolling;","import { ScrollToOption } from './VirtualBase';\n\n/**\n * Custom ref handle returned by {@link VirtualScroll} that exposes imperative methods\n * \n * Use `React.useRef<VirtualScrollProxy>(null)` to create a ref.\n */\nexport interface VirtualScrollProxy {\n /**\n * Scrolls to the specified vertical and horizontal offset in pixels\n * Either offset can be left undefined to scroll in one dimension only\n * @param verticalOffset - Offset to scroll to vertically\n * @param horizontalOffset - Offset to scroll to horizontally\n */\n scrollTo(verticalOffset?: number, horizontalOffset?: number): void;\n\n /**\n * Scrolls to the specified area\n * Either offset/size pair can be left undefined to scroll in one dimension only\n * @param verticalOffset - Offset to scroll to vertically\n * @param verticalSize - Size of target area vertically\n * @param horizontalOffset - Offset to scroll to horizontally\n * @param horizontalSize - Size of target area horizontally\n * @param option - Where to {@link ScrollToOption | position} the area within the viewport\n */\n scrollToArea(verticalOffset?: number, verticalSize?: number, horizontalOffset?: number, horizontalSize?: number, option?: ScrollToOption): void;\n\n /** Exposes DOM clientWidth property */\n get clientWidth(): number;\n\n /** Exposes DOM clientHeight property */\n get clientHeight(): number;\n}\n\n/**\n * Returns the offset needed to scroll in one dimension for a specified range\n * \n * Used internally to implement {@link VirtualScrollProxy.scrollToArea}. Can be used directly for \n * advanced customization scenarios.\n */\nexport function getOffsetToScrollRange(offset: number | undefined, size: number | undefined, \n clientExtent: number, scrollOffset: number, option?: ScrollToOption): number | undefined\n{\n if (offset === undefined)\n return undefined;\n\n if (option != 'visible')\n return offset;\n\n // Start of item offscreen before start of viewport?\n if (offset < scrollOffset)\n return offset;\n\n size = size || 0;\n\n // Already completely visible?\n const endOffset = offset + size;\n const endViewport = scrollOffset + clientExtent;\n if (endOffset <= endViewport)\n return undefined;\n\n // Item offscreen past end of viewport\n\n // Item bigger than viewport? Make sure start is in view\n if (size > clientExtent)\n return offset;\n\n // Scroll so end of item aligns with end of viewport\n return offset - clientExtent + size;\n }\n","import React from \"react\";\nimport { VirtualContainer, VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScrollableProps, ScrollEvent, ScrollToOption } from './VirtualBase';\nimport { useVirtualScroll, ScrollState } from './useVirtualScroll';\nimport { useIsScrolling as useIsScrollingHook} from './useIsScrolling';\nimport { getOffsetToScrollRange, VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Props that an implementation of {@link VirtualContentRender} must accept.\n */\nexport interface VirtualContentProps {\n /** \n * Is the owning component being actively scrolled? Used to change how the content is rendered depending on scroll state.\n * \n * Only defined if {@link VirtualScrollableProps.useIsScrolling} is true. \n * */\n isScrolling?: boolean\n}\n\n/**\n * Render prop for content container in {@link VirtualScroll}\n *\n * Pass to {@link VirtualScroll} to render content into the viewport\n * implementation. Function must render a div and forward {@link VirtualContentProps}\n * and any `ref` to it. \n * \n * @example Minimal compliant implementation\n * ```\n * const contentRender: VirtualContentRender = ({isScrolling, ...rest}, ref) => (\n * <div ref={ref} {...rest} />\n * )\n * ```\n */\nexport type VirtualContentRender = (props: VirtualContentProps, ref?: React.ForwardedRef<HTMLDivElement>) => JSX.Element;\n\n/**\n * Props accepted by {@link VirtualScroll}\n */\nexport interface VirtualScrollProps extends VirtualScrollableProps {\n /** Function implementing {@link VirtualContentRender} that renders the content that needs to respond to scrolling */\n children: VirtualContentRender\n\n /** \n * Height of area to scroll over \n * \n * @defaultValue 0\n */\n scrollHeight?: number,\n\n /** \n * Width of area to scroll over \n * \n * @defaultValue 0\n */\n scrollWidth?: number,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param verticalOffset - Resulting overall vertical offset. \n * @param horizontalOffset - Resulting overall horizontal offset.\n * @param newVerticalScrollState - New vertical {@link ScrollState} that will be used for rendering.\n * @param newHorizontalScrollState - New horizontal {@link ScrollState} that will be used for rendering.\n */\n onScroll?: (verticalOffset: number, horizontalOffset: number, newVerticalScrollState: ScrollState, newHorizontalScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualScroll} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualScroll} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Customizable Virtual Scrolling Component\n * \n * Allows user to scroll over a virtual area `scrollHeight` x `scrollWidth` pixels. \n * Use `onScroll` to track scroll state and `innerRender` to render scroll state specific content into the viewport\n * \n * Accepts props defined by {@link VirtualScrollProps}. \n * Refs are forwarded to {@link VirtualScrollProxy}. \n * @group Components\n */\nexport const VirtualScroll = React.forwardRef<VirtualScrollProxy, VirtualScrollProps>(function VirtualScroll(props, ref) {\n const { width, height, scrollWidth = 0, scrollHeight = 0, className, innerClassName, children,\n onScroll: onScrollCallback, useIsScrolling = false, innerRender, outerRender } = props;\n\n const outerRef = React.useRef<HTMLDivElement>(null);\n const { scrollOffset: scrollRowOffset, renderOffset: renderRowOffset, renderSize: renderRowSize,\n onScroll: onScrollRow, doScrollTo: doScrollToRow } = useVirtualScroll(scrollHeight, props.maxCssSize, props.minNumPages);\n const currentVerticalOffset = scrollRowOffset + renderRowOffset;\n const { scrollOffset: scrollColOffset, renderOffset: renderColOffset, renderSize: renderColumnSize,\n onScroll: onScrollColumn, doScrollTo: doScrollToColumn} = useVirtualScroll(scrollWidth, props.maxCssSize, props.minNumPages);\n const currentHorizontalOffset = scrollColOffset + renderColOffset;\n const isActuallyScrolling = useIsScrollingHook(outerRef);\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(rowOffset?: number, columnOffset?: number): void {\n if (rowOffset === undefined && columnOffset === undefined)\n return;\n\n const outer = outerRef.current;\n /* istanbul ignore else */\n if (outer) {\n const options: ScrollToOptions = {};\n if (rowOffset != undefined)\n options.top = doScrollToRow(rowOffset, outer.clientHeight);\n if (columnOffset != undefined)\n options.left = doScrollToColumn(columnOffset, outer.clientWidth);\n outer.scrollTo(options);\n }\n },\n\n scrollToArea(verticalOffset?: number, verticalSize?: number, horizontalOffset?: number, horizontalSize?: number, option?: ScrollToOption) {\n const outer = outerRef.current;\n /* istanbul ignore if*/\n if (!outer)\n return;\n\n const rowOffset = getOffsetToScrollRange(verticalOffset, verticalSize, outer.clientHeight, currentVerticalOffset, option);\n const colOffset = getOffsetToScrollRange(horizontalOffset, horizontalSize, outer.clientWidth, currentHorizontalOffset, option);\n this.scrollTo(rowOffset, colOffset);\n },\n\n get clientWidth(): number {\n return outerRef.current ? outerRef.current.clientWidth : /* istanbul ignore next */ 0;\n },\n\n get clientHeight(): number {\n return outerRef.current ? outerRef.current.clientHeight : /* istanbul ignore next */ 0;\n }\n }\n }, [ doScrollToRow, doScrollToColumn, currentVerticalOffset, currentHorizontalOffset ]);\n\n function onScroll(event: ScrollEvent) {\n const { clientWidth, clientHeight, scrollWidth, scrollHeight, scrollLeft, scrollTop } = event.currentTarget;\n const [newScrollTop, newRowScrollState] = onScrollRow(clientHeight, scrollHeight, scrollTop);\n const [newScrollLeft, newColumnScrollState] = onScrollColumn(clientWidth, scrollWidth, scrollLeft);\n if (outerRef.current && (newScrollTop != scrollTop || newScrollLeft != scrollLeft ))\n outerRef.current.scrollTo(newScrollLeft, newScrollTop);\n onScrollCallback?.(newRowScrollState.scrollOffset+newRowScrollState.renderOffset, \n newColumnScrollState.scrollOffset+newColumnScrollState.renderOffset, newRowScrollState, newColumnScrollState);\n }\n\n const isScrolling = useIsScrolling ? isActuallyScrolling : undefined;\n\n return (\n <VirtualContainer className={className} render={outerRender} onScroll={onScroll} ref={outerRef} \n style={{ position: \"relative\", height, width, overflow: \"auto\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender} \n style={{ zIndex: 1, position: 'sticky', top: 0, left: 0, width: '100%', height: '100%' }}>\n {children({isScrolling})}\n </VirtualContainer>\n <div style={{ position: 'absolute', top: 0, left: 0, \n height: scrollHeight ? renderRowSize : '100%', \n width: scrollWidth ? renderColumnSize : '100%'}}/>\n </VirtualContainer>\n );\n});\n\nexport default VirtualScroll;\n","import type { ItemOffsetMapping } from \"./VirtualBase\";\n\ntype RangeToRender = [\n startIndex: number,\n startOffset: number,\n totalSize: number,\n sizes: number[]\n];\n\nexport function getRangeToRender(itemCount: number, itemOffsetMapping: ItemOffsetMapping, clientExtent: number, scrollOffset: number): RangeToRender {\n if (itemCount == 0) {\n return [0, 0, 0, []];\n }\n\n // Negative offset equivalent to reducing the size of the window (possibly down to nothing)\n if (scrollOffset < 0) {\n clientExtent += scrollOffset;\n scrollOffset = 0;\n }\n\n if (clientExtent <= 0) {\n return [0, 0, 0, []];\n }\n\n const [baseIndex, startOffset] = itemOffsetMapping.offsetToItem(scrollOffset);\n if (baseIndex >= itemCount) {\n return [0, 0, 0, []];\n }\n\n let itemIndex = Math.max(0, Math.min(itemCount - 1, baseIndex));\n const endOffset = scrollOffset + clientExtent;\n\n const startIndex = itemIndex;\n let offset = startOffset;\n const sizes: number[] = [];\n let totalSize = 0;\n\n while (offset < endOffset && itemIndex < itemCount) {\n const size = itemOffsetMapping.itemSize(itemIndex);\n sizes.push(size);\n totalSize += size;\n offset += size;\n itemIndex ++;\n }\n\n return [startIndex, startOffset, totalSize, sizes];\n}\n\nfunction formatRepeat(repeat: number, size: number): string {\n return (repeat == 1) ? `${size}px` : `repeat(${repeat},${size}px)`;\n}\n\nfunction join(a: string|undefined, s: string) {\n return a ? a + ' ' + s : s;\n}\n\nexport function getGridTemplate(sizes: number[]): string | undefined {\n const count = sizes.length;\n if (count == 0)\n return undefined;\n\n let ret = undefined;\n let lastSize = sizes[0];\n let repeat = 1;\n\n for (let i = 1; i < count; i ++) {\n const size = sizes[i];\n if (size == lastSize) {\n repeat ++;\n } else {\n const s = formatRepeat(repeat, lastSize);\n ret = join(ret,s);\n lastSize = size;\n repeat = 1;\n }\n }\n\n const s = formatRepeat(repeat, lastSize);\n return join(ret,s);\n}\n\n\n","import React from \"react\";\nimport { ItemOffsetMapping, ScrollLayout, DisplayBaseItemProps, DisplayBaseProps } from './VirtualBase';\nimport { getRangeToRender, getGridTemplate } from './VirtualCommon';\nimport { VirtualContainer } from './VirtualContainer';\n\n/**\n * Props accepted by {@link DisplayListItem}\n */\nexport interface DisplayListItemProps extends DisplayBaseItemProps {\n /** Index of item in the list being rendered */\n index: number,\n}\n\n/**\n * Type of item in a {@link DisplayList}\n *\n * Must be passed as a child to {@link DisplayList}. \n * Accepts props defined by {@link DisplayListItemProps}.\n * Component must pass {@link DisplayBaseItemProps.style} to whatever it renders. \n * \n * @example Basic implementation\n * ```\n * const Row = ({ index, style }: { index: number, style: React.CSSProperties }) => (\n * <div className=\"row\" style={style}>\n * { index }\n * </div>\n * );\n * ```\n */\nexport type DisplayListItem = React.ComponentType<DisplayListItemProps>;\n\n/**\n * Props accepted by {@link DisplayList}\n */\nexport interface DisplayListProps extends DisplayBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayListItem} interface. */\n children: DisplayListItem,\n\n /** Number of items in the list */\n itemCount: number,\n\n /** Offset to start of displayed content */\n offset: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each item in the list\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n itemOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given item index and value of {@link DisplayBaseProps.itemData}.\n * @defaultValue `(index, _data) => index`\n */\n itemKey?: (index: number, data: unknown) => React.Key,\n\n /**\n * Choice of 'vertical' or 'horizontal' layouts\n * @defaultValue 'vertical'\n */\n layout?: ScrollLayout,\n}\n\nconst defaultItemKey = (index: number, _data: unknown) => index;\n\nconst boxStyle: React.CSSProperties = { boxSizing: 'border-box' };\n\n/**\n * Displays a window onto the contents of a virtualized list starting from `offset`.\n * \n * Accepts props defined by {@link DisplayListProps}. \n * You must pass a single instance of {@link DisplayListItem} as a child.\n * @group Components\n */\nexport function DisplayList(props: DisplayListProps) {\n const { width, height, itemCount, itemOffsetMapping, className, innerClassName, offset: renderOffset, children,\n itemData, itemKey = defaultItemKey, layout = 'vertical', outerRender, innerRender, isScrolling } = props;\n\n const isVertical = layout === 'vertical';\n\n const [startIndex, startOffset, renderSize, sizes] = getRangeToRender(itemCount, itemOffsetMapping, \n isVertical ? height : width, renderOffset);\n const template = getGridTemplate(sizes);\n const offset = startOffset - renderOffset;\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualContainer className={className} render={outerRender}\n style={{ position: \"relative\", height, width, overflow: \"hidden\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender}\n style={{ position: 'absolute',\n display: 'grid',\n gridTemplateColumns: isVertical ? undefined : template,\n gridTemplateRows: isVertical ? template : undefined,\n top: isVertical ? offset : 0, \n left: isVertical ? 0 : offset, \n height: isVertical ? renderSize : \"100%\", \n width: isVertical ? \"100%\" : renderSize }}>\n {sizes.map((_size, arrayIndex) => (\n <ChildVar data={itemData} isScrolling={isScrolling} \n key={itemKey(startIndex + arrayIndex, itemData)} index={startIndex + arrayIndex} style={boxStyle}/>\n ))}\n </VirtualContainer>\n </VirtualContainer>\n );\n}\n\nexport default DisplayList;\n","import React, { Fragment } from \"react\";\nimport { ItemOffsetMapping, DisplayBaseItemProps, DisplayBaseProps } from './VirtualBase';\nimport { getRangeToRender, getGridTemplate } from './VirtualCommon';\nimport { VirtualContainer } from './VirtualContainer';\n\n/**\n * Props accepted by {@link DisplayGridItem}\n */\nexport interface DisplayGridItemProps extends DisplayBaseItemProps {\n /** Row index of item in the grid being rendered */\n rowIndex: number,\n\n /** Column index of item in the grid being rendered */\n columnIndex: number,\n}\n\n/**\n * Type of item in a {@link DisplayGrid}\n *\n * Must be passed as a child to {@link DisplayGrid}. \n * Accepts props defined by {@link DisplayGridItemProps}.\n * Component must pass {@link DisplayBaseItemProps.style} to whatever it renders. \n * \n * @example Basic implementation\n * ```\n * const Row = ({ index, style }: { index: number, style: React.CSSProperties }) => (\n * <div className=\"row\" style={style}>\n * { index }\n * </div>\n * );\n * ```\n */\nexport type DisplayGridItem = React.ComponentType<DisplayGridItemProps>;\n\n/**\n * Props accepted by {@link DisplayGrid}\n */\nexport interface DisplayGridProps extends DisplayBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayGridItem} interface. */\n children: DisplayGridItem,\n\n /** Number of rows in the grid */\n rowCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each row in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n rowOffsetMapping: ItemOffsetMapping,\n\n /** Number of columns in the grid */\n columnCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each column in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n columnOffsetMapping: ItemOffsetMapping,\n\n /** Vertical offset to start of displayed content */\n rowOffset: number,\n\n /** Horizontal offset to start of displayed content */\n columnOffset: number,\n\n /**\n * Function that defines the key to use for each item given row and column index and value of {@link DisplayBaseProps.itemData}.\n * @defaultValue\n * ```ts\n * (rowIndex, columnIndex, _data) => `${rowIndex}:${columnIndex}`\n * ```\n */\n itemKey?: (rowIndex: number, columnIndex: number, data: unknown) => React.Key,\n}\n\nconst defaultItemKey = (rowIndex: number, columnIndex: number, _data: unknown) => `${rowIndex}:${columnIndex}`;\n\nconst boxStyle: React.CSSProperties = { boxSizing: 'border-box' };\n\n/**\n * Displays a window onto the contents of a virtualized grid starting from `rowOffset`, `columnOffset`.\n * \n * Accepts props defined by {@link DisplayGridProps}. \n * You must pass a single instance of {@link DisplayGridItem} as a child.\n * @group Components\n */\nexport function DisplayGrid(props: DisplayGridProps) {\n const { width, height, rowCount, rowOffsetMapping, columnCount, columnOffsetMapping, className, innerClassName, \n rowOffset: rowRenderOffset, columnOffset: colRenderOffset, children,\n itemData, itemKey = defaultItemKey, outerRender, innerRender, isScrolling } = props;\n\n const [rowStartIndex, rowStartOffset, rowRenderSize, rowSizes] = getRangeToRender(rowCount, rowOffsetMapping, height, rowRenderOffset);\n const rowTemplate = getGridTemplate(rowSizes);\n\n const [colStartIndex, colStartOffset, colRenderSize, colSizes] = getRangeToRender(columnCount, columnOffsetMapping, width, colRenderOffset);\n const colTemplate = getGridTemplate(colSizes);\n\n const rowOffset = rowStartOffset - rowRenderOffset;\n const colOffset = colStartOffset - colRenderOffset;\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualContainer className={className} render={outerRender}\n style={{ position: \"relative\", height, width, overflow: \"hidden\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender}\n style={{ position: 'absolute',\n display: 'grid',\n gridTemplateColumns: colTemplate,\n gridTemplateRows: rowTemplate,\n top: rowOffset, \n left: colOffset, \n height: rowRenderSize, \n width: colRenderSize }}>\n {rowSizes.map((_rowSize, rowIndex) => (\n <Fragment key={itemKey(rowStartIndex + rowIndex, 0, itemData)}>\n {colSizes.map((_size, colIndex) => (\n <ChildVar data={itemData} isScrolling={isScrolling} \n key={itemKey(rowStartIndex + rowIndex, colStartIndex + colIndex, itemData)} \n rowIndex={rowStartIndex + rowIndex} columnIndex={colStartIndex + colIndex} style={boxStyle}/>\n ))}\n </Fragment>\n ))}\n </VirtualContainer>\n </VirtualContainer>\n );\n}\n\nexport default DisplayGrid;\n","import { ItemOffsetMapping, ScrollToOption } from './VirtualBase';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Custom ref handle returned by {@link VirtualGrid} that exposes imperative methods\n * \n * Use `React.useRef<VirtualGridProxy>(null)` to create a ref.\n */\nexport interface VirtualGridProxy {\n /**\n * Scrolls the list to the specified row and column in pixels\n */\n scrollTo(rowOffset?: number, columnOffset?: number): void;\n\n /**\n * Scrolls the list so that the specified item is visible\n * @param rowIndex - Row of item to scroll to\n * @param columnIndex - Column of item to scroll to\n * @param option - Where to {@link ScrollToOption | position} the item within the viewport\n */\n scrollToItem(rowIndex?: number, columnIndex?: number, option?: ScrollToOption): void;\n\n /** Exposes DOM clientWidth property */\n get clientWidth(): number;\n\n /** Exposes DOM clientHeight property */\n get clientHeight(): number;\n}\n\n/** Range to scroll to in one dimension specified as (offset,size). May be undefined if no need to scroll. */\nexport type ScrollRange = [ offset: number|undefined, size: number|undefined ];\n\n/**\n * Returns the {@link ScrollRange} corresponding to a specified item.\n * \n * Used internally to implement {@link VirtualGridProxy.scrollToItem}. Can be used directly for \n * advanced customization scenarios.\n */\nexport function getRangeToScroll(index: number | undefined, mapping: ItemOffsetMapping): ScrollRange {\n if (index === undefined)\n return [undefined, undefined];\n\n return [mapping.itemOffset(index), mapping.itemSize(index)];\n}\n\n/**\n * Same logic as {@link VirtualGridProxy.scrollToItem} usable with your own {@link VirtualScroll}\n * \n * You're encouraged to put together your own combination of {@link VirtualScroll} and {@link DisplayGrid} for\n * advanced customization scenarios. This function provides `ScrollToItem` functionality for use with your own {@link VirtualScroll}.\n */\nexport function virtualGridScrollToItem(scrollRef: React.RefObject<VirtualScrollProxy>, rowOffsetMapping: ItemOffsetMapping, \n columnOffsetMapping: ItemOffsetMapping, rowIndex?: number, columnIndex?: number, option?: ScrollToOption) {\n\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n const [rowOffset, rowSize] = getRangeToScroll(rowIndex, rowOffsetMapping);\n const [colOffset, colSize] = getRangeToScroll(columnIndex, columnOffsetMapping);\n\n scroll.scrollToArea(rowOffset, rowSize, colOffset, colSize, option);\n}\n","import React from \"react\";\nimport { ItemOffsetMapping, VirtualBaseProps, ScrollToOption } from './VirtualBase';\nimport { DisplayGrid, DisplayGridItem } from './DisplayGrid';\nimport { VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScroll } from './VirtualScroll';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\nimport { virtualGridScrollToItem, VirtualGridProxy } from './VirtualGridProxy';\nimport { AutoSizer } from './AutoSizer';\nimport { ScrollState } from './useVirtualScroll';\n\n/**\n * Props accepted by {@link VirtualGrid}\n */\nexport interface VirtualGridProps extends VirtualBaseProps {\n /** Component used as a template to render items in the grid. Must implement {@link DisplayGridItem} interface. */\n children: DisplayGridItem,\n\n /** Number of rows in the grid */\n rowCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each row in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n rowOffsetMapping: ItemOffsetMapping,\n\n /** Number of columns in the grid */\n columnCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each column in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n columnOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given row and column index and value of {@link VirtualBaseProps.itemData}.\n * @defaultValue\n * ```ts\n * (rowIndex, columnIndex, _data) => `${rowIndex}:${columnIndex}`\n * ```\n */\n itemKey?: (rowIndex: number, columnIndex: number, data: unknown) => React.Key,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param rowOffset - Resulting overall row offset. Can be passed to {@link ItemOffsetMapping} to determine first row.\n * @param columnOffset - Resulting overall column offset. Can be passed to {@link ItemOffsetMapping} to determine first column.\n * @param newRowScrollState - New {@link ScrollState} for rows that will be used for rendering.\n * @param newColumnScrollState - New {@link ScrollState} for columns that will be used for rendering.\n */\n onScroll?: (rowOffset: number, columnOffset: number, newRowScrollState: ScrollState, newColumnScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualGrid} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link DisplayGrid} within {@link VirtualGrid} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Virtual Scrolling Grid\n * \n * Accepts props defined by {@link VirtualGridProps}. \n * Refs are forwarded to {@link VirtualGridProxy}. \n * You must pass a single instance of {@link DisplayGridItem} as a child.\n * @group Components\n */\nexport const VirtualGrid = React.forwardRef<VirtualGridProxy, VirtualGridProps>(function VirtualGrid(props, ref) {\n const { rowCount, rowOffsetMapping, columnCount, columnOffsetMapping, children, \n innerClassName, innerRender, itemData, itemKey, onScroll: onScrollCallback, ...scrollProps } = props;\n\n // Total size is same as offset to item one off the end\n const totalRowSize = rowOffsetMapping.itemOffset(rowCount);\n const totalColumnSize = columnOffsetMapping.itemOffset(columnCount);\n\n const [state, setState] = React.useState<[number,number]>([0,0]);\n const scrollRef = React.useRef<VirtualScrollProxy>(null);\n\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(rowOffset?: number, columnOffset?: number): void {\n const scroll = scrollRef.current;\n /* istanbul ignore else */\n if (scroll)\n scroll.scrollTo(rowOffset, columnOffset);\n },\n\n scrollToItem(rowIndex?: number, columnIndex?: number, option?: ScrollToOption): void {\n virtualGridScrollToItem(scrollRef, rowOffsetMapping, columnOffsetMapping, rowIndex, columnIndex, option);\n },\n\n get clientWidth(): number {\n return scrollRef.current ? scrollRef.current.clientWidth : /* istanbul ignore next */ 0;\n },\n\n get clientHeight(): number {\n return scrollRef.current ? scrollRef.current.clientHeight : /* istanbul ignore next */ 0;\n }\n }\n }, [ rowOffsetMapping, columnOffsetMapping ]);\n\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do. \n const ChildVar = children;\n\n return (\n <VirtualScroll\n ref={scrollRef}\n {...scrollProps}\n scrollHeight={totalRowSize}\n scrollWidth={totalColumnSize}\n onScroll={(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {\n setState([verticalOffset, horizontalOffset]);\n if (onScrollCallback)\n onScrollCallback(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState);\n }}>\n {({ isScrolling }) => (\n <AutoSizer style={{ height: '100%', width: '100%' }}>\n {({height,width}) => (\n <DisplayGrid\n innerClassName={innerClassName}\n innerRender={innerRender}\n rowOffset={state[0]}\n columnOffset={state[1]}\n height={height}\n rowCount={rowCount}\n columnCount={columnCount}\n itemData={itemData}\n itemKey={itemKey}\n isScrolling={isScrolling}\n rowOffsetMapping={rowOffsetMapping}\n columnOffsetMapping={columnOffsetMapping}\n width={width}>\n {ChildVar}\n </DisplayGrid>\n )}\n </AutoSizer>\n )}\n </VirtualScroll>\n );\n});\n\nexport default VirtualGrid;\n","import { ItemOffsetMapping, ScrollToOption } from './VirtualBase';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Custom ref handle returned by {@link VirtualList} that exposes imperative methods\n * \n * Use `React.useRef<VirtualListProxy>(null)` to create a ref.\n */\nexport interface VirtualListProxy {\n /**\n * Scrolls the list to the specified offset in pixels\n * @param offset - Offset to scroll to\n */\n scrollTo(offset: number): void;\n\n /**\n * Scrolls the list so that the specified item is visible\n * @param index - Index of item to scroll to\n * @param option - Where to {@link ScrollToOption | position} the item within the viewport\n */\n scrollToItem(index: number, option?: ScrollToOption): void;\n}\n\n/**\n * Same logic as {@link VirtualListProxy.scrollToItem} usable with your own {@link VirtualScroll}\n * \n * You're encouraged to put together your own combination of {@link VirtualScroll} and {@link DisplayList} for\n * advanced customization scenarios. This function provides `ScrollToItem` functionality for use with your own {@link VirtualScroll}.\n */\nexport function virtualListScrollToItem(scrollRef: React.RefObject<VirtualScrollProxy>, itemOffsetMapping: ItemOffsetMapping, isVertical: boolean,\n index: number, option?: ScrollToOption) {\n\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n const itemOffset = itemOffsetMapping.itemOffset(index);\n const itemSize = itemOffsetMapping.itemSize(index);\n\n if (isVertical)\n scroll.scrollToArea(itemOffset, itemSize, undefined, undefined, option);\n else\n scroll.scrollToArea(undefined, undefined, itemOffset, itemSize, option);\n}","import React from \"react\";\nimport { ItemOffsetMapping, VirtualBaseProps, ScrollToOption, ScrollLayout } from './VirtualBase';\nimport { DisplayList, DisplayListItem } from './DisplayList';\nimport { VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScroll } from './VirtualScroll';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\nimport { virtualListScrollToItem, VirtualListProxy } from './VirtualListProxy';\nimport { AutoSizer } from './AutoSizer';\nimport { ScrollState } from './useVirtualScroll';\n\n/**\n * Props accepted by {@link VirtualList}\n */\nexport interface VirtualListProps extends VirtualBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayListItem} interface. */\n children: DisplayListItem,\n\n /** Number of items in the list */\n itemCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each item in the list\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n itemOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given item index and value of {@link VirtualBaseProps.itemData}.\n * @defaultValue `(index, _data) => index`\n */\n itemKey?: (index: number, data: unknown) => React.Key,\n\n /**\n * Choice of 'vertical' or 'horizontal' layouts\n * @defaultValue 'vertical'\n */\n layout?: ScrollLayout,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param offset - Resulting overall offset. Can be passed to {@link ItemOffsetMapping} to determine top item.\n * @param newScrollState - New {@link ScrollState} that will be used for rendering.\n */\n onScroll?: (offset: number, newScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualList} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link DisplayList} within {@link VirtualList} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Virtual Scrolling List\n * \n * Accepts props defined by {@link VirtualListProps}. \n * Refs are forwarded to {@link VirtualListProxy}. \n * You must pass a single instance of {@link DisplayListItem} as a child.\n * @group Components\n */\nexport const VirtualList = React.forwardRef<VirtualListProxy, VirtualListProps>(function VirtualList(props, ref) {\n const { itemCount, itemOffsetMapping, children, layout = 'vertical', onScroll: onScrollCallback,\n innerClassName, innerRender, itemData, itemKey, ...scrollProps } = props;\n\n // Total size is same as offset to item one off the end\n const renderSize = itemOffsetMapping.itemOffset(itemCount);\n\n const [offset, setOffset] = React.useState<number>(0);\n const scrollRef = React.useRef<VirtualScrollProxy>(null);\n const isVertical = layout === 'vertical';\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(offset: number): void {\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n if (isVertical)\n scroll.scrollTo(offset, undefined);\n else\n scroll.scrollTo(undefined, offset);\n },\n\n scrollToItem(index: number, option?: ScrollToOption): void {\n virtualListScrollToItem(scrollRef, itemOffsetMapping, isVertical, index, option);\n }\n }\n }, [ itemOffsetMapping, isVertical ]);\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualScroll\n ref={scrollRef}\n {...scrollProps}\n scrollHeight={isVertical ? renderSize : undefined}\n scrollWidth={isVertical ? undefined : renderSize}\n onScroll={(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {\n const newOffset = isVertical ? verticalOffset : horizontalOffset;\n setOffset(newOffset);\n if (onScrollCallback)\n onScrollCallback(newOffset, isVertical ? verticalScrollState : horizontalScrollState);\n }}>\n {({ isScrolling }) => (\n <AutoSizer style={{ height: '100%', width: '100%' }}>\n {({height,width}) => (\n <DisplayList\n innerClassName={innerClassName}\n innerRender={innerRender}\n layout={layout}\n offset={offset}\n height={height}\n itemCount={itemCount}\n itemData={itemData}\n itemKey={itemKey}\n isScrolling={isScrolling}\n itemOffsetMapping={itemOffsetMapping}\n width={width}>\n {ChildVar}\n </DisplayList>\n )}\n </AutoSizer>\n )}\n </VirtualScroll>\n );\n});\n\nexport default VirtualList;\n","import { ItemOffsetMapping } from './VirtualBase';\n\nclass FixedSizeItemOffsetMapping implements ItemOffsetMapping {\n constructor (itemSize: number) {\n this.fixedItemSize = itemSize;\n }\n\n itemSize(_itemIndex: number): number {\n return this.fixedItemSize;\n }\n\n itemOffset(itemIndex: number): number {\n return itemIndex * this.fixedItemSize;\n }\n\n offsetToItem(offset: number): [itemIndex: number, startOffset: number] {\n const itemIndex = Math.floor(offset / this.fixedItemSize);\n const startOffset = itemIndex * this.fixedItemSize;\n\n return [itemIndex, startOffset];\n }\n\n fixedItemSize: number;\n}\n\n/**\n * Returns an instance of {@link ItemOffsetMapping} suitable for use when all items have a fixed size.\n * \n * @param itemSize - Size to use for all items\n */\nexport function useFixedSizeItemOffsetMapping(itemSize: number): ItemOffsetMapping {\n return new FixedSizeItemOffsetMapping(itemSize);\n}\n\nexport default useFixedSizeItemOffsetMapping;\n","import { ItemOffsetMapping } from './VirtualBase';\n\nclass VariableSizeItemOffsetMapping implements ItemOffsetMapping {\n constructor (defaultItemSize: number, sizes: number[]) {\n this.defaultItemSize = defaultItemSize;\n this.sizes = sizes;\n }\n\n itemSize(itemIndex: number): number {\n return (itemIndex < this.sizes.length) ? this.sizes[itemIndex] : this.defaultItemSize;\n }\n\n itemOffset(itemIndex: number): number {\n let offset = 0;\n let length = this.sizes.length;\n if (itemIndex > length) {\n const numDefaultSize = itemIndex - length;\n offset = numDefaultSize * this.defaultItemSize;\n } else {\n length = itemIndex;\n }\n \n for (let i = 0; i < length; i ++)\n {\n offset += this.sizes[i];\n }\n\n return offset;\n }\n\n offsetToItem(offset: number): [itemIndex: number, startOffset: number] {\n let startOffset = 0;\n const length = this.sizes.length;\n for (let i = 0; i < length; i ++) {\n const size = this.sizes[i];\n if (startOffset + size > offset) {\n return [i, startOffset];\n }\n startOffset += size;\n }\n\n const itemIndex = Math.floor((offset - startOffset) / this.defaultItemSize);\n startOffset += itemIndex * this.defaultItemSize;\n\n return [itemIndex+length, startOffset];\n }\n\n defaultItemSize: number;\n sizes: number[];\n}\n\n/**\n * Returns an instance of {@link ItemOffsetMapping} suitable for use when initial items have variable sizes.\n * \n * @param defaultItemSize - Size to use for all other items\n * @param sizes - Array of sizes to use for the initial items, one size per item\n */\nexport function useVariableSizeItemOffsetMapping(defaultItemSize: number, sizes?: number[]): ItemOffsetMapping {\n return new VariableSizeItemOffsetMapping(defaultItemSize, sizes || []);\n}\n\nexport default useVariableSizeItemOffsetMapping;"],"names":["_jsx","useIsScrolling","useIsScrollingHook","_jsxs","defaultItemKey","boxStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/VirtualContainer.tsx","../src/AutoSizer.tsx","../src/useVirtualScroll.ts","../src/useEventListener.ts","../src/useAnimationTimeout.ts","../src/useIsScrolling.ts","../src/VirtualScrollProxy.ts","../src/VirtualScroll.tsx","../src/VirtualCommon.ts","../src/DisplayList.tsx","../src/DisplayGrid.tsx","../src/VirtualGridProxy.ts","../src/VirtualGrid.tsx","../src/VirtualListProxy.ts","../src/VirtualList.tsx","../src/useFixedSizeItemOffsetMapping.ts","../src/useVariableSizeItemOffsetMapping.ts"],"sourcesContent":["import React from \"react\";\n\n/**\n * Props that an implementation of {@link VirtualContainerRender} must accept.\n * \n * Includes all the props that a {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement | HTMLDivElement} would accept.\n */\nexport type VirtualContainerRenderProps = React.ComponentPropsWithoutRef<'div'>;\n\n/**\n * Render prop for a {@link VirtualContainer}\n *\n * Can be passed to {@link VirtualContainer} to replace default implementation. \n * Function must render a div and forward {@link VirtualContainerRenderProps}\n * and any `ref` to it. \n * \n * @example Minimal compliant implementation\n * ```\n * const containerRender: VirtualContainerRender = ({...rest}, ref) => (\n * <div ref={ref} {...rest} />\n * )\n * ```\n */\nexport type VirtualContainerRender = (props: VirtualContainerRenderProps, ref?: React.ForwardedRef<HTMLDivElement>) => JSX.Element;\n\n/**\n * Props that {@link VirtualContainer} accepts.\n */\nexport interface VirtualContainerComponentProps extends VirtualContainerRenderProps {\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualContainer}. */\n render?: VirtualContainerRender;\n}\n\nconst defaultContainerRender: VirtualContainerRender = ({...rest}, ref) => (\n <div ref={ref} {...rest} />\n)\n\n/**\n * Wrapper around a div used by other components in {@link @candidstartup/react-virtual-scroll!}. Most props are passed through to the div. Use the\n * {@link VirtualContainerComponentProps.render} prop to override the default behavior. \n * \n * @group Components\n */\nexport const VirtualContainer = React.forwardRef<HTMLDivElement, VirtualContainerComponentProps >(\n function VirtualContainer({render = defaultContainerRender, ...rest}, ref) {\n return render(rest, ref)\n})\n","import React from \"react\";\n\n/**\n * Props that an implementation of {@link AutoSizerRender} must accept.\n */\nexport interface AutoSizerRenderProps {\n /** Computed height */\n height: number,\n\n /** Computed width */\n width: number,\n}\n\n/**\n * Render prop for content in an {@link AutoSizer}\n *\n * Function renders content and forwards `width` and `height`\n * to whatever needs it.\n * \n * @example Simple implementation\n * ```\n * const autoSizeRender: AutoSizeRender = ({width, height}) => (\n * <VirtualList width={width} height={height} {...props} />\n * )\n * ```\n */\nexport type AutoSizerRender = (props: AutoSizerRenderProps) => JSX.Element;\n\n/**\n * Props accepted by {@link AutoSizer}\n */\nexport interface AutoSizerProps {\n /** Function implementing {@link AutoSizerRender} that renders the content that needs explicit sizing */\n children: AutoSizerRender\n\n /** The `className` applied to the container element */\n className?: string,\n\n /** Inline style to apply to the container element */\n style?: React.CSSProperties;\n}\n\n/**\n * HOC that calculates the size available to it and makes the computed size available to children.\n * The size available depends on DOM layout and style applied wherever the AutoSizer finds itself.\n * You will probably want to pass something appropriate via the `className` or `style` props.\n * \n * Accepts props defined by {@link AutoSizerProps}. \n * You must pass a single instance of {@link AutoSizerRender} as a child.\n * @group Components\n */\nexport function AutoSizer(props: AutoSizerProps) {\n const { children, className, style } = props;\n\n // Using separate primitive states rather than one composite so that React\n // can detect duplicates values and bail out of redundant renders.\n const [width, setWidth] = React.useState<number>(0);\n const [height, setHeight] = React.useState<number>(0);\n const ref = React.useRef<HTMLDivElement>(null);\n\n // Make sure resize callback is a stable value so we're not constantly\n // creating and disconnecting resize observers.\n const resizeCallback: ResizeObserverCallback = React.useCallback((entries) => {\n entries.forEach(entry => {\n // Context box sizes can contain fractional values while clientWidth\n // and clientHeight properties are always rounded to nearest integer.\n // Always use integer values to avoid confusion.\n const newWidth = Math.round(entry.contentBoxSize[0].inlineSize);\n setWidth(newWidth);\n const newHeight = Math.round(entry.borderBoxSize[0].blockSize);\n setHeight(newHeight);\n })\n }, []);\n\n // Expect effect to run only on initial mount\n React.useLayoutEffect(() => {\n const div = ref.current;\n /* istanbul ignore if*/\n if (!div)\n return;\n\n // Size on initial mount\n setHeight(div.clientHeight);\n setWidth(div.clientWidth);\n\n // Updates size on any subsequent resize. Only available in browser\n // environment so avoid crashing out when server side rendering, or\n // running unit test without ResizeObserver being mocked. \n if (typeof ResizeObserver !== 'undefined') {\n const resizeObserver = new ResizeObserver(resizeCallback);\n resizeObserver.observe(div);\n return () => { resizeObserver.disconnect() }\n }\n }, [resizeCallback])\n\n // No point rendering children until we've measured size and found a usable area\n const renderChildren = height > 0 && width > 0;\n\n // Ensure that size is driven only by parent. Wrapping child in a zero sized inner div\n // which it can overflow stops child's size having any impact on size of outer div. \n // Otherwise can end up in infinite loop if child makes itself bigger than the \n // actual width and height we pass to it. That could be because child has \n // padding/borders/margins or because child renders itself bigger than size it's given.\n return (\n <div ref={ref} className={className} style={style}>\n <div style={{ overflow: 'visible', width: 0, height: 0 }}>\n {renderChildren && children({height, width})}\n </div>\n </div>\n );\n}\n\nexport default AutoSizer;\n","import { useState } from \"react\";\n\n/** Direction of scrolling */\nexport type ScrollDirection = \"forward\" | \"backward\";\n\n/**\n * Overall scroll state for a single dimension.\n */\nexport interface ScrollState { \n /** Scroll bar offset. Equal to outer container's `scrollTop` or `scrollLeft` depending on dimension. */\n scrollOffset: number, \n\n /** Offset used to position current page of items in virtual space. Overall offset is `scrollOffset+renderOffset`. */\n renderOffset: number,\n\n /** Index of current page. */\n page: number, \n\n /** Current scrolling direction. Calculated by comparing current overall offset to that when last rendered. */\n scrollDirection: ScrollDirection, \n}\n\nexport interface VirtualScrollState extends ScrollState {\n renderSize: number;\n\n // Returns updated scrollOffset. Caller should update scroll bar position if different from value passed in. \n onScroll(clientExtent: number, scrollExtent: number, scrollOffset: number): [number, ScrollState];\n\n // Scroll to offset in logical space returning offset to update scroll bar position to\n doScrollTo(offset: number, clientExtent: number): number;\n}\n\n// Max size that is safe across all browsers (Firefox is the limiting factor)\n// SlickGrid tries to dynamically determine limit on other browsers (Chrome will do 30M) but\n// I prefer simplicity of same behavior across all browsers.\nconst MAX_SUPPORTED_CSS_SIZE = 6000000;\nconst MIN_NUMBER_PAGES = 100;\n\nexport function useVirtualScroll(totalSize: number, maxCssSize = MAX_SUPPORTED_CSS_SIZE, minNumberPages = MIN_NUMBER_PAGES): VirtualScrollState {\n let renderSize=0, pageSize=0, numPages=0;\n if (totalSize < maxCssSize) {\n // No paging needed\n renderSize = pageSize = totalSize;\n numPages = 1;\n } else {\n // Break into pages\n renderSize = maxCssSize;\n pageSize = renderSize / minNumberPages;\n numPages = Math.floor(totalSize / pageSize);\n }\n\n function pageToRenderOffset(page: number): number {\n if (page <= 0)\n return 0;\n\n if (page >= numPages-1)\n return totalSize - renderSize;\n\n return Math.round((page-1) * (totalSize - renderSize) / (numPages - 3));\n }\n\n const initValue: ScrollState = { \n scrollOffset: 0, \n renderOffset: 0,\n page: 0,\n scrollDirection: \"forward\",\n };\n const [scrollState, setScrollState] = useState(initValue);\n\n function onScroll(clientExtent: number, scrollExtent: number, scrollOffset: number): [number, ScrollState] {\n if (scrollState.scrollOffset == scrollOffset) {\n // No need to change state if scroll position unchanged\n return [scrollOffset, scrollState];\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n let newOffset = Math.max(0, Math.min(scrollOffset, scrollExtent - clientExtent));\n const newScrollDirection = scrollState.scrollOffset <= newOffset ? 'forward' : 'backward';\n\n // Switch pages if needed\n let newPage, newRenderOffset;\n let retScrollOffset = scrollOffset;\n const scrollDist = Math.abs(newOffset - scrollState.scrollOffset);\n if (scrollDist < clientExtent) {\n // Scrolling part of visible window, don't want to skip items, so can't scale up movement\n // If we cross page boundary we need to reset scroll bar position back to where it should be at start of page\n newPage = Math.min(numPages - 1, Math.floor((scrollOffset + scrollState.renderOffset) / pageSize));\n newRenderOffset = pageToRenderOffset(newPage);\n if (newPage != scrollState.page) {\n // Be very intentional about when we ask caller to reset scroll bar\n // Don't want to trigger event loops\n newOffset = scrollOffset + scrollState.renderOffset - newRenderOffset;\n retScrollOffset = newOffset;\n }\n } else {\n // Large scale scrolling, choosing page from a rolodex\n // First and last page are mapped 1:1 between grid and container\n if (newOffset < pageSize) {\n newPage = 0;\n } else if (newOffset >= renderSize - pageSize) {\n newPage = numPages - 1;\n } else {\n const scaleFactor = (totalSize - pageSize*2) / (renderSize - pageSize*2);\n newPage = Math.min(numPages - 3, Math.floor((newOffset - pageSize) * scaleFactor / pageSize)) + 1;\n }\n newRenderOffset = pageToRenderOffset(newPage);\n }\n\n const newScrollState: ScrollState = \n { scrollOffset: newOffset, renderOffset: newRenderOffset, page: newPage, scrollDirection: newScrollDirection };\n setScrollState(newScrollState);\n return [retScrollOffset, newScrollState];\n }\n\n function doScrollTo(offset: number, clientExtent: number) {\n const safeOffset = Math.min(totalSize - clientExtent, Math.max(offset, 0));\n const scrollDirection = (scrollState.scrollOffset + scrollState.renderOffset) <= safeOffset ? 'forward' : 'backward';\n const page = Math.min(numPages - 1, Math.floor(safeOffset / pageSize));\n const renderOffset = pageToRenderOffset(page);\n const scrollOffset = safeOffset - renderOffset;\n\n setScrollState({ scrollOffset, renderOffset, page, scrollDirection });\n return scrollOffset;\n }\n\n return {...scrollState, renderSize, onScroll, doScrollTo} as const;\n}\n\nexport default useVirtualScroll;\n","// Based on https://github.com/realwugang/use-event-listener\n// and https://github.com/donavon/use-event-listener/blob/develop/src/index.js\n\nimport { useRef, useEffect, RefObject, createRef } from 'react';\n\ninterface Options {\n capture?: boolean\n once?: boolean\n passive?: boolean\n}\n\ntype Listener = Window | Document | HTMLElement;\n\nfunction isListener(element: Listener | RefObject<HTMLElement>): element is Listener {\n return (element as Listener).addEventListener !== undefined;\n}\n\ntype EventHandler = (event: Event) => void;\n\nexport function useEventListener (eventName: string, \n handler: EventHandler, \n element: Listener | RefObject<HTMLElement> | null = window, \n options: Options = {}) {\n const savedHandler = useRef<EventHandler>();\n const { capture, passive, once } = options;\n\n useEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n if (!element)\n return;\n\n const el = isListener(element) ? element : element.current;\n if (!el)\n return;\n\n const eventListener = (event: Event) => savedHandler.current?.(event);\n const opts = { capture, passive, once };\n el.addEventListener(eventName, eventListener, opts);\n return () => {\n el.removeEventListener(eventName, eventListener, opts);\n };\n }, [eventName, element, capture, passive, once]);\n}\n\nexport default useEventListener;\n\n// In-source testing for private helper functions\nif (import.meta.vitest) {\n const { it, expect } = import.meta.vitest\n it('isListener', () => {\n expect(isListener(window)).toBe(true)\n expect(isListener(document)).toBe(true)\n expect(isListener(document.createElement(\"div\"))).toBe(true)\n expect(isListener(createRef())).toBe(false)\n })\n}","// Based on https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n// and https://www.joshwcomeau.com/snippets/react-hooks/use-timeout/\n// and https://github.com/bvaughn/react-window/blob/master/src/timer.js\n//\n// Equivalent functionality to a useTimeout hook but based on requestAnimationFrame instead of setTimeout. Use\n// when making frequent requests for short duration timeouts where browser may throttle setTimeout.\nimport { useEffect, useRef } from 'react';\n\ntype Callback = () => void;\n\nexport function useAnimationTimeout(callback: Callback, delay: number | null, key?: unknown) {\n const requestRef = useRef<number>();\n const savedCallback = useRef<Callback>(callback);\n\n // Remember the latest callback\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n \n const start = performance.now();\n \n useEffect(() => {\n function tick() {\n requestRef.current = undefined;\n if (delay === null)\n return;\n\n if (performance.now() - start >= delay) {\n savedCallback.current();\n } else {\n requestRef.current = requestAnimationFrame(tick);\n }\n }\n\n tick();\n\n return () => {\n if (typeof requestRef.current === 'number') {\n cancelAnimationFrame(requestRef.current);\n requestRef.current = undefined;\n }\n }\n }, [start, delay, key]);\n}\n\nexport default useAnimationTimeout;","import { useState, RefObject } from \"react\";\nimport { useEventListener } from './useEventListener';\nimport { useAnimationTimeout } from './useAnimationTimeout';\n\nconst DEBOUNCE_INTERVAL = 150;\nconst FALLBACK_INTERVAL = 500;\n\nexport function useIsScrolling(element: Window | HTMLElement | RefObject<HTMLElement> | null = window): boolean {\n const [scrollCount, setScrollCount] = useState(0);\n\n // scrollend implementations in both Chrome and Firefox are buggy with missing scrollend events\n // in some circumstances (using keyboard to scroll past end in Chrome, intermittently when using mouse wheel in Firefox)\n // Use a timeout even when scrollend is supported to handle missing events. In this case we use a longer interval as\n // don't want it to be over sensitive. \n const supportsScrollEnd = ('onscrollend' in window);\n const delay = supportsScrollEnd ? FALLBACK_INTERVAL : DEBOUNCE_INTERVAL;\n\n useEventListener(\"scroll\", () => setScrollCount(c => c + 1), element);\n useEventListener(\"scrollend\", () => setScrollCount(0), supportsScrollEnd ? element : null);\n useAnimationTimeout(() => setScrollCount(0), (scrollCount == 0) ? null : delay, scrollCount);\n\n return scrollCount > 0;\n}\n\nexport default useIsScrolling;","import { ScrollToOption } from './VirtualBase';\n\n/**\n * Custom ref handle returned by {@link VirtualScroll} that exposes imperative methods\n * \n * Use `React.useRef<VirtualScrollProxy>(null)` to create a ref.\n */\nexport interface VirtualScrollProxy {\n /**\n * Scrolls to the specified vertical and horizontal offset in pixels\n * Either offset can be left undefined to scroll in one dimension only\n * @param verticalOffset - Offset to scroll to vertically\n * @param horizontalOffset - Offset to scroll to horizontally\n */\n scrollTo(verticalOffset?: number, horizontalOffset?: number): void;\n\n /**\n * Scrolls to the specified area\n * Either offset/size pair can be left undefined to scroll in one dimension only\n * @param verticalOffset - Offset to scroll to vertically\n * @param verticalSize - Size of target area vertically\n * @param horizontalOffset - Offset to scroll to horizontally\n * @param horizontalSize - Size of target area horizontally\n * @param option - Where to {@link ScrollToOption | position} the area within the viewport\n */\n scrollToArea(verticalOffset?: number, verticalSize?: number, horizontalOffset?: number, horizontalSize?: number, option?: ScrollToOption): void;\n\n /** Exposes DOM clientWidth property */\n get clientWidth(): number;\n\n /** Exposes DOM clientHeight property */\n get clientHeight(): number;\n}\n\n/**\n * Returns the offset needed to scroll in one dimension for a specified range\n * \n * Used internally to implement {@link VirtualScrollProxy.scrollToArea}. Can be used directly for \n * advanced customization scenarios.\n */\nexport function getOffsetToScrollRange(offset: number | undefined, size: number | undefined, \n clientExtent: number, scrollOffset: number, option?: ScrollToOption): number | undefined\n{\n if (offset === undefined)\n return undefined;\n\n if (option != 'visible')\n return offset;\n\n // Start of item offscreen before start of viewport?\n if (offset < scrollOffset)\n return offset;\n\n size = size || 0;\n\n // Already completely visible?\n const endOffset = offset + size;\n const endViewport = scrollOffset + clientExtent;\n if (endOffset <= endViewport)\n return undefined;\n\n // Item offscreen past end of viewport\n\n // Item bigger than viewport? Make sure start is in view\n if (size > clientExtent)\n return offset;\n\n // Scroll so end of item aligns with end of viewport\n return offset - clientExtent + size;\n }\n","import React from \"react\";\nimport { VirtualContainer, VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScrollableProps, ScrollEvent, ScrollToOption } from './VirtualBase';\nimport { useVirtualScroll, ScrollState } from './useVirtualScroll';\nimport { useIsScrolling as useIsScrollingHook} from './useIsScrolling';\nimport { getOffsetToScrollRange, VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Props that an implementation of {@link VirtualContentRender} must accept.\n */\nexport interface VirtualContentProps {\n /** \n * Is the owning component being actively scrolled? Used to change how the content is rendered depending on scroll state.\n * \n * Only defined if {@link VirtualScrollableProps.useIsScrolling} is true. \n * */\n isScrolling?: boolean,\n\n /** Current scroll position vertical offset */\n verticalOffset: number,\n\n /** Current scroll position horizontal offset */\n horizontalOffset: number\n}\n\n/**\n * Render prop for content container in {@link VirtualScroll}\n *\n * Pass to {@link VirtualScroll} to render content into the viewport\n * implementation. Function must render a div and forward {@link VirtualContentProps}\n * and any `ref` to it. \n * \n * @example Minimal compliant implementation\n * ```\n * const contentRender: VirtualContentRender = ({isScrolling, ...rest}, ref) => (\n * <div ref={ref} {...rest} />\n * )\n * ```\n */\nexport type VirtualContentRender = (props: VirtualContentProps, ref?: React.ForwardedRef<HTMLDivElement>) => JSX.Element;\n\n/**\n * Props accepted by {@link VirtualScroll}\n */\nexport interface VirtualScrollProps extends VirtualScrollableProps {\n /** Function implementing {@link VirtualContentRender} that renders the content that needs to respond to scrolling */\n children: VirtualContentRender\n\n /** \n * Height of area to scroll over \n * \n * @defaultValue 0\n */\n scrollHeight?: number,\n\n /** \n * Width of area to scroll over \n * \n * @defaultValue 0\n */\n scrollWidth?: number,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param verticalOffset - Resulting overall vertical offset. \n * @param horizontalOffset - Resulting overall horizontal offset.\n * @param newVerticalScrollState - New vertical {@link ScrollState} that will be used for rendering.\n * @param newHorizontalScrollState - New horizontal {@link ScrollState} that will be used for rendering.\n */\n onScroll?: (verticalOffset: number, horizontalOffset: number, newVerticalScrollState: ScrollState, newHorizontalScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualScroll} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualScroll} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Customizable Virtual Scrolling Component\n * \n * Allows user to scroll over a virtual area `scrollHeight` x `scrollWidth` pixels. \n * Use `onScroll` to track scroll state and `innerRender` to render scroll state specific content into the viewport\n * \n * Accepts props defined by {@link VirtualScrollProps}. \n * Refs are forwarded to {@link VirtualScrollProxy}. \n * @group Components\n */\nexport const VirtualScroll = React.forwardRef<VirtualScrollProxy, VirtualScrollProps>(function VirtualScroll(props, ref) {\n const { width, height, scrollWidth = 0, scrollHeight = 0, className, innerClassName, children,\n onScroll: onScrollCallback, useIsScrolling = false, innerRender, outerRender } = props;\n\n const outerRef = React.useRef<HTMLDivElement>(null);\n const { scrollOffset: scrollRowOffset, renderOffset: renderRowOffset, renderSize: renderRowSize,\n onScroll: onScrollRow, doScrollTo: doScrollToRow } = useVirtualScroll(scrollHeight, props.maxCssSize, props.minNumPages);\n const currentVerticalOffset = scrollRowOffset + renderRowOffset;\n const { scrollOffset: scrollColOffset, renderOffset: renderColOffset, renderSize: renderColumnSize,\n onScroll: onScrollColumn, doScrollTo: doScrollToColumn} = useVirtualScroll(scrollWidth, props.maxCssSize, props.minNumPages);\n const currentHorizontalOffset = scrollColOffset + renderColOffset;\n const isActuallyScrolling = useIsScrollingHook(outerRef);\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(rowOffset?: number, columnOffset?: number): void {\n if (rowOffset === undefined && columnOffset === undefined)\n return;\n\n const outer = outerRef.current;\n /* istanbul ignore else */\n if (outer) {\n const options: ScrollToOptions = {};\n if (rowOffset != undefined)\n options.top = doScrollToRow(rowOffset, outer.clientHeight);\n if (columnOffset != undefined)\n options.left = doScrollToColumn(columnOffset, outer.clientWidth);\n outer.scrollTo(options);\n }\n },\n\n scrollToArea(verticalOffset?: number, verticalSize?: number, horizontalOffset?: number, horizontalSize?: number, option?: ScrollToOption) {\n const outer = outerRef.current;\n /* istanbul ignore if*/\n if (!outer)\n return;\n\n const rowOffset = getOffsetToScrollRange(verticalOffset, verticalSize, outer.clientHeight, currentVerticalOffset, option);\n const colOffset = getOffsetToScrollRange(horizontalOffset, horizontalSize, outer.clientWidth, currentHorizontalOffset, option);\n this.scrollTo(rowOffset, colOffset);\n },\n\n get clientWidth(): number {\n return outerRef.current ? outerRef.current.clientWidth : /* istanbul ignore next */ 0;\n },\n\n get clientHeight(): number {\n return outerRef.current ? outerRef.current.clientHeight : /* istanbul ignore next */ 0;\n }\n }\n }, [ doScrollToRow, doScrollToColumn, currentVerticalOffset, currentHorizontalOffset ]);\n\n function onScroll(event: ScrollEvent) {\n const { clientWidth, clientHeight, scrollWidth, scrollHeight, scrollLeft, scrollTop } = event.currentTarget;\n const [newScrollTop, newRowScrollState] = onScrollRow(clientHeight, scrollHeight, scrollTop);\n const [newScrollLeft, newColumnScrollState] = onScrollColumn(clientWidth, scrollWidth, scrollLeft);\n if (outerRef.current && (newScrollTop != scrollTop || newScrollLeft != scrollLeft ))\n outerRef.current.scrollTo(newScrollLeft, newScrollTop);\n onScrollCallback?.(newRowScrollState.scrollOffset+newRowScrollState.renderOffset, \n newColumnScrollState.scrollOffset+newColumnScrollState.renderOffset, newRowScrollState, newColumnScrollState);\n }\n\n const isScrolling = useIsScrolling ? isActuallyScrolling : undefined;\n const verticalOffset = currentVerticalOffset;\n const horizontalOffset = currentHorizontalOffset;\n\n return (\n <VirtualContainer className={className} render={outerRender} onScroll={onScroll} ref={outerRef} \n style={{ position: \"relative\", height, width, overflow: \"auto\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender} \n style={{ zIndex: 1, position: 'sticky', top: 0, left: 0, width: '100%', height: '100%' }}>\n {children({isScrolling, verticalOffset, horizontalOffset})}\n </VirtualContainer>\n <div style={{ position: 'absolute', top: 0, left: 0, \n height: scrollHeight ? renderRowSize : '100%', \n width: scrollWidth ? renderColumnSize : '100%'}}/>\n </VirtualContainer>\n );\n});\n\nexport default VirtualScroll;\n","import type { ItemOffsetMapping } from \"./VirtualBase\";\n\ntype RangeToRender = [\n startIndex: number,\n startOffset: number,\n totalSize: number,\n sizes: number[]\n];\n\nexport function getRangeToRender(itemCount: number, itemOffsetMapping: ItemOffsetMapping, clientExtent: number, scrollOffset: number): RangeToRender {\n if (itemCount == 0) {\n return [0, 0, 0, []];\n }\n\n // Negative offset equivalent to reducing the size of the window (possibly down to nothing)\n if (scrollOffset < 0) {\n clientExtent += scrollOffset;\n scrollOffset = 0;\n }\n\n if (clientExtent <= 0) {\n return [0, 0, 0, []];\n }\n\n const [baseIndex, startOffset] = itemOffsetMapping.offsetToItem(scrollOffset);\n if (baseIndex >= itemCount) {\n return [0, 0, 0, []];\n }\n\n let itemIndex = Math.max(0, Math.min(itemCount - 1, baseIndex));\n const endOffset = scrollOffset + clientExtent;\n\n const startIndex = itemIndex;\n let offset = startOffset;\n const sizes: number[] = [];\n let totalSize = 0;\n\n while (offset < endOffset && itemIndex < itemCount) {\n const size = itemOffsetMapping.itemSize(itemIndex);\n sizes.push(size);\n totalSize += size;\n offset += size;\n itemIndex ++;\n }\n\n return [startIndex, startOffset, totalSize, sizes];\n}\n\nfunction formatRepeat(repeat: number, size: number): string {\n return (repeat == 1) ? `${size}px` : `repeat(${repeat},${size}px)`;\n}\n\nfunction join(a: string|undefined, s: string) {\n return a ? a + ' ' + s : s;\n}\n\nexport function getGridTemplate(sizes: number[]): string | undefined {\n const count = sizes.length;\n if (count == 0)\n return undefined;\n\n let ret = undefined;\n let lastSize = sizes[0];\n let repeat = 1;\n\n for (let i = 1; i < count; i ++) {\n const size = sizes[i];\n if (size == lastSize) {\n repeat ++;\n } else {\n const s = formatRepeat(repeat, lastSize);\n ret = join(ret,s);\n lastSize = size;\n repeat = 1;\n }\n }\n\n const s = formatRepeat(repeat, lastSize);\n return join(ret,s);\n}\n\n\n","import React from \"react\";\nimport { ItemOffsetMapping, ScrollLayout, DisplayBaseItemProps, DisplayBaseProps } from './VirtualBase';\nimport { getRangeToRender, getGridTemplate } from './VirtualCommon';\nimport { VirtualContainer } from './VirtualContainer';\n\n/**\n * Props accepted by {@link DisplayListItem}\n */\nexport interface DisplayListItemProps extends DisplayBaseItemProps {\n /** Index of item in the list being rendered */\n index: number,\n}\n\n/**\n * Type of item in a {@link DisplayList}\n *\n * Must be passed as a child to {@link DisplayList}. \n * Accepts props defined by {@link DisplayListItemProps}.\n * Component must pass {@link DisplayBaseItemProps.style} to whatever it renders. \n * \n * @example Basic implementation\n * ```\n * const Row = ({ index, style }: { index: number, style: React.CSSProperties }) => (\n * <div className=\"row\" style={style}>\n * { index }\n * </div>\n * );\n * ```\n */\nexport type DisplayListItem = React.ComponentType<DisplayListItemProps>;\n\n/**\n * Props accepted by {@link DisplayList}\n */\nexport interface DisplayListProps extends DisplayBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayListItem} interface. */\n children: DisplayListItem,\n\n /** Number of items in the list */\n itemCount: number,\n\n /** Offset to start of displayed content */\n offset: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each item in the list\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n itemOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given item index and value of {@link DisplayBaseProps.itemData}.\n * @defaultValue `(index, _data) => index`\n */\n itemKey?: (index: number, data: unknown) => React.Key,\n\n /**\n * Choice of 'vertical' or 'horizontal' layouts\n * @defaultValue 'vertical'\n */\n layout?: ScrollLayout,\n}\n\nconst defaultItemKey = (index: number, _data: unknown) => index;\n\nconst boxStyle: React.CSSProperties = { boxSizing: 'border-box' };\n\n/**\n * Displays a window onto the contents of a virtualized list starting from `offset`.\n * \n * Accepts props defined by {@link DisplayListProps}. \n * You must pass a single instance of {@link DisplayListItem} as a child.\n * @group Components\n */\nexport function DisplayList(props: DisplayListProps) {\n const { width, height, itemCount, itemOffsetMapping, className, innerClassName, offset: renderOffset, children,\n itemData, itemKey = defaultItemKey, layout = 'vertical', outerRender, innerRender, isScrolling } = props;\n\n const isVertical = layout === 'vertical';\n\n const [startIndex, startOffset, renderSize, sizes] = getRangeToRender(itemCount, itemOffsetMapping, \n isVertical ? height : width, renderOffset);\n const template = getGridTemplate(sizes);\n const offset = startOffset - renderOffset;\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualContainer className={className} render={outerRender}\n style={{ position: \"relative\", height, width, overflow: \"hidden\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender}\n style={{ position: 'absolute',\n display: 'grid',\n gridTemplateColumns: isVertical ? undefined : template,\n gridTemplateRows: isVertical ? template : undefined,\n top: isVertical ? offset : 0, \n left: isVertical ? 0 : offset, \n height: isVertical ? renderSize : \"100%\", \n width: isVertical ? \"100%\" : renderSize }}>\n {sizes.map((_size, arrayIndex) => (\n <ChildVar data={itemData} isScrolling={isScrolling} \n key={itemKey(startIndex + arrayIndex, itemData)} index={startIndex + arrayIndex} style={boxStyle}/>\n ))}\n </VirtualContainer>\n </VirtualContainer>\n );\n}\n\nexport default DisplayList;\n","import React, { Fragment } from \"react\";\nimport { ItemOffsetMapping, DisplayBaseItemProps, DisplayBaseProps } from './VirtualBase';\nimport { getRangeToRender, getGridTemplate } from './VirtualCommon';\nimport { VirtualContainer } from './VirtualContainer';\n\n/**\n * Props accepted by {@link DisplayGridItem}\n */\nexport interface DisplayGridItemProps extends DisplayBaseItemProps {\n /** Row index of item in the grid being rendered */\n rowIndex: number,\n\n /** Column index of item in the grid being rendered */\n columnIndex: number,\n}\n\n/**\n * Type of item in a {@link DisplayGrid}\n *\n * Must be passed as a child to {@link DisplayGrid}. \n * Accepts props defined by {@link DisplayGridItemProps}.\n * Component must pass {@link DisplayBaseItemProps.style} to whatever it renders. \n * \n * @example Basic implementation\n * ```\n * const Row = ({ index, style }: { index: number, style: React.CSSProperties }) => (\n * <div className=\"row\" style={style}>\n * { index }\n * </div>\n * );\n * ```\n */\nexport type DisplayGridItem = React.ComponentType<DisplayGridItemProps>;\n\n/**\n * Props accepted by {@link DisplayGrid}\n */\nexport interface DisplayGridProps extends DisplayBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayGridItem} interface. */\n children: DisplayGridItem,\n\n /** Number of rows in the grid */\n rowCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each row in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n rowOffsetMapping: ItemOffsetMapping,\n\n /** Number of columns in the grid */\n columnCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each column in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n columnOffsetMapping: ItemOffsetMapping,\n\n /** Vertical offset to start of displayed content */\n rowOffset: number,\n\n /** Horizontal offset to start of displayed content */\n columnOffset: number,\n\n /**\n * Function that defines the key to use for each item given row and column index and value of {@link DisplayBaseProps.itemData}.\n * @defaultValue\n * ```ts\n * (rowIndex, columnIndex, _data) => `${rowIndex}:${columnIndex}`\n * ```\n */\n itemKey?: (rowIndex: number, columnIndex: number, data: unknown) => React.Key,\n}\n\nconst defaultItemKey = (rowIndex: number, columnIndex: number, _data: unknown) => `${rowIndex}:${columnIndex}`;\n\nconst boxStyle: React.CSSProperties = { boxSizing: 'border-box' };\n\n/**\n * Displays a window onto the contents of a virtualized grid starting from `rowOffset`, `columnOffset`.\n * \n * Accepts props defined by {@link DisplayGridProps}. \n * You must pass a single instance of {@link DisplayGridItem} as a child.\n * @group Components\n */\nexport function DisplayGrid(props: DisplayGridProps) {\n const { width, height, rowCount, rowOffsetMapping, columnCount, columnOffsetMapping, className, innerClassName, \n rowOffset: rowRenderOffset, columnOffset: colRenderOffset, children,\n itemData, itemKey = defaultItemKey, outerRender, innerRender, isScrolling } = props;\n\n const [rowStartIndex, rowStartOffset, rowRenderSize, rowSizes] = getRangeToRender(rowCount, rowOffsetMapping, height, rowRenderOffset);\n const rowTemplate = getGridTemplate(rowSizes);\n\n const [colStartIndex, colStartOffset, colRenderSize, colSizes] = getRangeToRender(columnCount, columnOffsetMapping, width, colRenderOffset);\n const colTemplate = getGridTemplate(colSizes);\n\n const rowOffset = rowStartOffset - rowRenderOffset;\n const colOffset = colStartOffset - colRenderOffset;\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualContainer className={className} render={outerRender}\n style={{ position: \"relative\", height, width, overflow: \"hidden\", willChange: \"transform\" }}>\n <VirtualContainer className={innerClassName} render={innerRender}\n style={{ position: 'absolute',\n display: 'grid',\n gridTemplateColumns: colTemplate,\n gridTemplateRows: rowTemplate,\n top: rowOffset, \n left: colOffset, \n height: rowRenderSize, \n width: colRenderSize }}>\n {rowSizes.map((_rowSize, rowIndex) => (\n <Fragment key={itemKey(rowStartIndex + rowIndex, 0, itemData)}>\n {colSizes.map((_size, colIndex) => (\n <ChildVar data={itemData} isScrolling={isScrolling} \n key={itemKey(rowStartIndex + rowIndex, colStartIndex + colIndex, itemData)} \n rowIndex={rowStartIndex + rowIndex} columnIndex={colStartIndex + colIndex} style={boxStyle}/>\n ))}\n </Fragment>\n ))}\n </VirtualContainer>\n </VirtualContainer>\n );\n}\n\nexport default DisplayGrid;\n","import { ItemOffsetMapping, ScrollToOption } from './VirtualBase';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Custom ref handle returned by {@link VirtualGrid} that exposes imperative methods\n * \n * Use `React.useRef<VirtualGridProxy>(null)` to create a ref.\n */\nexport interface VirtualGridProxy {\n /**\n * Scrolls the list to the specified row and column in pixels\n */\n scrollTo(rowOffset?: number, columnOffset?: number): void;\n\n /**\n * Scrolls the list so that the specified item is visible\n * @param rowIndex - Row of item to scroll to\n * @param columnIndex - Column of item to scroll to\n * @param option - Where to {@link ScrollToOption | position} the item within the viewport\n */\n scrollToItem(rowIndex?: number, columnIndex?: number, option?: ScrollToOption): void;\n\n /** Exposes DOM clientWidth property */\n get clientWidth(): number;\n\n /** Exposes DOM clientHeight property */\n get clientHeight(): number;\n}\n\n/** Range to scroll to in one dimension specified as (offset,size). May be undefined if no need to scroll. */\nexport type ScrollRange = [ offset: number|undefined, size: number|undefined ];\n\n/**\n * Returns the {@link ScrollRange} corresponding to a specified item.\n * \n * Used internally to implement {@link VirtualGridProxy.scrollToItem}. Can be used directly for \n * advanced customization scenarios.\n */\nexport function getRangeToScroll(index: number | undefined, mapping: ItemOffsetMapping): ScrollRange {\n if (index === undefined)\n return [undefined, undefined];\n\n return [mapping.itemOffset(index), mapping.itemSize(index)];\n}\n\n/**\n * Same logic as {@link VirtualGridProxy.scrollToItem} usable with your own {@link VirtualScroll}\n * \n * You're encouraged to put together your own combination of {@link VirtualScroll} and {@link DisplayGrid} for\n * advanced customization scenarios. This function provides `ScrollToItem` functionality for use with your own {@link VirtualScroll}.\n */\nexport function virtualGridScrollToItem(scrollRef: React.RefObject<VirtualScrollProxy>, rowOffsetMapping: ItemOffsetMapping, \n columnOffsetMapping: ItemOffsetMapping, rowIndex?: number, columnIndex?: number, option?: ScrollToOption) {\n\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n const [rowOffset, rowSize] = getRangeToScroll(rowIndex, rowOffsetMapping);\n const [colOffset, colSize] = getRangeToScroll(columnIndex, columnOffsetMapping);\n\n scroll.scrollToArea(rowOffset, rowSize, colOffset, colSize, option);\n}\n","import React from \"react\";\nimport { ItemOffsetMapping, VirtualBaseProps, ScrollToOption } from './VirtualBase';\nimport { DisplayGrid, DisplayGridItem } from './DisplayGrid';\nimport { VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScroll } from './VirtualScroll';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\nimport { virtualGridScrollToItem, VirtualGridProxy } from './VirtualGridProxy';\nimport { AutoSizer } from './AutoSizer';\nimport { ScrollState } from './useVirtualScroll';\n\n/**\n * Props accepted by {@link VirtualGrid}\n */\nexport interface VirtualGridProps extends VirtualBaseProps {\n /** Component used as a template to render items in the grid. Must implement {@link DisplayGridItem} interface. */\n children: DisplayGridItem,\n\n /** Number of rows in the grid */\n rowCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each row in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n rowOffsetMapping: ItemOffsetMapping,\n\n /** Number of columns in the grid */\n columnCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each column in the grid\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n columnOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given row and column index and value of {@link VirtualBaseProps.itemData}.\n * @defaultValue\n * ```ts\n * (rowIndex, columnIndex, _data) => `${rowIndex}:${columnIndex}`\n * ```\n */\n itemKey?: (rowIndex: number, columnIndex: number, data: unknown) => React.Key,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param rowOffset - Resulting overall row offset. Can be passed to {@link ItemOffsetMapping} to determine first row.\n * @param columnOffset - Resulting overall column offset. Can be passed to {@link ItemOffsetMapping} to determine first column.\n * @param newRowScrollState - New {@link ScrollState} for rows that will be used for rendering.\n * @param newColumnScrollState - New {@link ScrollState} for columns that will be used for rendering.\n */\n onScroll?: (rowOffset: number, columnOffset: number, newRowScrollState: ScrollState, newColumnScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualGrid} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link DisplayGrid} within {@link VirtualGrid} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Virtual Scrolling Grid\n * \n * Accepts props defined by {@link VirtualGridProps}. \n * Refs are forwarded to {@link VirtualGridProxy}. \n * You must pass a single instance of {@link DisplayGridItem} as a child.\n * @group Components\n */\nexport const VirtualGrid = React.forwardRef<VirtualGridProxy, VirtualGridProps>(function VirtualGrid(props, ref) {\n const { rowCount, rowOffsetMapping, columnCount, columnOffsetMapping, children, \n innerClassName, innerRender, itemData, itemKey, onScroll: onScrollCallback, ...scrollProps } = props;\n\n // Total size is same as offset to item one off the end\n const totalRowSize = rowOffsetMapping.itemOffset(rowCount);\n const totalColumnSize = columnOffsetMapping.itemOffset(columnCount);\n\n const scrollRef = React.useRef<VirtualScrollProxy>(null);\n\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(rowOffset?: number, columnOffset?: number): void {\n const scroll = scrollRef.current;\n /* istanbul ignore else */\n if (scroll)\n scroll.scrollTo(rowOffset, columnOffset);\n },\n\n scrollToItem(rowIndex?: number, columnIndex?: number, option?: ScrollToOption): void {\n virtualGridScrollToItem(scrollRef, rowOffsetMapping, columnOffsetMapping, rowIndex, columnIndex, option);\n },\n\n get clientWidth(): number {\n return scrollRef.current ? scrollRef.current.clientWidth : /* istanbul ignore next */ 0;\n },\n\n get clientHeight(): number {\n return scrollRef.current ? scrollRef.current.clientHeight : /* istanbul ignore next */ 0;\n }\n }\n }, [ rowOffsetMapping, columnOffsetMapping ]);\n\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do. \n const ChildVar = children;\n\n return (\n <VirtualScroll\n ref={scrollRef}\n {...scrollProps}\n scrollHeight={totalRowSize}\n scrollWidth={totalColumnSize}\n onScroll={(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {\n if (onScrollCallback)\n onScrollCallback(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState);\n }}>\n {({ isScrolling, verticalOffset, horizontalOffset }) => (\n <AutoSizer style={{ height: '100%', width: '100%' }}>\n {({height,width}) => (\n <DisplayGrid\n innerClassName={innerClassName}\n innerRender={innerRender}\n rowOffset={verticalOffset}\n columnOffset={horizontalOffset}\n height={height}\n rowCount={rowCount}\n columnCount={columnCount}\n itemData={itemData}\n itemKey={itemKey}\n isScrolling={isScrolling}\n rowOffsetMapping={rowOffsetMapping}\n columnOffsetMapping={columnOffsetMapping}\n width={width}>\n {ChildVar}\n </DisplayGrid>\n )}\n </AutoSizer>\n )}\n </VirtualScroll>\n );\n});\n\nexport default VirtualGrid;\n","import { ItemOffsetMapping, ScrollToOption } from './VirtualBase';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\n\n/**\n * Custom ref handle returned by {@link VirtualList} that exposes imperative methods\n * \n * Use `React.useRef<VirtualListProxy>(null)` to create a ref.\n */\nexport interface VirtualListProxy {\n /**\n * Scrolls the list to the specified offset in pixels\n * @param offset - Offset to scroll to\n */\n scrollTo(offset: number): void;\n\n /**\n * Scrolls the list so that the specified item is visible\n * @param index - Index of item to scroll to\n * @param option - Where to {@link ScrollToOption | position} the item within the viewport\n */\n scrollToItem(index: number, option?: ScrollToOption): void;\n}\n\n/**\n * Same logic as {@link VirtualListProxy.scrollToItem} usable with your own {@link VirtualScroll}\n * \n * You're encouraged to put together your own combination of {@link VirtualScroll} and {@link DisplayList} for\n * advanced customization scenarios. This function provides `ScrollToItem` functionality for use with your own {@link VirtualScroll}.\n */\nexport function virtualListScrollToItem(scrollRef: React.RefObject<VirtualScrollProxy>, itemOffsetMapping: ItemOffsetMapping, isVertical: boolean,\n index: number, option?: ScrollToOption) {\n\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n const itemOffset = itemOffsetMapping.itemOffset(index);\n const itemSize = itemOffsetMapping.itemSize(index);\n\n if (isVertical)\n scroll.scrollToArea(itemOffset, itemSize, undefined, undefined, option);\n else\n scroll.scrollToArea(undefined, undefined, itemOffset, itemSize, option);\n}","import React from \"react\";\nimport { ItemOffsetMapping, VirtualBaseProps, ScrollToOption, ScrollLayout } from './VirtualBase';\nimport { DisplayList, DisplayListItem } from './DisplayList';\nimport { VirtualContainerRender } from './VirtualContainer';\nimport { VirtualScroll } from './VirtualScroll';\nimport { VirtualScrollProxy } from './VirtualScrollProxy';\nimport { virtualListScrollToItem, VirtualListProxy } from './VirtualListProxy';\nimport { AutoSizer } from './AutoSizer';\nimport { ScrollState } from './useVirtualScroll';\n\n/**\n * Props accepted by {@link VirtualList}\n */\nexport interface VirtualListProps extends VirtualBaseProps {\n /** Component used as a template to render items in the list. Must implement {@link DisplayListItem} interface. */\n children: DisplayListItem,\n\n /** Number of items in the list */\n itemCount: number,\n\n /** \n * Implementation of {@link ItemOffsetMapping} interface that defines size and offset to each item in the list\n * \n * Use {@link useFixedSizeItemOffsetMapping} or {@link useVariableSizeItemOffsetMapping} to create implementations\n * for common cases.\n */\n itemOffsetMapping: ItemOffsetMapping,\n\n /**\n * Function that defines the key to use for each item given item index and value of {@link VirtualBaseProps.itemData}.\n * @defaultValue `(index, _data) => index`\n */\n itemKey?: (index: number, data: unknown) => React.Key,\n\n /**\n * Choice of 'vertical' or 'horizontal' layouts\n * @defaultValue 'vertical'\n */\n layout?: ScrollLayout,\n\n /**\n * Callback after a scroll event has been processed and state updated but before rendering\n * @param offset - Resulting overall offset. Can be passed to {@link ItemOffsetMapping} to determine top item.\n * @param newScrollState - New {@link ScrollState} that will be used for rendering.\n */\n onScroll?: (offset: number, newScrollState: ScrollState) => void;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link VirtualList} outer container. */\n outerRender?: VirtualContainerRender;\n\n /** Render prop implementing {@link VirtualContainerRender}. Used to customize {@link DisplayList} within {@link VirtualList} inner container. */\n innerRender?: VirtualContainerRender;\n}\n\n\n\n// Using a named function rather than => so that the name shows up in React Developer Tools\n/**\n * Virtual Scrolling List\n * \n * Accepts props defined by {@link VirtualListProps}. \n * Refs are forwarded to {@link VirtualListProxy}. \n * You must pass a single instance of {@link DisplayListItem} as a child.\n * @group Components\n */\nexport const VirtualList = React.forwardRef<VirtualListProxy, VirtualListProps>(function VirtualList(props, ref) {\n const { itemCount, itemOffsetMapping, children, layout = 'vertical', onScroll: onScrollCallback,\n innerClassName, innerRender, itemData, itemKey, ...scrollProps } = props;\n\n // Total size is same as offset to item one off the end\n const renderSize = itemOffsetMapping.itemOffset(itemCount);\n\n const scrollRef = React.useRef<VirtualScrollProxy>(null);\n const isVertical = layout === 'vertical';\n\n React.useImperativeHandle(ref, () => {\n return {\n scrollTo(offset: number): void {\n const scroll = scrollRef.current;\n /* istanbul ignore if */\n if (!scroll)\n return;\n\n if (isVertical)\n scroll.scrollTo(offset, undefined);\n else\n scroll.scrollTo(undefined, offset);\n },\n\n scrollToItem(index: number, option?: ScrollToOption): void {\n virtualListScrollToItem(scrollRef, itemOffsetMapping, isVertical, index, option);\n }\n }\n }, [ itemOffsetMapping, isVertical ]);\n\n // We can decide the JSX child type at runtime as long as we use a variable that uses the same capitalized\n // naming convention as components do.\n const ChildVar = children;\n\n return (\n <VirtualScroll\n ref={scrollRef}\n {...scrollProps}\n scrollHeight={isVertical ? renderSize : undefined}\n scrollWidth={isVertical ? undefined : renderSize}\n onScroll={(verticalOffset, horizontalOffset, verticalScrollState, horizontalScrollState) => {\n const newOffset = isVertical ? verticalOffset : horizontalOffset;\n if (onScrollCallback)\n onScrollCallback(newOffset, isVertical ? verticalScrollState : horizontalScrollState);\n }}>\n {({ isScrolling, verticalOffset, horizontalOffset }) => (\n <AutoSizer style={{ height: '100%', width: '100%' }}>\n {({height,width}) => (\n <DisplayList\n innerClassName={innerClassName}\n innerRender={innerRender}\n layout={layout}\n offset={isVertical ? verticalOffset : horizontalOffset}\n height={height}\n itemCount={itemCount}\n itemData={itemData}\n itemKey={itemKey}\n isScrolling={isScrolling}\n itemOffsetMapping={itemOffsetMapping}\n width={width}>\n {ChildVar}\n </DisplayList>\n )}\n </AutoSizer>\n )}\n </VirtualScroll>\n );\n});\n\nexport default VirtualList;\n","import { ItemOffsetMapping } from './VirtualBase';\n\nclass FixedSizeItemOffsetMapping implements ItemOffsetMapping {\n constructor (itemSize: number) {\n this.fixedItemSize = itemSize;\n }\n\n itemSize(_itemIndex: number): number {\n return this.fixedItemSize;\n }\n\n itemOffset(itemIndex: number): number {\n return itemIndex * this.fixedItemSize;\n }\n\n offsetToItem(offset: number): [itemIndex: number, startOffset: number] {\n const itemIndex = Math.floor(offset / this.fixedItemSize);\n const startOffset = itemIndex * this.fixedItemSize;\n\n return [itemIndex, startOffset];\n }\n\n fixedItemSize: number;\n}\n\n/**\n * Returns an instance of {@link ItemOffsetMapping} suitable for use when all items have a fixed size.\n * \n * @param itemSize - Size to use for all items\n */\nexport function useFixedSizeItemOffsetMapping(itemSize: number): ItemOffsetMapping {\n return new FixedSizeItemOffsetMapping(itemSize);\n}\n\nexport default useFixedSizeItemOffsetMapping;\n","import { ItemOffsetMapping } from './VirtualBase';\n\nclass VariableSizeItemOffsetMapping implements ItemOffsetMapping {\n constructor (defaultItemSize: number, sizes: number[]) {\n this.defaultItemSize = defaultItemSize;\n this.sizes = sizes;\n }\n\n itemSize(itemIndex: number): number {\n return (itemIndex < this.sizes.length) ? this.sizes[itemIndex] : this.defaultItemSize;\n }\n\n itemOffset(itemIndex: number): number {\n let offset = 0;\n let length = this.sizes.length;\n if (itemIndex > length) {\n const numDefaultSize = itemIndex - length;\n offset = numDefaultSize * this.defaultItemSize;\n } else {\n length = itemIndex;\n }\n \n for (let i = 0; i < length; i ++)\n {\n offset += this.sizes[i];\n }\n\n return offset;\n }\n\n offsetToItem(offset: number): [itemIndex: number, startOffset: number] {\n let startOffset = 0;\n const length = this.sizes.length;\n for (let i = 0; i < length; i ++) {\n const size = this.sizes[i];\n if (startOffset + size > offset) {\n return [i, startOffset];\n }\n startOffset += size;\n }\n\n const itemIndex = Math.floor((offset - startOffset) / this.defaultItemSize);\n startOffset += itemIndex * this.defaultItemSize;\n\n return [itemIndex+length, startOffset];\n }\n\n defaultItemSize: number;\n sizes: number[];\n}\n\n/**\n * Returns an instance of {@link ItemOffsetMapping} suitable for use when initial items have variable sizes.\n * \n * @param defaultItemSize - Size to use for all other items\n * @param sizes - Array of sizes to use for the initial items, one size per item\n */\nexport function useVariableSizeItemOffsetMapping(defaultItemSize: number, sizes?: number[]): ItemOffsetMapping {\n return new VariableSizeItemOffsetMapping(defaultItemSize, sizes || []);\n}\n\nexport default useVariableSizeItemOffsetMapping;"],"names":["_jsx","useIsScrolling","useIsScrollingHook","_jsxs","defaultItemKey","boxStyle"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@candidstartup/react-virtual-scroll",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.1",
|
|
5
5
|
"description": "Modern React components for lists and grids that scale to trillions of rows and columns",
|
|
6
6
|
"author": "Tim Wiegand <tim.wiegand@thecandidstartup.org>",
|
|
7
7
|
"license": "BSD-3-Clause",
|
|
@@ -59,5 +59,5 @@
|
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"react": "^18.2.0"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "b0c5ff0cc859dd86af7b18231563a3440b380737"
|
|
63
63
|
}
|