{"version":3,"file":"static/js/26.e7bf62cf.js","mappings":"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","sources":["../node_modules/react-window/src/timer.js","../node_modules/react-window/src/domHelpers.js","../node_modules/react-window/src/createGridComponent.js","../node_modules/react-window/src/createListComponent.js","../node_modules/react-window/src/FixedSizeList.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js"],"sourcesContent":["// @flow\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\n\nconst hasNativePerformanceNow =\n typeof performance === 'object' && typeof performance.now === 'function';\n\nconst now = hasNativePerformanceNow\n ? () => performance.now()\n : () => Date.now();\n\nexport type TimeoutID = {|\n id: AnimationFrameID,\n|};\n\nexport function cancelTimeout(timeoutID: TimeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\n\nexport function requestTimeout(callback: Function, delay: number): TimeoutID {\n const start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n const timeoutID: TimeoutID = {\n id: requestAnimationFrame(tick),\n };\n\n return timeoutID;\n}\n","// @flow\n\nlet size: number = -1;\n\n// This utility copied from \"dom-helpers\" package.\nexport function getScrollbarSize(recalculate?: boolean = false): number {\n if (size === -1 || recalculate) {\n const div = document.createElement('div');\n const style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n\n ((document.body: any): HTMLBodyElement).appendChild(div);\n\n size = div.offsetWidth - div.clientWidth;\n\n ((document.body: any): HTMLBodyElement).removeChild(div);\n }\n\n return size;\n}\n\nexport type RTLOffsetType =\n | 'negative'\n | 'positive-descending'\n | 'positive-ascending';\n\nlet cachedRTLResult: RTLOffsetType | null = null;\n\n// TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\nexport function getRTLOffsetType(recalculate?: boolean = false): RTLOffsetType {\n if (cachedRTLResult === null || recalculate) {\n const outerDiv = document.createElement('div');\n const outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n\n const innerDiv = document.createElement('div');\n const innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n\n outerDiv.appendChild(innerDiv);\n\n ((document.body: any): HTMLBodyElement).appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n ((document.body: any): HTMLBodyElement).removeChild(outerDiv);\n\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getScrollbarSize, getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\ntype Direction = 'ltr' | 'rtl';\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n\ntype RenderComponentProps = {|\n columnIndex: number,\n data: T,\n isScrolling?: boolean,\n rowIndex: number,\n style: Object,\n|};\nexport type RenderComponent = React$ComponentType<\n $Shape>\n>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype OnItemsRenderedCallback = ({\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number,\n}) => void;\ntype OnScrollCallback = ({\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [key: string]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n columnCount: number,\n columnWidth: itemSize,\n direction: Direction,\n height: number,\n initialScrollLeft?: number,\n initialScrollTop?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemData: T,\n itemKey?: (params: {|\n columnIndex: number,\n data: T,\n rowIndex: number,\n |}) => any,\n onItemsRendered?: OnItemsRenderedCallback,\n onScroll?: OnScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanColumnCount?: number,\n overscanColumnsCount?: number, // deprecated\n overscanCount?: number, // deprecated\n overscanRowCount?: number,\n overscanRowsCount?: number, // deprecated\n rowCount: number,\n rowHeight: itemSize,\n style?: Object,\n useIsScrolling: boolean,\n width: number,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n horizontalScrollDirection: ScrollDirection,\n scrollLeft: number,\n scrollTop: number,\n scrollUpdateWasRequested: boolean,\n verticalScrollDirection: ScrollDirection,\n|};\n\ntype getItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype getEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForItemAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any,\n scrollbarSize: number\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = ({ columnIndex, data, rowIndex }) =>\n `${rowIndex}:${columnIndex}`;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsOverscanCount = null;\nlet devWarningsOverscanRowsColumnsCount = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = new WeakSet();\n devWarningsOverscanRowsColumnsCount = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createGridComponent({\n getColumnOffset,\n getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex,\n getColumnWidth,\n getEstimatedTotalHeight,\n getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment,\n getRowHeight,\n getRowOffset,\n getRowStartIndexForOffset,\n getRowStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getColumnOffset: getItemOffset,\n getColumnStartIndexForOffset: GetStartIndexForOffset,\n getColumnStopIndexForStartIndex: GetStopIndexForStartIndex,\n getColumnWidth: getItemSize,\n getEstimatedTotalHeight: getEstimatedTotalSize,\n getEstimatedTotalWidth: getEstimatedTotalSize,\n getOffsetForColumnAndAlignment: GetOffsetForItemAndAlignment,\n getOffsetForRowAndAlignment: GetOffsetForItemAndAlignment,\n getRowOffset: getItemOffset,\n getRowHeight: getItemSize,\n getRowStartIndexForOffset: GetStartIndexForOffset,\n getRowStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class Grid extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n _outerRef: ?HTMLDivElement;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft:\n typeof this.props.initialScrollLeft === 'number'\n ? this.props.initialScrollLeft\n : 0,\n scrollTop:\n typeof this.props.initialScrollTop === 'number'\n ? this.props.initialScrollTop\n : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward',\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo({\n scrollLeft,\n scrollTop,\n }: {\n scrollLeft: number,\n scrollTop: number,\n }): void {\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(prevState => {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n return null;\n }\n\n return {\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem({\n align = 'auto',\n columnIndex,\n rowIndex,\n }: {\n align: ScrollToAlign,\n columnIndex?: number,\n rowIndex?: number,\n }): void {\n const { columnCount, height, rowCount, width } = this.props;\n const { scrollLeft, scrollTop } = this.state;\n const scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n const horizontalScrollbarSize =\n estimatedTotalWidth > width ? scrollbarSize : 0;\n const verticalScrollbarSize =\n estimatedTotalHeight > height ? scrollbarSize : 0;\n\n this.scrollTo({\n scrollLeft:\n columnIndex !== undefined\n ? getOffsetForColumnAndAlignment(\n this.props,\n columnIndex,\n align,\n scrollLeft,\n this._instanceProps,\n verticalScrollbarSize\n )\n : scrollLeft,\n scrollTop:\n rowIndex !== undefined\n ? getOffsetForRowAndAlignment(\n this.props,\n rowIndex,\n align,\n scrollTop,\n this._instanceProps,\n horizontalScrollbarSize\n )\n : scrollTop,\n });\n }\n\n componentDidMount() {\n const { initialScrollLeft, initialScrollTop } = this.props;\n\n if (this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction } = this.props;\n const { scrollLeft, scrollTop, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n const outerRef = ((this._outerRef: any): HTMLElement);\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n columnCount,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemData,\n itemKey = defaultItemKey,\n outerElementType,\n outerTagName,\n rowCount,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n const [\n columnStartIndex,\n columnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [rowStartIndex, rowStopIndex] = this._getVerticalRangeToRender();\n\n const items = [];\n if (columnCount > 0 && rowCount) {\n for (\n let rowIndex = rowStartIndex;\n rowIndex <= rowStopIndex;\n rowIndex++\n ) {\n for (\n let columnIndex = columnStartIndex;\n columnIndex <= columnStopIndex;\n columnIndex++\n ) {\n items.push(\n createElement(children, {\n columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({ columnIndex, data: itemData, rowIndex }),\n rowIndex,\n style: this._getItemStyle(rowIndex, columnIndex),\n })\n );\n }\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalHeight = getEstimatedTotalHeight(\n this.props,\n this._instanceProps\n );\n const estimatedTotalWidth = getEstimatedTotalWidth(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth,\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanColumnStartIndex: number,\n overscanColumnStopIndex: number,\n overscanRowStartIndex: number,\n overscanRowStopIndex: number,\n visibleColumnStartIndex: number,\n visibleColumnStopIndex: number,\n visibleRowStartIndex: number,\n visibleRowStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): OnItemsRenderedCallback)({\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollLeft: number,\n scrollTop: number,\n horizontalScrollDirection: ScrollDirection,\n verticalScrollDirection: ScrollDirection,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): OnScrollCallback)({\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n verticalScrollDirection,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n const { columnCount, onItemsRendered, onScroll, rowCount } = this.props;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n const [\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n ] = this._getHorizontalRangeToRender();\n const [\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex,\n ] = this._getVerticalRangeToRender();\n this._callOnItemsRendered(\n overscanColumnStartIndex,\n overscanColumnStopIndex,\n overscanRowStartIndex,\n overscanRowStopIndex,\n visibleColumnStartIndex,\n visibleColumnStopIndex,\n visibleRowStartIndex,\n visibleRowStopIndex\n );\n }\n }\n\n if (typeof onScroll === 'function') {\n const {\n horizontalScrollDirection,\n scrollLeft,\n scrollTop,\n scrollUpdateWasRequested,\n verticalScrollDirection,\n } = this.state;\n this._callOnScroll(\n scrollLeft,\n scrollTop,\n horizontalScrollDirection,\n verticalScrollDirection,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (rowIndex: number, columnIndex: number) => Object;\n _getItemStyle = (rowIndex: number, columnIndex: number): Object => {\n const { columnWidth, direction, rowHeight } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && columnWidth,\n shouldResetStyleCacheOnItemSizeChange && direction,\n shouldResetStyleCacheOnItemSizeChange && rowHeight\n );\n\n const key = `${rowIndex}:${columnIndex}`;\n\n let style;\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n const offset = getColumnOffset(\n this.props,\n columnIndex,\n this._instanceProps\n );\n const isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offset,\n right: isRtl ? offset : undefined,\n top: getRowOffset(this.props, rowIndex, this._instanceProps),\n height: getRowHeight(this.props, rowIndex, this._instanceProps),\n width: getColumnWidth(this.props, columnIndex, this._instanceProps),\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getHorizontalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanColumnCount,\n overscanColumnsCount,\n overscanCount,\n rowCount,\n } = this.props;\n const { horizontalScrollDirection, isScrolling, scrollLeft } = this.state;\n\n const overscanCountResolved: number =\n overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getColumnStartIndexForOffset(\n this.props,\n scrollLeft,\n this._instanceProps\n );\n const stopIndex = getColumnStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollLeft,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || horizontalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || horizontalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _getVerticalRangeToRender(): [number, number, number, number] {\n const {\n columnCount,\n overscanCount,\n overscanRowCount,\n overscanRowsCount,\n rowCount,\n } = this.props;\n const { isScrolling, verticalScrollDirection, scrollTop } = this.state;\n\n const overscanCountResolved: number =\n overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getRowStartIndexForOffset(\n this.props,\n scrollTop,\n this._instanceProps\n );\n const stopIndex = getRowStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollTop,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || verticalScrollDirection === 'backward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n const overscanForward =\n !isScrolling || verticalScrollDirection === 'forward'\n ? Math.max(1, overscanCountResolved)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScroll = (event: ScrollEvent): void => {\n const {\n clientHeight,\n clientWidth,\n scrollLeft,\n scrollTop,\n scrollHeight,\n scrollWidth,\n } = event.currentTarget;\n this.setState(prevState => {\n if (\n prevState.scrollLeft === scrollLeft &&\n prevState.scrollTop === scrollTop\n ) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n let calculatedScrollLeft = scrollLeft;\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n calculatedScrollLeft = Math.max(\n 0,\n Math.min(calculatedScrollLeft, scrollWidth - clientWidth)\n );\n const calculatedScrollTop = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n horizontalScrollDirection:\n prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection:\n prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1);\n });\n };\n };\n}\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n innerTagName,\n outerTagName,\n overscanColumnsCount,\n overscanCount,\n overscanRowsCount,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn(\n 'The overscanCount prop has been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (\n typeof overscanColumnsCount === 'number' ||\n typeof overscanRowsCount === 'number'\n ) {\n if (\n devWarningsOverscanRowsColumnsCount &&\n !devWarningsOverscanRowsColumnsCount.has(instance)\n ) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn(\n 'The overscanColumnsCount and overscanRowsCount props have been deprecated. ' +\n 'Please use the overscanColumnCount and overscanRowCount props instead.'\n );\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n if (typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Grids must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n }\n\n if (typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Grids must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport { cancelTimeout, requestTimeout } from './timer';\nimport { getRTLOffsetType } from './domHelpers';\n\nimport type { TimeoutID } from './timer';\n\nexport type ScrollToAlign = 'auto' | 'smart' | 'center' | 'start' | 'end';\n\ntype itemSize = number | ((index: number) => number);\n// TODO Deprecate directions \"horizontal\" and \"vertical\"\ntype Direction = 'ltr' | 'rtl' | 'horizontal' | 'vertical';\ntype Layout = 'horizontal' | 'vertical';\n\ntype RenderComponentProps = {|\n data: T,\n index: number,\n isScrolling?: boolean,\n style: Object,\n|};\ntype RenderComponent = React$ComponentType<$Shape>>;\n\ntype ScrollDirection = 'forward' | 'backward';\n\ntype onItemsRenderedCallback = ({\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number,\n}) => void;\ntype onScrollCallback = ({\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n}) => void;\n\ntype ScrollEvent = SyntheticEvent;\ntype ItemStyleCache = { [index: number]: Object };\n\ntype OuterProps = {|\n children: React$Node,\n className: string | void,\n onScroll: ScrollEvent => void,\n style: {\n [string]: mixed,\n },\n|};\n\ntype InnerProps = {|\n children: React$Node,\n style: {\n [string]: mixed,\n },\n|};\n\nexport type Props = {|\n children: RenderComponent,\n className?: string,\n direction: Direction,\n height: number | string,\n initialScrollOffset?: number,\n innerRef?: any,\n innerElementType?: string | React$AbstractComponent,\n innerTagName?: string, // deprecated\n itemCount: number,\n itemData: T,\n itemKey?: (index: number, data: T) => any,\n itemSize: itemSize,\n layout: Layout,\n onItemsRendered?: onItemsRenderedCallback,\n onScroll?: onScrollCallback,\n outerRef?: any,\n outerElementType?: string | React$AbstractComponent,\n outerTagName?: string, // deprecated\n overscanCount: number,\n style?: Object,\n useIsScrolling: boolean,\n width: number | string,\n|};\n\ntype State = {|\n instance: any,\n isScrolling: boolean,\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean,\n|};\n\ntype GetItemOffset = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetItemSize = (\n props: Props,\n index: number,\n instanceProps: any\n) => number;\ntype GetEstimatedTotalSize = (props: Props, instanceProps: any) => number;\ntype GetOffsetForIndexAndAlignment = (\n props: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype GetStartIndexForOffset = (\n props: Props,\n offset: number,\n instanceProps: any\n) => number;\ntype GetStopIndexForStartIndex = (\n props: Props,\n startIndex: number,\n scrollOffset: number,\n instanceProps: any\n) => number;\ntype InitInstanceProps = (props: Props, instance: any) => any;\ntype ValidateProps = (props: Props) => void;\n\nconst IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nconst defaultItemKey = (index: number, data: any) => index;\n\n// In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\nlet devWarningsDirection = null;\nlet devWarningsTagName = null;\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = new WeakSet();\n devWarningsTagName = new WeakSet();\n }\n}\n\nexport default function createListComponent({\n getItemOffset,\n getEstimatedTotalSize,\n getItemSize,\n getOffsetForIndexAndAlignment,\n getStartIndexForOffset,\n getStopIndexForStartIndex,\n initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange,\n validateProps,\n}: {|\n getItemOffset: GetItemOffset,\n getEstimatedTotalSize: GetEstimatedTotalSize,\n getItemSize: GetItemSize,\n getOffsetForIndexAndAlignment: GetOffsetForIndexAndAlignment,\n getStartIndexForOffset: GetStartIndexForOffset,\n getStopIndexForStartIndex: GetStopIndexForStartIndex,\n initInstanceProps: InitInstanceProps,\n shouldResetStyleCacheOnItemSizeChange: boolean,\n validateProps: ValidateProps,\n|}) {\n return class List extends PureComponent, State> {\n _instanceProps: any = initInstanceProps(this.props, this);\n _outerRef: ?HTMLDivElement;\n _resetIsScrollingTimeoutId: TimeoutID | null = null;\n\n static defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false,\n };\n\n state: State = {\n instance: this,\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset:\n typeof this.props.initialScrollOffset === 'number'\n ? this.props.initialScrollOffset\n : 0,\n scrollUpdateWasRequested: false,\n };\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n constructor(props: Props) {\n super(props);\n }\n\n static getDerivedStateFromProps(\n nextProps: Props,\n prevState: State\n ): $Shape | null {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n }\n\n scrollTo(scrollOffset: number): void {\n scrollOffset = Math.max(0, scrollOffset);\n\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n return {\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true,\n };\n }, this._resetIsScrollingDebounced);\n }\n\n scrollToItem(index: number, align: ScrollToAlign = 'auto'): void {\n const { itemCount } = this.props;\n const { scrollOffset } = this.state;\n\n index = Math.max(0, Math.min(index, itemCount - 1));\n\n this.scrollTo(\n getOffsetForIndexAndAlignment(\n this.props,\n index,\n align,\n scrollOffset,\n this._instanceProps\n )\n );\n }\n\n componentDidMount() {\n const { direction, initialScrollOffset, layout } = this.props;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentDidUpdate() {\n const { direction, layout } = this.props;\n const { scrollOffset, scrollUpdateWasRequested } = this.state;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n const outerRef = ((this._outerRef: any): HTMLElement);\n\n // TODO Deprecate direction \"horizontal\"\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n default:\n const { clientWidth, scrollWidth } = outerRef;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n }\n\n componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n }\n\n render() {\n const {\n children,\n className,\n direction,\n height,\n innerRef,\n innerElementType,\n innerTagName,\n itemCount,\n itemData,\n itemKey = defaultItemKey,\n layout,\n outerElementType,\n outerTagName,\n style,\n useIsScrolling,\n width,\n } = this.props;\n const { isScrolling } = this.state;\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const onScroll = isHorizontal\n ? this._onScrollHorizontal\n : this._onScrollVertical;\n\n const [startIndex, stopIndex] = this._getRangeToRender();\n\n const items = [];\n if (itemCount > 0) {\n for (let index = startIndex; index <= stopIndex; index++) {\n items.push(\n createElement(children, {\n data: itemData,\n key: itemKey(index, itemData),\n index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(index),\n })\n );\n }\n }\n\n // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n const estimatedTotalSize = getEstimatedTotalSize(\n this.props,\n this._instanceProps\n );\n\n return createElement(\n outerElementType || outerTagName || 'div',\n {\n className,\n onScroll,\n ref: this._outerRefSetter,\n style: {\n position: 'relative',\n height,\n width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction,\n ...style,\n },\n },\n createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%',\n },\n })\n );\n }\n\n _callOnItemsRendered: (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) => void;\n _callOnItemsRendered = memoizeOne(\n (\n overscanStartIndex: number,\n overscanStopIndex: number,\n visibleStartIndex: number,\n visibleStopIndex: number\n ) =>\n ((this.props.onItemsRendered: any): onItemsRenderedCallback)({\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n })\n );\n\n _callOnScroll: (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) => void;\n _callOnScroll = memoizeOne(\n (\n scrollDirection: ScrollDirection,\n scrollOffset: number,\n scrollUpdateWasRequested: boolean\n ) =>\n ((this.props.onScroll: any): onScrollCallback)({\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n })\n );\n\n _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n const { itemCount } = this.props;\n if (itemCount > 0) {\n const [\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex,\n ] = this._getRangeToRender();\n this._callOnItemsRendered(\n overscanStartIndex,\n overscanStopIndex,\n visibleStartIndex,\n visibleStopIndex\n );\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n const {\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested,\n } = this.state;\n this._callOnScroll(\n scrollDirection,\n scrollOffset,\n scrollUpdateWasRequested\n );\n }\n }\n\n // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n _getItemStyle: (index: number) => Object;\n _getItemStyle = (index: number): Object => {\n const { direction, itemSize, layout } = this.props;\n\n const itemStyleCache = this._getItemStyleCache(\n shouldResetStyleCacheOnItemSizeChange && itemSize,\n shouldResetStyleCacheOnItemSizeChange && layout,\n shouldResetStyleCacheOnItemSizeChange && direction\n );\n\n let style;\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n const offset = getItemOffset(this.props, index, this._instanceProps);\n const size = getItemSize(this.props, index, this._instanceProps);\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal =\n direction === 'horizontal' || layout === 'horizontal';\n\n const isRtl = direction === 'rtl';\n const offsetHorizontal = isHorizontal ? offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%',\n };\n }\n\n return style;\n };\n\n _getItemStyleCache: (_: any, __: any, ___: any) => ItemStyleCache;\n _getItemStyleCache = memoizeOne((_: any, __: any, ___: any) => ({}));\n\n _getRangeToRender(): [number, number, number, number] {\n const { itemCount, overscanCount } = this.props;\n const { isScrolling, scrollDirection, scrollOffset } = this.state;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n const startIndex = getStartIndexForOffset(\n this.props,\n scrollOffset,\n this._instanceProps\n );\n const stopIndex = getStopIndexForStartIndex(\n this.props,\n startIndex,\n scrollOffset,\n this._instanceProps\n );\n\n // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n const overscanBackward =\n !isScrolling || scrollDirection === 'backward'\n ? Math.max(1, overscanCount)\n : 1;\n const overscanForward =\n !isScrolling || scrollDirection === 'forward'\n ? Math.max(1, overscanCount)\n : 1;\n\n return [\n Math.max(0, startIndex - overscanBackward),\n Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)),\n startIndex,\n stopIndex,\n ];\n }\n\n _onScrollHorizontal = (event: ScrollEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n const { direction } = this.props;\n\n let scrollOffset = scrollLeft;\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n scrollOffset = Math.max(\n 0,\n Math.min(scrollOffset, scrollWidth - clientWidth)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _onScrollVertical = (event: ScrollEvent): void => {\n const { clientHeight, scrollHeight, scrollTop } = event.currentTarget;\n this.setState(prevState => {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n const scrollOffset = Math.max(\n 0,\n Math.min(scrollTop, scrollHeight - clientHeight)\n );\n\n return {\n isScrolling: true,\n scrollDirection:\n prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset,\n scrollUpdateWasRequested: false,\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _outerRefSetter = (ref: any): void => {\n const { outerRef } = this.props;\n\n this._outerRef = ((ref: any): HTMLDivElement);\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (\n outerRef != null &&\n typeof outerRef === 'object' &&\n outerRef.hasOwnProperty('current')\n ) {\n outerRef.current = ref;\n }\n };\n\n _resetIsScrollingDebounced = () => {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n\n this._resetIsScrollingTimeoutId = requestTimeout(\n this._resetIsScrolling,\n IS_SCROLLING_DEBOUNCE_INTERVAL\n );\n };\n\n _resetIsScrolling = () => {\n this._resetIsScrollingTimeoutId = null;\n\n this.setState({ isScrolling: false }, () => {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n this._getItemStyleCache(-1, null);\n });\n };\n };\n}\n\n// NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nconst validateSharedProps = (\n {\n children,\n direction,\n height,\n layout,\n innerTagName,\n outerTagName,\n width,\n }: Props,\n { instance }: State\n): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn(\n 'The innerTagName and outerTagName props have been deprecated. ' +\n 'Please use the innerElementType and outerElementType props instead.'\n );\n }\n }\n\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn(\n 'The direction prop should be either \"ltr\" (default) or \"rtl\". ' +\n 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.'\n );\n }\n break;\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"direction\" prop has been specified. ' +\n 'Value should be either \"ltr\" or \"rtl\". ' +\n `\"${direction}\" was specified.`\n );\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n default:\n throw Error(\n 'An invalid \"layout\" prop has been specified. ' +\n 'Value should be either \"horizontal\" or \"vertical\". ' +\n `\"${layout}\" was specified.`\n );\n }\n\n if (children == null) {\n throw Error(\n 'An invalid \"children\" prop has been specified. ' +\n 'Value should be a React component. ' +\n `\"${children === null ? 'null' : typeof children}\" was specified.`\n );\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error(\n 'An invalid \"width\" prop has been specified. ' +\n 'Horizontal lists must specify a number for width. ' +\n `\"${width === null ? 'null' : typeof width}\" was specified.`\n );\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error(\n 'An invalid \"height\" prop has been specified. ' +\n 'Vertical lists must specify a number for height. ' +\n `\"${height === null ? 'null' : typeof height}\" was specified.`\n );\n }\n }\n};\n","// @flow\n\nimport createListComponent from './createListComponent';\n\nimport type { Props, ScrollToAlign } from './createListComponent';\n\nconst FixedSizeList = createListComponent({\n getItemOffset: ({ itemSize }: Props, index: number): number =>\n index * ((itemSize: any): number),\n\n getItemSize: ({ itemSize }: Props, index: number): number =>\n ((itemSize: any): number),\n\n getEstimatedTotalSize: ({ itemCount, itemSize }: Props) =>\n ((itemSize: any): number) * itemCount,\n\n getOffsetForIndexAndAlignment: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n index: number,\n align: ScrollToAlign,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const size = (((isHorizontal ? width : height): any): number);\n const lastItemOffset = Math.max(\n 0,\n itemCount * ((itemSize: any): number) - size\n );\n const maxOffset = Math.min(\n lastItemOffset,\n index * ((itemSize: any): number)\n );\n const minOffset = Math.max(\n 0,\n index * ((itemSize: any): number) - size + ((itemSize: any): number)\n );\n\n if (align === 'smart') {\n if (\n scrollOffset >= minOffset - size &&\n scrollOffset <= maxOffset + size\n ) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n case 'end':\n return minOffset;\n case 'center': {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n const middleOffset = Math.round(\n minOffset + (maxOffset - minOffset) / 2\n );\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n }\n },\n\n getStartIndexForOffset: (\n { itemCount, itemSize }: Props,\n offset: number\n ): number =>\n Math.max(\n 0,\n Math.min(itemCount - 1, Math.floor(offset / ((itemSize: any): number)))\n ),\n\n getStopIndexForStartIndex: (\n { direction, height, itemCount, itemSize, layout, width }: Props,\n startIndex: number,\n scrollOffset: number\n ): number => {\n // TODO Deprecate direction \"horizontal\"\n const isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n const offset = startIndex * ((itemSize: any): number);\n const size = (((isHorizontal ? width : height): any): number);\n const numVisibleItems = Math.ceil(\n (size + scrollOffset - offset) / ((itemSize: any): number)\n );\n return Math.max(\n 0,\n Math.min(\n itemCount - 1,\n startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n )\n );\n },\n\n initInstanceProps(props: Props): any {\n // Noop\n },\n\n shouldResetStyleCacheOnItemSizeChange: true,\n\n validateProps: ({ itemSize }: Props): void => {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error(\n 'An invalid \"itemSize\" prop has been specified. ' +\n 'Value should be a number. ' +\n `\"${itemSize === null ? 'null' : typeof itemSize}\" was specified.`\n );\n }\n }\n },\n});\n\nexport default FixedSizeList;\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c