virtual-scroller 1.14.0 → 1.15.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.
Files changed (235) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +403 -254
  3. package/bundle/index-dom-bypass.html +197 -0
  4. package/bundle/index-dom-grid.html +203 -0
  5. package/bundle/index-dom-scrollableContainer.html +214 -0
  6. package/bundle/index-dom-tbody-scrollableContainer.html +81 -0
  7. package/bundle/index-dom-tbody.html +65 -0
  8. package/bundle/index-dom.html +114 -84
  9. package/bundle/index-react-bypass.html +194 -0
  10. package/bundle/{index-bypass.html → index-react-grid.html} +122 -120
  11. package/bundle/index-react-hook.html +209 -0
  12. package/bundle/index-react-scrollableContainer.html +207 -0
  13. package/bundle/index-react-strictMode.html +193 -0
  14. package/bundle/index-react-tbody-scrollableContainer.html +94 -0
  15. package/bundle/index-react-tbody.html +78 -0
  16. package/bundle/{messages.js → items.js} +1 -1
  17. package/bundle/lib/babel.min.js +25 -0
  18. package/bundle/lib/prop-types.min.js +1 -0
  19. package/bundle/lib/react-dom.development.js +29924 -0
  20. package/bundle/lib/react-dom.production.min.js +267 -0
  21. package/bundle/lib/react.development.js +3343 -0
  22. package/bundle/lib/react.production.min.js +31 -0
  23. package/bundle/style.base.css +33 -0
  24. package/{website/style.css → bundle/style.list.css} +10 -43
  25. package/bundle/style.list.grid.css +23 -0
  26. package/bundle/virtual-scroller-dom.js +1 -1
  27. package/bundle/virtual-scroller-dom.js.map +1 -1
  28. package/bundle/virtual-scroller-react.js +1 -1
  29. package/bundle/virtual-scroller-react.js.map +1 -1
  30. package/bundle/virtual-scroller.js +1 -1
  31. package/bundle/virtual-scroller.js.map +1 -1
  32. package/commonjs/BeforeResize.js +1 -2
  33. package/commonjs/BeforeResize.js.map +1 -1
  34. package/commonjs/DOM/VirtualScroller.js +7 -13
  35. package/commonjs/DOM/VirtualScroller.js.map +1 -1
  36. package/commonjs/DOM/tbody.js +6 -6
  37. package/commonjs/DOM/tbody.js.map +1 -1
  38. package/commonjs/ItemHeights.js +10 -13
  39. package/commonjs/ItemHeights.js.map +1 -1
  40. package/commonjs/Layout.defaults.js +21 -0
  41. package/commonjs/Layout.defaults.js.map +1 -0
  42. package/commonjs/Layout.js +75 -64
  43. package/commonjs/Layout.js.map +1 -1
  44. package/commonjs/Layout.test.js +8 -4
  45. package/commonjs/Layout.test.js.map +1 -1
  46. package/commonjs/VirtualScroller.constructor.js +38 -4
  47. package/commonjs/VirtualScroller.constructor.js.map +1 -1
  48. package/commonjs/VirtualScroller.items.js +50 -4
  49. package/commonjs/VirtualScroller.items.js.map +1 -1
  50. package/commonjs/VirtualScroller.js +23 -14
  51. package/commonjs/VirtualScroller.js.map +1 -1
  52. package/commonjs/VirtualScroller.layout.js +40 -29
  53. package/commonjs/VirtualScroller.layout.js.map +1 -1
  54. package/commonjs/VirtualScroller.onContainerResize.js +1 -2
  55. package/commonjs/VirtualScroller.onContainerResize.js.map +1 -1
  56. package/commonjs/VirtualScroller.state.js +10 -9
  57. package/commonjs/VirtualScroller.state.js.map +1 -1
  58. package/commonjs/VirtualScroller.verticalSpacing.js +39 -6
  59. package/commonjs/VirtualScroller.verticalSpacing.js.map +1 -1
  60. package/commonjs/react/VirtualScroller.js +124 -131
  61. package/commonjs/react/VirtualScroller.js.map +1 -1
  62. package/commonjs/react/useClassName.js +2 -2
  63. package/commonjs/react/useClassName.js.map +1 -1
  64. package/commonjs/react/useCreateVirtualScroller.js +64 -0
  65. package/commonjs/react/useCreateVirtualScroller.js.map +1 -0
  66. package/commonjs/react/useInstanceMethods.js +4 -4
  67. package/commonjs/react/useInstanceMethods.js.map +1 -1
  68. package/commonjs/react/useItemKeys.js +28 -5
  69. package/commonjs/react/useItemKeys.js.map +1 -1
  70. package/commonjs/react/useMergeRefs.js +52 -0
  71. package/commonjs/react/useMergeRefs.js.map +1 -0
  72. package/commonjs/react/useOnItemHeightDidChange.js +28 -12
  73. package/commonjs/react/useOnItemHeightDidChange.js.map +1 -1
  74. package/commonjs/react/useSetItemState.js +31 -12
  75. package/commonjs/react/useSetItemState.js.map +1 -1
  76. package/commonjs/react/{useVirtualScrollerStartStop.js → useStartStopVirtualScroller.js} +1 -1
  77. package/commonjs/react/{useVirtualScrollerStartStop.js.map → useStartStopVirtualScroller.js.map} +1 -1
  78. package/commonjs/react/useState.js +9 -9
  79. package/commonjs/react/useState.js.map +1 -1
  80. package/commonjs/react/{useStateNoStaleBug.js → useStateWithRepeatableRead.js} +3 -3
  81. package/commonjs/react/useStateWithRepeatableRead.js.map +1 -0
  82. package/commonjs/react/useStyle.js +28 -4
  83. package/commonjs/react/useStyle.js.map +1 -1
  84. package/commonjs/react/useValidateTableBodyItemsContainer.js +24 -0
  85. package/commonjs/react/useValidateTableBodyItemsContainer.js.map +1 -0
  86. package/commonjs/react/useVirtualScroller.js +142 -42
  87. package/commonjs/react/useVirtualScroller.js.map +1 -1
  88. package/commonjs/test/ItemsContainer.js +10 -10
  89. package/commonjs/test/ItemsContainer.js.map +1 -1
  90. package/commonjs/test/VirtualScroller.js +25 -10
  91. package/commonjs/test/VirtualScroller.js.map +1 -1
  92. package/dom/index.d.ts +6 -5
  93. package/index.d.ts +19 -8
  94. package/modules/BeforeResize.js +1 -2
  95. package/modules/BeforeResize.js.map +1 -1
  96. package/modules/DOM/VirtualScroller.js +7 -13
  97. package/modules/DOM/VirtualScroller.js.map +1 -1
  98. package/modules/DOM/tbody.js +4 -4
  99. package/modules/DOM/tbody.js.map +1 -1
  100. package/modules/ItemHeights.js +11 -14
  101. package/modules/ItemHeights.js.map +1 -1
  102. package/modules/Layout.defaults.js +11 -0
  103. package/modules/Layout.defaults.js.map +1 -0
  104. package/modules/Layout.js +74 -64
  105. package/modules/Layout.js.map +1 -1
  106. package/modules/Layout.test.js +8 -4
  107. package/modules/Layout.test.js.map +1 -1
  108. package/modules/VirtualScroller.constructor.js +37 -4
  109. package/modules/VirtualScroller.constructor.js.map +1 -1
  110. package/modules/VirtualScroller.items.js +51 -5
  111. package/modules/VirtualScroller.items.js.map +1 -1
  112. package/modules/VirtualScroller.js +23 -14
  113. package/modules/VirtualScroller.js.map +1 -1
  114. package/modules/VirtualScroller.layout.js +40 -29
  115. package/modules/VirtualScroller.layout.js.map +1 -1
  116. package/modules/VirtualScroller.onContainerResize.js +1 -2
  117. package/modules/VirtualScroller.onContainerResize.js.map +1 -1
  118. package/modules/VirtualScroller.state.js +10 -9
  119. package/modules/VirtualScroller.state.js.map +1 -1
  120. package/modules/VirtualScroller.verticalSpacing.js +38 -6
  121. package/modules/VirtualScroller.verticalSpacing.js.map +1 -1
  122. package/modules/react/VirtualScroller.js +122 -124
  123. package/modules/react/VirtualScroller.js.map +1 -1
  124. package/modules/react/useClassName.js +3 -3
  125. package/modules/react/useClassName.js.map +1 -1
  126. package/modules/react/useCreateVirtualScroller.js +53 -0
  127. package/modules/react/useCreateVirtualScroller.js.map +1 -0
  128. package/modules/react/useInstanceMethods.js +4 -4
  129. package/modules/react/useInstanceMethods.js.map +1 -1
  130. package/modules/react/useItemKeys.js +28 -5
  131. package/modules/react/useItemKeys.js.map +1 -1
  132. package/modules/react/useMergeRefs.js +44 -0
  133. package/modules/react/useMergeRefs.js.map +1 -0
  134. package/modules/react/useOnItemHeightDidChange.js +28 -12
  135. package/modules/react/useOnItemHeightDidChange.js.map +1 -1
  136. package/modules/react/useSetItemState.js +31 -12
  137. package/modules/react/useSetItemState.js.map +1 -1
  138. package/modules/react/{useVirtualScrollerStartStop.js → useStartStopVirtualScroller.js} +1 -1
  139. package/modules/react/{useVirtualScrollerStartStop.js.map → useStartStopVirtualScroller.js.map} +1 -1
  140. package/modules/react/useState.js +9 -9
  141. package/modules/react/useState.js.map +1 -1
  142. package/modules/react/{useStateNoStaleBug.js → useStateWithRepeatableRead.js} +2 -2
  143. package/modules/react/useStateWithRepeatableRead.js.map +1 -0
  144. package/modules/react/useStyle.js +27 -4
  145. package/modules/react/useStyle.js.map +1 -1
  146. package/modules/react/useValidateTableBodyItemsContainer.js +16 -0
  147. package/modules/react/useValidateTableBodyItemsContainer.js.map +1 -0
  148. package/modules/react/useVirtualScroller.js +136 -42
  149. package/modules/react/useVirtualScroller.js.map +1 -1
  150. package/modules/test/ItemsContainer.js +10 -10
  151. package/modules/test/ItemsContainer.js.map +1 -1
  152. package/modules/test/VirtualScroller.js +25 -10
  153. package/modules/test/VirtualScroller.js.map +1 -1
  154. package/package.json +4 -1
  155. package/react/as.d.ts +42 -0
  156. package/react/index.cjs +2 -1
  157. package/react/index.d.ts +248 -63
  158. package/react/index.js +1 -0
  159. package/rollup.config.mjs +15 -1
  160. package/source/BeforeResize.js +1 -2
  161. package/source/DOM/VirtualScroller.js +7 -13
  162. package/source/DOM/tbody.js +5 -5
  163. package/source/ItemHeights.js +11 -12
  164. package/source/Layout.defaults.js +8 -0
  165. package/source/Layout.js +66 -53
  166. package/source/Layout.test.js +7 -2
  167. package/source/VirtualScroller.constructor.js +27 -4
  168. package/source/VirtualScroller.items.js +47 -2
  169. package/source/VirtualScroller.js +23 -14
  170. package/source/VirtualScroller.layout.js +41 -28
  171. package/source/VirtualScroller.onContainerResize.js +1 -2
  172. package/source/VirtualScroller.state.js +10 -11
  173. package/source/VirtualScroller.verticalSpacing.js +32 -6
  174. package/source/react/VirtualScroller.js +135 -133
  175. package/source/react/useClassName.js +3 -3
  176. package/source/react/useCreateVirtualScroller.js +65 -0
  177. package/source/react/useInstanceMethods.js +12 -4
  178. package/source/react/useItemKeys.js +22 -4
  179. package/source/react/useMergeRefs.js +45 -0
  180. package/source/react/useOnItemHeightDidChange.js +29 -10
  181. package/source/react/useSetItemState.js +32 -10
  182. package/source/react/useState.js +6 -6
  183. package/source/react/{useStateNoStaleBug.js → useStateWithRepeatableRead.js} +1 -1
  184. package/source/react/useStyle.js +18 -2
  185. package/source/react/useValidateTableBodyItemsContainer.js +16 -0
  186. package/source/react/useVirtualScroller.js +155 -47
  187. package/source/test/ItemsContainer.js +10 -10
  188. package/source/test/VirtualScroller.js +16 -10
  189. package/website/index-dom-bypass.html +197 -0
  190. package/website/index-dom-grid.html +203 -0
  191. package/website/index-dom-scrollableContainer.html +214 -0
  192. package/website/index-dom-tbody-scrollableContainer.html +81 -0
  193. package/website/index-dom-tbody.html +65 -0
  194. package/website/index-dom.html +116 -84
  195. package/website/index-react-bypass.html +194 -0
  196. package/website/index-react-grid.html +197 -0
  197. package/website/index-react-hook.html +209 -0
  198. package/website/index-react-scrollableContainer.html +207 -0
  199. package/website/index-react-strictMode.html +193 -0
  200. package/website/index-react-tbody-scrollableContainer.html +94 -0
  201. package/website/index-react-tbody.html +78 -0
  202. package/website/index-react.html +193 -0
  203. package/website/index.html +120 -111
  204. package/website/{messages.js → items.js} +1 -1
  205. package/website/lib/babel.min.js +25 -0
  206. package/website/lib/prop-types.min.js +1 -0
  207. package/website/lib/react-dom.development.js +29924 -0
  208. package/website/lib/react-dom.production.min.js +267 -0
  209. package/website/lib/react.development.js +3343 -0
  210. package/website/lib/react.production.min.js +31 -0
  211. package/website/style.base.css +33 -0
  212. package/website/style.list.css +92 -0
  213. package/website/style.list.grid.css +23 -0
  214. package/bundle/index-grid.html +0 -216
  215. package/bundle/index-scrollableContainer.html +0 -208
  216. package/bundle/index-tbody-scrollableContainer.html +0 -70
  217. package/bundle/index-tbody.html +0 -57
  218. package/bundle/on-scroll-to-dom.js +0 -2
  219. package/bundle/on-scroll-to-dom.js.map +0 -1
  220. package/bundle/on-scroll-to-react.js +0 -2
  221. package/bundle/on-scroll-to-react.js.map +0 -1
  222. package/bundle/on-scroll-to.js +0 -2
  223. package/bundle/on-scroll-to.js.map +0 -1
  224. package/commonjs/react/useStateNoStaleBug.js.map +0 -1
  225. package/modules/react/useStateNoStaleBug.js.map +0 -1
  226. package/website/index-bypass.html +0 -185
  227. package/website/index-grid.html +0 -216
  228. package/website/index-scrollableContainer.html +0 -208
  229. package/website/index-tbody-scrollableContainer.html +0 -70
  230. package/website/index-tbody.html +0 -57
  231. package/website/lib/on-scroll-to-dom.js +0 -2
  232. package/website/lib/on-scroll-to-dom.js.map +0 -1
  233. package/website/lib/on-scroll-to-react.js +0 -2
  234. package/website/lib/on-scroll-to-react.js.map +0 -1
  235. /package/source/react/{useVirtualScrollerStartStop.js → useStartStopVirtualScroller.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualScroller.js","names":["React","useRef","useMemo","useLayoutEffect","PropTypes","useState","useVirtualScroller","useVirtualScrollerStartStop","useInstanceMethods","useItemKeys","useSetItemState","useOnItemHeightDidChange","useSetNewItemsOnItemsPropertyChange","useUpdateItemKeysOnItemsChange","useClassName","useStyle","warn","VirtualScroller","ref","as","AsComponent","itemsProperty","items","Component","itemComponent","itemComponentProps","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","bypass","tbody","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","className","readyToStart","onMount","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","onStateChange","initialState","getInitialItemState","rest","undefined","container","virtualScroller","_initialState","getInitialState","onRender","getState","setState","stateToRender","getItemKey","usesAutogeneratedItemKeys","updateItemKeysForNewItems","getSetItemState","initialItemsCount","length","getOnItemHeightDidChange","style","state","currentItems","itemStates","firstShownItemIndex","lastShownItemIndex","map","item","i","forwardRef","elementType","oneOfType","string","func","object","propTypes","arrayOf","any","isRequired","number","bool","shape","beforeItemsHeight","afterItemsHeight","itemHeights","columnsCount","verticalSpacing"],"sources":["../../source/react/VirtualScroller.js"],"sourcesContent":["import React, { useRef, useMemo, useLayoutEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useState from './useState.js'\r\nimport useVirtualScroller from './useVirtualScroller.js'\r\nimport useVirtualScrollerStartStop from './useVirtualScrollerStartStop.js'\r\nimport useInstanceMethods from './useInstanceMethods.js'\r\nimport useItemKeys from './useItemKeys.js'\r\nimport useSetItemState from './useSetItemState.js'\r\nimport useOnItemHeightDidChange from './useOnItemHeightDidChange.js'\r\nimport useSetNewItemsOnItemsPropertyChange from './useSetNewItemsOnItemsPropertyChange.js'\r\nimport useUpdateItemKeysOnItemsChange from './useUpdateItemKeysOnItemsChange.js'\r\nimport useClassName from './useClassName.js'\r\nimport useStyle from './useStyle.js'\r\n\r\nimport { warn } from '../utility/debug.js'\r\n\r\n// When `items` property changes:\r\n// * A new `items` property is supplied to the React component.\r\n// * The React component re-renders itself.\r\n// * `useSetNewItemsOnItemsPropertyChange()` hook is run.\r\n// * `useSetNewItemsOnItemsPropertyChange()` hook detects that the `items` property\r\n// has changed and calls `VirtualScroller.setItems(items)`.\r\n// * `VirtualScroller.setItems(items)` calls `VirtualScroller.setState()`.\r\n// * `VirtualScroller.setState()` calls the `setState()` function.\r\n// * The `setState()` function calls a setter from a `useState()` hook.\r\n// * The React component re-renders itself the second time.\r\n\r\nfunction VirtualScroller({\r\n\tas: AsComponent = 'div',\r\n\titems: itemsProperty,\r\n\titemComponent: Component,\r\n\titemComponentProps,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tbypass,\r\n\t// `tbody` property is deprecated.\r\n\t// Pass `as: \"tbody\"` property instead.\r\n\ttbody,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\tpreserveScrollPosition,\r\n\tpreserveScrollPositionOnPrependItems,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tclassName,\r\n\treadyToStart,\r\n\tonMount,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tonItemInitialRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tonStateChange,\r\n\tinitialState,\r\n\tgetInitialItemState,\r\n\t...rest\r\n}, ref) {\r\n\t// It turns out that since May 2022, `useVirtualScroller()` hook completely ignored the `tbody` property.\r\n\t// Instead, it always derived `tbody` property value from `as` property value by comparing it to `\"tbody\"` string.\r\n\t// As a result, it seemed like the explicit passing of `tbody` property didn't really work as intended.\r\n\t// In the end, it was decided that perhaps `tbody` property value should always be derived from `as` property\r\n\t// without a developer having to manually specify it. So the `tbody` property was deprecated.\r\n\t// It still exists though for backwards compatibility with the older versions of the package.\r\n\tif (tbody === undefined) {\r\n\t\ttbody = AsComponent === 'tbody'\r\n\t}\r\n\r\n\t// List items \"container\" DOM Element reference.\r\n\tconst container = useRef()\r\n\r\n\t// Create a `VirtualScroller` instance.\r\n\tconst virtualScroller = useVirtualScroller({\r\n\t\titems: itemsProperty,\r\n\t\t// `estimatedItemHeight` property name is deprecated,\r\n\t\t// use `getEstimatedItemHeight` property instead.\r\n\t\testimatedItemHeight,\r\n\t\tgetEstimatedItemHeight,\r\n\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\tbypass,\r\n\t\t// bypassBatchSize,\r\n\t\tonItemInitialRender,\r\n\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\tonItemFirstRender,\r\n\t\tinitialScrollPosition,\r\n\t\tonScrollPositionChange,\r\n\t\tmeasureItemsBatchSize,\r\n\t\t// `scrollableContainer` property is deprecated.\r\n\t\t// Use `getScrollableContainer()` property instead.\r\n\t\tscrollableContainer,\r\n\t\tgetScrollableContainer,\r\n\t\tgetColumnsCount,\r\n\t\tgetItemId,\r\n\t\tAsComponent,\r\n\t\tinitialState,\r\n\t\tgetInitialItemState,\r\n\t\tonStateChange\r\n\t}, {\r\n\t\tcontainer\r\n\t})\r\n\r\n\t// Only compute the initial state once.\r\n\tconst _initialState = useMemo(() => {\r\n\t\treturn virtualScroller.getInitialState()\r\n\t}, [])\r\n\r\n\t// Use React's `useState()` hook for managing `VirtualScroller`'s state lifecycle.\r\n\t// This way, React will re-render the component on every state update.\r\n\tconst {\r\n\t\tgetState,\r\n\t\tsetState,\r\n\t\tstateToRender\r\n\t} = useState({\r\n\t\tinitialState: _initialState,\r\n\t\tonRender: virtualScroller.onRender\r\n\t})\r\n\r\n\t// Use custom (external) state storage in the `VirtualScroller`.\r\n\tuseMemo(() => {\r\n\t\tvirtualScroller.useState({\r\n\t\t\tgetState,\r\n\t\t\tsetState\r\n\t\t})\r\n\t}, [])\r\n\r\n\t// Start `VirtualScroller` on mount.\r\n\t// Stop `VirtualScroller` on unmount.\r\n\tuseVirtualScrollerStartStop(virtualScroller, { readyToStart })\r\n\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n\tconst {\r\n\t\tgetItemKey,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems\r\n\t} = useItemKeys({\r\n\t\tgetItemId\r\n\t})\r\n\r\n\t// Cache per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getSetItemState = useSetItemState({\r\n\t\tinitialItemsCount: itemsProperty.length,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Cache per-item `onItemHeightDidChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightDidChange = useOnItemHeightDidChange({\r\n\t\tinitialItemsCount: itemsProperty.length,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Calls `.setItems()` if `items` property has changed.\r\n\tuseSetNewItemsOnItemsPropertyChange(itemsProperty, {\r\n\t\tvirtualScroller,\r\n\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\t\tpreserveScrollPosition,\r\n\t\tpreserveScrollPositionOnPrependItems\r\n\t})\r\n\r\n\t// Updates `key`s if item indexes have changed.\r\n\tuseUpdateItemKeysOnItemsChange(stateToRender.items, {\r\n\t\tvirtualScroller,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems\r\n\t})\r\n\r\n\t// Add instance methods to the React component.\r\n\tuseInstanceMethods(ref, {\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\t// (deprecated)\r\n\t\t// `onMount()` option is deprecated due to no longer being used.\r\n\t\t// If someone thinks there's a valid use case for it, create an issue.\r\n\t\tif (onMount) {\r\n\t\t\twarn('`onMount` property is deprecated')\r\n\t\t\tonMount()\r\n\t\t}\r\n\t}, [])\r\n\r\n\t// `willRender()` function is no longer used.\r\n\t//\r\n\t// // `getSnapshotBeforeUpdate()` is called right before `componentDidUpdate()`.\r\n\t// // A hook equivalent/workaround for `getSnapshotBeforeUpdate()`:\r\n\t// // https://github.com/facebook/react/issues/15221#issuecomment-583448887\r\n\t// //\r\n\t// getSnapshotBeforeUpdate(prevProps, prevState) {\r\n\t// \tif (this.state !== prevState) {\r\n\t// \t\tthis.willRender(this.state, prevState)\r\n\t// \t}\r\n\t// \t// Returns `null` to avoid React warning:\r\n\t// \t// \"A snapshot value (or null) must be returned. You have returned undefined\".\r\n\t// \treturn null\r\n\t// }\r\n\r\n\tclassName = useClassName(className, {\r\n\t\ttbody\r\n\t})\r\n\r\n\tconst style = useStyle({\r\n\t\ttbody,\r\n\t\tstate: stateToRender\r\n\t})\r\n\r\n\tconst {\r\n\t\titems: currentItems,\r\n\t\titemStates,\r\n\t\tfirstShownItemIndex,\r\n\t\tlastShownItemIndex\r\n\t} = stateToRender\r\n\r\n\treturn (\r\n\t\t<AsComponent\r\n\t\t\t{...rest}\r\n\t\t\tref={container}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={style}>\r\n\t\t\t{currentItems.map((item, i) => {\r\n\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\t// * Passing `item` as `children` property is legacy and is deprecated.\r\n\t\t\t\t\t// If version `2.x` is published in some hypothetical future,\r\n\t\t\t\t\t// the `item` and `itemIndex` properties should be moved below\r\n\t\t\t\t\t// `{...itemComponentProps}`.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `itemIndex` property is legacy and is deprecated.\r\n\t\t\t\t\t// The rationale is that setting new `items` on a React component\r\n\t\t\t\t\t// is an asynchronous operation, so when a user obtains `itemIndex`,\r\n\t\t\t\t\t// they don't know which `items` list does that index correspond to,\r\n\t\t\t\t\t// therefore making it useless, or even buggy if used incorreclty.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `onStateChange` property for legacy reasons.\r\n\t\t\t\t\t// The new property name is `setState`.\r\n\t\t\t\t\t// The old property name `onStateChange` is deprecated.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `onHeightChange` property for legacy reasons.\r\n\t\t\t\t\t// The new property name is `onHeightDidChange`.\r\n\t\t\t\t\t// The old property name `onHeightChange` is deprecated.\r\n\t\t\t\t\t//\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Component\r\n\t\t\t\t\t\t\titem={item}\r\n\t\t\t\t\t\t\titemIndex={i}\r\n\t\t\t\t\t\t\t{...itemComponentProps}\r\n\t\t\t\t\t\t\tkey={getItemKey(item, i)}\r\n\t\t\t\t\t\t\tstate={itemStates && itemStates[i]}\r\n\t\t\t\t\t\t\tsetState={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonStateChange={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonHeightChange={getOnItemHeightDidChange(i)}\r\n\t\t\t\t\t\t\tonHeightDidChange={getOnItemHeightDidChange(i)}>\r\n\t\t\t\t\t\t\t{item}\r\n\t\t\t\t\t\t</Component>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\treturn null\r\n\t\t\t})}\r\n\t\t</AsComponent>\r\n\t)\r\n}\r\n\r\nVirtualScroller = React.forwardRef(VirtualScroller)\r\n\r\nexport default VirtualScroller\r\n\r\n// `PropTypes.elementType` is available in some version of `prop-types`.\r\n// https://github.com/facebook/prop-types/issues/200\r\nconst elementType = PropTypes.elementType || PropTypes.oneOfType([\r\n\tPropTypes.string,\r\n\tPropTypes.func,\r\n\tPropTypes.object\r\n])\r\n\r\nVirtualScroller.propTypes = {\r\n\tas: elementType,\r\n\titems: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\titemComponent: elementType.isRequired,\r\n\titemComponentProps: PropTypes.object,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight: PropTypes.number,\r\n\tgetEstimatedItemHeight: PropTypes.func,\r\n\tgetEstimatedVisibleItemRowsCount: PropTypes.func,\r\n\tbypass: PropTypes.bool,\r\n\t// bypassBatchSize: PropTypes.number,\r\n\t// `tbody` property is deprecated.\r\n\t// Pass `as: \"tbody\"` property instead.\r\n\t// tbody: PropTypes.bool,\r\n\tpreserveScrollPositionOnPrependItems: PropTypes.bool,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\tpreserveScrollPosition: PropTypes.bool,\r\n\tmeasureItemsBatchSize: PropTypes.number,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer: PropTypes.any,\r\n\tgetScrollableContainer: PropTypes.func,\r\n\tgetColumnsCount: PropTypes.func,\r\n\tgetItemId: PropTypes.func,\r\n\tclassName: PropTypes.string,\r\n\treadyToStart: PropTypes.bool,\r\n\tonMount: PropTypes.func,\r\n\tonItemInitialRender: PropTypes.func,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender: PropTypes.func,\r\n\tinitialScrollPosition: PropTypes.number,\r\n\tonScrollPositionChange: PropTypes.func,\r\n\tonStateChange: PropTypes.func,\r\n\tinitialState: PropTypes.shape({\r\n\t\titems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n\t\titemStates: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\t\tfirstShownItemIndex: PropTypes.number.isRequired,\r\n\t\tlastShownItemIndex: PropTypes.number.isRequired,\r\n\t\tbeforeItemsHeight: PropTypes.number.isRequired,\r\n\t\tafterItemsHeight: PropTypes.number.isRequired,\r\n\t\titemHeights: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n\t\tcolumnsCount: PropTypes.number,\r\n\t\tverticalSpacing: PropTypes.number\r\n\t}),\r\n\tgetInitialItemState: PropTypes.func\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"VirtualScroller.js","names":["React","useLayoutEffect","PropTypes","useVirtualScroller","useItemKeys","useSetItemState","useOnItemHeightDidChange","useMergeRefs","useInstanceMethods","useUpdateItemKeysOnItemsChange","warn","VirtualScroller","ref","as","itemsProperty","items","ItemComponent","itemComponent","itemComponentProps","ItemsContainerComponent","itemsContainerComponent","itemsContainerComponentProps","itemsContainerRefProperty","itemsContainerRef","onMount","tbody","readyToStart","classNameProperty","className","bypass","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","initialState","getInitialItemState","onStateChange","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","getEstimatedInterItemVerticalSpacing","rest","undefined","style","stateToRender","state","virtualScroller","setItemsContainerRef","getItemKey","onItemKeysReset","usesAutogeneratedItemKeys","updateItemKeysForNewItems","getSetItemState","getOnItemHeightDidChange","currentItems","itemStates","firstShownItemIndex","lastShownItemIndex","map","item","i","forwardRef","elementType","oneOfType","string","func","object","propTypes","arrayOf","any","isRequired","shape","current","number","bool","beforeItemsHeight","afterItemsHeight","itemHeights","columnsCount","verticalSpacing"],"sources":["../../source/react/VirtualScroller.js"],"sourcesContent":["import React, { useLayoutEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useVirtualScroller from './useVirtualScroller.js'\r\nimport useItemKeys from './useItemKeys.js'\r\nimport useSetItemState from './useSetItemState.js'\r\nimport useOnItemHeightDidChange from './useOnItemHeightDidChange.js'\r\nimport useMergeRefs from './useMergeRefs.js'\r\nimport useInstanceMethods from './useInstanceMethods.js'\r\nimport useUpdateItemKeysOnItemsChange from './useUpdateItemKeysOnItemsChange.js'\r\n\r\nimport { warn } from '../utility/debug.js'\r\n\r\nfunction VirtualScroller({\r\n\t// The following are `<VirtualScroller/>` properties.\r\n\t//\r\n\t// `as` property is deprecated, use `itemsContainerComponent` property instead.\r\n\tas,\r\n\titems: itemsProperty,\r\n\titemComponent: ItemComponent,\r\n\titemComponentProps,\r\n\titemsContainerComponent: ItemsContainerComponent,\r\n\titemsContainerComponentProps,\r\n\titemsContainerRef: itemsContainerRefProperty,\r\n\tonMount,\r\n\ttbody,\r\n\treadyToStart,\r\n\tclassName: classNameProperty,\r\n\r\n\t// The following are the \"core\" component options.\r\n\t//\r\n\tbypass,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\tpreserveScrollPosition,\r\n\tpreserveScrollPositionOnPrependItems,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tonItemInitialRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tinitialState,\r\n\tgetInitialItemState,\r\n\tonStateChange,\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tgetEstimatedInterItemVerticalSpacing,\r\n\r\n\t// \"Rest\" properties that will be passed through to the `itemsContainerComponent`.\r\n\t...rest\r\n}, ref) {\r\n\t// Previously, `as` property was being used instead of `itemsContainerComponent`,\r\n\t// and the default `as` property value was a generic `<div/>`.\r\n\t// Starting from version `1.14.1`, it is recommended to explicitly specify the `itemsContainerComponent`.\r\n\t// The default `\"div\"` fallback value is just a legacy compatibility relic, and so is the `as` property.\r\n\tif (!ItemsContainerComponent) {\r\n\t\tItemsContainerComponent = as || 'div'\r\n\t}\r\n\r\n\t// In simple cases, the use of a `<tbody/>` tag as an items container component could be auto-detected.\r\n\tif (tbody === undefined) {\r\n\t\t// `tbody` auto-detection should happen before any DOM Elements have been mounted,\r\n\t\t// i.e. it can't rely on the trivial `getItemsContainerElement().tagName === 'TBODY'` check.\r\n\t\t// This is because during Server-Side Render there's no DOM Elements tree at all.\r\n\t\t// And server-sider render result is required to be exactly the same as client-side render result.\r\n\t\t// This means that `tbody` detection for the purposes of getting the initial\r\n\t\t// `className` or `style` property values must not rely on any DOM Elements at all,\r\n\t\t// and should use some other means such as explicitly passing a `tbody: true` property\r\n\t\t// or detecting `<tbody/>` tag usage from the `itemsContainerCompoent` property value.\r\n\t\ttbody = ItemsContainerComponent === 'tbody'\r\n\t}\r\n\r\n\tconst {\r\n\t\tstate: stateToRender,\r\n\t\tstyle,\r\n\t\tclassName,\r\n\t\titemsContainerRef,\r\n\t\tvirtualScroller\r\n\t} = useVirtualScroller({\r\n\t\titems: itemsProperty,\r\n\t\ttbody,\r\n\t\treadyToStart,\r\n\t\tstyle: itemsContainerComponentProps && itemsContainerComponentProps.style,\r\n\t\tclassName: classNameProperty || itemsContainerComponentProps && itemsContainerComponentProps.className,\r\n\r\n\t\t// The following are the \"core\" component options.\r\n\t\t//\r\n\t\tbypass,\r\n\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\t\tpreserveScrollPosition,\r\n\t\tpreserveScrollPositionOnPrependItems,\r\n\t\tmeasureItemsBatchSize,\r\n\t\t// `scrollableContainer` property is deprecated.\r\n\t\t// Use `getScrollableContainer()` property instead.\r\n\t\tscrollableContainer,\r\n\t\tgetScrollableContainer,\r\n\t\tgetColumnsCount,\r\n\t\tgetItemId,\r\n\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\tonItemFirstRender,\r\n\t\tonItemInitialRender,\r\n\t\tinitialScrollPosition,\r\n\t\tonScrollPositionChange,\r\n\t\tinitialState,\r\n\t\tgetInitialItemState,\r\n\t\tonStateChange,\r\n\t\tgetEstimatedItemHeight: getEstimatedItemHeight ||\r\n\t\t\t// `estimatedItemHeight` property name is deprecated,\r\n\t\t\t// use `getEstimatedItemHeight` property instead.\r\n\t\t\t(typeof estimatedItemHeight === 'number' ? () => estimatedItemHeight : undefined),\r\n\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\tgetEstimatedInterItemVerticalSpacing\r\n\t})\r\n\r\n\t// List items \"container\" DOM Element reference.\r\n\tconst setItemsContainerRef = useMergeRefs(itemsContainerRef, itemsContainerRefProperty)\r\n\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n\tconst {\r\n\t\tgetItemKey,\r\n\t\tonItemKeysReset,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems\r\n\t} = useItemKeys({\r\n\t\tgetItemId\r\n\t})\r\n\r\n\t// Updates `key`s if item indexes have changed.\r\n\tuseUpdateItemKeysOnItemsChange(stateToRender.items, {\r\n\t\tvirtualScroller,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems\r\n\t})\r\n\r\n\t// Cache per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getSetItemState = useSetItemState({\r\n\t\tgetItemKey,\r\n\t\tonItemKeysReset,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Cache per-item `onItemHeightDidChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightDidChange = useOnItemHeightDidChange({\r\n\t\tgetItemKey,\r\n\t\tonItemKeysReset,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Add instance methods to the React component.\r\n\tuseInstanceMethods(ref, {\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\tuseLayoutEffect(() => {\r\n\t\t// (deprecated)\r\n\t\t// `onMount()` option is deprecated due to no longer being used.\r\n\t\t// If someone thinks there's a valid use case for it, create an issue.\r\n\t\tif (onMount) {\r\n\t\t\twarn('`onMount` property is deprecated')\r\n\t\t\tonMount()\r\n\t\t}\r\n\t}, [])\r\n\r\n\t// `willRender()` function is no longer used.\r\n\t//\r\n\t// // `getSnapshotBeforeUpdate()` is called right before `componentDidUpdate()`.\r\n\t// // A hook equivalent/workaround for `getSnapshotBeforeUpdate()`:\r\n\t// // https://github.com/facebook/react/issues/15221#issuecomment-583448887\r\n\t// //\r\n\t// getSnapshotBeforeUpdate(prevProps, prevState) {\r\n\t// \tif (this.state !== prevState) {\r\n\t// \t\tthis.willRender(this.state, prevState)\r\n\t// \t}\r\n\t// \t// Returns `null` to avoid React warning:\r\n\t// \t// \"A snapshot value (or null) must be returned. You have returned undefined\".\r\n\t// \treturn null\r\n\t// }\r\n\r\n\tconst {\r\n\t\titems: currentItems,\r\n\t\titemStates,\r\n\t\tfirstShownItemIndex,\r\n\t\tlastShownItemIndex\r\n\t} = stateToRender\r\n\r\n\treturn (\r\n\t\t<ItemsContainerComponent\r\n\t\t\t{...itemsContainerComponentProps}\r\n\t\t\t{...rest}\r\n\t\t\tref={setItemsContainerRef}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={style}>\r\n\t\t\t{currentItems.map((item, i) => {\r\n\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\t// * Passing the `item` as `children` property is legacy and is deprecated.\r\n\t\t\t\t\t// If version `2.x` is published in some hypothetical future,\r\n\t\t\t\t\t// the `item` property should be moved below `{...itemComponentProps}`.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * Passing `itemIndex` property is legacy and is deprecated\r\n\t\t\t\t\t// and could be removed in some future.\r\n\t\t\t\t\t// The rationale for deprecation is that the `items` property\r\n\t\t\t\t\t// is not constant and could change, in which case the `itemIndex` value\r\n\t\t\t\t\t// would be of no use because the application wouldn't know\r\n\t\t\t\t\t// which exact `items` it corresponds to at any given moment in time.\r\n\t\t\t\t\t// Having just the `itemIndex` and no actual `item` is therefore considered useless.\r\n\t\t\t\t\t// Instead, a developer could simply use `getItemKey(item)` function.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * `onStateChange` property is passed here for legacy reasons.\r\n\t\t\t\t\t// The new property name is `setState`.\r\n\t\t\t\t\t// The old property name `onStateChange` is deprecated\r\n\t\t\t\t\t// and could be removed in some future.\r\n\t\t\t\t\t//\r\n\t\t\t\t\t// * `onHeightChange` property is passed here for legacy reasons.\r\n\t\t\t\t\t// The new property name is `onHeightDidChange`.\r\n\t\t\t\t\t// The old property name `onHeightChange` is deprecated\r\n\t\t\t\t\t// and could be removed in some future.\r\n\t\t\t\t\t//\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<ItemComponent\r\n\t\t\t\t\t\t\titem={item}\r\n\t\t\t\t\t\t\titemIndex={i}\r\n\t\t\t\t\t\t\t{...itemComponentProps}\r\n\t\t\t\t\t\t\tkey={getItemKey(item, i)}\r\n\t\t\t\t\t\t\tstate={itemStates && itemStates[i]}\r\n\t\t\t\t\t\t\tsetState={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonStateChange={getSetItemState(i)}\r\n\t\t\t\t\t\t\tonHeightChange={getOnItemHeightDidChange(i)}\r\n\t\t\t\t\t\t\tonHeightDidChange={getOnItemHeightDidChange(i)}>\r\n\t\t\t\t\t\t\t{item}\r\n\t\t\t\t\t\t</ItemComponent>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\treturn null\r\n\t\t\t})}\r\n\t\t</ItemsContainerComponent>\r\n\t)\r\n}\r\n\r\nVirtualScroller = React.forwardRef(VirtualScroller)\r\n\r\nexport default VirtualScroller\r\n\r\n// `PropTypes.elementType` is available in some version of `prop-types`.\r\n// https://github.com/facebook/prop-types/issues/200\r\nconst elementType = PropTypes.elementType || PropTypes.oneOfType([\r\n\tPropTypes.string,\r\n\tPropTypes.func,\r\n\tPropTypes.object\r\n])\r\n\r\nVirtualScroller.propTypes = {\r\n\t// `as` property is deprecated, use `itemsContainerComponent` property instead.\r\n\tas: elementType,\r\n\titems: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\titemComponent: elementType.isRequired,\r\n\titemComponentProps: PropTypes.object,\r\n\t// `itemsContainerComponent` property is not required just for legacy compatibility reasons.\r\n\t// Any new applications should explicitly specify it.\r\n\titemsContainerComponent: elementType,\r\n\titemsContainerComponentProps: PropTypes.object,\r\n\titemsContainerRef: PropTypes.oneOfType([\r\n\t\tPropTypes.func,\r\n\t\tPropTypes.shape({ current: PropTypes.object })\r\n\t]),\r\n\t// `estimatedItemHeight` property name is deprecated,\r\n\t// use `getEstimatedItemHeight` property instead.\r\n\testimatedItemHeight: PropTypes.number,\r\n\tgetEstimatedItemHeight: PropTypes.func,\r\n\tgetEstimatedVisibleItemRowsCount: PropTypes.func,\r\n\tgetEstimatedInterItemVerticalSpacing: PropTypes.func,\r\n\tbypass: PropTypes.bool,\r\n\t// bypassBatchSize: PropTypes.number,\r\n\ttbody: PropTypes.bool,\r\n\tpreserveScrollPositionOnPrependItems: PropTypes.bool,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\tpreserveScrollPosition: PropTypes.bool,\r\n\tmeasureItemsBatchSize: PropTypes.number,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer: PropTypes.any,\r\n\tgetScrollableContainer: PropTypes.func,\r\n\tgetColumnsCount: PropTypes.func,\r\n\tgetItemId: PropTypes.func,\r\n\tclassName: PropTypes.string,\r\n\treadyToStart: PropTypes.bool,\r\n\tonMount: PropTypes.func,\r\n\tonItemInitialRender: PropTypes.func,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender: PropTypes.func,\r\n\tinitialScrollPosition: PropTypes.number,\r\n\tonScrollPositionChange: PropTypes.func,\r\n\tonStateChange: PropTypes.func,\r\n\tinitialState: PropTypes.shape({\r\n\t\titems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n\t\titemStates: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\t\tfirstShownItemIndex: PropTypes.number.isRequired,\r\n\t\tlastShownItemIndex: PropTypes.number.isRequired,\r\n\t\tbeforeItemsHeight: PropTypes.number.isRequired,\r\n\t\tafterItemsHeight: PropTypes.number.isRequired,\r\n\t\titemHeights: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n\t\tcolumnsCount: PropTypes.number,\r\n\t\tverticalSpacing: PropTypes.number\r\n\t}),\r\n\tgetInitialItemState: PropTypes.func\r\n}\r\n\r\n// Legacy compatibility:\r\n//\r\n// Originally, the default export of the `virtual-scroller/react` subpackage\r\n// was only the `VirtualScroller` component, and there were no other exports.\r\n//\r\n// Later, `useVirtualScroller()` hook export was added.\r\n// In order to maintain legacy compatibility, the new exports shouldn't \"break\"\r\n// the existing environments that were using the old versions of the package.\r\n// This means that in non-ES6-import environments, any additional exports\r\n// should be added directly to the default `VirtualScroller` export.\r\n//\r\nVirtualScroller.useVirtualScroller = useVirtualScroller"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { TBODY_CLASS_NAME } from '../DOM/tbody.js';
1
+ import { CLASS_NAME_FOR_TBODY_WORKAROUND } from '../DOM/tbody.js';
2
2
  export default function useClassName(className, _ref) {
3
3
  var tbody = _ref.tbody;
4
4
 
@@ -7,10 +7,10 @@ export default function useClassName(className, _ref) {
7
7
  // See `addTbodyStyles()` function in `../DOM/tbody.js` for more details.
8
8
  if (tbody) {
9
9
  if (className) {
10
- return className + ' ' + TBODY_CLASS_NAME;
10
+ return className + ' ' + CLASS_NAME_FOR_TBODY_WORKAROUND;
11
11
  }
12
12
 
13
- return TBODY_CLASS_NAME;
13
+ return CLASS_NAME_FOR_TBODY_WORKAROUND;
14
14
  }
15
15
 
16
16
  return className;
@@ -1 +1 @@
1
- {"version":3,"file":"useClassName.js","names":["TBODY_CLASS_NAME","useClassName","className","tbody"],"sources":["../../source/react/useClassName.js"],"sourcesContent":["import { TBODY_CLASS_NAME } from '../DOM/tbody.js'\r\n\r\nexport default function useClassName(className, { tbody }) {\r\n\t// For `<tbody/>`, a workaround is used which uses CSS variables\r\n\t// and a special CSS class name \"VirtualScroller\".\r\n\t// See `addTbodyStyles()` function in `../DOM/tbody.js` for more details.\r\n\tif (tbody) {\r\n\t\tif (className) {\r\n\t\t\treturn className + ' ' + TBODY_CLASS_NAME\r\n\t\t}\r\n\t\treturn TBODY_CLASS_NAME\r\n\t}\r\n\treturn className\r\n}"],"mappings":"AAAA,SAASA,gBAAT,QAAiC,iBAAjC;AAEA,eAAe,SAASC,YAAT,CAAsBC,SAAtB,QAA4C;EAAA,IAATC,KAAS,QAATA,KAAS;;EAC1D;EACA;EACA;EACA,IAAIA,KAAJ,EAAW;IACV,IAAID,SAAJ,EAAe;MACd,OAAOA,SAAS,GAAG,GAAZ,GAAkBF,gBAAzB;IACA;;IACD,OAAOA,gBAAP;EACA;;EACD,OAAOE,SAAP;AACA"}
1
+ {"version":3,"file":"useClassName.js","names":["CLASS_NAME_FOR_TBODY_WORKAROUND","useClassName","className","tbody"],"sources":["../../source/react/useClassName.js"],"sourcesContent":["import { CLASS_NAME_FOR_TBODY_WORKAROUND } from '../DOM/tbody.js'\r\n\r\nexport default function useClassName(className, { tbody }) {\r\n\t// For `<tbody/>`, a workaround is used which uses CSS variables\r\n\t// and a special CSS class name \"VirtualScroller\".\r\n\t// See `addTbodyStyles()` function in `../DOM/tbody.js` for more details.\r\n\tif (tbody) {\r\n\t\tif (className) {\r\n\t\t\treturn className + ' ' + CLASS_NAME_FOR_TBODY_WORKAROUND\r\n\t\t}\r\n\t\treturn CLASS_NAME_FOR_TBODY_WORKAROUND\r\n\t}\r\n\treturn className\r\n}"],"mappings":"AAAA,SAASA,+BAAT,QAAgD,iBAAhD;AAEA,eAAe,SAASC,YAAT,CAAsBC,SAAtB,QAA4C;EAAA,IAATC,KAAS,QAATA,KAAS;;EAC1D;EACA;EACA;EACA,IAAIA,KAAJ,EAAW;IACV,IAAID,SAAJ,EAAe;MACd,OAAOA,SAAS,GAAG,GAAZ,GAAkBF,+BAAzB;IACA;;IACD,OAAOA,+BAAP;EACA;;EACD,OAAOE,SAAP;AACA"}
@@ -0,0 +1,53 @@
1
+ import { useMemo } from 'react';
2
+ import VirtualScroller from '../VirtualScroller.js'; // Creates a `VirtualScroller` instance.
3
+
4
+ export default function useVirtualScroller(_ref, _ref2) {
5
+ var items = _ref.items,
6
+ estimatedItemHeight = _ref.estimatedItemHeight,
7
+ getEstimatedItemHeight = _ref.getEstimatedItemHeight,
8
+ getEstimatedVisibleItemRowsCount = _ref.getEstimatedVisibleItemRowsCount,
9
+ getEstimatedInterItemVerticalSpacing = _ref.getEstimatedInterItemVerticalSpacing,
10
+ bypass = _ref.bypass,
11
+ onItemInitialRender = _ref.onItemInitialRender,
12
+ onItemFirstRender = _ref.onItemFirstRender,
13
+ initialScrollPosition = _ref.initialScrollPosition,
14
+ onScrollPositionChange = _ref.onScrollPositionChange,
15
+ measureItemsBatchSize = _ref.measureItemsBatchSize,
16
+ scrollableContainer = _ref.scrollableContainer,
17
+ getScrollableContainer = _ref.getScrollableContainer,
18
+ getColumnsCount = _ref.getColumnsCount,
19
+ getItemId = _ref.getItemId,
20
+ initialState = _ref.initialState,
21
+ getInitialItemState = _ref.getInitialItemState,
22
+ onStateChange = _ref.onStateChange;
23
+ var getItemsContainerElement = _ref2.getItemsContainerElement;
24
+ return useMemo(function () {
25
+ // Create `virtual-scroller` instance.
26
+ return new VirtualScroller(getItemsContainerElement, items, {
27
+ _useTimeoutInRenderLoop: true,
28
+ // `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.
29
+ estimatedItemHeight: estimatedItemHeight,
30
+ getEstimatedItemHeight: getEstimatedItemHeight,
31
+ getEstimatedVisibleItemRowsCount: getEstimatedVisibleItemRowsCount,
32
+ getEstimatedInterItemVerticalSpacing: getEstimatedInterItemVerticalSpacing,
33
+ bypass: bypass,
34
+ // bypassBatchSize,
35
+ onItemInitialRender: onItemInitialRender,
36
+ // `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.
37
+ onItemFirstRender: onItemFirstRender,
38
+ initialScrollPosition: initialScrollPosition,
39
+ onScrollPositionChange: onScrollPositionChange,
40
+ measureItemsBatchSize: measureItemsBatchSize,
41
+ // `scrollableContainer` property is deprecated.
42
+ // Use `getScrollableContainer()` property instead.
43
+ scrollableContainer: scrollableContainer,
44
+ getScrollableContainer: getScrollableContainer,
45
+ getColumnsCount: getColumnsCount,
46
+ getItemId: getItemId,
47
+ state: initialState,
48
+ getInitialItemState: getInitialItemState,
49
+ onStateChange: onStateChange
50
+ });
51
+ }, []);
52
+ }
53
+ //# sourceMappingURL=useCreateVirtualScroller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCreateVirtualScroller.js","names":["useMemo","VirtualScroller","useVirtualScroller","items","estimatedItemHeight","getEstimatedItemHeight","getEstimatedVisibleItemRowsCount","getEstimatedInterItemVerticalSpacing","bypass","onItemInitialRender","onItemFirstRender","initialScrollPosition","onScrollPositionChange","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","initialState","getInitialItemState","onStateChange","getItemsContainerElement","_useTimeoutInRenderLoop","state"],"sources":["../../source/react/useCreateVirtualScroller.js"],"sourcesContent":["import { useMemo } from 'react'\r\n\r\nimport VirtualScroller from '../VirtualScroller.js'\r\n\r\n// Creates a `VirtualScroller` instance.\r\nexport default function useVirtualScroller({\r\n\titems,\r\n\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\testimatedItemHeight,\r\n\tgetEstimatedItemHeight,\r\n\tgetEstimatedVisibleItemRowsCount,\r\n\tgetEstimatedInterItemVerticalSpacing,\r\n\tbypass,\r\n\t// bypassBatchSize,\r\n\tonItemInitialRender,\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender,\r\n\tinitialScrollPosition,\r\n\tonScrollPositionChange,\r\n\tmeasureItemsBatchSize,\r\n\t// `scrollableContainer` property is deprecated.\r\n\t// Use `getScrollableContainer()` property instead.\r\n\tscrollableContainer,\r\n\tgetScrollableContainer,\r\n\tgetColumnsCount,\r\n\tgetItemId,\r\n\tinitialState,\r\n\tgetInitialItemState,\r\n\tonStateChange\r\n}, {\r\n\tgetItemsContainerElement\r\n}) {\r\n\treturn useMemo(() => {\r\n\t\t// Create `virtual-scroller` instance.\r\n\t\treturn new VirtualScroller(\r\n\t\t\tgetItemsContainerElement,\r\n\t\t\titems,\r\n\t\t\t{\r\n\t\t\t\t_useTimeoutInRenderLoop: true,\r\n\t\t\t\t// `estimatedItemHeight` is deprecated, use `getEstimatedItemHeight()` instead.\r\n\t\t\t\testimatedItemHeight,\r\n\t\t\t\tgetEstimatedItemHeight,\r\n\t\t\t\tgetEstimatedVisibleItemRowsCount,\r\n\t\t\t\tgetEstimatedInterItemVerticalSpacing,\r\n\t\t\t\tbypass,\r\n\t\t\t\t// bypassBatchSize,\r\n\t\t\t\tonItemInitialRender,\r\n\t\t\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\t\t\tonItemFirstRender,\r\n\t\t\t\tinitialScrollPosition,\r\n\t\t\t\tonScrollPositionChange,\r\n\t\t\t\tmeasureItemsBatchSize,\r\n\t\t\t\t// `scrollableContainer` property is deprecated.\r\n\t\t\t\t// Use `getScrollableContainer()` property instead.\r\n\t\t\t\tscrollableContainer,\r\n\t\t\t\tgetScrollableContainer,\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\tgetItemId,\r\n\t\t\t\tstate: initialState,\r\n\t\t\t\tgetInitialItemState,\r\n\t\t\t\tonStateChange\r\n\t\t\t}\r\n\t\t)\r\n\t}, [])\r\n}"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;AAEA,OAAOC,eAAP,MAA4B,uBAA5B,C,CAEA;;AACA,eAAe,SAASC,kBAAT,cA0BZ;EAAA,IAzBFC,KAyBE,QAzBFA,KAyBE;EAAA,IAvBFC,mBAuBE,QAvBFA,mBAuBE;EAAA,IAtBFC,sBAsBE,QAtBFA,sBAsBE;EAAA,IArBFC,gCAqBE,QArBFA,gCAqBE;EAAA,IApBFC,oCAoBE,QApBFA,oCAoBE;EAAA,IAnBFC,MAmBE,QAnBFA,MAmBE;EAAA,IAjBFC,mBAiBE,QAjBFA,mBAiBE;EAAA,IAfFC,iBAeE,QAfFA,iBAeE;EAAA,IAdFC,qBAcE,QAdFA,qBAcE;EAAA,IAbFC,sBAaE,QAbFA,sBAaE;EAAA,IAZFC,qBAYE,QAZFA,qBAYE;EAAA,IATFC,mBASE,QATFA,mBASE;EAAA,IARFC,sBAQE,QARFA,sBAQE;EAAA,IAPFC,eAOE,QAPFA,eAOE;EAAA,IANFC,SAME,QANFA,SAME;EAAA,IALFC,YAKE,QALFA,YAKE;EAAA,IAJFC,mBAIE,QAJFA,mBAIE;EAAA,IAHFC,aAGE,QAHFA,aAGE;EAAA,IADFC,wBACE,SADFA,wBACE;EACF,OAAOrB,OAAO,CAAC,YAAM;IACpB;IACA,OAAO,IAAIC,eAAJ,CACNoB,wBADM,EAENlB,KAFM,EAGN;MACCmB,uBAAuB,EAAE,IAD1B;MAEC;MACAlB,mBAAmB,EAAnBA,mBAHD;MAICC,sBAAsB,EAAtBA,sBAJD;MAKCC,gCAAgC,EAAhCA,gCALD;MAMCC,oCAAoC,EAApCA,oCAND;MAOCC,MAAM,EAANA,MAPD;MAQC;MACAC,mBAAmB,EAAnBA,mBATD;MAUC;MACAC,iBAAiB,EAAjBA,iBAXD;MAYCC,qBAAqB,EAArBA,qBAZD;MAaCC,sBAAsB,EAAtBA,sBAbD;MAcCC,qBAAqB,EAArBA,qBAdD;MAeC;MACA;MACAC,mBAAmB,EAAnBA,mBAjBD;MAkBCC,sBAAsB,EAAtBA,sBAlBD;MAmBCC,eAAe,EAAfA,eAnBD;MAoBCC,SAAS,EAATA,SApBD;MAqBCM,KAAK,EAAEL,YArBR;MAsBCC,mBAAmB,EAAnBA,mBAtBD;MAuBCC,aAAa,EAAbA;IAvBD,CAHM,CAAP;EA6BA,CA/Ba,EA+BX,EA/BW,CAAd;AAgCA"}
@@ -7,20 +7,20 @@ export default function useInstanceMethods(ref, _ref) {
7
7
  return {
8
8
  // This is a proxy for `VirtualScroller`'s `.updateLayout` instance method.
9
9
  updateLayout: function updateLayout() {
10
- return virtualScroller.updateLayout();
10
+ virtualScroller.updateLayout();
11
11
  },
12
12
  // (deprecated)
13
13
  // `.layout()` method name is deprecated, use `.updateLayout()` instead.
14
14
  layout: function layout() {
15
- return virtualScroller.updateLayout();
15
+ virtualScroller.updateLayout();
16
16
  },
17
17
  // (deprecated)
18
18
  updateItem: function updateItem(i) {
19
- return reportError("[virtual-scroller] \".updateItem(i)\" method of React <VirtualScroller/> has been removed");
19
+ reportError("\".updateItem(i)\" method of React <VirtualScroller/> has been removed");
20
20
  },
21
21
  // (deprecated)
22
22
  renderItem: function renderItem(i) {
23
- return reportError("[virtual-scroller] \".renderItem(i)\" method of React <VirtualScroller/> has been removed");
23
+ reportError("\".renderItem(i)\" method of React <VirtualScroller/> has been removed");
24
24
  }
25
25
  };
26
26
  }, [virtualScroller]);
@@ -1 +1 @@
1
- {"version":3,"file":"useInstanceMethods.js","names":["useImperativeHandle","reportError","useInstanceMethods","ref","virtualScroller","updateLayout","layout","updateItem","i","renderItem"],"sources":["../../source/react/useInstanceMethods.js"],"sourcesContent":["import { useImperativeHandle } from 'react'\r\n\r\nimport { reportError } from '../utility/debug.js'\r\n\r\n// Adds instance methods to the React component.\r\nexport default function useInstanceMethods(ref, {\r\n\tvirtualScroller\r\n}) {\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\t// This is a proxy for `VirtualScroller`'s `.updateLayout` instance method.\r\n\t\tupdateLayout: () => virtualScroller.updateLayout(),\r\n\r\n\t\t// (deprecated)\r\n\t\t// `.layout()` method name is deprecated, use `.updateLayout()` instead.\r\n layout: () => virtualScroller.updateLayout(),\r\n\r\n\t\t// (deprecated)\r\n\t\tupdateItem: (i) => reportError(`[virtual-scroller] \".updateItem(i)\" method of React <VirtualScroller/> has been removed`),\r\n\r\n\t\t// (deprecated)\r\n\t\trenderItem: (i) => reportError(`[virtual-scroller] \".renderItem(i)\" method of React <VirtualScroller/> has been removed`)\r\n\t}), [\r\n\t\tvirtualScroller\r\n\t])\r\n}"],"mappings":"AAAA,SAASA,mBAAT,QAAoC,OAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B,C,CAEA;;AACA,eAAe,SAASC,kBAAT,CAA4BC,GAA5B,QAEZ;EAAA,IADFC,eACE,QADFA,eACE;EACFJ,mBAAmB,CAACG,GAAD,EAAM;IAAA,OAAO;MAC/B;MACAE,YAAY,EAAE;QAAA,OAAMD,eAAe,CAACC,YAAhB,EAAN;MAAA,CAFiB;MAI/B;MACA;MACEC,MAAM,EAAE;QAAA,OAAMF,eAAe,CAACC,YAAhB,EAAN;MAAA,CANqB;MAQ/B;MACAE,UAAU,EAAE,oBAACC,CAAD;QAAA,OAAOP,WAAW,6FAAlB;MAAA,CATmB;MAW/B;MACAQ,UAAU,EAAE,oBAACD,CAAD;QAAA,OAAOP,WAAW,6FAAlB;MAAA;IAZmB,CAAP;EAAA,CAAN,EAaf,CACHG,eADG,CAbe,CAAnB;AAgBA"}
1
+ {"version":3,"file":"useInstanceMethods.js","names":["useImperativeHandle","reportError","useInstanceMethods","ref","virtualScroller","updateLayout","layout","updateItem","i","renderItem"],"sources":["../../source/react/useInstanceMethods.js"],"sourcesContent":["import { useImperativeHandle } from 'react'\r\n\r\nimport { reportError } from '../utility/debug.js'\r\n\r\n// Adds instance methods to the React component.\r\nexport default function useInstanceMethods(ref, {\r\n\tvirtualScroller\r\n}) {\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\t// This is a proxy for `VirtualScroller`'s `.updateLayout` instance method.\r\n\t\tupdateLayout: () => {\r\n\t\t\tvirtualScroller.updateLayout()\r\n\t\t},\r\n\r\n\t\t// (deprecated)\r\n\t\t// `.layout()` method name is deprecated, use `.updateLayout()` instead.\r\n layout: () => {\r\n\t\t\tvirtualScroller.updateLayout()\r\n\t\t},\r\n\r\n\t\t// (deprecated)\r\n\t\tupdateItem: (i) => {\r\n\t\t\treportError(`\".updateItem(i)\" method of React <VirtualScroller/> has been removed`)\r\n\t\t},\r\n\r\n\t\t// (deprecated)\r\n\t\trenderItem: (i) => {\r\n\t\t\treportError(`\".renderItem(i)\" method of React <VirtualScroller/> has been removed`)\r\n\t\t}\r\n\t}), [\r\n\t\tvirtualScroller\r\n\t])\r\n}"],"mappings":"AAAA,SAASA,mBAAT,QAAoC,OAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B,C,CAEA;;AACA,eAAe,SAASC,kBAAT,CAA4BC,GAA5B,QAEZ;EAAA,IADFC,eACE,QADFA,eACE;EACFJ,mBAAmB,CAACG,GAAD,EAAM;IAAA,OAAO;MAC/B;MACAE,YAAY,EAAE,wBAAM;QACnBD,eAAe,CAACC,YAAhB;MACA,CAJ8B;MAM/B;MACA;MACEC,MAAM,EAAE,kBAAM;QACfF,eAAe,CAACC,YAAhB;MACA,CAV8B;MAY/B;MACAE,UAAU,EAAE,oBAACC,CAAD,EAAO;QAClBP,WAAW,0EAAX;MACA,CAf8B;MAiB/B;MACAQ,UAAU,EAAE,oBAACD,CAAD,EAAO;QAClBP,WAAW,0EAAX;MACA;IApB8B,CAAP;EAAA,CAAN,EAqBf,CACHG,eADG,CArBe,CAAnB;AAwBA"}
@@ -1,16 +1,38 @@
1
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2
+
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+
5
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
6
+
1
7
  import log from '../utility/debug.js';
2
8
  import { useRef, useMemo, useCallback } from 'react';
3
9
  export default function useItemKeys(_ref) {
4
10
  var getItemId = _ref.getItemId;
5
- // List items are rendered with `key`s so that React doesn't
11
+ // These "listeners" will be called in case the auto-generated item keys are reset
12
+ // due to the prefix counter number reaching its maximum allowed value.
13
+ var itemKeysResetEventListeners = useMemo(function () {
14
+ return [];
15
+ }, []); // Adds an "on item keys reset" listener.
16
+
17
+ var onItemKeysReset = useCallback(function (listener) {
18
+ itemKeysResetEventListeners.push(listener);
19
+ }, []); // List items are rendered with `key`s so that React doesn't
6
20
  // "reuse" `itemComponent`s in cases when `items` are changed.
7
- var itemKeyPrefix = useRef(); // Generates a unique `key` prefix for list item components.
21
+
22
+ var itemKeyPrefix = useRef(); // When no `getItemId()` function is specified, it creates an item key
23
+ // from an auto-generated unique prefix and the item's index in the `items` array.
24
+ // This way, when the `items` change, their keys are also changed.
8
25
 
9
26
  var generateItemKeyPrefix = useMemo(function () {
10
27
  var counter = 0;
11
28
 
12
29
  function getNextCounter() {
13
30
  if (counter === Number.MAX_SAFE_INTEGER) {
31
+ for (var _iterator = _createForOfIteratorHelperLoose(itemKeysResetEventListeners), _step; !(_step = _iterator()).done;) {
32
+ var listener = _step.value;
33
+ listener();
34
+ }
35
+
14
36
  counter = 0;
15
37
  }
16
38
 
@@ -21,9 +43,9 @@ export default function useItemKeys(_ref) {
21
43
  return function () {
22
44
  itemKeyPrefix.current = String(getNextCounter());
23
45
  };
24
- }, [itemKeyPrefix]);
46
+ }, [itemKeyPrefix, itemKeysResetEventListeners]);
25
47
  useMemo(function () {
26
- // Generate an initial unique `key` prefix for list item components.
48
+ // Generate an initial unique `key` prefix for list items.
27
49
  generateItemKeyPrefix();
28
50
  }, []); // If `getItemId()` function is defined, then item `id`s are gonna be the item element `key`s.
29
51
 
@@ -43,13 +65,14 @@ export default function useItemKeys(_ref) {
43
65
 
44
66
  var getItemKey = useCallback(function (item, i) {
45
67
  if (getItemId) {
46
- return getItemId(item);
68
+ return String(getItemId(item));
47
69
  }
48
70
 
49
71
  return "".concat(itemKeyPrefix.current, ":").concat(i);
50
72
  }, [getItemId, itemKeyPrefix]);
51
73
  return {
52
74
  getItemKey: getItemKey,
75
+ onItemKeysReset: onItemKeysReset,
53
76
  usesAutogeneratedItemKeys: usesAutogeneratedItemKeys,
54
77
  updateItemKeysForNewItems: generateItemKeyPrefixIfNotUsingItemIds
55
78
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useItemKeys.js","names":["log","useRef","useMemo","useCallback","useItemKeys","getItemId","itemKeyPrefix","generateItemKeyPrefix","counter","getNextCounter","Number","MAX_SAFE_INTEGER","current","String","usesAutogeneratedItemKeys","generateItemKeyPrefixIfNotUsingItemIds","getItemKey","item","i","updateItemKeysForNewItems"],"sources":["../../source/react/useItemKeys.js"],"sourcesContent":["import log from '../utility/debug.js'\r\n\r\nimport { useRef, useMemo, useCallback } from 'react'\r\n\r\nexport default function useItemKeys({ getItemId }) {\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n const itemKeyPrefix = useRef()\r\n\r\n\t// Generates a unique `key` prefix for list item components.\r\n\tconst generateItemKeyPrefix = useMemo(() => {\r\n\t\tlet counter = 0\r\n\t\tfunction getNextCounter() {\r\n\t\t\tif (counter === Number.MAX_SAFE_INTEGER) {\r\n\t\t\t\tcounter = 0\r\n\t\t\t}\r\n\t\t\tcounter++\r\n\t\t\treturn counter\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\titemKeyPrefix.current = String(getNextCounter())\r\n\t\t}\r\n\t}, [\r\n\t\titemKeyPrefix\r\n\t])\r\n\r\n\tuseMemo(() => {\r\n\t\t// Generate an initial unique `key` prefix for list item components.\r\n\t\tgenerateItemKeyPrefix()\r\n\t}, [])\r\n\r\n\t// If `getItemId()` function is defined, then item `id`s are gonna be the item element `key`s.\r\n\tconst usesAutogeneratedItemKeys = !getItemId\r\n\r\n\tconst generateItemKeyPrefixIfNotUsingItemIds = useCallback(() => {\r\n\t\tif (usesAutogeneratedItemKeys) {\r\n\t\t\tgenerateItemKeyPrefix()\r\n\t\t\tlog('React: ~ Item key prefix:', itemKeyPrefix.current)\r\n\t\t}\r\n\t}, [\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tgenerateItemKeyPrefix\r\n\t])\r\n\r\n\t/**\r\n\t * Returns a `key` for an `item`'s element.\r\n\t * @param {object} item — The item.\r\n\t * @param {number} i — Item's index in `items` list.\r\n\t * @return {any}\r\n\t */\r\n\tconst getItemKey = useCallback((item, i) => {\r\n\t\tif (getItemId) {\r\n\t\t\treturn getItemId(item)\r\n\t\t}\r\n\t\treturn `${itemKeyPrefix.current}:${i}`\r\n\t}, [\r\n\t\tgetItemId,\r\n\t\titemKeyPrefix\r\n\t])\r\n\r\n\treturn {\r\n\t\tgetItemKey,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems: generateItemKeyPrefixIfNotUsingItemIds\r\n\t}\r\n}"],"mappings":"AAAA,OAAOA,GAAP,MAAgB,qBAAhB;AAEA,SAASC,MAAT,EAAiBC,OAAjB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,WAAT,OAAoC;EAAA,IAAbC,SAAa,QAAbA,SAAa;EAClD;EACA;EACC,IAAMC,aAAa,GAAGL,MAAM,EAA5B,CAHiD,CAKlD;;EACA,IAAMM,qBAAqB,GAAGL,OAAO,CAAC,YAAM;IAC3C,IAAIM,OAAO,GAAG,CAAd;;IACA,SAASC,cAAT,GAA0B;MACzB,IAAID,OAAO,KAAKE,MAAM,CAACC,gBAAvB,EAAyC;QACxCH,OAAO,GAAG,CAAV;MACA;;MACDA,OAAO;MACP,OAAOA,OAAP;IACA;;IACD,OAAO,YAAM;MACZF,aAAa,CAACM,OAAd,GAAwBC,MAAM,CAACJ,cAAc,EAAf,CAA9B;IACA,CAFD;EAGA,CAZoC,EAYlC,CACFH,aADE,CAZkC,CAArC;EAgBAJ,OAAO,CAAC,YAAM;IACb;IACAK,qBAAqB;EACrB,CAHM,EAGJ,EAHI,CAAP,CAtBkD,CA2BlD;;EACA,IAAMO,yBAAyB,GAAG,CAACT,SAAnC;EAEA,IAAMU,sCAAsC,GAAGZ,WAAW,CAAC,YAAM;IAChE,IAAIW,yBAAJ,EAA+B;MAC9BP,qBAAqB;MACrBP,GAAG,CAAC,2BAAD,EAA8BM,aAAa,CAACM,OAA5C,CAAH;IACA;EACD,CALyD,EAKvD,CACFE,yBADE,EAEFP,qBAFE,CALuD,CAA1D;EAUA;AACD;AACA;AACA;AACA;AACA;;EACC,IAAMS,UAAU,GAAGb,WAAW,CAAC,UAACc,IAAD,EAAOC,CAAP,EAAa;IAC3C,IAAIb,SAAJ,EAAe;MACd,OAAOA,SAAS,CAACY,IAAD,CAAhB;IACA;;IACD,iBAAUX,aAAa,CAACM,OAAxB,cAAmCM,CAAnC;EACA,CAL6B,EAK3B,CACFb,SADE,EAEFC,aAFE,CAL2B,CAA9B;EAUA,OAAO;IACNU,UAAU,EAAVA,UADM;IAENF,yBAAyB,EAAzBA,yBAFM;IAGNK,yBAAyB,EAAEJ;EAHrB,CAAP;AAKA"}
1
+ {"version":3,"file":"useItemKeys.js","names":["log","useRef","useMemo","useCallback","useItemKeys","getItemId","itemKeysResetEventListeners","onItemKeysReset","listener","push","itemKeyPrefix","generateItemKeyPrefix","counter","getNextCounter","Number","MAX_SAFE_INTEGER","current","String","usesAutogeneratedItemKeys","generateItemKeyPrefixIfNotUsingItemIds","getItemKey","item","i","updateItemKeysForNewItems"],"sources":["../../source/react/useItemKeys.js"],"sourcesContent":["import log from '../utility/debug.js'\r\n\r\nimport { useRef, useMemo, useCallback } from 'react'\r\n\r\nexport default function useItemKeys({ getItemId }) {\r\n\t// These \"listeners\" will be called in case the auto-generated item keys are reset\r\n\t// due to the prefix counter number reaching its maximum allowed value.\r\n\tconst itemKeysResetEventListeners = useMemo(() => {\r\n\t\treturn []\r\n\t}, [])\r\n\r\n\t// Adds an \"on item keys reset\" listener.\r\n\tconst onItemKeysReset = useCallback((listener) => {\r\n\t\titemKeysResetEventListeners.push(listener)\r\n\t}, [])\r\n\r\n\t// List items are rendered with `key`s so that React doesn't\r\n\t// \"reuse\" `itemComponent`s in cases when `items` are changed.\r\n const itemKeyPrefix = useRef()\r\n\r\n\t// When no `getItemId()` function is specified, it creates an item key\r\n\t// from an auto-generated unique prefix and the item's index in the `items` array.\r\n\t// This way, when the `items` change, their keys are also changed.\r\n\tconst generateItemKeyPrefix = useMemo(() => {\r\n\t\tlet counter = 0\r\n\t\tfunction getNextCounter() {\r\n\t\t\tif (counter === Number.MAX_SAFE_INTEGER) {\r\n\t\t\t\tfor (const listener of itemKeysResetEventListeners) {\r\n\t\t\t\t\tlistener()\r\n\t\t\t\t}\r\n\t\t\t\tcounter = 0\r\n\t\t\t}\r\n\t\t\tcounter++\r\n\t\t\treturn counter\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\titemKeyPrefix.current = String(getNextCounter())\r\n\t\t}\r\n\t}, [\r\n\t\titemKeyPrefix,\r\n\t\titemKeysResetEventListeners\r\n\t])\r\n\r\n\tuseMemo(() => {\r\n\t\t// Generate an initial unique `key` prefix for list items.\r\n\t\tgenerateItemKeyPrefix()\r\n\t}, [])\r\n\r\n\t// If `getItemId()` function is defined, then item `id`s are gonna be the item element `key`s.\r\n\tconst usesAutogeneratedItemKeys = !getItemId\r\n\r\n\tconst generateItemKeyPrefixIfNotUsingItemIds = useCallback(() => {\r\n\t\tif (usesAutogeneratedItemKeys) {\r\n\t\t\tgenerateItemKeyPrefix()\r\n\t\t\tlog('React: ~ Item key prefix:', itemKeyPrefix.current)\r\n\t\t}\r\n\t}, [\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tgenerateItemKeyPrefix\r\n\t])\r\n\r\n\t/**\r\n\t * Returns a `key` for an `item`'s element.\r\n\t * @param {object} item — The item.\r\n\t * @param {number} i — Item's index in `items` list.\r\n\t * @return {any}\r\n\t */\r\n\tconst getItemKey = useCallback((item, i) => {\r\n\t\tif (getItemId) {\r\n\t\t\treturn String(getItemId(item))\r\n\t\t}\r\n\t\treturn `${itemKeyPrefix.current}:${i}`\r\n\t}, [\r\n\t\tgetItemId,\r\n\t\titemKeyPrefix\r\n\t])\r\n\r\n\treturn {\r\n\t\tgetItemKey,\r\n\t\tonItemKeysReset,\r\n\t\tusesAutogeneratedItemKeys,\r\n\t\tupdateItemKeysForNewItems: generateItemKeyPrefixIfNotUsingItemIds\r\n\t}\r\n}"],"mappings":";;;;;;AAAA,OAAOA,GAAP,MAAgB,qBAAhB;AAEA,SAASC,MAAT,EAAiBC,OAAjB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,WAAT,OAAoC;EAAA,IAAbC,SAAa,QAAbA,SAAa;EAClD;EACA;EACA,IAAMC,2BAA2B,GAAGJ,OAAO,CAAC,YAAM;IACjD,OAAO,EAAP;EACA,CAF0C,EAExC,EAFwC,CAA3C,CAHkD,CAOlD;;EACA,IAAMK,eAAe,GAAGJ,WAAW,CAAC,UAACK,QAAD,EAAc;IACjDF,2BAA2B,CAACG,IAA5B,CAAiCD,QAAjC;EACA,CAFkC,EAEhC,EAFgC,CAAnC,CARkD,CAYlD;EACA;;EACC,IAAME,aAAa,GAAGT,MAAM,EAA5B,CAdiD,CAgBlD;EACA;EACA;;EACA,IAAMU,qBAAqB,GAAGT,OAAO,CAAC,YAAM;IAC3C,IAAIU,OAAO,GAAG,CAAd;;IACA,SAASC,cAAT,GAA0B;MACzB,IAAID,OAAO,KAAKE,MAAM,CAACC,gBAAvB,EAAyC;QACxC,qDAAuBT,2BAAvB,wCAAoD;UAAA,IAAzCE,QAAyC;UACnDA,QAAQ;QACR;;QACDI,OAAO,GAAG,CAAV;MACA;;MACDA,OAAO;MACP,OAAOA,OAAP;IACA;;IACD,OAAO,YAAM;MACZF,aAAa,CAACM,OAAd,GAAwBC,MAAM,CAACJ,cAAc,EAAf,CAA9B;IACA,CAFD;EAGA,CAfoC,EAelC,CACFH,aADE,EAEFJ,2BAFE,CAfkC,CAArC;EAoBAJ,OAAO,CAAC,YAAM;IACb;IACAS,qBAAqB;EACrB,CAHM,EAGJ,EAHI,CAAP,CAvCkD,CA4ClD;;EACA,IAAMO,yBAAyB,GAAG,CAACb,SAAnC;EAEA,IAAMc,sCAAsC,GAAGhB,WAAW,CAAC,YAAM;IAChE,IAAIe,yBAAJ,EAA+B;MAC9BP,qBAAqB;MACrBX,GAAG,CAAC,2BAAD,EAA8BU,aAAa,CAACM,OAA5C,CAAH;IACA;EACD,CALyD,EAKvD,CACFE,yBADE,EAEFP,qBAFE,CALuD,CAA1D;EAUA;AACD;AACA;AACA;AACA;AACA;;EACC,IAAMS,UAAU,GAAGjB,WAAW,CAAC,UAACkB,IAAD,EAAOC,CAAP,EAAa;IAC3C,IAAIjB,SAAJ,EAAe;MACd,OAAOY,MAAM,CAACZ,SAAS,CAACgB,IAAD,CAAV,CAAb;IACA;;IACD,iBAAUX,aAAa,CAACM,OAAxB,cAAmCM,CAAnC;EACA,CAL6B,EAK3B,CACFjB,SADE,EAEFK,aAFE,CAL2B,CAA9B;EAUA,OAAO;IACNU,UAAU,EAAVA,UADM;IAENb,eAAe,EAAfA,eAFM;IAGNW,yBAAyB,EAAzBA,yBAHM;IAINK,yBAAyB,EAAEJ;EAJrB,CAAP;AAMA"}
@@ -0,0 +1,44 @@
1
+ // import type { MutableRefObject } from 'react'
2
+ import { useCallback } from 'react'; // use this hook when a React component receives a `ref` which it is supposed to "forward"
3
+ // and when it would also like to access that `ref`'s value in its code.
4
+ //
5
+ // ```js
6
+ // const FormWithAutoFocus = forwardRef((props, ref) => {
7
+ // const duplicateRef = useRef()
8
+ // const setRef = useMergeRefs<RefValueType>(ref, duplicateRef)
9
+ //
10
+ // useEffect(() => {
11
+ // duplicateRef.current.focus()
12
+ // }, [])
13
+ //
14
+ // return (
15
+ // <Form ref={setRef} {...props}/>
16
+ // )
17
+ // })
18
+ // ```
19
+ //
20
+ // export default function useMergeRefs<T extends MutableRefObject<any>>(ref1, ref2, ref3) {
21
+
22
+ export default function useMergeRefs(ref1, ref2, ref3, otherArgument) {
23
+ if (otherArgument) {
24
+ throw new Error('A maximum of 3 refs is supported');
25
+ }
26
+
27
+ var setRef = useCallback(function (instance) {
28
+ setRefValue(ref1, instance);
29
+ setRefValue(ref2, instance);
30
+ setRefValue(ref3, instance);
31
+ }, [ref1, ref2, ref3]);
32
+ return setRef;
33
+ }
34
+
35
+ function setRefValue(ref, instance) {
36
+ if (ref) {
37
+ if (typeof ref === 'function') {
38
+ ref(instance);
39
+ } else {
40
+ ref.current = instance;
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=useMergeRefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMergeRefs.js","names":["useCallback","useMergeRefs","ref1","ref2","ref3","otherArgument","Error","setRef","instance","setRefValue","ref","current"],"sources":["../../source/react/useMergeRefs.js"],"sourcesContent":["// import type { MutableRefObject } from 'react'\r\nimport { useCallback } from 'react'\r\n\r\n// use this hook when a React component receives a `ref` which it is supposed to \"forward\"\r\n// and when it would also like to access that `ref`'s value in its code.\r\n//\r\n// ```js\r\n// const FormWithAutoFocus = forwardRef((props, ref) => {\r\n// const duplicateRef = useRef()\r\n// const setRef = useMergeRefs<RefValueType>(ref, duplicateRef)\r\n//\r\n// useEffect(() => {\r\n// duplicateRef.current.focus()\r\n// }, [])\r\n//\r\n// return (\r\n// <Form ref={setRef} {...props}/>\r\n// )\r\n// })\r\n// ```\r\n//\r\n// export default function useMergeRefs<T extends MutableRefObject<any>>(ref1, ref2, ref3) {\r\nexport default function useMergeRefs(ref1, ref2, ref3, otherArgument) {\r\n\tif (otherArgument) {\r\n\t\tthrow new Error('A maximum of 3 refs is supported')\r\n\t}\r\n\r\n\tconst setRef = useCallback((instance) => {\r\n\t\tsetRefValue(ref1, instance)\r\n\t\tsetRefValue(ref2, instance)\r\n\t\tsetRefValue(ref3, instance)\r\n\t}, [ref1, ref2, ref3])\r\n\r\n\treturn setRef\r\n}\r\n\r\nfunction setRefValue(ref, instance) {\r\n\tif (ref) {\r\n\t\tif (typeof ref === 'function') {\r\n\t\t\tref(instance)\r\n\t\t} else {\r\n\t\t\tref.current = instance\r\n\t\t}\r\n\t}\r\n}"],"mappings":"AAAA;AACA,SAASA,WAAT,QAA4B,OAA5B,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,YAAT,CAAsBC,IAAtB,EAA4BC,IAA5B,EAAkCC,IAAlC,EAAwCC,aAAxC,EAAuD;EACrE,IAAIA,aAAJ,EAAmB;IAClB,MAAM,IAAIC,KAAJ,CAAU,kCAAV,CAAN;EACA;;EAED,IAAMC,MAAM,GAAGP,WAAW,CAAC,UAACQ,QAAD,EAAc;IACxCC,WAAW,CAACP,IAAD,EAAOM,QAAP,CAAX;IACAC,WAAW,CAACN,IAAD,EAAOK,QAAP,CAAX;IACAC,WAAW,CAACL,IAAD,EAAOI,QAAP,CAAX;EACA,CAJyB,EAIvB,CAACN,IAAD,EAAOC,IAAP,EAAaC,IAAb,CAJuB,CAA1B;EAMA,OAAOG,MAAP;AACA;;AAED,SAASE,WAAT,CAAqBC,GAArB,EAA0BF,QAA1B,EAAoC;EACnC,IAAIE,GAAJ,EAAS;IACR,IAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;MAC9BA,GAAG,CAACF,QAAD,CAAH;IACA,CAFD,MAEO;MACNE,GAAG,CAACC,OAAJ,GAAcH,QAAd;IACA;EACD;AACD"}
@@ -1,24 +1,40 @@
1
1
  import { useMemo, useRef, useCallback } from 'react';
2
2
  export default function useOnItemHeightDidChange(_ref) {
3
- var initialItemsCount = _ref.initialItemsCount,
3
+ var getItemKey = _ref.getItemKey,
4
+ onItemKeysReset = _ref.onItemKeysReset,
4
5
  virtualScroller = _ref.virtualScroller;
5
- // Only compute the initial cache value once.
6
- var initialCacheValue = useMemo(function () {
7
- return new Array(initialItemsCount);
8
- }, []); // Handler functions cache.
6
+ // Only create the initial cache once.
7
+ var initialCache = useMemo(function () {
8
+ return createCache();
9
+ }, []); // A cache of `onItemHeightDidChange()` functions.
9
10
 
10
- var cache = useRef(initialCacheValue); // Caches per-item `onItemHeightDidChange` functions' "references"
11
+ var cache = useRef(initialCache); // Adds an "on item keys reset" listener that clears the cache when item keys are reset.
12
+
13
+ useMemo(function () {
14
+ onItemKeysReset(function () {
15
+ cache.current = createCache();
16
+ });
17
+ }, []); // Caches per-item `onItemHeightDidChange` functions' "references"
11
18
  // so that item components don't get re-rendered needlessly.
12
19
 
13
- var getOnItemHeightDidChange = useCallback(function (i) {
14
- if (!cache.current[i]) {
15
- cache.current[i] = function () {
16
- return virtualScroller.onItemHeightDidChange(i);
20
+ var getOnItemHeightDidChange = useCallback(function (item) {
21
+ var itemKey = getItemKey(item);
22
+
23
+ if (!cache.current[itemKey]) {
24
+ cache.current[itemKey] = function () {
25
+ virtualScroller.onItemHeightDidChange(item);
17
26
  };
18
27
  }
19
28
 
20
- return cache.current[i];
21
- }, [virtualScroller, cache]);
29
+ return cache.current[itemKey];
30
+ }, [virtualScroller, getItemKey, cache]);
22
31
  return getOnItemHeightDidChange;
23
32
  }
33
+
34
+ function createCache() {
35
+ // It could also use a `new Map()` here and then use `item` as a key.
36
+ // Although, sometimes an `item` "reference" might change while it still being
37
+ // the same item, i.e. having the same `getItemId(item)` value.
38
+ return {};
39
+ }
24
40
  //# sourceMappingURL=useOnItemHeightDidChange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useOnItemHeightDidChange.js","names":["useMemo","useRef","useCallback","useOnItemHeightDidChange","initialItemsCount","virtualScroller","initialCacheValue","Array","cache","getOnItemHeightDidChange","i","current","onItemHeightDidChange"],"sources":["../../source/react/useOnItemHeightDidChange.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useOnItemHeightDidChange({\r\n\tinitialItemsCount,\r\n\tvirtualScroller\r\n}) {\r\n\t// Only compute the initial cache value once.\r\n\tconst initialCacheValue = useMemo(() => {\r\n\t\treturn new Array(initialItemsCount)\r\n\t}, [])\r\n\r\n\t// Handler functions cache.\r\n\tconst cache = useRef(initialCacheValue)\r\n\r\n\t// Caches per-item `onItemHeightDidChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightDidChange = useCallback((i) => {\r\n\t\tif (!cache.current[i]) {\r\n\t\t\tcache.current[i] = () => virtualScroller.onItemHeightDidChange(i)\r\n\t\t}\r\n\t\treturn cache.current[i]\r\n\t}, [\r\n\t\tvirtualScroller,\r\n\t\tcache\r\n\t])\r\n\r\n\treturn getOnItemHeightDidChange\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,wBAAT,OAGZ;EAAA,IAFFC,iBAEE,QAFFA,iBAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,iBAAiB,GAAGN,OAAO,CAAC,YAAM;IACvC,OAAO,IAAIO,KAAJ,CAAUH,iBAAV,CAAP;EACA,CAFgC,EAE9B,EAF8B,CAAjC,CAFE,CAMF;;EACA,IAAMI,KAAK,GAAGP,MAAM,CAACK,iBAAD,CAApB,CAPE,CASF;EACA;;EACA,IAAMG,wBAAwB,GAAGP,WAAW,CAAC,UAACQ,CAAD,EAAO;IACnD,IAAI,CAACF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAL,EAAuB;MACtBF,KAAK,CAACG,OAAN,CAAcD,CAAd,IAAmB;QAAA,OAAML,eAAe,CAACO,qBAAhB,CAAsCF,CAAtC,CAAN;MAAA,CAAnB;IACA;;IACD,OAAOF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAP;EACA,CAL2C,EAKzC,CACFL,eADE,EAEFG,KAFE,CALyC,CAA5C;EAUA,OAAOC,wBAAP;AACA"}
1
+ {"version":3,"file":"useOnItemHeightDidChange.js","names":["useMemo","useRef","useCallback","useOnItemHeightDidChange","getItemKey","onItemKeysReset","virtualScroller","initialCache","createCache","cache","current","getOnItemHeightDidChange","item","itemKey","onItemHeightDidChange"],"sources":["../../source/react/useOnItemHeightDidChange.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useOnItemHeightDidChange({\r\n\tgetItemKey,\r\n\tonItemKeysReset,\r\n\tvirtualScroller\r\n}) {\r\n\t// Only create the initial cache once.\r\n\tconst initialCache = useMemo(() => {\r\n\t\treturn createCache()\r\n\t}, [])\r\n\r\n\t// A cache of `onItemHeightDidChange()` functions.\r\n\tconst cache = useRef(initialCache)\r\n\r\n\t// Adds an \"on item keys reset\" listener that clears the cache when item keys are reset.\r\n\tuseMemo(() => {\r\n\t\tonItemKeysReset(() => {\r\n\t\t\tcache.current = createCache()\r\n\t\t})\r\n\t}, [])\r\n\r\n\t// Caches per-item `onItemHeightDidChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightDidChange = useCallback((item) => {\r\n\t\tconst itemKey = getItemKey(item)\r\n\t\tif (!cache.current[itemKey]) {\r\n\t\t\tcache.current[itemKey] = () => {\r\n\t\t\t\tvirtualScroller.onItemHeightDidChange(item)\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cache.current[itemKey]\r\n\t}, [\r\n\t\tvirtualScroller,\r\n\t\tgetItemKey,\r\n\t\tcache\r\n\t])\r\n\r\n\treturn getOnItemHeightDidChange\r\n}\r\n\r\nfunction createCache() {\r\n\t// It could also use a `new Map()` here and then use `item` as a key.\r\n\t// Although, sometimes an `item` \"reference\" might change while it still being\r\n\t// the same item, i.e. having the same `getItemId(item)` value.\r\n\treturn {}\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,wBAAT,OAIZ;EAAA,IAHFC,UAGE,QAHFA,UAGE;EAAA,IAFFC,eAEE,QAFFA,eAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,YAAY,GAAGP,OAAO,CAAC,YAAM;IAClC,OAAOQ,WAAW,EAAlB;EACA,CAF2B,EAEzB,EAFyB,CAA5B,CAFE,CAMF;;EACA,IAAMC,KAAK,GAAGR,MAAM,CAACM,YAAD,CAApB,CAPE,CASF;;EACAP,OAAO,CAAC,YAAM;IACbK,eAAe,CAAC,YAAM;MACrBI,KAAK,CAACC,OAAN,GAAgBF,WAAW,EAA3B;IACA,CAFc,CAAf;EAGA,CAJM,EAIJ,EAJI,CAAP,CAVE,CAgBF;EACA;;EACA,IAAMG,wBAAwB,GAAGT,WAAW,CAAC,UAACU,IAAD,EAAU;IACtD,IAAMC,OAAO,GAAGT,UAAU,CAACQ,IAAD,CAA1B;;IACA,IAAI,CAACH,KAAK,CAACC,OAAN,CAAcG,OAAd,CAAL,EAA6B;MAC5BJ,KAAK,CAACC,OAAN,CAAcG,OAAd,IAAyB,YAAM;QAC9BP,eAAe,CAACQ,qBAAhB,CAAsCF,IAAtC;MACA,CAFD;IAGA;;IACD,OAAOH,KAAK,CAACC,OAAN,CAAcG,OAAd,CAAP;EACA,CAR2C,EAQzC,CACFP,eADE,EAEFF,UAFE,EAGFK,KAHE,CARyC,CAA5C;EAcA,OAAOE,wBAAP;AACA;;AAED,SAASH,WAAT,GAAuB;EACtB;EACA;EACA;EACA,OAAO,EAAP;AACA"}
@@ -1,24 +1,43 @@
1
1
  import { useMemo, useRef, useCallback } from 'react';
2
2
  export default function useSetItemState(_ref) {
3
- var initialItemsCount = _ref.initialItemsCount,
3
+ var getItemKey = _ref.getItemKey,
4
+ onItemKeysReset = _ref.onItemKeysReset,
4
5
  virtualScroller = _ref.virtualScroller;
5
- // Only compute the initial cache value once.
6
- var initialCacheValue = useMemo(function () {
7
- return new Array(initialItemsCount);
8
- }, []); // Handler functions cache.
6
+ // Only create the initial cache once.
7
+ var initialCache = useMemo(function () {
8
+ return createCache();
9
+ }, []); // A cache of `setItemState()` functions.
9
10
 
10
- var cache = useRef(initialCacheValue); // Caches per-item `setItemState` functions' "references"
11
+ var cache = useRef(initialCache); // Adds an "on item keys reset" listener that clears the cache when item keys are reset.
12
+
13
+ useMemo(function () {
14
+ onItemKeysReset(function () {
15
+ cache.current = createCache();
16
+ });
17
+ }, []); // Caches per-item `setItemState` functions' "references"
11
18
  // so that item components don't get re-rendered needlessly.
19
+ // I.e. it could just re-create this function every time
20
+ // but that would also make React re-render the item component every time
21
+ // which wouldn't be efficient.
22
+
23
+ var getSetItemState = useCallback(function (item) {
24
+ var itemKey = getItemKey(item);
12
25
 
13
- var getSetItemState = useCallback(function (i) {
14
- if (!cache.current[i]) {
15
- cache.current[i] = function (itemState) {
16
- return virtualScroller.setItemState(i, itemState);
26
+ if (!cache.current[itemKey]) {
27
+ cache.current[itemKey] = function (itemState) {
28
+ virtualScroller.setItemState(item, itemState);
17
29
  };
18
30
  }
19
31
 
20
- return cache.current[i];
21
- }, [virtualScroller, cache]);
32
+ return cache.current[itemKey];
33
+ }, [virtualScroller, getItemKey, cache]);
22
34
  return getSetItemState;
23
35
  }
36
+
37
+ function createCache() {
38
+ // It could also use a `new Map()` here and then use `item` as a key.
39
+ // Although, sometimes an `item` "reference" might change while it still being
40
+ // the same item, i.e. having the same `getItemId(item)` value.
41
+ return {};
42
+ }
24
43
  //# sourceMappingURL=useSetItemState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSetItemState.js","names":["useMemo","useRef","useCallback","useSetItemState","initialItemsCount","virtualScroller","initialCacheValue","Array","cache","getSetItemState","i","current","itemState","setItemState"],"sources":["../../source/react/useSetItemState.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useSetItemState({\r\n\tinitialItemsCount,\r\n\tvirtualScroller\r\n}) {\r\n\t// Only compute the initial cache value once.\r\n\tconst initialCacheValue = useMemo(() => {\r\n\t\treturn new Array(initialItemsCount)\r\n\t}, [])\r\n\r\n\t// Handler functions cache.\r\n\tconst cache = useRef(initialCacheValue)\r\n\r\n\t// Caches per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getSetItemState = useCallback((i) => {\r\n\t\tif (!cache.current[i]) {\r\n\t\t\tcache.current[i] = (itemState) => virtualScroller.setItemState(i, itemState)\r\n\t\t}\r\n\t\treturn cache.current[i]\r\n\t}, [\r\n\t\tvirtualScroller,\r\n\t\tcache\r\n\t])\r\n\r\n\treturn getSetItemState\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,eAAT,OAGZ;EAAA,IAFFC,iBAEE,QAFFA,iBAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,iBAAiB,GAAGN,OAAO,CAAC,YAAM;IACvC,OAAO,IAAIO,KAAJ,CAAUH,iBAAV,CAAP;EACA,CAFgC,EAE9B,EAF8B,CAAjC,CAFE,CAMF;;EACA,IAAMI,KAAK,GAAGP,MAAM,CAACK,iBAAD,CAApB,CAPE,CASF;EACA;;EACA,IAAMG,eAAe,GAAGP,WAAW,CAAC,UAACQ,CAAD,EAAO;IAC1C,IAAI,CAACF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAL,EAAuB;MACtBF,KAAK,CAACG,OAAN,CAAcD,CAAd,IAAmB,UAACE,SAAD;QAAA,OAAeP,eAAe,CAACQ,YAAhB,CAA6BH,CAA7B,EAAgCE,SAAhC,CAAf;MAAA,CAAnB;IACA;;IACD,OAAOJ,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAP;EACA,CALkC,EAKhC,CACFL,eADE,EAEFG,KAFE,CALgC,CAAnC;EAUA,OAAOC,eAAP;AACA"}
1
+ {"version":3,"file":"useSetItemState.js","names":["useMemo","useRef","useCallback","useSetItemState","getItemKey","onItemKeysReset","virtualScroller","initialCache","createCache","cache","current","getSetItemState","item","itemKey","itemState","setItemState"],"sources":["../../source/react/useSetItemState.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useSetItemState({\r\n\tgetItemKey,\r\n\tonItemKeysReset,\r\n\tvirtualScroller\r\n}) {\r\n\t// Only create the initial cache once.\r\n\tconst initialCache = useMemo(() => {\r\n\t\treturn createCache()\r\n\t}, [])\r\n\r\n\t// A cache of `setItemState()` functions.\r\n\tconst cache = useRef(initialCache)\r\n\r\n\t// Adds an \"on item keys reset\" listener that clears the cache when item keys are reset.\r\n\tuseMemo(() => {\r\n\t\tonItemKeysReset(() => {\r\n\t\t\tcache.current = createCache()\r\n\t\t})\r\n\t}, [])\r\n\r\n\t// Caches per-item `setItemState` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\t// I.e. it could just re-create this function every time\r\n\t// but that would also make React re-render the item component every time\r\n\t// which wouldn't be efficient.\r\n\tconst getSetItemState = useCallback((item) => {\r\n\t\tconst itemKey = getItemKey(item)\r\n\t\tif (!cache.current[itemKey]) {\r\n\t\t\tcache.current[itemKey] = (itemState) => {\r\n\t\t\t\tvirtualScroller.setItemState(item, itemState)\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cache.current[itemKey]\r\n\t}, [\r\n\t\tvirtualScroller,\r\n\t\tgetItemKey,\r\n\t\tcache\r\n\t])\r\n\r\n\treturn getSetItemState\r\n}\r\n\r\nfunction createCache() {\r\n\t// It could also use a `new Map()` here and then use `item` as a key.\r\n\t// Although, sometimes an `item` \"reference\" might change while it still being\r\n\t// the same item, i.e. having the same `getItemId(item)` value.\r\n\treturn {}\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,eAAT,OAIZ;EAAA,IAHFC,UAGE,QAHFA,UAGE;EAAA,IAFFC,eAEE,QAFFA,eAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,YAAY,GAAGP,OAAO,CAAC,YAAM;IAClC,OAAOQ,WAAW,EAAlB;EACA,CAF2B,EAEzB,EAFyB,CAA5B,CAFE,CAMF;;EACA,IAAMC,KAAK,GAAGR,MAAM,CAACM,YAAD,CAApB,CAPE,CASF;;EACAP,OAAO,CAAC,YAAM;IACbK,eAAe,CAAC,YAAM;MACrBI,KAAK,CAACC,OAAN,GAAgBF,WAAW,EAA3B;IACA,CAFc,CAAf;EAGA,CAJM,EAIJ,EAJI,CAAP,CAVE,CAgBF;EACA;EACA;EACA;EACA;;EACA,IAAMG,eAAe,GAAGT,WAAW,CAAC,UAACU,IAAD,EAAU;IAC7C,IAAMC,OAAO,GAAGT,UAAU,CAACQ,IAAD,CAA1B;;IACA,IAAI,CAACH,KAAK,CAACC,OAAN,CAAcG,OAAd,CAAL,EAA6B;MAC5BJ,KAAK,CAACC,OAAN,CAAcG,OAAd,IAAyB,UAACC,SAAD,EAAe;QACvCR,eAAe,CAACS,YAAhB,CAA6BH,IAA7B,EAAmCE,SAAnC;MACA,CAFD;IAGA;;IACD,OAAOL,KAAK,CAACC,OAAN,CAAcG,OAAd,CAAP;EACA,CARkC,EAQhC,CACFP,eADE,EAEFF,UAFE,EAGFK,KAHE,CARgC,CAAnC;EAcA,OAAOE,eAAP;AACA;;AAED,SAASH,WAAT,GAAuB;EACtB;EACA;EACA;EACA,OAAO,EAAP;AACA"}
@@ -40,4 +40,4 @@ export default function useVirtualScrollerStartStop(virtualScroller, _ref) {
40
40
  }
41
41
  }, [readyToStart]);
42
42
  }
43
- //# sourceMappingURL=useVirtualScrollerStartStop.js.map
43
+ //# sourceMappingURL=useStartStopVirtualScroller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useVirtualScrollerStartStop.js","names":["useLayoutEffect","useEffect","useRef","log","useVirtualScrollerStartStop","virtualScroller","readyToStart","hasStarted","startIfReadyToStartAndNotStarted","current","start","stopIfStarted","stop","readyToStartPrev"],"sources":["../../source/react/useVirtualScrollerStartStop.js"],"sourcesContent":["import { useLayoutEffect, useEffect, useRef } from 'react'\r\n\r\nimport log from '../utility/debug.js'\r\n\r\nexport default function useVirtualScrollerStartStop(virtualScroller, { readyToStart }) {\r\n\tconst hasStarted = useRef(false)\r\n\r\n\tconst startIfReadyToStartAndNotStarted = () => {\r\n\t\tif (!hasStarted.current) {\r\n\t\t\tif (readyToStart === false) {\r\n\t\t\t\tlog('Could\\'ve started but isn\\'t ready to start')\r\n\t\t\t} else {\r\n\t\t\t\thasStarted.current = true\r\n\t\t\t\t// Start listening to scroll events.\r\n\t\t\t\tvirtualScroller.start()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst stopIfStarted = () => {\r\n\t\tif (hasStarted.current) {\r\n\t\t\t// Stop listening to scroll events.\r\n\t\t\tvirtualScroller.stop()\r\n\t\t\t// Can be re-started.\r\n\t\t\thasStarted.current = false\r\n\t\t}\r\n\t}\r\n\r\n\t// Uses `useLayoutEffect()` here rather than just `useEffect()`\r\n\t// in order to reduce the timeframe of showing an empty list to the user.\r\n\tuseLayoutEffect(() => {\r\n\t\tstartIfReadyToStartAndNotStarted()\r\n\t\treturn stopIfStarted\r\n\t}, [])\r\n\r\n\tconst readyToStartPrev = useRef(readyToStart)\r\n\r\n\tuseEffect(() => {\r\n\t\tif (readyToStartPrev.current === false && readyToStart !== false) {\r\n\t\t\treadyToStartPrev.current = readyToStart\r\n\t\t\tlog('Is ready to start')\r\n\t\t\tstartIfReadyToStartAndNotStarted()\r\n\t\t}\r\n\t}, [readyToStart])\r\n}"],"mappings":"AAAA,SAASA,eAAT,EAA0BC,SAA1B,EAAqCC,MAArC,QAAmD,OAAnD;AAEA,OAAOC,GAAP,MAAgB,qBAAhB;AAEA,eAAe,SAASC,2BAAT,CAAqCC,eAArC,QAAwE;EAAA,IAAhBC,YAAgB,QAAhBA,YAAgB;EACtF,IAAMC,UAAU,GAAGL,MAAM,CAAC,KAAD,CAAzB;;EAEA,IAAMM,gCAAgC,GAAG,SAAnCA,gCAAmC,GAAM;IAC9C,IAAI,CAACD,UAAU,CAACE,OAAhB,EAAyB;MACxB,IAAIH,YAAY,KAAK,KAArB,EAA4B;QAC3BH,GAAG,CAAC,6CAAD,CAAH;MACA,CAFD,MAEO;QACNI,UAAU,CAACE,OAAX,GAAqB,IAArB,CADM,CAEN;;QACAJ,eAAe,CAACK,KAAhB;MACA;IACD;EACD,CAVD;;EAYA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;IAC3B,IAAIJ,UAAU,CAACE,OAAf,EAAwB;MACvB;MACAJ,eAAe,CAACO,IAAhB,GAFuB,CAGvB;;MACAL,UAAU,CAACE,OAAX,GAAqB,KAArB;IACA;EACD,CAPD,CAfsF,CAwBtF;EACA;;;EACAT,eAAe,CAAC,YAAM;IACrBQ,gCAAgC;IAChC,OAAOG,aAAP;EACA,CAHc,EAGZ,EAHY,CAAf;EAKA,IAAME,gBAAgB,GAAGX,MAAM,CAACI,YAAD,CAA/B;EAEAL,SAAS,CAAC,YAAM;IACf,IAAIY,gBAAgB,CAACJ,OAAjB,KAA6B,KAA7B,IAAsCH,YAAY,KAAK,KAA3D,EAAkE;MACjEO,gBAAgB,CAACJ,OAAjB,GAA2BH,YAA3B;MACAH,GAAG,CAAC,mBAAD,CAAH;MACAK,gCAAgC;IAChC;EACD,CANQ,EAMN,CAACF,YAAD,CANM,CAAT;AAOA"}
1
+ {"version":3,"file":"useStartStopVirtualScroller.js","names":["useLayoutEffect","useEffect","useRef","log","useVirtualScrollerStartStop","virtualScroller","readyToStart","hasStarted","startIfReadyToStartAndNotStarted","current","start","stopIfStarted","stop","readyToStartPrev"],"sources":["../../source/react/useStartStopVirtualScroller.js"],"sourcesContent":["import { useLayoutEffect, useEffect, useRef } from 'react'\r\n\r\nimport log from '../utility/debug.js'\r\n\r\nexport default function useVirtualScrollerStartStop(virtualScroller, { readyToStart }) {\r\n\tconst hasStarted = useRef(false)\r\n\r\n\tconst startIfReadyToStartAndNotStarted = () => {\r\n\t\tif (!hasStarted.current) {\r\n\t\t\tif (readyToStart === false) {\r\n\t\t\t\tlog('Could\\'ve started but isn\\'t ready to start')\r\n\t\t\t} else {\r\n\t\t\t\thasStarted.current = true\r\n\t\t\t\t// Start listening to scroll events.\r\n\t\t\t\tvirtualScroller.start()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst stopIfStarted = () => {\r\n\t\tif (hasStarted.current) {\r\n\t\t\t// Stop listening to scroll events.\r\n\t\t\tvirtualScroller.stop()\r\n\t\t\t// Can be re-started.\r\n\t\t\thasStarted.current = false\r\n\t\t}\r\n\t}\r\n\r\n\t// Uses `useLayoutEffect()` here rather than just `useEffect()`\r\n\t// in order to reduce the timeframe of showing an empty list to the user.\r\n\tuseLayoutEffect(() => {\r\n\t\tstartIfReadyToStartAndNotStarted()\r\n\t\treturn stopIfStarted\r\n\t}, [])\r\n\r\n\tconst readyToStartPrev = useRef(readyToStart)\r\n\r\n\tuseEffect(() => {\r\n\t\tif (readyToStartPrev.current === false && readyToStart !== false) {\r\n\t\t\treadyToStartPrev.current = readyToStart\r\n\t\t\tlog('Is ready to start')\r\n\t\t\tstartIfReadyToStartAndNotStarted()\r\n\t\t}\r\n\t}, [readyToStart])\r\n}"],"mappings":"AAAA,SAASA,eAAT,EAA0BC,SAA1B,EAAqCC,MAArC,QAAmD,OAAnD;AAEA,OAAOC,GAAP,MAAgB,qBAAhB;AAEA,eAAe,SAASC,2BAAT,CAAqCC,eAArC,QAAwE;EAAA,IAAhBC,YAAgB,QAAhBA,YAAgB;EACtF,IAAMC,UAAU,GAAGL,MAAM,CAAC,KAAD,CAAzB;;EAEA,IAAMM,gCAAgC,GAAG,SAAnCA,gCAAmC,GAAM;IAC9C,IAAI,CAACD,UAAU,CAACE,OAAhB,EAAyB;MACxB,IAAIH,YAAY,KAAK,KAArB,EAA4B;QAC3BH,GAAG,CAAC,6CAAD,CAAH;MACA,CAFD,MAEO;QACNI,UAAU,CAACE,OAAX,GAAqB,IAArB,CADM,CAEN;;QACAJ,eAAe,CAACK,KAAhB;MACA;IACD;EACD,CAVD;;EAYA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,GAAM;IAC3B,IAAIJ,UAAU,CAACE,OAAf,EAAwB;MACvB;MACAJ,eAAe,CAACO,IAAhB,GAFuB,CAGvB;;MACAL,UAAU,CAACE,OAAX,GAAqB,KAArB;IACA;EACD,CAPD,CAfsF,CAwBtF;EACA;;;EACAT,eAAe,CAAC,YAAM;IACrBQ,gCAAgC;IAChC,OAAOG,aAAP;EACA,CAHc,EAGZ,EAHY,CAAf;EAKA,IAAME,gBAAgB,GAAGX,MAAM,CAACI,YAAD,CAA/B;EAEAL,SAAS,CAAC,YAAM;IACf,IAAIY,gBAAgB,CAACJ,OAAjB,KAA6B,KAA7B,IAAsCH,YAAY,KAAK,KAA3D,EAAkE;MACjEO,gBAAgB,CAACJ,OAAjB,GAA2BH,YAA3B;MACAH,GAAG,CAAC,mBAAD,CAAH;MACAK,gCAAgC;IAChC;EACD,CANQ,EAMN,CAACF,YAAD,CANM,CAAT;AAOA"}