react-native-nitro-list 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +250 -16
  2. package/android/build.gradle +5 -4
  3. package/android/src/main/java/com/nitrolist/HybridNitroRecyclerView.kt +26 -0
  4. package/android/src/main/java/com/nitrolist/HybridNitroRecyclerViewManager.kt +29 -0
  5. package/android/src/main/java/com/nitrolist/NitroListPackage.kt +13 -24
  6. package/android/src/main/java/com/nitrolist/NitroRecyclerAdapter.kt +32 -0
  7. package/android/src/main/java/com/nitrolist/NitroRecyclerViewHolder.kt +8 -0
  8. package/ios/HybridNitroList.swift +32 -15
  9. package/lib/commonjs/NitroList.js +9 -0
  10. package/lib/commonjs/NitroList.js.map +1 -0
  11. package/lib/commonjs/RecyclerList.internal.js +25 -0
  12. package/lib/commonjs/RecyclerList.internal.js.map +1 -0
  13. package/lib/commonjs/RecyclerList.js +171 -0
  14. package/lib/commonjs/RecyclerList.js.map +1 -0
  15. package/lib/commonjs/RecyclerList.types.js +6 -0
  16. package/lib/commonjs/RecyclerList.types.js.map +1 -0
  17. package/lib/commonjs/ReusableView.js +2 -0
  18. package/lib/commonjs/ReusableView.js.map +1 -0
  19. package/lib/commonjs/cell/Cell.js +2 -0
  20. package/lib/{module/specs/nitro-list.nitro.js.map → commonjs/cell/Cell.js.map} +1 -1
  21. package/lib/commonjs/cell/CellRecycler.js +62 -0
  22. package/lib/commonjs/cell/CellRecycler.js.map +1 -0
  23. package/lib/commonjs/cell/StableKey.js +10 -0
  24. package/lib/commonjs/cell/StableKey.js.map +1 -0
  25. package/lib/commonjs/debug/useDebugOverlay.js +15 -0
  26. package/lib/commonjs/debug/useDebugOverlay.js.map +1 -0
  27. package/lib/commonjs/getVisibleIndices.js +38 -0
  28. package/lib/commonjs/getVisibleIndices.js.map +1 -0
  29. package/lib/commonjs/hooks/useCellRenderer.js +62 -0
  30. package/lib/commonjs/hooks/useCellRenderer.js.map +1 -0
  31. package/lib/commonjs/hooks/useStableCallback.js +13 -0
  32. package/lib/commonjs/hooks/useStableCallback.js.map +1 -0
  33. package/lib/commonjs/index.js +7 -5
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/layout/EstimatedLayoutProvider.js +30 -0
  36. package/lib/commonjs/layout/EstimatedLayoutProvider.js.map +1 -0
  37. package/lib/commonjs/layout/LayoutEngine.js +21 -0
  38. package/lib/commonjs/layout/LayoutEngine.js.map +1 -0
  39. package/lib/commonjs/{specs/nitro-list.nitro.js → layout/LayoutProvider.js} +1 -1
  40. package/lib/commonjs/{specs/nitro-list.nitro.js.map → layout/LayoutProvider.js.map} +1 -1
  41. package/lib/commonjs/layout/LayoutRectangle.js +2 -0
  42. package/lib/commonjs/layout/LayoutRectangle.js.map +1 -0
  43. package/lib/commonjs/layout/MutableLinearLayout.js +65 -0
  44. package/lib/commonjs/layout/MutableLinearLayout.js.map +1 -0
  45. package/lib/commonjs/layout/index.js +20 -0
  46. package/lib/commonjs/layout/index.js.map +1 -0
  47. package/lib/commonjs/measurement/MeasureLayout.js +20 -0
  48. package/lib/commonjs/measurement/MeasureLayout.js.map +1 -0
  49. package/lib/commonjs/measurement/useItemMeasurement.js +28 -0
  50. package/lib/commonjs/measurement/useItemMeasurement.js.map +1 -0
  51. package/lib/commonjs/native/NitroLayoutEngine.js +9 -0
  52. package/lib/commonjs/native/NitroLayoutEngine.js.map +1 -0
  53. package/lib/commonjs/native/NitroList.types.js +6 -0
  54. package/lib/commonjs/native/NitroList.types.js.map +1 -0
  55. package/lib/commonjs/native/NitroRecyclerView.js +9 -0
  56. package/lib/commonjs/native/NitroRecyclerView.js.map +1 -0
  57. package/lib/commonjs/prefetch/PrefetchHelper.js +39 -0
  58. package/lib/commonjs/prefetch/PrefetchHelper.js.map +1 -0
  59. package/lib/commonjs/specs/nitro-layout-engine.nitro.js +6 -0
  60. package/lib/commonjs/specs/nitro-layout-engine.nitro.js.map +1 -0
  61. package/lib/commonjs/utils/arrayEqual.js +15 -0
  62. package/lib/commonjs/utils/arrayEqual.js.map +1 -0
  63. package/lib/commonjs/utils/assertNever.js +10 -0
  64. package/lib/commonjs/utils/assertNever.js.map +1 -0
  65. package/lib/commonjs/utils/clamp.js +10 -0
  66. package/lib/commonjs/utils/clamp.js.map +1 -0
  67. package/lib/commonjs/utils/devAssert.js +12 -0
  68. package/lib/commonjs/utils/devAssert.js.map +1 -0
  69. package/lib/commonjs/utils/invariant.js +12 -0
  70. package/lib/commonjs/utils/invariant.js.map +1 -0
  71. package/lib/commonjs/utils/isDefined.js +10 -0
  72. package/lib/commonjs/utils/isDefined.js.map +1 -0
  73. package/lib/commonjs/utils/isNumber.js +10 -0
  74. package/lib/commonjs/utils/isNumber.js.map +1 -0
  75. package/lib/commonjs/utils/noop.js +10 -0
  76. package/lib/commonjs/utils/noop.js.map +1 -0
  77. package/lib/commonjs/utils/shallowEqual.js +22 -0
  78. package/lib/commonjs/utils/shallowEqual.js.map +1 -0
  79. package/lib/commonjs/utils/throttle.js +17 -0
  80. package/lib/commonjs/utils/throttle.js.map +1 -0
  81. package/lib/commonjs/viewability/ViewabilityHelper.js +121 -0
  82. package/lib/commonjs/viewability/ViewabilityHelper.js.map +1 -0
  83. package/lib/commonjs/windowing/ScrollMetrics.js +2 -0
  84. package/lib/commonjs/windowing/ScrollMetrics.js.map +1 -0
  85. package/lib/commonjs/windowing/findVisibleIndexRange.js +48 -0
  86. package/lib/commonjs/windowing/findVisibleIndexRange.js.map +1 -0
  87. package/lib/commonjs/windowing/index.js +20 -0
  88. package/lib/commonjs/windowing/index.js.map +1 -0
  89. package/lib/commonjs/windowing/useScrollMetrics.js +39 -0
  90. package/lib/commonjs/windowing/useScrollMetrics.js.map +1 -0
  91. package/lib/module/NitroList.js +5 -0
  92. package/lib/module/NitroList.js.map +1 -0
  93. package/lib/module/RecyclerList.internal.js +22 -0
  94. package/lib/module/RecyclerList.internal.js.map +1 -0
  95. package/lib/module/RecyclerList.js +166 -0
  96. package/lib/module/RecyclerList.js.map +1 -0
  97. package/lib/module/RecyclerList.types.js +4 -0
  98. package/lib/module/RecyclerList.types.js.map +1 -0
  99. package/lib/module/ReusableView.js +2 -0
  100. package/lib/module/ReusableView.js.map +1 -0
  101. package/lib/module/cell/Cell.js +2 -0
  102. package/lib/module/cell/Cell.js.map +1 -0
  103. package/lib/module/cell/CellRecycler.js +57 -0
  104. package/lib/module/cell/CellRecycler.js.map +1 -0
  105. package/lib/module/cell/StableKey.js +6 -0
  106. package/lib/module/cell/StableKey.js.map +1 -0
  107. package/lib/module/debug/useDebugOverlay.js +11 -0
  108. package/lib/module/debug/useDebugOverlay.js.map +1 -0
  109. package/lib/module/getVisibleIndices.js +34 -0
  110. package/lib/module/getVisibleIndices.js.map +1 -0
  111. package/lib/module/hooks/useCellRenderer.js +58 -0
  112. package/lib/module/hooks/useCellRenderer.js.map +1 -0
  113. package/lib/module/hooks/useStableCallback.js +9 -0
  114. package/lib/module/hooks/useStableCallback.js.map +1 -0
  115. package/lib/module/index.js +1 -3
  116. package/lib/module/index.js.map +1 -1
  117. package/lib/module/layout/EstimatedLayoutProvider.js +25 -0
  118. package/lib/module/layout/EstimatedLayoutProvider.js.map +1 -0
  119. package/lib/module/layout/LayoutEngine.js +17 -0
  120. package/lib/module/layout/LayoutEngine.js.map +1 -0
  121. package/lib/module/layout/LayoutProvider.js +4 -0
  122. package/lib/module/layout/LayoutProvider.js.map +1 -0
  123. package/lib/module/layout/LayoutRectangle.js +2 -0
  124. package/lib/module/layout/LayoutRectangle.js.map +1 -0
  125. package/lib/module/layout/MutableLinearLayout.js +60 -0
  126. package/lib/module/layout/MutableLinearLayout.js.map +1 -0
  127. package/lib/module/layout/index.js +5 -0
  128. package/lib/module/layout/index.js.map +1 -0
  129. package/lib/module/measurement/MeasureLayout.js +16 -0
  130. package/lib/module/measurement/MeasureLayout.js.map +1 -0
  131. package/lib/module/measurement/useItemMeasurement.js +24 -0
  132. package/lib/module/measurement/useItemMeasurement.js.map +1 -0
  133. package/lib/module/native/NitroLayoutEngine.js +5 -0
  134. package/lib/module/native/NitroLayoutEngine.js.map +1 -0
  135. package/lib/module/native/NitroList.types.js +4 -0
  136. package/lib/module/native/NitroList.types.js.map +1 -0
  137. package/lib/module/native/NitroRecyclerView.js +5 -0
  138. package/lib/module/native/NitroRecyclerView.js.map +1 -0
  139. package/lib/module/prefetch/PrefetchHelper.js +34 -0
  140. package/lib/module/prefetch/PrefetchHelper.js.map +1 -0
  141. package/lib/module/specs/nitro-layout-engine.nitro.js +4 -0
  142. package/lib/module/specs/nitro-layout-engine.nitro.js.map +1 -0
  143. package/lib/module/utils/arrayEqual.js +11 -0
  144. package/lib/module/utils/arrayEqual.js.map +1 -0
  145. package/lib/module/utils/assertNever.js +6 -0
  146. package/lib/module/utils/assertNever.js.map +1 -0
  147. package/lib/module/utils/clamp.js +6 -0
  148. package/lib/module/utils/clamp.js.map +1 -0
  149. package/lib/module/utils/devAssert.js +8 -0
  150. package/lib/module/utils/devAssert.js.map +1 -0
  151. package/lib/module/utils/invariant.js +8 -0
  152. package/lib/module/utils/invariant.js.map +1 -0
  153. package/lib/module/utils/isDefined.js +6 -0
  154. package/lib/module/utils/isDefined.js.map +1 -0
  155. package/lib/module/utils/isNumber.js +6 -0
  156. package/lib/module/utils/isNumber.js.map +1 -0
  157. package/lib/module/utils/noop.js +6 -0
  158. package/lib/module/utils/noop.js.map +1 -0
  159. package/lib/module/utils/shallowEqual.js +18 -0
  160. package/lib/module/utils/shallowEqual.js.map +1 -0
  161. package/lib/module/utils/throttle.js +13 -0
  162. package/lib/module/utils/throttle.js.map +1 -0
  163. package/lib/module/viewability/ViewabilityHelper.js +116 -0
  164. package/lib/module/viewability/ViewabilityHelper.js.map +1 -0
  165. package/lib/module/windowing/ScrollMetrics.js +2 -0
  166. package/lib/module/windowing/ScrollMetrics.js.map +1 -0
  167. package/lib/module/windowing/findVisibleIndexRange.js +44 -0
  168. package/lib/module/windowing/findVisibleIndexRange.js.map +1 -0
  169. package/lib/module/windowing/index.js +5 -0
  170. package/lib/module/windowing/index.js.map +1 -0
  171. package/lib/module/windowing/useScrollMetrics.js +35 -0
  172. package/lib/module/windowing/useScrollMetrics.js.map +1 -0
  173. package/lib/typescript/src/NitroList.d.ts +5 -0
  174. package/lib/typescript/src/NitroList.d.ts.map +1 -0
  175. package/lib/typescript/src/RecyclerList.d.ts +26 -0
  176. package/lib/typescript/src/RecyclerList.d.ts.map +1 -0
  177. package/lib/typescript/src/RecyclerList.internal.d.ts +9 -0
  178. package/lib/typescript/src/RecyclerList.internal.d.ts.map +1 -0
  179. package/lib/typescript/src/RecyclerList.types.d.ts +18 -0
  180. package/lib/typescript/src/RecyclerList.types.d.ts.map +1 -0
  181. package/lib/typescript/src/ReusableView.d.ts +9 -0
  182. package/lib/typescript/src/ReusableView.d.ts.map +1 -0
  183. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts +2 -0
  184. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts.map +1 -0
  185. package/lib/typescript/src/cell/Cell.d.ts +13 -0
  186. package/lib/typescript/src/cell/Cell.d.ts.map +1 -0
  187. package/lib/typescript/src/cell/CellRecycler.d.ts +19 -0
  188. package/lib/typescript/src/cell/CellRecycler.d.ts.map +1 -0
  189. package/lib/typescript/src/cell/StableKey.d.ts +2 -0
  190. package/lib/typescript/src/cell/StableKey.d.ts.map +1 -0
  191. package/lib/typescript/src/debug/useDebugOverlay.d.ts +2 -0
  192. package/lib/typescript/src/debug/useDebugOverlay.d.ts.map +1 -0
  193. package/lib/typescript/src/getVisibleIndices.d.ts +8 -0
  194. package/lib/typescript/src/getVisibleIndices.d.ts.map +1 -0
  195. package/lib/typescript/src/hooks/useCellRenderer.d.ts +19 -0
  196. package/lib/typescript/src/hooks/useCellRenderer.d.ts.map +1 -0
  197. package/lib/typescript/src/hooks/useStableCallback.d.ts +2 -0
  198. package/lib/typescript/src/hooks/useStableCallback.d.ts.map +1 -0
  199. package/lib/typescript/src/index.d.ts +2 -4
  200. package/lib/typescript/src/index.d.ts.map +1 -1
  201. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts +15 -0
  202. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts.map +1 -0
  203. package/lib/typescript/src/layout/LayoutEngine.d.ts +10 -0
  204. package/lib/typescript/src/layout/LayoutEngine.d.ts.map +1 -0
  205. package/lib/typescript/src/layout/LayoutProvider.d.ts +16 -0
  206. package/lib/typescript/src/layout/LayoutProvider.d.ts.map +1 -0
  207. package/lib/typescript/src/layout/LayoutRectangle.d.ts +11 -0
  208. package/lib/typescript/src/layout/LayoutRectangle.d.ts.map +1 -0
  209. package/lib/typescript/src/layout/MutableLinearLayout.d.ts +22 -0
  210. package/lib/typescript/src/layout/MutableLinearLayout.d.ts.map +1 -0
  211. package/lib/typescript/src/layout/index.d.ts +5 -0
  212. package/lib/typescript/src/layout/index.d.ts.map +1 -0
  213. package/lib/typescript/src/measurement/MeasureLayout.d.ts +10 -0
  214. package/lib/typescript/src/measurement/MeasureLayout.d.ts.map +1 -0
  215. package/lib/typescript/src/measurement/useItemMeasurement.d.ts +11 -0
  216. package/lib/typescript/src/measurement/useItemMeasurement.d.ts.map +1 -0
  217. package/lib/typescript/src/native/NitroLayoutEngine.d.ts +3 -0
  218. package/lib/typescript/src/native/NitroLayoutEngine.d.ts.map +1 -0
  219. package/lib/typescript/src/native/NitroList.types.d.ts +9 -0
  220. package/lib/typescript/src/native/NitroList.types.d.ts.map +1 -0
  221. package/lib/typescript/src/native/NitroRecyclerView.d.ts +5 -0
  222. package/lib/typescript/src/native/NitroRecyclerView.d.ts.map +1 -0
  223. package/lib/typescript/src/prefetch/PrefetchHelper.d.ts +17 -0
  224. package/lib/typescript/src/prefetch/PrefetchHelper.d.ts.map +1 -0
  225. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts +14 -0
  226. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts.map +1 -0
  227. package/lib/typescript/src/utils/arrayEqual.d.ts +2 -0
  228. package/lib/typescript/src/utils/arrayEqual.d.ts.map +1 -0
  229. package/lib/typescript/src/utils/assertNever.d.ts +2 -0
  230. package/lib/typescript/src/utils/assertNever.d.ts.map +1 -0
  231. package/lib/typescript/src/utils/clamp.d.ts +2 -0
  232. package/lib/typescript/src/utils/clamp.d.ts.map +1 -0
  233. package/lib/typescript/src/utils/devAssert.d.ts +2 -0
  234. package/lib/typescript/src/utils/devAssert.d.ts.map +1 -0
  235. package/lib/typescript/src/utils/invariant.d.ts +2 -0
  236. package/lib/typescript/src/utils/invariant.d.ts.map +1 -0
  237. package/lib/typescript/src/utils/isDefined.d.ts +2 -0
  238. package/lib/typescript/src/utils/isDefined.d.ts.map +1 -0
  239. package/lib/typescript/src/utils/isNumber.d.ts +2 -0
  240. package/lib/typescript/src/utils/isNumber.d.ts.map +1 -0
  241. package/lib/typescript/src/utils/noop.d.ts +2 -0
  242. package/lib/typescript/src/utils/noop.d.ts.map +1 -0
  243. package/lib/typescript/src/utils/shallowEqual.d.ts +2 -0
  244. package/lib/typescript/src/utils/shallowEqual.d.ts.map +1 -0
  245. package/lib/typescript/src/utils/throttle.d.ts +2 -0
  246. package/lib/typescript/src/utils/throttle.d.ts.map +1 -0
  247. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts +50 -0
  248. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts.map +1 -0
  249. package/lib/typescript/src/windowing/ScrollMetrics.d.ts +11 -0
  250. package/lib/typescript/src/windowing/ScrollMetrics.d.ts.map +1 -0
  251. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts +11 -0
  252. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts.map +1 -0
  253. package/lib/typescript/src/windowing/index.d.ts +4 -0
  254. package/lib/typescript/src/windowing/index.d.ts.map +1 -0
  255. package/lib/typescript/src/windowing/useScrollMetrics.d.ts +14 -0
  256. package/lib/typescript/src/windowing/useScrollMetrics.d.ts.map +1 -0
  257. package/nitro.json +20 -13
  258. package/nitrogen/generated/android/NitroList+autolinking.cmake +2 -4
  259. package/nitrogen/generated/android/NitroListOnLoad.cpp +3 -13
  260. package/nitrogen/generated/android/c++/JHybridNitroLayoutEngineSpec.cpp +69 -0
  261. package/nitrogen/generated/android/c++/{JHybridNitroListSpec.hpp → JHybridNitroLayoutEngineSpec.hpp} +12 -13
  262. package/nitrogen/generated/android/c++/JLayoutRectangle.hpp +69 -0
  263. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/{HybridNitroListSpec.kt → HybridNitroLayoutEngineSpec.kt} +11 -13
  264. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/LayoutRectangle.kt +47 -0
  265. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Bridge.cpp +9 -9
  266. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Bridge.hpp +50 -13
  267. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Umbrella.hpp +11 -5
  268. package/nitrogen/generated/ios/c++/{HybridNitroListSpecSwift.cpp → HybridNitroLayoutEngineSpecSwift.cpp} +2 -2
  269. package/nitrogen/generated/ios/c++/HybridNitroLayoutEngineSpecSwift.hpp +78 -0
  270. package/nitrogen/generated/ios/swift/HybridNitroLayoutEngineSpec.swift +56 -0
  271. package/nitrogen/generated/ios/swift/{HybridNitroListSpec_cxx.swift → HybridNitroLayoutEngineSpec_cxx.swift} +35 -38
  272. package/nitrogen/generated/ios/swift/LayoutRectangle.swift +45 -0
  273. package/nitrogen/generated/shared/c++/{HybridNitroListSpec.cpp → HybridNitroLayoutEngineSpec.cpp} +4 -5
  274. package/nitrogen/generated/shared/c++/{HybridNitroListSpec.hpp → HybridNitroLayoutEngineSpec.hpp} +15 -14
  275. package/nitrogen/generated/shared/c++/LayoutRectangle.hpp +95 -0
  276. package/package.json +12 -4
  277. package/src/NitroList.ts +8 -0
  278. package/src/RecyclerList.internal.ts +38 -0
  279. package/src/RecyclerList.tsx +252 -0
  280. package/src/RecyclerList.types.ts +24 -0
  281. package/src/ReusableView.ts +12 -0
  282. package/src/__tests__/windowing/findVisibleIndexRange.test.ts +55 -0
  283. package/src/cell/Cell.ts +14 -0
  284. package/src/cell/CellRecycler.ts +66 -0
  285. package/src/cell/StableKey.ts +6 -0
  286. package/src/debug/useDebugOverlay.ts +14 -0
  287. package/src/getVisibleIndices.ts +53 -0
  288. package/src/hooks/useCellRenderer.ts +86 -0
  289. package/src/hooks/useStableCallback.ts +13 -0
  290. package/src/index.ts +2 -14
  291. package/src/layout/EstimatedLayoutProvider.ts +35 -0
  292. package/src/layout/LayoutEngine.ts +21 -0
  293. package/src/layout/LayoutProvider.ts +17 -0
  294. package/src/layout/LayoutRectangle.ts +10 -0
  295. package/src/layout/MutableLinearLayout.ts +79 -0
  296. package/src/layout/index.ts +4 -0
  297. package/src/measurement/MeasureLayout.ts +20 -0
  298. package/src/measurement/useItemMeasurement.ts +32 -0
  299. package/src/native/NitroLayoutEngine.ts +7 -0
  300. package/src/native/NitroList.types.ts +12 -0
  301. package/src/native/NitroRecyclerView.ts +8 -0
  302. package/src/prefetch/PrefetchHelper.ts +47 -0
  303. package/src/specs/nitro-layout-engine.nitro.ts +17 -0
  304. package/src/utils/arrayEqual.ts +13 -0
  305. package/src/utils/assertNever.ts +3 -0
  306. package/src/utils/clamp.ts +7 -0
  307. package/src/utils/devAssert.ts +8 -0
  308. package/src/utils/invariant.ts +8 -0
  309. package/src/utils/isDefined.ts +5 -0
  310. package/src/utils/isNumber.ts +3 -0
  311. package/src/utils/noop.ts +3 -0
  312. package/src/utils/shallowEqual.ts +34 -0
  313. package/src/utils/throttle.ts +13 -0
  314. package/src/viewability/ViewabilityHelper.ts +130 -0
  315. package/src/windowing/ScrollMetrics.ts +11 -0
  316. package/src/windowing/findVisibleIndexRange.ts +60 -0
  317. package/src/windowing/index.ts +3 -0
  318. package/src/windowing/useScrollMetrics.ts +56 -0
  319. package/android/src/main/java/com/nitrolist/HybridNitroList.kt +0 -27
  320. package/lib/module/specs/nitro-list.nitro.js +0 -4
  321. package/lib/typescript/src/specs/nitro-list.nitro.d.ts +0 -11
  322. package/lib/typescript/src/specs/nitro-list.nitro.d.ts.map +0 -1
  323. package/nitrogen/generated/android/c++/JHybridNitroListSpec.cpp +0 -56
  324. package/nitrogen/generated/android/c++/views/JHybridNitroListStateUpdater.cpp +0 -56
  325. package/nitrogen/generated/android/c++/views/JHybridNitroListStateUpdater.hpp +0 -49
  326. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/views/HybridNitroListManager.kt +0 -50
  327. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/views/HybridNitroListStateUpdater.kt +0 -23
  328. package/nitrogen/generated/ios/NitroListAutolinking.mm +0 -33
  329. package/nitrogen/generated/ios/NitroListAutolinking.swift +0 -25
  330. package/nitrogen/generated/ios/c++/HybridNitroListSpecSwift.hpp +0 -74
  331. package/nitrogen/generated/ios/c++/views/HybridNitroListComponent.mm +0 -96
  332. package/nitrogen/generated/ios/swift/HybridNitroListSpec.swift +0 -56
  333. package/nitrogen/generated/shared/c++/views/HybridNitroListComponent.cpp +0 -88
  334. package/nitrogen/generated/shared/c++/views/HybridNitroListComponent.hpp +0 -107
  335. package/nitrogen/generated/shared/json/NitroListConfig.json +0 -10
  336. package/src/specs/nitro-list.nitro.ts +0 -13
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { requireNativeComponent } from 'react-native';
4
+ export const NitroRecyclerView = requireNativeComponent('NitroRecyclerView');
5
+ //# sourceMappingURL=NitroRecyclerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["requireNativeComponent","NitroRecyclerView"],"sourceRoot":"../../../src","sources":["native/NitroRecyclerView.ts"],"mappings":";;AAAA,SAASA,sBAAsB,QAAQ,cAAc;AAMrD,OAAO,MAAMC,iBAAiB,GAC5BD,sBAAsB,CAAyB,mBAAmB,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Callback invoked when new items should be prefetched.
5
+ */
6
+
7
+ /**
8
+ * PrefetchHelper
9
+ *
10
+ * Stateless with respect to layout.
11
+ * Only tracks what has already been prefetched to avoid duplication.
12
+ *
13
+ * Designed to be driven by *visible window*, not scroll events.
14
+ */
15
+ export class PrefetchHelper {
16
+ lastPrefetched = new Set();
17
+ runPrefetch(visibleIndices, itemCount, aheadCount, onPrefetch) {
18
+ if (visibleIndices.length === 0) return;
19
+ const lastVisible = visibleIndices[visibleIndices.length - 1];
20
+ const start = lastVisible + 1;
21
+ const end = Math.min(itemCount - 1, start + aheadCount);
22
+ const toPrefetch = [];
23
+ for (let i = start; i <= end; i++) {
24
+ if (!this.lastPrefetched.has(i)) {
25
+ this.lastPrefetched.add(i);
26
+ toPrefetch.push(i);
27
+ }
28
+ }
29
+ if (toPrefetch.length > 0) {
30
+ onPrefetch(toPrefetch);
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=PrefetchHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PrefetchHelper","lastPrefetched","Set","runPrefetch","visibleIndices","itemCount","aheadCount","onPrefetch","length","lastVisible","start","end","Math","min","toPrefetch","i","has","add","push"],"sourceRoot":"../../../src","sources":["prefetch/PrefetchHelper.ts"],"mappings":";;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,cAAc,CAAC;EAClBC,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC;EAE1CC,WAAWA,CACTC,cAAiC,EACjCC,SAAiB,EACjBC,UAAkB,EAClBC,UAA4B,EAC5B;IACA,IAAIH,cAAc,CAACI,MAAM,KAAK,CAAC,EAAE;IAEjC,MAAMC,WAAW,GACfL,cAAc,CAACA,cAAc,CAACI,MAAM,GAAG,CAAC,CAAE;IAE5C,MAAME,KAAK,GAAGD,WAAW,GAAG,CAAC;IAC7B,MAAME,GAAG,GAAGC,IAAI,CAACC,GAAG,CAClBR,SAAS,GAAG,CAAC,EACbK,KAAK,GAAGJ,UACV,CAAC;IAED,MAAMQ,UAAoB,GAAG,EAAE;IAE/B,KAAK,IAAIC,CAAC,GAAGL,KAAK,EAAEK,CAAC,IAAIJ,GAAG,EAAEI,CAAC,EAAE,EAAE;MACjC,IAAI,CAAC,IAAI,CAACd,cAAc,CAACe,GAAG,CAACD,CAAC,CAAC,EAAE;QAC/B,IAAI,CAACd,cAAc,CAACgB,GAAG,CAACF,CAAC,CAAC;QAC1BD,UAAU,CAACI,IAAI,CAACH,CAAC,CAAC;MACpB;IACF;IAEA,IAAID,UAAU,CAACN,MAAM,GAAG,CAAC,EAAE;MACzBD,UAAU,CAACO,UAAU,CAAC;IACxB;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=nitro-layout-engine.nitro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/nitro-layout-engine.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ export function arrayEqual(a, b) {
4
+ if (a === b) return true;
5
+ if (a.length !== b.length) return false;
6
+ for (let i = 0; i < a.length; i++) {
7
+ if (!Object.is(a[i], b[i])) return false;
8
+ }
9
+ return true;
10
+ }
11
+ //# sourceMappingURL=arrayEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["arrayEqual","a","b","length","i","Object","is"],"sourceRoot":"../../../src","sources":["utils/arrayEqual.ts"],"mappings":";;AAAA,OAAO,SAASA,UAAUA,CACxBC,CAAe,EACfC,CAAe,EACN;EACT,IAAID,CAAC,KAAKC,CAAC,EAAE,OAAO,IAAI;EACxB,IAAID,CAAC,CAACE,MAAM,KAAKD,CAAC,CAACC,MAAM,EAAE,OAAO,KAAK;EAEvC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,CAAC,CAACE,MAAM,EAAEC,CAAC,EAAE,EAAE;IACjC,IAAI,CAACC,MAAM,CAACC,EAAE,CAACL,CAAC,CAACG,CAAC,CAAC,EAAEF,CAAC,CAACE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;EAC1C;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export function assertNever(x) {
4
+ throw new Error(`Unexpected value: ${String(x)}`);
5
+ }
6
+ //# sourceMappingURL=assertNever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["assertNever","x","Error","String"],"sourceRoot":"../../../src","sources":["utils/assertNever.ts"],"mappings":";;AAAA,OAAO,SAASA,WAAWA,CAACC,CAAQ,EAAS;EAC3C,MAAM,IAAIC,KAAK,CAAC,qBAAqBC,MAAM,CAACF,CAAC,CAAC,EAAE,CAAC;AACnD","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export function clamp(value, min, max) {
4
+ return Math.min(Math.max(value, min), max);
5
+ }
6
+ //# sourceMappingURL=clamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clamp","value","min","max","Math"],"sourceRoot":"../../../src","sources":["utils/clamp.ts"],"mappings":";;AAAA,OAAO,SAASA,KAAKA,CACnBC,KAAa,EACbC,GAAW,EACXC,GAAW,EACH;EACR,OAAOC,IAAI,CAACF,GAAG,CAACE,IAAI,CAACD,GAAG,CAACF,KAAK,EAAEC,GAAG,CAAC,EAAEC,GAAG,CAAC;AAC5C","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ export function devAssert(condition, message) {
4
+ if (__DEV__ && !condition) {
5
+ throw new Error(`RecyclerList: ${message}`);
6
+ }
7
+ }
8
+ //# sourceMappingURL=devAssert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["devAssert","condition","message","__DEV__","Error"],"sourceRoot":"../../../src","sources":["utils/devAssert.ts"],"mappings":";;AAAA,OAAO,SAASA,SAASA,CACvBC,SAAkB,EAClBC,OAAe,EACT;EACN,IAAIC,OAAO,IAAI,CAACF,SAAS,EAAE;IACzB,MAAM,IAAIG,KAAK,CAAC,iBAAiBF,OAAO,EAAE,CAAC;EAC7C;AACF","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ export function invariant(condition, message) {
4
+ if (!condition) {
5
+ throw new Error(`Invariant failed: ${message}`);
6
+ }
7
+ }
8
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["invariant","condition","message","Error"],"sourceRoot":"../../../src","sources":["utils/invariant.ts"],"mappings":";;AAAA,OAAO,SAASA,SAASA,CACvBC,SAAkB,EAClBC,OAAe,EACI;EACnB,IAAI,CAACD,SAAS,EAAE;IACd,MAAM,IAAIE,KAAK,CAAC,qBAAqBD,OAAO,EAAE,CAAC;EACjD;AACF","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export function isDefined(value) {
4
+ return value !== undefined && value !== null;
5
+ }
6
+ //# sourceMappingURL=isDefined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isDefined","value","undefined"],"sourceRoot":"../../../src","sources":["utils/isDefined.ts"],"mappings":";;AAAA,OAAO,SAASA,SAASA,CACvBC,KAA2B,EACf;EACZ,OAAOA,KAAK,KAAKC,SAAS,IAAID,KAAK,KAAK,IAAI;AAC9C","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export function isNumber(value) {
4
+ return typeof value === 'number' && !Number.isNaN(value);
5
+ }
6
+ //# sourceMappingURL=isNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isNumber","value","Number","isNaN"],"sourceRoot":"../../../src","sources":["utils/isNumber.ts"],"mappings":";;AAAA,OAAO,SAASA,QAAQA,CAACC,KAAc,EAAmB;EACxD,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,MAAM,CAACC,KAAK,CAACF,KAAK,CAAC;AAC1D","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export function noop() {
4
+ // intentionally empty
5
+ }
6
+ //# sourceMappingURL=noop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["noop"],"sourceRoot":"../../../src","sources":["utils/noop.ts"],"mappings":";;AAAA,OAAO,SAASA,IAAIA,CAAA,EAAS;EAC3B;AAAA","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ export function shallowEqual(a, b) {
4
+ if (Object.is(a, b)) return true;
5
+ if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) {
6
+ return false;
7
+ }
8
+ const aKeys = Object.keys(a);
9
+ const bKeys = Object.keys(b);
10
+ if (aKeys.length !== bKeys.length) return false;
11
+ for (const key of aKeys) {
12
+ if (!(key in b) || !Object.is(a[key], b[key])) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+ //# sourceMappingURL=shallowEqual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["shallowEqual","a","b","Object","is","aKeys","keys","bKeys","length","key"],"sourceRoot":"../../../src","sources":["utils/shallowEqual.ts"],"mappings":";;AAAA,OAAO,SAASA,YAAYA,CAC1BC,CAAU,EACVC,CAAU,EACD;EACT,IAAIC,MAAM,CAACC,EAAE,CAACH,CAAC,EAAEC,CAAC,CAAC,EAAE,OAAO,IAAI;EAEhC,IACE,OAAOD,CAAC,KAAK,QAAQ,IACrB,OAAOC,CAAC,KAAK,QAAQ,IACrBD,CAAC,KAAK,IAAI,IACVC,CAAC,KAAK,IAAI,EACV;IACA,OAAO,KAAK;EACd;EAEA,MAAMG,KAAK,GAAGF,MAAM,CAACG,IAAI,CAACL,CAAW,CAAC;EACtC,MAAMM,KAAK,GAAGJ,MAAM,CAACG,IAAI,CAACJ,CAAW,CAAC;EAEtC,IAAIG,KAAK,CAACG,MAAM,KAAKD,KAAK,CAACC,MAAM,EAAE,OAAO,KAAK;EAE/C,KAAK,MAAMC,GAAG,IAAIJ,KAAK,EAAE;IACvB,IACE,EAAEI,GAAG,IAAKP,CAAY,CAAC,IACvB,CAACC,MAAM,CAACC,EAAE,CACPH,CAAC,CAA6BQ,GAAG,CAAC,EAClCP,CAAC,CAA6BO,GAAG,CACpC,CAAC,EACD;MACA,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ export function throttle(fn, ms) {
4
+ let last = 0;
5
+ return (...args) => {
6
+ const now = Date.now();
7
+ if (now - last > ms) {
8
+ last = now;
9
+ fn(...args);
10
+ }
11
+ };
12
+ }
13
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["throttle","fn","ms","last","args","now","Date"],"sourceRoot":"../../../src","sources":["utils/throttle.ts"],"mappings":";;AAAA,OAAO,SAASA,QAAQA,CACtBC,EAAK,EACLC,EAAU,EACP;EACH,IAAIC,IAAI,GAAG,CAAC;EACZ,OAAQ,CAAC,GAAGC,IAAa,KAAK;IAC5B,MAAMC,GAAG,GAAGC,IAAI,CAACD,GAAG,CAAC,CAAC;IACtB,IAAIA,GAAG,GAAGF,IAAI,GAAGD,EAAE,EAAE;MACnBC,IAAI,GAAGE,GAAG;MACVJ,EAAE,CAAC,GAAGG,IAAI,CAAC;IACb;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Public token describing viewability state of an item.
5
+ * Mirrors FlashList's ViewToken concept.
6
+ */
7
+
8
+ /**
9
+ * Configuration for viewability calculations.
10
+ */
11
+
12
+ /**
13
+ * ViewabilityHelper
14
+ *
15
+ * Pure observer:
16
+ * - Does NOT affect layout
17
+ * - Does NOT affect recycling
18
+ * - Computes visibility based on layout + scroll metrics
19
+ *
20
+ * This class is intentionally stateful (lastVisible)
21
+ * to compute "changed" items efficiently.
22
+ */
23
+ export class ViewabilityHelper {
24
+ /** Previously visible indices */
25
+ lastVisible = new Set();
26
+ constructor(config = {}) {
27
+ this.config = config;
28
+ }
29
+
30
+ /**
31
+ * Computes which items are viewable and which changed
32
+ * since the last invocation.
33
+ *
34
+ * IMPORTANT:
35
+ * - This method should be called AFTER windowing,
36
+ * not on the full dataset.
37
+ */
38
+ computeViewableItems(layouts, metrics) {
39
+ const visibleNow = new Set();
40
+ const viewableItems = [];
41
+ const changed = [];
42
+ const viewportTop = metrics.offsetY;
43
+ const viewportBottom = viewportTop + metrics.height;
44
+
45
+ // Normalize threshold into [0, 1]
46
+ const threshold = (this.config.itemVisiblePercentThreshold ?? 0) / 100;
47
+
48
+ /**
49
+ * NOTE:
50
+ * We intentionally iterate layouts sequentially,
51
+ * but EXIT EARLY when items are completely below viewport.
52
+ *
53
+ * This keeps complexity near O(visibleItems),
54
+ * not O(totalItems).
55
+ */
56
+ for (let i = 0; i < layouts.length; i++) {
57
+ const layout = layouts[i];
58
+
59
+ // If item is completely below viewport, stop
60
+ if (layout.y > viewportBottom) {
61
+ break;
62
+ }
63
+ const itemTop = layout.y;
64
+ const itemBottom = layout.y + layout.height;
65
+
66
+ // If item is completely above viewport, skip
67
+ if (itemBottom < viewportTop) {
68
+ continue;
69
+ }
70
+
71
+ // Compute visible intersection
72
+ const visibleTop = Math.max(itemTop, viewportTop);
73
+ const visibleBottom = Math.min(itemBottom, viewportBottom);
74
+ const visibleHeight = Math.max(0, visibleBottom - visibleTop);
75
+
76
+ // Guard against zero-height items
77
+ const itemHeight = layout.height > 0 ? layout.height : 1;
78
+ const visibleRatio = visibleHeight / itemHeight;
79
+ if (visibleRatio >= threshold) {
80
+ visibleNow.add(i);
81
+ viewableItems.push({
82
+ index: i,
83
+ isViewable: true
84
+ });
85
+
86
+ // Newly visible
87
+ if (!this.lastVisible.has(i)) {
88
+ changed.push({
89
+ index: i,
90
+ isViewable: true
91
+ });
92
+ }
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Items that were visible before but not anymore
98
+ */
99
+ for (const index of this.lastVisible) {
100
+ if (!visibleNow.has(index)) {
101
+ changed.push({
102
+ index,
103
+ isViewable: false
104
+ });
105
+ }
106
+ }
107
+
108
+ // Update snapshot
109
+ this.lastVisible = visibleNow;
110
+ return {
111
+ viewableItems,
112
+ changed
113
+ };
114
+ }
115
+ }
116
+ //# sourceMappingURL=ViewabilityHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ViewabilityHelper","lastVisible","Set","constructor","config","computeViewableItems","layouts","metrics","visibleNow","viewableItems","changed","viewportTop","offsetY","viewportBottom","height","threshold","itemVisiblePercentThreshold","i","length","layout","y","itemTop","itemBottom","visibleTop","Math","max","visibleBottom","min","visibleHeight","itemHeight","visibleRatio","add","push","index","isViewable","has"],"sourceRoot":"../../../src","sources":["viewability/ViewabilityHelper.ts"],"mappings":";;AAGA;AACA;AACA;AACA;;AAMA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,iBAAiB,CAAC;EAC7B;EACQC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;EAEvCC,WAAWA,CACQC,MAAyB,GAAG,CAAC,CAAC,EAC/C;IAAA,KADiBA,MAAyB,GAAzBA,MAAyB;EACzC;;EAEH;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,oBAAoBA,CAClBC,OAAmC,EACnCC,OAAsB,EAItB;IACA,MAAMC,UAAU,GAAG,IAAIN,GAAG,CAAS,CAAC;IACpC,MAAMO,aAA0B,GAAG,EAAE;IACrC,MAAMC,OAAoB,GAAG,EAAE;IAE/B,MAAMC,WAAW,GAAGJ,OAAO,CAACK,OAAO;IACnC,MAAMC,cAAc,GAAGF,WAAW,GAAGJ,OAAO,CAACO,MAAM;;IAEnD;IACA,MAAMC,SAAS,GACb,CAAC,IAAI,CAACX,MAAM,CAACY,2BAA2B,IAAI,CAAC,IAAI,GAAG;;IAEtD;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACI,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,OAAO,CAACY,MAAM,EAAED,CAAC,EAAE,EAAE;MACvC,MAAME,MAAM,GAAGb,OAAO,CAACW,CAAC,CAAE;;MAE1B;MACA,IAAIE,MAAM,CAACC,CAAC,GAAGP,cAAc,EAAE;QAC7B;MACF;MAEA,MAAMQ,OAAO,GAAGF,MAAM,CAACC,CAAC;MACxB,MAAME,UAAU,GAAGH,MAAM,CAACC,CAAC,GAAGD,MAAM,CAACL,MAAM;;MAE3C;MACA,IAAIQ,UAAU,GAAGX,WAAW,EAAE;QAC5B;MACF;;MAEA;MACA,MAAMY,UAAU,GAAGC,IAAI,CAACC,GAAG,CAACJ,OAAO,EAAEV,WAAW,CAAC;MACjD,MAAMe,aAAa,GAAGF,IAAI,CAACG,GAAG,CAACL,UAAU,EAAET,cAAc,CAAC;MAE1D,MAAMe,aAAa,GAAGJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEC,aAAa,GAAGH,UAAU,CAAC;;MAE7D;MACA,MAAMM,UAAU,GACdV,MAAM,CAACL,MAAM,GAAG,CAAC,GAAGK,MAAM,CAACL,MAAM,GAAG,CAAC;MAEvC,MAAMgB,YAAY,GAAGF,aAAa,GAAGC,UAAU;MAE/C,IAAIC,YAAY,IAAIf,SAAS,EAAE;QAC7BP,UAAU,CAACuB,GAAG,CAACd,CAAC,CAAC;QACjBR,aAAa,CAACuB,IAAI,CAAC;UAAEC,KAAK,EAAEhB,CAAC;UAAEiB,UAAU,EAAE;QAAK,CAAC,CAAC;;QAElD;QACA,IAAI,CAAC,IAAI,CAACjC,WAAW,CAACkC,GAAG,CAAClB,CAAC,CAAC,EAAE;UAC5BP,OAAO,CAACsB,IAAI,CAAC;YAAEC,KAAK,EAAEhB,CAAC;YAAEiB,UAAU,EAAE;UAAK,CAAC,CAAC;QAC9C;MACF;IACF;;IAEA;AACJ;AACA;IACI,KAAK,MAAMD,KAAK,IAAI,IAAI,CAAChC,WAAW,EAAE;MACpC,IAAI,CAACO,UAAU,CAAC2B,GAAG,CAACF,KAAK,CAAC,EAAE;QAC1BvB,OAAO,CAACsB,IAAI,CAAC;UAAEC,KAAK;UAAEC,UAAU,EAAE;QAAM,CAAC,CAAC;MAC5C;IACF;;IAEA;IACA,IAAI,CAACjC,WAAW,GAAGO,UAAU;IAE7B,OAAO;MAAEC,aAAa;MAAEC;IAAQ,CAAC;EACnC;AACF","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=ScrollMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["windowing/ScrollMetrics.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Computes the contiguous range of item indices
5
+ * intersecting the viewport expanded by bufferPx.
6
+ *
7
+ * PURE function. No allocations besides output.
8
+ * FlashList-style windowing.
9
+ */
10
+ export function findVisibleIndexRange(layouts, metrics, bufferPx) {
11
+ const count = layouts.length;
12
+
13
+ // 🔒 CRITICAL GUARDS (FlashList-style)
14
+ if (count === 0 || metrics.height <= 0 || bufferPx < 0) {
15
+ return [];
16
+ }
17
+ const windowStart = Math.max(0, metrics.offsetY - bufferPx);
18
+ const windowEnd = metrics.offsetY + metrics.height + bufferPx;
19
+
20
+ // Binary search for first intersecting item
21
+ let low = 0;
22
+ let high = count - 1;
23
+ let firstVisible = count;
24
+ while (low <= high) {
25
+ const mid = low + high >> 1;
26
+ const rect = layouts[mid];
27
+ if (rect.y + rect.height >= windowStart) {
28
+ firstVisible = mid;
29
+ high = mid - 1;
30
+ } else {
31
+ low = mid + 1;
32
+ }
33
+ }
34
+
35
+ // Linear scan forward
36
+ const visible = [];
37
+ for (let i = firstVisible; i < count; i++) {
38
+ const rect = layouts[i];
39
+ if (rect.y > windowEnd) break;
40
+ visible.push(i);
41
+ }
42
+ return visible;
43
+ }
44
+ //# sourceMappingURL=findVisibleIndexRange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["findVisibleIndexRange","layouts","metrics","bufferPx","count","length","height","windowStart","Math","max","offsetY","windowEnd","low","high","firstVisible","mid","rect","y","visible","i","push"],"sourceRoot":"../../../src","sources":["windowing/findVisibleIndexRange.ts"],"mappings":";;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,qBAAqBA,CACnCC,OAAmC,EACnCC,OAAsB,EACtBC,QAAgB,EACG;EACnB,MAAMC,KAAK,GAAGH,OAAO,CAACI,MAAM;;EAE5B;EACA,IACED,KAAK,KAAK,CAAC,IACXF,OAAO,CAACI,MAAM,IAAI,CAAC,IACnBH,QAAQ,GAAG,CAAC,EACZ;IACA,OAAO,EAAE;EACX;EAEA,MAAMI,WAAW,GACfC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEP,OAAO,CAACQ,OAAO,GAAGP,QAAQ,CAAC;EAEzC,MAAMQ,SAAS,GACbT,OAAO,CAACQ,OAAO,GAAGR,OAAO,CAACI,MAAM,GAAGH,QAAQ;;EAE7C;EACA,IAAIS,GAAG,GAAG,CAAC;EACX,IAAIC,IAAI,GAAGT,KAAK,GAAG,CAAC;EACpB,IAAIU,YAAY,GAAGV,KAAK;EAExB,OAAOQ,GAAG,IAAIC,IAAI,EAAE;IAClB,MAAME,GAAG,GAAIH,GAAG,GAAGC,IAAI,IAAK,CAAC;IAC7B,MAAMG,IAAI,GAAGf,OAAO,CAACc,GAAG,CAAE;IAE1B,IAAIC,IAAI,CAACC,CAAC,GAAGD,IAAI,CAACV,MAAM,IAAIC,WAAW,EAAE;MACvCO,YAAY,GAAGC,GAAG;MAClBF,IAAI,GAAGE,GAAG,GAAG,CAAC;IAChB,CAAC,MAAM;MACLH,GAAG,GAAGG,GAAG,GAAG,CAAC;IACf;EACF;;EAEA;EACA,MAAMG,OAAiB,GAAG,EAAE;EAE5B,KAAK,IAAIC,CAAC,GAAGL,YAAY,EAAEK,CAAC,GAAGf,KAAK,EAAEe,CAAC,EAAE,EAAE;IACzC,MAAMH,IAAI,GAAGf,OAAO,CAACkB,CAAC,CAAE;IACxB,IAAIH,IAAI,CAACC,CAAC,GAAGN,SAAS,EAAE;IACxBO,OAAO,CAACE,IAAI,CAACD,CAAC,CAAC;EACjB;EAEA,OAAOD,OAAO;AAChB","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { findVisibleIndexRange } from './findVisibleIndexRange';
4
+ export { useScrollMetrics } from './useScrollMetrics';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["findVisibleIndexRange","useScrollMetrics"],"sourceRoot":"../../../src","sources":["windowing/index.ts"],"mappings":";;AACA,SAASA,qBAAqB,QAAQ,yBAAyB;AAC/D,SAASC,gBAAgB,QAAQ,oBAAoB","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useState } from 'react';
4
+ /**
5
+ * Scroll metrics hook.
6
+ * Provides stable scroll snapshot + handlers.
7
+ *
8
+ * FlashList equivalent: useScrollMetrics
9
+ */
10
+ export function useScrollMetrics() {
11
+ const [metrics, setMetrics] = useState({
12
+ offsetY: 0,
13
+ height: 0
14
+ });
15
+ const onScroll = useCallback(e => {
16
+ const offsetY = e.nativeEvent.contentOffset.y;
17
+ setMetrics(prev => prev.offsetY === offsetY ? prev : {
18
+ ...prev,
19
+ offsetY
20
+ });
21
+ }, []);
22
+ const onLayout = useCallback(e => {
23
+ const height = e.nativeEvent.layout.height;
24
+ setMetrics(prev => prev.height === height ? prev : {
25
+ ...prev,
26
+ height
27
+ });
28
+ }, []);
29
+ return {
30
+ metrics,
31
+ onScroll,
32
+ onLayout
33
+ };
34
+ }
35
+ //# sourceMappingURL=useScrollMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useState","useScrollMetrics","metrics","setMetrics","offsetY","height","onScroll","e","nativeEvent","contentOffset","y","prev","onLayout","layout"],"sourceRoot":"../../../src","sources":["windowing/useScrollMetrics.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAQ7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAI9B;EACA,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGH,QAAQ,CAAgB;IACpDI,OAAO,EAAE,CAAC;IACVC,MAAM,EAAE;EACV,CAAC,CAAC;EAEF,MAAMC,QAAQ,GAAGP,WAAW,CACzBQ,CAA0C,IAAK;IAC9C,MAAMH,OAAO,GAAGG,CAAC,CAACC,WAAW,CAACC,aAAa,CAACC,CAAC;IAE7CP,UAAU,CAACQ,IAAI,IACbA,IAAI,CAACP,OAAO,KAAKA,OAAO,GACpBO,IAAI,GACJ;MAAE,GAAGA,IAAI;MAAEP;IAAQ,CACzB,CAAC;EACH,CAAC,EACD,EACF,CAAC;EAED,MAAMQ,QAAQ,GAAGb,WAAW,CACzBQ,CAAoB,IAAK;IACxB,MAAMF,MAAM,GAAGE,CAAC,CAACC,WAAW,CAACK,MAAM,CAACR,MAAM;IAE1CF,UAAU,CAACQ,IAAI,IACbA,IAAI,CAACN,MAAM,KAAKA,MAAM,GAClBM,IAAI,GACJ;MAAE,GAAGA,IAAI;MAAEN;IAAO,CACxB,CAAC;EACH,CAAC,EACD,EACF,CAAC;EAED,OAAO;IACLH,OAAO;IACPI,QAAQ;IACRM;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export type NitroRecyclerViewProps = {
2
+ itemCount: number;
3
+ };
4
+ export declare const NitroRecyclerView: import("react-native").HostComponent<NitroRecyclerViewProps>;
5
+ //# sourceMappingURL=NitroList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NitroList.d.ts","sourceRoot":"","sources":["../../../src/NitroList.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,iBAAiB,8DACuC,CAAA"}
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ /**
3
+ * Public API — mirrors FlashList behavior, not internals.
4
+ */
5
+ export type RecyclerListProps = {
6
+ containerWidth: number;
7
+ itemCount?: number;
8
+ itemHeights?: readonly number[];
9
+ estimatedItemHeight?: number;
10
+ renderBufferRatio?: number;
11
+ getItemType?: (index: number) => string;
12
+ renderItem: (index: number) => React.ReactElement;
13
+ onPrefetch?: (indices: number[]) => void;
14
+ onViewableItemsChanged?: (info: {
15
+ viewableItems: {
16
+ index: number;
17
+ isViewable: boolean;
18
+ }[];
19
+ changed: {
20
+ index: number;
21
+ isViewable: boolean;
22
+ }[];
23
+ }) => void;
24
+ };
25
+ export declare function RecyclerList(props: RecyclerListProps): React.ReactElement;
26
+ //# sourceMappingURL=RecyclerList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerList.d.ts","sourceRoot":"","sources":["../../../src/RecyclerList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAIN,MAAM,OAAO,CAAA;AAgBd;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAA;IACjD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACxC,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC9B,aAAa,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;QACvD,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;KAClD,KAAK,IAAI,CAAA;CACX,CAAA;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAyMzE"}
@@ -0,0 +1,9 @@
1
+ import type { LayoutRectangle } from './layout/LayoutRectangle';
2
+ import type { ScrollMetrics } from './windowing/ScrollMetrics';
3
+ import type { Cell } from './cell/Cell';
4
+ /**
5
+ * INTERNAL hook.
6
+ * MUST ALWAYS CALL hooks in the same order.
7
+ */
8
+ export declare function useRecyclerListInternal(layouts: readonly LayoutRectangle[], metrics: ScrollMetrics, bufferPx: number, getItemType: (index: number) => string): readonly Cell[];
9
+ //# sourceMappingURL=RecyclerList.internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerList.internal.d.ts","sourceRoot":"","sources":["../../../src/RecyclerList.internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAIvC;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACrC,SAAS,IAAI,EAAE,CAmBjB"}
@@ -0,0 +1,18 @@
1
+ import type React from 'react';
2
+ export type RecyclerListProps = {
3
+ /** Width of the list container (required) */
4
+ readonly containerWidth: number;
5
+ /** Total number of items (used with estimatedItemHeight) */
6
+ readonly itemCount?: number;
7
+ /** Explicit item heights (fast path, skips estimation) */
8
+ readonly itemHeights?: readonly number[];
9
+ /** Estimated item height when itemHeights not provided */
10
+ readonly estimatedItemHeight?: number;
11
+ /** Render buffer multiplier (FlashList-style, default ~1.3) */
12
+ readonly renderBufferRatio?: number;
13
+ /** Optional item type resolver for recycling */
14
+ readonly getItemType?: (index: number) => string;
15
+ /** Render function */
16
+ readonly renderItem: (index: number) => React.ReactElement;
17
+ };
18
+ //# sourceMappingURL=RecyclerList.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerList.types.d.ts","sourceRoot":"","sources":["../../../src/RecyclerList.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAE/B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAE3B,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAExC,0DAA0D;IAC1D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAErC,+DAA+D;IAC/D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAEnC,gDAAgD;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAEhD,sBAAsB;IACtB,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAA;CAC3D,CAAA"}
@@ -0,0 +1,9 @@
1
+ export type ReusableView = {
2
+ /** Stable identity for React */
3
+ readonly key: string;
4
+ /** Current data index bound to this slot */
5
+ index: number;
6
+ /** Optional type (header, row, etc — future) */
7
+ type?: string;
8
+ };
9
+ //# sourceMappingURL=ReusableView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReusableView.d.ts","sourceRoot":"","sources":["../../../src/ReusableView.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IAEpB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IAEb,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=findVisibleIndexRange.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findVisibleIndexRange.test.d.ts","sourceRoot":"","sources":["../../../../../src/__tests__/windowing/findVisibleIndexRange.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Physical reusable cell.
3
+ * Mirrors FlashList's Cell abstraction.
4
+ */
5
+ export interface Cell {
6
+ /** Stable physical identity (never changes) */
7
+ readonly key: string;
8
+ /** Logical data index currently bound */
9
+ index: number;
10
+ /** Compatibility type (row, header, etc.) */
11
+ readonly type: string;
12
+ }
13
+ //# sourceMappingURL=Cell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Cell.d.ts","sourceRoot":"","sources":["../../../../src/cell/Cell.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IAEpB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;IAEb,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB"}
@@ -0,0 +1,19 @@
1
+ import type { Cell } from './Cell';
2
+ /**
3
+ * Owns physical cell reuse.
4
+ * Stateful, imperative, React-agnostic.
5
+ *
6
+ * FlashList equivalent: CellRecycler
7
+ */
8
+ export declare class CellRecycler {
9
+ private readonly activeCells;
10
+ private readonly reusableCellsByType;
11
+ private readonly orderedCells;
12
+ private nextCellId;
13
+ /**
14
+ * Reconcile visible indices against existing cells.
15
+ * Returns a stable ordered snapshot.
16
+ */
17
+ reconcile(visibleIndices: readonly number[], getCellType: (index: number) => string): readonly Cell[];
18
+ }
19
+ //# sourceMappingURL=CellRecycler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellRecycler.d.ts","sourceRoot":"","sources":["../../../../src/cell/CellRecycler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAIlC;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4B;IAChE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,UAAU,CAAI;IAEtB;;;OAGG;IACH,SAAS,CACP,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACrC,SAAS,IAAI,EAAE;CA0CnB"}
@@ -0,0 +1,2 @@
1
+ export declare function getStableKey(slotKey: string, index: number): string;
2
+ //# sourceMappingURL=StableKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StableKey.d.ts","sourceRoot":"","sources":["../../../../src/cell/StableKey.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,MAAM,CAER"}
@@ -0,0 +1,2 @@
1
+ export declare function useDebugOverlay(enabled: boolean, visibleCount: number): void;
2
+ //# sourceMappingURL=useDebugOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebugOverlay.d.ts","sourceRoot":"","sources":["../../../../src/debug/useDebugOverlay.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN"}
@@ -0,0 +1,8 @@
1
+ import type { LayoutRectangle } from './layout/LayoutRectangle';
2
+ import type { ScrollMetrics } from './windowing/ScrollMetrics';
3
+ /**
4
+ * Binary-search based windowing.
5
+ * Returns indices intersecting viewport ± buffer.
6
+ */
7
+ export declare function getVisibleRange(layouts: readonly LayoutRectangle[], metrics: ScrollMetrics, bufferPx: number): readonly number[];
8
+ //# sourceMappingURL=getVisibleIndices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVisibleIndices.d.ts","sourceRoot":"","sources":["../../../src/getVisibleIndices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,MAAM,GACf,SAAS,MAAM,EAAE,CAyCnB"}