lazy-render-virtual-scroll 1.5.0 → 1.7.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 (428) hide show
  1. package/README.md +49 -310
  2. package/dist/adapters/react/index.d.ts +187 -1
  3. package/dist/cjs/adapters/react/LazyList.js +377 -0
  4. package/dist/cjs/adapters/react/LazyList.js.map +1 -1
  5. package/dist/cjs/adapters/react/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  6. package/dist/cjs/adapters/react/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  7. package/dist/cjs/adapters/react/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  8. package/dist/cjs/adapters/react/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  9. package/dist/cjs/adapters/react/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  10. package/dist/cjs/adapters/react/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  11. package/dist/cjs/adapters/react/adapters/react/components/index.d.ts +7 -0
  12. package/dist/cjs/adapters/react/adapters/react/components/index.d.ts.map +1 -0
  13. package/dist/cjs/adapters/react/adapters/react/hooks/index.d.ts +7 -0
  14. package/dist/cjs/adapters/react/adapters/react/hooks/index.d.ts.map +1 -0
  15. package/dist/cjs/adapters/react/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  16. package/dist/cjs/adapters/react/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  17. package/dist/cjs/adapters/react/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  18. package/dist/cjs/adapters/react/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  19. package/dist/cjs/adapters/react/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  20. package/dist/cjs/adapters/react/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  21. package/dist/cjs/adapters/react/adapters/react/index.d.ts +2 -0
  22. package/dist/cjs/adapters/react/adapters/react/index.d.ts.map +1 -1
  23. package/dist/cjs/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  24. package/dist/cjs/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  25. package/dist/cjs/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  26. package/dist/cjs/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  27. package/dist/cjs/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  28. package/dist/cjs/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  29. package/dist/cjs/adapters/react/components/index.d.ts +7 -0
  30. package/dist/cjs/adapters/react/components/index.d.ts.map +1 -0
  31. package/dist/cjs/adapters/react/core/BatchSizeOptimizer.d.ts +84 -0
  32. package/dist/cjs/adapters/react/core/BatchSizeOptimizer.d.ts.map +1 -0
  33. package/dist/cjs/adapters/react/core/DynamicHeightEngine.d.ts +107 -0
  34. package/dist/cjs/adapters/react/core/DynamicHeightEngine.d.ts.map +1 -0
  35. package/dist/cjs/adapters/react/core/Engine.d.ts +3 -0
  36. package/dist/cjs/adapters/react/core/Engine.d.ts.map +1 -1
  37. package/dist/cjs/adapters/react/core/HeightMeasurementCache.d.ts +92 -0
  38. package/dist/cjs/adapters/react/core/HeightMeasurementCache.d.ts.map +1 -0
  39. package/dist/cjs/adapters/react/core/IntelligentPagination.d.ts +113 -0
  40. package/dist/cjs/adapters/react/core/IntelligentPagination.d.ts.map +1 -0
  41. package/dist/cjs/adapters/react/core/PreemptiveCache.d.ts +83 -0
  42. package/dist/cjs/adapters/react/core/PreemptiveCache.d.ts.map +1 -0
  43. package/dist/cjs/adapters/react/core/PriorityRequestQueue.d.ts +56 -0
  44. package/dist/cjs/adapters/react/core/PriorityRequestQueue.d.ts.map +1 -0
  45. package/dist/cjs/adapters/react/core/RequestDeduplicator.d.ts +35 -0
  46. package/dist/cjs/adapters/react/core/RequestDeduplicator.d.ts.map +1 -0
  47. package/dist/cjs/adapters/react/core/SmartPrefetchAlgorithm.d.ts +63 -0
  48. package/dist/cjs/adapters/react/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  49. package/dist/cjs/adapters/react/core/VariableHeightManager.d.ts +84 -0
  50. package/dist/cjs/adapters/react/core/VariableHeightManager.d.ts.map +1 -0
  51. package/dist/cjs/adapters/react/hooks/index.d.ts +7 -0
  52. package/dist/cjs/adapters/react/hooks/index.d.ts.map +1 -0
  53. package/dist/cjs/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  54. package/dist/cjs/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  55. package/dist/cjs/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  56. package/dist/cjs/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  57. package/dist/cjs/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  58. package/dist/cjs/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  59. package/dist/cjs/adapters/react/index.d.ts +9 -0
  60. package/dist/cjs/adapters/react/index.d.ts.map +1 -1
  61. package/dist/cjs/adapters/react/index.js +1738 -0
  62. package/dist/cjs/adapters/react/index.js.map +1 -1
  63. package/dist/cjs/adapters/react/useLazyList.js +377 -0
  64. package/dist/cjs/adapters/react/useLazyList.js.map +1 -1
  65. package/dist/cjs/angular/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  66. package/dist/cjs/angular/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  67. package/dist/cjs/angular/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  68. package/dist/cjs/angular/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  69. package/dist/cjs/angular/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  70. package/dist/cjs/angular/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  71. package/dist/cjs/angular/adapters/react/components/index.d.ts +7 -0
  72. package/dist/cjs/angular/adapters/react/components/index.d.ts.map +1 -0
  73. package/dist/cjs/angular/adapters/react/hooks/index.d.ts +7 -0
  74. package/dist/cjs/angular/adapters/react/hooks/index.d.ts.map +1 -0
  75. package/dist/cjs/angular/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  76. package/dist/cjs/angular/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  77. package/dist/cjs/angular/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  78. package/dist/cjs/angular/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  79. package/dist/cjs/angular/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  80. package/dist/cjs/angular/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  81. package/dist/cjs/angular/adapters/react/index.d.ts +2 -0
  82. package/dist/cjs/angular/adapters/react/index.d.ts.map +1 -1
  83. package/dist/cjs/angular/core/BatchSizeOptimizer.d.ts +84 -0
  84. package/dist/cjs/angular/core/BatchSizeOptimizer.d.ts.map +1 -0
  85. package/dist/cjs/angular/core/DynamicHeightEngine.d.ts +107 -0
  86. package/dist/cjs/angular/core/DynamicHeightEngine.d.ts.map +1 -0
  87. package/dist/cjs/angular/core/Engine.d.ts +3 -0
  88. package/dist/cjs/angular/core/Engine.d.ts.map +1 -1
  89. package/dist/cjs/angular/core/HeightMeasurementCache.d.ts +92 -0
  90. package/dist/cjs/angular/core/HeightMeasurementCache.d.ts.map +1 -0
  91. package/dist/cjs/angular/core/IntelligentPagination.d.ts +113 -0
  92. package/dist/cjs/angular/core/IntelligentPagination.d.ts.map +1 -0
  93. package/dist/cjs/angular/core/PreemptiveCache.d.ts +83 -0
  94. package/dist/cjs/angular/core/PreemptiveCache.d.ts.map +1 -0
  95. package/dist/cjs/angular/core/PriorityRequestQueue.d.ts +56 -0
  96. package/dist/cjs/angular/core/PriorityRequestQueue.d.ts.map +1 -0
  97. package/dist/cjs/angular/core/RequestDeduplicator.d.ts +35 -0
  98. package/dist/cjs/angular/core/RequestDeduplicator.d.ts.map +1 -0
  99. package/dist/cjs/angular/core/SmartPrefetchAlgorithm.d.ts +63 -0
  100. package/dist/cjs/angular/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  101. package/dist/cjs/angular/core/VariableHeightManager.d.ts +84 -0
  102. package/dist/cjs/angular/core/VariableHeightManager.d.ts.map +1 -0
  103. package/dist/cjs/angular/index.d.ts +9 -0
  104. package/dist/cjs/angular/index.d.ts.map +1 -1
  105. package/dist/cjs/angular/index.js +377 -0
  106. package/dist/cjs/angular/index.js.map +1 -1
  107. package/dist/cjs/core/BatchSizeOptimizer.d.ts +84 -0
  108. package/dist/cjs/core/BatchSizeOptimizer.d.ts.map +1 -0
  109. package/dist/cjs/core/DynamicHeightEngine.d.ts +107 -0
  110. package/dist/cjs/core/DynamicHeightEngine.d.ts.map +1 -0
  111. package/dist/cjs/core/Engine.d.ts +3 -0
  112. package/dist/cjs/core/Engine.d.ts.map +1 -1
  113. package/dist/cjs/core/HeightMeasurementCache.d.ts +92 -0
  114. package/dist/cjs/core/HeightMeasurementCache.d.ts.map +1 -0
  115. package/dist/cjs/core/IntelligentPagination.d.ts +113 -0
  116. package/dist/cjs/core/IntelligentPagination.d.ts.map +1 -0
  117. package/dist/cjs/core/PreemptiveCache.d.ts +83 -0
  118. package/dist/cjs/core/PreemptiveCache.d.ts.map +1 -0
  119. package/dist/cjs/core/PriorityRequestQueue.d.ts +56 -0
  120. package/dist/cjs/core/PriorityRequestQueue.d.ts.map +1 -0
  121. package/dist/cjs/core/RequestDeduplicator.d.ts +35 -0
  122. package/dist/cjs/core/RequestDeduplicator.d.ts.map +1 -0
  123. package/dist/cjs/core/SmartPrefetchAlgorithm.d.ts +63 -0
  124. package/dist/cjs/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  125. package/dist/cjs/core/VariableHeightManager.d.ts +84 -0
  126. package/dist/cjs/core/VariableHeightManager.d.ts.map +1 -0
  127. package/dist/cjs/index.d.ts +9 -0
  128. package/dist/cjs/index.d.ts.map +1 -1
  129. package/dist/cjs/index.js +1545 -0
  130. package/dist/cjs/index.js.map +1 -1
  131. package/dist/cjs/svelte/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  132. package/dist/cjs/svelte/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  133. package/dist/cjs/svelte/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  134. package/dist/cjs/svelte/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  135. package/dist/cjs/svelte/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  136. package/dist/cjs/svelte/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  137. package/dist/cjs/svelte/adapters/react/components/index.d.ts +7 -0
  138. package/dist/cjs/svelte/adapters/react/components/index.d.ts.map +1 -0
  139. package/dist/cjs/svelte/adapters/react/hooks/index.d.ts +7 -0
  140. package/dist/cjs/svelte/adapters/react/hooks/index.d.ts.map +1 -0
  141. package/dist/cjs/svelte/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  142. package/dist/cjs/svelte/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  143. package/dist/cjs/svelte/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  144. package/dist/cjs/svelte/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  145. package/dist/cjs/svelte/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  146. package/dist/cjs/svelte/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  147. package/dist/cjs/svelte/adapters/react/index.d.ts +2 -0
  148. package/dist/cjs/svelte/adapters/react/index.d.ts.map +1 -1
  149. package/dist/cjs/svelte/core/BatchSizeOptimizer.d.ts +84 -0
  150. package/dist/cjs/svelte/core/BatchSizeOptimizer.d.ts.map +1 -0
  151. package/dist/cjs/svelte/core/DynamicHeightEngine.d.ts +107 -0
  152. package/dist/cjs/svelte/core/DynamicHeightEngine.d.ts.map +1 -0
  153. package/dist/cjs/svelte/core/Engine.d.ts +3 -0
  154. package/dist/cjs/svelte/core/Engine.d.ts.map +1 -1
  155. package/dist/cjs/svelte/core/HeightMeasurementCache.d.ts +92 -0
  156. package/dist/cjs/svelte/core/HeightMeasurementCache.d.ts.map +1 -0
  157. package/dist/cjs/svelte/core/IntelligentPagination.d.ts +113 -0
  158. package/dist/cjs/svelte/core/IntelligentPagination.d.ts.map +1 -0
  159. package/dist/cjs/svelte/core/PreemptiveCache.d.ts +83 -0
  160. package/dist/cjs/svelte/core/PreemptiveCache.d.ts.map +1 -0
  161. package/dist/cjs/svelte/core/PriorityRequestQueue.d.ts +56 -0
  162. package/dist/cjs/svelte/core/PriorityRequestQueue.d.ts.map +1 -0
  163. package/dist/cjs/svelte/core/RequestDeduplicator.d.ts +35 -0
  164. package/dist/cjs/svelte/core/RequestDeduplicator.d.ts.map +1 -0
  165. package/dist/cjs/svelte/core/SmartPrefetchAlgorithm.d.ts +63 -0
  166. package/dist/cjs/svelte/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  167. package/dist/cjs/svelte/core/VariableHeightManager.d.ts +84 -0
  168. package/dist/cjs/svelte/core/VariableHeightManager.d.ts.map +1 -0
  169. package/dist/cjs/svelte/index.d.ts +9 -0
  170. package/dist/cjs/svelte/index.d.ts.map +1 -1
  171. package/dist/cjs/svelte/index.js +377 -0
  172. package/dist/cjs/svelte/index.js.map +1 -1
  173. package/dist/cjs/vue/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  174. package/dist/cjs/vue/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  175. package/dist/cjs/vue/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  176. package/dist/cjs/vue/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  177. package/dist/cjs/vue/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  178. package/dist/cjs/vue/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  179. package/dist/cjs/vue/adapters/react/components/index.d.ts +7 -0
  180. package/dist/cjs/vue/adapters/react/components/index.d.ts.map +1 -0
  181. package/dist/cjs/vue/adapters/react/hooks/index.d.ts +7 -0
  182. package/dist/cjs/vue/adapters/react/hooks/index.d.ts.map +1 -0
  183. package/dist/cjs/vue/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  184. package/dist/cjs/vue/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  185. package/dist/cjs/vue/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  186. package/dist/cjs/vue/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  187. package/dist/cjs/vue/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  188. package/dist/cjs/vue/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  189. package/dist/cjs/vue/adapters/react/index.d.ts +2 -0
  190. package/dist/cjs/vue/adapters/react/index.d.ts.map +1 -1
  191. package/dist/cjs/vue/core/BatchSizeOptimizer.d.ts +84 -0
  192. package/dist/cjs/vue/core/BatchSizeOptimizer.d.ts.map +1 -0
  193. package/dist/cjs/vue/core/DynamicHeightEngine.d.ts +107 -0
  194. package/dist/cjs/vue/core/DynamicHeightEngine.d.ts.map +1 -0
  195. package/dist/cjs/vue/core/Engine.d.ts +3 -0
  196. package/dist/cjs/vue/core/Engine.d.ts.map +1 -1
  197. package/dist/cjs/vue/core/HeightMeasurementCache.d.ts +92 -0
  198. package/dist/cjs/vue/core/HeightMeasurementCache.d.ts.map +1 -0
  199. package/dist/cjs/vue/core/IntelligentPagination.d.ts +113 -0
  200. package/dist/cjs/vue/core/IntelligentPagination.d.ts.map +1 -0
  201. package/dist/cjs/vue/core/PreemptiveCache.d.ts +83 -0
  202. package/dist/cjs/vue/core/PreemptiveCache.d.ts.map +1 -0
  203. package/dist/cjs/vue/core/PriorityRequestQueue.d.ts +56 -0
  204. package/dist/cjs/vue/core/PriorityRequestQueue.d.ts.map +1 -0
  205. package/dist/cjs/vue/core/RequestDeduplicator.d.ts +35 -0
  206. package/dist/cjs/vue/core/RequestDeduplicator.d.ts.map +1 -0
  207. package/dist/cjs/vue/core/SmartPrefetchAlgorithm.d.ts +63 -0
  208. package/dist/cjs/vue/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  209. package/dist/cjs/vue/core/VariableHeightManager.d.ts +84 -0
  210. package/dist/cjs/vue/core/VariableHeightManager.d.ts.map +1 -0
  211. package/dist/cjs/vue/index.d.ts +9 -0
  212. package/dist/cjs/vue/index.d.ts.map +1 -1
  213. package/dist/cjs/vue/index.js +377 -0
  214. package/dist/cjs/vue/index.js.map +1 -1
  215. package/dist/esm/adapters/react/LazyList.js +377 -0
  216. package/dist/esm/adapters/react/LazyList.js.map +1 -1
  217. package/dist/esm/adapters/react/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  218. package/dist/esm/adapters/react/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  219. package/dist/esm/adapters/react/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  220. package/dist/esm/adapters/react/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  221. package/dist/esm/adapters/react/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  222. package/dist/esm/adapters/react/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  223. package/dist/esm/adapters/react/adapters/react/components/index.d.ts +7 -0
  224. package/dist/esm/adapters/react/adapters/react/components/index.d.ts.map +1 -0
  225. package/dist/esm/adapters/react/adapters/react/hooks/index.d.ts +7 -0
  226. package/dist/esm/adapters/react/adapters/react/hooks/index.d.ts.map +1 -0
  227. package/dist/esm/adapters/react/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  228. package/dist/esm/adapters/react/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  229. package/dist/esm/adapters/react/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  230. package/dist/esm/adapters/react/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  231. package/dist/esm/adapters/react/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  232. package/dist/esm/adapters/react/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  233. package/dist/esm/adapters/react/adapters/react/index.d.ts +2 -0
  234. package/dist/esm/adapters/react/adapters/react/index.d.ts.map +1 -1
  235. package/dist/esm/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  236. package/dist/esm/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  237. package/dist/esm/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  238. package/dist/esm/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  239. package/dist/esm/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  240. package/dist/esm/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  241. package/dist/esm/adapters/react/components/index.d.ts +7 -0
  242. package/dist/esm/adapters/react/components/index.d.ts.map +1 -0
  243. package/dist/esm/adapters/react/core/BatchSizeOptimizer.d.ts +84 -0
  244. package/dist/esm/adapters/react/core/BatchSizeOptimizer.d.ts.map +1 -0
  245. package/dist/esm/adapters/react/core/DynamicHeightEngine.d.ts +107 -0
  246. package/dist/esm/adapters/react/core/DynamicHeightEngine.d.ts.map +1 -0
  247. package/dist/esm/adapters/react/core/Engine.d.ts +3 -0
  248. package/dist/esm/adapters/react/core/Engine.d.ts.map +1 -1
  249. package/dist/esm/adapters/react/core/HeightMeasurementCache.d.ts +92 -0
  250. package/dist/esm/adapters/react/core/HeightMeasurementCache.d.ts.map +1 -0
  251. package/dist/esm/adapters/react/core/IntelligentPagination.d.ts +113 -0
  252. package/dist/esm/adapters/react/core/IntelligentPagination.d.ts.map +1 -0
  253. package/dist/esm/adapters/react/core/PreemptiveCache.d.ts +83 -0
  254. package/dist/esm/adapters/react/core/PreemptiveCache.d.ts.map +1 -0
  255. package/dist/esm/adapters/react/core/PriorityRequestQueue.d.ts +56 -0
  256. package/dist/esm/adapters/react/core/PriorityRequestQueue.d.ts.map +1 -0
  257. package/dist/esm/adapters/react/core/RequestDeduplicator.d.ts +35 -0
  258. package/dist/esm/adapters/react/core/RequestDeduplicator.d.ts.map +1 -0
  259. package/dist/esm/adapters/react/core/SmartPrefetchAlgorithm.d.ts +63 -0
  260. package/dist/esm/adapters/react/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  261. package/dist/esm/adapters/react/core/VariableHeightManager.d.ts +84 -0
  262. package/dist/esm/adapters/react/core/VariableHeightManager.d.ts.map +1 -0
  263. package/dist/esm/adapters/react/hooks/index.d.ts +7 -0
  264. package/dist/esm/adapters/react/hooks/index.d.ts.map +1 -0
  265. package/dist/esm/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  266. package/dist/esm/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  267. package/dist/esm/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  268. package/dist/esm/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  269. package/dist/esm/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  270. package/dist/esm/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  271. package/dist/esm/adapters/react/index.d.ts +9 -0
  272. package/dist/esm/adapters/react/index.d.ts.map +1 -1
  273. package/dist/esm/adapters/react/index.js +1733 -1
  274. package/dist/esm/adapters/react/index.js.map +1 -1
  275. package/dist/esm/adapters/react/useLazyList.js +377 -0
  276. package/dist/esm/adapters/react/useLazyList.js.map +1 -1
  277. package/dist/esm/angular/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  278. package/dist/esm/angular/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  279. package/dist/esm/angular/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  280. package/dist/esm/angular/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  281. package/dist/esm/angular/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  282. package/dist/esm/angular/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  283. package/dist/esm/angular/adapters/react/components/index.d.ts +7 -0
  284. package/dist/esm/angular/adapters/react/components/index.d.ts.map +1 -0
  285. package/dist/esm/angular/adapters/react/hooks/index.d.ts +7 -0
  286. package/dist/esm/angular/adapters/react/hooks/index.d.ts.map +1 -0
  287. package/dist/esm/angular/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  288. package/dist/esm/angular/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  289. package/dist/esm/angular/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  290. package/dist/esm/angular/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  291. package/dist/esm/angular/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  292. package/dist/esm/angular/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  293. package/dist/esm/angular/adapters/react/index.d.ts +2 -0
  294. package/dist/esm/angular/adapters/react/index.d.ts.map +1 -1
  295. package/dist/esm/angular/core/BatchSizeOptimizer.d.ts +84 -0
  296. package/dist/esm/angular/core/BatchSizeOptimizer.d.ts.map +1 -0
  297. package/dist/esm/angular/core/DynamicHeightEngine.d.ts +107 -0
  298. package/dist/esm/angular/core/DynamicHeightEngine.d.ts.map +1 -0
  299. package/dist/esm/angular/core/Engine.d.ts +3 -0
  300. package/dist/esm/angular/core/Engine.d.ts.map +1 -1
  301. package/dist/esm/angular/core/HeightMeasurementCache.d.ts +92 -0
  302. package/dist/esm/angular/core/HeightMeasurementCache.d.ts.map +1 -0
  303. package/dist/esm/angular/core/IntelligentPagination.d.ts +113 -0
  304. package/dist/esm/angular/core/IntelligentPagination.d.ts.map +1 -0
  305. package/dist/esm/angular/core/PreemptiveCache.d.ts +83 -0
  306. package/dist/esm/angular/core/PreemptiveCache.d.ts.map +1 -0
  307. package/dist/esm/angular/core/PriorityRequestQueue.d.ts +56 -0
  308. package/dist/esm/angular/core/PriorityRequestQueue.d.ts.map +1 -0
  309. package/dist/esm/angular/core/RequestDeduplicator.d.ts +35 -0
  310. package/dist/esm/angular/core/RequestDeduplicator.d.ts.map +1 -0
  311. package/dist/esm/angular/core/SmartPrefetchAlgorithm.d.ts +63 -0
  312. package/dist/esm/angular/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  313. package/dist/esm/angular/core/VariableHeightManager.d.ts +84 -0
  314. package/dist/esm/angular/core/VariableHeightManager.d.ts.map +1 -0
  315. package/dist/esm/angular/index.d.ts +9 -0
  316. package/dist/esm/angular/index.d.ts.map +1 -1
  317. package/dist/esm/angular/index.js +377 -0
  318. package/dist/esm/angular/index.js.map +1 -1
  319. package/dist/esm/core/BatchSizeOptimizer.d.ts +84 -0
  320. package/dist/esm/core/BatchSizeOptimizer.d.ts.map +1 -0
  321. package/dist/esm/core/DynamicHeightEngine.d.ts +107 -0
  322. package/dist/esm/core/DynamicHeightEngine.d.ts.map +1 -0
  323. package/dist/esm/core/Engine.d.ts +3 -0
  324. package/dist/esm/core/Engine.d.ts.map +1 -1
  325. package/dist/esm/core/HeightMeasurementCache.d.ts +92 -0
  326. package/dist/esm/core/HeightMeasurementCache.d.ts.map +1 -0
  327. package/dist/esm/core/IntelligentPagination.d.ts +113 -0
  328. package/dist/esm/core/IntelligentPagination.d.ts.map +1 -0
  329. package/dist/esm/core/PreemptiveCache.d.ts +83 -0
  330. package/dist/esm/core/PreemptiveCache.d.ts.map +1 -0
  331. package/dist/esm/core/PriorityRequestQueue.d.ts +56 -0
  332. package/dist/esm/core/PriorityRequestQueue.d.ts.map +1 -0
  333. package/dist/esm/core/RequestDeduplicator.d.ts +35 -0
  334. package/dist/esm/core/RequestDeduplicator.d.ts.map +1 -0
  335. package/dist/esm/core/SmartPrefetchAlgorithm.d.ts +63 -0
  336. package/dist/esm/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  337. package/dist/esm/core/VariableHeightManager.d.ts +84 -0
  338. package/dist/esm/core/VariableHeightManager.d.ts.map +1 -0
  339. package/dist/esm/index.d.ts +9 -0
  340. package/dist/esm/index.d.ts.map +1 -1
  341. package/dist/esm/index.js +1537 -1
  342. package/dist/esm/index.js.map +1 -1
  343. package/dist/esm/svelte/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  344. package/dist/esm/svelte/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  345. package/dist/esm/svelte/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  346. package/dist/esm/svelte/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  347. package/dist/esm/svelte/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  348. package/dist/esm/svelte/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  349. package/dist/esm/svelte/adapters/react/components/index.d.ts +7 -0
  350. package/dist/esm/svelte/adapters/react/components/index.d.ts.map +1 -0
  351. package/dist/esm/svelte/adapters/react/hooks/index.d.ts +7 -0
  352. package/dist/esm/svelte/adapters/react/hooks/index.d.ts.map +1 -0
  353. package/dist/esm/svelte/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  354. package/dist/esm/svelte/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  355. package/dist/esm/svelte/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  356. package/dist/esm/svelte/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  357. package/dist/esm/svelte/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  358. package/dist/esm/svelte/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  359. package/dist/esm/svelte/adapters/react/index.d.ts +2 -0
  360. package/dist/esm/svelte/adapters/react/index.d.ts.map +1 -1
  361. package/dist/esm/svelte/core/BatchSizeOptimizer.d.ts +84 -0
  362. package/dist/esm/svelte/core/BatchSizeOptimizer.d.ts.map +1 -0
  363. package/dist/esm/svelte/core/DynamicHeightEngine.d.ts +107 -0
  364. package/dist/esm/svelte/core/DynamicHeightEngine.d.ts.map +1 -0
  365. package/dist/esm/svelte/core/Engine.d.ts +3 -0
  366. package/dist/esm/svelte/core/Engine.d.ts.map +1 -1
  367. package/dist/esm/svelte/core/HeightMeasurementCache.d.ts +92 -0
  368. package/dist/esm/svelte/core/HeightMeasurementCache.d.ts.map +1 -0
  369. package/dist/esm/svelte/core/IntelligentPagination.d.ts +113 -0
  370. package/dist/esm/svelte/core/IntelligentPagination.d.ts.map +1 -0
  371. package/dist/esm/svelte/core/PreemptiveCache.d.ts +83 -0
  372. package/dist/esm/svelte/core/PreemptiveCache.d.ts.map +1 -0
  373. package/dist/esm/svelte/core/PriorityRequestQueue.d.ts +56 -0
  374. package/dist/esm/svelte/core/PriorityRequestQueue.d.ts.map +1 -0
  375. package/dist/esm/svelte/core/RequestDeduplicator.d.ts +35 -0
  376. package/dist/esm/svelte/core/RequestDeduplicator.d.ts.map +1 -0
  377. package/dist/esm/svelte/core/SmartPrefetchAlgorithm.d.ts +63 -0
  378. package/dist/esm/svelte/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  379. package/dist/esm/svelte/core/VariableHeightManager.d.ts +84 -0
  380. package/dist/esm/svelte/core/VariableHeightManager.d.ts.map +1 -0
  381. package/dist/esm/svelte/index.d.ts +9 -0
  382. package/dist/esm/svelte/index.d.ts.map +1 -1
  383. package/dist/esm/svelte/index.js +377 -0
  384. package/dist/esm/svelte/index.js.map +1 -1
  385. package/dist/esm/vue/adapters/react/components/AdaptiveScrollView.d.ts +16 -0
  386. package/dist/esm/vue/adapters/react/components/AdaptiveScrollView.d.ts.map +1 -0
  387. package/dist/esm/vue/adapters/react/components/IntelligentLazyList.d.ts +16 -0
  388. package/dist/esm/vue/adapters/react/components/IntelligentLazyList.d.ts.map +1 -0
  389. package/dist/esm/vue/adapters/react/components/SmartInfiniteScroll.d.ts +15 -0
  390. package/dist/esm/vue/adapters/react/components/SmartInfiniteScroll.d.ts.map +1 -0
  391. package/dist/esm/vue/adapters/react/components/index.d.ts +7 -0
  392. package/dist/esm/vue/adapters/react/components/index.d.ts.map +1 -0
  393. package/dist/esm/vue/adapters/react/hooks/index.d.ts +7 -0
  394. package/dist/esm/vue/adapters/react/hooks/index.d.ts.map +1 -0
  395. package/dist/esm/vue/adapters/react/hooks/useAdaptiveLoading.d.ts +39 -0
  396. package/dist/esm/vue/adapters/react/hooks/useAdaptiveLoading.d.ts.map +1 -0
  397. package/dist/esm/vue/adapters/react/hooks/useIntelligentScroll.d.ts +37 -0
  398. package/dist/esm/vue/adapters/react/hooks/useIntelligentScroll.d.ts.map +1 -0
  399. package/dist/esm/vue/adapters/react/hooks/useSmartPagination.d.ts +57 -0
  400. package/dist/esm/vue/adapters/react/hooks/useSmartPagination.d.ts.map +1 -0
  401. package/dist/esm/vue/adapters/react/index.d.ts +2 -0
  402. package/dist/esm/vue/adapters/react/index.d.ts.map +1 -1
  403. package/dist/esm/vue/core/BatchSizeOptimizer.d.ts +84 -0
  404. package/dist/esm/vue/core/BatchSizeOptimizer.d.ts.map +1 -0
  405. package/dist/esm/vue/core/DynamicHeightEngine.d.ts +107 -0
  406. package/dist/esm/vue/core/DynamicHeightEngine.d.ts.map +1 -0
  407. package/dist/esm/vue/core/Engine.d.ts +3 -0
  408. package/dist/esm/vue/core/Engine.d.ts.map +1 -1
  409. package/dist/esm/vue/core/HeightMeasurementCache.d.ts +92 -0
  410. package/dist/esm/vue/core/HeightMeasurementCache.d.ts.map +1 -0
  411. package/dist/esm/vue/core/IntelligentPagination.d.ts +113 -0
  412. package/dist/esm/vue/core/IntelligentPagination.d.ts.map +1 -0
  413. package/dist/esm/vue/core/PreemptiveCache.d.ts +83 -0
  414. package/dist/esm/vue/core/PreemptiveCache.d.ts.map +1 -0
  415. package/dist/esm/vue/core/PriorityRequestQueue.d.ts +56 -0
  416. package/dist/esm/vue/core/PriorityRequestQueue.d.ts.map +1 -0
  417. package/dist/esm/vue/core/RequestDeduplicator.d.ts +35 -0
  418. package/dist/esm/vue/core/RequestDeduplicator.d.ts.map +1 -0
  419. package/dist/esm/vue/core/SmartPrefetchAlgorithm.d.ts +63 -0
  420. package/dist/esm/vue/core/SmartPrefetchAlgorithm.d.ts.map +1 -0
  421. package/dist/esm/vue/core/VariableHeightManager.d.ts +84 -0
  422. package/dist/esm/vue/core/VariableHeightManager.d.ts.map +1 -0
  423. package/dist/esm/vue/index.d.ts +9 -0
  424. package/dist/esm/vue/index.d.ts.map +1 -1
  425. package/dist/esm/vue/index.js +377 -0
  426. package/dist/esm/vue/index.js.map +1 -1
  427. package/dist/index.d.ts +681 -1
  428. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -1236,6 +1236,380 @@ class GPUAccelerator {
1236
1236
  }
1237
1237
  }
1238
1238
 
1239
+ /**
1240
+ * Batch Size Optimizer
1241
+ * Dynamically adjusts batch size based on scroll speed, network, and performance
1242
+ */
1243
+ class BatchSizeOptimizer {
1244
+ constructor(config, networkDetector, performanceMonitor) {
1245
+ this.scrollSpeedHistory = [];
1246
+ this.renderTimeHistory = [];
1247
+ this.HISTORY_SIZE = 10;
1248
+ this.config = {
1249
+ minBatchSize: (config === null || config === void 0 ? void 0 : config.minBatchSize) || 10,
1250
+ maxBatchSize: (config === null || config === void 0 ? void 0 : config.maxBatchSize) || 100,
1251
+ baseBatchSize: (config === null || config === void 0 ? void 0 : config.baseBatchSize) || 50,
1252
+ scrollSpeedThreshold: (config === null || config === void 0 ? void 0 : config.scrollSpeedThreshold) || 1.0
1253
+ };
1254
+ this.currentBatchSize = this.config.baseBatchSize;
1255
+ this.networkDetector = networkDetector || new NetworkSpeedDetector();
1256
+ this.performanceMonitor = performanceMonitor || new DevicePerformanceMonitor();
1257
+ }
1258
+ /**
1259
+ * Calculate optimal batch size based on all factors
1260
+ */
1261
+ async calculateOptimalBatchSize(scrollSpeed) {
1262
+ // Track scroll speed history
1263
+ this.trackScrollSpeed(scrollSpeed);
1264
+ // Get network quality
1265
+ const networkQuality = await this.networkDetector.assessConnectionQuality();
1266
+ // Get performance score
1267
+ const performanceScore = await this.performanceMonitor.assessPerformance();
1268
+ // Calculate batch size based on scroll speed
1269
+ const speedMultiplier = this.calculateSpeedMultiplier(scrollSpeed);
1270
+ // Calculate batch size based on network
1271
+ const networkMultiplier = this.calculateNetworkMultiplier(networkQuality);
1272
+ // Calculate batch size based on performance
1273
+ const performanceMultiplier = this.calculatePerformanceMultiplier(performanceScore);
1274
+ // Calculate final batch size
1275
+ const optimalBatchSize = Math.round(this.config.baseBatchSize * speedMultiplier * networkMultiplier * performanceMultiplier);
1276
+ // Apply min/max bounds
1277
+ this.currentBatchSize = Math.max(this.config.minBatchSize, Math.min(this.config.maxBatchSize, optimalBatchSize));
1278
+ return this.currentBatchSize;
1279
+ }
1280
+ /**
1281
+ * Calculate multiplier based on scroll speed
1282
+ */
1283
+ calculateSpeedMultiplier(scrollSpeed) {
1284
+ const avgScrollSpeed = this.getAverageScrollSpeed();
1285
+ // Fast scrolling = larger batches (preload more)
1286
+ if (Math.abs(avgScrollSpeed) > this.config.scrollSpeedThreshold * 2) {
1287
+ return 1.5; // 50% more items
1288
+ }
1289
+ else if (Math.abs(avgScrollSpeed) > this.config.scrollSpeedThreshold) {
1290
+ return 1.2; // 20% more items
1291
+ }
1292
+ else if (Math.abs(avgScrollSpeed) < 0.3) {
1293
+ return 0.8; // 20% fewer items (user reading carefully)
1294
+ }
1295
+ return 1.0; // Normal batch size
1296
+ }
1297
+ /**
1298
+ * Calculate multiplier based on network quality
1299
+ */
1300
+ calculateNetworkMultiplier(quality) {
1301
+ switch (quality) {
1302
+ case 'excellent':
1303
+ return 1.3; // Load more on fast network
1304
+ case 'good':
1305
+ return 1.1; // Slightly more
1306
+ case 'poor':
1307
+ return 0.6; // Load less on slow network
1308
+ case 'offline':
1309
+ return 0.3; // Minimal loading when offline
1310
+ default:
1311
+ return 1.0;
1312
+ }
1313
+ }
1314
+ /**
1315
+ * Calculate multiplier based on device performance
1316
+ */
1317
+ calculatePerformanceMultiplier(score) {
1318
+ // score is 0-1 (0 = poor, 1 = excellent)
1319
+ if (score > 0.8) {
1320
+ return 1.2; // High-performance device
1321
+ }
1322
+ else if (score > 0.5) {
1323
+ return 1.0; // Average device
1324
+ }
1325
+ else {
1326
+ return 0.7; // Low-performance device
1327
+ }
1328
+ }
1329
+ /**
1330
+ * Track scroll speed for averaging
1331
+ */
1332
+ trackScrollSpeed(speed) {
1333
+ this.scrollSpeedHistory.push(speed);
1334
+ if (this.scrollSpeedHistory.length > this.HISTORY_SIZE) {
1335
+ this.scrollSpeedHistory.shift();
1336
+ }
1337
+ }
1338
+ /**
1339
+ * Get average scroll speed
1340
+ */
1341
+ getAverageScrollSpeed() {
1342
+ if (this.scrollSpeedHistory.length === 0)
1343
+ return 0;
1344
+ const sum = this.scrollSpeedHistory.reduce((a, b) => a + b, 0);
1345
+ return sum / this.scrollSpeedHistory.length;
1346
+ }
1347
+ /**
1348
+ * Track render time for performance monitoring
1349
+ */
1350
+ trackRenderTime(renderTime) {
1351
+ this.renderTimeHistory.push(renderTime);
1352
+ if (this.renderTimeHistory.length > this.HISTORY_SIZE) {
1353
+ this.renderTimeHistory.shift();
1354
+ }
1355
+ }
1356
+ /**
1357
+ * Get average render time
1358
+ */
1359
+ getAverageRenderTime() {
1360
+ if (this.renderTimeHistory.length === 0)
1361
+ return 0;
1362
+ const sum = this.renderTimeHistory.reduce((a, b) => a + b, 0);
1363
+ return sum / this.renderTimeHistory.length;
1364
+ }
1365
+ /**
1366
+ * Get current batch metrics
1367
+ */
1368
+ getMetrics() {
1369
+ return {
1370
+ currentBatchSize: this.currentBatchSize,
1371
+ scrollSpeed: this.getAverageScrollSpeed(),
1372
+ networkQuality: 'good', // Would need to cache this
1373
+ performanceScore: 0.8, // Would need to cache this
1374
+ avgRenderTime: this.getAverageRenderTime()
1375
+ };
1376
+ }
1377
+ /**
1378
+ * Get current batch size
1379
+ */
1380
+ getCurrentBatchSize() {
1381
+ return this.currentBatchSize;
1382
+ }
1383
+ /**
1384
+ * Reset optimizer
1385
+ */
1386
+ reset() {
1387
+ this.scrollSpeedHistory = [];
1388
+ this.renderTimeHistory = [];
1389
+ this.currentBatchSize = this.config.baseBatchSize;
1390
+ }
1391
+ /**
1392
+ * Get optimization statistics
1393
+ */
1394
+ getStats() {
1395
+ return {
1396
+ avgScrollSpeed: this.getAverageScrollSpeed(),
1397
+ avgRenderTime: this.getAverageRenderTime(),
1398
+ currentBatchSize: this.currentBatchSize,
1399
+ totalAdjustments: this.scrollSpeedHistory.length
1400
+ };
1401
+ }
1402
+ }
1403
+
1404
+ /**
1405
+ * Request Deduplication
1406
+ * Prevents duplicate requests from being sent
1407
+ */
1408
+ class RequestDeduplicator {
1409
+ constructor() {
1410
+ this.pendingRequests = new Map();
1411
+ this.requestCount = new Map();
1412
+ }
1413
+ /**
1414
+ * Execute request with deduplication
1415
+ * If same request is already pending, return existing promise
1416
+ */
1417
+ async request(key, requestFn, ttl = 5000 // Time to live in ms
1418
+ ) {
1419
+ // Check if same request is already pending
1420
+ if (this.pendingRequests.has(key)) {
1421
+ console.log(`[RequestDeduplicator] Deduplicating request: ${key}`);
1422
+ return this.pendingRequests.get(key);
1423
+ }
1424
+ // Create new request
1425
+ const promise = requestFn()
1426
+ .then(result => {
1427
+ this.pendingRequests.delete(key);
1428
+ this.requestCount.delete(key);
1429
+ return result;
1430
+ })
1431
+ .catch(error => {
1432
+ this.pendingRequests.delete(key);
1433
+ this.requestCount.delete(key);
1434
+ throw error;
1435
+ });
1436
+ // Store pending request
1437
+ this.pendingRequests.set(key, promise);
1438
+ // Track request count for analytics
1439
+ const count = this.requestCount.get(key) || 0;
1440
+ this.requestCount.set(key, count + 1);
1441
+ // Auto cleanup after TTL
1442
+ setTimeout(() => {
1443
+ if (this.pendingRequests.has(key)) {
1444
+ this.pendingRequests.delete(key);
1445
+ }
1446
+ }, ttl);
1447
+ return promise;
1448
+ }
1449
+ /**
1450
+ * Clear specific request
1451
+ */
1452
+ clear(key) {
1453
+ this.pendingRequests.delete(key);
1454
+ this.requestCount.delete(key);
1455
+ }
1456
+ /**
1457
+ * Clear all requests
1458
+ */
1459
+ clearAll() {
1460
+ this.pendingRequests.clear();
1461
+ this.requestCount.clear();
1462
+ }
1463
+ /**
1464
+ * Get pending request count
1465
+ */
1466
+ getPendingCount() {
1467
+ return this.pendingRequests.size;
1468
+ }
1469
+ /**
1470
+ * Get request statistics
1471
+ */
1472
+ getStats() {
1473
+ const totalRequests = Array.from(this.requestCount.values()).reduce((a, b) => a + b, 0);
1474
+ const deduplicated = totalRequests - this.pendingRequests.size;
1475
+ return {
1476
+ pending: this.pendingRequests.size,
1477
+ totalRequests,
1478
+ deduplicationRate: totalRequests > 0 ? deduplicated / totalRequests : 0
1479
+ };
1480
+ }
1481
+ }
1482
+
1483
+ /**
1484
+ * Priority-based Request Queue
1485
+ * Processes high-priority requests first
1486
+ */
1487
+ var Priority;
1488
+ (function (Priority) {
1489
+ Priority[Priority["LOW"] = 0] = "LOW";
1490
+ Priority[Priority["NORMAL"] = 1] = "NORMAL";
1491
+ Priority[Priority["HIGH"] = 2] = "HIGH";
1492
+ Priority[Priority["CRITICAL"] = 3] = "CRITICAL";
1493
+ })(Priority || (Priority = {}));
1494
+ class PriorityRequestQueue {
1495
+ constructor(maxConcurrent = 2) {
1496
+ this.queues = new Map();
1497
+ this.processing = false;
1498
+ this.maxConcurrent = 2;
1499
+ this.activeRequests = 0;
1500
+ this.maxConcurrent = maxConcurrent;
1501
+ // Initialize priority queues
1502
+ Object.values(Priority).forEach(priority => {
1503
+ if (typeof priority === 'number') {
1504
+ this.queues.set(priority, []);
1505
+ }
1506
+ });
1507
+ }
1508
+ /**
1509
+ * Add request with priority
1510
+ */
1511
+ add(requestFn, priority = Priority.NORMAL) {
1512
+ return new Promise((resolve, reject) => {
1513
+ const request = {
1514
+ priority,
1515
+ requestFn: () => requestFn(),
1516
+ resolve,
1517
+ reject,
1518
+ timestamp: Date.now()
1519
+ };
1520
+ // Add to appropriate priority queue
1521
+ const queue = this.queues.get(priority) || [];
1522
+ queue.push(request);
1523
+ this.queues.set(priority, queue);
1524
+ // Start processing if not already processing
1525
+ if (!this.processing) {
1526
+ this.processQueue();
1527
+ }
1528
+ });
1529
+ }
1530
+ /**
1531
+ * Process queue by priority
1532
+ */
1533
+ async processQueue() {
1534
+ if (this.processing)
1535
+ return;
1536
+ this.processing = true;
1537
+ while (this.hasPendingRequests() && this.activeRequests < this.maxConcurrent) {
1538
+ // Get highest priority request
1539
+ const request = this.getNextRequest();
1540
+ if (!request)
1541
+ break;
1542
+ this.activeRequests++;
1543
+ // Execute request
1544
+ request.requestFn()
1545
+ .then(request.resolve)
1546
+ .catch(request.reject)
1547
+ .finally(() => {
1548
+ this.activeRequests--;
1549
+ this.processQueue();
1550
+ });
1551
+ }
1552
+ this.processing = false;
1553
+ }
1554
+ /**
1555
+ * Get next request by priority
1556
+ */
1557
+ getNextRequest() {
1558
+ // Process from highest priority to lowest
1559
+ for (let priority = Priority.CRITICAL; priority >= Priority.LOW; priority--) {
1560
+ const queue = this.queues.get(priority);
1561
+ if (queue && queue.length > 0) {
1562
+ return queue.shift() || null;
1563
+ }
1564
+ }
1565
+ return null;
1566
+ }
1567
+ /**
1568
+ * Check if there are pending requests
1569
+ */
1570
+ hasPendingRequests() {
1571
+ for (const queue of this.queues.values()) {
1572
+ if (queue.length > 0)
1573
+ return true;
1574
+ }
1575
+ return false;
1576
+ }
1577
+ /**
1578
+ * Get queue statistics
1579
+ */
1580
+ getStats() {
1581
+ var _a, _b, _c, _d;
1582
+ const byPriority = {
1583
+ critical: ((_a = this.queues.get(Priority.CRITICAL)) === null || _a === void 0 ? void 0 : _a.length) || 0,
1584
+ high: ((_b = this.queues.get(Priority.HIGH)) === null || _b === void 0 ? void 0 : _b.length) || 0,
1585
+ normal: ((_c = this.queues.get(Priority.NORMAL)) === null || _c === void 0 ? void 0 : _c.length) || 0,
1586
+ low: ((_d = this.queues.get(Priority.LOW)) === null || _d === void 0 ? void 0 : _d.length) || 0
1587
+ };
1588
+ return {
1589
+ totalPending: Object.values(byPriority).reduce((a, b) => a + b, 0),
1590
+ byPriority,
1591
+ activeRequests: this.activeRequests
1592
+ };
1593
+ }
1594
+ /**
1595
+ * Clear all queues
1596
+ */
1597
+ clear() {
1598
+ this.queues.forEach(queue => queue.length = 0);
1599
+ this.processing = false;
1600
+ this.activeRequests = 0;
1601
+ }
1602
+ /**
1603
+ * Clear specific priority queue
1604
+ */
1605
+ clearPriority(priority) {
1606
+ const queue = this.queues.get(priority);
1607
+ if (queue) {
1608
+ queue.length = 0;
1609
+ }
1610
+ }
1611
+ }
1612
+
1239
1613
  class Engine {
1240
1614
  constructor(config) {
1241
1615
  this.fetchMoreCallback = null;
@@ -1254,6 +1628,9 @@ class Engine {
1254
1628
  this.performanceOptimizer = new PerformanceOptimizer();
1255
1629
  this.memoryManager = new MemoryManager(1000); // Cache up to 1000 items
1256
1630
  this.gpuAccelerator = new GPUAccelerator();
1631
+ this.batchSizeOptimizer = new BatchSizeOptimizer();
1632
+ this.requestDeduplicator = new RequestDeduplicator();
1633
+ this.priorityRequestQueue = new PriorityRequestQueue(2);
1257
1634
  this.totalItems = this.config.totalItems || Number.MAX_SAFE_INTEGER;
1258
1635
  this.state = {
1259
1636
  scrollTop: 0,
@@ -1384,6 +1761,1165 @@ class Engine {
1384
1761
  }
1385
1762
  }
1386
1763
 
1764
+ /**
1765
+ * Height Measurement Cache
1766
+ * Dynamically measures and caches item heights for variable height support
1767
+ */
1768
+ class HeightMeasurementCache {
1769
+ constructor(estimatedHeight = 100) {
1770
+ this.heightMap = new Map();
1771
+ this.offsetMap = new Map();
1772
+ this.totalHeight = 0;
1773
+ this.accessCount = 0;
1774
+ this.hitCount = 0;
1775
+ this.DEFAULT_TTL = 60000; // 1 minute
1776
+ this.estimatedHeight = estimatedHeight;
1777
+ }
1778
+ /**
1779
+ * Measure and cache height for an item
1780
+ */
1781
+ measureHeight(index, element) {
1782
+ const height = element.offsetHeight;
1783
+ this.heightMap.set(index, {
1784
+ height,
1785
+ measured: true,
1786
+ timestamp: Date.now()
1787
+ });
1788
+ // Recalculate offsets
1789
+ this.recalculateOffsets();
1790
+ return height;
1791
+ }
1792
+ /**
1793
+ * Get height for an item (measured or estimated)
1794
+ */
1795
+ getHeight(index) {
1796
+ this.accessCount++;
1797
+ const entry = this.heightMap.get(index);
1798
+ if (entry) {
1799
+ this.hitCount++;
1800
+ return entry.height;
1801
+ }
1802
+ // Return estimated height for unmeasured items
1803
+ return this.estimatedHeight;
1804
+ }
1805
+ /**
1806
+ * Get offset (cumulative height) for an item
1807
+ */
1808
+ getOffset(index) {
1809
+ const offset = this.offsetMap.get(index);
1810
+ return offset !== undefined ? offset : index * this.estimatedHeight;
1811
+ }
1812
+ /**
1813
+ * Check if item height is measured
1814
+ */
1815
+ isMeasured(index) {
1816
+ return this.heightMap.has(index);
1817
+ }
1818
+ /**
1819
+ * Mark item as needing remeasurement
1820
+ */
1821
+ invalidate(index) {
1822
+ const entry = this.heightMap.get(index);
1823
+ if (entry) {
1824
+ entry.measured = false;
1825
+ }
1826
+ }
1827
+ /**
1828
+ * Clear specific item from cache
1829
+ */
1830
+ clear(index) {
1831
+ this.heightMap.delete(index);
1832
+ this.recalculateOffsets();
1833
+ }
1834
+ /**
1835
+ * Clear entire cache
1836
+ */
1837
+ clearAll() {
1838
+ this.heightMap.clear();
1839
+ this.offsetMap.clear();
1840
+ this.totalHeight = 0;
1841
+ this.accessCount = 0;
1842
+ this.hitCount = 0;
1843
+ }
1844
+ /**
1845
+ * Recalculate all offsets
1846
+ */
1847
+ recalculateOffsets() {
1848
+ this.offsetMap.clear();
1849
+ let currentOffset = 0;
1850
+ // We need to calculate offsets for all items
1851
+ // This is called when heights change
1852
+ const indices = Array.from(this.heightMap.keys()).sort((a, b) => a - b);
1853
+ for (const index of indices) {
1854
+ this.offsetMap.set(index, currentOffset);
1855
+ const entry = this.heightMap.get(index);
1856
+ if (entry) {
1857
+ currentOffset += entry.height;
1858
+ }
1859
+ else {
1860
+ currentOffset += this.estimatedHeight;
1861
+ }
1862
+ }
1863
+ this.totalHeight = currentOffset;
1864
+ }
1865
+ /**
1866
+ * Get total height of all items
1867
+ */
1868
+ getTotalHeight(totalItems) {
1869
+ if (this.heightMap.size === 0) {
1870
+ return totalItems * this.estimatedHeight;
1871
+ }
1872
+ // Calculate based on measured + estimated
1873
+ let total = 0;
1874
+ for (let i = 0; i < totalItems; i++) {
1875
+ total += this.getHeight(i);
1876
+ }
1877
+ return total;
1878
+ }
1879
+ /**
1880
+ * Find item index at a specific scroll position
1881
+ */
1882
+ findIndexAtPosition(position, totalItems) {
1883
+ let low = 0;
1884
+ let high = totalItems - 1;
1885
+ while (low <= high) {
1886
+ const mid = Math.floor((low + high) / 2);
1887
+ const offset = this.getOffset(mid);
1888
+ if (offset < position) {
1889
+ low = mid + 1;
1890
+ }
1891
+ else if (offset > position) {
1892
+ high = mid - 1;
1893
+ }
1894
+ else {
1895
+ return mid;
1896
+ }
1897
+ }
1898
+ return low;
1899
+ }
1900
+ /**
1901
+ * Get cache statistics
1902
+ */
1903
+ getStats(totalItems) {
1904
+ const measuredItems = this.heightMap.size;
1905
+ const estimatedItems = totalItems - measuredItems;
1906
+ return {
1907
+ totalItems,
1908
+ measuredItems,
1909
+ estimatedItems,
1910
+ cacheSize: this.heightMap.size,
1911
+ hitRate: this.accessCount > 0 ? this.hitCount / this.accessCount : 0
1912
+ };
1913
+ }
1914
+ /**
1915
+ * Update estimated height
1916
+ */
1917
+ updateEstimatedHeight(height) {
1918
+ this.estimatedHeight = height;
1919
+ }
1920
+ /**
1921
+ * Get estimated height
1922
+ */
1923
+ getEstimatedHeight() {
1924
+ return this.estimatedHeight;
1925
+ }
1926
+ /**
1927
+ * Cleanup old entries (older than TTL)
1928
+ */
1929
+ cleanup(ttl = this.DEFAULT_TTL) {
1930
+ const now = Date.now();
1931
+ const toDelete = [];
1932
+ this.heightMap.forEach((entry, index) => {
1933
+ if (now - entry.timestamp > ttl) {
1934
+ toDelete.push(index);
1935
+ }
1936
+ });
1937
+ toDelete.forEach(index => this.clear(index));
1938
+ }
1939
+ /**
1940
+ * Get all measured heights
1941
+ */
1942
+ getAllHeights() {
1943
+ const heights = new Map();
1944
+ this.heightMap.forEach((entry, index) => {
1945
+ heights.set(index, entry.height);
1946
+ });
1947
+ return heights;
1948
+ }
1949
+ /**
1950
+ * Set heights in bulk (for initial data load)
1951
+ */
1952
+ setHeightsBulk(heights) {
1953
+ heights.forEach((height, index) => {
1954
+ this.heightMap.set(index, {
1955
+ height,
1956
+ measured: true,
1957
+ timestamp: Date.now()
1958
+ });
1959
+ });
1960
+ this.recalculateOffsets();
1961
+ }
1962
+ }
1963
+
1964
+ /**
1965
+ * Variable Height Manager
1966
+ * Manages variable height items with efficient position calculations
1967
+ */
1968
+ class VariableHeightManager {
1969
+ constructor(config) {
1970
+ this.totalItems = 0;
1971
+ this.lastMeasuredIndex = -1;
1972
+ this.config = {
1973
+ estimatedHeight: (config === null || config === void 0 ? void 0 : config.estimatedHeight) || 100,
1974
+ minHeight: (config === null || config === void 0 ? void 0 : config.minHeight) || 50,
1975
+ maxHeight: (config === null || config === void 0 ? void 0 : config.maxHeight) || 500,
1976
+ bufferSize: (config === null || config === void 0 ? void 0 : config.bufferSize) || 5
1977
+ };
1978
+ this.heightCache = new HeightMeasurementCache(this.config.estimatedHeight);
1979
+ }
1980
+ /**
1981
+ * Set total number of items
1982
+ */
1983
+ setTotalItems(total) {
1984
+ this.totalItems = total;
1985
+ }
1986
+ /**
1987
+ * Measure item height from DOM element
1988
+ */
1989
+ measureElement(index, element) {
1990
+ if (!element) {
1991
+ return this.config.estimatedHeight;
1992
+ }
1993
+ const height = element.offsetHeight;
1994
+ // Clamp height between min and max
1995
+ const clampedHeight = Math.max(this.config.minHeight, Math.min(this.config.maxHeight, height));
1996
+ this.heightCache.measureHeight(index, { offsetHeight: clampedHeight });
1997
+ this.lastMeasuredIndex = Math.max(this.lastMeasuredIndex, index);
1998
+ return clampedHeight;
1999
+ }
2000
+ /**
2001
+ * Get item position (offset and height)
2002
+ */
2003
+ getItemPosition(index) {
2004
+ const offset = this.heightCache.getOffset(index);
2005
+ const height = this.heightCache.getHeight(index);
2006
+ return {
2007
+ index,
2008
+ offset,
2009
+ height
2010
+ };
2011
+ }
2012
+ /**
2013
+ * Calculate visible range for variable heights
2014
+ */
2015
+ calculateVisibleRange(scrollTop, viewportHeight) {
2016
+ // Find start index based on scroll position
2017
+ const startIndex = this.heightCache.findIndexAtPosition(scrollTop, this.totalItems);
2018
+ // Calculate how many items fit in viewport
2019
+ let endIndex = startIndex;
2020
+ let currentOffset = this.heightCache.getOffset(startIndex);
2021
+ while (endIndex < this.totalItems && currentOffset < scrollTop + viewportHeight) {
2022
+ const height = this.heightCache.getHeight(endIndex);
2023
+ currentOffset += height;
2024
+ endIndex++;
2025
+ }
2026
+ // Add buffer
2027
+ const bufferedStart = Math.max(0, startIndex - this.config.bufferSize);
2028
+ const bufferedEnd = Math.min(this.totalItems - 1, endIndex + this.config.bufferSize);
2029
+ return {
2030
+ start: bufferedStart,
2031
+ end: bufferedEnd
2032
+ };
2033
+ }
2034
+ /**
2035
+ * Get total height of all items
2036
+ */
2037
+ getTotalHeight() {
2038
+ return this.heightCache.getTotalHeight(this.totalItems);
2039
+ }
2040
+ /**
2041
+ * Scroll to specific item index
2042
+ */
2043
+ scrollToIndex(index) {
2044
+ const offset = this.heightCache.getOffset(index);
2045
+ return offset;
2046
+ }
2047
+ /**
2048
+ * Get items to render for current viewport
2049
+ */
2050
+ getItemsToRender(scrollTop, viewportHeight) {
2051
+ const visibleRange = this.calculateVisibleRange(scrollTop, viewportHeight);
2052
+ const items = [];
2053
+ for (let i = visibleRange.start; i <= visibleRange.end; i++) {
2054
+ items.push(this.getItemPosition(i));
2055
+ }
2056
+ return {
2057
+ items,
2058
+ totalHeight: this.getTotalHeight()
2059
+ };
2060
+ }
2061
+ /**
2062
+ * Handle height change (when item height changes dynamically)
2063
+ */
2064
+ onHeightChange(index, newHeight) {
2065
+ const oldHeight = this.heightCache.getHeight(index);
2066
+ const heightDiff = newHeight - oldHeight;
2067
+ // Update cache
2068
+ this.heightCache.measureHeight(index, { offsetHeight: newHeight });
2069
+ // If height changed significantly, may need to adjust scroll position
2070
+ if (Math.abs(heightDiff) > 50) {
2071
+ // Large height change - may need to recalculate
2072
+ this.heightCache.invalidate(index);
2073
+ }
2074
+ }
2075
+ /**
2076
+ * Get cache statistics
2077
+ */
2078
+ getCacheStats() {
2079
+ return this.heightCache.getStats(this.totalItems);
2080
+ }
2081
+ /**
2082
+ * Clear cache for specific range
2083
+ */
2084
+ clearRange(startIndex, endIndex) {
2085
+ for (let i = startIndex; i <= endIndex; i++) {
2086
+ this.heightCache.clear(i);
2087
+ }
2088
+ }
2089
+ /**
2090
+ * Clear entire cache
2091
+ */
2092
+ clearCache() {
2093
+ this.heightCache.clearAll();
2094
+ this.lastMeasuredIndex = -1;
2095
+ }
2096
+ /**
2097
+ * Get last measured index
2098
+ */
2099
+ getLastMeasuredIndex() {
2100
+ return this.lastMeasuredIndex;
2101
+ }
2102
+ /**
2103
+ * Check if item is measured
2104
+ */
2105
+ isItemMeasured(index) {
2106
+ return this.heightCache.isMeasured(index);
2107
+ }
2108
+ /**
2109
+ * Get measured items count
2110
+ */
2111
+ getMeasuredCount() {
2112
+ return this.heightCache.getStats(this.totalItems).measuredItems;
2113
+ }
2114
+ }
2115
+
2116
+ /**
2117
+ * Dynamic Height Engine
2118
+ * Core engine for variable height virtual scrolling
2119
+ */
2120
+ class DynamicHeightEngine {
2121
+ constructor(config = {}) {
2122
+ this.containerElement = null;
2123
+ this.itemElements = new Map();
2124
+ this.config = {
2125
+ itemHeight: config.estimatedItemHeight || 100,
2126
+ viewportHeight: config.viewportHeight || 400,
2127
+ bufferSize: config.heightBufferSize || 5,
2128
+ estimatedItemHeight: config.estimatedItemHeight || 100,
2129
+ minItemHeight: config.minItemHeight || 50,
2130
+ maxItemHeight: config.maxItemHeight || 500,
2131
+ heightBufferSize: config.heightBufferSize || 5
2132
+ };
2133
+ this.variableHeightManager = new VariableHeightManager({
2134
+ estimatedHeight: this.config.estimatedItemHeight,
2135
+ minHeight: this.config.minItemHeight,
2136
+ maxHeight: this.config.maxItemHeight,
2137
+ bufferSize: this.config.heightBufferSize
2138
+ });
2139
+ this.heightCache = new HeightMeasurementCache(this.config.estimatedItemHeight);
2140
+ this.state = {
2141
+ scrollTop: 0,
2142
+ visibleRange: { start: 0, end: 0 },
2143
+ loadedItems: 0,
2144
+ isLoading: false,
2145
+ totalContentHeight: 0,
2146
+ measuredItems: 0,
2147
+ estimatedItems: 0
2148
+ };
2149
+ }
2150
+ /**
2151
+ * Initialize with container element
2152
+ */
2153
+ init(container) {
2154
+ this.containerElement = container;
2155
+ this.setupScrollListener();
2156
+ }
2157
+ /**
2158
+ * Setup scroll listener
2159
+ */
2160
+ setupScrollListener() {
2161
+ if (!this.containerElement)
2162
+ return;
2163
+ this.containerElement.addEventListener('scroll', () => {
2164
+ this.onScroll();
2165
+ }, { passive: true });
2166
+ }
2167
+ /**
2168
+ * Handle scroll event
2169
+ */
2170
+ onScroll() {
2171
+ if (!this.containerElement)
2172
+ return;
2173
+ const scrollTop = this.containerElement.scrollTop;
2174
+ this.state.scrollTop = scrollTop;
2175
+ // Recalculate visible range
2176
+ this.updateVisibleRange();
2177
+ }
2178
+ /**
2179
+ * Update visible range based on scroll position
2180
+ */
2181
+ updateVisibleRange() {
2182
+ if (!this.containerElement)
2183
+ return;
2184
+ const viewportHeight = this.containerElement.clientHeight;
2185
+ const visibleRange = this.variableHeightManager.calculateVisibleRange(this.state.scrollTop, viewportHeight);
2186
+ this.state.visibleRange = visibleRange;
2187
+ // Update state with measured/estimated counts
2188
+ const stats = this.variableHeightManager.getCacheStats();
2189
+ this.state.measuredItems = stats.measuredItems;
2190
+ this.state.estimatedItems = stats.estimatedItems;
2191
+ this.state.totalContentHeight = this.variableHeightManager.getTotalHeight();
2192
+ }
2193
+ /**
2194
+ * Measure item height from DOM element
2195
+ */
2196
+ measureItem(index, element) {
2197
+ const height = this.variableHeightManager.measureElement(index, element);
2198
+ // Store element reference
2199
+ this.itemElements.set(index, element);
2200
+ // Update state
2201
+ const stats = this.variableHeightManager.getCacheStats();
2202
+ this.state.measuredItems = stats.measuredItems;
2203
+ this.state.estimatedItems = stats.estimatedItems;
2204
+ this.state.totalContentHeight = this.variableHeightManager.getTotalHeight();
2205
+ // Trigger re-render if needed
2206
+ this.onHeightMeasured(index, height);
2207
+ return height;
2208
+ }
2209
+ /**
2210
+ * Called when item height is measured
2211
+ */
2212
+ onHeightMeasured(index, height) {
2213
+ // Can be overridden to trigger UI updates
2214
+ // For example, update styles or trigger re-render
2215
+ }
2216
+ /**
2217
+ * Get items to render for current viewport
2218
+ */
2219
+ getItemsToRender() {
2220
+ if (!this.containerElement) {
2221
+ return {
2222
+ items: [],
2223
+ totalHeight: 0,
2224
+ visibleRange: { start: 0, end: 0 }
2225
+ };
2226
+ }
2227
+ const { items, totalHeight } = this.variableHeightManager.getItemsToRender(this.state.scrollTop, this.containerElement.clientHeight);
2228
+ return {
2229
+ items,
2230
+ totalHeight,
2231
+ visibleRange: this.state.visibleRange
2232
+ };
2233
+ }
2234
+ /**
2235
+ * Scroll to specific item index
2236
+ */
2237
+ scrollToIndex(index) {
2238
+ if (!this.containerElement)
2239
+ return;
2240
+ const offset = this.variableHeightManager.scrollToIndex(index);
2241
+ this.containerElement.scrollTop = offset;
2242
+ // Update state
2243
+ this.state.scrollTop = offset;
2244
+ this.updateVisibleRange();
2245
+ }
2246
+ /**
2247
+ * Set total number of items
2248
+ */
2249
+ setTotalItems(total) {
2250
+ this.variableHeightManager.setTotalItems(total);
2251
+ this.state.loadedItems = total;
2252
+ this.state.totalContentHeight = this.variableHeightManager.getTotalHeight();
2253
+ }
2254
+ /**
2255
+ * Get current state
2256
+ */
2257
+ getState() {
2258
+ return { ...this.state };
2259
+ }
2260
+ /**
2261
+ * Get cache statistics
2262
+ */
2263
+ getCacheStats() {
2264
+ return this.variableHeightManager.getCacheStats();
2265
+ }
2266
+ /**
2267
+ * Clear cache for range
2268
+ */
2269
+ clearCacheRange(startIndex, endIndex) {
2270
+ this.variableHeightManager.clearRange(startIndex, endIndex);
2271
+ // Clear element references
2272
+ for (let i = startIndex; i <= endIndex; i++) {
2273
+ this.itemElements.delete(i);
2274
+ }
2275
+ }
2276
+ /**
2277
+ * Clear entire cache
2278
+ */
2279
+ clearCache() {
2280
+ this.variableHeightManager.clearCache();
2281
+ this.itemElements.clear();
2282
+ }
2283
+ /**
2284
+ * Cleanup
2285
+ */
2286
+ cleanup() {
2287
+ if (this.containerElement) {
2288
+ this.containerElement.removeEventListener('scroll', this.onScroll.bind(this));
2289
+ }
2290
+ this.clearCache();
2291
+ }
2292
+ /**
2293
+ * Update viewport height
2294
+ */
2295
+ updateViewportHeight(height) {
2296
+ this.config.viewportHeight = height;
2297
+ this.updateVisibleRange();
2298
+ }
2299
+ /**
2300
+ * Get item offset for styling
2301
+ */
2302
+ getItemOffset(index) {
2303
+ return this.variableHeightManager.getItemPosition(index).offset;
2304
+ }
2305
+ /**
2306
+ * Get item height
2307
+ */
2308
+ getItemHeight(index) {
2309
+ return this.variableHeightManager.getItemPosition(index).height;
2310
+ }
2311
+ /**
2312
+ * Check if item is measured
2313
+ */
2314
+ isItemMeasured(index) {
2315
+ return this.variableHeightManager.isItemMeasured(index);
2316
+ }
2317
+ }
2318
+
2319
+ /**
2320
+ * Smart Prefetch Algorithm
2321
+ * Recognizes scroll patterns and predicts data loading needs
2322
+ */
2323
+ class SmartPrefetchAlgorithm {
2324
+ constructor() {
2325
+ this.velocityHistory = [];
2326
+ this.directionHistory = [];
2327
+ this.HISTORY_SIZE = 20;
2328
+ this.lastPrefetchTime = 0;
2329
+ this.prefetchCooldown = 500; // ms
2330
+ }
2331
+ /**
2332
+ * Analyze scroll pattern
2333
+ */
2334
+ analyzeScrollPattern(velocity, acceleration, direction) {
2335
+ this.trackVelocity(velocity);
2336
+ this.trackDirection(direction);
2337
+ const avgVelocity = this.getAverageVelocity();
2338
+ const velocityVariance = this.getVelocityVariance();
2339
+ const directionChanges = this.countDirectionChanges();
2340
+ // Determine pattern type
2341
+ let pattern;
2342
+ if (Math.abs(avgVelocity) > 2.0) {
2343
+ pattern = {
2344
+ type: 'fast-scroll',
2345
+ velocity: avgVelocity,
2346
+ acceleration,
2347
+ direction,
2348
+ confidence: 0.9
2349
+ };
2350
+ }
2351
+ else if (Math.abs(avgVelocity) < 0.3) {
2352
+ pattern = {
2353
+ type: 'paused',
2354
+ velocity: avgVelocity,
2355
+ acceleration,
2356
+ direction: 'stationary',
2357
+ confidence: 0.95
2358
+ };
2359
+ }
2360
+ else if (directionChanges > 5) {
2361
+ pattern = {
2362
+ type: 'oscillating',
2363
+ velocity: avgVelocity,
2364
+ acceleration,
2365
+ direction,
2366
+ confidence: 0.85
2367
+ };
2368
+ }
2369
+ else if (velocityVariance < 0.5) {
2370
+ pattern = {
2371
+ type: 'steady',
2372
+ velocity: avgVelocity,
2373
+ acceleration,
2374
+ direction,
2375
+ confidence: 0.9
2376
+ };
2377
+ }
2378
+ else {
2379
+ pattern = {
2380
+ type: 'slow-scroll',
2381
+ velocity: avgVelocity,
2382
+ acceleration,
2383
+ direction,
2384
+ confidence: 0.8
2385
+ };
2386
+ }
2387
+ return pattern;
2388
+ }
2389
+ /**
2390
+ * Predict prefetch needs based on scroll pattern
2391
+ */
2392
+ predictPrefetchNeeds(pattern, visibleEnd, totalLoaded) {
2393
+ const now = Date.now();
2394
+ // Check cooldown
2395
+ if (now - this.lastPrefetchTime < this.prefetchCooldown) {
2396
+ return {
2397
+ shouldPrefetch: false,
2398
+ prefetchDistance: 0,
2399
+ batchSize: 0,
2400
+ priority: 'low',
2401
+ confidence: 1.0
2402
+ };
2403
+ }
2404
+ let prediction;
2405
+ switch (pattern.type) {
2406
+ case 'fast-scroll':
2407
+ prediction = {
2408
+ shouldPrefetch: true,
2409
+ prefetchDistance: 1500, // Far ahead for fast scrolling
2410
+ batchSize: 30, // Large batch
2411
+ priority: 'critical',
2412
+ confidence: pattern.confidence
2413
+ };
2414
+ break;
2415
+ case 'steady':
2416
+ prediction = {
2417
+ shouldPrefetch: visibleEnd >= totalLoaded - 800,
2418
+ prefetchDistance: 800,
2419
+ batchSize: 20,
2420
+ priority: 'high',
2421
+ confidence: pattern.confidence
2422
+ };
2423
+ break;
2424
+ case 'slow-scroll':
2425
+ prediction = {
2426
+ shouldPrefetch: visibleEnd >= totalLoaded - 400,
2427
+ prefetchDistance: 400,
2428
+ batchSize: 10,
2429
+ priority: 'normal',
2430
+ confidence: pattern.confidence
2431
+ };
2432
+ break;
2433
+ case 'oscillating':
2434
+ prediction = {
2435
+ shouldPrefetch: visibleEnd >= totalLoaded - 600,
2436
+ prefetchDistance: 600,
2437
+ batchSize: 15,
2438
+ priority: 'normal',
2439
+ confidence: pattern.confidence * 0.8 // Lower confidence for oscillating
2440
+ };
2441
+ break;
2442
+ case 'paused':
2443
+ prediction = {
2444
+ shouldPrefetch: false, // User paused, no need to prefetch
2445
+ prefetchDistance: 0,
2446
+ batchSize: 0,
2447
+ priority: 'low',
2448
+ confidence: pattern.confidence
2449
+ };
2450
+ break;
2451
+ default:
2452
+ prediction = {
2453
+ shouldPrefetch: visibleEnd >= totalLoaded - 500,
2454
+ prefetchDistance: 500,
2455
+ batchSize: 15,
2456
+ priority: 'normal',
2457
+ confidence: 0.7
2458
+ };
2459
+ }
2460
+ // Update last prefetch time if prefetching
2461
+ if (prediction.shouldPrefetch) {
2462
+ this.lastPrefetchTime = now;
2463
+ }
2464
+ return prediction;
2465
+ }
2466
+ /**
2467
+ * Track velocity history
2468
+ */
2469
+ trackVelocity(velocity) {
2470
+ this.velocityHistory.push(velocity);
2471
+ if (this.velocityHistory.length > this.HISTORY_SIZE) {
2472
+ this.velocityHistory.shift();
2473
+ }
2474
+ }
2475
+ /**
2476
+ * Track direction history
2477
+ */
2478
+ trackDirection(direction) {
2479
+ this.directionHistory.push(direction);
2480
+ if (this.directionHistory.length > this.HISTORY_SIZE) {
2481
+ this.directionHistory.shift();
2482
+ }
2483
+ }
2484
+ /**
2485
+ * Get average velocity
2486
+ */
2487
+ getAverageVelocity() {
2488
+ if (this.velocityHistory.length === 0)
2489
+ return 0;
2490
+ const sum = this.velocityHistory.reduce((a, b) => a + b, 0);
2491
+ return sum / this.velocityHistory.length;
2492
+ }
2493
+ /**
2494
+ * Get velocity variance
2495
+ */
2496
+ getVelocityVariance() {
2497
+ if (this.velocityHistory.length < 2)
2498
+ return 0;
2499
+ const avg = this.getAverageVelocity();
2500
+ const squaredDiffs = this.velocityHistory.map(v => Math.pow(v - avg, 2));
2501
+ const avgSquaredDiff = squaredDiffs.reduce((a, b) => a + b, 0) / squaredDiffs.length;
2502
+ return Math.sqrt(avgSquaredDiff);
2503
+ }
2504
+ /**
2505
+ * Count direction changes
2506
+ */
2507
+ countDirectionChanges() {
2508
+ if (this.directionHistory.length < 2)
2509
+ return 0;
2510
+ let changes = 0;
2511
+ for (let i = 1; i < this.directionHistory.length; i++) {
2512
+ if (this.directionHistory[i] !== this.directionHistory[i - 1] &&
2513
+ this.directionHistory[i] !== 'stationary' &&
2514
+ this.directionHistory[i - 1] !== 'stationary') {
2515
+ changes++;
2516
+ }
2517
+ }
2518
+ return changes;
2519
+ }
2520
+ /**
2521
+ * Reset history
2522
+ */
2523
+ reset() {
2524
+ this.velocityHistory = [];
2525
+ this.directionHistory = [];
2526
+ this.lastPrefetchTime = 0;
2527
+ }
2528
+ /**
2529
+ * Get prediction confidence
2530
+ */
2531
+ getConfidence() {
2532
+ if (this.velocityHistory.length < 5)
2533
+ return 0.5; // Not enough data
2534
+ return Math.min(this.velocityHistory.length / this.HISTORY_SIZE, 1.0);
2535
+ }
2536
+ }
2537
+
2538
+ /**
2539
+ * Preemptive Caching
2540
+ * Caches data before it's needed based on predictions
2541
+ */
2542
+ class PreemptiveCache {
2543
+ constructor(config) {
2544
+ this.cache = new Map();
2545
+ this.accessHistory = [];
2546
+ this.config = {
2547
+ maxSize: (config === null || config === void 0 ? void 0 : config.maxSize) || 1000,
2548
+ defaultTTL: (config === null || config === void 0 ? void 0 : config.defaultTTL) || 300000, // 5 minutes
2549
+ cleanupThreshold: (config === null || config === void 0 ? void 0 : config.cleanupThreshold) || 800
2550
+ };
2551
+ }
2552
+ /**
2553
+ * Preemptively cache data with priority
2554
+ */
2555
+ preemptiveCache(index, data, priority = 'normal') {
2556
+ // Check if we need to cleanup
2557
+ if (this.cache.size >= this.config.cleanupThreshold) {
2558
+ this.cleanup();
2559
+ }
2560
+ const entry = {
2561
+ data,
2562
+ timestamp: Date.now(),
2563
+ priority,
2564
+ accessCount: 0,
2565
+ expiry: Date.now() + this.config.defaultTTL
2566
+ };
2567
+ this.cache.set(index, entry);
2568
+ }
2569
+ /**
2570
+ * Get cached data
2571
+ */
2572
+ get(index) {
2573
+ const entry = this.cache.get(index);
2574
+ if (!entry) {
2575
+ return null;
2576
+ }
2577
+ // Check expiry
2578
+ if (Date.now() > entry.expiry) {
2579
+ this.cache.delete(index);
2580
+ return null;
2581
+ }
2582
+ // Update access count
2583
+ entry.accessCount++;
2584
+ this.trackAccess(index);
2585
+ return entry.data;
2586
+ }
2587
+ /**
2588
+ * Check if data is cached
2589
+ */
2590
+ has(index) {
2591
+ const entry = this.cache.get(index);
2592
+ if (!entry)
2593
+ return false;
2594
+ // Check expiry
2595
+ if (Date.now() > entry.expiry) {
2596
+ this.cache.delete(index);
2597
+ return false;
2598
+ }
2599
+ return true;
2600
+ }
2601
+ /**
2602
+ * Get cached data for range
2603
+ */
2604
+ getRange(startIndex, endIndex) {
2605
+ const results = [];
2606
+ for (let i = startIndex; i <= endIndex; i++) {
2607
+ const data = this.get(i);
2608
+ if (data !== null) {
2609
+ results.push(data);
2610
+ }
2611
+ }
2612
+ return results;
2613
+ }
2614
+ /**
2615
+ * Delete cached data
2616
+ */
2617
+ delete(index) {
2618
+ return this.cache.delete(index);
2619
+ }
2620
+ /**
2621
+ * Clear cache
2622
+ */
2623
+ clear() {
2624
+ this.cache.clear();
2625
+ this.accessHistory = [];
2626
+ }
2627
+ /**
2628
+ * Cleanup old/low-priority entries
2629
+ */
2630
+ cleanup() {
2631
+ const now = Date.now();
2632
+ const toDelete = [];
2633
+ // First pass: remove expired entries
2634
+ this.cache.forEach((entry, index) => {
2635
+ if (now > entry.expiry) {
2636
+ toDelete.push(index);
2637
+ }
2638
+ });
2639
+ // Second pass: remove low-priority entries if still over limit
2640
+ if (this.cache.size - toDelete.length > this.config.maxSize) {
2641
+ const sortedByPriority = Array.from(this.cache.entries())
2642
+ .filter(([index]) => !toDelete.includes(index))
2643
+ .sort((a, b) => {
2644
+ const priorityOrder = { critical: 4, high: 3, normal: 2, low: 1 };
2645
+ return priorityOrder[a[1].priority] - priorityOrder[b[1].priority];
2646
+ });
2647
+ // Remove lowest priority entries
2648
+ const toRemove = Math.ceil(sortedByPriority.length * 0.2); // Remove 20%
2649
+ for (let i = 0; i < toRemove; i++) {
2650
+ toDelete.push(sortedByPriority[i][0]);
2651
+ }
2652
+ }
2653
+ // Delete marked entries
2654
+ toDelete.forEach(index => this.cache.delete(index));
2655
+ }
2656
+ /**
2657
+ * Track access for analytics
2658
+ */
2659
+ trackAccess(index) {
2660
+ this.accessHistory.push(index);
2661
+ if (this.accessHistory.length > 100) {
2662
+ this.accessHistory.shift();
2663
+ }
2664
+ }
2665
+ /**
2666
+ * Get cache statistics
2667
+ */
2668
+ getStats() {
2669
+ const byPriority = {
2670
+ critical: 0,
2671
+ high: 0,
2672
+ normal: 0,
2673
+ low: 0
2674
+ };
2675
+ let totalAccessCount = 0;
2676
+ this.cache.forEach(entry => {
2677
+ byPriority[entry.priority]++;
2678
+ totalAccessCount += entry.accessCount;
2679
+ });
2680
+ return {
2681
+ size: this.cache.size,
2682
+ maxSize: this.config.maxSize,
2683
+ hitRate: this.accessHistory.length > 0 ?
2684
+ this.accessHistory.filter(i => this.has(i)).length / this.accessHistory.length : 0,
2685
+ avgAccessCount: this.cache.size > 0 ? totalAccessCount / this.cache.size : 0,
2686
+ byPriority
2687
+ };
2688
+ }
2689
+ /**
2690
+ * Get all cached indices
2691
+ */
2692
+ getCachedIndices() {
2693
+ return Array.from(this.cache.keys());
2694
+ }
2695
+ /**
2696
+ * Preemptively cache range
2697
+ */
2698
+ cacheRange(startIndex, endIndex, dataFetcher, priority) {
2699
+ for (let i = startIndex; i <= endIndex; i++) {
2700
+ if (!this.has(i)) {
2701
+ const data = dataFetcher(i);
2702
+ this.preemptiveCache(i, data, priority);
2703
+ }
2704
+ }
2705
+ }
2706
+ /**
2707
+ * Get memory usage estimate
2708
+ */
2709
+ getMemoryUsage() {
2710
+ // Rough estimate based on cache size
2711
+ return this.cache.size * 1024; // Assume ~1KB per entry
2712
+ }
2713
+ }
2714
+
2715
+ /**
2716
+ * Intelligent Pagination
2717
+ * Adaptive page size with cursor-based pagination
2718
+ */
2719
+ class IntelligentPagination {
2720
+ constructor() {
2721
+ this.currentPage = 1;
2722
+ this.basePageSize = 50;
2723
+ this.adaptivePageSize = 50;
2724
+ this.totalItems = 0;
2725
+ this.loadHistory = [];
2726
+ this.MIN_PAGE_SIZE = 20;
2727
+ this.MAX_PAGE_SIZE = 200;
2728
+ }
2729
+ /**
2730
+ * Get current pagination state
2731
+ */
2732
+ getState() {
2733
+ const totalPages = Math.ceil(this.totalItems / this.adaptivePageSize);
2734
+ const hasMore = this.currentPage < totalPages;
2735
+ return {
2736
+ currentPage: this.currentPage,
2737
+ pageSize: this.adaptivePageSize,
2738
+ totalItems: this.totalItems,
2739
+ totalPages,
2740
+ hasMore,
2741
+ cursor: this.createCursor(this.currentPage),
2742
+ nextCursor: hasMore ? this.createCursor(this.currentPage + 1) : undefined,
2743
+ prevCursor: this.currentPage > 1 ? this.createCursor(this.currentPage - 1) : undefined
2744
+ };
2745
+ }
2746
+ /**
2747
+ * Set total items
2748
+ */
2749
+ setTotalItems(total) {
2750
+ this.totalItems = total;
2751
+ }
2752
+ /**
2753
+ * Go to next page
2754
+ */
2755
+ nextPage() {
2756
+ const state = this.getState();
2757
+ if (state.hasMore) {
2758
+ this.currentPage++;
2759
+ }
2760
+ return this.getState();
2761
+ }
2762
+ /**
2763
+ * Go to previous page
2764
+ */
2765
+ prevPage() {
2766
+ if (this.currentPage > 1) {
2767
+ this.currentPage--;
2768
+ }
2769
+ return this.getState();
2770
+ }
2771
+ /**
2772
+ * Go to specific page
2773
+ */
2774
+ goToPage(page) {
2775
+ const totalPages = Math.ceil(this.totalItems / this.adaptivePageSize);
2776
+ this.currentPage = Math.max(1, Math.min(page, totalPages));
2777
+ return this.getState();
2778
+ }
2779
+ /**
2780
+ * Record load time for adaptive sizing
2781
+ */
2782
+ recordLoadTime(page, loadTimeMs) {
2783
+ this.loadHistory.push({ page, loadTime: loadTimeMs });
2784
+ // Keep last 10 load times
2785
+ if (this.loadHistory.length > 10) {
2786
+ this.loadHistory.shift();
2787
+ }
2788
+ // Adjust page size based on load time
2789
+ this.adaptPageSize();
2790
+ }
2791
+ /**
2792
+ * Adapt page size based on performance
2793
+ */
2794
+ adaptPageSize() {
2795
+ if (this.loadHistory.length < 3)
2796
+ return;
2797
+ const avgLoadTime = this.loadHistory.reduce((a, b) => a.loadTime + b.loadTime, 0) / this.loadHistory.length;
2798
+ // Target: 100-300ms load time
2799
+ if (avgLoadTime < 100) {
2800
+ // Fast loads - increase page size
2801
+ this.adaptivePageSize = Math.min(this.MAX_PAGE_SIZE, Math.round(this.adaptivePageSize * 1.2));
2802
+ }
2803
+ else if (avgLoadTime > 300) {
2804
+ // Slow loads - decrease page size
2805
+ this.adaptivePageSize = Math.max(this.MIN_PAGE_SIZE, Math.round(this.adaptivePageSize * 0.8));
2806
+ }
2807
+ // Optimal load time - keep current size
2808
+ }
2809
+ /**
2810
+ * Create cursor for page
2811
+ */
2812
+ createCursor(page) {
2813
+ const cursorData = {
2814
+ page,
2815
+ limit: this.adaptivePageSize,
2816
+ timestamp: Date.now()
2817
+ };
2818
+ // Add checksum for validation
2819
+ cursorData.checksum = this.calculateChecksum(cursorData);
2820
+ return Buffer.from(JSON.stringify(cursorData)).toString('base64');
2821
+ }
2822
+ /**
2823
+ * Decode cursor
2824
+ */
2825
+ decodeCursor(cursor) {
2826
+ try {
2827
+ const decoded = JSON.parse(Buffer.from(cursor, 'base64').toString('utf-8'));
2828
+ // Validate checksum
2829
+ if (decoded.checksum && !this.validateChecksum(decoded)) {
2830
+ return null;
2831
+ }
2832
+ return decoded;
2833
+ }
2834
+ catch (_a) {
2835
+ return null;
2836
+ }
2837
+ }
2838
+ /**
2839
+ * Go to page from cursor
2840
+ */
2841
+ goToCursor(cursor) {
2842
+ const decoded = this.decodeCursor(cursor);
2843
+ if (decoded) {
2844
+ this.currentPage = decoded.page;
2845
+ this.adaptivePageSize = decoded.limit;
2846
+ }
2847
+ return this.getState();
2848
+ }
2849
+ /**
2850
+ * Calculate checksum for cursor validation
2851
+ */
2852
+ calculateChecksum(data) {
2853
+ const str = `${data.page}-${data.limit}-${data.timestamp}`;
2854
+ let hash = 0;
2855
+ for (let i = 0; i < str.length; i++) {
2856
+ const char = str.charCodeAt(i);
2857
+ hash = ((hash << 5) - hash) + char;
2858
+ hash = hash & hash; // Convert to 32-bit integer
2859
+ }
2860
+ return hash.toString(36);
2861
+ }
2862
+ /**
2863
+ * Validate cursor checksum
2864
+ */
2865
+ validateChecksum(data) {
2866
+ if (!data.checksum)
2867
+ return false;
2868
+ const { checksum, ...rest } = data;
2869
+ return this.calculateChecksum(rest) === checksum;
2870
+ }
2871
+ /**
2872
+ * Get items to fetch for current page
2873
+ */
2874
+ getFetchRange() {
2875
+ return {
2876
+ skip: (this.currentPage - 1) * this.adaptivePageSize,
2877
+ limit: this.adaptivePageSize
2878
+ };
2879
+ }
2880
+ /**
2881
+ * Reset pagination
2882
+ */
2883
+ reset() {
2884
+ this.currentPage = 1;
2885
+ this.adaptivePageSize = this.basePageSize;
2886
+ this.loadHistory = [];
2887
+ }
2888
+ /**
2889
+ * Get load history for analytics
2890
+ */
2891
+ getLoadHistory() {
2892
+ return [...this.loadHistory];
2893
+ }
2894
+ /**
2895
+ * Get average load time
2896
+ */
2897
+ getAverageLoadTime() {
2898
+ if (this.loadHistory.length === 0)
2899
+ return 0;
2900
+ return this.loadHistory.reduce((a, b) => a + b.loadTime, 0) / this.loadHistory.length;
2901
+ }
2902
+ /**
2903
+ * Set base page size
2904
+ */
2905
+ setBasePageSize(size) {
2906
+ this.basePageSize = Math.max(this.MIN_PAGE_SIZE, Math.min(this.MAX_PAGE_SIZE, size));
2907
+ this.adaptivePageSize = this.basePageSize;
2908
+ }
2909
+ /**
2910
+ * Get current page size
2911
+ */
2912
+ getPageSize() {
2913
+ return this.adaptivePageSize;
2914
+ }
2915
+ /**
2916
+ * Get current page number
2917
+ */
2918
+ getCurrentPage() {
2919
+ return this.currentPage;
2920
+ }
2921
+ }
2922
+
1387
2923
  class ScrollObserver {
1388
2924
  constructor(container, callback, options) {
1389
2925
  this.observer = null;
@@ -1753,5 +3289,5 @@ const LazyScrollElement = typeof window !== 'undefined' && typeof HTMLElement !=
1753
3289
  ? LazyScrollElementClass // Will be replaced with actual element in browser
1754
3290
  : LazyScrollElementClass; // SSR-safe fallback
1755
3291
 
1756
- export { AdaptiveBufferCalculator, ContentComplexityAnalyzer, DevicePerformanceMonitor, Engine, GPUAccelerator, IntelligentScrollDetector, LazyList, LazyScroll, LazyScrollElement, MemoryManager, NetworkAwarePrefetchManager, NetworkAwareRequestQueue, NetworkSpeedDetector, PerformanceOptimizer, PrefetchManager, RequestQueue, ScrollObserver, WindowManager, createLazyScroll, debounce, throttle, useLazyList };
3292
+ export { AdaptiveBufferCalculator, BatchSizeOptimizer, ContentComplexityAnalyzer, DevicePerformanceMonitor, DynamicHeightEngine, Engine, GPUAccelerator, HeightMeasurementCache, IntelligentPagination, IntelligentScrollDetector, LazyList, LazyScroll, LazyScrollElement, MemoryManager, NetworkAwarePrefetchManager, NetworkAwareRequestQueue, NetworkSpeedDetector, PerformanceOptimizer, PreemptiveCache, PrefetchManager, Priority, PriorityRequestQueue, RequestDeduplicator, RequestQueue, ScrollObserver, SmartPrefetchAlgorithm, VariableHeightManager, WindowManager, createLazyScroll, debounce, throttle, useLazyList };
1757
3293
  //# sourceMappingURL=index.js.map