virtual-scroller 1.7.9 → 1.9.0

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 (283) hide show
  1. package/.gitlab-ci.yml +1 -1
  2. package/CHANGELOG.md +71 -1
  3. package/README.md +434 -151
  4. package/bundle/index-bypass.html +1 -1
  5. package/bundle/index-dom.html +1 -1
  6. package/bundle/index-grid.html +1 -2
  7. package/bundle/index-scrollableContainer.html +1 -1
  8. package/bundle/index-tbody-scrollableContainer.html +2 -0
  9. package/bundle/index-tbody.html +2 -0
  10. package/bundle/virtual-scroller-dom.js +1 -1
  11. package/bundle/virtual-scroller-dom.js.map +1 -1
  12. package/bundle/virtual-scroller-react.js +1 -1
  13. package/bundle/virtual-scroller-react.js.map +1 -1
  14. package/bundle/virtual-scroller.js +1 -1
  15. package/bundle/virtual-scroller.js.map +1 -1
  16. package/commonjs/BeforeResize.js +315 -0
  17. package/commonjs/BeforeResize.js.map +1 -0
  18. package/commonjs/DOM/Engine.js +46 -0
  19. package/commonjs/DOM/Engine.js.map +1 -0
  20. package/commonjs/DOM/ItemsContainer.js +78 -0
  21. package/commonjs/DOM/ItemsContainer.js.map +1 -0
  22. package/commonjs/DOM/{WaitForStylesToLoad.js → ListTopOffsetWatcher.js} +71 -44
  23. package/commonjs/DOM/ListTopOffsetWatcher.js.map +1 -0
  24. package/commonjs/DOM/ScrollableContainer.js +69 -101
  25. package/commonjs/DOM/ScrollableContainer.js.map +1 -1
  26. package/commonjs/DOM/VirtualScroller.js +37 -29
  27. package/commonjs/DOM/VirtualScroller.js.map +1 -1
  28. package/commonjs/DOM/tbody.js +17 -11
  29. package/commonjs/DOM/tbody.js.map +1 -1
  30. package/commonjs/ItemHeights.js +33 -34
  31. package/commonjs/ItemHeights.js.map +1 -1
  32. package/commonjs/Layout.js +591 -216
  33. package/commonjs/Layout.js.map +1 -1
  34. package/commonjs/Layout.test.js +196 -0
  35. package/commonjs/Layout.test.js.map +1 -0
  36. package/commonjs/ListHeightMeasurement.js +124 -0
  37. package/commonjs/ListHeightMeasurement.js.map +1 -0
  38. package/commonjs/Resize.js +50 -39
  39. package/commonjs/Resize.js.map +1 -1
  40. package/commonjs/Scroll.js +139 -95
  41. package/commonjs/Scroll.js.map +1 -1
  42. package/commonjs/VirtualScroller.columns.js +43 -0
  43. package/commonjs/VirtualScroller.columns.js.map +1 -0
  44. package/commonjs/VirtualScroller.constructor.js +408 -0
  45. package/commonjs/VirtualScroller.constructor.js.map +1 -0
  46. package/commonjs/VirtualScroller.items.js +305 -0
  47. package/commonjs/VirtualScroller.items.js.map +1 -0
  48. package/commonjs/VirtualScroller.js +160 -1021
  49. package/commonjs/VirtualScroller.js.map +1 -1
  50. package/commonjs/VirtualScroller.layout.js +562 -0
  51. package/commonjs/VirtualScroller.layout.js.map +1 -0
  52. package/commonjs/VirtualScroller.onRender.js +357 -0
  53. package/commonjs/VirtualScroller.onRender.js.map +1 -0
  54. package/commonjs/VirtualScroller.resize.js +186 -0
  55. package/commonjs/VirtualScroller.resize.js.map +1 -0
  56. package/commonjs/VirtualScroller.state.js +301 -0
  57. package/commonjs/VirtualScroller.state.js.map +1 -0
  58. package/commonjs/VirtualScroller.verticalSpacing.js +65 -0
  59. package/commonjs/VirtualScroller.verticalSpacing.js.map +1 -0
  60. package/commonjs/getItemCoordinates.js.map +1 -1
  61. package/commonjs/getItemsDiff.js.map +1 -1
  62. package/commonjs/getVerticalSpacing.js +8 -8
  63. package/commonjs/getVerticalSpacing.js.map +1 -1
  64. package/commonjs/package.json +5 -0
  65. package/commonjs/react/VirtualScroller.js +182 -628
  66. package/commonjs/react/VirtualScroller.js.map +1 -1
  67. package/commonjs/react/useClassName.js +26 -0
  68. package/commonjs/react/useClassName.js.map +1 -0
  69. package/commonjs/react/useHandleItemsChange.js +116 -0
  70. package/commonjs/react/useHandleItemsChange.js.map +1 -0
  71. package/commonjs/react/useInstanceMethods.js +37 -0
  72. package/commonjs/react/useInstanceMethods.js.map +1 -0
  73. package/commonjs/react/useItemKeys.js +60 -0
  74. package/commonjs/react/useItemKeys.js.map +1 -0
  75. package/commonjs/react/useOnItemHeightChange.js +32 -0
  76. package/commonjs/react/useOnItemHeightChange.js.map +1 -0
  77. package/commonjs/react/useOnItemStateChange.js +32 -0
  78. package/commonjs/react/useOnItemStateChange.js.map +1 -0
  79. package/commonjs/react/useState.js +140 -0
  80. package/commonjs/react/useState.js.map +1 -0
  81. package/commonjs/react/useStyle.js +29 -0
  82. package/commonjs/react/useStyle.js.map +1 -0
  83. package/commonjs/react/useVirtualScroller.js +62 -0
  84. package/commonjs/react/useVirtualScroller.js.map +1 -0
  85. package/commonjs/react/useVirtualScrollerStartStop.js +20 -0
  86. package/commonjs/react/useVirtualScrollerStartStop.js.map +1 -0
  87. package/commonjs/test/Engine.js +23 -0
  88. package/commonjs/test/Engine.js.map +1 -0
  89. package/commonjs/test/ItemsContainer.js +127 -0
  90. package/commonjs/test/ItemsContainer.js.map +1 -0
  91. package/commonjs/test/ScrollableContainer.js +130 -0
  92. package/commonjs/test/ScrollableContainer.js.map +1 -0
  93. package/commonjs/test/VirtualScroller.js +281 -0
  94. package/commonjs/test/VirtualScroller.js.map +1 -0
  95. package/commonjs/utility/debounce.js +28 -6
  96. package/commonjs/utility/debounce.js.map +1 -1
  97. package/commonjs/utility/debug.js +51 -12
  98. package/commonjs/utility/debug.js.map +1 -1
  99. package/commonjs/utility/getStateSnapshot.js +50 -0
  100. package/commonjs/utility/getStateSnapshot.js.map +1 -0
  101. package/commonjs/utility/px.js +1 -1
  102. package/commonjs/utility/px.js.map +1 -1
  103. package/commonjs/utility/px.test.js +14 -0
  104. package/commonjs/utility/px.test.js.map +1 -0
  105. package/commonjs/utility/shallowEqual.js +1 -1
  106. package/commonjs/utility/shallowEqual.js.map +1 -1
  107. package/commonjs/utility/throttle.js.map +1 -1
  108. package/dom/index.cjs +4 -0
  109. package/dom/index.cjs.js +9 -0
  110. package/dom/index.d.ts +25 -0
  111. package/dom/index.js +1 -1
  112. package/dom/package.json +10 -4
  113. package/index.cjs +4 -0
  114. package/index.cjs.js +9 -0
  115. package/index.d.ts +99 -0
  116. package/index.js +1 -1
  117. package/modules/BeforeResize.js +305 -0
  118. package/modules/BeforeResize.js.map +1 -0
  119. package/modules/DOM/Engine.js +27 -0
  120. package/modules/DOM/Engine.js.map +1 -0
  121. package/modules/DOM/ItemsContainer.js +71 -0
  122. package/modules/DOM/ItemsContainer.js.map +1 -0
  123. package/modules/DOM/{WaitForStylesToLoad.js → ListTopOffsetWatcher.js} +72 -44
  124. package/modules/DOM/ListTopOffsetWatcher.js.map +1 -0
  125. package/modules/DOM/ScrollableContainer.js +68 -100
  126. package/modules/DOM/ScrollableContainer.js.map +1 -1
  127. package/modules/DOM/VirtualScroller.js +32 -28
  128. package/modules/DOM/VirtualScroller.js.map +1 -1
  129. package/modules/DOM/tbody.js +11 -9
  130. package/modules/DOM/tbody.js.map +1 -1
  131. package/modules/ItemHeights.js +28 -33
  132. package/modules/ItemHeights.js.map +1 -1
  133. package/modules/Layout.js +585 -214
  134. package/modules/Layout.js.map +1 -1
  135. package/modules/Layout.test.js +190 -0
  136. package/modules/Layout.test.js.map +1 -0
  137. package/modules/ListHeightMeasurement.js +117 -0
  138. package/modules/ListHeightMeasurement.js.map +1 -0
  139. package/modules/Resize.js +50 -39
  140. package/modules/Resize.js.map +1 -1
  141. package/modules/Scroll.js +139 -94
  142. package/modules/Scroll.js.map +1 -1
  143. package/modules/VirtualScroller.columns.js +36 -0
  144. package/modules/VirtualScroller.columns.js.map +1 -0
  145. package/modules/VirtualScroller.constructor.js +371 -0
  146. package/modules/VirtualScroller.constructor.js.map +1 -0
  147. package/modules/VirtualScroller.items.js +288 -0
  148. package/modules/VirtualScroller.items.js.map +1 -0
  149. package/modules/VirtualScroller.js +159 -1014
  150. package/modules/VirtualScroller.js.map +1 -1
  151. package/modules/VirtualScroller.layout.js +549 -0
  152. package/modules/VirtualScroller.layout.js.map +1 -0
  153. package/modules/VirtualScroller.onRender.js +337 -0
  154. package/modules/VirtualScroller.onRender.js.map +1 -0
  155. package/modules/VirtualScroller.resize.js +176 -0
  156. package/modules/VirtualScroller.resize.js.map +1 -0
  157. package/modules/VirtualScroller.state.js +283 -0
  158. package/modules/VirtualScroller.state.js.map +1 -0
  159. package/modules/VirtualScroller.verticalSpacing.js +54 -0
  160. package/modules/VirtualScroller.verticalSpacing.js.map +1 -0
  161. package/modules/getItemCoordinates.js.map +1 -1
  162. package/modules/getItemsDiff.js.map +1 -1
  163. package/modules/getVerticalSpacing.js +8 -8
  164. package/modules/getVerticalSpacing.js.map +1 -1
  165. package/modules/react/VirtualScroller.js +179 -634
  166. package/modules/react/VirtualScroller.js.map +1 -1
  167. package/modules/react/useClassName.js +18 -0
  168. package/modules/react/useClassName.js.map +1 -0
  169. package/modules/react/useHandleItemsChange.js +108 -0
  170. package/modules/react/useHandleItemsChange.js.map +1 -0
  171. package/modules/react/useInstanceMethods.js +28 -0
  172. package/modules/react/useInstanceMethods.js.map +1 -0
  173. package/modules/react/useItemKeys.js +52 -0
  174. package/modules/react/useItemKeys.js.map +1 -0
  175. package/modules/react/useOnItemHeightChange.js +24 -0
  176. package/modules/react/useOnItemHeightChange.js.map +1 -0
  177. package/modules/react/useOnItemStateChange.js +24 -0
  178. package/modules/react/useOnItemStateChange.js.map +1 -0
  179. package/modules/react/useState.js +132 -0
  180. package/modules/react/useState.js.map +1 -0
  181. package/modules/react/useStyle.js +19 -0
  182. package/modules/react/useStyle.js.map +1 -0
  183. package/modules/react/useVirtualScroller.js +51 -0
  184. package/modules/react/useVirtualScroller.js.map +1 -0
  185. package/modules/react/useVirtualScrollerStartStop.js +12 -0
  186. package/modules/react/useVirtualScrollerStartStop.js.map +1 -0
  187. package/modules/test/Engine.js +11 -0
  188. package/modules/test/Engine.js.map +1 -0
  189. package/modules/test/ItemsContainer.js +120 -0
  190. package/modules/test/ItemsContainer.js.map +1 -0
  191. package/modules/test/ScrollableContainer.js +123 -0
  192. package/modules/test/ScrollableContainer.js.map +1 -0
  193. package/modules/test/VirtualScroller.js +270 -0
  194. package/modules/test/VirtualScroller.js.map +1 -0
  195. package/modules/utility/debounce.js +28 -6
  196. package/modules/utility/debounce.js.map +1 -1
  197. package/modules/utility/debug.js +47 -10
  198. package/modules/utility/debug.js.map +1 -1
  199. package/modules/utility/getStateSnapshot.js +43 -0
  200. package/modules/utility/getStateSnapshot.js.map +1 -0
  201. package/modules/utility/px.js +1 -1
  202. package/modules/utility/px.js.map +1 -1
  203. package/modules/utility/px.test.js +9 -0
  204. package/modules/utility/px.test.js.map +1 -0
  205. package/modules/utility/shallowEqual.js +1 -1
  206. package/modules/utility/shallowEqual.js.map +1 -1
  207. package/modules/utility/throttle.js.map +1 -1
  208. package/package.json +54 -29
  209. package/react/index.cjs +4 -0
  210. package/react/index.cjs.js +9 -0
  211. package/react/index.d.ts +28 -0
  212. package/react/index.js +1 -1
  213. package/react/package.json +10 -4
  214. package/rollup.config.mjs +62 -0
  215. package/runnable/create-commonjs-package-json.js +11 -0
  216. package/source/BeforeResize.js +312 -0
  217. package/source/DOM/Engine.js +30 -0
  218. package/source/DOM/ItemsContainer.js +48 -0
  219. package/source/DOM/{WaitForStylesToLoad.js → ListTopOffsetWatcher.js} +61 -30
  220. package/source/DOM/ScrollableContainer.js +51 -73
  221. package/source/DOM/VirtualScroller.js +33 -18
  222. package/source/DOM/tbody.js +30 -21
  223. package/source/ItemHeights.js +27 -27
  224. package/source/Layout.js +629 -252
  225. package/source/Layout.test.js +176 -0
  226. package/source/ListHeightMeasurement.js +95 -0
  227. package/source/Resize.js +56 -32
  228. package/source/Scroll.js +135 -82
  229. package/source/VirtualScroller.columns.js +26 -0
  230. package/source/VirtualScroller.constructor.js +336 -0
  231. package/source/VirtualScroller.items.js +302 -0
  232. package/source/VirtualScroller.js +162 -936
  233. package/source/VirtualScroller.layout.js +539 -0
  234. package/source/VirtualScroller.onRender.js +345 -0
  235. package/source/VirtualScroller.resize.js +189 -0
  236. package/source/VirtualScroller.state.js +284 -0
  237. package/source/VirtualScroller.verticalSpacing.js +51 -0
  238. package/source/getVerticalSpacing.js +7 -7
  239. package/source/react/VirtualScroller.js +243 -603
  240. package/source/react/useClassName.js +14 -0
  241. package/source/react/useHandleItemsChange.js +115 -0
  242. package/source/react/useInstanceMethods.js +25 -0
  243. package/source/react/useItemKeys.js +59 -0
  244. package/source/react/useOnItemHeightChange.js +28 -0
  245. package/source/react/useOnItemStateChange.js +28 -0
  246. package/source/react/useState.js +114 -0
  247. package/source/react/useStyle.js +20 -0
  248. package/source/react/useVirtualScroller.js +59 -0
  249. package/source/react/useVirtualScrollerStartStop.js +12 -0
  250. package/source/test/Engine.js +11 -0
  251. package/source/test/ItemsContainer.js +87 -0
  252. package/source/test/ScrollableContainer.js +88 -0
  253. package/source/test/VirtualScroller.js +232 -0
  254. package/source/utility/debounce.js +22 -5
  255. package/source/utility/debug.js +34 -3
  256. package/source/utility/getStateSnapshot.js +36 -0
  257. package/source/utility/px.js +1 -1
  258. package/source/utility/px.test.js +9 -0
  259. package/website/index-bypass.html +195 -0
  260. package/website/index-grid.html +0 -1
  261. package/website/index-scrollableContainer.html +208 -0
  262. package/website/index-tbody-scrollableContainer.html +68 -0
  263. package/website/index-tbody.html +55 -0
  264. package/commonjs/DOM/RenderingEngine.js +0 -33
  265. package/commonjs/DOM/RenderingEngine.js.map +0 -1
  266. package/commonjs/DOM/Screen.js +0 -87
  267. package/commonjs/DOM/Screen.js.map +0 -1
  268. package/commonjs/DOM/WaitForStylesToLoad.js.map +0 -1
  269. package/commonjs/RestoreScroll.js +0 -118
  270. package/commonjs/RestoreScroll.js.map +0 -1
  271. package/dom/index.commonjs.js +0 -4
  272. package/index.commonjs.js +0 -4
  273. package/modules/DOM/RenderingEngine.js +0 -19
  274. package/modules/DOM/RenderingEngine.js.map +0 -1
  275. package/modules/DOM/Screen.js +0 -80
  276. package/modules/DOM/Screen.js.map +0 -1
  277. package/modules/DOM/WaitForStylesToLoad.js.map +0 -1
  278. package/modules/RestoreScroll.js +0 -111
  279. package/modules/RestoreScroll.js.map +0 -1
  280. package/react/index.commonjs.js +0 -4
  281. package/source/DOM/RenderingEngine.js +0 -22
  282. package/source/DOM/Screen.js +0 -51
  283. package/source/RestoreScroll.js +0 -86
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):(e=e||self).VirtualScroller=t(e.React,e.PropTypes)}(this,function(e,t){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e,t=t&&t.hasOwnProperty("default")?t.default:t;var n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};for(var i,r=(function(e){(function(){var t,n,i,r,o,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(e.exports=function(){return(t()-o)/1e6},n=process.hrtime,r=(t=function(){var e;return 1e9*(e=n())[0]+e[1]})(),s=1e9*process.uptime(),o=r-s):Date.now?(e.exports=function(){return Date.now()-i},i=Date.now()):(e.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(n)}(i={exports:{}},i.exports),i.exports),o="undefined"==typeof window?n:window,s=["moz","webkit"],a="AnimationFrame",l=o["request"+a],u=o["cancel"+a]||o["cancelRequest"+a],h=0;!l&&h<s.length;h++)l=o[s[h]+"Request"+a],u=o[s[h]+"Cancel"+a]||o[s[h]+"CancelRequest"+a];if(!l||!u){var c=0,m=0,f=[];l=function(e){if(0===f.length){var t=r(),n=Math.max(0,1e3/60-(t-c));c=n+t,setTimeout(function(){var e=f.slice(0);f.length=0;for(var t=0;t<e.length;t++)if(!e[t].cancelled)try{e[t].callback(c)}catch(e){setTimeout(function(){throw e},0)}},Math.round(n))}return f.push({handle:++m,callback:e,cancelled:!1}),m},u=function(e){for(var t=0;t<f.length;t++)f[t].handle===e&&(f[t].cancelled=!0)}}var d=function(e){return l.call(o,e)};d.cancel=function(){u.apply(o,arguments)},d.polyfill=function(e){e||(e=o),e.requestAnimationFrame=l,e.cancelAnimationFrame=u};var g=d.cancel;function p(e,t){var n=Date.now(),i=d(function r(){Date.now()-n>=t?e():i=d(r)});return{clear:function(){return g(i)}}}function I(e){e&&e.clear()}function y(e){return e.toFixed(2)+"px"}var v="It looks like you're using Internet Explorer which doesn't support CSS variables required for a <tbody/> container. VirtualScroller has been switched into \"bypass\" mode (render all items). See: https://gitlab.com/catamphetamine/virtual-scroller/-/issues/1";function S(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var b=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n,i;return t=e,(n=[{key:"getChildElementTopOffset",value:function(e,t){return e.childNodes[t].getBoundingClientRect().top}},{key:"getChildElementHeight",value:function(e,t){return this.getElementHeight(e.childNodes[t])}},{key:"getChildElementsCount",value:function(e){return e.childNodes.length}},{key:"clearElement",value:function(e){for(;e.firstChild;)e.removeChild(e.firstChild)}},{key:"getElementHeight",value:function(e){return e.getBoundingClientRect().height}}])&&S(t.prototype,n),i&&S(t,i),e}();function w(e){return(w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function C(e,t){return!t||"object"!==w(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function O(e){return(O=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function T(e,t){return(T=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function H(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function x(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function R(e,t,n){return t&&x(e.prototype,t),n&&x(e,n),e}var P=function(){function e(t){H(this,e),this.element=t}return R(e,[{key:"getScrollY",value:function(){return this.element.scrollTop}},{key:"scrollToY",value:function(e){this.element.scrollTo?this.element.scrollTo(0,e):this.element.scrollTop=e}},{key:"getWidth",value:function(){return this.element.offsetWidth}},{key:"getHeight",value:function(){return this.element.offsetHeight}},{key:"getContentHeight",value:function(){return this.element.scrollHeight}},{key:"getTopOffset",value:function(e){var t=this.element.getBoundingClientRect().top,n=this.element.clientTop;return e.getBoundingClientRect().top-t+this.getScrollY()-n}},{key:"addScrollListener",value:function(e){var t=this;return this.element.addEventListener("scroll",e),function(){return t.element.removeEventListener("scroll",e)}}},{key:"onResize",value:function(e,t){var n,i=this,r=t.container;if("undefined"!=typeof ResizeObserver){var o=new ResizeObserver(function(t){t[0];e()});o.observe(this.element),n=function(){return o.unobserve(i.element)}}var s=k(e,{container:r});return function(){n&&n(),s()}}}]),e}(),L=function(e){function t(){return H(this,t),C(this,O(t).call(this,window))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&T(e,t)}(t,P),R(t,[{key:"getScrollY",value:function(){return window.pageYOffset}},{key:"getWidth",value:function(){return window.innerWidth}},{key:"getHeight",value:function(){return window.innerHeight}},{key:"getContentHeight",value:function(){return document.documentElement.scrollHeight}},{key:"getTopOffset",value:function(e){var t=document.clientTop||document.body.clientTop||0;return e.getBoundingClientRect().top+this.getScrollY()-t}},{key:"onResize",value:function(e,t){return k(e,{container:t.container})}}]),t}();function k(e,t){var n=t.container,i=function(){document.fullscreenElement&&!document.fullscreenElement.contains(n)||e()};return window.addEventListener("resize",i),function(){return window.removeEventListener("resize",i)}}var A={name:"DOM",createScreen:function(){return new b},createScrollableContainer:function(e){return e?new P(e):"undefined"!=typeof window?new L:void 0}};function M(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function E(){if(_()){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];(e=console).log.apply(e,M(["[virtual-scroller]"].concat(n)))}}function B(){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];(e=console).warn.apply(e,M(["[virtual-scroller]"].concat(n)))}function V(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i;"undefined"!=typeof window?(E.apply(this,["ERROR"].concat(t)),setTimeout(function(){throw new Error(["[virtual-scroller]"].concat(t).join(" "))},0)):(i=console).error.apply(i,M(["[virtual-scroller]"].concat(t)))}function _(){if("undefined"!=typeof window)return!0===window.VirtualScrollerDebug||"debug"===window.VirtualScrollerDebug}function U(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var j=function(){function e(t){var n=t.bypass,i=t.estimatedItemHeight,r=t.measureItemsBatchSize,o=t.getVerticalSpacing,s=t.getColumnsCount,a=t.getItemHeight,l=t.getAverageItemHeight;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.bypass=n,this.estimatedItemHeight=i,this.measureItemsBatchSize=r,this.getVerticalSpacing=o,this.getColumnsCount=s,this.getItemHeight=a,this.getAverageItemHeight=l}var t,n,i;return t=e,(n=[{key:"getInitialLayoutValues",value:function(e){var t,n,i=e.bypass,r=e.itemsCount,o=e.visibleAreaHeightIncludingMargins,s=o?this.getEstimatedRowsCountForHeight(o):1;return r>0&&(t=0,n=this.getLastShownItemIndex(t,r,s,i)),{beforeItemsHeight:0,afterItemsHeight:0,firstShownItemIndex:t,lastShownItemIndex:n}}},{key:"getLastShownItemIndex",value:function(e,t,n,i){return this.bypass||i?t-1:Math.min(e+(n*this.getColumnsCount()-1),t-1)}},{key:"getEstimatedRowsCountForHeight",value:function(e){var t=this.getEstimatedItemHeight();return t?Math.ceil((e+this.getVerticalSpacing())/(t+this.getVerticalSpacing())):1}},{key:"getEstimatedItemHeight",value:function(){return this.getAverageItemHeight()||this.estimatedItemHeight||0}},{key:"updateLayoutForItemsDiff",value:function(e,t,n){var i=t.prependedItemsCount,r=t.appendedItemsCount,o=n.itemsCount;e.firstShownItemIndex+=i,e.lastShownItemIndex+=i;var s=this.getColumnsCount();if(i%s==0){var a=i/s,l=Math.ceil(r/s),u=this.getAverageItemHeight(),h=this.getVerticalSpacing();e.beforeItemsHeight+=a*(u+h),e.afterItemsHeight+=l*(h+u)}else e.beforeItemsHeight=this.getBeforeItemsHeight(e.firstShownItemIndex,e.lastShownItemIndex),e.afterItemsHeight=this.getAfterItemsHeight(e.firstShownItemIndex,e.lastShownItemIndex,o)}},{key:"_getVisibleItemIndexes",value:function(e,t,n,i){for(var r,o,s=this.getColumnsCount(),a=0,l=Math.ceil(i/s),u=0;u<l;){for(var h=i>(u+1)*s?this.getVerticalSpacing():0,c=0,m=0,f=void 0;m<s&&(f=u*s+m)<i;){var d=this.getItemHeight(f);if(void 0===d){E("Item index ".concat(f,' lies within the visible area or its "margins", but its height hasn\'t been measured yet. Mark the item as "shown", render the list, measure the item\'s height and redo the layout.')),void 0===r&&(r=u*s);var g=t-(n+a);return{firstNonMeasuredItemIndex:f,firstShownItemIndex:r,lastShownItemIndex:o=Math.min((u+this.getEstimatedRowsCountForHeight(g))*s-1,i-1)}}if(c=Math.max(c,d),void 0===r&&n+a+c>e&&(E("First shown row index",u),r=u*s),n+a+c+h>t)return E("Last shown row index",u),void 0!==r&&(o=Math.min((u+1)*s-1,i-1)),{firstShownItemIndex:r,lastShownItemIndex:o};m++}a+=c,a+=h,u++}return void 0!==r&&void 0===o&&E("Last item index (is fully visible)",o=i-1),{firstShownItemIndex:r,lastShownItemIndex:o}}},{key:"getVisibleItemIndexes",value:function(e,t,n,i){var r=this._getVisibleItemIndexes(e,t,n,i),o=r.firstNonMeasuredItemIndex,s=r.firstShownItemIndex,a=r.lastShownItemIndex,l=void 0!==o;if(l&&this.measureItemsBatchSize){var u=o+this.measureItemsBatchSize-1,h=this.getColumnsCount();a=Math.min(a,Math.ceil(u/h)*h-1)}return{firstShownItemIndex:s,lastShownItemIndex:a,redoLayoutAfterMeasuringItemHeights:l}}},{key:"getNonVisibleListShownItemIndexes",value:function(){return{firstShownItemIndex:0,lastShownItemIndex:0,redoLayoutAfterMeasuringItemHeights:void 0===this.getItemHeight(0)}}},{key:"getItemIndexes",value:function(e,t,n,i,r){if(n+i>e&&n<t){var o=this.getVisibleItemIndexes(e,t,n,r);if(void 0!==o.firstShownItemIndex)return o;E("The entire list is off-screen. No items are visible.")}else E("The entire list is off-screen. No items are visible.")}},{key:"getBeforeItemsHeight",value:function(e,t){for(var n=this.getColumnsCount(),i=Math.floor(e/n),r=0,o=0;o<i;){for(var s=0,a=0;a<n;)s=Math.max(s,this.getItemHeight(o*n+a)||this.getAverageItemHeight()),a++;r+=s,r+=this.getVerticalSpacing(),o++}return r}},{key:"getAfterItemsHeight",value:function(e,t,n){for(var i=this.getColumnsCount(),r=Math.ceil(n/i),o=0,s=Math.floor(t/i)+1;s<r;){for(var a=0,l=0,u=void 0;l<i&&(u=s*i+l)<n;)a=Math.max(a,this.getItemHeight(u)||this.getAverageItemHeight()),l++;o+=this.getVerticalSpacing(),o+=a,s++}return o}},{key:"getShownItemIndexes",value:function(e){var t=e.listHeight,n=e.itemsCount,i=e.visibleAreaIncludingMargins,r=e.listTopOffsetInsideScrollableContainer;return this.bypass?{firstShownItemIndex:0,lastShownItemIndex:n-1}:this.getItemIndexes(i.top,i.bottom,r,t,n)||this.getNonVisibleListShownItemIndexes()}},{key:"showItemsFromTheStart",value:function(e){e.firstShownItemIndex=0,e.beforeItemsHeight=0}}])&&U(t.prototype,n),i&&U(t,i),e}(),N={SCROLL:"scroll",STOPPED_SCROLLING:"stopped scrolling",MANUAL:"manual",MOUNT:"mount",ITEM_HEIGHT_NOT_MEASURED:"some item height wasn't measured",RESIZE:"resize",ITEM_HEIGHT_CHANGED:"item height changed",ITEMS_CHANGED:"items changed",TOP_OFFSET_CHANGED:"list top offset changed"};function z(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var D=function(){function e(t){var n=t.updateLayout,i=t.getListTopOffsetInsideScrollableContainer;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.updateLayout=n,this.getListTopOffsetInsideScrollableContainer=i}var t,n,i;return t=e,(n=[{key:"onGotListTopOffset",value:function(e){void 0===this.listTopOffsetInsideScrollableContainer&&this.start(),this.listTopOffsetInsideScrollableContainer=e}},{key:"start",value:function(){this.isRendered=!0,this.watchListTopOffset()}},{key:"stop",value:function(){this.isRendered=!1,I(this.watchListTopOffsetTimer)}},{key:"watchListTopOffset",value:function(){var e=this,t=Date.now();!function n(){e.isRendered&&(void 0!==e.listTopOffsetInsideScrollableContainer&&e.getListTopOffsetInsideScrollableContainer()!==e.listTopOffsetInsideScrollableContainer&&e.updateLayout({reason:N.TOP_OFFSET_CHANGED}),Date.now()-t<Y&&(e.watchListTopOffsetTimer=p(n,F)))}()}}])&&z(t.prototype,n),i&&z(t,i),e}(),F=500,Y=3e3;function q(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var W=function(){function e(t){var n,i,r,o,s,a,l=this,u=t.bypass,h=t.scrollableContainer,c=t.getContainerElement,m=t.updateLayout,f=t.resetStateAndLayout;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),o=function(){if(l.isRendered){var e=l.scrollableContainerWidth,t=l.scrollableContainerHeight;if(l.scrollableContainerWidth=l.scrollableContainer.getWidth(),l.scrollableContainerHeight=l.scrollableContainer.getHeight(),l.scrollableContainerWidth===e){if(l.scrollableContainerHeight===t)return;l.updateLayout({reason:N.RESIZE})}else l.resetStateAndLayout()}},s=G,r=function(){for(var e=this,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];I(a),a=p(function(){return o.apply(e,n)},s)},(i="onResize")in(n=this)?Object.defineProperty(n,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[i]=r,this.bypass=u,this.scrollableContainer=h,this.getContainerElement=c,this.updateLayout=m,this.resetStateAndLayout=f}var t,n,i;return t=e,(n=[{key:"listen",value:function(){this.bypass||(this.isRendered=!0,this.scrollableContainerWidth=this.scrollableContainer.getWidth(),this.scrollableContainerHeight=this.scrollableContainer.getHeight(),this.scrollableContainerUnlistenResize=this.scrollableContainer.onResize(this.onResize,{container:this.getContainerElement()}))}},{key:"stop",value:function(){this.isRendered=!1,this.scrollableContainerUnlistenResize&&this.scrollableContainerUnlistenResize()}}])&&q(t.prototype,n),i&&q(t,i),e}(),G=250;function K(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function J(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Z=function(){function e(t){var n=this,i=t.bypass,r=t.scrollableContainer,o=t.updateLayout,s=t.initialScrollPosition,a=t.onScrollPositionChange,l=t.isImmediateLayoutScheduled,u=t.hasNonRenderedItemsAtTheTop,h=t.hasNonRenderedItemsAtTheBottom,c=t.getLatestLayoutVisibleAreaIncludingMargins,m=t.preserveScrollPositionOfTheBottomOfTheListOnMount;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),J(this,"updateScrollPosition",function(){n.onScrollPositionChange(n.getScrollY())}),J(this,"onScroll",function(){n.cancelOnUserStopsScrollingTimer();var e=n.getLatestLayoutVisibleAreaIncludingMargins()&&(n.getScrollY()<n.getLatestLayoutVisibleAreaIncludingMargins().top&&n.hasNonRenderedItemsAtTheTop()||n.getScrollY()+n.scrollableContainer.getHeight()>n.getLatestLayoutVisibleAreaIncludingMargins().bottom&&n.hasNonRenderedItemsAtTheBottom());if(E(e?"The user has scrolled far enough: force re-layout":"The user hasn't scrolled too much: delay re-layout"),e)n.updateLayout({reason:N.SCROLL});else{if(n.isImmediateLayoutScheduled())return;n.onUserStopsScrollingTimer=p(function(){n.onUserStopsScrollingTimer=void 0,n.updateLayout({reason:N.STOPPED_SCROLLING})},Q)}}),this.bypass=i,this.scrollableContainer=r,this.updateLayout=o,this.initialScrollPosition=s,this.onScrollPositionChange=a,this.isImmediateLayoutScheduled=l,this.hasNonRenderedItemsAtTheTop=u,this.hasNonRenderedItemsAtTheBottom=h,this.getLatestLayoutVisibleAreaIncludingMargins=c,m&&r&&(this.preserveScrollPositionOfTheBottomOfTheListOnMount={scrollableContainerContentHeight:r.getContentHeight()})}var t,n,i;return t=e,(n=[{key:"listen",value:function(){void 0!==this.initialScrollPosition&&this.scrollToY(this.initialScrollPosition),this.onScrollPositionChange&&(this.updateScrollPosition(),this.removeScrollPositionListener=this.scrollableContainer.addScrollListener(this.updateScrollPosition)),this.bypass||(this.removeScrollListener=this.scrollableContainer.addScrollListener(this.onScroll)),this.preserveScrollPositionOfTheBottomOfTheListOnMount&&this.scrollToY(this.getScrollY()+(this.scrollableContainer.getContentHeight()-this.preserveScrollPositionOfTheBottomOfTheListOnMount.scrollableContainerContentHeight))}},{key:"stop",value:function(){this.removeScrollPositionListener&&this.removeScrollPositionListener(),this.removeScrollListener&&this.removeScrollListener(),this.cancelOnUserStopsScrollingTimer()}},{key:"scrollToY",value:function(e){this.scrollableContainer.scrollToY(e)}},{key:"scrollByY",value:function(e){this.scrollToY(this.getScrollY()+e)}},{key:"getScrollY",value:function(){return this.scrollableContainer.getScrollY()}},{key:"cancelOnUserStopsScrollingTimer",value:function(){this.onUserStopsScrollingTimer&&(I(this.onUserStopsScrollingTimer),this.onUserStopsScrollingTimer=void 0)}},{key:"onLayout",value:function(){this.cancelOnUserStopsScrollingTimer()}},{key:"getVisibleAreaBounds",value:function(){var e=this.getScrollY();return{top:e,bottom:e+this.scrollableContainer.getHeight()}}}])&&K(t.prototype,n),i&&K(t,i),e}(),Q=100;function X(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var $=function(){function e(t){var n=t.screen,i=t.getContainerElement,r=t.scrollBy;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.screen=n,this.getContainerElement=i,this.scrollBy=r}var t,n,i;return t=e,(n=[{key:"captureScroll",value:function(e){var t=e.previousItems,n=e.newItems,i=e.prependedItemsCount;if(0!==t.length&&0!==i){var r=this.getContainerElement(),o=this.screen.getChildElementTopOffset(r,0);this.restoreScrollAfterRenderValues&&this.restoreScrollAfterRenderValues.previousItems===t&&this.restoreScrollAfterRenderValues.newItems===n||(this.restoreScrollAfterRenderValues={previousItems:t,newItems:n,index:i,visibleAreaTop:o})}}},{key:"getAnchorItemIndex",value:function(){return this.restoreScrollAfterRenderValues.index}},{key:"shouldRestoreScrollAfterRender",value:function(){return void 0!==this.restoreScrollAfterRenderValues}},{key:"getScrollDifference",value:function(){var e=this.restoreScrollAfterRenderValues,t=e.index,n=e.visibleAreaTop;return this.restoreScrollAfterRenderValues=void 0,this.screen.getChildElementTopOffset(this.getContainerElement(),t)-n}}])&&X(t.prototype,n),i&&X(t,i),e}();function ee(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var te=function(){function e(t,n,i,r){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.screen=t,this.getContainerElement=n,this._get=i,this._set=r,this.reset()}var t,n,i;return t=e,(n=[{key:"reset",value:function(){this.measuredItemsHeight=0,this.firstMeasuredItemIndex=void 0,this.lastMeasuredItemIndex=void 0}},{key:"initialize",value:function(e){for(var t=0;t<e.length;){if(void 0===e[t]){if(void 0!==this.firstMeasuredItemIndex){this.lastMeasuredItemIndex=t-1;break}}else void 0===this.firstMeasuredItemIndex&&(this.firstMeasuredItemIndex=t),this.measuredItemsHeight+=e[t];t++}}},{key:"_measureItemHeight",value:function(e,t){var n=this.getContainerElement();if(n){var i=e-t;if(i>=0&&i<this.screen.getChildElementsCount(n))return this.screen.getChildElementHeight(n,i)}}},{key:"measureItemHeights",value:function(e,t){if(void 0!==e){void 0!==this.firstMeasuredItemIndex&&(e>this.lastMeasuredItemIndex+1||t<this.firstMeasuredItemIndex-1)&&(E("Non-measured items gap detected. Reset first and last measured item indexes."),this.reset());for(var n=[],i=this.firstMeasuredItemIndex,r=this.lastMeasuredItemIndex,o=!1,s=e;s<=t;){if(void 0===this._get(s)){n.push(s),E("Item",s,"hasn't been previously measured");var a=this._measureItemHeight(s,e);E("Height",a),this._set(s,a),(void 0===i||s<i)&&(this.measuredItemsHeight+=a,o||(this.firstMeasuredItemIndex=s,o=!0)),(void 0===r||s>r)&&(void 0!==r&&(this.measuredItemsHeight+=a),this.lastMeasuredItemIndex=s)}else{var l=this._get(s),u=this._measureItemHeight(s,e);l!==u&&B("Item",s,"height was",l,"before it was hidden, but, after showing it again, its height is",u,". Perhaps you forgot to persist the item's state by calling `onItemStateChange(i, newState)` when it changed, and that state got lost when the item element was unmounted, which resulted in a different height when the item was shown again, but with the missing state.")}s++}return n}}},{key:"remeasureItemHeight",value:function(e,t){var n=this._get(e),i=this._measureItemHeight(e,t);return this._set(e,i),this.measuredItemsHeight+=i-n,i}},{key:"getAverage",value:function(){return void 0===this.lastMeasuredItemIndex?0:this.measuredItemsHeight/(this.lastMeasuredItemIndex-this.firstMeasuredItemIndex+1)}},{key:"onPrepend",value:function(e){void 0!==this.firstMeasuredItemIndex&&(this.firstMeasuredItemIndex+=e,this.lastMeasuredItemIndex+=e)}}])&&ee(t.prototype,n),i&&ee(t,i),e}();function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var ie=Object.prototype.hasOwnProperty;function re(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function oe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.forEach(function(t){ae(e,t,n[t])})}return e}function se(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function ae(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var le=function(){function e(t,n){var i=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),ae(this,"getListTopOffsetInsideScrollableContainer",function(){var e=i.scrollableContainer.getTopOffset(i.getContainerElement());return i.waitForStylesToLoad.onGotListTopOffset(e),e}),ae(this,"willUpdateState",function(e,t){}),ae(this,"didUpdateState",function(e){var t=i.getState();if(i.onStateChange&&(function(e,t){if(re(e,t))return!0;if("object"!==ne(e)||null===e||"object"!==ne(t)||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var r=0;r<n.length;r++)if(!ie.call(t,n[r])||!re(e[n[r]],t[n[r]]))return!1;return!0}(t,e)||i.onStateChange(t,e)),e&&i.isRendered){E("~ Rendered ~"),i.newItemsPending=void 0,i.layoutResetPending=void 0;var n=i.redoLayoutReason;i.redoLayoutReason=void 0;var r=e.items,o=t.items;if(o!==r){var s=!0,a=i.getItemsDiff(r,o);if(a){var l=a.prependedItemsCount;a.appendedItemsCount;if(l>0&&(i.itemHeights.onPrepend(l),i.restoreScroll.shouldRestoreScrollAfterRender())){s=!1,E("~ Restore Scroll Position ~");var u=i.restoreScroll.getScrollDifference();u?(E("Scroll down by",u),i.scroll.scrollByY(u)):E("Scroll position hasn't changed")}}else i.itemHeights.reset(),i.itemHeights.initialize(i.getState().itemHeights);s&&(n=N.ITEMS_CHANGED)}return t.firstShownItemIndex===e.firstShownItemIndex&&t.lastShownItemIndex===e.lastShownItemIndex&&t.items===e.items||i.onRenderedNewLayout(),n?i.redoLayoutRightAfterRender({reason:n}):void 0}}),ae(this,"updateShownItemIndexes",function(){E("~ Layout results "+(i.bypass?"(bypass) ":"")+"~");var e=i.getVisibleAreaBoundsIncludingMargins();i.latestLayoutVisibleAreaIncludingMargins=e;var t=i.getListTopOffsetInsideScrollableContainer(),n=i.layout.getShownItemIndexes({listHeight:i.screen.getElementHeight(i.getContainerElement()),itemsCount:i.getItemsCount(),visibleAreaIncludingMargins:e,listTopOffsetInsideScrollableContainer:t}),r=n.firstShownItemIndex,o=n.lastShownItemIndex,s=n.redoLayoutAfterMeasuringItemHeights;if(i.restoreScroll.shouldRestoreScrollAfterRender()&&(o<i.restoreScroll.getAnchorItemIndex()&&(o=i.restoreScroll.getAnchorItemIndex()),s=!1),!i.validateWillBeHiddenItemHeightsAreAccurate(r,o))return E("~ Some of the will-be-hidden item heights have changed since they've last been measured. Redo layout. ~"),i.updateShownItemIndexes();var a=i.layout.getBeforeItemsHeight(r,o),l=i.layout.getAfterItemsHeight(r,o,i.getItemsCount());i._getColumnsCount&&E("Columns count",i.getColumnsCount()),E("First shown item index",r),E("Last shown item index",o),E("Before items height",a),E("After items height (actual or estimated)",l),E("Average item height (calculated on previous render)",i.itemHeights.getAverage()),_()&&(E("Item heights",i.getState().itemHeights.slice()),E("Item states",i.getState().itemStates.slice())),s&&(i.redoLayoutReason=N.ITEM_HEIGHT_NOT_MEASURED),i.onBeforeShowItems(i.getState().items,i.getState().itemHeights,r,o),i.setState({firstShownItemIndex:r,lastShownItemIndex:o,beforeItemsHeight:a,afterItemsHeight:l})}),ae(this,"onUpdateShownItemIndexes",function(e){var t=e.reason;0!==i.getItemsCount()&&(i.scroll.onLayout(),i.layoutTimer&&(I(i.layoutTimer),i.layoutTimer=void 0),E("~ Calculate Layout (on ".concat(t,") ~")),i.updateShownItemIndexes())}),ae(this,"updateLayout",function(){return i.onUpdateShownItemIndexes({reason:N.MANUAL})}),ae(this,"layout",function(){return i.updateLayout()});var o=r.getState,s=r.setState,a=r.onStateChange,l=r.customState,u=r.preserveScrollPositionAtBottomOnMount,h=r.preserveScrollPositionOfTheBottomOfTheListOnMount,c=r.initialScrollPosition,m=r.onScrollPositionChange,f=r.measureItemsBatchSize,d=r.getScrollableContainer,g=r.getColumnsCount,p=r.getItemId,y=r.tbody,S=r._useTimeoutInRenderLoop,b=r.bypass,w=r.estimatedItemHeight,C=r.onItemInitialRender,O=r.onItemFirstRender,T=r.scrollableContainer,H=r.state,x=r.renderingEngine;if(E("~ Initialize ~"),H&&(n=H.items),!T&&d&&(T=d()),x||(x=A),this.screen=x.createScreen(),this.scrollableContainer=x.createScrollableContainer(T),y){if("DOM"!==x.name)throw new Error("`tbody` option is only supported for DOM rendering engine");E("~ <tbody/> detected ~"),this.tbody=!0,"undefined"!=typeof window&&window.document.documentMode&&(E("~ <tbody/> not supported ~"),V(v),b=!0)}b&&E('~ "bypass" mode ~'),this.bypass=b,this._useTimeoutInRenderLoop=S,this.isItemEqual=p?function(e,t){return p(e)===p(t)}:function(e,t){return e===t},this.initialItems=n,this.onStateChange=a,this._getColumnsCount=g,C?this.onItemInitialRender=C:O&&(this.onItemInitialRender=function(e){B("`onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.");var t=i.getState().items.indexOf(e);t>=0&&O(t)}),E("Items count",n.length),w&&E("Estimated item height",w),s?(this.getState=o,this.setState=function(e){E("Set state",e),s(e,{willUpdateState:i.willUpdateState,didUpdateState:i.didUpdateState})}):(this.getState=function(){return i.state},this.setState=function(e){E("Set state",e);var t=i.getState(),n=oe({},t,e);i.willUpdateState(n,t),i.state=n,i.didUpdateState(t)}),H&&E("Initial state (passed)",H),this.getContainerElement=t,t()&&this.screen.clearElement(t()),this.itemHeights=new te(this.screen,this.getContainerElement,function(e){return i.getState().itemHeights[e]},function(e,t){return i.getState().itemHeights[e]=t}),H&&this.itemHeights.initialize(H.itemHeights),this.layout=new j({bypass:b,estimatedItemHeight:w,measureItemsBatchSize:void 0===f?50:f,getVerticalSpacing:function(){return i.getVerticalSpacing()},getColumnsCount:function(){return i.getColumnsCount()},getItemHeight:function(e){return i.getState().itemHeights[e]},getAverageItemHeight:function(){return i.itemHeights.getAverage()}}),this.resize=new W({bypass:b,scrollableContainer:this.scrollableContainer,getContainerElement:this.getContainerElement,updateLayout:function(e){var t=e.reason;return i.onUpdateShownItemIndexes({reason:t})},resetStateAndLayout:function(){E("~ Scrollable container size changed, re-measure item heights. ~"),i.redoLayoutReason=N.RESIZE,i.layoutResetPending=!0,E("Reset state"),i.setState(i.getInitialLayoutState(i.newItemsPending||i.getState().items))}}),u&&B("`preserveScrollPositionAtBottomOnMount` option/property has been renamed to `preserveScrollPositionOfTheBottomOfTheListOnMount`"),this.preserveScrollPositionOfTheBottomOfTheListOnMount=h||u,this.scroll=new Z({bypass:this.bypass,scrollableContainer:this.scrollableContainer,updateLayout:function(e){var t=e.reason;return i.onUpdateShownItemIndexes({reason:t})},initialScrollPosition:c,onScrollPositionChange:m,isImmediateLayoutScheduled:function(){return i.layoutTimer},hasNonRenderedItemsAtTheTop:function(){return i.getState().firstShownItemIndex>0},hasNonRenderedItemsAtTheBottom:function(){return i.getState().lastShownItemIndex<i.getItemsCount()-1},getLatestLayoutVisibleAreaIncludingMargins:function(){return i.latestLayoutVisibleAreaIncludingMargins},preserveScrollPositionOfTheBottomOfTheListOnMount:this.preserveScrollPositionOfTheBottomOfTheListOnMount}),this.restoreScroll=new $({screen:this.screen,getContainerElement:this.getContainerElement}),this.waitForStylesToLoad=new D({updateLayout:function(e){var t=e.reason;return i.onUpdateShownItemIndexes({reason:t})},getListTopOffsetInsideScrollableContainer:this.getListTopOffsetInsideScrollableContainer}),this.setState(H||this.getInitialState(l))}var t,n,i;return t=e,(n=[{key:"getInitialState",value:function(e){var t=this.initialItems,n=oe({},e,this.getInitialLayoutState(t),{items:t,itemStates:new Array(t.length)});return E("Initial state (autogenerated)",n),E("First shown item index",n.firstShownItemIndex),E("Last shown item index",n.lastShownItemIndex),n}},{key:"getInitialLayoutValues",value:function(e){var t=e.itemsCount,n=e.bypass;return this.layout.getInitialLayoutValues({bypass:n,itemsCount:t,visibleAreaHeightIncludingMargins:this.scrollableContainer&&2*this.getMargin()+this.scrollableContainer.getHeight()})}},{key:"getInitialLayoutState",value:function(e){var t=e.length,n=this.getInitialLayoutValues({itemsCount:t,bypass:this.preserveScrollPositionOfTheBottomOfTheListOnMount}),i=n.firstShownItemIndex,r=n.lastShownItemIndex,o=n.beforeItemsHeight,s=n.afterItemsHeight,a=new Array(t);return this.onBeforeShowItems(e,a,i,r),{itemHeights:a,columnsCount:this._getColumnsCount?this._getColumnsCount(this.scrollableContainer):void 0,verticalSpacing:void 0,firstShownItemIndex:i,lastShownItemIndex:r,beforeItemsHeight:o,afterItemsHeight:s}}},{key:"getVerticalSpacing",value:function(){return this.getState()&&this.getState().verticalSpacing||0}},{key:"getColumnsCount",value:function(){return this.getState()&&this.getState().columnsCount||1}},{key:"getItemsCount",value:function(){return this.getState().items.length}},{key:"getMargin",value:function(){return 1*this.scrollableContainer.getHeight()}},{key:"onBeforeShowItems",value:function(e,t,n,i){if(this.onItemInitialRender)for(var r=n;r<=i;)void 0===t[r]&&this.onItemInitialRender(e[r]),r++}},{key:"onMount",value:function(){B("`.onMount()` instance method name is deprecated, use `.listen()` instance method name instead."),this.listen()}},{key:"render",value:function(){B("`.render()` instance method name is deprecated, use `.listen()` instance method name instead."),this.listen()}},{key:"listen",value:function(){if(!1===this.isRendered)throw new Error("[virtual-scroller] Can't restart a `VirtualScroller` after it has been stopped");E("~ Rendered (initial) ~"),this.isRendered=!0,this.onRenderedNewLayout(),this.resize.listen(),this.scroll.listen(),this.tbody&&function(e){e.classList.add("VirtualScroller");var t=document.getElementById("VirtualScrollerStyle");t||((t=document.createElement("style")).id="VirtualScrollerStyle",t.innerText="\n\t\t\ttbody.VirtualScroller:before {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: table-row;\n\t\t\t\theight: var(--VirtualScroller-paddingTop);\n\t\t\t}\n\t\t\ttbody.VirtualScroller:after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: table-row;\n\t\t\t\theight: var(--VirtualScroller-paddingBottom);\n\t\t\t}\n\t\t".replace(/[\n\t]/g,""),document.head.appendChild(t))}(this.getContainerElement()),this.preserveScrollPositionOfTheBottomOfTheListOnMount||this.onUpdateShownItemIndexes({reason:N.MOUNT})}},{key:"onRenderedNewLayout",value:function(){var e,t,n;this.measureVerticalSpacing(),this.itemHeights.measureItemHeights(this.getState().firstShownItemIndex,this.getState().lastShownItemIndex),this.tbody&&(e=this.getContainerElement(),t=this.getState().beforeItemsHeight,n=this.getState().afterItemsHeight,e.style.setProperty("--VirtualScroller-paddingTop",y(t)),e.style.setProperty("--VirtualScroller-paddingBottom",y(n)))}},{key:"getVisibleAreaBoundsIncludingMargins",value:function(){var e=this.scroll.getVisibleAreaBounds();return e.top-=this.getMargin(),e.bottom+=this.getMargin(),e}},{key:"onUnmount",value:function(){B("`.onUnmount()` instance method name is deprecated, use `.stop()` instance method name instead."),this.stop()}},{key:"destroy",value:function(){B("`.destroy()` instance method name is deprecated, use `.stop()` instance method name instead."),this.stop()}},{key:"stop",value:function(){this.isRendered=!1,this.resize.stop(),this.scroll.stop(),this.waitForStylesToLoad.stop(),this.layoutTimer&&(I(this.layoutTimer),this.layoutTimer=void 0)}},{key:"redoLayoutRightAfterRender",value:function(e){var t=this,n=e.reason;this._useTimeoutInRenderLoop?(this.layoutTimer&&I(this.layoutTimer),this.layoutTimer=p(function(){t.layoutTimer=void 0,t.onUpdateShownItemIndexes({reason:n})},0)):this.onUpdateShownItemIndexes({reason:n})}},{key:"measureVerticalSpacing",value:function(){if(void 0===this.getState().verticalSpacing){E("~ Measure item vertical spacing ~");var e=function(e){var t=e.container,n=e.screen;if(n.getChildElementsCount(t)>1)for(var i=n.getChildElementTopOffset(t,0),r=n.getChildElementHeight(t,0),o=1;o<n.getChildElementsCount(t);){var s=n.getChildElementTopOffset(t,o),a=n.getChildElementHeight(t,o);if(s!==i)return s-(i+r);r=Math.max(r,a),o++}}({container:this.getContainerElement(),screen:this.screen});void 0===e?E("Not enough items rendered to measure vertical spacing"):(E("Item vertical spacing",e),this.setState({verticalSpacing:e}))}}},{key:"remeasureItemHeight",value:function(e){var t=this.getState().firstShownItemIndex;return this.itemHeights.remeasureItemHeight(e,t)}},{key:"onItemStateChange",value:function(e,t){_()&&(E("~ Item state changed ~"),E("Item",e),E("Previous state\n"+JSON.stringify(this.getState().itemStates[e],null,2)),E("New state\n"+JSON.stringify(t,null,2))),this.getState().itemStates[e]=t}},{key:"onItemHeightChange",value:function(e){E("~ Re-measure item height ~"),E("Item",e);var t=this.getState().itemHeights[e];if(void 0===t)return V('"onItemHeightChange()" has been called for item '.concat(e,", but that item hasn't been rendered before."));var n=this.remeasureItemHeight(e);if(void 0===n)return B("The item is no longer rendered. This is not necessarily a bug, and could happen, for example, when there're several `onItemHeightChange(i)` calls issued at the same time.");E("Previous height",t),E("New height",n),t!==n&&(E("~ Item height has changed ~"),this.onUpdateShownItemIndexes({reason:N.ITEM_HEIGHT_CHANGED}))}},{key:"validateWillBeHiddenItemHeightsAreAccurate",value:function(e,t){for(var n=!0,i=this.getState().firstShownItemIndex;i<=this.getState().lastShownItemIndex;){if(i>=e&&i<=t);else{var r=this.getState().itemHeights[i],o=this.remeasureItemHeight(i);o!==r&&(n=!1,B("Item",i,"will be unmounted at next render because it's no longer visible. Its height has changed from",r,"to",o,"since it was last measured. This is not necessarily a bug, and could happen, for example, when there're several `onItemHeightChange(i)` calls issued at the same time, and the first one triggers a re-layout before the rest of them have had a chance to be executed."))}i++}return n}},{key:"updateItems",value:function(e,t){return this.setItems(e,t)}},{key:"setItems",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=this.getState().items,r=this.getState(),o=r.itemStates,s=r.itemHeights;E("~ Update items ~");var a=this.getItemsDiff(i,e);if(a&&!this.layoutResetPending){var l=this.getState();t={firstShownItemIndex:l.firstShownItemIndex,lastShownItemIndex:l.lastShownItemIndex,beforeItemsHeight:l.beforeItemsHeight,afterItemsHeight:l.afterItemsHeight};var u=a.prependedItemsCount,h=a.appendedItemsCount;u>0&&(E("Prepend",u,"items"),s=new Array(u).concat(s),o&&(o=new Array(u).concat(o))),h>0&&(E("Append",h,"items"),s=s.concat(new Array(h)),o&&(o=o.concat(new Array(h)))),this.layout.updateLayoutForItemsDiff(t,a,{itemsCount:e.length}),u>0&&(n.preserveScrollPositionOnPrependItems||n.preserveScrollPosition)&&0===this.getState().firstShownItemIndex&&(this.restoreScroll.captureScroll({previousItems:i,newItems:e,prependedItemsCount:u}),this.layout.showItemsFromTheStart(t))}else E("Items have changed, and",a?"a re-layout from scratch has been requested.":"it's not a simple append and/or prepend.","Rerender the entire list from scratch."),E("Previous items",i),E("New items",e),s=new Array(e.length),o=new Array(e.length),t=this.getInitialLayoutValues({itemsCount:e.length});E("~ Update state ~"),E("First shown item index",t.firstShownItemIndex),E("Last shown item index",t.lastShownItemIndex),E("Before items height",t.beforeItemsHeight),E("After items height (actual or estimated)",t.afterItemsHeight),this.onBeforeShowItems(e,s,t.firstShownItemIndex,t.lastShownItemIndex),this.newItemsPending=e,this.setState(oe({},t,{items:e,itemStates:o,itemHeights:s}))}},{key:"getItemsDiff",value:function(e,t){return function(e,t,n){var i=-1,r=-1;if(e.length>0&&(i=function(e,t,n){for(var i=0;i<e.length;){if(n(e[i],t))return i;i++}return-1}(t,e[0],n))>=0&&function(e,t,n,i){for(var r=0;r<e.length;){if(t.length<=n+r||!i(t[n+r],e[r]))return!1;r++}return!0}(e,t,i,n)&&(r=i+e.length-1),i>=0&&r>=0)return{prependedItemsCount:i,appendedItemsCount:t.length-(r+1)}}(e,t,this.isItemEqual)}}])&&se(t.prototype,n),i&&se(t,i),e}();function ue(){return(ue=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}).apply(this,arguments)}function he(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function ce(e){return(ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function me(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function fe(e){return(fe=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function de(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ge(e,t){return(ge=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function pe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Ie=t.elementType||t.oneOfType([t.string,t.func,t.object]),ye=function(t){function n(t){var i,r,o;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),r=this,o=fe(n).call(this,t),i=!o||"object"!==ce(o)&&"function"!=typeof o?de(r):o,pe(de(i),"container",e.createRef()),pe(de(i),"onItemStateChange",new Array(i.props.items.length)),pe(de(i),"onItemHeightChange",new Array(i.props.items.length)),pe(de(i),"itemRefs",new Array(i.props.items.length)),pe(de(i),"itemKeyPrefixes",[]),pe(de(i),"updateLayout",function(){return i.virtualScroller.updateLayout()}),pe(de(i),"layout",function(){return i.updateLayout()}),pe(de(i),"onItemInitialRender",function(){var e=i.props.onItemInitialRender;e&&e.apply(void 0,arguments)}),pe(de(i),"onItemFirstRender",function(){var e=i.props.onItemFirstRender;e&&e.apply(void 0,arguments)}),i.previousItemsProperty=t.items,i.generateItemKeyPrefix(),i.createVirtualScroller(),i}var i,r,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&ge(e,t)}(n,e.Component),i=n,(r=[{key:"createVirtualScroller",value:function(){var e=this,t=this.props,n=t.as,i=t.items,r=t.initialState,o=t.initialCustomState,s=t.onStateChange,a=t.estimatedItemHeight,l=t.preserveScrollPositionOfTheBottomOfTheListOnMount,u=t.preserveScrollPositionAtBottomOnMount,h=t.initialScrollPosition,c=t.onScrollPositionChange,m=t.measureItemsBatchSize,f=t.scrollableContainer,d=t.getScrollableContainer,g=t.getColumnsCount,p=t.getItemId,I=t.bypass;this.virtualScroller=new le(function(){return e.container.current},i,{_useTimeoutInRenderLoop:!0,estimatedItemHeight:a,bypass:I,onItemInitialRender:this.onItemInitialRender,onItemFirstRender:this.onItemFirstRender,preserveScrollPositionOfTheBottomOfTheListOnMount:l,preserveScrollPositionAtBottomOnMount:u,initialScrollPosition:h,onScrollPositionChange:c,shouldUpdateLayoutOnScreenResize:this.shouldUpdateLayoutOnScreenResize,measureItemsBatchSize:m,scrollableContainer:f,getScrollableContainer:d,getColumnsCount:g,getItemId:p,tbody:"tbody"===n,state:r,customState:o,onStateChange:s,getState:function(){return e.state},setState:function(t,n){var i=n.willUpdateState,r=n.didUpdateState;e.willUpdateState=i,e.didUpdateState=r,e.state?e.setState(t):(i(t),e.state=t,r())}})}},{key:"shouldUseRefs",value:function(){var e,t=this.props.itemComponent;return(e=t).prototype&&e.prototype.isReactComponent}},{key:"getItemKey",value:function(e,t){var n=this.props.getItemId;return n?n(e):"".concat(this.itemKeyPrefix,":").concat(t)}},{key:"updateItem",value:function(e){return this.renderItem(e)}},{key:"renderItem",value:function(e){var t=this;if(void 0===(e=this.getItemIndex(e)))return V("Item ".concat(JSON.stringify(e),' not found when calling ".renderItem()"'));if(this.shouldUseRefs()&&this.itemRefs[e]&&this.itemRefs[e].current){var n=this.props.items,i=n[e];this.itemRefs[e].current.forceUpdate(function(){if(t._isMounted){var e=n.indexOf(i);e>=0&&t.virtualScroller.onItemHeightChange(e)}})}}},{key:"getItemIndex",value:function(e){if("number"==typeof e)return e;if("object"===ce(e)&&null!==e){var t=this.props,n=t.items,i=t.getItemId,r=e;for(e=0;e<n.length;){if(i){if(i(r)===i(n[e]))return e}else if(r===n[e])return e;e++}}}},{key:"getItemRef",value:function(t){return this.itemRefs[t]||(this.itemRefs[t]=e.createRef()),this.itemRefs[t]}},{key:"getOnItemStateChange",value:function(e){var t=this;return this.onItemStateChange[e]||(this.onItemStateChange[e]=function(n){return t.virtualScroller.onItemStateChange(e,n)}),this.onItemStateChange[e]}},{key:"getOnItemHeightChange",value:function(e){var t=this;return this.onItemHeightChange[e]||(this.onItemHeightChange[e]=function(){return t.virtualScroller.onItemHeightChange(e)}),this.onItemHeightChange[e]}},{key:"generateItemKeyPrefix",value:function(){var e=String(Math.random()).slice(2);if(this.itemKeyPrefixes.indexOf(e)>=0)return this.generateItemKeyPrefix();this.itemKeyPrefixes.push(e),this.itemKeyPrefix=e}},{key:"componentDidMount",value:function(){var e=this.props.onMount;e&&e(),this._isMounted=!0,this.virtualScroller.listen()}},{key:"getSnapshotBeforeUpdate",value:function(e,t){return this.state!==t&&this.willUpdateState(this.state,t),null}},{key:"componentDidUpdate",value:function(e,t){this.state!==t&&this.didUpdateState(t);var n=this.props,i=n.items,r=n.preserveScrollPosition,o=n.preserveScrollPositionOnPrependItems;i!==e.items&&this.virtualScroller.setItems(i,{preserveScrollPositionOnPrependItems:o||r})}},{key:"componentWillUnmount",value:function(){this._isMounted=!1,this.virtualScroller.stop()}},{key:"render",value:function(){var t=this,n=this.props,i=n.as,r=n.itemComponent,o=n.itemComponentProps,s=(n.items,n.estimatedItemHeight,n.bypass,n.preserveScrollPositionOnPrependItems),a=n.preserveScrollPosition,l=(n.preserveScrollPositionOfTheBottomOfTheListOnMount,n.preserveScrollPositionAtBottomOnMount,n.initialScrollPosition,n.onScrollPositionChange,n.measureItemsBatchSize,n.scrollableContainer,n.getScrollableContainer,n.getColumnsCount,n.initialState,n.initialCustomState,n.onStateChange,n.onItemInitialRender,n.onItemFirstRender,n.getItemId),u=(n.onMount,n.className),h=he(n,["as","itemComponent","itemComponentProps","items","estimatedItemHeight","bypass","preserveScrollPositionOnPrependItems","preserveScrollPosition","preserveScrollPositionOfTheBottomOfTheListOnMount","preserveScrollPositionAtBottomOnMount","initialScrollPosition","onScrollPositionChange","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","initialState","initialCustomState","onStateChange","onItemInitialRender","onItemFirstRender","getItemId","onMount","className"]),c=this.virtualScroller.getState(),m=c.items,f=c.itemStates,d=c.firstShownItemIndex,g=c.lastShownItemIndex,p=c.beforeItemsHeight,I=c.afterItemsHeight,v=this.props.items,S=m;if(this.itemsPropertyWasChanged||(this.itemsPropertyWasChanged=this.props.items!==this.previousItemsProperty),this.previousItemsProperty=this.props.items,this.itemsPropertyWasChanged&&v!==S){var b=this.virtualScroller.getItemsDiff(S,v);if(b&&0===b.prependedItemsCount&&b.appendedItemsCount>0);else{if(b){var w=b.prependedItemsCount;w>0&&(s||a)&&0===d&&this.virtualScroller.restoreScroll.captureScroll({previousItems:S,newItems:v,prependedItemsCount:w})}l||this.generateItemKeyPrefix(),this.itemRefs=new Array(v.length)}}var C=this.virtualScroller.tbody;return e.createElement(i,ue({},h,{ref:this.container,className:C?u?u+" VirtualScroller":"VirtualScroller":u,style:{paddingTop:C?void 0:y(p),paddingBottom:C?void 0:y(I)}}),m.map(function(n,i){return i>=d&&i<=g?e.createElement(r,ue({},o,{key:t.getItemKey(n,i),ref:t.shouldUseRefs()?t.getItemRef(i):void 0,state:f&&f[i],onStateChange:t.getOnItemStateChange(i),onHeightChange:t.getOnItemHeightChange(i)}),n):null}))}}])&&me(i.prototype,r),o&&me(i,o),n}();return pe(ye,"propTypes",{as:Ie,items:t.arrayOf(t.object).isRequired,itemComponent:Ie.isRequired,itemComponentProps:t.object,estimatedItemHeight:t.number,bypass:t.bool,preserveScrollPositionOnPrependItems:t.bool,preserveScrollPosition:t.bool,preserveScrollPositionOfTheBottomOfTheListOnMount:t.bool,preserveScrollPositionAtBottomOnMount:t.bool,measureItemsBatchSize:t.number,scrollableContainer:t.any,getScrollableContainer:t.func,getColumnsCount:t.func,getItemId:t.func,className:t.string,onMount:t.func,onItemInitialRender:t.func,onItemFirstRender:t.func,initialScrollPosition:t.number,onScrollPositionChange:t.func,onStateChange:t.func,initialCustomState:t.object,initialState:t.shape({items:t.arrayOf(t.object).isRequired,itemStates:t.arrayOf(t.any),firstShownItemIndex:t.number.isRequired,lastShownItemIndex:t.number.isRequired,beforeItemsHeight:t.number.isRequired,afterItemsHeight:t.number.isRequired,itemHeights:t.arrayOf(t.number).isRequired,columnsCount:t.number,verticalSpacing:t.number})}),pe(ye,"defaultProps",{as:"div"}),ye});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react"),require("prop-types")):"function"==typeof define&&define.amd?define(["react","prop-types"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).VirtualScroller=t(e.React,e.PropTypes)}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=n(t);function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var i,r,o=[],s=!0,a=!1;try{for(n=n.call(e);!(s=(i=n.next()).done)&&(o.push(i.value),!t||o.length!==t);s=!0);}catch(e){a=!0,r=e}finally{try{s||null==n.return||n.return()}finally{if(a)throw r}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return l(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function u(e){return(e%1==0?e:e.toFixed(2))+"px"}var h="It looks like you're using Internet Explorer which doesn't support CSS variables required for a <tbody/> container. VirtualScroller has been switched into \"bypass\" mode (render all items). See: https://gitlab.com/catamphetamine/virtual-scroller/-/issues/1";function c(){return"undefined"==typeof window||!window.document.documentMode}var f="VirtualScroller",d="VirtualScrollerStyle";function m(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var g=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.getElement=t}var t,n,i;return t=e,(n=[{key:"getNthRenderedItemTopOffset",value:function(e){return this.getElement().childNodes[e].getBoundingClientRect().top-this.getElement().getBoundingClientRect().top}},{key:"getNthRenderedItemHeight",value:function(e){return this.getElement().childNodes[e].getBoundingClientRect().height}},{key:"getHeight",value:function(){return this.getElement().getBoundingClientRect().height}},{key:"clear",value:function(){for(;this.getElement().firstChild;)this.getElement().removeChild(this.getElement().firstChild)}}])&&m(t.prototype,n),i&&m(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function I(e,t){return I=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},I(e,t)}function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,i=y(e);if(t){var r=y(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return S(this,n)}}function S(e,t){if(t&&("object"===p(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function y(e){return y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},y(e)}function b(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function C(e,t,n){return t&&w(e.prototype,t),n&&w(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}var O=function(){function e(t,n){b(this,e),this.getElement=t,this.getItemsContainerElement=n}return C(e,[{key:"getScrollY",value:function(){return this.getElement().scrollTop}},{key:"scrollToY",value:function(e){this.getElement().scrollTo?this.getElement().scrollTo(0,e):this.getElement().scrollTop=e}},{key:"getWidth",value:function(){return this.getElement().offsetWidth}},{key:"getHeight",value:function(){return this.getElement().offsetHeight}},{key:"getItemsContainerTopOffset",value:function(){var e=this.getElement().getBoundingClientRect().top,t=this.getElement().clientTop;return this.getItemsContainerElement().getBoundingClientRect().top-e+this.getScrollY()-t}},{key:"onScroll",value:function(e){var t=this.getElement();return t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}},{key:"onResize",value:function(e){var t;if("undefined"!=typeof ResizeObserver){var n=new ResizeObserver((function(t){t[0],e()})),i=this.getElement();n.observe(i),t=function(){return n.unobserve(i)}}var r=H(e,{itemsContainerElement:this.getItemsContainerElement()});return function(){t&&t(),r()}}}]),e}(),R=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&I(e,t)}(n,e);var t=v(n);function n(e){return b(this,n),t.call(this,(function(){return window}),e)}return C(n,[{key:"getScrollY",value:function(){return window.pageYOffset}},{key:"getWidth",value:function(){return window.innerWidth}},{key:"getHeight",value:function(){return window.innerHeight}},{key:"getItemsContainerTopOffset",value:function(){var e=document.clientTop||document.body.clientTop||0;return this.getItemsContainerElement().getBoundingClientRect().top+this.getScrollY()-e}},{key:"onResize",value:function(e){return H(e,{itemsContainerElement:this.getItemsContainerElement()})}}]),n}(O);function H(e,t){var n=t.itemsContainerElement,i=function(){document.fullscreenElement&&!document.fullscreenElement.contains(n)||e()};return window.addEventListener("resize",i),function(){return window.removeEventListener("resize",i)}}var x="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};for(var P=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){(function(){var t,n,i,r,o,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(e.exports=function(){return(t()-o)/1e6},n=process.hrtime,r=(t=function(){var e;return 1e9*(e=n())[0]+e[1]})(),s=1e9*process.uptime(),o=r-s):Date.now?(e.exports=function(){return Date.now()-i},i=Date.now()):(e.exports=function(){return(new Date).getTime()-i},i=(new Date).getTime())}).call(x)})),T="undefined"==typeof window?x:window,j=["moz","webkit"],L="AnimationFrame",z=T["request"+L],A=T["cancel"+L]||T["cancelRequest"+L],B=0;!z&&B<j.length;B++)z=T[j[B]+"Request"+L],A=T[j[B]+"Cancel"+L]||T[j[B]+"CancelRequest"+L];if(!z||!A){var M=0,E=0,k=[];z=function(e){if(0===k.length){var t=P(),n=Math.max(0,16.666666666666668-(t-M));M=n+t,setTimeout((function(){var e=k.slice(0);k.length=0;for(var t=0;t<e.length;t++)if(!e[t].cancelled)try{e[t].callback(M)}catch(e){setTimeout((function(){throw e}),0)}}),Math.round(n))}return k.push({handle:++E,callback:e,cancelled:!1}),E},A=function(e){for(var t=0;t<k.length;t++)k[t].handle===e&&(k[t].cancelled=!0)}}var _=function(e){return z.call(T,e)};_.cancel=function(){A.apply(T,arguments)},_.polyfill=function(e){e||(e=T),e.requestAnimationFrame=z,e.cancelAnimationFrame=A};var N=_.cancel;function W(e,t){var n=Date.now(),i=_((function r(){Date.now()-n>=t?e():i=_(r)}));return{clear:function(){return N(i)}}}function V(e){e&&e.clear()}function D(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var F=function(){function e(t){var n=t.getListTopOffset,i=t.onListTopOffsetChange;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.getListTopOffset=n,this.onListTopOffsetChange=i}var t,n,i;return t=e,(n=[{key:"onListTopOffset",value:function(e){void 0===this.listTopOffsetInsideScrollableContainer&&this.start(),this.listTopOffsetInsideScrollableContainer=e}},{key:"start",value:function(){this._isActive=!0,this.watchListTopOffset()}},{key:"isStarted",value:function(){return this._isActive}},{key:"stop",value:function(){this._isActive=!1,this.watchListTopOffsetTimer&&(V(this.watchListTopOffsetTimer),this.watchListTopOffsetTimer=void 0)}},{key:"watchListTopOffset",value:function(){var e=this,t=Date.now();!function n(){e._isActive&&(void 0!==e.listTopOffsetInsideScrollableContainer&&e.getListTopOffset()!==e.listTopOffsetInsideScrollableContainer&&e.onListTopOffsetChange(),Date.now()-t<3e3&&(e.watchListTopOffsetTimer=W(n,500)))}()}}])&&D(t.prototype,n),i&&D(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}(),U={createItemsContainer:function(e){return new g(e)},createScrollableContainer:function(e,t){return e?new O(e,t):"undefined"!=typeof window?new R(t):void 0},watchListTopOffset:function(e){var t=e.getListTopOffset,n=e.onListTopOffsetChange;return new F({getListTopOffset:t,onListTopOffsetChange:n})}};function Y(e){return function(e){if(Array.isArray(e))return q(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return q(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return q(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function K(){if($()){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];(e=console).log.apply(e,Y(["[virtual-scroller]"].concat(n)))}}function G(){for(var e,t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];if(X())return J.apply(this,n);(e=console).warn.apply(e,Y(["[virtual-scroller]"].concat(n)))}function J(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var i;"undefined"!=typeof window?(K.apply(this,["ERROR"].concat(t)),setTimeout((function(){throw new Error(["[virtual-scroller]"].concat(t).join(" "))}),0)):(i=console).error.apply(i,Y(["[virtual-scroller]"].concat(t)))}function $(){var e=Q("VirtualScrollerDebug");if(void 0!==e)return!0===e||"debug"===e}function X(){return Q("VirtualScrollerWarningsAreErrors")}function Q(e){return"undefined"!=typeof window?window[e]:"undefined"!=typeof global?global[e]:void 0}function Z(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function ee(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Z(Object(n),!0).forEach((function(t){te(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Z(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function te(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ne(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var ie=function(){function e(t){var n=t.bypass,i=t.estimatedItemHeight,r=t.measureItemsBatchSize,o=t.getPrerenderMargin,s=t.getVerticalSpacing,a=t.getVerticalSpacingBeforeResize,l=t.getColumnsCount,u=t.getColumnsCountBeforeResize,h=t.getItemHeight,c=t.getItemHeightBeforeResize,f=t.getBeforeResizeItemsCount,d=t.getAverageItemHeight,m=t.getMaxVisibleAreaHeight,g=t.getPreviouslyCalculatedLayout;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.bypass=n,this.estimatedItemHeight=i,this.measureItemsBatchSize=r,this.getPrerenderMargin=o,this.getVerticalSpacing=s,this.getVerticalSpacingBeforeResize=a,this.getColumnsCount=l,this.getColumnsCountBeforeResize=u,this.getItemHeight=h,this.getItemHeightBeforeResize=c,this.getBeforeResizeItemsCount=f,this.getAverageItemHeight=d,this.getMaxVisibleAreaHeight=m,this.getPreviouslyCalculatedLayout=g}var t,n,i;return t=e,n=[{key:"getInitialLayoutValues",value:function(e){var t,n,i=e.itemsCount,r=e.columnsCount;return i>0&&(t=0,n=this.getInitialLastShownItemIndex({itemsCount:i,columnsCount:r,firstShownItemIndex:t})),{beforeItemsHeight:0,afterItemsHeight:0,firstShownItemIndex:t,lastShownItemIndex:n}}},{key:"getInitialLastShownItemIndex",value:function(e){var t=e.itemsCount,n=e.columnsCount,i=e.firstShownItemIndex;if(this.bypass)return t-1;var r=1;return this.getMaxVisibleAreaHeight()&&(r=this.getEstimatedRowsCountForHeight(this.getMaxVisibleAreaHeight()+this.getPrerenderMargin())),Math.min(i+(r*n-1),t-1)}},{key:"getEstimatedRowsCountForHeight",value:function(e){var t=this.getEstimatedItemHeight(),n=this.getVerticalSpacing();return t?Math.ceil((e+n)/(t+n)):1}},{key:"getEstimatedItemHeight",value:function(){return this.getAverageItemHeight()||this.estimatedItemHeight||0}},{key:"getLayoutUpdateForItemsDiff",value:function(e,t,n){var i=e.firstShownItemIndex,r=e.lastShownItemIndex,o=e.beforeItemsHeight,s=e.afterItemsHeight,a=t.prependedItemsCount,l=t.appendedItemsCount,u=n.itemsCount,h=n.columnsCount,c=n.shouldRestoreScrollPosition,f=n.onResetGridLayout,d=this.getAverageItemHeight(),m=this.getVerticalSpacing();if(l>0&&(s+=Math.ceil(l/h)*(m+d)),a>0&&(i+=a,r+=a,o+=Math.ceil(a/h)*(d+m),c&&(i=0,o=0),a%h>0)){f(),G("~ Prepended items count",a,"is not divisible by Columns Count",h,"~"),G("Layout reset required");var g=r-i+1;if(i=0,o=0,!c&&a>g){var p=u-((r=this.getInitialLastShownItemIndex({itemsCount:u,columnsCount:h,firstShownItemIndex:i}))+1);s=Math.ceil(p/h)*(m+d)}}return{beforeItemsHeight:o,afterItemsHeight:s,firstShownItemIndex:i,lastShownItemIndex:r}}},{key:"getItemNotMeasuredIndexes",value:function(e,t){var n=t.itemsCount,i=t.firstShownItemIndex,r=t.nonMeasuredAreaHeight,o=t.indexOfTheFirstItemInTheRow;K("Item index",e,"height is required for calculations but hasn't been measured yet. Mark the item as \"shown\", rerender the list, measure the item's height and redo the layout.");var s=this.getColumnsCount(),a=Math.min(this.getEstimatedRowsCountForHeight(r)*s,this.measureItemsBatchSize||1/0);return void 0===i&&(i=o),{firstNonMeasuredItemIndex:e,firstShownItemIndex:i,lastShownItemIndex:Math.min(o+a-1,n-1)}}},{key:"getShownItemIndexes",value:function(e){var t=e.itemsCount,n=e.visibleAreaTop,i=e.visibleAreaBottom,r=this._getShownItemIndex({itemsCount:t,fromIndex:0,visibleAreaTop:n,visibleAreaBottom:i,findFirstShownItemIndex:!0});if(null===r)return this.getNonVisibleListShownItemIndexes();if(void 0!==r.firstNonMeasuredItemIndex)return r;var o=r,s=o.firstShownItemIndex,a=o.beforeItemsHeight;return null===(r=this._getShownItemIndex({itemsCount:t,fromIndex:s,beforeItemsHeight:a,visibleAreaTop:n,visibleAreaBottom:i,findLastShownItemIndex:!0}))?this.getNonVisibleListShownItemIndexes():void 0!==r.firstNonMeasuredItemIndex?r:{firstShownItemIndex:s,lastShownItemIndex:r.lastShownItemIndex}}},{key:"_getShownItemIndex",value:function(e){var t=e.beforeResize,n=e.itemsCount,i=e.visibleAreaTop,r=e.visibleAreaBottom,o=e.findFirstShownItemIndex,s=e.findLastShownItemIndex,a=e.fromIndex,l=e.beforeItemsHeight;if(0===a&&(l=0),void 0===l)throw new Error("[virtual-scroller] `beforeItemsHeight` not passed to `Layout.getShownItemIndexes()` when starting from index "+a);if(!t){var u=this.getBeforeResizeItemsCount();if(u>a){var h=this._getShownItemIndex(ee(ee({},e),{},{beforeResize:!0,itemsCount:u})),c=h.notFound,f=h.beforeItemsHeight,d=h.firstShownItemIndex,m=h.lastShownItemIndex;if(!c){var g=this.getColumnsCount();return{firstShownItemIndex:void 0===d?void 0:Math.floor(d/g)*g,lastShownItemIndex:void 0===m?void 0:Math.floor(m/g)*g,beforeItemsHeight:f}}l=f,a+=u}}for(var p=t?this.getColumnsCountBeforeResize():this.getColumnsCount(),I=t?this.getVerticalSpacingBeforeResize():this.getVerticalSpacing(),v=a;v<n;){for(var S=v,y=n>S+p?I:0,b=0,w=0;w<p&&v<n;){var C=t?this.getItemHeightBeforeResize(v):this.getItemHeight(v);if(void 0===C)return this.getItemNotMeasuredIndexes(v,{itemsCount:n,firstShownItemIndex:s?a:void 0,indexOfTheFirstItemInTheRow:S,nonMeasuredAreaHeight:r+this.getPrerenderMargin()-l});b=Math.max(b,C),w++,v++}var O=l+b,R=O>i-this.getPrerenderMargin(),H=O+y>=r+this.getPrerenderMargin();if(o){if(R)return{firstShownItemIndex:S,beforeItemsHeight:l}}else if(s&&H)return{lastShownItemIndex:Math.min(S+p-1,n-1)};l+=b+y}return t?{notFound:!0,beforeItemsHeight:l}:o?(G("The list is supposed to be visible but no visible item has been found"),null):s?{lastShownItemIndex:n-1}:void 0}},{key:"getNonVisibleListShownItemIndexes",value:function(){var e={firstShownItemIndex:0,lastShownItemIndex:0};return void 0===this.getItemHeight(0)&&(e.firstNonMeasuredItemIndex=0),e}},{key:"getBeforeItemsHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.beforeResize,i=0,r=0;if(!n){var o=this.getBeforeResizeItemsCount();o>0&&(i=this.getBeforeItemsHeight(Math.min(e,o),{beforeResize:!0}),r=o)}for(var s=n?this.getColumnsCountBeforeResize():this.getColumnsCount(),a=n?this.getVerticalSpacingBeforeResize():this.getVerticalSpacing();r<e;){for(var l=0,u=0;u<s;){var h=n?this.getItemHeightBeforeResize(r):this.getItemHeight(r);void 0===h&&(h=this.getAverageItemHeight()),l=Math.max(l,h),r++,u++}i+=l,i+=a}return i}},{key:"getAfterItemsHeight",value:function(e,t){for(var n=this.getColumnsCount(),i=0,r=e+1;r<t;){for(var o=0,s=0;s<n&&r<t;){var a=this.getItemHeight(r);void 0===a&&(a=this.getAverageItemHeight()),o=Math.max(o,a),r++,s++}i+=this.getVerticalSpacing(),i+=o}return i}},{key:"getItemTopOffset",value:function(e){for(var t=0,n=this.getBeforeResizeItemsCount(),i=0===n?0:Math.ceil(n/this.getColumnsCountBeforeResize()),r=e<n?Math.floor(e/this.getColumnsCountBeforeResize()):i,o=0;o<r;)t+=this.getItemHeightBeforeResize(o*this.getColumnsCountBeforeResize()),t+=this.getVerticalSpacingBeforeResize(),o++;for(var s=Math.floor((e-n)/this.getColumnsCount()),a=0;a<s;){for(var l=0,u=0;u<this.getColumnsCount();){var h=this.getItemHeight(n+a*this.getColumnsCount()+u);if(void 0===h)return;l=Math.max(l,h),u++}t+=l,t+=this.getVerticalSpacing(),a++}return t}}],n&&ne(t.prototype,n),i&&ne(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}(),re="scroll",oe="stopped scrolling",se="manual",ae="started",le="non-measured item heights have been measured",ue="viewport width changed",he="viewport height changed",ce="viewport size unchanged",fe="item height changed",de="items changed",me="list top offset changed";function ge(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var pe=function(){function e(t){var n,i,r,o=this,s=t.bypass,a=t.getWidth,l=t.getHeight,u=t.listenForResize,h=t.onResizeStart,c=t.onResizeStop,f=t.onHeightChange,d=t.onWidthChange,m=t.onNoChange;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),r=function(){if(o.isActive){var e=o.width,t=o.height;o.width=o.getWidth(),o.height=o.getHeight(),o.width===e?o.height===t?o.onNoChange():o.onHeightChange(t,o.height):o.onWidthChange(e,o.width)}},(i="_onResize")in(n=this)?Object.defineProperty(n,i,{value:r,enumerable:!0,configurable:!0,writable:!0}):n[i]=r,this.bypass=s,this.onHeightChange=f,this.onWidthChange=d,this.onNoChange=m,this.getWidth=a,this.getHeight=l,this.listenForResize=u,this.onResize=function(e,t){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=i.onStart,o=i.onStop;return function(){for(var i=this,s=arguments.length,a=new Array(s),l=0;l<s;l++)a[l]=arguments[l];return new Promise((function(s){n?V(n):r&&r(),n=W((function(){n=void 0,o&&o(),e.apply(i,a),s()}),t)}))}}(this._onResize,Ie,{onStart:h,onStop:c})}var t,n,i;return t=e,(n=[{key:"start",value:function(){this.isActive=!0,this.bypass||(this.width=this.getWidth(),this.height=this.getHeight(),this.unlistenResize=this.listenForResize(this.onResize))}},{key:"stop",value:function(){this.isActive=!1,this.width=void 0,this.height=void 0,this.unlistenResize&&(this.unlistenResize(),this.unlistenResize=void 0)}}])&&ge(t.prototype,n),i&&ge(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}(),Ie=250;function ve(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function Se(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ve(Object(n),!0).forEach((function(t){ye(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ve(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ye(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function be(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var we=function(){function e(t){var n=t.getState,i=t.getVerticalSpacing,r=t.getColumnsCount;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.getState=n,this.getVerticalSpacing=i,this.getColumnsCount=r}var t,n,i;return t=e,n=[{key:"initializeFromState",value:function(e){this._includesBeforeResizeInState=Boolean(e.beforeResize)}},{key:"cleanUpBeforeResizeItemHeights",value:function(){var e=this.getState(),t=e.firstShownItemIndex,n=e.lastShownItemIndex,i=e.itemHeights,r=e.beforeResize;if(r&&t<r.itemHeights.length){K('~ Clean up "before resize" item heights and correct scroll position ~');for(var o=0,s=Math.floor(r.itemHeights.length/this.getColumnsCount()),a=Math.min(s*this.getColumnsCount()-1,n),l=t;l<=a;){for(var u=0,h=0;h<this.getColumnsCount()&&l<=a;){var c=i[l];void 0===c&&(c=this.getAverageItemHeight()),u=Math.max(u,c),l++,h++}o+=u,o+=this.getVerticalSpacing()}for(var f=0,d=Math.min(r.itemHeights.length,n+1),m=Math.ceil(d/r.columnsCount),g=0===t?0:Math.floor((t-1)/r.columnsCount)+1;g<m;)f+=r.itemHeights[g*r.columnsCount],f+=r.verticalSpacing,g++;if(0===t)K('Drop all "before resize" item heights');else{var p=t,I=r.itemHeights.length-1;p===I?K("For item index",p,'— drop "before resize" height',r.itemHeights[p]):K("For item indexes from",p,"to",I,'— drop "before resize" heights',r.itemHeights.slice(p))}return r.itemHeights.splice(t,r.itemHeights.length-t),{scrollBy:o-f,beforeResize:0===t?void 0:Se({},r)}}}},{key:"snapshotBeforeResizeItemHeights",value:function(e){var t=e.firstShownItemIndex,n=e.newFirstShownItemIndex;e.newColumnsCount;var i=this.getColumnsCount(),r=this.getVerticalSpacing();this._includesBeforeResizeInState=!0;var o=this.getState(),s=o.beforeResize,a=o.itemHeights,l=s?s.itemHeights.length:0;if(l>0){if(s.columnsCount!==i||s.verticalSpacing!==r){for(var u=0,h=Math.ceil(l/s.columnsCount),c=0;c<h;)u+=s.itemHeights[c*s.columnsCount],u+=s.verticalSpacing,c++;for(var f=0,d=t;d<n;){for(var m=0,g=0;g<i&&d<n;)m=Math.max(m,a[d]),g++,d++;f+=m,f+=r}var p=u+f,I=Math.ceil(n/i);return new Array(n).fill(Math.max(0,p/I-r))}return s.itemHeights.concat(Ce(a,n,i).slice(s.itemHeights.length))}return Ce(a,n,i)}},{key:"shouldIncludeBeforeResizeValuesInState",value:function(){return this._includesBeforeResizeInState}}],n&&be(t.prototype,n),i&&be(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Ce(e,t,n){e=e.slice(0,Math.ceil(t/n)*n);for(var i=0;i*n<t;){for(var r=0,o=0;o<n;)r=Math.max(r,e[i*n+o]),o++;for(o=0;o<n;)e[i*n+o]=r,o++;i++}return e.slice(0,t)}function Oe(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function Re(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var He=function(){function e(t){var n=this,i=t.bypass,r=t.scrollableContainer,o=t.itemsContainer,s=t.onScroll,a=t.initialScrollPosition,l=t.onScrollPositionChange,u=t.isImmediateLayoutScheduled,h=t.hasNonRenderedItemsAtTheTop,c=t.hasNonRenderedItemsAtTheBottom,f=t.getLatestLayoutVisibleArea,d=t.getListTopOffset,m=t.getPrerenderMargin,g=t.onScrolledToTop,p=t.waitForScrollingToStop;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Re(this,"scrollByY",(function(e){n.scrollToY(n.getScrollY()+e)})),Re(this,"onScrollListener",(function(){if(n.onScrollPositionChange&&n.onScrollPositionChange(n.getScrollY()),n.onScrolledToTop&&n.getScrollY()<n.getListTopOffset()&&n.onScrolledToTop(),!n.bypass&&!n.ignoreScrollEvents){n.cancelOnStopScrollingTimer();var e=n.getLatestLayoutVisibleArea()&&(n.getScrollY()<n.getLatestLayoutVisibleArea().top-n.getPrerenderMargin()&&n.hasNonRenderedItemsAtTheTop()||n.getScrollY()+n.scrollableContainer.getHeight()>n.getLatestLayoutVisibleArea().bottom+n.getPrerenderMargin()&&n.hasNonRenderedItemsAtTheBottom());if(K(e?"The user has scrolled far enough: perform a re-layout":"The user is scrolling: perform a re-layout when they stop scrolling"),e||!1===n.waitForScrollingToStop)return n.onScroll();n.isImmediateLayoutScheduled()||(n.shouldCallOnScrollListenerWhenStopsScrolling=!0,n.watchOnStopScrolling())}})),this.bypass=i,this.scrollableContainer=r,this.itemsContainer=o,this.onScroll=s,this.initialScrollPosition=a,this.onScrollPositionChange=l,this.isImmediateLayoutScheduled=u,this.hasNonRenderedItemsAtTheTop=h,this.hasNonRenderedItemsAtTheBottom=c,this.getLatestLayoutVisibleArea=f,this.getListTopOffset=d,this.getPrerenderMargin=m,this.onScrolledToTop=g,this.waitForScrollingToStop=p}var t,n,i;return t=e,(n=[{key:"start",value:function(){void 0!==this.initialScrollPosition&&(this.scrollToY(this.initialScrollPosition),this.initialScrollPosition=void 0),this.onScrollPositionChange&&this.onScrollPositionChange(this.getScrollY()),this.stopListeningToScroll=this.scrollableContainer.onScroll(this.onScrollListener)}},{key:"stop",value:function(){this.stopListeningToScroll(),this.stopListeningToScroll=void 0,this.shouldCallOnScrollListenerWhenStopsScrolling=void 0,this.cancelOnStopScrollingTimer()}},{key:"scrollToY",value:function(e){this.ignoreScrollEvents=!0,this.scrollableContainer.scrollToY(e),this.ignoreScrollEvents=void 0}},{key:"getScrollY",value:function(){return this.scrollableContainer.getScrollY()}},{key:"cancelOnStopScrollingTimer",value:function(){this.onStopScrollingTimer&&(V(this.onStopScrollingTimer),this.onStopScrollingTimer=void 0)}},{key:"cancelScheduledLayout",value:function(){this.cancelOnStopScrollingTimer()}},{key:"watchOnStopScrolling",value:function(){var e=this;this.onStopScrollingTimer=W((function(){e.onStopScrollingTimer=void 0,e.shouldCallOnScrollListenerWhenStopsScrolling&&(e.shouldCallOnScrollListenerWhenStopsScrolling=void 0,e.onScroll({delayed:!0}))}),xe)}},{key:"getVisibleAreaBounds",value:function(){var e=this.getScrollY();return{top:e,bottom:e+this.scrollableContainer.getHeight()}}}])&&Oe(t.prototype,n),i&&Oe(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}(),xe=100;function Pe(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var Te=function(){function e(t){var n=t.itemsContainer,i=t.getListTopOffset;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.itemsContainer=n,this.getListTopOffset=i}var t,n,i;return t=e,(n=[{key:"snapshotListHeightBeforeAddingNewItems",value:function(e){var t=e.previousItems,n=e.newItems,i=e.prependedItemsCount;0!==t.length&&0!==i&&(this._snapshot={previousItems:t,newItems:n,itemIndex:i,itemTopOffset:this.itemsContainer.getNthRenderedItemTopOffset(0),listTopOffset:this.getListTopOffset()})}},{key:"getAnchorItemIndex",value:function(){return this._snapshot.itemIndex}},{key:"hasSnapshot",value:function(){return void 0!==this._snapshot}},{key:"getListBottomOffsetChange",value:function(){var e=this._snapshot,t=e.itemIndex,n=e.itemTopOffset,i=e.listTopOffset;return this.itemsContainer.getNthRenderedItemTopOffset(t)-n+(this.getListTopOffset()-i)}},{key:"reset",value:function(){this._snapshot=void 0}}])&&Pe(t.prototype,n),i&&Pe(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function je(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var Le=function(){function e(t){var n=t.container;t.itemHeights;var i=t.getItemHeight,r=t.setItemHeight;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.container=n,this._get=i,this._set=r,this.reset()}var t,n,i;return t=e,n=[{key:"reset",value:function(){this.measuredItemsHeight=0,this.firstMeasuredItemIndex=void 0,this.lastMeasuredItemIndex=void 0}},{key:"readItemHeightsFromState",value:function(e){for(var t=e.itemHeights,n=0;n<t.length;){if(void 0===t[n]){if(void 0!==this.firstMeasuredItemIndex){this.lastMeasuredItemIndex=n-1;break}}else void 0===this.firstMeasuredItemIndex&&(this.firstMeasuredItemIndex=n),this.measuredItemsHeight+=t[n];n++}}},{key:"_measureItemHeight",value:function(e,t){return this.container.getNthRenderedItemHeight(e-t)}},{key:"measureItemHeights",value:function(e,t){if(K("~ Measure item heights ~"),void 0!==e){void 0!==this.firstMeasuredItemIndex&&(e>this.lastMeasuredItemIndex+1||t<this.firstMeasuredItemIndex-1)&&(K("Non-measured items gap detected. Reset first and last measured item indexes."),this.reset());for(var n=[],i=this.firstMeasuredItemIndex,r=this.lastMeasuredItemIndex,o=!1,s=e;s<=t;){if(void 0===this._get(s)){n.push(s);var a=this._measureItemHeight(s,e);K("Item index",s,"height",a),this._set(s,a),(void 0===i||s<i)&&(this.measuredItemsHeight+=a,o||(this.firstMeasuredItemIndex=s,o=!0)),(void 0===r||s>r)&&(void 0!==r&&(this.measuredItemsHeight+=a),this.lastMeasuredItemIndex=s)}else{var l=this._get(s),u=this._measureItemHeight(s,e);l!==u&&(G("Item index",s,"height changed unexpectedly: it was",l,"before, but now it is",u,'. An item\'s height is allowed to change only in two cases: when the item\'s "state" changes and the developer calls `onItemStateChange(i, newState)`, or when the item\'s height changes for some other reason and the developer calls `onItemHeightChange(i)`. Perhaps you forgot to persist the item\'s "state" by calling `onItemStateChange(i, newState)` when it changed, and that "state" got lost when the item element was unmounted, which resulted in a different height when the item was shown again having its "state" reset.'),this._set(s,u))}s++}return n}}},{key:"remeasureItemHeight",value:function(e,t){var n=this._get(e),i=this._measureItemHeight(e,t);return this._set(e,i),this.measuredItemsHeight+=i-n,i}},{key:"getAverage",value:function(){return void 0===this.lastMeasuredItemIndex?0:this.measuredItemsHeight/(this.lastMeasuredItemIndex-this.firstMeasuredItemIndex+1)}},{key:"onPrepend",value:function(e){void 0!==this.firstMeasuredItemIndex&&(this.firstMeasuredItemIndex+=e,this.lastMeasuredItemIndex+=e)}}],n&&je(t.prototype,n),i&&je(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function Ae(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ze(Object(n),!0).forEach((function(t){Be(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ze(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Be(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Me(e){var t=Ae({},e);return e.itemHeights&&(t.itemHeights=e.itemHeights.slice()),e.itemStates&&(t.itemStates=e.itemStates.slice()),e.beforeResize&&(t.beforeResize=Ae({},e.beforeResize),t.beforeResize.itemHeights=e.beforeResize.itemHeights.slice()),t}function Ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function ke(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ee(Object(n),!0).forEach((function(t){_e(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ee(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ne(e){var t=this,n=e.state,i=e.onStateChange,r=e.render,o=e.items;function s(){return this.state}function a(e){this.state=e}function l(e){this.state=ke(ke({},this.state),e),r(this.state,this.previousState),this.onRender()}function u(){var e=o,t=ke(ke({},c.call(this,e)),{},{items:e,itemStates:new Array(e.length)});return $()&&K("Initial state (autogenerated)",Me(t)),K("First shown item index",t.firstShownItemIndex),K("Last shown item index",t.lastShownItemIndex),t}function h(e){return $()&&K("Restore state",Me(e)),function(e,t){var n=t.columnsCount,i=e.columnsCount||1;if(i!==n)return G("~ Columns Count changed from",i,"to",n,"~"),!0;if(Math.floor(e.firstShownItemIndex/n)*n!==e.firstShownItemIndex)return G("~ First Shown Item Index",e.firstShownItemIndex,"is not divisible by Columns Count",n,"~"),!0}(e=ke(ke({},e=function(e){return e.beforeResize&&0===e.beforeResize.itemHeights.length&&(e.beforeResize=void 0),e}(e)),{},{verticalSpacing:void 0}),{columnsCount:this.getActualColumnsCount()})&&(G("Reset Layout"),e=ke(ke({},e),c.call(this,e.items))),e}function c(e){var t=e.length,n=this.layout.getInitialLayoutValues({itemsCount:t,columnsCount:this.getActualColumnsCount()}),i=n.firstShownItemIndex,r=n.lastShownItemIndex,o=n.beforeItemsHeight,s=n.afterItemsHeight,a=new Array(t);return this.onBeforeShowItems(e,a,i,r),{itemHeights:a,columnsCount:this.getActualColumnsCountForState(),verticalSpacing:this.verticalSpacing,firstShownItemIndex:i,lastShownItemIndex:r,beforeItemsHeight:o,afterItemsHeight:s}}this.onStateChange=i,this._render=r,this._onItemStateChange=function(e,n){$()&&(K("~ Item state changed ~"),K("Item",e),K("Previous state\n"+JSON.stringify(t.getState().itemStates[e],null,2)),K("New state\n"+JSON.stringify(n,null,2))),t.getState().itemStates[e]=n,t.newItemsWillBeRendered&&(t.itemStatesThatChangedWhileNewItemsWereBeingRendered||(t.itemStatesThatChangedWhileNewItemsWereBeingRendered={}),t.itemStatesThatChangedWhileNewItemsWereBeingRendered[String(e)]=n)},this.getState=function(){return t._getState()},this.updateState=function(e){$()&&(K("~ Set state ~"),K(Me(e))),e.items&&(t._isSettingNewItems||J("A `stateUpdate` can only contain `items` property as a result of calling `.setItems()`")),t._isSettingNewItems=void 0,t.previousState=t.getState(),t._updateState(e)},this.getInitialState=function(){return n?h.call(t,n):u.call(t)},this.useState=function(e){var n=e.getState,i=e.updateState;if(t._isActive)throw new Error("[virtual-scroller] `VirtualScroller` has already been started");if(t._getState)throw new Error("[virtual-scroller] Custom state storage has already been configured");if(r)throw new Error("[virtual-scroller] Creating a `VirtualScroller` class instance with a `render()` parameter means using the default (internal) state storage");if(!n||!i)throw new Error("[virtual-scroller] When using a custom state storage, one must supply both `getState()` and `updateState()` functions");t._usesCustomStateStorage=!0,t._getState=n,t._updateState=i},this.useDefaultStateStorage=function(){if(!r)throw new Error("[virtual-scroller] When using the default (internal) state management, one must supply a `render(state, prevState)` function parameter");t._getState=s.bind(t),t._updateState=l.bind(t),a.bind(t)(t.getInitialState())}}function We(){var e=this;function t(){var e=this.getState(),t=e.firstShownItemIndex,n=e.lastShownItemIndex;K("~ Measure item vertical spacing ~");var i=function(e){var t=e.itemsContainer,n=e.renderedItemsCount;if(n>1)for(var i=t.getNthRenderedItemTopOffset(0),r=t.getNthRenderedItemHeight(0),o=1;o<n;){var s=t.getNthRenderedItemTopOffset(o),a=t.getNthRenderedItemHeight(o);if(s!==i)return s-(i+r);r=Math.max(r,a),o++}}({itemsContainer:this.itemsContainer,renderedItemsCount:n-t+1});if(void 0!==i)return K("Item vertical spacing",i),i;K("Not enough items rendered to measure vertical spacing")}this.getVerticalSpacing=function(){return e.verticalSpacing||0},this.getVerticalSpacingBeforeResize=function(){var t=e.getState().beforeResize;return t&&t.verticalSpacing||0},this.measureVerticalSpacingIfNotMeasured=function(){if(void 0===e.verticalSpacing)return e.verticalSpacing=t.call(e),e.verticalSpacing}}function Ve(e){var t=this,n=e.getColumnsCount;if(n){var i={getWidth:function(){return t.scrollableContainer.getWidth()}};this.getActualColumnsCountForState=function(){var e=n(i);if(1!==e)return e}}else this.getActualColumnsCountForState=function(){};this.getActualColumnsCount=function(){return t.getActualColumnsCountForState()||1},this.getColumnsCount=function(){return t.getState()&&t.getState().columnsCount||1}}function De(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function Fe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?De(Object(n),!0).forEach((function(t){Ue(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):De(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ue(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ye(){var e=this;function t(e){var n=e.stateUpdate,o=Date.now(),s=i.call(this),a=s.firstShownItemIndex,l=s.lastShownItemIndex,u=s.shownItemsHeight,h=s.firstNonMeasuredItemIndex;if(this.listHeightMeasurement.hasSnapshot()&&(l<this.listHeightMeasurement.getAnchorItemIndex()&&(l=this.listHeightMeasurement.getAnchorItemIndex()),h=void 0),!r.call(this,a,l))return K("~ Because some of the will-be-hidden item heights (listed above) have changed since they've last been measured, redo layout. ~"),t.call(this,{stateUpdate:n});var c=this.layout.getBeforeItemsHeight(a),f=this.layout.getAfterItemsHeight(l,this.getItemsCount()),d=Date.now()-o;K("~ Calculated Layout"+(this.bypass?" (bypass)":"")+" ~"),d<qe||G("Layout calculated in",d,"ms"),this.getColumnsCount()&&K("Columns count",this.getColumnsCount()),K("First shown item index",a),K("Last shown item index",l),K("Before items height",c),K("After items height (actual or estimated)",f),K("Average item height (used for estimated after items height calculation)",this.itemHeights.getAverage()),$()&&(K("Item heights",this.getState().itemHeights.slice()),K("Item states",this.getState().itemStates.slice())),this.onBeforeShowItems(this.getState().items,this.getState().itemHeights,a,l),this.firstNonMeasuredItemIndex=h,this.previouslyCalculatedLayout=void 0===u?void 0:{firstShownItemIndex:a,lastShownItemIndex:l,beforeItemsHeight:c,shownItemsHeight:u},this.updateState(Fe({firstShownItemIndex:a,lastShownItemIndex:l,beforeItemsHeight:c,afterItemsHeight:f},n))}function n(){var e=this.scroll.getVisibleAreaBounds();this.latestLayoutVisibleArea=e;var t=this.getListTopOffsetInsideScrollableContainer();return{top:e.top-t,bottom:e.bottom-t}}function i(){var e=this.getItemsCount(),t=n.call(this),i=t.top,r=t.bottom;return this.bypass?{firstShownItemIndex:0,lastShownItemIndex:e-1}:i<this.itemsContainer.getHeight()&&r>0?this.layout.getShownItemIndexes({itemsCount:this.getItemsCount(),visibleAreaTop:i,visibleAreaBottom:r}):(K("The entire list is off-screen. No items are visible."),this.layout.getNonVisibleListShownItemIndexes())}function r(e,t){for(var n=!0,i=this.getState().firstShownItemIndex;i<=this.getState().lastShownItemIndex;){if(i>=e&&i<=t);else{var r=this.getState().itemHeights[i],a=o.call(this,i);a!==r&&(n&&(K("~ Validate will-be-hidden item heights. ~"),s.call(this,i,r,a)),n=!1,G("Item index",i,"is no longer visible and will be unmounted. Its height has changed from",r,"to",a,"since it was last measured. This is not necessarily a bug, and could happen, for example, on screen width change, or when there're several `onItemHeightChange(i)` calls issued at the same time, and the first one triggers a re-layout before the rest of them have had a chance to be executed."))}i++}return n}function o(e){var t=this.getState().firstShownItemIndex;return this.itemHeights.remeasureItemHeight(e,t)}function s(e,t,n){if(this.previouslyCalculatedLayout){var i=n-t;e<this.previouslyCalculatedLayout.firstShownItemIndex?this.previouslyCalculatedLayout.beforeItemsHeight+=i:e>this.previouslyCalculatedLayout.lastShownItemIndex?void 0!==this.previouslyCalculatedLayout.afterItemsHeight&&(this.previouslyCalculatedLayout.afterItemsHeight+=i):this.previouslyCalculatedLayout.shownItemsHeight+=n-t}}this.onUpdateShownItemIndexes=function(n){var i=n.reason,r=n.stateUpdate,o=function(){r&&e.updateState(r)};return e.newItemsWillBeRendered||e.widthHasChanged||e._isResizing||0===e.getItemsCount()?o():(e.scroll.cancelScheduledLayout(),r=e.cancelLayoutTimer({stateUpdate:r}),K("~ Update Layout (on ".concat(i,") ~")),void t.call(e,{stateUpdate:r}))},this.getListTopOffsetInsideScrollableContainer=function(){var t=e.scrollableContainer.getItemsContainerTopOffset();return e.listTopOffsetWatcher&&e.listTopOffsetWatcher.onListTopOffset(t),t},this._onItemHeightChange=function(t){K("~ Re-measure item height ~"),K("Item",t);var n=e.getState(),i=n.itemHeights,r=n.firstShownItemIndex,a=n.lastShownItemIndex;if(!(t>=r&&t<=a))return G("The item is no longer rendered. This is not necessarily a bug, and could happen, for example, when there're several `onItemHeightChange(i)` calls issued at the same time.");var l=i[t];if(void 0===l)return J('"onItemHeightChange()" has been called for item '.concat(t,", but that item hasn't been rendered before."));var u=o.call(e,t);K("Previous height",l),K("New height",u),l!==u&&(K("~ Item height has changed ~"),s.call(e,t,l,u),e.onUpdateShownItemIndexes({reason:fe}),e.newItemsWillBeRendered&&(e.itemHeightsThatChangedWhileNewItemsWereBeingRendered||(e.itemHeightsThatChangedWhileNewItemsWereBeingRendered={}),e.itemHeightsThatChangedWhileNewItemsWereBeingRendered[String(t)]=u))},this.getPrerenderMargin=function(){return 1*e.scrollableContainer.getHeight()},this.onBeforeShowItems=function(t,n,i,r){if(e.onItemInitialRender)for(var o=i;o<=r;)void 0===n[o]&&e.onItemInitialRender(t[o]),o++},this.measureItemHeightsAndSpacing=function(){e.itemHeights.measureItemHeights(e.getState().firstShownItemIndex,e.getState().lastShownItemIndex);var t=e.measureVerticalSpacingIfNotMeasured();if(t&&0!==t)return{verticalSpacing:t}},this.cancelLayoutTimer=function(t){var n=t.stateUpdate;return e.layoutTimer?(V(e.layoutTimer),e.layoutTimer=void 0,n||e.layoutTimerStateUpdate?(n=Fe(Fe({},e.layoutTimerStateUpdate),n),e.layoutTimerStateUpdate=void 0,n):void 0):n},this.scheduleLayoutTimer=function(t){var n=t.reason,i=t.stateUpdate;e.layoutTimerStateUpdate=i,e.layoutTimer=W((function(){e.layoutTimerStateUpdate=void 0,e.layoutTimer=void 0,e.onUpdateShownItemIndexes({reason:n,stateUpdate:i})}),0)}}var qe=15;function Ke(e){return Ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ke(e)}var Ge=Object.prototype.hasOwnProperty;function Je(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function $e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function Xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?$e(Object(n),!0).forEach((function(t){Qe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):$e(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Qe(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ze(){var e=this;function t(e,t){if(e){var n=e.prependedItemsCount;e.appendedItemsCount;var i=this.getState(),r=i.itemHeights,o=i.itemStates;if(this.itemHeightsThatChangedWhileNewItemsWereBeingRendered)for(var s=0,a=Object.keys(this.itemHeightsThatChangedWhileNewItemsWereBeingRendered);s<a.length;s++){var l=a[s];r[n+parseInt(l)]=this.itemHeightsThatChangedWhileNewItemsWereBeingRendered[l]}if(this.itemStatesThatChangedWhileNewItemsWereBeingRendered)for(var u=0,h=Object.keys(this.itemStatesThatChangedWhileNewItemsWereBeingRendered);u<h.length;u++){var c=h[u];o[n+parseInt(c)]=this.itemStatesThatChangedWhileNewItemsWereBeingRendered[c]}if(0===n)return this.previouslyCalculatedLayout&&(this.previouslyCalculatedLayout.firstShownItemIndex===t.firstShownItemIndex&&this.previouslyCalculatedLayout.lastShownItemIndex===t.lastShownItemIndex||(G('Unexpected (non-matching) "firstShownItemIndex" or "lastShownItemIndex" encountered in "onRender()" after appending items'),G("Previously calculated layout",this.previouslyCalculatedLayout),G("New layout",t),this.previouslyCalculatedLayout=void 0)),"SEAMLESS_APPEND";if(this.listHeightMeasurement.hasSnapshot()){if(0===t.firstShownItemIndex){K("~ Restore Scroll Position ~");var f=this.listHeightMeasurement.getListBottomOffsetChange({beforeItemsHeight:t.beforeItemsHeight});return this.listHeightMeasurement.reset(),f?(K("Scroll down by",f),this.scroll.scrollByY(f)):K("Scroll position hasn't changed"),this.previouslyCalculatedLayout&&(0===this.previouslyCalculatedLayout.firstShownItemIndex&&this.previouslyCalculatedLayout.lastShownItemIndex===t.lastShownItemIndex-n?this.previouslyCalculatedLayout={beforeItemsHeight:0,shownItemsHeight:this.previouslyCalculatedLayout.shownItemsHeight+f,firstShownItemIndex:0,lastShownItemIndex:t.lastShownItemIndex}:(G('Unexpected (non-matching) "firstShownItemIndex" or "lastShownItemIndex" encountered in "onRender()" after prepending items'),G("Previously calculated layout",this.previouslyCalculatedLayout),G("New layout",t),this.previouslyCalculatedLayout=void 0)),"SEAMLESS_PREPEND"}G('Unexpected "firstShownItemIndex" '.concat(t.firstShownItemIndex,' encountered in "onRender()" after prepending items. Expected 0.'))}}this.previouslyCalculatedLayout=void 0}function n(e){var t=e.reason,n=e.stateUpdate;this._useTimeoutInRenderLoop?(n=this.cancelLayoutTimer({stateUpdate:n}),this.scheduleLayoutTimer({reason:t,stateUpdate:n})):this.onUpdateShownItemIndexes({reason:t,stateUpdate:n})}function i(){var e=Boolean(this.widthHasChanged);this.widthHasChanged=void 0;var t=void 0!==this.firstNonMeasuredItemIndex;return this.firstNonMeasuredItemIndex=void 0,this.newItemsWillBeRendered=void 0,this.itemHeightsThatChangedWhileNewItemsWereBeingRendered=void 0,this.itemStatesThatChangedWhileNewItemsWereBeingRendered=void 0,{nonMeasuredItemsHaveBeenRendered:t,widthHasChanged:e}}this._onRender=function(r,o){var s,a,l;if(K("~ Rendered ~"),$()&&K("State",Me(r)),e.onStateChange&&(function(e,t){if(Je(e,t))return!0;if("object"!==Ke(e)||null===e||"object"!==Ke(t)||null===t)return!1;var n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!1;for(var r=0;r<n.length;r++)if(!Ge.call(t,n[r])||!Je(e[n[r]],t[n[r]]))return!1;return!0}(r,o)||e.onStateChange(r)),e.tbody&&(s=e.getItemsContainerElement(),a=r.beforeItemsHeight,l=r.afterItemsHeight,s.style.setProperty("--VirtualScroller-paddingTop",u(a)),s.style.setProperty("--VirtualScroller-paddingBottom",u(l))),o){var h,c=i.call(e),f=c.nonMeasuredItemsHaveBeenRendered,d=c.widthHasChanged;f&&(h=le),d&&(h=ue,e.itemHeights.reset(),e.verticalSpacing=void 0);var m,g=o.items,p=r.items;if(p!==g){var I=e.getItemsDiff(g,p);if(I){var v=I.prependedItemsCount;e.itemHeights.onPrepend(v)}else e.itemHeights.reset();d||"SEAMLESS_PREPEND"!==t.call(e,I,r)&&(h=de)}if(r.firstShownItemIndex!==o.firstShownItemIndex||r.lastShownItemIndex!==o.lastShownItemIndex||r.items!==o.items||d){var S=e.measureItemHeightsAndSpacing();S&&(m=Xe(Xe({},m),S))}var y=e.beforeResize.cleanUpBeforeResizeItemHeights();if(void 0!==y){var b=y.scrollBy,w=y.beforeResize;K("Correct scroll position by",b),e.scroll.scrollByY(b),m=Xe(Xe({},m),{},{beforeResize:w})}e._isActive?h?n.call(e,{stateUpdate:m,reason:h}):m?e.updateState(m):K("~ Finished Layout ~"):e._stoppedStateUpdate=m}}}function et(){var e=this;this.onResize=function(){e.previouslyCalculatedLayout=void 0,e.listHeightMeasurement.reset();var t=e.newItemsWillBeRendered?e.newItemsWillBeRendered.count:e.getState().itemHeights.length,n=e.newItemsWillBeRendered?e.newItemsWillBeRendered.layout:e.getState(),i={scrollableContainerWidth:e.scrollableContainer.getWidth(),firstShownItemIndex:n.firstShownItemIndex,lastShownItemIndex:n.lastShownItemIndex,beforeItemsHeight:n.beforeItemsHeight,afterItemsHeight:n.afterItemsHeight,itemHeights:new Array(t),columnsCount:e.getActualColumnsCountForState(),verticalSpacing:void 0},r=n.firstShownItemIndex,o=n.lastShownItemIndex,s=e.getActualColumnsCount(),a=Math.floor(r/s)*s,l=Math.min(Math.ceil((o+1)/s)*s,t)-1;a!==r&&(K("Columns Count changed from",e.getState().columnsCount||1,"to",s),K("First Shown Item Index needs to change from",r,"to",a)),i.firstShownItemIndex=a,i.lastShownItemIndex=l;var u=e.getVerticalSpacing(),h=e.getColumnsCount();e.shouldDiscardBeforeResizeItemHeights()||0===a?e.beforeResize.shouldIncludeBeforeResizeValuesInState()&&(i.beforeResize=void 0):i.beforeResize={verticalSpacing:u,columnsCount:h,itemHeights:e.beforeResize.snapshotBeforeResizeItemHeights({firstShownItemIndex:r,newFirstShownItemIndex:a,newColumnsCount:s})},e.widthHasChanged={stateUpdate:i},e.updateState(i)},this.shouldDiscardBeforeResizeItemHeights=function(){if(e.newItemsWillBeRendered){var t=e.newItemsWillBeRendered,n=t.prepend,i=t.replace;return n||i}}}function tt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function nt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tt(Object(n),!0).forEach((function(t){it(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function it(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(){var e=this;this.getItemsCount=function(){return e.getState().items.length},this._setItems=function(t){var n,i,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=e.getState(),s=o.items,a=e.getState(),l=a.itemStates,u=e.widthHasChanged?e.widthHasChanged.stateUpdate:e.getState(),h=u.itemHeights;K("~ Update items ~");var c=e.getItemsDiff(s,t);if(c){var f,d=e.widthHasChanged?e.widthHasChanged.stateUpdate:e.getState(),m=d.firstShownItemIndex,g=d.lastShownItemIndex,p=d.beforeItemsHeight,I=d.afterItemsHeight,v=0===m&&(r.preserveScrollPositionOnPrependItems||r.preserveScrollPosition),S=c.prependedItemsCount,y=c.appendedItemsCount;n=e.layout.getLayoutUpdateForItemsDiff({firstShownItemIndex:m,lastShownItemIndex:g,beforeItemsHeight:p,afterItemsHeight:I},{prependedItemsCount:S,appendedItemsCount:y},{itemsCount:t.length,columnsCount:e.getActualColumnsCount(),shouldRestoreScrollPosition:v,onResetGridLayout:function(){return f=!0}}),S>0&&(K("Prepend",S,"items"),h=new Array(S).concat(h),l&&(l=new Array(S).concat(l)),v?(K("Will restore scroll position"),e.listHeightMeasurement.snapshotListHeightBeforeAddingNewItems({previousItems:s,newItems:t,prependedItemsCount:S}),void 0!==e.firstNonMeasuredItemIndex&&(e.firstNonMeasuredItemIndex+=S)):(K("Reset layout"),f?(K("Reason: Prepended items count",S,"is not divisible by Columns Count",e.getActualColumnsCount()),h=new Array(t.length)):K("Reason: Prepended items' heights are unknown"),n=e.layout.getInitialLayoutValues({itemsCount:t.length,columnsCount:e.getActualColumnsCount()}),e.firstNonMeasuredItemIndex=void 0)),y>0&&(K("Append",y,"items"),h=h.concat(new Array(y)),l&&(l=l.concat(new Array(y)))),i={prepend:S>0,append:y>0}}else K("Items have changed, and",c?"a re-layout from scratch has been requested.":"it's not a simple append and/or prepend.","Rerender the entire list from scratch."),K("Previous items",s),K("New items",t),h=new Array(t.length),l=new Array(t.length),n=e.layout.getInitialLayoutValues({itemsCount:t.length,columnsCount:e.getActualColumnsCount()}),e.firstNonMeasuredItemIndex=void 0,e.listHeightMeasurement.reset(),i={replace:!0};K("~ Update state ~"),K("First shown item index",n.firstShownItemIndex),K("Last shown item index",n.lastShownItemIndex),K("Before items height",n.beforeItemsHeight),K("After items height (actual or estimated)",n.afterItemsHeight),e.onBeforeShowItems(t,h,n.firstShownItemIndex,n.lastShownItemIndex),e.newItemsWillBeRendered=nt(nt({},i),{},{count:t.length,layout:n});var b=nt(nt({},n),{},{items:t,itemStates:l,itemHeights:h});e.beforeResize.shouldIncludeBeforeResizeValuesInState()&&(e.shouldDiscardBeforeResizeItemHeights()?b.beforeResize=void 0:b.beforeResize=e.widthHasChanged?e.widthHasChanged.stateUpdate.beforeResize:e.getState().beforeResize),e._isSettingNewItems=!0,e.updateState(b)},this.getItemsDiff=function(t,n){return function(e,t,n){var i=-1,r=-1;if(e.length>0&&(i=function(e,t,n){for(var i=0;i<e.length;){if(n(e[i],t))return i;i++}return-1}(t,e[0],n),i>=0&&function(e,t,n,i){for(var r=0;r<e.length;){if(t.length<=n+r||!i(t[n+r],e[r]))return!1;r++}return!0}(e,t,i,n)&&(r=i+e.length-1)),i>=0&&r>=0)return{prependedItemsCount:i,appendedItemsCount:t.length-(r+1)}}(t,n,e.isItemEqual)}}function ot(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=i.render,o=i.state,s=i.onStateChange,a=i.initialScrollPosition,l=i.onScrollPositionChange,u=i.scrollableContainer,f=i.measureItemsBatchSize,d=void 0===f?50:f,m=i.getColumnsCount,g=i.getItemId,p=i.tbody,I=i.estimatedItemHeight,v=i.onItemInitialRender,S=i.onItemFirstRender,y=i._useTimeoutInRenderLoop,b=i._waitForScrollingToStop,w=i.engine,C=i.bypass,O=i.getScrollableContainer;if(K("~ Initialize ~"),this.engine=w||U,!O&&u&&(O=function(){return u}),this.getItemsContainerElement=e,i.getState||i.setState)throw new Error("[virtual-scroller] `getState`/`setState` options usage has changed in the new version. See the readme for more details.");if(p){if(this.engine!==U)throw new Error("[virtual-scroller] `tbody` option is only supported for DOM rendering engine");K("~ <tbody/> detected ~"),this.tbody=!0,c()||(K("~ <tbody/> not supported ~"),J(h),C=!0)}C&&K('~ "bypass" mode ~'),this.bypass=C,this._useTimeoutInRenderLoop=y,this.isItemEqual=g?function(e,t){return g(e)===g(t)}:function(e,t){return e===t},v?this.onItemInitialRender=v:S&&(this.onItemInitialRender=function(e){G("`onItemFirstRender(i)` is deprecated, use `onItemInitialRender(item)` instead.");var t=n.getState().items.indexOf(e);t>=0&&S(t)}),o&&(t=o.items),K("Items count",t.length),I&&K("Estimated item height",I),Ne.call(this,{state:o,onStateChange:s,render:r,items:t}),We.call(this),Ve.call(this,{getColumnsCount:m}),Ye.call(this),Ze.call(this),et.call(this),rt.call(this),st.call(this,{getScrollableContainer:O,estimatedItemHeight:I,measureItemsBatchSize:d,initialScrollPosition:a,onScrollPositionChange:l,waitForScrollingToStop:b}),o&&(this.itemHeights.readItemHeightsFromState(o),this.beforeResize.initializeFromState(o))}function st(e){var t=this,n=e.getScrollableContainer,i=e.estimatedItemHeight,r=e.measureItemsBatchSize,o=e.initialScrollPosition,s=e.onScrollPositionChange,a=e.waitForScrollingToStop;this.itemsContainer=this.engine.createItemsContainer(this.getItemsContainerElement),this.getItemsContainerElement()&&this.itemsContainer.clear(),this.scrollableContainer=this.engine.createScrollableContainer(n,this.getItemsContainerElement),this.itemHeights=new Le({container:this.itemsContainer,getItemHeight:function(e){return t.getState().itemHeights[e]},setItemHeight:function(e,n){return t.getState().itemHeights[e]=n}}),this.layout=new ie({bypass:this.bypass,estimatedItemHeight:i,measureItemsBatchSize:r,getPrerenderMargin:function(){return t.getPrerenderMargin()},getVerticalSpacing:function(){return t.getVerticalSpacing()},getVerticalSpacingBeforeResize:function(){return t.getVerticalSpacingBeforeResize()},getColumnsCount:function(){return t.getColumnsCount()},getColumnsCountBeforeResize:function(){return t.getState().beforeResize&&t.getState().beforeResize.columnsCount},getItemHeight:function(e){return t.getState().itemHeights[e]},getItemHeightBeforeResize:function(e){return t.getState().beforeResize&&t.getState().beforeResize.itemHeights[e]},getBeforeResizeItemsCount:function(){return t.getState().beforeResize?t.getState().beforeResize.itemHeights.length:0},getAverageItemHeight:function(){return t.itemHeights.getAverage()},getMaxVisibleAreaHeight:function(){return t.scrollableContainer&&t.scrollableContainer.getHeight()},getPreviouslyCalculatedLayout:function(){return t.previouslyCalculatedLayout}}),this.resize=new pe({bypass:this.bypass,getWidth:function(){return t.scrollableContainer.getWidth()},getHeight:function(){return t.scrollableContainer.getHeight()},listenForResize:function(e){return t.scrollableContainer.onResize(e)},onResizeStart:function(){K("~ Scrollable container resize started ~"),t._isResizing=!0},onResizeStop:function(){K("~ Scrollable container resize finished ~"),t._isResizing=void 0},onNoChange:function(){t.onUpdateShownItemIndexes({reason:ce})},onHeightChange:function(){return t.onUpdateShownItemIndexes({reason:he})},onWidthChange:function(e,n){K("~ Scrollable container width changed from",e,"to",n,"~"),t.onResize()}}),this.scroll=new He({bypass:this.bypass,scrollableContainer:this.scrollableContainer,itemsContainer:this.itemsContainer,waitForScrollingToStop:a,onScroll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delayed;t.onUpdateShownItemIndexes({reason:n?oe:re})},initialScrollPosition:o,onScrollPositionChange:s,isImmediateLayoutScheduled:function(){return Boolean(t.layoutTimer)},hasNonRenderedItemsAtTheTop:function(){return t.getState().firstShownItemIndex>0},hasNonRenderedItemsAtTheBottom:function(){return t.getState().lastShownItemIndex<t.getItemsCount()-1},getLatestLayoutVisibleArea:function(){return t.latestLayoutVisibleArea},getListTopOffset:this.getListTopOffsetInsideScrollableContainer,getPrerenderMargin:function(){return t.getPrerenderMargin()}}),this.listHeightMeasurement=new Te({itemsContainer:this.itemsContainer,getListTopOffset:this.getListTopOffsetInsideScrollableContainer}),this.engine.watchListTopOffset&&(this.listTopOffsetWatcher=this.engine.watchListTopOffset({getListTopOffset:this.getListTopOffsetInsideScrollableContainer,onListTopOffsetChange:function(e){return e.reason,t.onUpdateShownItemIndexes({reason:me})}})),this.beforeResize=new we({getState:this.getState,getVerticalSpacing:this.getVerticalSpacing,getColumnsCount:this.getColumnsCount})}function at(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function lt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?at(Object(n),!0).forEach((function(t){ct(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):at(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ut(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ht(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function ct(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ft=function(){function e(t,n){var i=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};ut(this,e),ct(this,"stop",(function(){if(!i._isActive)throw new Error("[virtual-scroller] Can't stop a `VirtualScroller` that hasn't been started");i._isActive=!1,K("~ Stop ~"),i.resize.stop(),i.scroll.stop(),i.listTopOffsetWatcher&&i.listTopOffsetWatcher.isStarted()&&i.listTopOffsetWatcher.stop(),i.cancelLayoutTimer({})})),ct(this,"updateLayout",(function(){i.hasToBeStarted(),i.onUpdateShownItemIndexes({reason:se})})),ct(this,"onRender",(function(){i._onRender(i.getState(),i.previousState)})),ot.call(this,t,n,r)}var t,n,i;return t=e,n=[{key:"start",value:function(){if(this._isActive)throw new Error("[virtual-scroller] `VirtualScroller` has already been started");!1===this._isActive||(this._usesCustomStateStorage||this.useDefaultStateStorage(),this._render&&this._render(this.getState())),K("~ Start ~"),this._isActive=!0,this.listHeightMeasurement.reset(),this._isResizing=void 0,this._isSettingNewItems=void 0,this.tbody&&(this.getItemsContainerElement().classList.contains(f)&&Boolean(document.getElementById(d))||function(e){e.classList.add(f);var t=document.createElement("style");t.id=d,t.innerText="\n\t\ttbody.".concat(f,":before {\n\t\t\tcontent: '';\n\t\t\tdisplay: table-row;\n\t\t\theight: var(--VirtualScroller-paddingTop);\n\t\t}\n\t\ttbody.").concat(f,":after {\n\t\t\tcontent: '';\n\t\t\tdisplay: table-row;\n\t\t\theight: var(--VirtualScroller-paddingBottom);\n\t\t}\n\t").replace(/[\n\t]/g,""),document.head.appendChild(t)}(this.getItemsContainerElement()));var e=this._stoppedStateUpdate;this._stoppedStateUpdate=void 0,this.verticalSpacing=void 0;var t=this.measureItemHeightsAndSpacing();if(t&&(e=lt(lt({},e),t)),this.resize.start(),this.scroll.start(),void 0===this.getState().scrollableContainerWidth){var n=this.scrollableContainer.getWidth();e=lt(lt({},e),{},{scrollableContainerWidth:n})}else{var i=this.scrollableContainer.getWidth(),r=this.getState().scrollableContainerWidth;if(i!==r)return K("~ Scrollable container width changed from",r,"to",i,"~"),this.onResize()}if(this._usesCustomStateStorage&&this.getActualColumnsCount()!==(this.getState().columnsCount||1))return this.onResize();this.onUpdateShownItemIndexes({reason:ae,stateUpdate:e})}},{key:"hasToBeStarted",value:function(){if(!this._isActive)throw new Error("[virtual-scroller] `VirtualScroller` hasn't been started")}},{key:"getItemScrollPosition",value:function(e){var t=this.layout.getItemTopOffset(e);if(void 0!==t)return this.getListTopOffsetInsideScrollableContainer()+t}},{key:"onItemHeightChange",value:function(e){this.hasToBeStarted(),this._onItemHeightChange(e)}},{key:"onItemStateChange",value:function(e,t){this.hasToBeStarted(),this._onItemStateChange(e,t)}},{key:"setItems",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.hasToBeStarted(),this._setItems(e,t)}}],n&&ht(t.prototype,n),i&&ht(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function dt(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mt(t){var n=t.getItemId,i=e.useRef(),r=e.useMemo((function(){var e=0;return function(){i.current=String((e===Number.MAX_SAFE_INTEGER&&(e=0),++e))}}),[i]);e.useMemo((function(){r()}),[]);var o=e.useCallback((function(){n||r()}),[n,r]),s=e.useCallback((function(e,t){return n?n(e):"".concat(i.current,":").concat(t)}),[n,i]);return{getItemKey:s,updateItemKeysForNewItems:o}}var gt=["as","items","itemComponent","itemComponentProps","estimatedItemHeight","bypass","tbody","preserveScrollPosition","preserveScrollPositionOnPrependItems","measureItemsBatchSize","scrollableContainer","getScrollableContainer","getColumnsCount","getItemId","className","onMount","onItemFirstRender","onItemInitialRender","initialScrollPosition","onScrollPositionChange","onStateChange","initialState"];function pt(){return pt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},pt.apply(this,arguments)}function It(e,t){if(null==e)return{};var n,i,r=function(e,t){if(null==e)return{};var n,i,r={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function vt(t,n){var i=t.as,r=t.items,s=t.itemComponent,l=t.itemComponentProps,h=t.estimatedItemHeight,c=t.bypass,d=t.tbody,m=t.preserveScrollPosition,g=t.preserveScrollPositionOnPrependItems,p=t.measureItemsBatchSize,I=t.scrollableContainer,v=t.getScrollableContainer,S=t.getColumnsCount,y=t.getItemId,b=t.className,w=t.onMount,C=t.onItemFirstRender,O=t.onItemInitialRender,R=t.initialScrollPosition,H=t.onScrollPositionChange,x=t.onStateChange,P=t.initialState,T=It(t,gt),j=e.useRef(),L=function(t,n){var i=t.items,r=t.estimatedItemHeight,o=t.bypass,s=t.tbody,a=t.onItemInitialRender,l=t.onItemFirstRender,u=t.initialScrollPosition,h=t.onScrollPositionChange,c=t.measureItemsBatchSize,f=t.scrollableContainer,d=t.getScrollableContainer,m=t.getColumnsCount,g=t.getItemId,p=t.AsComponent,I=t.initialState,v=t.onStateChange,S=n.container;return e.useMemo((function(){var e;return new ft((function(){return S.current}),i,(dt(e={_useTimeoutInRenderLoop:!0,estimatedItemHeight:r,bypass:o,tbody:s,onItemInitialRender:a,onItemFirstRender:l,initialScrollPosition:u,onScrollPositionChange:h,measureItemsBatchSize:c,scrollableContainer:f,getScrollableContainer:d,getColumnsCount:m,getItemId:g},"tbody","tbody"===p),dt(e,"state",I),dt(e,"onStateChange",v),e))}),[])}({items:r,estimatedItemHeight:h,bypass:c,tbody:d,onItemInitialRender:O,onItemFirstRender:C,initialScrollPosition:R,onScrollPositionChange:H,measureItemsBatchSize:p,scrollableContainer:I,getScrollableContainer:v,getColumnsCount:S,getItemId:y,AsComponent:i,initialState:P,onStateChange:x},{container:j}),z=function(t){var n=t.initialState,i=t.onRender,r=t.items,s=a(e.useState(),2),l=s[0],u=s[1],h=e.useRef(n),c=e.useRef(n);return h.current!==c.current&&(h.current=l),e.useLayoutEffect((function(){i()}),[l,r]),{getState:function(){return h.current},updateState:function(e){var t=o(o({},c.current),e);c.current=t,e.items?h.current=t:u(t)}}}({initialState:e.useMemo((function(){return L.getInitialState()}),[]),onRender:L.onRender,items:r}),A=z.getState,B=z.updateState;e.useMemo((function(){L.useState({getState:A,updateState:B})}),[]),function(t){e.useLayoutEffect((function(){return t.start(),function(){t.stop()}}),[])}(L);var M=mt({getItemId:y}),E=M.getItemKey,k=M.updateItemKeysForNewItems,_=function(t){var n=t.items,i=t.virtualScroller,r=e.useMemo((function(){return new Array(n.length)}),[]),o=e.useRef(r),s=e.useCallback((function(e){return o.current[e]||(o.current[e]=function(t){return i.onItemStateChange(e,t)}),o.current[e]}),[i,o]);return s}({items:r,virtualScroller:L}),N=function(t){var n=t.items,i=t.virtualScroller,r=e.useMemo((function(){return new Array(n.length)}),[]),o=e.useRef(r),s=e.useCallback((function(e){return o.current[e]||(o.current[e]=function(){return i.onItemHeightChange(e)}),o.current[e]}),[i,o]);return s}({items:r,virtualScroller:L});!function(t,n){var i=n.virtualScroller,r=n.preserveScrollPosition,o=n.preserveScrollPositionOnPrependItems,s=n.updateItemKeysForNewItems,a=i.getState(),l=a.items;a.firstShownItemIndex;var u=e.useRef(t),h=t!==u.current;if(u.current=t,h){var c=!0,f=!0,d=i.getItemsDiff(l,t);if(d){var m=d.prependedItemsCount,g=d.appendedItemsCount;0===m&&0===g?(c=!1,f=!1):0===m&&g>0&&(f=!1)}c&&(i.setItems(t,{preserveScrollPositionOnPrependItems:o||r}),f&&s())}}(r,{virtualScroller:L,preserveScrollPosition:m,preserveScrollPositionOnPrependItems:g,updateItemKeysForNewItems:k}),function(t,n){var i=n.virtualScroller;e.useImperativeHandle(t,(function(){return{updateLayout:function(){return i.updateLayout()},layout:function(){return i.updateLayout()},updateItem:function(e){return J('[virtual-scroller] ".updateItem(i)" method of React <VirtualScroller/> has been removed')},renderItem:function(e){return J('[virtual-scroller] ".renderItem(i)" method of React <VirtualScroller/> has been removed')}}}),[i])}(n,{virtualScroller:L}),e.useLayoutEffect((function(){w&&w()}),[]),b=function(e,t){return t.tbody?e?e+" "+f:f:e}(b,{tbody:d});var W=function(e){var t=e.tbody,n=e.virtualScroller;if(!t){var i=n.getState(),r=i.beforeItemsHeight,o=i.afterItemsHeight;return{paddingTop:u(r),paddingBottom:u(o)}}}({tbody:d,virtualScroller:L}),V=L.getState(),D=V.items,F=V.itemStates,U=V.firstShownItemIndex,Y=V.lastShownItemIndex;return React.createElement(i,pt({},T,{ref:j,className:b,style:W}),D.map((function(e,t){return t>=U&&t<=Y?React.createElement(s,pt({},l,{key:E(e,t),state:F&&F[t],onStateChange:_(t),onHeightChange:N(t)}),e):null})))}var St=vt=React.forwardRef(vt),yt=i.default.elementType||i.default.oneOfType([i.default.string,i.default.func,i.default.object]);return vt.propTypes={as:yt,items:i.default.arrayOf(i.default.any).isRequired,itemComponent:yt.isRequired,itemComponentProps:i.default.object,estimatedItemHeight:i.default.number,bypass:i.default.bool,tbody:i.default.bool,preserveScrollPositionOnPrependItems:i.default.bool,preserveScrollPosition:i.default.bool,measureItemsBatchSize:i.default.number,scrollableContainer:i.default.any,getScrollableContainer:i.default.func,getColumnsCount:i.default.func,getItemId:i.default.func,className:i.default.string,onMount:i.default.func,onItemInitialRender:i.default.func,onItemFirstRender:i.default.func,initialScrollPosition:i.default.number,onScrollPositionChange:i.default.func,onStateChange:i.default.func,initialState:i.default.shape({items:i.default.arrayOf(i.default.object).isRequired,itemStates:i.default.arrayOf(i.default.any),firstShownItemIndex:i.default.number.isRequired,lastShownItemIndex:i.default.number.isRequired,beforeItemsHeight:i.default.number.isRequired,afterItemsHeight:i.default.number.isRequired,itemHeights:i.default.arrayOf(i.default.number).isRequired,columnsCount:i.default.number,verticalSpacing:i.default.number})},vt.defaultProps={as:"div"},St}));
2
2
  //# sourceMappingURL=virtual-scroller-react.js.map