lazy-render-virtual-scroll 1.0.7 → 1.0.9

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 (483) hide show
  1. package/README.md +10 -0
  2. package/dist/angular/index.d.ts +57 -0
  3. package/dist/cjs/adapters/angular/lazy-scroll.component.d.ts +28 -0
  4. package/dist/cjs/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  5. package/dist/cjs/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  6. package/dist/cjs/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  7. package/dist/cjs/adapters/index.d.ts +7 -0
  8. package/dist/cjs/adapters/index.d.ts.map +1 -0
  9. package/dist/cjs/adapters/svelte/lazyScrollAction.d.ts +13 -0
  10. package/dist/cjs/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  11. package/dist/cjs/adapters/vue/useLazyScroll.d.ts +13 -0
  12. package/dist/cjs/adapters/vue/useLazyScroll.d.ts.map +1 -0
  13. package/dist/cjs/angular/adapters/angular/lazy-scroll.component.d.ts +28 -0
  14. package/dist/cjs/angular/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  15. package/dist/cjs/angular/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  16. package/dist/cjs/angular/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  17. package/dist/cjs/angular/adapters/index.d.ts +7 -0
  18. package/dist/cjs/angular/adapters/index.d.ts.map +1 -0
  19. package/dist/cjs/angular/adapters/react/LazyList.d.ts +12 -0
  20. package/dist/cjs/angular/adapters/react/LazyList.d.ts.map +1 -0
  21. package/dist/cjs/angular/adapters/react/useLazyList.d.ts +22 -0
  22. package/dist/cjs/angular/adapters/react/useLazyList.d.ts.map +1 -0
  23. package/dist/cjs/angular/adapters/svelte/lazyScrollAction.d.ts +13 -0
  24. package/dist/cjs/angular/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  25. package/dist/cjs/angular/adapters/vue/useLazyScroll.d.ts +13 -0
  26. package/dist/cjs/angular/adapters/vue/useLazyScroll.d.ts.map +1 -0
  27. package/dist/cjs/angular/core/AdaptiveBufferCalculator.d.ts +46 -0
  28. package/dist/cjs/angular/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  29. package/dist/cjs/angular/core/ContentComplexityAnalyzer.d.ts +13 -0
  30. package/dist/cjs/angular/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  31. package/dist/cjs/angular/core/DevicePerformanceMonitor.d.ts +22 -0
  32. package/dist/cjs/angular/core/DevicePerformanceMonitor.d.ts.map +1 -0
  33. package/dist/cjs/angular/core/Engine.d.ts +56 -0
  34. package/dist/cjs/angular/core/Engine.d.ts.map +1 -0
  35. package/dist/cjs/angular/core/GPUAccelerator.d.ts +23 -0
  36. package/dist/cjs/angular/core/GPUAccelerator.d.ts.map +1 -0
  37. package/dist/cjs/angular/core/IntelligentScrollDetector.d.ts +19 -0
  38. package/dist/cjs/angular/core/IntelligentScrollDetector.d.ts.map +1 -0
  39. package/dist/cjs/angular/core/MemoryManager.d.ts +33 -0
  40. package/dist/cjs/angular/core/MemoryManager.d.ts.map +1 -0
  41. package/dist/cjs/angular/core/NetworkAwarePrefetchManager.d.ts +10 -0
  42. package/dist/cjs/angular/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  43. package/dist/cjs/angular/core/NetworkAwareRequestQueue.d.ts +20 -0
  44. package/dist/cjs/angular/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  45. package/dist/cjs/angular/core/NetworkSpeedDetector.d.ts +16 -0
  46. package/dist/cjs/angular/core/NetworkSpeedDetector.d.ts.map +1 -0
  47. package/dist/cjs/angular/core/PerformanceOptimizer.d.ts +39 -0
  48. package/dist/cjs/angular/core/PerformanceOptimizer.d.ts.map +1 -0
  49. package/dist/cjs/angular/core/PrefetchManager.d.ts +16 -0
  50. package/dist/cjs/angular/core/PrefetchManager.d.ts.map +1 -0
  51. package/dist/cjs/angular/core/RequestQueue.d.ts +23 -0
  52. package/dist/cjs/angular/core/RequestQueue.d.ts.map +1 -0
  53. package/dist/cjs/angular/core/WindowManager.d.ts +24 -0
  54. package/dist/cjs/angular/core/WindowManager.d.ts.map +1 -0
  55. package/dist/cjs/angular/core/types.d.ts +28 -0
  56. package/dist/cjs/angular/core/types.d.ts.map +1 -0
  57. package/dist/cjs/angular/index.d.ts +23 -0
  58. package/dist/cjs/angular/index.d.ts.map +1 -0
  59. package/dist/cjs/angular/index.js +1717 -0
  60. package/dist/cjs/angular/index.js.map +1 -0
  61. package/dist/cjs/angular/platform/browser/ScrollObserver.d.ts +25 -0
  62. package/dist/cjs/angular/platform/browser/ScrollObserver.d.ts.map +1 -0
  63. package/dist/cjs/angular/utils/debounce.d.ts +5 -0
  64. package/dist/cjs/angular/utils/debounce.d.ts.map +1 -0
  65. package/dist/cjs/angular/utils/throttle.d.ts +5 -0
  66. package/dist/cjs/angular/utils/throttle.d.ts.map +1 -0
  67. package/dist/cjs/core/Engine.d.ts +3 -0
  68. package/dist/cjs/core/Engine.d.ts.map +1 -1
  69. package/dist/cjs/core/GPUAccelerator.d.ts +23 -0
  70. package/dist/cjs/core/GPUAccelerator.d.ts.map +1 -0
  71. package/dist/cjs/core/MemoryManager.d.ts +33 -0
  72. package/dist/cjs/core/MemoryManager.d.ts.map +1 -0
  73. package/dist/cjs/core/PerformanceOptimizer.d.ts +39 -0
  74. package/dist/cjs/core/PerformanceOptimizer.d.ts.map +1 -0
  75. package/dist/cjs/index.d.ts +5 -0
  76. package/dist/cjs/index.d.ts.map +1 -1
  77. package/dist/cjs/index.js +811 -19
  78. package/dist/cjs/index.js.map +1 -1
  79. package/dist/cjs/svelte/adapters/angular/lazy-scroll.component.d.ts +28 -0
  80. package/dist/cjs/svelte/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  81. package/dist/cjs/svelte/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  82. package/dist/cjs/svelte/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  83. package/dist/cjs/svelte/adapters/index.d.ts +7 -0
  84. package/dist/cjs/svelte/adapters/index.d.ts.map +1 -0
  85. package/dist/cjs/svelte/adapters/react/LazyList.d.ts +12 -0
  86. package/dist/cjs/svelte/adapters/react/LazyList.d.ts.map +1 -0
  87. package/dist/cjs/svelte/adapters/react/useLazyList.d.ts +22 -0
  88. package/dist/cjs/svelte/adapters/react/useLazyList.d.ts.map +1 -0
  89. package/dist/cjs/svelte/adapters/svelte/lazyScrollAction.d.ts +13 -0
  90. package/dist/cjs/svelte/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  91. package/dist/cjs/svelte/adapters/vue/useLazyScroll.d.ts +13 -0
  92. package/dist/cjs/svelte/adapters/vue/useLazyScroll.d.ts.map +1 -0
  93. package/dist/cjs/svelte/core/AdaptiveBufferCalculator.d.ts +46 -0
  94. package/dist/cjs/svelte/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  95. package/dist/cjs/svelte/core/ContentComplexityAnalyzer.d.ts +13 -0
  96. package/dist/cjs/svelte/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  97. package/dist/cjs/svelte/core/DevicePerformanceMonitor.d.ts +22 -0
  98. package/dist/cjs/svelte/core/DevicePerformanceMonitor.d.ts.map +1 -0
  99. package/dist/cjs/svelte/core/Engine.d.ts +56 -0
  100. package/dist/cjs/svelte/core/Engine.d.ts.map +1 -0
  101. package/dist/cjs/svelte/core/GPUAccelerator.d.ts +23 -0
  102. package/dist/cjs/svelte/core/GPUAccelerator.d.ts.map +1 -0
  103. package/dist/cjs/svelte/core/IntelligentScrollDetector.d.ts +19 -0
  104. package/dist/cjs/svelte/core/IntelligentScrollDetector.d.ts.map +1 -0
  105. package/dist/cjs/svelte/core/MemoryManager.d.ts +33 -0
  106. package/dist/cjs/svelte/core/MemoryManager.d.ts.map +1 -0
  107. package/dist/cjs/svelte/core/NetworkAwarePrefetchManager.d.ts +10 -0
  108. package/dist/cjs/svelte/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  109. package/dist/cjs/svelte/core/NetworkAwareRequestQueue.d.ts +20 -0
  110. package/dist/cjs/svelte/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  111. package/dist/cjs/svelte/core/NetworkSpeedDetector.d.ts +16 -0
  112. package/dist/cjs/svelte/core/NetworkSpeedDetector.d.ts.map +1 -0
  113. package/dist/cjs/svelte/core/PerformanceOptimizer.d.ts +39 -0
  114. package/dist/cjs/svelte/core/PerformanceOptimizer.d.ts.map +1 -0
  115. package/dist/cjs/svelte/core/PrefetchManager.d.ts +16 -0
  116. package/dist/cjs/svelte/core/PrefetchManager.d.ts.map +1 -0
  117. package/dist/cjs/svelte/core/RequestQueue.d.ts +23 -0
  118. package/dist/cjs/svelte/core/RequestQueue.d.ts.map +1 -0
  119. package/dist/cjs/svelte/core/WindowManager.d.ts +24 -0
  120. package/dist/cjs/svelte/core/WindowManager.d.ts.map +1 -0
  121. package/dist/cjs/svelte/core/types.d.ts +28 -0
  122. package/dist/cjs/svelte/core/types.d.ts.map +1 -0
  123. package/dist/cjs/svelte/index.d.ts +23 -0
  124. package/dist/cjs/svelte/index.d.ts.map +1 -0
  125. package/dist/cjs/svelte/index.js +1423 -0
  126. package/dist/cjs/svelte/index.js.map +1 -0
  127. package/dist/cjs/svelte/platform/browser/ScrollObserver.d.ts +25 -0
  128. package/dist/cjs/svelte/platform/browser/ScrollObserver.d.ts.map +1 -0
  129. package/dist/cjs/svelte/utils/debounce.d.ts +5 -0
  130. package/dist/cjs/svelte/utils/debounce.d.ts.map +1 -0
  131. package/dist/cjs/svelte/utils/throttle.d.ts +5 -0
  132. package/dist/cjs/svelte/utils/throttle.d.ts.map +1 -0
  133. package/dist/cjs/vanilla/adapters/angular/lazy-scroll.component.d.ts +28 -0
  134. package/dist/cjs/vanilla/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  135. package/dist/cjs/vanilla/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  136. package/dist/cjs/vanilla/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  137. package/dist/cjs/vanilla/adapters/index.d.ts +7 -0
  138. package/dist/cjs/vanilla/adapters/index.d.ts.map +1 -0
  139. package/dist/cjs/vanilla/adapters/react/LazyList.d.ts +12 -0
  140. package/dist/cjs/vanilla/adapters/react/LazyList.d.ts.map +1 -0
  141. package/dist/cjs/vanilla/adapters/react/useLazyList.d.ts +22 -0
  142. package/dist/cjs/vanilla/adapters/react/useLazyList.d.ts.map +1 -0
  143. package/dist/cjs/vanilla/adapters/svelte/lazyScrollAction.d.ts +13 -0
  144. package/dist/cjs/vanilla/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  145. package/dist/cjs/vanilla/adapters/vue/useLazyScroll.d.ts +13 -0
  146. package/dist/cjs/vanilla/adapters/vue/useLazyScroll.d.ts.map +1 -0
  147. package/dist/cjs/vanilla/core/AdaptiveBufferCalculator.d.ts +46 -0
  148. package/dist/cjs/vanilla/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  149. package/dist/cjs/vanilla/core/ContentComplexityAnalyzer.d.ts +13 -0
  150. package/dist/cjs/vanilla/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  151. package/dist/cjs/vanilla/core/DevicePerformanceMonitor.d.ts +22 -0
  152. package/dist/cjs/vanilla/core/DevicePerformanceMonitor.d.ts.map +1 -0
  153. package/dist/cjs/vanilla/core/Engine.d.ts +56 -0
  154. package/dist/cjs/vanilla/core/Engine.d.ts.map +1 -0
  155. package/dist/cjs/vanilla/core/GPUAccelerator.d.ts +23 -0
  156. package/dist/cjs/vanilla/core/GPUAccelerator.d.ts.map +1 -0
  157. package/dist/cjs/vanilla/core/IntelligentScrollDetector.d.ts +19 -0
  158. package/dist/cjs/vanilla/core/IntelligentScrollDetector.d.ts.map +1 -0
  159. package/dist/cjs/vanilla/core/MemoryManager.d.ts +33 -0
  160. package/dist/cjs/vanilla/core/MemoryManager.d.ts.map +1 -0
  161. package/dist/cjs/vanilla/core/NetworkAwarePrefetchManager.d.ts +10 -0
  162. package/dist/cjs/vanilla/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  163. package/dist/cjs/vanilla/core/NetworkAwareRequestQueue.d.ts +20 -0
  164. package/dist/cjs/vanilla/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  165. package/dist/cjs/vanilla/core/NetworkSpeedDetector.d.ts +16 -0
  166. package/dist/cjs/vanilla/core/NetworkSpeedDetector.d.ts.map +1 -0
  167. package/dist/cjs/vanilla/core/PerformanceOptimizer.d.ts +39 -0
  168. package/dist/cjs/vanilla/core/PerformanceOptimizer.d.ts.map +1 -0
  169. package/dist/cjs/vanilla/core/PrefetchManager.d.ts +16 -0
  170. package/dist/cjs/vanilla/core/PrefetchManager.d.ts.map +1 -0
  171. package/dist/cjs/vanilla/core/RequestQueue.d.ts +23 -0
  172. package/dist/cjs/vanilla/core/RequestQueue.d.ts.map +1 -0
  173. package/dist/cjs/vanilla/core/WindowManager.d.ts +24 -0
  174. package/dist/cjs/vanilla/core/WindowManager.d.ts.map +1 -0
  175. package/dist/cjs/vanilla/core/types.d.ts +28 -0
  176. package/dist/cjs/vanilla/core/types.d.ts.map +1 -0
  177. package/dist/cjs/vanilla/index.d.ts +23 -0
  178. package/dist/cjs/vanilla/index.d.ts.map +1 -0
  179. package/dist/cjs/vanilla/index.js +1670 -0
  180. package/dist/cjs/vanilla/index.js.map +1 -0
  181. package/dist/cjs/vanilla/platform/browser/ScrollObserver.d.ts +25 -0
  182. package/dist/cjs/vanilla/platform/browser/ScrollObserver.d.ts.map +1 -0
  183. package/dist/cjs/vanilla/utils/debounce.d.ts +5 -0
  184. package/dist/cjs/vanilla/utils/debounce.d.ts.map +1 -0
  185. package/dist/cjs/vanilla/utils/throttle.d.ts +5 -0
  186. package/dist/cjs/vanilla/utils/throttle.d.ts.map +1 -0
  187. package/dist/cjs/vue/adapters/angular/lazy-scroll.component.d.ts +28 -0
  188. package/dist/cjs/vue/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  189. package/dist/cjs/vue/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  190. package/dist/cjs/vue/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  191. package/dist/cjs/vue/adapters/index.d.ts +7 -0
  192. package/dist/cjs/vue/adapters/index.d.ts.map +1 -0
  193. package/dist/cjs/vue/adapters/react/LazyList.d.ts +12 -0
  194. package/dist/cjs/vue/adapters/react/LazyList.d.ts.map +1 -0
  195. package/dist/cjs/vue/adapters/react/useLazyList.d.ts +22 -0
  196. package/dist/cjs/vue/adapters/react/useLazyList.d.ts.map +1 -0
  197. package/dist/cjs/vue/adapters/svelte/lazyScrollAction.d.ts +13 -0
  198. package/dist/cjs/vue/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  199. package/dist/cjs/vue/adapters/vue/useLazyScroll.d.ts +13 -0
  200. package/dist/cjs/vue/adapters/vue/useLazyScroll.d.ts.map +1 -0
  201. package/dist/cjs/vue/core/AdaptiveBufferCalculator.d.ts +46 -0
  202. package/dist/cjs/vue/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  203. package/dist/cjs/vue/core/ContentComplexityAnalyzer.d.ts +13 -0
  204. package/dist/cjs/vue/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  205. package/dist/cjs/vue/core/DevicePerformanceMonitor.d.ts +22 -0
  206. package/dist/cjs/vue/core/DevicePerformanceMonitor.d.ts.map +1 -0
  207. package/dist/cjs/vue/core/Engine.d.ts +56 -0
  208. package/dist/cjs/vue/core/Engine.d.ts.map +1 -0
  209. package/dist/cjs/vue/core/GPUAccelerator.d.ts +23 -0
  210. package/dist/cjs/vue/core/GPUAccelerator.d.ts.map +1 -0
  211. package/dist/cjs/vue/core/IntelligentScrollDetector.d.ts +19 -0
  212. package/dist/cjs/vue/core/IntelligentScrollDetector.d.ts.map +1 -0
  213. package/dist/cjs/vue/core/MemoryManager.d.ts +33 -0
  214. package/dist/cjs/vue/core/MemoryManager.d.ts.map +1 -0
  215. package/dist/cjs/vue/core/NetworkAwarePrefetchManager.d.ts +10 -0
  216. package/dist/cjs/vue/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  217. package/dist/cjs/vue/core/NetworkAwareRequestQueue.d.ts +20 -0
  218. package/dist/cjs/vue/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  219. package/dist/cjs/vue/core/NetworkSpeedDetector.d.ts +16 -0
  220. package/dist/cjs/vue/core/NetworkSpeedDetector.d.ts.map +1 -0
  221. package/dist/cjs/vue/core/PerformanceOptimizer.d.ts +39 -0
  222. package/dist/cjs/vue/core/PerformanceOptimizer.d.ts.map +1 -0
  223. package/dist/cjs/vue/core/PrefetchManager.d.ts +16 -0
  224. package/dist/cjs/vue/core/PrefetchManager.d.ts.map +1 -0
  225. package/dist/cjs/vue/core/RequestQueue.d.ts +23 -0
  226. package/dist/cjs/vue/core/RequestQueue.d.ts.map +1 -0
  227. package/dist/cjs/vue/core/WindowManager.d.ts +24 -0
  228. package/dist/cjs/vue/core/WindowManager.d.ts.map +1 -0
  229. package/dist/cjs/vue/core/types.d.ts +28 -0
  230. package/dist/cjs/vue/core/types.d.ts.map +1 -0
  231. package/dist/cjs/vue/index.d.ts +23 -0
  232. package/dist/cjs/vue/index.d.ts.map +1 -0
  233. package/dist/cjs/vue/index.js +1443 -0
  234. package/dist/cjs/vue/index.js.map +1 -0
  235. package/dist/cjs/vue/platform/browser/ScrollObserver.d.ts +25 -0
  236. package/dist/cjs/vue/platform/browser/ScrollObserver.d.ts.map +1 -0
  237. package/dist/cjs/vue/utils/debounce.d.ts +5 -0
  238. package/dist/cjs/vue/utils/debounce.d.ts.map +1 -0
  239. package/dist/cjs/vue/utils/throttle.d.ts +5 -0
  240. package/dist/cjs/vue/utils/throttle.d.ts.map +1 -0
  241. package/dist/esm/adapters/angular/lazy-scroll.component.d.ts +28 -0
  242. package/dist/esm/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  243. package/dist/esm/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  244. package/dist/esm/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  245. package/dist/esm/adapters/index.d.ts +7 -0
  246. package/dist/esm/adapters/index.d.ts.map +1 -0
  247. package/dist/esm/adapters/svelte/lazyScrollAction.d.ts +13 -0
  248. package/dist/esm/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  249. package/dist/esm/adapters/vue/useLazyScroll.d.ts +13 -0
  250. package/dist/esm/adapters/vue/useLazyScroll.d.ts.map +1 -0
  251. package/dist/esm/angular/adapters/angular/lazy-scroll.component.d.ts +28 -0
  252. package/dist/esm/angular/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  253. package/dist/esm/angular/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  254. package/dist/esm/angular/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  255. package/dist/esm/angular/adapters/index.d.ts +7 -0
  256. package/dist/esm/angular/adapters/index.d.ts.map +1 -0
  257. package/dist/esm/angular/adapters/react/LazyList.d.ts +12 -0
  258. package/dist/esm/angular/adapters/react/LazyList.d.ts.map +1 -0
  259. package/dist/esm/angular/adapters/react/useLazyList.d.ts +22 -0
  260. package/dist/esm/angular/adapters/react/useLazyList.d.ts.map +1 -0
  261. package/dist/esm/angular/adapters/svelte/lazyScrollAction.d.ts +13 -0
  262. package/dist/esm/angular/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  263. package/dist/esm/angular/adapters/vue/useLazyScroll.d.ts +13 -0
  264. package/dist/esm/angular/adapters/vue/useLazyScroll.d.ts.map +1 -0
  265. package/dist/esm/angular/core/AdaptiveBufferCalculator.d.ts +46 -0
  266. package/dist/esm/angular/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  267. package/dist/esm/angular/core/ContentComplexityAnalyzer.d.ts +13 -0
  268. package/dist/esm/angular/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  269. package/dist/esm/angular/core/DevicePerformanceMonitor.d.ts +22 -0
  270. package/dist/esm/angular/core/DevicePerformanceMonitor.d.ts.map +1 -0
  271. package/dist/esm/angular/core/Engine.d.ts +56 -0
  272. package/dist/esm/angular/core/Engine.d.ts.map +1 -0
  273. package/dist/esm/angular/core/GPUAccelerator.d.ts +23 -0
  274. package/dist/esm/angular/core/GPUAccelerator.d.ts.map +1 -0
  275. package/dist/esm/angular/core/IntelligentScrollDetector.d.ts +19 -0
  276. package/dist/esm/angular/core/IntelligentScrollDetector.d.ts.map +1 -0
  277. package/dist/esm/angular/core/MemoryManager.d.ts +33 -0
  278. package/dist/esm/angular/core/MemoryManager.d.ts.map +1 -0
  279. package/dist/esm/angular/core/NetworkAwarePrefetchManager.d.ts +10 -0
  280. package/dist/esm/angular/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  281. package/dist/esm/angular/core/NetworkAwareRequestQueue.d.ts +20 -0
  282. package/dist/esm/angular/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  283. package/dist/esm/angular/core/NetworkSpeedDetector.d.ts +16 -0
  284. package/dist/esm/angular/core/NetworkSpeedDetector.d.ts.map +1 -0
  285. package/dist/esm/angular/core/PerformanceOptimizer.d.ts +39 -0
  286. package/dist/esm/angular/core/PerformanceOptimizer.d.ts.map +1 -0
  287. package/dist/esm/angular/core/PrefetchManager.d.ts +16 -0
  288. package/dist/esm/angular/core/PrefetchManager.d.ts.map +1 -0
  289. package/dist/esm/angular/core/RequestQueue.d.ts +23 -0
  290. package/dist/esm/angular/core/RequestQueue.d.ts.map +1 -0
  291. package/dist/esm/angular/core/WindowManager.d.ts +24 -0
  292. package/dist/esm/angular/core/WindowManager.d.ts.map +1 -0
  293. package/dist/esm/angular/core/types.d.ts +28 -0
  294. package/dist/esm/angular/core/types.d.ts.map +1 -0
  295. package/dist/esm/angular/index.d.ts +23 -0
  296. package/dist/esm/angular/index.d.ts.map +1 -0
  297. package/dist/esm/angular/index.js +1714 -0
  298. package/dist/esm/angular/index.js.map +1 -0
  299. package/dist/esm/angular/platform/browser/ScrollObserver.d.ts +25 -0
  300. package/dist/esm/angular/platform/browser/ScrollObserver.d.ts.map +1 -0
  301. package/dist/esm/angular/utils/debounce.d.ts +5 -0
  302. package/dist/esm/angular/utils/debounce.d.ts.map +1 -0
  303. package/dist/esm/angular/utils/throttle.d.ts +5 -0
  304. package/dist/esm/angular/utils/throttle.d.ts.map +1 -0
  305. package/dist/esm/core/Engine.d.ts +3 -0
  306. package/dist/esm/core/Engine.d.ts.map +1 -1
  307. package/dist/esm/core/GPUAccelerator.d.ts +23 -0
  308. package/dist/esm/core/GPUAccelerator.d.ts.map +1 -0
  309. package/dist/esm/core/MemoryManager.d.ts +33 -0
  310. package/dist/esm/core/MemoryManager.d.ts.map +1 -0
  311. package/dist/esm/core/PerformanceOptimizer.d.ts +39 -0
  312. package/dist/esm/core/PerformanceOptimizer.d.ts.map +1 -0
  313. package/dist/esm/index.d.ts +5 -0
  314. package/dist/esm/index.d.ts.map +1 -1
  315. package/dist/esm/index.js +806 -20
  316. package/dist/esm/index.js.map +1 -1
  317. package/dist/esm/svelte/adapters/angular/lazy-scroll.component.d.ts +28 -0
  318. package/dist/esm/svelte/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  319. package/dist/esm/svelte/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  320. package/dist/esm/svelte/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  321. package/dist/esm/svelte/adapters/index.d.ts +7 -0
  322. package/dist/esm/svelte/adapters/index.d.ts.map +1 -0
  323. package/dist/esm/svelte/adapters/react/LazyList.d.ts +12 -0
  324. package/dist/esm/svelte/adapters/react/LazyList.d.ts.map +1 -0
  325. package/dist/esm/svelte/adapters/react/useLazyList.d.ts +22 -0
  326. package/dist/esm/svelte/adapters/react/useLazyList.d.ts.map +1 -0
  327. package/dist/esm/svelte/adapters/svelte/lazyScrollAction.d.ts +13 -0
  328. package/dist/esm/svelte/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  329. package/dist/esm/svelte/adapters/vue/useLazyScroll.d.ts +13 -0
  330. package/dist/esm/svelte/adapters/vue/useLazyScroll.d.ts.map +1 -0
  331. package/dist/esm/svelte/core/AdaptiveBufferCalculator.d.ts +46 -0
  332. package/dist/esm/svelte/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  333. package/dist/esm/svelte/core/ContentComplexityAnalyzer.d.ts +13 -0
  334. package/dist/esm/svelte/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  335. package/dist/esm/svelte/core/DevicePerformanceMonitor.d.ts +22 -0
  336. package/dist/esm/svelte/core/DevicePerformanceMonitor.d.ts.map +1 -0
  337. package/dist/esm/svelte/core/Engine.d.ts +56 -0
  338. package/dist/esm/svelte/core/Engine.d.ts.map +1 -0
  339. package/dist/esm/svelte/core/GPUAccelerator.d.ts +23 -0
  340. package/dist/esm/svelte/core/GPUAccelerator.d.ts.map +1 -0
  341. package/dist/esm/svelte/core/IntelligentScrollDetector.d.ts +19 -0
  342. package/dist/esm/svelte/core/IntelligentScrollDetector.d.ts.map +1 -0
  343. package/dist/esm/svelte/core/MemoryManager.d.ts +33 -0
  344. package/dist/esm/svelte/core/MemoryManager.d.ts.map +1 -0
  345. package/dist/esm/svelte/core/NetworkAwarePrefetchManager.d.ts +10 -0
  346. package/dist/esm/svelte/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  347. package/dist/esm/svelte/core/NetworkAwareRequestQueue.d.ts +20 -0
  348. package/dist/esm/svelte/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  349. package/dist/esm/svelte/core/NetworkSpeedDetector.d.ts +16 -0
  350. package/dist/esm/svelte/core/NetworkSpeedDetector.d.ts.map +1 -0
  351. package/dist/esm/svelte/core/PerformanceOptimizer.d.ts +39 -0
  352. package/dist/esm/svelte/core/PerformanceOptimizer.d.ts.map +1 -0
  353. package/dist/esm/svelte/core/PrefetchManager.d.ts +16 -0
  354. package/dist/esm/svelte/core/PrefetchManager.d.ts.map +1 -0
  355. package/dist/esm/svelte/core/RequestQueue.d.ts +23 -0
  356. package/dist/esm/svelte/core/RequestQueue.d.ts.map +1 -0
  357. package/dist/esm/svelte/core/WindowManager.d.ts +24 -0
  358. package/dist/esm/svelte/core/WindowManager.d.ts.map +1 -0
  359. package/dist/esm/svelte/core/types.d.ts +28 -0
  360. package/dist/esm/svelte/core/types.d.ts.map +1 -0
  361. package/dist/esm/svelte/index.d.ts +23 -0
  362. package/dist/esm/svelte/index.d.ts.map +1 -0
  363. package/dist/esm/svelte/index.js +1421 -0
  364. package/dist/esm/svelte/index.js.map +1 -0
  365. package/dist/esm/svelte/platform/browser/ScrollObserver.d.ts +25 -0
  366. package/dist/esm/svelte/platform/browser/ScrollObserver.d.ts.map +1 -0
  367. package/dist/esm/svelte/utils/debounce.d.ts +5 -0
  368. package/dist/esm/svelte/utils/debounce.d.ts.map +1 -0
  369. package/dist/esm/svelte/utils/throttle.d.ts +5 -0
  370. package/dist/esm/svelte/utils/throttle.d.ts.map +1 -0
  371. package/dist/esm/vanilla/adapters/angular/lazy-scroll.component.d.ts +28 -0
  372. package/dist/esm/vanilla/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  373. package/dist/esm/vanilla/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  374. package/dist/esm/vanilla/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  375. package/dist/esm/vanilla/adapters/index.d.ts +7 -0
  376. package/dist/esm/vanilla/adapters/index.d.ts.map +1 -0
  377. package/dist/esm/vanilla/adapters/react/LazyList.d.ts +12 -0
  378. package/dist/esm/vanilla/adapters/react/LazyList.d.ts.map +1 -0
  379. package/dist/esm/vanilla/adapters/react/useLazyList.d.ts +22 -0
  380. package/dist/esm/vanilla/adapters/react/useLazyList.d.ts.map +1 -0
  381. package/dist/esm/vanilla/adapters/svelte/lazyScrollAction.d.ts +13 -0
  382. package/dist/esm/vanilla/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  383. package/dist/esm/vanilla/adapters/vue/useLazyScroll.d.ts +13 -0
  384. package/dist/esm/vanilla/adapters/vue/useLazyScroll.d.ts.map +1 -0
  385. package/dist/esm/vanilla/core/AdaptiveBufferCalculator.d.ts +46 -0
  386. package/dist/esm/vanilla/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  387. package/dist/esm/vanilla/core/ContentComplexityAnalyzer.d.ts +13 -0
  388. package/dist/esm/vanilla/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  389. package/dist/esm/vanilla/core/DevicePerformanceMonitor.d.ts +22 -0
  390. package/dist/esm/vanilla/core/DevicePerformanceMonitor.d.ts.map +1 -0
  391. package/dist/esm/vanilla/core/Engine.d.ts +56 -0
  392. package/dist/esm/vanilla/core/Engine.d.ts.map +1 -0
  393. package/dist/esm/vanilla/core/GPUAccelerator.d.ts +23 -0
  394. package/dist/esm/vanilla/core/GPUAccelerator.d.ts.map +1 -0
  395. package/dist/esm/vanilla/core/IntelligentScrollDetector.d.ts +19 -0
  396. package/dist/esm/vanilla/core/IntelligentScrollDetector.d.ts.map +1 -0
  397. package/dist/esm/vanilla/core/MemoryManager.d.ts +33 -0
  398. package/dist/esm/vanilla/core/MemoryManager.d.ts.map +1 -0
  399. package/dist/esm/vanilla/core/NetworkAwarePrefetchManager.d.ts +10 -0
  400. package/dist/esm/vanilla/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  401. package/dist/esm/vanilla/core/NetworkAwareRequestQueue.d.ts +20 -0
  402. package/dist/esm/vanilla/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  403. package/dist/esm/vanilla/core/NetworkSpeedDetector.d.ts +16 -0
  404. package/dist/esm/vanilla/core/NetworkSpeedDetector.d.ts.map +1 -0
  405. package/dist/esm/vanilla/core/PerformanceOptimizer.d.ts +39 -0
  406. package/dist/esm/vanilla/core/PerformanceOptimizer.d.ts.map +1 -0
  407. package/dist/esm/vanilla/core/PrefetchManager.d.ts +16 -0
  408. package/dist/esm/vanilla/core/PrefetchManager.d.ts.map +1 -0
  409. package/dist/esm/vanilla/core/RequestQueue.d.ts +23 -0
  410. package/dist/esm/vanilla/core/RequestQueue.d.ts.map +1 -0
  411. package/dist/esm/vanilla/core/WindowManager.d.ts +24 -0
  412. package/dist/esm/vanilla/core/WindowManager.d.ts.map +1 -0
  413. package/dist/esm/vanilla/core/types.d.ts +28 -0
  414. package/dist/esm/vanilla/core/types.d.ts.map +1 -0
  415. package/dist/esm/vanilla/index.d.ts +23 -0
  416. package/dist/esm/vanilla/index.d.ts.map +1 -0
  417. package/dist/esm/vanilla/index.js +1666 -0
  418. package/dist/esm/vanilla/index.js.map +1 -0
  419. package/dist/esm/vanilla/platform/browser/ScrollObserver.d.ts +25 -0
  420. package/dist/esm/vanilla/platform/browser/ScrollObserver.d.ts.map +1 -0
  421. package/dist/esm/vanilla/utils/debounce.d.ts +5 -0
  422. package/dist/esm/vanilla/utils/debounce.d.ts.map +1 -0
  423. package/dist/esm/vanilla/utils/throttle.d.ts +5 -0
  424. package/dist/esm/vanilla/utils/throttle.d.ts.map +1 -0
  425. package/dist/esm/vue/adapters/angular/lazy-scroll.component.d.ts +28 -0
  426. package/dist/esm/vue/adapters/angular/lazy-scroll.component.d.ts.map +1 -0
  427. package/dist/esm/vue/adapters/angular/lazy-scroll.directive.d.ts +21 -0
  428. package/dist/esm/vue/adapters/angular/lazy-scroll.directive.d.ts.map +1 -0
  429. package/dist/esm/vue/adapters/index.d.ts +7 -0
  430. package/dist/esm/vue/adapters/index.d.ts.map +1 -0
  431. package/dist/esm/vue/adapters/react/LazyList.d.ts +12 -0
  432. package/dist/esm/vue/adapters/react/LazyList.d.ts.map +1 -0
  433. package/dist/esm/vue/adapters/react/useLazyList.d.ts +22 -0
  434. package/dist/esm/vue/adapters/react/useLazyList.d.ts.map +1 -0
  435. package/dist/esm/vue/adapters/svelte/lazyScrollAction.d.ts +13 -0
  436. package/dist/esm/vue/adapters/svelte/lazyScrollAction.d.ts.map +1 -0
  437. package/dist/esm/vue/adapters/vue/useLazyScroll.d.ts +13 -0
  438. package/dist/esm/vue/adapters/vue/useLazyScroll.d.ts.map +1 -0
  439. package/dist/esm/vue/core/AdaptiveBufferCalculator.d.ts +46 -0
  440. package/dist/esm/vue/core/AdaptiveBufferCalculator.d.ts.map +1 -0
  441. package/dist/esm/vue/core/ContentComplexityAnalyzer.d.ts +13 -0
  442. package/dist/esm/vue/core/ContentComplexityAnalyzer.d.ts.map +1 -0
  443. package/dist/esm/vue/core/DevicePerformanceMonitor.d.ts +22 -0
  444. package/dist/esm/vue/core/DevicePerformanceMonitor.d.ts.map +1 -0
  445. package/dist/esm/vue/core/Engine.d.ts +56 -0
  446. package/dist/esm/vue/core/Engine.d.ts.map +1 -0
  447. package/dist/esm/vue/core/GPUAccelerator.d.ts +23 -0
  448. package/dist/esm/vue/core/GPUAccelerator.d.ts.map +1 -0
  449. package/dist/esm/vue/core/IntelligentScrollDetector.d.ts +19 -0
  450. package/dist/esm/vue/core/IntelligentScrollDetector.d.ts.map +1 -0
  451. package/dist/esm/vue/core/MemoryManager.d.ts +33 -0
  452. package/dist/esm/vue/core/MemoryManager.d.ts.map +1 -0
  453. package/dist/esm/vue/core/NetworkAwarePrefetchManager.d.ts +10 -0
  454. package/dist/esm/vue/core/NetworkAwarePrefetchManager.d.ts.map +1 -0
  455. package/dist/esm/vue/core/NetworkAwareRequestQueue.d.ts +20 -0
  456. package/dist/esm/vue/core/NetworkAwareRequestQueue.d.ts.map +1 -0
  457. package/dist/esm/vue/core/NetworkSpeedDetector.d.ts +16 -0
  458. package/dist/esm/vue/core/NetworkSpeedDetector.d.ts.map +1 -0
  459. package/dist/esm/vue/core/PerformanceOptimizer.d.ts +39 -0
  460. package/dist/esm/vue/core/PerformanceOptimizer.d.ts.map +1 -0
  461. package/dist/esm/vue/core/PrefetchManager.d.ts +16 -0
  462. package/dist/esm/vue/core/PrefetchManager.d.ts.map +1 -0
  463. package/dist/esm/vue/core/RequestQueue.d.ts +23 -0
  464. package/dist/esm/vue/core/RequestQueue.d.ts.map +1 -0
  465. package/dist/esm/vue/core/WindowManager.d.ts +24 -0
  466. package/dist/esm/vue/core/WindowManager.d.ts.map +1 -0
  467. package/dist/esm/vue/core/types.d.ts +28 -0
  468. package/dist/esm/vue/core/types.d.ts.map +1 -0
  469. package/dist/esm/vue/index.d.ts +23 -0
  470. package/dist/esm/vue/index.d.ts.map +1 -0
  471. package/dist/esm/vue/index.js +1441 -0
  472. package/dist/esm/vue/index.js.map +1 -0
  473. package/dist/esm/vue/platform/browser/ScrollObserver.d.ts +25 -0
  474. package/dist/esm/vue/platform/browser/ScrollObserver.d.ts.map +1 -0
  475. package/dist/esm/vue/utils/debounce.d.ts +5 -0
  476. package/dist/esm/vue/utils/debounce.d.ts.map +1 -0
  477. package/dist/esm/vue/utils/throttle.d.ts +5 -0
  478. package/dist/esm/vue/utils/throttle.d.ts.map +1 -0
  479. package/dist/index.d.ts +379 -1
  480. package/dist/svelte/index.d.ts +16 -0
  481. package/dist/vanilla/index.d.ts +356 -0
  482. package/dist/vue/index.d.ts +22 -0
  483. package/package.json +28 -1
package/dist/cjs/index.js CHANGED
@@ -745,6 +745,499 @@ class AdaptiveBufferCalculator {
745
745
  }
746
746
  }
747
747
 
748
+ class PerformanceOptimizer {
749
+ constructor() {
750
+ this.frameBudget = 16; // Target for 60fps (16.67ms per frame)
751
+ this.lastFrameTime = 0;
752
+ this.animationFrameId = null;
753
+ this.isOptimizing = false;
754
+ // Frame rate limiter to prevent excessive updates
755
+ this.lastUpdate = 0;
756
+ this.minUpdateInterval = 16; // Minimum 16ms between updates (60fps)
757
+ // Batch updates to reduce DOM manipulations
758
+ this.updateQueue = [];
759
+ this.isProcessingQueue = false;
760
+ // Memory optimization
761
+ this.cleanupThreshold = 1000; // Clean up items beyond this threshold
762
+ this.gcInterval = null;
763
+ this.setupPerformanceMonitoring();
764
+ }
765
+ // Optimize rendering by limiting updates to frame budget
766
+ scheduleOptimizedUpdate(updateFn) {
767
+ const now = performance.now();
768
+ // Throttle updates based on frame rate
769
+ if (now - this.lastUpdate < this.minUpdateInterval) {
770
+ // Queue the update for later
771
+ this.updateQueue.push(updateFn);
772
+ if (!this.isProcessingQueue) {
773
+ this.processUpdateQueue();
774
+ }
775
+ return;
776
+ }
777
+ // Check if we have enough time in the current frame
778
+ if (this.getTimeRemaining() > 4) { // Leave 4ms buffer
779
+ updateFn();
780
+ this.lastUpdate = now;
781
+ }
782
+ else {
783
+ // Schedule for next frame
784
+ this.updateQueue.push(updateFn);
785
+ if (!this.isProcessingQueue) {
786
+ this.processUpdateQueue();
787
+ }
788
+ }
789
+ }
790
+ // Process queued updates efficiently
791
+ async processUpdateQueue() {
792
+ if (this.updateQueue.length === 0) {
793
+ this.isProcessingQueue = false;
794
+ return;
795
+ }
796
+ this.isProcessingQueue = true;
797
+ const currentTime = performance.now();
798
+ // Process as many updates as possible within frame budget
799
+ while (this.updateQueue.length > 0 && this.getTimeRemaining() > 2) {
800
+ const updateFn = this.updateQueue.shift();
801
+ if (updateFn) {
802
+ updateFn();
803
+ }
804
+ }
805
+ this.lastUpdate = currentTime;
806
+ if (this.updateQueue.length > 0) {
807
+ // Schedule remaining updates for next frame (only in browser environment)
808
+ if (typeof requestAnimationFrame !== 'undefined') {
809
+ requestAnimationFrame(() => this.processUpdateQueue());
810
+ }
811
+ else {
812
+ // In Node.js environment, use setTimeout as fallback
813
+ setTimeout(() => this.processUpdateQueue(), 0);
814
+ }
815
+ }
816
+ else {
817
+ this.isProcessingQueue = false;
818
+ }
819
+ }
820
+ // Get remaining time in current frame
821
+ getTimeRemaining() {
822
+ if (typeof performance === 'undefined' || !performance.now) {
823
+ return 16; // Fallback to 60fps
824
+ }
825
+ const currentTime = performance.now();
826
+ // Typically browsers target 10ms remaining time for smoothness
827
+ return Math.max(0, this.frameBudget - (currentTime - this.lastFrameTime));
828
+ }
829
+ // Memory optimization: cleanup off-screen items
830
+ optimizeMemory(cleanupFn, visibleRange) {
831
+ // Determine cleanup range (items far from visible range)
832
+ const cleanupStart = Math.max(0, visibleRange.end + this.cleanupThreshold);
833
+ const cleanupEnd = Math.max(0, visibleRange.start - this.cleanupThreshold);
834
+ if (cleanupStart > visibleRange.end) {
835
+ cleanupFn(visibleRange.end, cleanupStart);
836
+ }
837
+ if (cleanupEnd < visibleRange.start) {
838
+ cleanupFn(cleanupEnd, visibleRange.start);
839
+ }
840
+ }
841
+ // Enable GPU acceleration for smoother scrolling
842
+ enableGPUCssAcceleration(element) {
843
+ // Force hardware acceleration
844
+ element.style.willChange = 'transform';
845
+ element.style.transform = 'translateZ(0)';
846
+ element.style.backfaceVisibility = 'hidden';
847
+ }
848
+ // Disable GPU acceleration when not needed
849
+ disableGPUCssAcceleration(element) {
850
+ element.style.willChange = 'auto';
851
+ element.style.transform = '';
852
+ element.style.backfaceVisibility = '';
853
+ }
854
+ // Optimize for different device capabilities
855
+ getOptimizationProfile() {
856
+ // Simple profile detection based on common device characteristics
857
+ const userAgent = navigator.userAgent || navigator.vendor || window.opera;
858
+ // Detect low-end devices
859
+ if (this.isLowEndDevice(userAgent)) {
860
+ return {
861
+ frameRate: 30, // Lower target for low-end devices
862
+ batchSize: 5, // Smaller batches
863
+ bufferMultiplier: 0.5, // Smaller buffer
864
+ updateInterval: 32 // 30fps interval
865
+ };
866
+ }
867
+ // Default profile for capable devices
868
+ return {
869
+ frameRate: 60,
870
+ batchSize: 10,
871
+ bufferMultiplier: 1.0,
872
+ updateInterval: 16 // 60fps interval
873
+ };
874
+ }
875
+ isLowEndDevice(userAgent) {
876
+ // Simple heuristic for low-end devices
877
+ const lowEndPatterns = [
878
+ /Android.*Mobile/,
879
+ /iPhone.*OS [0-9]+_[0-9]+/,
880
+ /Opera Mini/,
881
+ /IEMobile/
882
+ ];
883
+ return lowEndPatterns.some(pattern => pattern.test(userAgent));
884
+ }
885
+ // Setup performance monitoring
886
+ setupPerformanceMonitoring() {
887
+ // Check if we're in a browser environment
888
+ if (typeof window === 'undefined' || typeof requestAnimationFrame === 'undefined') {
889
+ // In Node.js environment, skip browser-specific monitoring
890
+ return;
891
+ }
892
+ // Monitor frame rate
893
+ let frameCount = 0;
894
+ let lastTime = performance.now();
895
+ const monitorFrameRate = () => {
896
+ frameCount++;
897
+ const currentTime = performance.now();
898
+ if (currentTime - lastTime >= 1000) { // Every second
899
+ const fps = frameCount;
900
+ frameCount = 0;
901
+ lastTime = currentTime;
902
+ // Adjust optimization based on actual FPS
903
+ if (fps < 30) {
904
+ this.frameBudget = 32; // Target 30fps
905
+ }
906
+ else if (fps < 50) {
907
+ this.frameBudget = 20; // Target 50fps
908
+ }
909
+ else {
910
+ this.frameBudget = 16; // Target 60fps
911
+ }
912
+ }
913
+ this.animationFrameId = requestAnimationFrame(monitorFrameRate);
914
+ };
915
+ this.animationFrameId = requestAnimationFrame(monitorFrameRate);
916
+ // Setup garbage collection monitoring
917
+ this.gcInterval = window.setInterval(() => {
918
+ if ('gc' in window) {
919
+ // @ts-ignore - gc is non-standard
920
+ window.gc();
921
+ }
922
+ }, 30000); // GC every 30 seconds
923
+ }
924
+ // Get performance insights
925
+ getPerformanceInsights() {
926
+ return {
927
+ frameRate: 60, // Would be calculated from monitoring
928
+ memoryUsage: this.getMemoryUsage(),
929
+ updateFrequency: 1000 / this.minUpdateInterval,
930
+ optimizationActive: this.isOptimizing
931
+ };
932
+ }
933
+ getMemoryUsage() {
934
+ var _a;
935
+ if ('memory' in performance) {
936
+ // @ts-ignore - memory property is non-standard
937
+ return ((_a = performance.memory) === null || _a === void 0 ? void 0 : _a.usedJSHeapSize) || null;
938
+ }
939
+ return null;
940
+ }
941
+ // Cleanup resources
942
+ cleanup() {
943
+ if (this.animationFrameId && typeof cancelAnimationFrame !== 'undefined') {
944
+ cancelAnimationFrame(this.animationFrameId);
945
+ }
946
+ if (this.gcInterval && typeof clearInterval !== 'undefined') {
947
+ clearInterval(this.gcInterval);
948
+ }
949
+ this.updateQueue = [];
950
+ this.isProcessingQueue = false;
951
+ }
952
+ }
953
+
954
+ class MemoryManager {
955
+ constructor(maxCacheSize = 1000) {
956
+ this.itemCache = new Map();
957
+ this.maxCacheSize = 1000; // Maximum items to keep in cache
958
+ this.cleanupThreshold = 500; // Start cleanup when cache exceeds this
959
+ this.visibleRange = { start: 0, end: 0 };
960
+ this.totalItems = 0;
961
+ this.maxCacheSize = maxCacheSize;
962
+ }
963
+ // Set visible range to optimize cache
964
+ setVisibleRange(range) {
965
+ this.visibleRange = range;
966
+ }
967
+ // Set total number of items
968
+ setTotalItems(total) {
969
+ this.totalItems = total;
970
+ }
971
+ // Get item from cache
972
+ get(key) {
973
+ return this.itemCache.get(key) || null;
974
+ }
975
+ // Set item in cache
976
+ set(key, value) {
977
+ this.itemCache.set(key, value);
978
+ // Clean up if cache is too large
979
+ if (this.itemCache.size > this.maxCacheSize) {
980
+ this.cleanupCache();
981
+ }
982
+ }
983
+ // Check if item exists in cache
984
+ has(key) {
985
+ return this.itemCache.has(key);
986
+ }
987
+ // Remove item from cache
988
+ delete(key) {
989
+ return this.itemCache.delete(key);
990
+ }
991
+ // Clear entire cache
992
+ clear() {
993
+ this.itemCache.clear();
994
+ }
995
+ // Clean up cache based on visibility and distance from visible range
996
+ cleanupCache() {
997
+ if (this.itemCache.size <= this.cleanupThreshold) {
998
+ return; // No need to clean up
999
+ }
1000
+ const itemsToRemove = [];
1001
+ // Find items that are far from visible range
1002
+ for (const [key] of this.itemCache.entries()) {
1003
+ const distanceFromVisible = this.getDistanceFromVisible(key);
1004
+ // Remove items that are far from visible range
1005
+ if (distanceFromVisible > 100) { // Arbitrary threshold
1006
+ itemsToRemove.push(key);
1007
+ }
1008
+ }
1009
+ // If we still have too many items, remove oldest accessed items
1010
+ if (this.itemCache.size - itemsToRemove.length > this.cleanupThreshold) {
1011
+ const sortedKeys = Array.from(this.itemCache.keys())
1012
+ .sort((a, b) => a - b); // Sort by key (assuming they're indexes)
1013
+ // Remove items that are furthest from visible range
1014
+ for (const key of sortedKeys) {
1015
+ if (this.itemCache.size <= this.cleanupThreshold)
1016
+ break;
1017
+ const distance = this.getDistanceFromVisible(key);
1018
+ if (distance > 50) { // Remove items beyond 50 units from visible
1019
+ itemsToRemove.push(key);
1020
+ }
1021
+ }
1022
+ }
1023
+ // Actually remove items
1024
+ for (const key of itemsToRemove) {
1025
+ this.itemCache.delete(key);
1026
+ }
1027
+ }
1028
+ // Calculate distance from visible range
1029
+ getDistanceFromVisible(index) {
1030
+ if (index >= this.visibleRange.start && index <= this.visibleRange.end) {
1031
+ return 0; // Inside visible range
1032
+ }
1033
+ if (index < this.visibleRange.start) {
1034
+ return this.visibleRange.start - index;
1035
+ }
1036
+ return index - this.visibleRange.end;
1037
+ }
1038
+ // Get cache statistics
1039
+ getStats() {
1040
+ const visibleItems = Array.from(this.itemCache.keys())
1041
+ .filter(key => key >= this.visibleRange.start && key <= this.visibleRange.end)
1042
+ .length;
1043
+ const offScreenItems = this.itemCache.size - visibleItems;
1044
+ // Rough estimate of memory usage (in bytes)
1045
+ let memoryEstimate = 0;
1046
+ for (const [_, value] of this.itemCache.entries()) {
1047
+ memoryEstimate += this.estimateObjectSize(value);
1048
+ }
1049
+ return {
1050
+ size: this.itemCache.size,
1051
+ maxCacheSize: this.maxCacheSize,
1052
+ visibleItems,
1053
+ offScreenItems,
1054
+ memoryEstimate
1055
+ };
1056
+ }
1057
+ // Estimate object size in bytes
1058
+ estimateObjectSize(obj) {
1059
+ if (obj === null || obj === undefined)
1060
+ return 0;
1061
+ if (typeof obj === 'string')
1062
+ return obj.length * 2; // UTF-16 chars
1063
+ if (typeof obj === 'number')
1064
+ return 8; // 8 bytes for number
1065
+ if (typeof obj === 'boolean')
1066
+ return 4; // 4 bytes for boolean
1067
+ if (typeof obj === 'object') {
1068
+ let size = 0;
1069
+ for (const key in obj) {
1070
+ if (obj.hasOwnProperty(key)) {
1071
+ size += key.length * 2; // Key size
1072
+ size += this.estimateObjectSize(obj[key]); // Value size
1073
+ }
1074
+ }
1075
+ return size;
1076
+ }
1077
+ return 0; // Other types
1078
+ }
1079
+ // Prune cache to only keep essential items
1080
+ pruneEssential() {
1081
+ const essentialItems = [];
1082
+ // Keep items in visible range and nearby
1083
+ for (const [key, value] of this.itemCache.entries()) {
1084
+ if (this.isEssential(key)) {
1085
+ essentialItems.push([key, value]);
1086
+ }
1087
+ }
1088
+ // Clear cache and repopulate with essential items
1089
+ this.itemCache.clear();
1090
+ for (const [key, value] of essentialItems) {
1091
+ this.itemCache.set(key, value);
1092
+ }
1093
+ }
1094
+ // Check if item is essential (within buffer zone)
1095
+ isEssential(index) {
1096
+ const bufferZone = 20; // Keep items within 20 positions of visible range
1097
+ return index >= (this.visibleRange.start - bufferZone) &&
1098
+ index <= (this.visibleRange.end + bufferZone);
1099
+ }
1100
+ // Get cache size
1101
+ getSize() {
1102
+ return this.itemCache.size;
1103
+ }
1104
+ // Get cache keys
1105
+ getKeys() {
1106
+ return Array.from(this.itemCache.keys());
1107
+ }
1108
+ }
1109
+
1110
+ class GPUAccelerator {
1111
+ constructor() {
1112
+ this.gpuAccelerationEnabled = false;
1113
+ this.gpuElements = new WeakSet();
1114
+ this.animationFrameId = null;
1115
+ this.gpuAccelerationEnabled = this.isGPUSupported();
1116
+ }
1117
+ // Check if GPU acceleration is supported
1118
+ isGPUSupported() {
1119
+ // Check if we're in a browser environment
1120
+ if (typeof document === 'undefined') {
1121
+ return false; // Not supported in Node.js environment
1122
+ }
1123
+ // Check for 3D transform support
1124
+ const testEl = document.createElement('div');
1125
+ return testEl.style.webkitTransform !== undefined ||
1126
+ testEl.style.transform !== undefined;
1127
+ }
1128
+ // Enable GPU acceleration for an element
1129
+ enableForElement(element) {
1130
+ if (!this.gpuAccelerationEnabled)
1131
+ return;
1132
+ // Apply GPU-accelerated styles
1133
+ element.style.willChange = 'transform';
1134
+ element.style.transform = 'translateZ(0)';
1135
+ element.style.backfaceVisibility = 'hidden';
1136
+ element.style.perspective = '1000px';
1137
+ // Add to tracked elements
1138
+ this.gpuElements.add(element);
1139
+ }
1140
+ // Disable GPU acceleration for an element
1141
+ disableForElement(element) {
1142
+ if (!this.gpuAccelerationEnabled)
1143
+ return;
1144
+ // Remove GPU-accelerated styles
1145
+ element.style.willChange = 'auto';
1146
+ element.style.transform = '';
1147
+ element.style.backfaceVisibility = '';
1148
+ element.style.perspective = '';
1149
+ // Remove from tracked elements
1150
+ this.gpuElements.delete(element);
1151
+ }
1152
+ // Apply GPU acceleration to a list of elements
1153
+ enableForElements(elements) {
1154
+ elements.forEach(el => this.enableForElement(el));
1155
+ }
1156
+ // Batch update GPU acceleration
1157
+ batchUpdate(elements, enable) {
1158
+ if (!this.gpuAccelerationEnabled)
1159
+ return;
1160
+ if (enable) {
1161
+ this.enableForElements(elements);
1162
+ }
1163
+ else {
1164
+ elements.forEach(el => this.disableForElement(el));
1165
+ }
1166
+ }
1167
+ // Optimize scrolling container for GPU acceleration
1168
+ optimizeScrollContainer(container) {
1169
+ if (!this.gpuAccelerationEnabled)
1170
+ return;
1171
+ // Apply optimizations to container
1172
+ container.style.transform = 'translateZ(0)';
1173
+ container.style.willChange = 'scroll-position';
1174
+ container.style.webkitOverflowScrolling = 'touch'; // For iOS
1175
+ }
1176
+ // Optimize individual items for GPU acceleration
1177
+ optimizeItem(item) {
1178
+ if (!this.gpuAccelerationEnabled)
1179
+ return;
1180
+ // Apply lightweight GPU acceleration
1181
+ item.style.transform = 'translateZ(0)';
1182
+ item.style.willChange = 'transform';
1183
+ }
1184
+ // Get GPU acceleration status
1185
+ getStatus() {
1186
+ // Since WeakSet doesn't have a size property, we can't count directly
1187
+ // This is a limitation of WeakSet
1188
+ return {
1189
+ enabled: this.gpuAccelerationEnabled,
1190
+ supported: this.isGPUSupported(),
1191
+ elementCount: 0 // Placeholder - would need different tracking method
1192
+ };
1193
+ }
1194
+ // Optimize for different scenarios
1195
+ optimizeForScenario(scenario) {
1196
+ if (!this.gpuAccelerationEnabled)
1197
+ return;
1198
+ switch (scenario) {
1199
+ case 'scrolling':
1200
+ // Optimize for smooth scrolling
1201
+ document.body.style.willChange = 'transform';
1202
+ break;
1203
+ case 'animation':
1204
+ // Optimize for animations
1205
+ document.body.style.transform = 'translateZ(0)';
1206
+ break;
1207
+ case 'static':
1208
+ // Remove optimizations when not needed
1209
+ document.body.style.willChange = 'auto';
1210
+ document.body.style.transform = '';
1211
+ break;
1212
+ }
1213
+ }
1214
+ // Cleanup GPU acceleration resources
1215
+ cleanup() {
1216
+ if (this.animationFrameId) {
1217
+ cancelAnimationFrame(this.animationFrameId);
1218
+ }
1219
+ // Reset any applied styles (would need to track them)
1220
+ this.gpuElements = new WeakSet();
1221
+ }
1222
+ // Check if element has GPU acceleration enabled
1223
+ isAccelerated(element) {
1224
+ return this.gpuElements.has(element);
1225
+ }
1226
+ // Get optimization recommendations
1227
+ getRecommendations() {
1228
+ const recommendations = [];
1229
+ if (!this.gpuAccelerationEnabled) {
1230
+ recommendations.push('GPU acceleration not supported on this device');
1231
+ }
1232
+ else {
1233
+ recommendations.push('GPU acceleration enabled for smooth performance');
1234
+ recommendations.push('Using hardware-accelerated compositing');
1235
+ recommendations.push('Optimized for 60fps rendering');
1236
+ }
1237
+ return recommendations;
1238
+ }
1239
+ }
1240
+
748
1241
  class Engine {
749
1242
  constructor(config) {
750
1243
  this.fetchMoreCallback = null;
@@ -760,6 +1253,9 @@ class Engine {
760
1253
  this.networkAwarePrefetchManager = new NetworkAwarePrefetchManager(this.networkDetector);
761
1254
  this.networkAwareRequestQueue = new NetworkAwareRequestQueue(this.networkDetector);
762
1255
  this.adaptiveBufferCalculator = new AdaptiveBufferCalculator();
1256
+ this.performanceOptimizer = new PerformanceOptimizer();
1257
+ this.memoryManager = new MemoryManager(1000); // Cache up to 1000 items
1258
+ this.gpuAccelerator = new GPUAccelerator();
763
1259
  this.totalItems = this.config.totalItems || Number.MAX_SAFE_INTEGER;
764
1260
  this.state = {
765
1261
  scrollTop: 0,
@@ -772,26 +1268,34 @@ class Engine {
772
1268
  * Update scroll position and recalculate visible range with intelligent detection
773
1269
  */
774
1270
  async updateScrollPosition(scrollTop) {
775
- // Calculate velocity and other intelligent metrics
776
- const velocity = this.intelligentScrollDetector.calculateVelocity(scrollTop);
777
- this.intelligentScrollDetector.getDirection(velocity);
778
- // Get network quality for adaptive buffering
779
- const networkQuality = await this.networkDetector.assessConnectionQuality();
780
- // Calculate adaptive buffer considering all factors
781
- const adaptiveBuffer = await this.adaptiveBufferCalculator.calculateOptimalBuffer({
782
- scrollVelocity: velocity,
783
- networkQuality,
784
- baseBuffer: this.intelligentScrollDetector.calculateBuffer(velocity),
785
- visibleItems: [] // In a real implementation, this would be the actual visible items
1271
+ // Use performance optimizer to schedule updates efficiently
1272
+ this.performanceOptimizer.scheduleOptimizedUpdate(async () => {
1273
+ // Calculate velocity and other intelligent metrics
1274
+ const velocity = this.intelligentScrollDetector.calculateVelocity(scrollTop);
1275
+ this.intelligentScrollDetector.getDirection(velocity);
1276
+ // Get network quality for adaptive buffering
1277
+ const networkQuality = await this.networkDetector.assessConnectionQuality();
1278
+ // Calculate adaptive buffer considering all factors
1279
+ const adaptiveBuffer = await this.adaptiveBufferCalculator.calculateOptimalBuffer({
1280
+ scrollVelocity: velocity,
1281
+ networkQuality,
1282
+ baseBuffer: this.intelligentScrollDetector.calculateBuffer(velocity),
1283
+ visibleItems: [] // In a real implementation, this would be the actual visible items
1284
+ });
1285
+ // Update window manager with adaptive buffer
1286
+ this.windowManager.updateBufferSize(adaptiveBuffer);
1287
+ // Update memory manager with visible range
1288
+ this.memoryManager.setVisibleRange({
1289
+ start: Math.max(0, this.state.visibleRange.start - adaptiveBuffer),
1290
+ end: this.state.visibleRange.end + adaptiveBuffer
1291
+ });
1292
+ this.state.scrollTop = scrollTop;
1293
+ this.state.visibleRange = this.windowManager.calculateVisibleRange(scrollTop);
1294
+ // Check if we need to fetch more items
1295
+ if (await this.shouldFetchMore()) {
1296
+ await this.fetchMore();
1297
+ }
786
1298
  });
787
- // Update window manager with adaptive buffer
788
- this.windowManager.updateBufferSize(adaptiveBuffer);
789
- this.state.scrollTop = scrollTop;
790
- this.state.visibleRange = this.windowManager.calculateVisibleRange(scrollTop);
791
- // Check if we need to fetch more items
792
- if (await this.shouldFetchMore()) {
793
- await this.fetchMore();
794
- }
795
1299
  }
796
1300
  /**
797
1301
  * Get the current visible range
@@ -877,6 +1381,8 @@ class Engine {
877
1381
  this.networkAwareRequestQueue.clear();
878
1382
  this.fetchMoreCallback = null;
879
1383
  this.intelligentScrollDetector.cleanup();
1384
+ this.performanceOptimizer.cleanup();
1385
+ this.memoryManager.clear();
880
1386
  }
881
1387
  }
882
1388
 
@@ -1078,6 +1584,286 @@ const LazyList = React.forwardRef((props, ref) => {
1078
1584
  });
1079
1585
  LazyList.displayName = 'LazyList';
1080
1586
 
1587
+ class LazyScroll {
1588
+ constructor(container, config) {
1589
+ this.container = container;
1590
+ this.config = {
1591
+ itemHeight: config.itemHeight || 50,
1592
+ viewportHeight: config.viewportHeight || 400,
1593
+ bufferSize: config.bufferSize || 5,
1594
+ fetchMore: config.fetchMore || (() => Promise.resolve([]))
1595
+ };
1596
+
1597
+ this.engine = new Engine(this.config);
1598
+ this.engine.setFetchMoreCallback(this.config.fetchMore);
1599
+
1600
+ this.visibleRange = { start: 0, end: 0 };
1601
+ this.isLoading = false;
1602
+ this.items = [];
1603
+ this.visibleItems = [];
1604
+
1605
+ this.scrollHandler = this.onScroll.bind(this);
1606
+ this.container.addEventListener('scroll', this.scrollHandler, { passive: true });
1607
+ }
1608
+
1609
+ onScroll() {
1610
+ const scrollTop = this.container.scrollTop;
1611
+ this.engine.updateScrollPosition(scrollTop);
1612
+
1613
+ const state = this.engine.getState();
1614
+ this.visibleRange = state.visibleRange;
1615
+ this.isLoading = state.isLoading;
1616
+
1617
+ this.render();
1618
+ }
1619
+
1620
+ setItems(items) {
1621
+ this.items = items;
1622
+ this.render();
1623
+ }
1624
+
1625
+ render() {
1626
+ // Calculate paddings
1627
+ const topPadding = this.visibleRange.start * this.config.itemHeight;
1628
+ const bottomPadding = Math.max(0, (this.items.length - this.visibleRange.end) * this.config.itemHeight);
1629
+
1630
+ // Get visible items
1631
+ this.visibleItems = this.items.slice(this.visibleRange.start, this.visibleRange.end);
1632
+
1633
+ // Clear container except for paddings and content
1634
+ const existingContent = this.container.querySelector('.lazy-scroll-content');
1635
+ if (existingContent) {
1636
+ existingContent.remove();
1637
+ }
1638
+
1639
+ // Create content wrapper
1640
+ const contentWrapper = document.createElement('div');
1641
+ contentWrapper.className = 'lazy-scroll-content';
1642
+
1643
+ // Add top padding
1644
+ const topPaddingDiv = document.createElement('div');
1645
+ topPaddingDiv.style.height = `${topPadding}px`;
1646
+ contentWrapper.appendChild(topPaddingDiv);
1647
+
1648
+ // Add visible items
1649
+ this.visibleItems.forEach((item, index) => {
1650
+ const itemElement = this.createItemElement(item, this.visibleRange.start + index);
1651
+ contentWrapper.appendChild(itemElement);
1652
+ });
1653
+
1654
+ // Add bottom padding
1655
+ const bottomPaddingDiv = document.createElement('div');
1656
+ bottomPaddingDiv.style.height = `${bottomPadding}px`;
1657
+ contentWrapper.appendChild(bottomPaddingDiv);
1658
+
1659
+ // Add loading indicator if needed
1660
+ if (this.isLoading) {
1661
+ const loadingElement = document.createElement('div');
1662
+ loadingElement.className = 'lazy-loading';
1663
+ loadingElement.textContent = 'Loading more items...';
1664
+ contentWrapper.appendChild(loadingElement);
1665
+ }
1666
+
1667
+ this.container.appendChild(contentWrapper);
1668
+ }
1669
+
1670
+ createItemElement(item, index) {
1671
+ const itemElement = document.createElement('div');
1672
+ itemElement.style.height = `${this.config.itemHeight}px`;
1673
+ itemElement.className = 'lazy-item';
1674
+
1675
+ // Default content - can be customized
1676
+ itemElement.textContent = `Item ${index}: ${item.text || item.id || 'Content'}`;
1677
+
1678
+ return itemElement;
1679
+ }
1680
+
1681
+ updateConfig(newConfig) {
1682
+ if (newConfig.itemHeight !== undefined) this.config.itemHeight = newConfig.itemHeight;
1683
+ if (newConfig.viewportHeight !== undefined) this.config.viewportHeight = newConfig.viewportHeight;
1684
+ if (newConfig.bufferSize !== undefined) this.config.bufferSize = newConfig.bufferSize;
1685
+ if (newConfig.fetchMore !== undefined) {
1686
+ this.config.fetchMore = newConfig.fetchMore;
1687
+ this.engine.setFetchMoreCallback(newConfig.fetchMore);
1688
+ }
1689
+
1690
+ // Re-render with new config
1691
+ this.render();
1692
+ }
1693
+
1694
+ destroy() {
1695
+ this.container.removeEventListener('scroll', this.scrollHandler);
1696
+ this.engine.cleanup();
1697
+ }
1698
+
1699
+ // Public methods
1700
+ getVisibleRange() {
1701
+ return { ...this.visibleRange };
1702
+ }
1703
+
1704
+ refresh() {
1705
+ this.onScroll();
1706
+ }
1707
+ }
1708
+
1709
+ // Factory function for easier usage
1710
+ function createLazyScroll(container, config) {
1711
+ return new LazyScroll(container, config);
1712
+ }
1713
+
1714
+ class LazyScrollElement extends HTMLElement {
1715
+ constructor() {
1716
+ super();
1717
+ this.shadow = this.attachShadow({ mode: 'open' });
1718
+
1719
+ // Default values
1720
+ this.itemHeight = 50;
1721
+ this.viewportHeight = 400;
1722
+ this.bufferSize = 5;
1723
+ this.items = [];
1724
+
1725
+ // Styles
1726
+ const style = document.createElement('style');
1727
+ style.textContent = `
1728
+ :host {
1729
+ display: block;
1730
+ }
1731
+
1732
+ .lazy-scroll-container {
1733
+ position: relative;
1734
+ overflow-y: auto;
1735
+ }
1736
+
1737
+ .lazy-item {
1738
+ width: 100%;
1739
+ }
1740
+
1741
+ .lazy-loading {
1742
+ text-align: center;
1743
+ padding: 20px;
1744
+ color: #666;
1745
+ }
1746
+ `;
1747
+
1748
+ this.shadow.appendChild(style);
1749
+ }
1750
+
1751
+ static get observedAttributes() {
1752
+ return ['item-height', 'viewport-height', 'buffer-size'];
1753
+ }
1754
+
1755
+ attributeChangedCallback(name, oldValue, newValue) {
1756
+ switch (name) {
1757
+ case 'item-height':
1758
+ this.itemHeight = parseInt(newValue) || 50;
1759
+ break;
1760
+ case 'viewport-height':
1761
+ this.viewportHeight = parseInt(newValue) || 400;
1762
+ break;
1763
+ case 'buffer-size':
1764
+ this.bufferSize = parseInt(newValue) || 5;
1765
+ break;
1766
+ }
1767
+
1768
+ if (this.lazyScrollInstance) {
1769
+ this.lazyScrollInstance.updateConfig({
1770
+ itemHeight: this.itemHeight,
1771
+ viewportHeight: this.viewportHeight,
1772
+ bufferSize: this.bufferSize
1773
+ });
1774
+ }
1775
+ }
1776
+
1777
+ connectedCallback() {
1778
+ // Create container
1779
+ this.container = document.createElement('div');
1780
+ this.container.className = 'lazy-scroll-container';
1781
+ this.container.style.height = `${this.viewportHeight}px`;
1782
+ this.container.style.overflowY = 'auto';
1783
+
1784
+ this.shadow.appendChild(this.container);
1785
+
1786
+ // Get fetchMore function from attribute or slot
1787
+ const fetchMoreAttr = this.getAttribute('fetch-more');
1788
+ let fetchMoreFn = () => Promise.resolve([]);
1789
+
1790
+ if (fetchMoreAttr) {
1791
+ try {
1792
+ // If fetchMore is a function name in global scope
1793
+ fetchMoreFn = window[fetchMoreAttr] || (() => Promise.resolve([]));
1794
+ } catch (e) {
1795
+ console.warn('Could not find fetchMore function:', fetchMoreAttr);
1796
+ }
1797
+ }
1798
+
1799
+ // Initialize lazy scroll
1800
+ this.lazyScrollInstance = createLazyScroll(this.container, {
1801
+ itemHeight: this.itemHeight,
1802
+ viewportHeight: this.viewportHeight,
1803
+ bufferSize: this.bufferSize,
1804
+ fetchMore: fetchMoreFn
1805
+ });
1806
+
1807
+ // Handle items from light DOM
1808
+ this.updateItemsFromSlot();
1809
+
1810
+ // Observe child changes
1811
+ this.mutationObserver = new MutationObserver(() => {
1812
+ this.updateItemsFromSlot();
1813
+ });
1814
+
1815
+ this.mutationObserver.observe(this, { childList: true, subtree: true });
1816
+ }
1817
+
1818
+ disconnectedCallback() {
1819
+ if (this.lazyScrollInstance) {
1820
+ this.lazyScrollInstance.destroy();
1821
+ }
1822
+
1823
+ if (this.mutationObserver) {
1824
+ this.mutationObserver.disconnect();
1825
+ }
1826
+ }
1827
+
1828
+ updateItemsFromSlot() {
1829
+ // Get items from light DOM or data attribute
1830
+ const itemsData = this.getAttribute('items');
1831
+ if (itemsData) {
1832
+ try {
1833
+ const items = JSON.parse(itemsData);
1834
+ if (this.lazyScrollInstance) {
1835
+ this.lazyScrollInstance.setItems(items);
1836
+ }
1837
+ } catch (e) {
1838
+ console.warn('Could not parse items data:', itemsData);
1839
+ }
1840
+ }
1841
+ }
1842
+
1843
+ // Public methods
1844
+ setItems(items) {
1845
+ if (this.lazyScrollInstance) {
1846
+ this.lazyScrollInstance.setItems(items);
1847
+ }
1848
+ }
1849
+
1850
+ refresh() {
1851
+ if (this.lazyScrollInstance) {
1852
+ this.lazyScrollInstance.refresh();
1853
+ }
1854
+ }
1855
+
1856
+ getVisibleRange() {
1857
+ if (this.lazyScrollInstance) {
1858
+ return this.lazyScrollInstance.getVisibleRange();
1859
+ }
1860
+ return { start: 0, end: 0 };
1861
+ }
1862
+ }
1863
+
1864
+ // Register the custom element
1865
+ customElements.define('lazy-scroll-element', LazyScrollElement);
1866
+
1081
1867
  /**
1082
1868
  * Debounce function to limit the rate at which a function is called
1083
1869
  */
@@ -1113,15 +1899,21 @@ exports.AdaptiveBufferCalculator = AdaptiveBufferCalculator;
1113
1899
  exports.ContentComplexityAnalyzer = ContentComplexityAnalyzer;
1114
1900
  exports.DevicePerformanceMonitor = DevicePerformanceMonitor;
1115
1901
  exports.Engine = Engine;
1902
+ exports.GPUAccelerator = GPUAccelerator;
1116
1903
  exports.IntelligentScrollDetector = IntelligentScrollDetector;
1117
1904
  exports.LazyList = LazyList;
1905
+ exports.LazyScroll = LazyScroll;
1906
+ exports.LazyScrollElement = LazyScrollElement;
1907
+ exports.MemoryManager = MemoryManager;
1118
1908
  exports.NetworkAwarePrefetchManager = NetworkAwarePrefetchManager;
1119
1909
  exports.NetworkAwareRequestQueue = NetworkAwareRequestQueue;
1120
1910
  exports.NetworkSpeedDetector = NetworkSpeedDetector;
1911
+ exports.PerformanceOptimizer = PerformanceOptimizer;
1121
1912
  exports.PrefetchManager = PrefetchManager;
1122
1913
  exports.RequestQueue = RequestQueue;
1123
1914
  exports.ScrollObserver = ScrollObserver;
1124
1915
  exports.WindowManager = WindowManager;
1916
+ exports.createLazyScroll = createLazyScroll;
1125
1917
  exports.debounce = debounce;
1126
1918
  exports.throttle = throttle;
1127
1919
  exports.useLazyList = useLazyList;