virtual-scroller 1.8.0 → 1.9.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 (248) hide show
  1. package/.gitlab-ci.yml +1 -1
  2. package/CHANGELOG.md +57 -0
  3. package/README.md +337 -160
  4. package/bundle/virtual-scroller-dom.js +1 -1
  5. package/bundle/virtual-scroller-dom.js.map +1 -1
  6. package/bundle/virtual-scroller-react.js +1 -1
  7. package/bundle/virtual-scroller-react.js.map +1 -1
  8. package/bundle/virtual-scroller.js +1 -1
  9. package/bundle/virtual-scroller.js.map +1 -1
  10. package/commonjs/BeforeResize.js +23 -27
  11. package/commonjs/BeforeResize.js.map +1 -1
  12. package/commonjs/DOM/Engine.js +7 -7
  13. package/commonjs/DOM/Engine.js.map +1 -1
  14. package/commonjs/DOM/ItemsContainer.js +1 -1
  15. package/commonjs/DOM/ItemsContainer.js.map +1 -1
  16. package/commonjs/DOM/ListTopOffsetWatcher.js +15 -9
  17. package/commonjs/DOM/ListTopOffsetWatcher.js.map +1 -1
  18. package/commonjs/DOM/ScrollableContainer.js +28 -28
  19. package/commonjs/DOM/ScrollableContainer.js.map +1 -1
  20. package/commonjs/DOM/VirtualScroller.js +20 -17
  21. package/commonjs/DOM/VirtualScroller.js.map +1 -1
  22. package/commonjs/DOM/tbody.js +16 -10
  23. package/commonjs/DOM/tbody.js.map +1 -1
  24. package/commonjs/ItemHeights.js +23 -17
  25. package/commonjs/ItemHeights.js.map +1 -1
  26. package/commonjs/Layout.js +15 -13
  27. package/commonjs/Layout.js.map +1 -1
  28. package/commonjs/Layout.test.js +8 -3
  29. package/commonjs/Layout.test.js.map +1 -1
  30. package/commonjs/{ListHeightChangeWatcher.js → ListHeightMeasurement.js} +26 -28
  31. package/commonjs/ListHeightMeasurement.js.map +1 -0
  32. package/commonjs/Resize.js +38 -28
  33. package/commonjs/Resize.js.map +1 -1
  34. package/commonjs/Scroll.js +28 -44
  35. package/commonjs/Scroll.js.map +1 -1
  36. package/commonjs/VirtualScroller.columns.js +43 -0
  37. package/commonjs/VirtualScroller.columns.js.map +1 -0
  38. package/commonjs/VirtualScroller.constructor.js +408 -0
  39. package/commonjs/VirtualScroller.constructor.js.map +1 -0
  40. package/commonjs/VirtualScroller.items.js +305 -0
  41. package/commonjs/VirtualScroller.items.js.map +1 -0
  42. package/commonjs/VirtualScroller.js +132 -1872
  43. package/commonjs/VirtualScroller.js.map +1 -1
  44. package/commonjs/VirtualScroller.layout.js +562 -0
  45. package/commonjs/VirtualScroller.layout.js.map +1 -0
  46. package/commonjs/VirtualScroller.onRender.js +357 -0
  47. package/commonjs/VirtualScroller.onRender.js.map +1 -0
  48. package/commonjs/VirtualScroller.resize.js +186 -0
  49. package/commonjs/VirtualScroller.resize.js.map +1 -0
  50. package/commonjs/VirtualScroller.state.js +301 -0
  51. package/commonjs/VirtualScroller.state.js.map +1 -0
  52. package/commonjs/VirtualScroller.verticalSpacing.js +65 -0
  53. package/commonjs/VirtualScroller.verticalSpacing.js.map +1 -0
  54. package/commonjs/getItemCoordinates.js.map +1 -1
  55. package/commonjs/getItemsDiff.js.map +1 -1
  56. package/commonjs/getVerticalSpacing.js.map +1 -1
  57. package/commonjs/package.json +5 -0
  58. package/commonjs/react/VirtualScroller.js +184 -618
  59. package/commonjs/react/VirtualScroller.js.map +1 -1
  60. package/commonjs/react/useClassName.js +26 -0
  61. package/commonjs/react/useClassName.js.map +1 -0
  62. package/commonjs/react/useHandleItemsChange.js +116 -0
  63. package/commonjs/react/useHandleItemsChange.js.map +1 -0
  64. package/commonjs/react/useInstanceMethods.js +37 -0
  65. package/commonjs/react/useInstanceMethods.js.map +1 -0
  66. package/commonjs/react/useItemKeys.js +60 -0
  67. package/commonjs/react/useItemKeys.js.map +1 -0
  68. package/commonjs/react/useOnItemHeightChange.js +32 -0
  69. package/commonjs/react/useOnItemHeightChange.js.map +1 -0
  70. package/commonjs/react/useOnItemStateChange.js +32 -0
  71. package/commonjs/react/useOnItemStateChange.js.map +1 -0
  72. package/commonjs/react/useState.js +140 -0
  73. package/commonjs/react/useState.js.map +1 -0
  74. package/commonjs/react/useStyle.js +29 -0
  75. package/commonjs/react/useStyle.js.map +1 -0
  76. package/commonjs/react/useVirtualScroller.js +62 -0
  77. package/commonjs/react/useVirtualScroller.js.map +1 -0
  78. package/commonjs/react/useVirtualScrollerStartStop.js +20 -0
  79. package/commonjs/react/useVirtualScrollerStartStop.js.map +1 -0
  80. package/commonjs/test/Engine.js +23 -0
  81. package/commonjs/test/Engine.js.map +1 -0
  82. package/commonjs/test/ItemsContainer.js +127 -0
  83. package/commonjs/test/ItemsContainer.js.map +1 -0
  84. package/commonjs/test/ScrollableContainer.js +130 -0
  85. package/commonjs/test/ScrollableContainer.js.map +1 -0
  86. package/commonjs/test/VirtualScroller.js +281 -0
  87. package/commonjs/test/VirtualScroller.js.map +1 -0
  88. package/commonjs/utility/debounce.js +2 -2
  89. package/commonjs/utility/debounce.js.map +1 -1
  90. package/commonjs/utility/debug.js.map +1 -1
  91. package/commonjs/utility/getStateSnapshot.js +2 -2
  92. package/commonjs/utility/getStateSnapshot.js.map +1 -1
  93. package/commonjs/utility/px.js.map +1 -1
  94. package/commonjs/utility/px.test.js +1 -1
  95. package/commonjs/utility/px.test.js.map +1 -1
  96. package/commonjs/utility/shallowEqual.js +1 -1
  97. package/commonjs/utility/shallowEqual.js.map +1 -1
  98. package/commonjs/utility/throttle.js.map +1 -1
  99. package/dom/index.cjs +4 -0
  100. package/dom/index.cjs.js +9 -0
  101. package/dom/index.d.ts +6 -4
  102. package/dom/index.js +1 -1
  103. package/dom/package.json +10 -4
  104. package/index.cjs +4 -0
  105. package/index.cjs.js +9 -0
  106. package/index.d.ts +30 -15
  107. package/index.js +1 -1
  108. package/modules/BeforeResize.js +22 -27
  109. package/modules/BeforeResize.js.map +1 -1
  110. package/modules/DOM/Engine.js +6 -6
  111. package/modules/DOM/Engine.js.map +1 -1
  112. package/modules/DOM/ItemsContainer.js +1 -1
  113. package/modules/DOM/ItemsContainer.js.map +1 -1
  114. package/modules/DOM/ListTopOffsetWatcher.js +15 -9
  115. package/modules/DOM/ListTopOffsetWatcher.js.map +1 -1
  116. package/modules/DOM/ScrollableContainer.js +28 -28
  117. package/modules/DOM/ScrollableContainer.js.map +1 -1
  118. package/modules/DOM/VirtualScroller.js +19 -16
  119. package/modules/DOM/VirtualScroller.js.map +1 -1
  120. package/modules/DOM/tbody.js +11 -9
  121. package/modules/DOM/tbody.js.map +1 -1
  122. package/modules/ItemHeights.js +22 -16
  123. package/modules/ItemHeights.js.map +1 -1
  124. package/modules/Layout.js +14 -12
  125. package/modules/Layout.js.map +1 -1
  126. package/modules/Layout.test.js +8 -3
  127. package/modules/Layout.test.js.map +1 -1
  128. package/modules/{ListHeightChangeWatcher.js → ListHeightMeasurement.js} +25 -27
  129. package/modules/ListHeightMeasurement.js.map +1 -0
  130. package/modules/Resize.js +38 -28
  131. package/modules/Resize.js.map +1 -1
  132. package/modules/Scroll.js +28 -44
  133. package/modules/Scroll.js.map +1 -1
  134. package/modules/VirtualScroller.columns.js +36 -0
  135. package/modules/VirtualScroller.columns.js.map +1 -0
  136. package/modules/VirtualScroller.constructor.js +371 -0
  137. package/modules/VirtualScroller.constructor.js.map +1 -0
  138. package/modules/VirtualScroller.items.js +288 -0
  139. package/modules/VirtualScroller.items.js.map +1 -0
  140. package/modules/VirtualScroller.js +132 -1860
  141. package/modules/VirtualScroller.js.map +1 -1
  142. package/modules/VirtualScroller.layout.js +549 -0
  143. package/modules/VirtualScroller.layout.js.map +1 -0
  144. package/modules/VirtualScroller.onRender.js +337 -0
  145. package/modules/VirtualScroller.onRender.js.map +1 -0
  146. package/modules/VirtualScroller.resize.js +176 -0
  147. package/modules/VirtualScroller.resize.js.map +1 -0
  148. package/modules/VirtualScroller.state.js +283 -0
  149. package/modules/VirtualScroller.state.js.map +1 -0
  150. package/modules/VirtualScroller.verticalSpacing.js +54 -0
  151. package/modules/VirtualScroller.verticalSpacing.js.map +1 -0
  152. package/modules/getItemCoordinates.js.map +1 -1
  153. package/modules/getItemsDiff.js.map +1 -1
  154. package/modules/getVerticalSpacing.js.map +1 -1
  155. package/modules/react/VirtualScroller.js +176 -625
  156. package/modules/react/VirtualScroller.js.map +1 -1
  157. package/modules/react/useClassName.js +18 -0
  158. package/modules/react/useClassName.js.map +1 -0
  159. package/modules/react/useHandleItemsChange.js +108 -0
  160. package/modules/react/useHandleItemsChange.js.map +1 -0
  161. package/modules/react/useInstanceMethods.js +28 -0
  162. package/modules/react/useInstanceMethods.js.map +1 -0
  163. package/modules/react/useItemKeys.js +52 -0
  164. package/modules/react/useItemKeys.js.map +1 -0
  165. package/modules/react/useOnItemHeightChange.js +24 -0
  166. package/modules/react/useOnItemHeightChange.js.map +1 -0
  167. package/modules/react/useOnItemStateChange.js +24 -0
  168. package/modules/react/useOnItemStateChange.js.map +1 -0
  169. package/modules/react/useState.js +132 -0
  170. package/modules/react/useState.js.map +1 -0
  171. package/modules/react/useStyle.js +19 -0
  172. package/modules/react/useStyle.js.map +1 -0
  173. package/modules/react/useVirtualScroller.js +51 -0
  174. package/modules/react/useVirtualScroller.js.map +1 -0
  175. package/modules/react/useVirtualScrollerStartStop.js +12 -0
  176. package/modules/react/useVirtualScrollerStartStop.js.map +1 -0
  177. package/modules/test/Engine.js +11 -0
  178. package/modules/test/Engine.js.map +1 -0
  179. package/modules/test/ItemsContainer.js +120 -0
  180. package/modules/test/ItemsContainer.js.map +1 -0
  181. package/modules/test/ScrollableContainer.js +123 -0
  182. package/modules/test/ScrollableContainer.js.map +1 -0
  183. package/modules/test/VirtualScroller.js +270 -0
  184. package/modules/test/VirtualScroller.js.map +1 -0
  185. package/modules/utility/debounce.js +2 -2
  186. package/modules/utility/debounce.js.map +1 -1
  187. package/modules/utility/debug.js.map +1 -1
  188. package/modules/utility/getStateSnapshot.js +2 -2
  189. package/modules/utility/getStateSnapshot.js.map +1 -1
  190. package/modules/utility/px.js.map +1 -1
  191. package/modules/utility/px.test.js +1 -1
  192. package/modules/utility/px.test.js.map +1 -1
  193. package/modules/utility/shallowEqual.js +1 -1
  194. package/modules/utility/shallowEqual.js.map +1 -1
  195. package/modules/utility/throttle.js.map +1 -1
  196. package/package.json +46 -23
  197. package/react/index.cjs +4 -0
  198. package/react/index.cjs.js +9 -0
  199. package/react/index.d.ts +10 -9
  200. package/react/index.js +1 -1
  201. package/react/package.json +10 -4
  202. package/rollup.config.mjs +62 -0
  203. package/runnable/create-commonjs-package-json.js +11 -0
  204. package/source/BeforeResize.js +16 -21
  205. package/source/DOM/Engine.js +8 -10
  206. package/source/DOM/ListTopOffsetWatcher.js +13 -8
  207. package/source/DOM/ScrollableContainer.js +23 -21
  208. package/source/DOM/VirtualScroller.js +27 -11
  209. package/source/DOM/tbody.js +30 -21
  210. package/source/ItemHeights.js +19 -14
  211. package/source/Layout.js +12 -9
  212. package/source/Layout.test.js +8 -3
  213. package/source/{ListHeightChangeWatcher.js → ListHeightMeasurement.js} +21 -20
  214. package/source/Resize.js +41 -25
  215. package/source/Scroll.js +27 -35
  216. package/source/VirtualScroller.columns.js +26 -0
  217. package/source/VirtualScroller.constructor.js +336 -0
  218. package/source/VirtualScroller.items.js +302 -0
  219. package/source/VirtualScroller.js +144 -1872
  220. package/source/VirtualScroller.layout.js +539 -0
  221. package/source/VirtualScroller.onRender.js +345 -0
  222. package/source/VirtualScroller.resize.js +189 -0
  223. package/source/VirtualScroller.state.js +284 -0
  224. package/source/VirtualScroller.verticalSpacing.js +51 -0
  225. package/source/react/VirtualScroller.js +243 -587
  226. package/source/react/useClassName.js +14 -0
  227. package/source/react/useHandleItemsChange.js +115 -0
  228. package/source/react/useInstanceMethods.js +25 -0
  229. package/source/react/useItemKeys.js +59 -0
  230. package/source/react/useOnItemHeightChange.js +28 -0
  231. package/source/react/useOnItemStateChange.js +28 -0
  232. package/source/react/useState.js +114 -0
  233. package/source/react/useStyle.js +20 -0
  234. package/source/react/useVirtualScroller.js +59 -0
  235. package/source/react/useVirtualScrollerStartStop.js +12 -0
  236. package/source/test/Engine.js +11 -0
  237. package/source/test/ItemsContainer.js +87 -0
  238. package/source/test/ScrollableContainer.js +88 -0
  239. package/source/test/VirtualScroller.js +232 -0
  240. package/source/utility/debounce.js +2 -2
  241. package/source/utility/px.test.js +1 -1
  242. package/babel.config.js +0 -25
  243. package/babel.js +0 -5
  244. package/commonjs/ListHeightChangeWatcher.js.map +0 -1
  245. package/dom/index.commonjs.js +0 -4
  246. package/index.commonjs.js +0 -4
  247. package/modules/ListHeightChangeWatcher.js.map +0 -1
  248. package/react/index.commonjs.js +0 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../../source/react/VirtualScroller.js"],"names":["React","PropTypes","VirtualScrollerCore","reportError","px","elementType","oneOfType","string","func","object","VirtualScroller","props","createRef","Array","items","length","virtualScroller","updateLayout","onItemInitialRender","onItemFirstRender","previousItemsProperty","generateItemKeyPrefix","createVirtualScroller","AsComponent","as","initialState","initialCustomState","onStateChange","estimatedItemHeight","initialScrollPosition","onScrollPositionChange","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","bypass","container","current","_useTimeoutInRenderLoop","shouldUpdateLayoutOnScreenResize","tbody","state","customState","getState","setState","newState","willUpdateState","didUpdateState","itemComponent","isComponentClass","item","i","itemKeyPrefix","renderItem","getItemIndex","undefined","JSON","stringify","shouldUseRefs","itemRefs","forceUpdate","_isMounted","indexOf","onItemHeightChange","onItemStateChange","itemState","prefix","String","Math","random","slice","itemKeyPrefixes","push","onMount","listen","prevProps","prevState","preserveScrollPosition","preserveScrollPositionOnPrependItems","setItems","stop","Component","itemComponentProps","_items","className","rest","itemStates","firstShownItemIndex","lastShownItemIndex","beforeItemsHeight","afterItemsHeight","newItems","previousItems","itemsPropertyWasChanged","itemsDiff","getItemsDiff","prependedItemsCount","appendedItemsCount","listHeightChangeWatcher","snapshot","paddingTop","paddingBottom","map","getItemKey","getItemRef","getOnItemStateChange","getOnItemHeightChange","arrayOf","any","isRequired","number","bool","shape","itemHeights","columnsCount","verticalSpacing","prototype","isReactComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA,OAAOC,mBAAP,MAAgC,oBAAhC;AAEA,SAASC,WAAT,QAA4B,kBAA5B;AACA,OAAOC,EAAP,MAAe,eAAf,C,CAEA;AACA;;AACA,IAAMC,WAAW,GAAGJ,SAAS,CAACI,WAAV,IAAyBJ,SAAS,CAACK,SAAV,CAAoB,CAChEL,SAAS,CAACM,MADsD,EAEhEN,SAAS,CAACO,IAFsD,EAGhEP,SAAS,CAACQ,MAHsD,CAApB,CAA7C;;IAMqBC,e;;;;;AA8CpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AAIA;AAGA;AACA;AACA;AAGA,2BAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AAClB,8BAAMA,KAAN,EADkB,CAElB;AACA;;AAHkB,6EAjBPX,KAAK,CAACY,SAAN,EAiBO;;AAAA,wEAXC,IAAIC,KAAJ,CAAU,MAAKF,KAAL,CAAWG,KAAX,CAAiBC,MAA3B,CAWD;;AAAA,yEAVE,IAAIF,KAAJ,CAAU,MAAKF,KAAL,CAAWG,KAAX,CAAiBC,MAA3B,CAUF;;AAAA,+DAPR,IAAIF,KAAJ,CAAU,MAAKF,KAAL,CAAWG,KAAX,CAAiBC,MAA3B,CAOQ;;AAAA,sEAFD,EAEC;;AAAA,mEAqHJ;AAAA,aAAM,MAAKC,eAAL,CAAqBC,YAArB,EAAN;AAAA,KArHI;;AAAA,6DAwHV;AAAA,aAAM,MAAKA,YAAL,EAAN;AAAA,KAxHU;;AAAA,0EAgIG,YAAa;AAClC,UAAQC,mBAAR,GAAgC,MAAKP,KAArC,CAAQO,mBAAR;;AACA,UAAIA,mBAAJ,EAAyB;AACxBA,QAAAA,mBAAmB,MAAnB;AACA;AACD,KArIkB;;AAAA,wEA8IC,YAAa;AAChC,UAAQC,iBAAR,GAA8B,MAAKR,KAAnC,CAAQQ,iBAAR;;AACA,UAAIA,iBAAJ,EAAuB;AACtBA,QAAAA,iBAAiB,MAAjB;AACA;AACD,KAnJkB;;AAIlB,UAAKC,qBAAL,GAA6BT,KAAK,CAACG,KAAnC,CAJkB,CAKlB;;AACA,UAAKO,qBAAL,GANkB,CAOlB;;;AACA,UAAKC,qBAAL;;AARkB;AASlB;;;;WAED,iCAAwB;AAAA;;AACvB,wBAkBI,KAAKX,KAlBT;AAAA,UACKY,WADL,eACCC,EADD;AAAA,UAECV,KAFD,eAECA,KAFD;AAAA,UAGCW,YAHD,eAGCA,YAHD;AAAA,UAICC,kBAJD,eAICA,kBAJD;AAAA,UAKCC,aALD,eAKCA,aALD;AAAA,UAMCC,mBAND,eAMCA,mBAND;AAAA,UAOCC,qBAPD,eAOCA,qBAPD;AAAA,UAQCC,sBARD,eAQCA,sBARD;AAAA,UASCC,qBATD,eASCA,qBATD;AAAA,UAUCC,mBAVD,eAUCA,mBAVD;AAAA,UAaCC,sBAbD,eAaCA,sBAbD;AAAA,UAcCC,eAdD,eAcCA,eAdD;AAAA,UAeCC,SAfD,eAeCA,SAfD;AAAA,UAgBCC,MAhBD,eAgBCA,MAhBD,CADuB,CAoBvB;;AACA,WAAKpB,eAAL,GAAuB,IAAId,mBAAJ,CACtB;AAAA,eAAM,MAAI,CAACmC,SAAL,CAAeC,OAArB;AAAA,OADsB,EAEtBxB,KAFsB,EAGtB;AACCyB,QAAAA,uBAAuB,EAAE,IAD1B;AAECX,QAAAA,mBAAmB,EAAnBA,mBAFD;AAGCQ,QAAAA,MAAM,EAANA,MAHD;AAIC;AACAlB,QAAAA,mBAAmB,EAAE,KAAKA,mBAL3B;AAMC;AACAC,QAAAA,iBAAiB,EAAE,KAAKA,iBAPzB;AAQCU,QAAAA,qBAAqB,EAArBA,qBARD;AASCC,QAAAA,sBAAsB,EAAtBA,sBATD;AAUCU,QAAAA,gCAAgC,EAAE,KAAKA,gCAVxC;AAWCT,QAAAA,qBAAqB,EAArBA,qBAXD;AAYCC,QAAAA,mBAAmB,EAAnBA,mBAZD;AAaC;AACA;AACAC,QAAAA,sBAAsB,EAAtBA,sBAfD;AAgBCC,QAAAA,eAAe,EAAfA,eAhBD;AAiBCC,QAAAA,SAAS,EAATA,SAjBD;AAkBCM,QAAAA,KAAK,EAAElB,WAAW,KAAK,OAlBxB;AAmBCmB,QAAAA,KAAK,EAAEjB,YAnBR;AAoBCkB,QAAAA,WAAW,EAAEjB,kBApBd;AAqBCC,QAAAA,aAAa,EAAbA,aArBD;AAsBCiB,QAAAA,QAAQ,EAAE;AAAA,iBAAM,MAAI,CAACF,KAAX;AAAA,SAtBX;AAuBCG,QAAAA,QAAQ,EAAE,kBAACC,QAAD,QAAmD;AAAA,cAAtCC,eAAsC,QAAtCA,eAAsC;AAAA,cAArBC,cAAqB,QAArBA,cAAqB;AAC5D,UAAA,MAAI,CAACD,eAAL,GAAuBA,eAAvB;AACA,UAAA,MAAI,CAACC,cAAL,GAAsBA,cAAtB;;AACA,cAAI,MAAI,CAACN,KAAT,EAAgB;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAA,MAAI,CAACG,QAAL,CAAcC,QAAd;AACA,WA5CD,MA4CO;AACN;AACAC,YAAAA,eAAe,CAACD,QAAD,CAAf;AACA,YAAA,MAAI,CAACJ,KAAL,GAAaI,QAAb;AACAE,YAAAA,cAAc;AACd;AACD;AA5EF,OAHsB,CAAvB;AAkFA,K,CAED;;;;WAiCA,yBAAgB;AACf;AACA;AACA;AACA,UAAQC,aAAR,GAA0B,KAAKtC,KAA/B,CAAQsC,aAAR;AACA,aAAOC,gBAAgB,CAACD,aAAD,CAAvB;AACA;AAED;AACD;AACA;AACA;AACA;AACA;;;;WACC,oBAAWE,IAAX,EAAiBC,CAAjB,EAAoB;AACnB,UAAQjB,SAAR,GAAsB,KAAKxB,KAA3B,CAAQwB,SAAR;;AACA,UAAIA,SAAJ,EAAe;AACd,eAAOA,SAAS,CAACgB,IAAD,CAAhB;AACA;;AACD,uBAAU,KAAKE,aAAf,cAAgCD,CAAhC;AACA;AAED;AACD;AACA;AACA;AACA;;AACC;AACD;AACA;AACA;AACA;;AAEC;AACD;AACA;AACA;;;;WACC,oBAAWA,CAAX,EAAc;AACb,aAAO,KAAKE,UAAL,CAAgBF,CAAhB,CAAP;AACA;AAED;AACD;AACA;AACA;;;;WACC,oBAAWA,CAAX,EAAc;AAAA;;AACbA,MAAAA,CAAC,GAAG,KAAKG,YAAL,CAAkBH,CAAlB,CAAJ;;AACA,UAAIA,CAAC,KAAKI,SAAV,EAAqB;AACpB,eAAOrD,WAAW,gBAASsD,IAAI,CAACC,SAAL,CAAeN,CAAf,CAAT,+CAAlB;AACA;;AACD,UAAI,KAAKO,aAAL,EAAJ,EAA0B;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAI,KAAKC,QAAL,CAAcR,CAAd,KAAoB,KAAKQ,QAAL,CAAcR,CAAd,EAAiBd,OAAzC,EAAkD;AACjD,cAAQxB,KAAR,GAAkB,KAAKH,KAAvB,CAAQG,KAAR,CADiD,CAEjD;AACA;AACA;;AACA,cAAMqC,IAAI,GAAGrC,KAAK,CAACsC,CAAD,CAAlB;AACA,eAAKQ,QAAL,CAAcR,CAAd,EAAiBd,OAAjB,CAAyBuB,WAAzB,CAAqC,YAAM;AAC1C,gBAAI,MAAI,CAACC,UAAT,EAAqB;AACpB;AACA;AACA;AACA,kBAAMV,EAAC,GAAGtC,KAAK,CAACiD,OAAN,CAAcZ,IAAd,CAAV;;AACA,kBAAIC,EAAC,IAAI,CAAT,EAAY;AACX,gBAAA,MAAI,CAACpC,eAAL,CAAqBgD,kBAArB,CAAwCZ,EAAxC;AACA;AACD;AACD,WAVD;AAWA;AACD;AACD;;;WAED,sBAAaA,CAAb,EAAgB;AACf,UAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AAC1B,eAAOA,CAAP;AACA;;AACD,UAAI,QAAOA,CAAP,MAAa,QAAb,IAAyBA,CAAC,KAAK,IAAnC,EAAyC;AACxC,2BAA6B,KAAKzC,KAAlC;AAAA,YAAQG,KAAR,gBAAQA,KAAR;AAAA,YAAeqB,SAAf,gBAAeA,SAAf;AACA,YAAMgB,IAAI,GAAGC,CAAb;AACAA,QAAAA,CAAC,GAAG,CAAJ;;AACA,eAAOA,CAAC,GAAGtC,KAAK,CAACC,MAAjB,EAAyB;AACxB,cAAIoB,SAAJ,EAAe;AACd,gBAAIA,SAAS,CAACgB,IAAD,CAAT,KAAoBhB,SAAS,CAACrB,KAAK,CAACsC,CAAD,CAAN,CAAjC,EAA6C;AAC5C,qBAAOA,CAAP;AACA;AACD,WAJD,MAIO;AACN,gBAAID,IAAI,KAAKrC,KAAK,CAACsC,CAAD,CAAlB,EAAuB;AACtB,qBAAOA,CAAP;AACA;AACD;;AACDA,UAAAA,CAAC;AACD;AACD;AACD,K,CAED;AACA;AACA;AACA;AACA;;;;WACA,oBAAWA,CAAX,EAAc;AACb,UAAI,CAAC,KAAKQ,QAAL,CAAcR,CAAd,CAAL,EAAuB;AACtB,aAAKQ,QAAL,CAAcR,CAAd,iBAAmBpD,KAAK,CAACY,SAAN,EAAnB;AACA;;AACD,aAAO,KAAKgD,QAAL,CAAcR,CAAd,CAAP;AACA;;;WAED,8BAAqBA,CAArB,EAAwB;AAAA;;AACvB,UAAI,CAAC,KAAKa,iBAAL,CAAuBb,CAAvB,CAAL,EAAgC;AAC/B,aAAKa,iBAAL,CAAuBb,CAAvB,IAA4B,UAACc,SAAD;AAAA,iBAAe,MAAI,CAAClD,eAAL,CAAqBiD,iBAArB,CAAuCb,CAAvC,EAA0Cc,SAA1C,CAAf;AAAA,SAA5B;AACA;;AACD,aAAO,KAAKD,iBAAL,CAAuBb,CAAvB,CAAP;AACA;;;WAED,+BAAsBA,CAAtB,EAAyB;AAAA;;AACxB,UAAI,CAAC,KAAKY,kBAAL,CAAwBZ,CAAxB,CAAL,EAAiC;AAChC,aAAKY,kBAAL,CAAwBZ,CAAxB,IAA6B;AAAA,iBAAM,MAAI,CAACpC,eAAL,CAAqBgD,kBAArB,CAAwCZ,CAAxC,CAAN;AAAA,SAA7B;AACA;;AACD,aAAO,KAAKY,kBAAL,CAAwBZ,CAAxB,CAAP;AACA;;;WAED,iCAAwB;AACvB,UAAMe,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACC,MAAL,EAAD,CAAN,CAAsBC,KAAtB,CAA4B,CAA5B,CAAf;;AACA,UAAI,KAAKC,eAAL,CAAqBT,OAArB,CAA6BI,MAA7B,KAAwC,CAA5C,EAA+C;AAC9C,eAAO,KAAK9C,qBAAL,EAAP;AACA;;AACD,WAAKmD,eAAL,CAAqBC,IAArB,CAA0BN,MAA1B;AACA,WAAKd,aAAL,GAAqBc,MAArB;AACA;;;WAED,6BAAoB;AACnB,UAAQO,OAAR,GAAoB,KAAK/D,KAAzB,CAAQ+D,OAAR,CADmB,CAEnB;AACA;;AACA,UAAIA,OAAJ,EAAa;AACZA,QAAAA,OAAO;AACP;;AACD,WAAKZ,UAAL,GAAkB,IAAlB,CAPmB,CAQnB;;AACA,WAAK9C,eAAL,CAAqB2D,MAArB;AACA,K,CAED;;;;WACA,iCAAwBC,SAAxB,EAAmCC,SAAnC,EAA8C;AAC7C,UAAI,KAAKnC,KAAL,KAAemC,SAAnB,EAA8B;AAC7B,aAAK9B,eAAL,CAAqB,KAAKL,KAA1B,EAAiCmC,SAAjC;AACA,OAH4C,CAI7C;AACA;;;AACA,aAAO,IAAP;AACA,K,CAED;AACA;;;;WACA,4BAAmBD,SAAnB,EAA8BC,SAA9B,EAAyC;AACxC;AACA,UAAI,KAAKnC,KAAL,KAAemC,SAAnB,EAA8B;AAC7B,aAAK7B,cAAL,CAAoB6B,SAApB;AACA,OAJuC,CAKxC;AACA;AACA;;;AACA,yBAII,KAAKlE,KAJT;AAAA,UACCG,KADD,gBACCA,KADD;AAAA,UAECgE,sBAFD,gBAECA,sBAFD;AAAA,UAGCC,oCAHD,gBAGCA,oCAHD;;AAKA,UAAIjE,KAAK,KAAK8D,SAAS,CAAC9D,KAAxB,EAA+B;AAC9B,aAAKE,eAAL,CAAqBgE,QAArB,CAA8BlE,KAA9B,EAAqC;AACpC;AACA;AACAiE,UAAAA,oCAAoC,EAAEA,oCAAoC,IAAID;AAH1C,SAArC;AAKA;AACD;;;WAED,gCAAuB;AACtB,WAAKhB,UAAL,GAAkB,KAAlB,CADsB,CAEtB;;AACA,WAAK9C,eAAL,CAAqBiE,IAArB;AACA;;;WAED,kBAAS;AAAA;;AACR,yBA+BI,KAAKtE,KA/BT;AAAA,UACKY,WADL,gBACCC,EADD;AAAA,UAEgB0D,SAFhB,gBAECjC,aAFD;AAAA,UAGCkC,kBAHD,gBAGCA,kBAHD;AAAA,UAKQC,MALR,gBAKCtE,KALD;AAAA,UAMCc,mBAND,gBAMCA,mBAND;AAAA,UAOCQ,MAPD,gBAOCA,MAPD;AAAA,UASC2C,oCATD,gBASCA,oCATD;AAAA,UAYCD,sBAZD,gBAYCA,sBAZD;AAAA,UAaCjD,qBAbD,gBAaCA,qBAbD;AAAA,UAcCC,sBAdD,gBAcCA,sBAdD;AAAA,UAeCC,qBAfD,gBAeCA,qBAfD;AAAA,UAgBCC,mBAhBD,gBAgBCA,mBAhBD;AAAA,UAmBCC,sBAnBD,gBAmBCA,sBAnBD;AAAA,UAoBCC,eApBD,gBAoBCA,eApBD;AAAA,UAqBCT,YArBD,gBAqBCA,YArBD;AAAA,UAsBCC,kBAtBD,gBAsBCA,kBAtBD;AAAA,UAuBCC,aAvBD,gBAuBCA,aAvBD;AAAA,UAwBCT,mBAxBD,gBAwBCA,mBAxBD;AAAA,UA0BCC,iBA1BD,gBA0BCA,iBA1BD;AAAA,UA2BCgB,SA3BD,gBA2BCA,SA3BD;AAAA,UA4BCuC,OA5BD,gBA4BCA,OA5BD;AAAA,UA6BCW,SA7BD,gBA6BCA,SA7BD;AAAA,UA8BIC,IA9BJ;;AAgCA,kCAOI,KAAKtE,eAAL,CAAqB4B,QAArB,EAPJ;AAAA,UACC9B,KADD,yBACCA,KADD;AAAA,UAECyE,UAFD,yBAECA,UAFD;AAAA,UAGCC,mBAHD,yBAGCA,mBAHD;AAAA,UAICC,kBAJD,yBAICA,kBAJD;AAAA,UAKCC,iBALD,yBAKCA,iBALD;AAAA,UAMCC,gBAND,yBAMCA,gBAND,CAjCQ,CAyCR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAMC,QAAQ,GAAG,KAAKjF,KAAL,CAAWG,KAA5B;AACA,UAAM+E,aAAa,GAAG/E,KAAtB,CAnFQ,CAmFoB;AAC5B;AACA;AACA;AACA;;AACA,UAAI,CAAC,KAAKgF,uBAAV,EAAmC;AAClC,aAAKA,uBAAL,GAA+B,KAAKnF,KAAL,CAAWG,KAAX,KAAqB,KAAKM,qBAAzD;AACA;;AACD,WAAKA,qBAAL,GAA6B,KAAKT,KAAL,CAAWG,KAAxC;;AACA,UAAI,KAAKgF,uBAAL,IAAgCF,QAAQ,KAAKC,aAAjD,EAAgE;AAC/D,YAAME,SAAS,GAAG,KAAK/E,eAAL,CAAqBgF,YAArB,CAAkCH,aAAlC,EAAiDD,QAAjD,CAAlB;;AACA,YAAIG,SAAS,IAAIA,SAAS,CAACE,mBAAV,KAAkC,CAA/C,IAAoDF,SAAS,CAACG,kBAAV,GAA+B,CAAvF,EAA0F,CACzF;AACA;AACA;AACA,SAJD,MAIO;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAIH,SAAJ,EAAe;AACd,gBAAQE,mBAAR,GAAgCF,SAAhC,CAAQE,mBAAR;;AACA,gBAAIA,mBAAmB,GAAG,CAA1B,EAA6B;AAC5B,kBAAIlB,oCAAoC,IAAID,sBAA5C,EAAoE;AACnE,oBAAIU,mBAAmB,KAAK,CAA5B,EAA+B;AAC9B,uBAAKxE,eAAL,CAAqBmF,uBAArB,CAA6CC,QAA7C,CAAsD;AACrDP,oBAAAA,aAAa,EAAbA,aADqD;AAErDD,oBAAAA,QAAQ,EAARA,QAFqD;AAGrDK,oBAAAA,mBAAmB,EAAnBA;AAHqD,mBAAtD;AAKA;AACD;AACD;AACD,WA3BK,CA4BN;;;AACA,cAAI,CAAC9D,SAAL,EAAgB;AACf,iBAAKd,qBAAL;AACA,WA/BK,CAgCN;;;AACA,eAAKuC,QAAL,GAAgB,IAAI/C,KAAJ,CAAU+E,QAAQ,CAAC7E,MAAnB,CAAhB;AACA;AACD;;AACD,UAAM0B,KAAK,GAAG,KAAKzB,eAAL,CAAqByB,KAAnC;AACA,0BACC,oBAAC,WAAD,eACK6C,IADL;AAEC,QAAA,GAAG,EAAE,KAAKjD,SAFX;AAGC,QAAA,SAAS,EAAEI,KAAK,GAAI4C,SAAS,GAAGA,SAAS,GAAG,GAAZ,GAAkB,iBAArB,GAAyC,iBAAtD,GAA2EA,SAH5F;AAIC,QAAA,KAAK,EAAE;AACNgB,UAAAA,UAAU,EAAE5D,KAAK,GAAGe,SAAH,GAAepD,EAAE,CAACsF,iBAAD,CAD5B;AAENY,UAAAA,aAAa,EAAE7D,KAAK,GAAGe,SAAH,GAAepD,EAAE,CAACuF,gBAAD;AAF/B;AAJR,UAQE7E,KAAK,CAACyF,GAAN,CAAU,UAACpD,IAAD,EAAOC,CAAP,EAAa;AACvB,YAAIA,CAAC,IAAIoC,mBAAL,IAA4BpC,CAAC,IAAIqC,kBAArC,EAAyD;AACxD,8BACC,oBAAC,SAAD,eACKN,kBADL;AAEC,YAAA,GAAG,EAAE,MAAI,CAACqB,UAAL,CAAgBrD,IAAhB,EAAsBC,CAAtB,CAFN;AAGC,YAAA,GAAG,EAAE,MAAI,CAACO,aAAL,KAAuB,MAAI,CAAC8C,UAAL,CAAgBrD,CAAhB,CAAvB,GAA4CI,SAHlD;AAIC,YAAA,KAAK,EAAE+B,UAAU,IAAIA,UAAU,CAACnC,CAAD,CAJhC;AAKC,YAAA,aAAa,EAAE,MAAI,CAACsD,oBAAL,CAA0BtD,CAA1B,CALhB;AAMC,YAAA,cAAc,EAAE,MAAI,CAACuD,qBAAL,CAA2BvD,CAA3B;AANjB,cAOED,IAPF,CADD;AAWA;;AACD,eAAO,IAAP;AACA,OAfA,CARF,CADD;AA2BA;;;;EA7jB2CnD,KAAK,CAACkF,S;AAgkBnD;AACA;AACA;AACA;AACA;AACA;;;gBArkBqBxE,e,eACD;AAClBc,EAAAA,EAAE,EAAEnB,WADc;AAElBS,EAAAA,KAAK,EAAEb,SAAS,CAAC2G,OAAV,CAAkB3G,SAAS,CAAC4G,GAA5B,EAAiCC,UAFtB;AAGlB7D,EAAAA,aAAa,EAAE5C,WAAW,CAACyG,UAHT;AAIlB3B,EAAAA,kBAAkB,EAAElF,SAAS,CAACQ,MAJZ;AAKlBmB,EAAAA,mBAAmB,EAAE3B,SAAS,CAAC8G,MALb;AAMlB3E,EAAAA,MAAM,EAAEnC,SAAS,CAAC+G,IANA;AAOlB;AACAjC,EAAAA,oCAAoC,EAAE9E,SAAS,CAAC+G,IAR9B;AASlB;AACA;AACAlC,EAAAA,sBAAsB,EAAE7E,SAAS,CAAC+G,IAXhB;AAYlBjF,EAAAA,qBAAqB,EAAE9B,SAAS,CAAC8G,MAZf;AAalB/E,EAAAA,mBAAmB,EAAE/B,SAAS,CAAC4G,GAbb;AAclB;AACA;AACA5E,EAAAA,sBAAsB,EAAEhC,SAAS,CAACO,IAhBhB;AAiBlB0B,EAAAA,eAAe,EAAEjC,SAAS,CAACO,IAjBT;AAkBlB2B,EAAAA,SAAS,EAAElC,SAAS,CAACO,IAlBH;AAmBlB6E,EAAAA,SAAS,EAAEpF,SAAS,CAACM,MAnBH;AAoBlBmE,EAAAA,OAAO,EAAEzE,SAAS,CAACO,IApBD;AAqBlBU,EAAAA,mBAAmB,EAAEjB,SAAS,CAACO,IArBb;AAsBlB;AACAW,EAAAA,iBAAiB,EAAElB,SAAS,CAACO,IAvBX;AAwBlBqB,EAAAA,qBAAqB,EAAE5B,SAAS,CAAC8G,MAxBf;AAyBlBjF,EAAAA,sBAAsB,EAAE7B,SAAS,CAACO,IAzBhB;AA0BlBmB,EAAAA,aAAa,EAAE1B,SAAS,CAACO,IA1BP;AA2BlBkB,EAAAA,kBAAkB,EAAEzB,SAAS,CAACQ,MA3BZ;AA4BlBgB,EAAAA,YAAY,EAAExB,SAAS,CAACgH,KAAV,CAAgB;AAC7BnG,IAAAA,KAAK,EAAEb,SAAS,CAAC2G,OAAV,CAAkB3G,SAAS,CAACQ,MAA5B,EAAoCqG,UADd;AAE7BvB,IAAAA,UAAU,EAAEtF,SAAS,CAAC2G,OAAV,CAAkB3G,SAAS,CAAC4G,GAA5B,CAFiB;AAG7BrB,IAAAA,mBAAmB,EAAEvF,SAAS,CAAC8G,MAAV,CAAiBD,UAHT;AAI7BrB,IAAAA,kBAAkB,EAAExF,SAAS,CAAC8G,MAAV,CAAiBD,UAJR;AAK7BpB,IAAAA,iBAAiB,EAAEzF,SAAS,CAAC8G,MAAV,CAAiBD,UALP;AAM7BnB,IAAAA,gBAAgB,EAAE1F,SAAS,CAAC8G,MAAV,CAAiBD,UANN;AAO7BI,IAAAA,WAAW,EAAEjH,SAAS,CAAC2G,OAAV,CAAkB3G,SAAS,CAAC8G,MAA5B,EAAoCD,UAPpB;AAQ7BK,IAAAA,YAAY,EAAElH,SAAS,CAAC8G,MARK;AAS7BK,IAAAA,eAAe,EAAEnH,SAAS,CAAC8G;AATE,GAAhB;AA5BI,C;;gBADCrG,e,kBA0CE;AACrBc,EAAAA,EAAE,EAAE;AADiB,C;;SA1CFd,e;;AAskBrB,SAASwC,gBAAT,CAA0BgC,SAA1B,EAAqC;AACpC;AACA;AACA,SAAOA,SAAS,CAACmC,SAAV,IAAuBnC,SAAS,CAACmC,SAAV,CAAoBC,gBAAlD;AACA","sourcesContent":["import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport VirtualScrollerCore from '../VirtualScroller'\r\n\r\nimport { reportError } from '../utility/debug'\r\nimport px from '../utility/px'\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\nexport default class VirtualScroller extends React.Component {\r\n\tstatic propTypes = {\r\n\t\tas: elementType,\r\n\t\titems: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n\t\titemComponent: elementType.isRequired,\r\n\t\titemComponentProps: PropTypes.object,\r\n\t\testimatedItemHeight: PropTypes.number,\r\n\t\tbypass: PropTypes.bool,\r\n\t\t// bypassBatchSize: PropTypes.number,\r\n\t\tpreserveScrollPositionOnPrependItems: PropTypes.bool,\r\n\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\t\tpreserveScrollPosition: PropTypes.bool,\r\n\t\tmeasureItemsBatchSize: PropTypes.number,\r\n\t\tscrollableContainer: PropTypes.any,\r\n\t\t// `getScrollableContainer` property is deprecated.\r\n\t\t// Use `scrollableContainer` instead.\r\n\t\tgetScrollableContainer: PropTypes.func,\r\n\t\tgetColumnsCount: PropTypes.func,\r\n\t\tgetItemId: PropTypes.func,\r\n\t\tclassName: PropTypes.string,\r\n\t\tonMount: PropTypes.func,\r\n\t\tonItemInitialRender: PropTypes.func,\r\n\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\tonItemFirstRender: PropTypes.func,\r\n\t\tinitialScrollPosition: PropTypes.number,\r\n\t\tonScrollPositionChange: PropTypes.func,\r\n\t\tonStateChange: PropTypes.func,\r\n\t\tinitialCustomState: PropTypes.object,\r\n\t\tinitialState: PropTypes.shape({\r\n\t\t\titems: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n\t\t\titemStates: PropTypes.arrayOf(PropTypes.any),\r\n\t\t\tfirstShownItemIndex: PropTypes.number.isRequired,\r\n\t\t\tlastShownItemIndex: PropTypes.number.isRequired,\r\n\t\t\tbeforeItemsHeight: PropTypes.number.isRequired,\r\n\t\t\tafterItemsHeight: PropTypes.number.isRequired,\r\n\t\t\titemHeights: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n\t\t\tcolumnsCount: PropTypes.number,\r\n\t\t\tverticalSpacing: PropTypes.number\r\n\t\t})\r\n\t}\r\n\r\n\tstatic defaultProps = {\r\n\t\tas: 'div'\r\n\t}\r\n\r\n\t// `this.state` is already reserved for `virtual-scroller`.\r\n\t// static getDerivedStateFromProps(props, state) {\r\n\t// \treturn {\r\n\t// \t\tprevProps: {\r\n\t// \t\t\titems: props.items\r\n\t// \t\t}\r\n\t// \t}\r\n\t// }\r\n\r\n\tcontainer = React.createRef()\r\n\r\n\t// Handler function caches.\r\n\t// Just so that the props passed to `itemComponent`\r\n\t// are not changed on every `.render()` and so\r\n\t// `itemComponent` won't re-render if it's a `PureComponent`.\r\n\tonItemStateChange = new Array(this.props.items.length)\r\n\tonItemHeightChange = new Array(this.props.items.length)\r\n\r\n\t// Item refs for `.renderItem(i)`.\r\n\titemRefs = new Array(this.props.items.length)\r\n\r\n\t// List items are rendered with `key`s\r\n\t// so that React doesn't reuse `itemComponent`s\r\n\t// in cases when `items` are changed.\r\n\titemKeyPrefixes = []\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props)\r\n\t\t// `this.previousItemsProperty` is only used for comparing\r\n\t\t// `previousItems` with `newItems` inside `render()`.\r\n\t\tthis.previousItemsProperty = props.items\r\n\t\t// Generate unique `key` prefix for list item components.\r\n\t\tthis.generateItemKeyPrefix()\r\n\t\t// Create `VirtualScroller` instance.\r\n\t\tthis.createVirtualScroller()\r\n\t}\r\n\r\n\tcreateVirtualScroller() {\r\n\t\tconst {\r\n\t\t\tas: AsComponent,\r\n\t\t\titems,\r\n\t\t\tinitialState,\r\n\t\t\tinitialCustomState,\r\n\t\t\tonStateChange,\r\n\t\t\testimatedItemHeight,\r\n\t\t\tinitialScrollPosition,\r\n\t\t\tonScrollPositionChange,\r\n\t\t\tmeasureItemsBatchSize,\r\n\t\t\tscrollableContainer,\r\n\t\t\t// `getScrollableContainer` property is deprecated.\r\n\t\t\t// Use `scrollableContainer` instead.\r\n\t\t\tgetScrollableContainer,\r\n\t\t\tgetColumnsCount,\r\n\t\t\tgetItemId,\r\n\t\t\tbypass,\r\n\t\t\t// bypassBatchSize\r\n\t\t} = this.props\r\n\t\t// Create `virtual-scroller` instance.\r\n\t\tthis.virtualScroller = new VirtualScrollerCore(\r\n\t\t\t() => this.container.current,\r\n\t\t\titems,\r\n\t\t\t{\r\n\t\t\t\t_useTimeoutInRenderLoop: true,\r\n\t\t\t\testimatedItemHeight,\r\n\t\t\t\tbypass,\r\n\t\t\t\t// bypassBatchSize,\r\n\t\t\t\tonItemInitialRender: this.onItemInitialRender,\r\n\t\t\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\t\t\tonItemFirstRender: this.onItemFirstRender,\r\n\t\t\t\tinitialScrollPosition,\r\n\t\t\t\tonScrollPositionChange,\r\n\t\t\t\tshouldUpdateLayoutOnScreenResize: this.shouldUpdateLayoutOnScreenResize,\r\n\t\t\t\tmeasureItemsBatchSize,\r\n\t\t\t\tscrollableContainer,\r\n\t\t\t\t// `getScrollableContainer` property is deprecated.\r\n\t\t\t\t// Use `scrollableContainer` instead.\r\n\t\t\t\tgetScrollableContainer,\r\n\t\t\t\tgetColumnsCount,\r\n\t\t\t\tgetItemId,\r\n\t\t\t\ttbody: AsComponent === 'tbody',\r\n\t\t\t\tstate: initialState,\r\n\t\t\t\tcustomState: initialCustomState,\r\n\t\t\t\tonStateChange,\r\n\t\t\t\tgetState: () => this.state,\r\n\t\t\t\tsetState: (newState, { willUpdateState, didUpdateState }) => {\r\n\t\t\t\t\tthis.willUpdateState = willUpdateState\r\n\t\t\t\t\tthis.didUpdateState = didUpdateState\r\n\t\t\t\t\tif (this.state) {\r\n\t\t\t\t\t\t// Update existing state.\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// In case of hypothetically rewriting this in React hooks,\r\n\t\t\t\t\t\t// it wouldn't simply be `setState({ ...prevState, ...newState })`.\r\n\t\t\t\t\t\t// The reason is that `setState()` would be \"asynchronous\" (not immediate),\r\n\t\t\t\t\t\t// and `...prevState` would be stale in cases when more than a single\r\n\t\t\t\t\t\t// `setState()` call is made before the state actually updates,\r\n\t\t\t\t\t\t// making `prevState` stale, and, as a consequence, losing some\r\n\t\t\t\t\t\t// of the state updates.\r\n\t\t\t\t\t\t// For example, the first `setState()` call updates shown item indexes,\r\n\t\t\t\t\t\t// and the second `setState()` call updates `verticalSpacing`:\r\n\t\t\t\t\t\t// if it was simply `setState({ ...prevState, ...newState })`,\r\n\t\t\t\t\t\t// then the second state update could overwrite the first state update,\r\n\t\t\t\t\t\t// resulting in incorrect items being shown/hidden.\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// I guess, in hooks, it could be something like:\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// const [firstShownItemIndex, setFirstShownItemIndex] = useState()\r\n\t\t\t\t\t\t// ...\r\n\t\t\t\t\t\t// const setState = useCallback((newState) => {\r\n\t\t\t\t\t\t// \tfor (const key in newState) {\r\n\t\t\t\t\t\t// \t\tswitch (key) {\r\n\t\t\t\t\t\t// \t\t\tcase 'firstShownItemIndex':\r\n\t\t\t\t\t\t// \t\t\t\tsetFirstShownItemIndex(newState[key])\r\n\t\t\t\t\t\t// \t\t\t\tbreak\r\n\t\t\t\t\t\t// \t\t\t...\r\n\t\t\t\t\t\t// \t\t}\r\n\t\t\t\t\t\t// \t}\r\n\t\t\t\t\t\t// \tsetFirstShownItemIndex\r\n\t\t\t\t\t\t// }, [])\r\n\t\t\t\t\t\t// const virtualScroller = new VirtualScrollerCore({\r\n\t\t\t\t\t\t// \tsetState,\r\n\t\t\t\t\t\t// \t...\r\n\t\t\t\t\t\t// })\r\n\t\t\t\t\t\t// // `getState()` function would be updated on every render.\r\n\t\t\t\t\t\t// virtualScroller.getState = () => ({\r\n\t\t\t\t\t\t// \tfirstShownItemIndex,\r\n\t\t\t\t\t\t// \t...\r\n\t\t\t\t\t\t// })\r\n\t\t\t\t\t\t//\r\n\t\t\t\t\t\t// But as long as it uses the classic `this.setState()`,\r\n\t\t\t\t\t\t// it's fine and simple.\r\n\t\t\t\t\t\tthis.setState(newState)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Set initial state.\r\n\t\t\t\t\t\twillUpdateState(newState)\r\n\t\t\t\t\t\tthis.state = newState\r\n\t\t\t\t\t\tdidUpdateState()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t)\r\n\t}\r\n\r\n\t// This is a proxy for `VirtualScroller`'s `.updateLayout` instance method.\r\n\tupdateLayout = () => this.virtualScroller.updateLayout()\r\n\r\n\t// `.layout()` method name is deprecated, use `.updateLayout()` instead.\r\n\tlayout = () => this.updateLayout()\r\n\r\n\t// This proxy is required for cases when\r\n\t// `onItemInitialRender` property changes at subsequent renders.\r\n\t// For example, if it's passed as an \"anonymous\" function:\r\n\t// `<VirtualScroller onItemInitialRender={() => ...}/>`.\r\n\t// In such cases, if this \"proxy\" workaround hasn't been implemented,\r\n\t// the `VirtualScroller` instance would have the reference to the old function.\r\n\tonItemInitialRender = (...args) => {\r\n\t\tconst { onItemInitialRender } = this.props\r\n\t\tif (onItemInitialRender) {\r\n\t\t\tonItemInitialRender(...args)\r\n\t\t}\r\n\t}\r\n\r\n\t// This proxy is required for cases when\r\n\t// `onItemFirstRender` property changes at subsequent renders.\r\n\t// For example, if it's passed as an \"anonymous\" function:\r\n\t// `<VirtualScroller onItemFirstRender={() => ...}/>`.\r\n\t// In such cases, if this \"proxy\" workaround hasn't been implemented,\r\n\t// the `VirtualScroller` instance would have the reference to the old function.\r\n\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\tonItemFirstRender = (...args) => {\r\n\t\tconst { onItemFirstRender } = this.props\r\n\t\tif (onItemFirstRender) {\r\n\t\t\tonItemFirstRender(...args)\r\n\t\t}\r\n\t}\r\n\r\n\tshouldUseRefs() {\r\n\t\t// There's no way to detect if `ref` can be passed to `component`:\r\n\t\t// https://github.com/facebook/react/issues/16309\r\n\t\t// So it only uses `ref`s for `React.Component`s.\r\n\t\tconst { itemComponent } = this.props\r\n\t\treturn isComponentClass(itemComponent)\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\tgetItemKey(item, i) {\r\n\t\tconst { getItemId } = this.props\r\n\t\tif (getItemId) {\r\n\t\t\treturn getItemId(item)\r\n\t\t}\r\n\t\treturn `${this.itemKeyPrefix}:${i}`\r\n\t}\r\n\r\n\t/**\r\n\t * A proxy to `VirtualScroller.getItemCoordinates(i)`.\r\n\t * @param {number} i\r\n\t * @return {object}\r\n\t */\r\n\t/*\r\n\tgetItemCoordinates(i) {\r\n\t\treturn this.virtualScroller.getItemCoordinates(i)\r\n\t}\r\n\t*/\r\n\r\n\t/**\r\n\t * `updateItem(i)` has been renamed to `renderItem(i)`.\r\n\t * @param {number} i\r\n\t */\r\n\tupdateItem(i) {\r\n\t\treturn this.renderItem(i)\r\n\t}\r\n\r\n\t/**\r\n\t * Re-renders an item.\r\n\t * @param {number} i\r\n\t */\r\n\trenderItem(i) {\r\n\t\ti = this.getItemIndex(i)\r\n\t\tif (i === undefined) {\r\n\t\t\treturn reportError(`Item ${JSON.stringify(i)} not found when calling \".renderItem()\"`)\r\n\t\t}\r\n\t\tif (this.shouldUseRefs()) {\r\n\t\t\t// The item may be non-rendered when `.renderItem(i)` is called on it.\r\n\t\t\t// For example, when there's a \"parent comment\" having several \"replies\"\r\n\t\t\t// each of which has an autogenerated quote of the \"parent comment\"\r\n\t\t\t// and then the \"parent comment\" is updated (for example, a YouTube video\r\n\t\t\t// link gets parsed into an embedded video player) and all of its \"replies\"\r\n\t\t\t// should be updated too to show the parsed video title instead of the URL,\r\n\t\t\t// so `.renderItem(i)` is simply called on all of the \"parent post\"'s replies\r\n\t\t\t// regardless of some of those replies being rendered or not.\r\n\t\t\tif (this.itemRefs[i] && this.itemRefs[i].current) {\r\n\t\t\t\tconst { items } = this.props\r\n\t\t\t\t// Stores `item` here because the `i` index\r\n\t\t\t\t// might have changed when the callback is called,\r\n\t\t\t\t// or the item even may have been removed.\r\n\t\t\t\tconst item = items[i]\r\n\t\t\t\tthis.itemRefs[i].current.forceUpdate(() => {\r\n\t\t\t\t\tif (this._isMounted) {\r\n\t\t\t\t\t\t// Recalculates the `i` index here because it\r\n\t\t\t\t\t\t// might have changed when the callback is called,\r\n\t\t\t\t\t\t// or the item even may have been removed.\r\n\t\t\t\t\t\tconst i = items.indexOf(item)\r\n\t\t\t\t\t\tif (i >= 0) {\r\n\t\t\t\t\t\t\tthis.virtualScroller.onItemHeightChange(i)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetItemIndex(i) {\r\n\t\tif (typeof i === 'number') {\r\n\t\t\treturn i\r\n\t\t}\r\n\t\tif (typeof i === 'object' && i !== null) {\r\n\t\t\tconst { items, getItemId } = this.props\r\n\t\t\tconst item = i\r\n\t\t\ti = 0\r\n\t\t\twhile (i < items.length) {\r\n\t\t\t\tif (getItemId) {\r\n\t\t\t\t\tif (getItemId(item) === getItemId(items[i])) {\r\n\t\t\t\t\t\treturn i\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (item === items[i]) {\r\n\t\t\t\t\t\treturn i\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\ti++\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Functional components can't have a `ref` assigned to them.\r\n\t// Item `ref`s are only used for calling `.renderItem(i)` instance method,\r\n\t// because `.renderItem(i)` calls `.forceUpdate()` on item `i`.\r\n\t// If a developer is not using the `.renderItem(i)` instance method\r\n\t// then `ref`s aren't required and will be omitted.\r\n\tgetItemRef(i) {\r\n\t\tif (!this.itemRefs[i]) {\r\n\t\t\tthis.itemRefs[i] = React.createRef()\r\n\t\t}\r\n\t\treturn this.itemRefs[i]\r\n\t}\r\n\r\n\tgetOnItemStateChange(i) {\r\n\t\tif (!this.onItemStateChange[i]) {\r\n\t\t\tthis.onItemStateChange[i] = (itemState) => this.virtualScroller.onItemStateChange(i, itemState)\r\n\t\t}\r\n\t\treturn this.onItemStateChange[i]\r\n\t}\r\n\r\n\tgetOnItemHeightChange(i) {\r\n\t\tif (!this.onItemHeightChange[i]) {\r\n\t\t\tthis.onItemHeightChange[i] = () => this.virtualScroller.onItemHeightChange(i)\r\n\t\t}\r\n\t\treturn this.onItemHeightChange[i]\r\n\t}\r\n\r\n\tgenerateItemKeyPrefix() {\r\n\t\tconst prefix = String(Math.random()).slice(2)\r\n\t\tif (this.itemKeyPrefixes.indexOf(prefix) >= 0) {\r\n\t\t\treturn this.generateItemKeyPrefix()\r\n\t\t}\r\n\t\tthis.itemKeyPrefixes.push(prefix)\r\n\t\tthis.itemKeyPrefix = prefix\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { onMount } = this.props\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\tonMount()\r\n\t\t}\r\n\t\tthis._isMounted = true\r\n\t\t// Start listening to scroll events.\r\n\t\tthis.virtualScroller.listen()\r\n\t}\r\n\r\n\t// `getSnapshotBeforeUpdate()` is called right before `componentDidUpdate()`.\r\n\tgetSnapshotBeforeUpdate(prevProps, prevState) {\r\n\t\tif (this.state !== prevState) {\r\n\t\t\tthis.willUpdateState(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\t// `componentDidUpdate()` is called immediately after React component has re-rendered.\r\n\t// That would correspond to `useLayoutEffect()` in React Hooks.\r\n\tcomponentDidUpdate(prevProps, prevState) {\r\n\t\t// If `state` did change.\r\n\t\tif (this.state !== prevState) {\r\n\t\t\tthis.didUpdateState(prevState)\r\n\t\t}\r\n\t\t// If `items` property did change then update `virtual-scroller` items.\r\n\t\t// This could have been done in `.render()` but `.setItems()` calls\r\n\t\t// `.setState()` internally which would result in React throwing an error.\r\n\t\tconst {\r\n\t\t\titems,\r\n\t\t\tpreserveScrollPosition,\r\n\t\t\tpreserveScrollPositionOnPrependItems\r\n\t\t} = this.props\r\n\t\tif (items !== prevProps.items) {\r\n\t\t\tthis.virtualScroller.setItems(items, {\r\n\t\t\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t\t\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\t\t\t\tpreserveScrollPositionOnPrependItems: preserveScrollPositionOnPrependItems || preserveScrollPosition\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis._isMounted = false\r\n\t\t// Stop listening to scroll events.\r\n\t\tthis.virtualScroller.stop()\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst {\r\n\t\t\tas: AsComponent,\r\n\t\t\titemComponent: Component,\r\n\t\t\titemComponentProps,\r\n\t\t\t// Rest\r\n\t\t\titems: _items,\r\n\t\t\testimatedItemHeight,\r\n\t\t\tbypass,\r\n\t\t\t// bypassBatchSize,\r\n\t\t\tpreserveScrollPositionOnPrependItems,\r\n\t\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\t\t\tpreserveScrollPosition,\r\n\t\t\tinitialScrollPosition,\r\n\t\t\tonScrollPositionChange,\r\n\t\t\tmeasureItemsBatchSize,\r\n\t\t\tscrollableContainer,\r\n\t\t\t// `getScrollableContainer` property is deprecated.\r\n\t\t\t// Use `scrollableContainer` instead.\r\n\t\t\tgetScrollableContainer,\r\n\t\t\tgetColumnsCount,\r\n\t\t\tinitialState,\r\n\t\t\tinitialCustomState,\r\n\t\t\tonStateChange,\r\n\t\t\tonItemInitialRender,\r\n\t\t\t// `onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.\r\n\t\t\tonItemFirstRender,\r\n\t\t\tgetItemId,\r\n\t\t\tonMount,\r\n\t\t\tclassName,\r\n\t\t\t...rest\r\n\t\t} = this.props\r\n\t\tconst {\r\n\t\t\titems,\r\n\t\t\titemStates,\r\n\t\t\tfirstShownItemIndex,\r\n\t\t\tlastShownItemIndex,\r\n\t\t\tbeforeItemsHeight,\r\n\t\t\tafterItemsHeight\r\n\t\t} = this.virtualScroller.getState()\r\n\t\t// If `items` are about to be changed then\r\n\t\t// store the scroll Y position for the first one\r\n\t\t// of the current items.\r\n\t\t// Previously it was being done in `componentDidUpdate()`\r\n\t\t// but it was later found out that it wouldn't work\r\n\t\t// for \"Show previous\" button because it would\r\n\t\t// get hidden before `componentDidUpdate()` is called.\r\n\t\t//\r\n\t\t// Consider this code example:\r\n\t\t//\r\n\t\t// const { fromIndex, items } = this.state\r\n\t\t// const items = allItems.slice(fromIndex)\r\n\t\t// return (\r\n\t\t// \t{fromIndex > 0 &&\r\n\t\t// \t\t<button onClick={this.onShowPrevious}>\r\n\t\t// \t\t\tShow previous\r\n\t\t// \t\t</button>\r\n\t\t// \t}\r\n\t\t// \t<VirtualScroller\r\n\t\t// \t\titems={items}\r\n\t\t// \t\titemComponent={ItemComponent}/>\r\n\t\t// )\r\n\t\t//\r\n\t\t// Consider a user clicks \"Show previous\" to show the items from the start.\r\n\t\t// By the time `componentDidUpdate()` is called on `<VirtualScroller/>`,\r\n\t\t// the \"Show previous\" button has already been hidden\r\n\t\t// (because there're no more \"previous\" items)\r\n\t\t// which results in the scroll Y position jumping forward\r\n\t\t// by the height of that \"Show previous\" button.\r\n\t\t// This is because `<VirtualScroller/>` captures scroll Y\r\n\t\t// position when items are prepended via `.setItems()`\r\n\t\t// when the \"Show previous\" button is still being shown,\r\n\t\t// and then restores scroll Y position in `.didUpdateState()`\r\n\t\t// when the \"Show previous\" button has already been hidden:\r\n\t\t// that's the reason for the scroll Y \"jump\".\r\n\t\t//\r\n\t\t// To prevent that, scroll Y position is captured at `render()`\r\n\t\t// time rather than later in `componentDidUpdate()`: this way,\r\n\t\t// scroll Y position is captured while the \"Show previous\" button\r\n\t\t// is still being shown.\r\n\t\t//\r\n\t\tconst newItems = this.props.items\r\n\t\tconst previousItems = items // this.virtualScroller.getState().items\r\n\t\t// There's one case when `newItems !== previousItems` is `true`\r\n\t\t// from the start: when `initialState.items` are passed.\r\n\t\t// To handle that single case `this.previousItemsProperty`\r\n\t\t// is tracked and `this.itemsPropertyHasChanged` flag is set.\r\n\t\tif (!this.itemsPropertyWasChanged) {\r\n\t\t\tthis.itemsPropertyWasChanged = this.props.items !== this.previousItemsProperty\r\n\t\t}\r\n\t\tthis.previousItemsProperty = this.props.items\r\n\t\tif (this.itemsPropertyWasChanged && newItems !== previousItems) {\r\n\t\t\tconst itemsDiff = this.virtualScroller.getItemsDiff(previousItems, newItems)\r\n\t\t\tif (itemsDiff && itemsDiff.prependedItemsCount === 0 && itemsDiff.appendedItemsCount > 0) {\r\n\t\t\t\t// If it's just items that have been appended\r\n\t\t\t\t// then no need to re-generate the prefix\r\n\t\t\t\t// and to fix scroll position and to clear caches.\r\n\t\t\t} else {\r\n\t\t\t\t// If the items update was incremental, then it's possible\r\n\t\t\t\t// that some items were prepended, and so the scroll Y position\r\n\t\t\t\t// should be restored after rendering those new items\r\n\t\t\t\t// in order for the currently shown items to stay\r\n\t\t\t\t// on the same position on screen.\r\n\t\t\t\t// (only if explicitly opted into using this feature)\r\n\t\t\t\t//\r\n\t\t\t\t// If the items update wasn't incremental\r\n\t\t\t\t// then there's no point in restoring scroll position.\r\n\t\t\t\t//\r\n\t\t\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t\t\t// use `preserveScrollPositionOnPrependItems` instead.\r\n\t\t\t\t//\r\n\t\t\t\tif (itemsDiff) {\r\n\t\t\t\t\tconst { prependedItemsCount } = itemsDiff\r\n\t\t\t\t\tif (prependedItemsCount > 0) {\r\n\t\t\t\t\t\tif (preserveScrollPositionOnPrependItems || preserveScrollPosition) {\r\n\t\t\t\t\t\t\tif (firstShownItemIndex === 0) {\r\n\t\t\t\t\t\t\t\tthis.virtualScroller.listHeightChangeWatcher.snapshot({\r\n\t\t\t\t\t\t\t\t\tpreviousItems,\r\n\t\t\t\t\t\t\t\t\tnewItems,\r\n\t\t\t\t\t\t\t\t\tprependedItemsCount\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// Reset the unique `key` prefix for item component keys.\r\n\t\t\t\tif (!getItemId) {\r\n\t\t\t\t\tthis.generateItemKeyPrefix()\r\n\t\t\t\t}\r\n\t\t\t\t// Reset item refs.\r\n\t\t\t\tthis.itemRefs = new Array(newItems.length)\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst tbody = this.virtualScroller.tbody\r\n\t\treturn (\r\n\t\t\t<AsComponent\r\n\t\t\t\t{...rest}\r\n\t\t\t\tref={this.container}\r\n\t\t\t\tclassName={tbody ? (className ? className + ' ' + 'VirtualScroller' : 'VirtualScroller') : className}\r\n\t\t\t\tstyle={{\r\n\t\t\t\t\tpaddingTop: tbody ? undefined : px(beforeItemsHeight),\r\n\t\t\t\t\tpaddingBottom: tbody ? undefined : px(afterItemsHeight)\r\n\t\t\t\t}}>\r\n\t\t\t\t{items.map((item, i) => {\r\n\t\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t<Component\r\n\t\t\t\t\t\t\t\t{...itemComponentProps}\r\n\t\t\t\t\t\t\t\tkey={this.getItemKey(item, i)}\r\n\t\t\t\t\t\t\t\tref={this.shouldUseRefs() ? this.getItemRef(i) : undefined}\r\n\t\t\t\t\t\t\t\tstate={itemStates && itemStates[i]}\r\n\t\t\t\t\t\t\t\tonStateChange={this.getOnItemStateChange(i)}\r\n\t\t\t\t\t\t\t\tonHeightChange={this.getOnItemHeightChange(i)}>\r\n\t\t\t\t\t\t\t\t{item}\r\n\t\t\t\t\t\t\t</Component>\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn null\r\n\t\t\t\t})}\r\n\t\t\t</AsComponent>\r\n\t\t)\r\n\t}\r\n}\r\n\r\n/**\r\n * Checks if the argument is a `React.Component` class.\r\n * https://overreacted.io/how-does-react-tell-a-class-from-a-function/\r\n * @param {any} Component\r\n * @return {object} [result] Returns `undefined` if it's not a `React.Component`. Returns an empty object if it's a `React.Component` (`.isReactComponent` is an empty object).\r\n */\r\nfunction isComponentClass(Component) {\r\n\t// return Component.prototype instanceof React.Component\r\n\t// `React.memo()` returns `.prototype === undefined` for some reason.\r\n\treturn Component.prototype && Component.prototype.isReactComponent\r\n}\r\n"],"file":"VirtualScroller.js"}
1
+ {"version":3,"file":"VirtualScroller.js","names":["React","useRef","useMemo","useLayoutEffect","PropTypes","useState","useVirtualScroller","useVirtualScrollerStartStop","useInstanceMethods","useItemKeys","useOnItemStateChange","useOnItemHeightChange","useHandleItemsChange","useClassName","useStyle","VirtualScroller","ref","AsComponent","as","items","Component","itemComponent","itemComponentProps","estimatedItemHeight","bypass","tbody","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","className","onMount","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","onStateChange","initialState","rest","container","virtualScroller","_initialState","getInitialState","onRender","getState","updateState","getItemKey","updateItemKeysForNewItems","getOnItemStateChange","getOnItemHeightChange","style","renderedItems","itemStates","firstShownItemIndex","lastShownItemIndex","map","item","i","forwardRef","elementType","oneOfType","string","func","object","propTypes","arrayOf","any","isRequired","number","bool","shape","beforeItemsHeight","afterItemsHeight","itemHeights","columnsCount","verticalSpacing","defaultProps"],"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 useOnItemStateChange from './useOnItemStateChange.js'\r\nimport useOnItemHeightChange from './useOnItemHeightChange.js'\r\nimport useHandleItemsChange from './useHandleItemsChange.js'\r\nimport useClassName from './useClassName.js'\r\nimport useStyle from './useStyle.js'\r\n\r\nfunction VirtualScroller({\r\n\tas: AsComponent,\r\n\titems,\r\n\titemComponent: Component,\r\n\titemComponentProps,\r\n\testimatedItemHeight,\r\n\tbypass,\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\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\t...rest\r\n}, ref) {\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,\r\n\t\testimatedItemHeight,\r\n\t\tbypass,\r\n\t\t// bypassBatchSize,\r\n\t\ttbody,\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\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// Create state management functions.\r\n\tconst {\r\n\t\tgetState,\r\n\t\tupdateState\r\n\t} = useState({\r\n\t\tinitialState: _initialState,\r\n\t\tonRender: virtualScroller.onRender,\r\n\t\titems\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\tupdateState\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)\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\tupdateItemKeysForNewItems\r\n\t} = useItemKeys({\r\n\t\tgetItemId\r\n\t})\r\n\r\n\t// Cache per-item `onItemStateChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemStateChange = useOnItemStateChange({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Cache per-item `onItemHeightChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightChange = useOnItemHeightChange({\r\n\t\titems,\r\n\t\tvirtualScroller\r\n\t})\r\n\r\n\t// Detect if `items` have changed.\r\n\tuseHandleItemsChange(items, {\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\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\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\tvirtualScroller\r\n\t})\r\n\r\n\tconst {\r\n\t\titems: renderedItems,\r\n\t\titemStates,\r\n\t\tfirstShownItemIndex,\r\n\t\tlastShownItemIndex\r\n\t} = virtualScroller.getState()\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{renderedItems.map((item, i) => {\r\n\t\t\t\tif (i >= firstShownItemIndex && i <= lastShownItemIndex) {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Component\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\tonStateChange={getOnItemStateChange(i)}\r\n\t\t\t\t\t\t\tonHeightChange={getOnItemHeightChange(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\testimatedItemHeight: PropTypes.number,\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\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),\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}\r\n\r\nVirtualScroller.defaultProps = {\r\n\tas: 'div'\r\n}\r\n"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { TBODY_CLASS_NAME } from '../DOM/tbody.js';
2
+ export default function useClassName(className, _ref) {
3
+ var tbody = _ref.tbody;
4
+
5
+ // For `<tbody/>`, a workaround is used which uses CSS variables
6
+ // and a special CSS class name "VirtualScroller".
7
+ // See `addTbodyStyles()` function in `../DOM/tbody.js` for more details.
8
+ if (tbody) {
9
+ if (className) {
10
+ return className + ' ' + TBODY_CLASS_NAME;
11
+ }
12
+
13
+ return TBODY_CLASS_NAME;
14
+ }
15
+
16
+ return className;
17
+ }
18
+ //# sourceMappingURL=useClassName.js.map
@@ -0,0 +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"}
@@ -0,0 +1,108 @@
1
+ import { useRef, useLayoutEffect } from 'react'; // If new `items` are passed:
2
+ //
3
+ // * Store the scroll Y position for the first one of the current items
4
+ // so that it could potentially (in some cases) be restored after the
5
+ // new `items` are rendered.
6
+ //
7
+ // * Call `VirtualScroller.setItems()` function.
8
+ //
9
+ // * Re-generate the React `key` prefix for item elements
10
+ // so that all item components are re-rendered for the new `items` list.
11
+ // That's because item components may have their own internal state,
12
+ // and simply passing another `item` property for an item component
13
+ // might result in bugs, which React would do with its "re-using" policy
14
+ // if the unique `key` workaround hasn't been used.
15
+ //
16
+
17
+ export default function useHandleItemsChange(items, _ref) {
18
+ var virtualScroller = _ref.virtualScroller,
19
+ preserveScrollPosition = _ref.preserveScrollPosition,
20
+ preserveScrollPositionOnPrependItems = _ref.preserveScrollPositionOnPrependItems,
21
+ updateItemKeysForNewItems = _ref.updateItemKeysForNewItems;
22
+
23
+ var _virtualScroller$getS = virtualScroller.getState(),
24
+ renderedItems = _virtualScroller$getS.items,
25
+ firstShownItemIndex = _virtualScroller$getS.firstShownItemIndex; // During render, check if the `items` list has changed.
26
+ // If it has, capture the Y scroll position and updated item element `key`s.
27
+ // A long "advanced" sidenote on why capturing scroll Y position
28
+ // is done during render instead of in an "effect":
29
+ //
30
+ // Previously, capturing scroll Y position was being done in `useLayoutEffect()`
31
+ // but it was later found out that it wouldn't work for a "Show previous" button
32
+ // scenario because that button would get hidden by the time `useLayoutEffect()`
33
+ // gets called when there're no more "previous" items to show.
34
+ //
35
+ // Consider this code example:
36
+ //
37
+ // const { fromIndex, items } = this.state
38
+ // const items = allItems.slice(fromIndex)
39
+ // return (
40
+ // {fromIndex > 0 &&
41
+ // <button onClick={this.onShowPrevious}>
42
+ // Show previous
43
+ // </button>
44
+ // }
45
+ // <VirtualScroller
46
+ // items={items}
47
+ // itemComponent={ItemComponent}/>
48
+ // )
49
+ //
50
+ // Consider a user clicks "Show previous" to show the items from the start.
51
+ // By the time `componentDidUpdate()` is called on `<VirtualScroller/>`,
52
+ // the "Show previous" button has already been hidden
53
+ // (because there're no more "previous" items)
54
+ // which results in the scroll Y position jumping forward
55
+ // by the height of that "Show previous" button.
56
+ // This is because `<VirtualScroller/>` captures scroll Y
57
+ // position when items are prepended via `.setItems()`
58
+ // when the "Show previous" button is still being shown,
59
+ // and then restores scroll Y position in `.onRender()`
60
+ // when the "Show previous" button has already been hidden:
61
+ // that's the reason for the scroll Y "jump".
62
+ //
63
+ // To prevent that, scroll Y position is captured at `render()`
64
+ // time rather than later in `componentDidUpdate()`: this way,
65
+ // scroll Y position is captured while the "Show previous" button
66
+ // is still being shown.
67
+
68
+
69
+ var previousItems = useRef(items);
70
+ var hasItemsPropertyChanged = items !== previousItems.current;
71
+ previousItems.current = items;
72
+
73
+ if (hasItemsPropertyChanged) {
74
+ var itemsHaveChanged = true;
75
+ var shouldUpdateItemKeys = true;
76
+ var itemsDiff = virtualScroller.getItemsDiff(renderedItems, items); // `itemsDiff` will be `undefined` in case of a non-incremental items list change.
77
+
78
+ if (itemsDiff) {
79
+ var prependedItemsCount = itemsDiff.prependedItemsCount,
80
+ appendedItemsCount = itemsDiff.appendedItemsCount;
81
+
82
+ if (prependedItemsCount === 0 && appendedItemsCount === 0) {
83
+ // The items haven't changed. No need to re-generate
84
+ // the `key` prefix or to snapshot the Y scroll position.
85
+ itemsHaveChanged = false;
86
+ shouldUpdateItemKeys = false;
87
+ } else if (prependedItemsCount === 0 && appendedItemsCount > 0) {
88
+ // Just some items got appended. No need to re-generate
89
+ // the `key` prefix or to snapshot the Y scroll position.
90
+ shouldUpdateItemKeys = false;
91
+ }
92
+ }
93
+
94
+ if (itemsHaveChanged) {
95
+ // Set the new `items`.
96
+ virtualScroller.setItems(items, {
97
+ // `preserveScrollPosition` property name is deprecated,
98
+ // use `preserveScrollPositionOnPrependItems` property instead.
99
+ preserveScrollPositionOnPrependItems: preserveScrollPositionOnPrependItems || preserveScrollPosition
100
+ }); // Update React element `key`s for the new set of `items`.
101
+
102
+ if (shouldUpdateItemKeys) {
103
+ updateItemKeysForNewItems();
104
+ }
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=useHandleItemsChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHandleItemsChange.js","names":["useRef","useLayoutEffect","useHandleItemsChange","items","virtualScroller","preserveScrollPosition","preserveScrollPositionOnPrependItems","updateItemKeysForNewItems","getState","renderedItems","firstShownItemIndex","previousItems","hasItemsPropertyChanged","current","itemsHaveChanged","shouldUpdateItemKeys","itemsDiff","getItemsDiff","prependedItemsCount","appendedItemsCount","setItems"],"sources":["../../source/react/useHandleItemsChange.js"],"sourcesContent":["import { useRef, useLayoutEffect } from 'react'\r\n\r\n// If new `items` are passed:\r\n//\r\n// * Store the scroll Y position for the first one of the current items\r\n// so that it could potentially (in some cases) be restored after the\r\n// new `items` are rendered.\r\n//\r\n// * Call `VirtualScroller.setItems()` function.\r\n//\r\n// * Re-generate the React `key` prefix for item elements\r\n// so that all item components are re-rendered for the new `items` list.\r\n// That's because item components may have their own internal state,\r\n// and simply passing another `item` property for an item component\r\n// might result in bugs, which React would do with its \"re-using\" policy\r\n// if the unique `key` workaround hasn't been used.\r\n//\r\nexport default function useHandleItemsChange(items, {\r\n\tvirtualScroller,\r\n\t// `preserveScrollPosition` property name is deprecated,\r\n\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\tpreserveScrollPosition,\r\n\tpreserveScrollPositionOnPrependItems,\r\n\tupdateItemKeysForNewItems\r\n}) {\r\n\tconst {\r\n\t\titems: renderedItems,\r\n\t\tfirstShownItemIndex\r\n\t} = virtualScroller.getState()\r\n\r\n\t// During render, check if the `items` list has changed.\r\n\t// If it has, capture the Y scroll position and updated item element `key`s.\r\n\r\n\t// A long \"advanced\" sidenote on why capturing scroll Y position\r\n\t// is done during render instead of in an \"effect\":\r\n\t//\r\n\t// Previously, capturing scroll Y position was being done in `useLayoutEffect()`\r\n\t// but it was later found out that it wouldn't work for a \"Show previous\" button\r\n\t// scenario because that button would get hidden by the time `useLayoutEffect()`\r\n\t// gets called when there're no more \"previous\" items to show.\r\n\t//\r\n\t// Consider this code example:\r\n\t//\r\n\t// const { fromIndex, items } = this.state\r\n\t// const items = allItems.slice(fromIndex)\r\n\t// return (\r\n\t// \t{fromIndex > 0 &&\r\n\t// \t\t<button onClick={this.onShowPrevious}>\r\n\t// \t\t\tShow previous\r\n\t// \t\t</button>\r\n\t// \t}\r\n\t// \t<VirtualScroller\r\n\t// \t\titems={items}\r\n\t// \t\titemComponent={ItemComponent}/>\r\n\t// )\r\n\t//\r\n\t// Consider a user clicks \"Show previous\" to show the items from the start.\r\n\t// By the time `componentDidUpdate()` is called on `<VirtualScroller/>`,\r\n\t// the \"Show previous\" button has already been hidden\r\n\t// (because there're no more \"previous\" items)\r\n\t// which results in the scroll Y position jumping forward\r\n\t// by the height of that \"Show previous\" button.\r\n\t// This is because `<VirtualScroller/>` captures scroll Y\r\n\t// position when items are prepended via `.setItems()`\r\n\t// when the \"Show previous\" button is still being shown,\r\n\t// and then restores scroll Y position in `.onRender()`\r\n\t// when the \"Show previous\" button has already been hidden:\r\n\t// that's the reason for the scroll Y \"jump\".\r\n\t//\r\n\t// To prevent that, scroll Y position is captured at `render()`\r\n\t// time rather than later in `componentDidUpdate()`: this way,\r\n\t// scroll Y position is captured while the \"Show previous\" button\r\n\t// is still being shown.\r\n\r\n\tconst previousItems = useRef(items)\r\n\tconst hasItemsPropertyChanged = items !== previousItems.current\r\n\tpreviousItems.current = items\r\n\tif (hasItemsPropertyChanged) {\r\n\t\tlet itemsHaveChanged = true\r\n\t\tlet shouldUpdateItemKeys = true\r\n\t\tconst itemsDiff = virtualScroller.getItemsDiff(renderedItems, items)\r\n\t\t// `itemsDiff` will be `undefined` in case of a non-incremental items list change.\r\n\t\tif (itemsDiff) {\r\n\t\t\tconst {\r\n\t\t\t\tprependedItemsCount,\r\n\t\t\t\tappendedItemsCount\r\n\t\t\t} = itemsDiff\r\n\t\t\tif (prependedItemsCount === 0 && appendedItemsCount === 0) {\r\n\t\t\t\t// The items haven't changed. No need to re-generate\r\n\t\t\t\t// the `key` prefix or to snapshot the Y scroll position.\r\n\t\t\t\titemsHaveChanged = false\r\n\t\t\t\tshouldUpdateItemKeys = false\r\n\t\t\t}\r\n\t\t\telse if (prependedItemsCount === 0 && appendedItemsCount > 0) {\r\n\t\t\t\t// Just some items got appended. No need to re-generate\r\n\t\t\t\t// the `key` prefix or to snapshot the Y scroll position.\r\n\t\t\t\tshouldUpdateItemKeys = false\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (itemsHaveChanged) {\r\n\t\t\t// Set the new `items`.\r\n\t\t\tvirtualScroller.setItems(items, {\r\n\t\t\t\t// `preserveScrollPosition` property name is deprecated,\r\n\t\t\t\t// use `preserveScrollPositionOnPrependItems` property instead.\r\n\t\t\t\tpreserveScrollPositionOnPrependItems: preserveScrollPositionOnPrependItems || preserveScrollPosition\r\n\t\t\t})\r\n\r\n\t\t\t// Update React element `key`s for the new set of `items`.\r\n\t\t\tif (shouldUpdateItemKeys) {\r\n\t\t\t\tupdateItemKeysForNewItems()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":"AAAA,SAASA,MAAT,EAAiBC,eAAjB,QAAwC,OAAxC,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,oBAAT,CAA8BC,KAA9B,QAOZ;EAAA,IANFC,eAME,QANFA,eAME;EAAA,IAHFC,sBAGE,QAHFA,sBAGE;EAAA,IAFFC,oCAEE,QAFFA,oCAEE;EAAA,IADFC,yBACE,QADFA,yBACE;;EACF,4BAGIH,eAAe,CAACI,QAAhB,EAHJ;EAAA,IACQC,aADR,yBACCN,KADD;EAAA,IAECO,mBAFD,yBAECA,mBAFD,CADE,CAMF;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EAEA,IAAMC,aAAa,GAAGX,MAAM,CAACG,KAAD,CAA5B;EACA,IAAMS,uBAAuB,GAAGT,KAAK,KAAKQ,aAAa,CAACE,OAAxD;EACAF,aAAa,CAACE,OAAd,GAAwBV,KAAxB;;EACA,IAAIS,uBAAJ,EAA6B;IAC5B,IAAIE,gBAAgB,GAAG,IAAvB;IACA,IAAIC,oBAAoB,GAAG,IAA3B;IACA,IAAMC,SAAS,GAAGZ,eAAe,CAACa,YAAhB,CAA6BR,aAA7B,EAA4CN,KAA5C,CAAlB,CAH4B,CAI5B;;IACA,IAAIa,SAAJ,EAAe;MACd,IACCE,mBADD,GAGIF,SAHJ,CACCE,mBADD;MAAA,IAECC,kBAFD,GAGIH,SAHJ,CAECG,kBAFD;;MAIA,IAAID,mBAAmB,KAAK,CAAxB,IAA6BC,kBAAkB,KAAK,CAAxD,EAA2D;QAC1D;QACA;QACAL,gBAAgB,GAAG,KAAnB;QACAC,oBAAoB,GAAG,KAAvB;MACA,CALD,MAMK,IAAIG,mBAAmB,KAAK,CAAxB,IAA6BC,kBAAkB,GAAG,CAAtD,EAAyD;QAC7D;QACA;QACAJ,oBAAoB,GAAG,KAAvB;MACA;IACD;;IAED,IAAID,gBAAJ,EAAsB;MACrB;MACAV,eAAe,CAACgB,QAAhB,CAAyBjB,KAAzB,EAAgC;QAC/B;QACA;QACAG,oCAAoC,EAAEA,oCAAoC,IAAID;MAH/C,CAAhC,EAFqB,CAQrB;;MACA,IAAIU,oBAAJ,EAA0B;QACzBR,yBAAyB;MACzB;IACD;EACD;AACD"}
@@ -0,0 +1,28 @@
1
+ import { useImperativeHandle } from 'react';
2
+ import { reportError } from '../utility/debug.js'; // Adds instance methods to the React component.
3
+
4
+ export default function useInstanceMethods(ref, _ref) {
5
+ var virtualScroller = _ref.virtualScroller;
6
+ useImperativeHandle(ref, function () {
7
+ return {
8
+ // This is a proxy for `VirtualScroller`'s `.updateLayout` instance method.
9
+ updateLayout: function updateLayout() {
10
+ return virtualScroller.updateLayout();
11
+ },
12
+ // (deprecated)
13
+ // `.layout()` method name is deprecated, use `.updateLayout()` instead.
14
+ layout: function layout() {
15
+ return virtualScroller.updateLayout();
16
+ },
17
+ // (deprecated)
18
+ updateItem: function updateItem(i) {
19
+ return reportError("[virtual-scroller] \".updateItem(i)\" method of React <VirtualScroller/> has been removed");
20
+ },
21
+ // (deprecated)
22
+ renderItem: function renderItem(i) {
23
+ return reportError("[virtual-scroller] \".renderItem(i)\" method of React <VirtualScroller/> has been removed");
24
+ }
25
+ };
26
+ }, [virtualScroller]);
27
+ }
28
+ //# sourceMappingURL=useInstanceMethods.js.map
@@ -0,0 +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"}
@@ -0,0 +1,52 @@
1
+ import { useRef, useMemo, useCallback } from 'react';
2
+ export default function useItemKeys(_ref) {
3
+ var getItemId = _ref.getItemId;
4
+ // List items are rendered with `key`s so that React doesn't
5
+ // "reuse" `itemComponent`s in cases when `items` are changed.
6
+ var itemKeyPrefix = useRef(); // Generates a unique `key` prefix for list item components.
7
+
8
+ var generateItemKeyPrefix = useMemo(function () {
9
+ var counter = 0;
10
+
11
+ function getNextCounter() {
12
+ if (counter === Number.MAX_SAFE_INTEGER) {
13
+ counter = 0;
14
+ }
15
+
16
+ counter++;
17
+ return counter;
18
+ }
19
+
20
+ return function () {
21
+ itemKeyPrefix.current = String(getNextCounter());
22
+ };
23
+ }, [itemKeyPrefix]);
24
+ useMemo(function () {
25
+ // Generate an initial unique `key` prefix for list item components.
26
+ generateItemKeyPrefix();
27
+ }, []);
28
+ var generateItemKeyPrefixIfNotUsingItemIds = useCallback(function () {
29
+ if (!getItemId) {
30
+ generateItemKeyPrefix();
31
+ }
32
+ }, [getItemId, generateItemKeyPrefix]);
33
+ /**
34
+ * Returns a `key` for an `item`'s element.
35
+ * @param {object} item — The item.
36
+ * @param {number} i — Item's index in `items` list.
37
+ * @return {any}
38
+ */
39
+
40
+ var getItemKey = useCallback(function (item, i) {
41
+ if (getItemId) {
42
+ return getItemId(item);
43
+ }
44
+
45
+ return "".concat(itemKeyPrefix.current, ":").concat(i);
46
+ }, [getItemId, itemKeyPrefix]);
47
+ return {
48
+ getItemKey: getItemKey,
49
+ updateItemKeysForNewItems: generateItemKeyPrefixIfNotUsingItemIds
50
+ };
51
+ }
52
+ //# sourceMappingURL=useItemKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useItemKeys.js","names":["useRef","useMemo","useCallback","useItemKeys","getItemId","itemKeyPrefix","generateItemKeyPrefix","counter","getNextCounter","Number","MAX_SAFE_INTEGER","current","String","generateItemKeyPrefixIfNotUsingItemIds","getItemKey","item","i","updateItemKeysForNewItems"],"sources":["../../source/react/useItemKeys.js"],"sourcesContent":["import { 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\tconst generateItemKeyPrefixIfNotUsingItemIds = useCallback(() => {\r\n\t\tif (!getItemId) {\r\n\t\t\tgenerateItemKeyPrefix()\r\n\t\t}\r\n\t}, [\r\n\t\tgetItemId,\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\tupdateItemKeysForNewItems: generateItemKeyPrefixIfNotUsingItemIds\r\n\t}\r\n}"],"mappings":"AAAA,SAASA,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;EAKA,IAAMO,sCAAsC,GAAGX,WAAW,CAAC,YAAM;IAChE,IAAI,CAACE,SAAL,EAAgB;MACfE,qBAAqB;IACrB;EACD,CAJyD,EAIvD,CACFF,SADE,EAEFE,qBAFE,CAJuD,CAA1D;EASA;AACD;AACA;AACA;AACA;AACA;;EACC,IAAMQ,UAAU,GAAGZ,WAAW,CAAC,UAACa,IAAD,EAAOC,CAAP,EAAa;IAC3C,IAAIZ,SAAJ,EAAe;MACd,OAAOA,SAAS,CAACW,IAAD,CAAhB;IACA;;IACD,iBAAUV,aAAa,CAACM,OAAxB,cAAmCK,CAAnC;EACA,CAL6B,EAK3B,CACFZ,SADE,EAEFC,aAFE,CAL2B,CAA9B;EAUA,OAAO;IACNS,UAAU,EAAVA,UADM;IAENG,yBAAyB,EAAEJ;EAFrB,CAAP;AAIA"}
@@ -0,0 +1,24 @@
1
+ import { useMemo, useRef, useCallback } from 'react';
2
+ export default function useOnItemHeightChange(_ref) {
3
+ var items = _ref.items,
4
+ virtualScroller = _ref.virtualScroller;
5
+ // Only compute the initial cache value once.
6
+ var initialCacheValue = useMemo(function () {
7
+ return new Array(items.length);
8
+ }, []); // Handler functions cache.
9
+
10
+ var cache = useRef(initialCacheValue); // Caches per-item `onItemHeightChange` functions' "references"
11
+ // so that item components don't get re-rendered needlessly.
12
+
13
+ var getOnItemHeightChange = useCallback(function (i) {
14
+ if (!cache.current[i]) {
15
+ cache.current[i] = function () {
16
+ return virtualScroller.onItemHeightChange(i);
17
+ };
18
+ }
19
+
20
+ return cache.current[i];
21
+ }, [virtualScroller, cache]);
22
+ return getOnItemHeightChange;
23
+ }
24
+ //# sourceMappingURL=useOnItemHeightChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnItemHeightChange.js","names":["useMemo","useRef","useCallback","useOnItemHeightChange","items","virtualScroller","initialCacheValue","Array","length","cache","getOnItemHeightChange","i","current","onItemHeightChange"],"sources":["../../source/react/useOnItemHeightChange.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useOnItemHeightChange({\r\n\titems,\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(items.length)\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 `onItemHeightChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemHeightChange = useCallback((i) => {\r\n\t\tif (!cache.current[i]) {\r\n\t\t\tcache.current[i] = () => virtualScroller.onItemHeightChange(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 getOnItemHeightChange\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,qBAAT,OAGZ;EAAA,IAFFC,KAEE,QAFFA,KAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,iBAAiB,GAAGN,OAAO,CAAC,YAAM;IACvC,OAAO,IAAIO,KAAJ,CAAUH,KAAK,CAACI,MAAhB,CAAP;EACA,CAFgC,EAE9B,EAF8B,CAAjC,CAFE,CAMF;;EACA,IAAMC,KAAK,GAAGR,MAAM,CAACK,iBAAD,CAApB,CAPE,CASF;EACA;;EACA,IAAMI,qBAAqB,GAAGR,WAAW,CAAC,UAACS,CAAD,EAAO;IAChD,IAAI,CAACF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAL,EAAuB;MACtBF,KAAK,CAACG,OAAN,CAAcD,CAAd,IAAmB;QAAA,OAAMN,eAAe,CAACQ,kBAAhB,CAAmCF,CAAnC,CAAN;MAAA,CAAnB;IACA;;IACD,OAAOF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAP;EACA,CALwC,EAKtC,CACFN,eADE,EAEFI,KAFE,CALsC,CAAzC;EAUA,OAAOC,qBAAP;AACA"}
@@ -0,0 +1,24 @@
1
+ import { useMemo, useRef, useCallback } from 'react';
2
+ export default function useOnItemStateChange(_ref) {
3
+ var items = _ref.items,
4
+ virtualScroller = _ref.virtualScroller;
5
+ // Only compute the initial cache value once.
6
+ var initialCacheValue = useMemo(function () {
7
+ return new Array(items.length);
8
+ }, []); // Handler functions cache.
9
+
10
+ var cache = useRef(initialCacheValue); // Caches per-item `onItemStateChange` functions' "references"
11
+ // so that item components don't get re-rendered needlessly.
12
+
13
+ var getOnItemStateChange = useCallback(function (i) {
14
+ if (!cache.current[i]) {
15
+ cache.current[i] = function (itemState) {
16
+ return virtualScroller.onItemStateChange(i, itemState);
17
+ };
18
+ }
19
+
20
+ return cache.current[i];
21
+ }, [virtualScroller, cache]);
22
+ return getOnItemStateChange;
23
+ }
24
+ //# sourceMappingURL=useOnItemStateChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnItemStateChange.js","names":["useMemo","useRef","useCallback","useOnItemStateChange","items","virtualScroller","initialCacheValue","Array","length","cache","getOnItemStateChange","i","current","itemState","onItemStateChange"],"sources":["../../source/react/useOnItemStateChange.js"],"sourcesContent":["import { useMemo, useRef, useCallback } from 'react'\r\n\r\nexport default function useOnItemStateChange({\r\n\titems,\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(items.length)\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 `onItemStateChange` functions' \"references\"\r\n\t// so that item components don't get re-rendered needlessly.\r\n\tconst getOnItemStateChange = useCallback((i) => {\r\n\t\tif (!cache.current[i]) {\r\n\t\t\tcache.current[i] = (itemState) => virtualScroller.onItemStateChange(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 getOnItemStateChange\r\n}"],"mappings":"AAAA,SAASA,OAAT,EAAkBC,MAAlB,EAA0BC,WAA1B,QAA6C,OAA7C;AAEA,eAAe,SAASC,oBAAT,OAGZ;EAAA,IAFFC,KAEE,QAFFA,KAEE;EAAA,IADFC,eACE,QADFA,eACE;EACF;EACA,IAAMC,iBAAiB,GAAGN,OAAO,CAAC,YAAM;IACvC,OAAO,IAAIO,KAAJ,CAAUH,KAAK,CAACI,MAAhB,CAAP;EACA,CAFgC,EAE9B,EAF8B,CAAjC,CAFE,CAMF;;EACA,IAAMC,KAAK,GAAGR,MAAM,CAACK,iBAAD,CAApB,CAPE,CASF;EACA;;EACA,IAAMI,oBAAoB,GAAGR,WAAW,CAAC,UAACS,CAAD,EAAO;IAC/C,IAAI,CAACF,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAL,EAAuB;MACtBF,KAAK,CAACG,OAAN,CAAcD,CAAd,IAAmB,UAACE,SAAD;QAAA,OAAeR,eAAe,CAACS,iBAAhB,CAAkCH,CAAlC,EAAqCE,SAArC,CAAf;MAAA,CAAnB;IACA;;IACD,OAAOJ,KAAK,CAACG,OAAN,CAAcD,CAAd,CAAP;EACA,CALuC,EAKrC,CACFN,eADE,EAEFI,KAFE,CALqC,CAAxC;EAUA,OAAOC,oBAAP;AACA"}
@@ -0,0 +1,132 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+
11
+ 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); }
12
+
13
+ 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; }
14
+
15
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
16
+
17
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
18
+
19
+ import { useState, useRef, useLayoutEffect } from 'react'; // Creates state management functions.
20
+
21
+ export default function _useState(_ref) {
22
+ var initialState = _ref.initialState,
23
+ onRender = _ref.onRender,
24
+ items = _ref.items;
25
+
26
+ // `VirtualScroller` state.
27
+ //
28
+ // The `_stateUpdate` variable shouldn't be used directly
29
+ // because in some cases its value may not represent
30
+ // the actual `state` of the `VirtualScroller`.
31
+ //
32
+ // * It will contain an incorrect initial value if `initialState` property is passed
33
+ // because it doesn't get initialized to `initialState`.
34
+ //
35
+ // * If `items` property gets changed, `state` reference variable gets updated immediately
36
+ // but the `_stateUpdate` variable here doesn't (until the component re-renders some other time).
37
+ //
38
+ // Instead, use the `state` reference below.
39
+ //
40
+ var _useState2 = useState(),
41
+ _useState3 = _slicedToArray(_useState2, 2),
42
+ _stateUpdate = _useState3[0],
43
+ _setStateUpdate = _useState3[1]; // This `state` reference is used for accessing the externally stored
44
+ // virtual scroller state from inside a `VirtualScroller` instance.
45
+ //
46
+ // It's also the "source of truth" on the actual `VirtualScroller` state.
47
+ //
48
+
49
+
50
+ var state = useRef(initialState); // Accumulates state updates until they have been applied.
51
+
52
+ var targetState = useRef(initialState); // Update the current state reference.
53
+ //
54
+ // Ignores the cases when `state` reference has already been updated
55
+ // "immediately" bypassing a `_setStateUpdate()` call, because
56
+ // in that case, `_stateUpdate` holds a stale value.
57
+ //
58
+
59
+ if (state.current !== targetState.current) {
60
+ state.current = _stateUpdate;
61
+ } // Call `onRender()` right after every state update.
62
+ //
63
+ // When `items` property changes, `useHandleItemsChange()` hook doesn't call
64
+ // `_setStateUpdate()` because there's no need for a re-render.
65
+ // But chaning `items` still does trigger a `VirtualScroller` state update,
66
+ // so added `items` property in the list of this "effect"'s dependencies.
67
+ //
68
+
69
+
70
+ useLayoutEffect(function () {
71
+ onRender();
72
+ }, [_stateUpdate, items]);
73
+ return {
74
+ getState: function getState() {
75
+ return state.current;
76
+ },
77
+ // Updates existing state.
78
+ //
79
+ // State updates are incremental meaning that this code should mimick
80
+ // the classic `React.Component`'s `this.setState()` behavior
81
+ // when calling `this.setState()` doesn't replace `state` but rather merges
82
+ // a set of the updated state properties with the rest of the old ones.
83
+ //
84
+ // The reason is that `useState()` updates are "asynchronous" (not immediate),
85
+ // and simply merging over `...state` would merge over potentially stale
86
+ // property values in cases when more than a single `updateState()` call is made
87
+ // before the state actually updates, resulting in losing some of the state updates.
88
+ //
89
+ // For example, the first `updateState()` call updates shown item indexes,
90
+ // and the second `updateState()` call updates `verticalSpacing`.
91
+ // If it was simply `updateState({ ...state, ...stateUpdate })`
92
+ // then the second state update could overwrite the first state update,
93
+ // resulting in incorrect items being shown/hidden.
94
+ //
95
+ // Using `...state.current` instead of `...pendingState.current` here
96
+ // would produce "stale" results.
97
+ //
98
+ updateState: function updateState(stateUpdate) {
99
+ var newState = _objectSpread(_objectSpread({}, targetState.current), stateUpdate);
100
+
101
+ targetState.current = newState; // If `items` property did change the component detects it at render time
102
+ // and updates `VirtualScroller` items immediately by calling `.setItems()`.
103
+ // But, since all of that happens at render time and not in an "effect",
104
+ // if the state update was done as usual by calling `_setStateUpdate()`,
105
+ // React would throw an error about updating state during render.
106
+ // Hence, state update in that particular case should happen "directly",
107
+ // without waiting for an "asynchronous" effect to trigger and call
108
+ // an "asyncronous" `_setStateUpdate()` function.
109
+ //
110
+ // Updating state directly in that particular case works because there
111
+ // already is a render ongoing, so there's no need to re-render the component
112
+ // again after such render-time state update.
113
+ //
114
+ // When the initial `VirtualScroller` state is being set, it contains an `.items`
115
+ // property too, but that initial setting is done using another function called
116
+ // `setInitialState()`, so using `if (stateUpdate.items)` condition here for describing
117
+ // just the case when `state` has been updated as a result of a `setItems()` call
118
+ // seems to be fine.
119
+ //
120
+
121
+ if (stateUpdate.items) {
122
+ // If a `stateUpdate` contains `items` then it means that there was a `setItems()` call.
123
+ // No need to trigger a re-render — the component got re-rendered anyway.
124
+ // Just update the `state` "in place".
125
+ state.current = newState;
126
+ } else {
127
+ _setStateUpdate(newState);
128
+ }
129
+ }
130
+ };
131
+ }
132
+ //# sourceMappingURL=useState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useState.js","names":["useState","useRef","useLayoutEffect","_useState","initialState","onRender","items","_stateUpdate","_setStateUpdate","state","targetState","current","getState","updateState","stateUpdate","newState"],"sources":["../../source/react/useState.js"],"sourcesContent":["import { useState, useRef, useLayoutEffect } from 'react'\r\n\r\n// Creates state management functions.\r\nexport default function _useState({ initialState, onRender, items }) {\r\n\t// `VirtualScroller` state.\r\n\t//\r\n\t// The `_stateUpdate` variable shouldn't be used directly\r\n\t// because in some cases its value may not represent\r\n\t// the actual `state` of the `VirtualScroller`.\r\n\t//\r\n\t// * It will contain an incorrect initial value if `initialState` property is passed\r\n\t// because it doesn't get initialized to `initialState`.\r\n\t//\r\n\t// * If `items` property gets changed, `state` reference variable gets updated immediately\r\n\t// but the `_stateUpdate` variable here doesn't (until the component re-renders some other time).\r\n\t//\r\n\t// Instead, use the `state` reference below.\r\n\t//\r\n\tconst [_stateUpdate, _setStateUpdate] = useState()\r\n\r\n\t// This `state` reference is used for accessing the externally stored\r\n\t// virtual scroller state from inside a `VirtualScroller` instance.\r\n\t//\r\n\t// It's also the \"source of truth\" on the actual `VirtualScroller` state.\r\n\t//\r\n\tconst state = useRef(initialState)\r\n\r\n\t// Accumulates state updates until they have been applied.\r\n\tconst targetState = useRef(initialState)\r\n\r\n\t// Update the current state reference.\r\n\t//\r\n\t// Ignores the cases when `state` reference has already been updated\r\n\t// \"immediately\" bypassing a `_setStateUpdate()` call, because\r\n\t// in that case, `_stateUpdate` holds a stale value.\r\n\t//\r\n\tif (state.current !== targetState.current) {\r\n\t\tstate.current = _stateUpdate\r\n\t}\r\n\r\n\t// Call `onRender()` right after every state update.\r\n\t//\r\n\t// When `items` property changes, `useHandleItemsChange()` hook doesn't call\r\n\t// `_setStateUpdate()` because there's no need for a re-render.\r\n\t// But chaning `items` still does trigger a `VirtualScroller` state update,\r\n\t// so added `items` property in the list of this \"effect\"'s dependencies.\r\n\t//\r\n\tuseLayoutEffect(() => {\r\n\t\tonRender()\r\n\t}, [\r\n\t\t_stateUpdate,\r\n\t\titems\r\n\t])\r\n\r\n\treturn {\r\n\t\tgetState: () => state.current,\r\n\r\n\t\t// Updates existing state.\r\n\t\t//\r\n\t\t// State updates are incremental meaning that this code should mimick\r\n\t\t// the classic `React.Component`'s `this.setState()` behavior\r\n\t\t// when calling `this.setState()` doesn't replace `state` but rather merges\r\n\t\t// a set of the updated state properties with the rest of the old ones.\r\n\t\t//\r\n\t\t// The reason is that `useState()` updates are \"asynchronous\" (not immediate),\r\n\t\t// and simply merging over `...state` would merge over potentially stale\r\n\t\t// property values in cases when more than a single `updateState()` call is made\r\n\t\t// before the state actually updates, resulting in losing some of the state updates.\r\n\t\t//\r\n\t\t// For example, the first `updateState()` call updates shown item indexes,\r\n\t\t// and the second `updateState()` call updates `verticalSpacing`.\r\n\t\t// If it was simply `updateState({ ...state, ...stateUpdate })`\r\n\t\t// then the second state update could overwrite the first state update,\r\n\t\t// resulting in incorrect items being shown/hidden.\r\n\t\t//\r\n\t\t// Using `...state.current` instead of `...pendingState.current` here\r\n\t\t// would produce \"stale\" results.\r\n\t\t//\r\n\t\tupdateState: (stateUpdate) => {\r\n\t\t\tconst newState = {\r\n\t\t\t\t...targetState.current,\r\n\t\t\t\t...stateUpdate\r\n\t\t\t}\r\n\t\t\ttargetState.current = newState\r\n\t\t\t// If `items` property did change the component detects it at render time\r\n\t\t\t// and updates `VirtualScroller` items immediately by calling `.setItems()`.\r\n\t\t\t// But, since all of that happens at render time and not in an \"effect\",\r\n\t\t\t// if the state update was done as usual by calling `_setStateUpdate()`,\r\n\t\t\t// React would throw an error about updating state during render.\r\n\t\t\t// Hence, state update in that particular case should happen \"directly\",\r\n\t\t\t// without waiting for an \"asynchronous\" effect to trigger and call\r\n\t\t\t// an \"asyncronous\" `_setStateUpdate()` function.\r\n\t\t\t//\r\n\t\t\t// Updating state directly in that particular case works because there\r\n\t\t\t// already is a render ongoing, so there's no need to re-render the component\r\n\t\t\t// again after such render-time state update.\r\n\t\t\t//\r\n\t\t\t// When the initial `VirtualScroller` state is being set, it contains an `.items`\r\n\t\t\t// property too, but that initial setting is done using another function called\r\n\t\t\t// `setInitialState()`, so using `if (stateUpdate.items)` condition here for describing\r\n\t\t\t// just the case when `state` has been updated as a result of a `setItems()` call\r\n\t\t\t// seems to be fine.\r\n\t\t\t//\r\n\t\t\tif (stateUpdate.items) {\r\n\t\t\t\t// If a `stateUpdate` contains `items` then it means that there was a `setItems()` call.\r\n\t\t\t\t// No need to trigger a re-render — the component got re-rendered anyway.\r\n\t\t\t\t// Just update the `state` \"in place\".\r\n\t\t\t\tstate.current = newState\r\n\t\t\t} else {\r\n\t\t\t\t_setStateUpdate(newState)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAASA,QAAT,EAAmBC,MAAnB,EAA2BC,eAA3B,QAAkD,OAAlD,C,CAEA;;AACA,eAAe,SAASC,SAAT,OAAsD;EAAA,IAAjCC,YAAiC,QAAjCA,YAAiC;EAAA,IAAnBC,QAAmB,QAAnBA,QAAmB;EAAA,IAATC,KAAS,QAATA,KAAS;;EACpE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAwCN,QAAQ,EAAhD;EAAA;EAAA,IAAOO,YAAP;EAAA,IAAqBC,eAArB,iBAfoE,CAiBpE;EACA;EACA;EACA;EACA;;;EACA,IAAMC,KAAK,GAAGR,MAAM,CAACG,YAAD,CAApB,CAtBoE,CAwBpE;;EACA,IAAMM,WAAW,GAAGT,MAAM,CAACG,YAAD,CAA1B,CAzBoE,CA2BpE;EACA;EACA;EACA;EACA;EACA;;EACA,IAAIK,KAAK,CAACE,OAAN,KAAkBD,WAAW,CAACC,OAAlC,EAA2C;IAC1CF,KAAK,CAACE,OAAN,GAAgBJ,YAAhB;EACA,CAnCmE,CAqCpE;EACA;EACA;EACA;EACA;EACA;EACA;;;EACAL,eAAe,CAAC,YAAM;IACrBG,QAAQ;EACR,CAFc,EAEZ,CACFE,YADE,EAEFD,KAFE,CAFY,CAAf;EAOA,OAAO;IACNM,QAAQ,EAAE;MAAA,OAAMH,KAAK,CAACE,OAAZ;IAAA,CADJ;IAGN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACAE,WAAW,EAAE,qBAACC,WAAD,EAAiB;MAC7B,IAAMC,QAAQ,mCACVL,WAAW,CAACC,OADF,GAEVG,WAFU,CAAd;;MAIAJ,WAAW,CAACC,OAAZ,GAAsBI,QAAtB,CAL6B,CAM7B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MACA,IAAID,WAAW,CAACR,KAAhB,EAAuB;QACtB;QACA;QACA;QACAG,KAAK,CAACE,OAAN,GAAgBI,QAAhB;MACA,CALD,MAKO;QACNP,eAAe,CAACO,QAAD,CAAf;MACA;IACD;EAzDK,CAAP;AA2DA"}
@@ -0,0 +1,19 @@
1
+ import px from '../utility/px.js';
2
+ export default function useStyle(_ref) {
3
+ var tbody = _ref.tbody,
4
+ virtualScroller = _ref.virtualScroller;
5
+
6
+ if (tbody) {
7
+ return;
8
+ }
9
+
10
+ var _virtualScroller$getS = virtualScroller.getState(),
11
+ beforeItemsHeight = _virtualScroller$getS.beforeItemsHeight,
12
+ afterItemsHeight = _virtualScroller$getS.afterItemsHeight;
13
+
14
+ return {
15
+ paddingTop: px(beforeItemsHeight),
16
+ paddingBottom: px(afterItemsHeight)
17
+ };
18
+ }
19
+ //# sourceMappingURL=useStyle.js.map