react-native-nitro-list 0.1.1 → 0.1.3

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 (376) hide show
  1. package/README.md +16 -44
  2. package/ios/HybridNitroList.swift +12 -14
  3. package/lib/commonjs/cell/CellKeyGenerator.js +21 -0
  4. package/lib/commonjs/cell/CellKeyGenerator.js.map +1 -0
  5. package/lib/commonjs/cell/CellRecycler.js +48 -40
  6. package/lib/commonjs/cell/CellRecycler.js.map +1 -1
  7. package/lib/commonjs/cell/createCell.js +21 -0
  8. package/lib/commonjs/cell/createCell.js.map +1 -0
  9. package/lib/commonjs/cell/index.js +20 -0
  10. package/lib/commonjs/cell/index.js.map +1 -0
  11. package/lib/commonjs/getVisibleIndices.js.map +1 -1
  12. package/lib/commonjs/hooks/usePersistentCallback.js +36 -0
  13. package/lib/commonjs/hooks/usePersistentCallback.js.map +1 -0
  14. package/lib/commonjs/index.js +31 -3
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/layout/MutableLinearLayout.js +78 -39
  17. package/lib/commonjs/layout/MutableLinearLayout.js.map +1 -1
  18. package/lib/commonjs/layout/constants/layoutDefaults.js +19 -0
  19. package/lib/commonjs/layout/constants/layoutDefaults.js.map +1 -0
  20. package/lib/commonjs/layout/index.js +0 -18
  21. package/lib/commonjs/layout/index.js.map +1 -1
  22. package/lib/commonjs/native/NitroListView.js +20 -0
  23. package/lib/commonjs/native/NitroListView.js.map +1 -0
  24. package/lib/commonjs/recycler/CellPool.js +33 -0
  25. package/lib/commonjs/recycler/CellPool.js.map +1 -0
  26. package/lib/commonjs/recycler/NitroList.js +223 -0
  27. package/lib/commonjs/recycler/NitroList.js.map +1 -0
  28. package/lib/commonjs/scroll/useScrollVelocity.js +20 -0
  29. package/lib/commonjs/scroll/useScrollVelocity.js.map +1 -0
  30. package/lib/commonjs/{native/NitroList.types.js → specs/NitroList.nitro.js} +1 -1
  31. package/lib/commonjs/{layout/LayoutProvider.js.map → specs/NitroList.nitro.js.map} +1 -1
  32. package/lib/commonjs/types/Axis.js +2 -0
  33. package/lib/{module/layout/LayoutProvider.js.map → commonjs/types/Axis.js.map} +1 -1
  34. package/lib/commonjs/types/CellKey.js +2 -0
  35. package/lib/commonjs/{layout/LayoutRectangle.js.map → types/CellKey.js.map} +1 -1
  36. package/lib/commonjs/types/CellType.js +27 -0
  37. package/lib/commonjs/types/CellType.js.map +1 -0
  38. package/lib/commonjs/types/VisibleRange.js +2 -0
  39. package/lib/commonjs/{native/NitroList.types.js.map → types/VisibleRange.js.map} +1 -1
  40. package/lib/commonjs/{RecyclerList.types.js → types/VisibleRangeInput.js} +1 -1
  41. package/lib/commonjs/types/VisibleRangeInput.js.map +1 -0
  42. package/lib/commonjs/types/index.js +13 -0
  43. package/lib/commonjs/types/index.js.map +1 -0
  44. package/lib/commonjs/types/layout/LayoutRect.js +2 -0
  45. package/lib/commonjs/types/layout/LayoutRect.js.map +1 -0
  46. package/lib/commonjs/{specs/nitro-layout-engine.nitro.js → types/layout/LinearLayoutInput.js} +1 -1
  47. package/lib/commonjs/types/layout/LinearLayoutInput.js.map +1 -0
  48. package/lib/commonjs/types/layout/MainAxisPadding.js +26 -0
  49. package/lib/commonjs/types/layout/MainAxisPadding.js.map +1 -0
  50. package/lib/commonjs/types/layout/index.js +2 -0
  51. package/lib/commonjs/types/layout/index.js.map +1 -0
  52. package/lib/commonjs/types/recycler/CellPool.js +42 -0
  53. package/lib/commonjs/types/recycler/CellPool.js.map +1 -0
  54. package/lib/commonjs/{layout/LayoutProvider.js → types/recycler/NitroListProps.js} +1 -1
  55. package/lib/commonjs/types/recycler/NitroListProps.js.map +1 -0
  56. package/lib/commonjs/types/recycler/RecyclerCell.js +6 -0
  57. package/lib/commonjs/types/recycler/RecyclerCell.js.map +1 -0
  58. package/lib/commonjs/types/recycler/RecyclerItemRenderer.js +6 -0
  59. package/lib/commonjs/types/recycler/RecyclerItemRenderer.js.map +1 -0
  60. package/lib/commonjs/types/recycler/index.js +2 -0
  61. package/lib/commonjs/types/recycler/index.js.map +1 -0
  62. package/lib/commonjs/types/scroll/ScrollMetrics.js +6 -0
  63. package/lib/commonjs/types/scroll/ScrollMetrics.js.map +1 -0
  64. package/lib/commonjs/types/scroll/index.js +2 -0
  65. package/lib/commonjs/types/scroll/index.js.map +1 -0
  66. package/lib/commonjs/windowing/computeVisibleItemRange.js +61 -0
  67. package/lib/commonjs/windowing/computeVisibleItemRange.js.map +1 -0
  68. package/lib/commonjs/windowing/index.js +3 -3
  69. package/lib/commonjs/windowing/index.js.map +1 -1
  70. package/lib/module/cell/CellKeyGenerator.js +16 -0
  71. package/lib/module/cell/CellKeyGenerator.js.map +1 -0
  72. package/lib/module/cell/CellRecycler.js +48 -39
  73. package/lib/module/cell/CellRecycler.js.map +1 -1
  74. package/lib/module/cell/createCell.js +17 -0
  75. package/lib/module/cell/createCell.js.map +1 -0
  76. package/lib/module/cell/index.js +7 -0
  77. package/lib/module/cell/index.js.map +1 -0
  78. package/lib/module/getVisibleIndices.js.map +1 -1
  79. package/lib/module/hooks/usePersistentCallback.js +33 -0
  80. package/lib/module/hooks/usePersistentCallback.js.map +1 -0
  81. package/lib/module/index.js +5 -1
  82. package/lib/module/index.js.map +1 -1
  83. package/lib/module/layout/MutableLinearLayout.js +78 -38
  84. package/lib/module/layout/MutableLinearLayout.js.map +1 -1
  85. package/lib/module/layout/constants/layoutDefaults.js +15 -0
  86. package/lib/module/layout/constants/layoutDefaults.js.map +1 -0
  87. package/lib/module/layout/index.js +0 -3
  88. package/lib/module/layout/index.js.map +1 -1
  89. package/lib/module/native/NitroListView.js +17 -0
  90. package/lib/module/native/NitroListView.js.map +1 -0
  91. package/lib/module/recycler/CellPool.js +28 -0
  92. package/lib/module/recycler/CellPool.js.map +1 -0
  93. package/lib/module/recycler/NitroList.js +220 -0
  94. package/lib/module/recycler/NitroList.js.map +1 -0
  95. package/lib/module/scroll/useScrollVelocity.js +16 -0
  96. package/lib/module/scroll/useScrollVelocity.js.map +1 -0
  97. package/lib/module/specs/NitroList.nitro.js +4 -0
  98. package/lib/module/specs/NitroList.nitro.js.map +1 -0
  99. package/lib/module/types/Axis.js +2 -0
  100. package/lib/module/types/Axis.js.map +1 -0
  101. package/lib/module/types/CellKey.js +2 -0
  102. package/lib/module/types/CellKey.js.map +1 -0
  103. package/lib/module/types/CellType.js +22 -0
  104. package/lib/module/types/CellType.js.map +1 -0
  105. package/lib/module/types/VisibleRange.js +2 -0
  106. package/lib/module/types/VisibleRange.js.map +1 -0
  107. package/lib/module/types/VisibleRangeInput.js +4 -0
  108. package/lib/module/types/VisibleRangeInput.js.map +1 -0
  109. package/lib/module/types/index.js +4 -0
  110. package/lib/module/types/index.js.map +1 -0
  111. package/lib/module/types/layout/LayoutRect.js +2 -0
  112. package/lib/module/types/layout/LayoutRect.js.map +1 -0
  113. package/lib/module/types/layout/LinearLayoutInput.js +4 -0
  114. package/lib/module/types/layout/LinearLayoutInput.js.map +1 -0
  115. package/lib/module/types/layout/MainAxisPadding.js +22 -0
  116. package/lib/module/types/layout/MainAxisPadding.js.map +1 -0
  117. package/lib/module/types/layout/index.js +2 -0
  118. package/lib/module/types/layout/index.js.map +1 -0
  119. package/lib/module/types/recycler/CellPool.js +37 -0
  120. package/lib/module/types/recycler/CellPool.js.map +1 -0
  121. package/lib/module/types/recycler/NitroListProps.js +4 -0
  122. package/lib/module/types/recycler/NitroListProps.js.map +1 -0
  123. package/lib/module/types/recycler/RecyclerCell.js +4 -0
  124. package/lib/module/types/recycler/RecyclerCell.js.map +1 -0
  125. package/lib/module/types/recycler/RecyclerItemRenderer.js +4 -0
  126. package/lib/module/types/recycler/RecyclerItemRenderer.js.map +1 -0
  127. package/lib/module/types/recycler/index.js +2 -0
  128. package/lib/module/types/recycler/index.js.map +1 -0
  129. package/lib/module/types/scroll/ScrollMetrics.js +4 -0
  130. package/lib/module/types/scroll/ScrollMetrics.js.map +1 -0
  131. package/lib/module/types/scroll/index.js +2 -0
  132. package/lib/module/types/scroll/index.js.map +1 -0
  133. package/lib/module/windowing/computeVisibleItemRange.js +57 -0
  134. package/lib/module/windowing/computeVisibleItemRange.js.map +1 -0
  135. package/lib/module/windowing/index.js +1 -1
  136. package/lib/module/windowing/index.js.map +1 -1
  137. package/lib/typescript/src/cell/Cell.d.ts +13 -4
  138. package/lib/typescript/src/cell/Cell.d.ts.map +1 -1
  139. package/lib/typescript/src/cell/CellKeyGenerator.d.ts +11 -0
  140. package/lib/typescript/src/cell/CellKeyGenerator.d.ts.map +1 -0
  141. package/lib/typescript/src/cell/CellRecycler.d.ts +19 -11
  142. package/lib/typescript/src/cell/CellRecycler.d.ts.map +1 -1
  143. package/lib/typescript/src/cell/createCell.d.ts +7 -0
  144. package/lib/typescript/src/cell/createCell.d.ts.map +1 -0
  145. package/lib/typescript/src/cell/index.d.ts +4 -0
  146. package/lib/typescript/src/cell/index.d.ts.map +1 -0
  147. package/lib/typescript/src/getVisibleIndices.d.ts +2 -2
  148. package/lib/typescript/src/getVisibleIndices.d.ts.map +1 -1
  149. package/lib/typescript/src/hooks/usePersistentCallback.d.ts +16 -0
  150. package/lib/typescript/src/hooks/usePersistentCallback.d.ts.map +1 -0
  151. package/lib/typescript/src/index.d.ts +3 -2
  152. package/lib/typescript/src/index.d.ts.map +1 -1
  153. package/lib/typescript/src/layout/MutableLinearLayout.d.ts +45 -13
  154. package/lib/typescript/src/layout/MutableLinearLayout.d.ts.map +1 -1
  155. package/lib/typescript/src/layout/constants/layoutDefaults.d.ts +13 -0
  156. package/lib/typescript/src/layout/constants/layoutDefaults.d.ts.map +1 -0
  157. package/lib/typescript/src/layout/index.d.ts +1 -4
  158. package/lib/typescript/src/layout/index.d.ts.map +1 -1
  159. package/lib/typescript/src/native/NitroListView.d.ts +20 -0
  160. package/lib/typescript/src/native/NitroListView.d.ts.map +1 -0
  161. package/lib/typescript/src/recycler/CellPool.d.ts +11 -0
  162. package/lib/typescript/src/recycler/CellPool.d.ts.map +1 -0
  163. package/lib/typescript/src/recycler/NitroList.d.ts +4 -0
  164. package/lib/typescript/src/recycler/NitroList.d.ts.map +1 -0
  165. package/lib/typescript/src/scroll/useScrollVelocity.d.ts +2 -0
  166. package/lib/typescript/src/scroll/useScrollVelocity.d.ts.map +1 -0
  167. package/lib/typescript/src/specs/NitroList.nitro.d.ts +26 -0
  168. package/lib/typescript/src/specs/NitroList.nitro.d.ts.map +1 -0
  169. package/lib/typescript/src/types/Axis.d.ts +11 -0
  170. package/lib/typescript/src/types/Axis.d.ts.map +1 -0
  171. package/lib/typescript/src/types/CellKey.d.ts +2 -0
  172. package/lib/typescript/src/types/CellKey.d.ts.map +1 -0
  173. package/lib/typescript/src/types/CellType.d.ts +22 -0
  174. package/lib/typescript/src/types/CellType.d.ts.map +1 -0
  175. package/lib/typescript/src/types/VisibleRange.d.ts +10 -0
  176. package/lib/typescript/src/types/VisibleRange.d.ts.map +1 -0
  177. package/lib/typescript/src/types/VisibleRangeInput.d.ts +35 -0
  178. package/lib/typescript/src/types/VisibleRangeInput.d.ts.map +1 -0
  179. package/lib/typescript/src/types/index.d.ts +8 -0
  180. package/lib/typescript/src/types/index.d.ts.map +1 -0
  181. package/lib/typescript/src/types/layout/LayoutRect.d.ts +15 -0
  182. package/lib/typescript/src/types/layout/LayoutRect.d.ts.map +1 -0
  183. package/lib/typescript/src/types/layout/LinearLayoutInput.d.ts +10 -0
  184. package/lib/typescript/src/types/layout/LinearLayoutInput.d.ts.map +1 -0
  185. package/lib/typescript/src/types/layout/MainAxisPadding.d.ts +20 -0
  186. package/lib/typescript/src/types/layout/MainAxisPadding.d.ts.map +1 -0
  187. package/lib/typescript/src/types/layout/index.d.ts +4 -0
  188. package/lib/typescript/src/types/layout/index.d.ts.map +1 -0
  189. package/lib/typescript/src/types/recycler/CellPool.d.ts +16 -0
  190. package/lib/typescript/src/types/recycler/CellPool.d.ts.map +1 -0
  191. package/lib/typescript/src/types/recycler/NitroListProps.d.ts +66 -0
  192. package/lib/typescript/src/types/recycler/NitroListProps.d.ts.map +1 -0
  193. package/lib/typescript/src/types/recycler/RecyclerCell.d.ts +12 -0
  194. package/lib/typescript/src/types/recycler/RecyclerCell.d.ts.map +1 -0
  195. package/lib/typescript/src/types/recycler/RecyclerItemRenderer.d.ts +12 -0
  196. package/lib/typescript/src/types/recycler/RecyclerItemRenderer.d.ts.map +1 -0
  197. package/lib/typescript/src/types/recycler/index.d.ts +4 -0
  198. package/lib/typescript/src/types/recycler/index.d.ts.map +1 -0
  199. package/lib/typescript/src/types/scroll/ScrollMetrics.d.ts +15 -0
  200. package/lib/typescript/src/types/scroll/ScrollMetrics.d.ts.map +1 -0
  201. package/lib/typescript/src/types/scroll/index.d.ts +2 -0
  202. package/lib/typescript/src/types/scroll/index.d.ts.map +1 -0
  203. package/lib/typescript/src/windowing/computeVisibleItemRange.d.ts +19 -0
  204. package/lib/typescript/src/windowing/computeVisibleItemRange.d.ts.map +1 -0
  205. package/lib/typescript/src/windowing/index.d.ts +1 -1
  206. package/lib/typescript/src/windowing/index.d.ts.map +1 -1
  207. package/nitro.json +5 -5
  208. package/nitrogen/generated/android/NitroList+autolinking.cmake +2 -2
  209. package/nitrogen/generated/android/NitroListOnLoad.cpp +2 -2
  210. package/nitrogen/generated/android/c++/{JHybridNitroLayoutEngineSpec.cpp → JHybridNitroListSpec.cpp} +15 -15
  211. package/nitrogen/generated/android/c++/{JHybridNitroLayoutEngineSpec.hpp → JHybridNitroListSpec.hpp} +11 -11
  212. package/nitrogen/generated/android/c++/{JLayoutRectangle.hpp → JItemLayout.hpp} +10 -10
  213. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/{HybridNitroLayoutEngineSpec.kt → HybridNitroListSpec.kt} +7 -7
  214. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/{LayoutRectangle.kt → ItemLayout.kt} +5 -5
  215. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Bridge.cpp +9 -9
  216. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Bridge.hpp +27 -27
  217. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Umbrella.hpp +8 -8
  218. package/nitrogen/generated/ios/c++/{HybridNitroLayoutEngineSpecSwift.cpp → HybridNitroListSpecSwift.cpp} +2 -2
  219. package/nitrogen/generated/ios/c++/{HybridNitroLayoutEngineSpecSwift.hpp → HybridNitroListSpecSwift.hpp} +16 -16
  220. package/nitrogen/generated/ios/swift/HybridNitroListSpec.swift +56 -0
  221. package/nitrogen/generated/ios/swift/{HybridNitroLayoutEngineSpec_cxx.swift → HybridNitroListSpec_cxx.swift} +23 -23
  222. package/nitrogen/generated/ios/swift/{LayoutRectangle.swift → ItemLayout.swift} +5 -5
  223. package/nitrogen/generated/shared/c++/{HybridNitroLayoutEngineSpec.cpp → HybridNitroListSpec.cpp} +4 -4
  224. package/nitrogen/generated/shared/c++/{HybridNitroLayoutEngineSpec.hpp → HybridNitroListSpec.hpp} +13 -13
  225. package/nitrogen/generated/shared/c++/{LayoutRectangle.hpp → ItemLayout.hpp} +11 -11
  226. package/package.json +5 -5
  227. package/src/cell/Cell.ts +13 -4
  228. package/src/cell/CellKeyGenerator.ts +17 -0
  229. package/src/cell/CellRecycler.ts +53 -43
  230. package/src/cell/createCell.ts +15 -0
  231. package/src/cell/index.ts +5 -0
  232. package/src/getVisibleIndices.ts +4 -2
  233. package/src/hooks/usePersistentCallback.ts +37 -0
  234. package/src/index.ts +7 -2
  235. package/src/layout/MutableLinearLayout.ts +91 -58
  236. package/src/layout/constants/layoutDefaults.ts +12 -0
  237. package/src/layout/index.ts +1 -4
  238. package/src/native/NitroListView.ts +22 -0
  239. package/src/recycler/CellPool.ts +33 -0
  240. package/src/recycler/NitroList.tsx +317 -0
  241. package/src/scroll/useScrollVelocity.ts +16 -0
  242. package/src/specs/NitroList.nitro.ts +29 -0
  243. package/src/types/Axis.ts +10 -0
  244. package/src/types/CellKey.ts +2 -0
  245. package/src/types/CellType.ts +9 -0
  246. package/src/types/VisibleRange.ts +9 -0
  247. package/src/types/VisibleRangeInput.ts +39 -0
  248. package/src/types/index.ts +15 -0
  249. package/src/types/layout/LayoutRect.ts +14 -0
  250. package/src/types/layout/LinearLayoutInput.ts +12 -0
  251. package/src/types/layout/MainAxisPadding.ts +23 -0
  252. package/src/types/layout/index.ts +3 -0
  253. package/src/types/recycler/CellPool.ts +45 -0
  254. package/src/types/recycler/NitroListProps.ts +74 -0
  255. package/src/types/recycler/RecyclerCell.ts +12 -0
  256. package/src/types/recycler/RecyclerItemRenderer.ts +12 -0
  257. package/src/types/recycler/index.ts +3 -0
  258. package/src/types/scroll/ScrollMetrics.ts +18 -0
  259. package/src/types/scroll/index.ts +1 -0
  260. package/src/windowing/computeVisibleItemRange.ts +82 -0
  261. package/src/windowing/index.ts +1 -1
  262. package/lib/commonjs/NitroList.js +0 -9
  263. package/lib/commonjs/NitroList.js.map +0 -1
  264. package/lib/commonjs/RecyclerList.internal.js +0 -25
  265. package/lib/commonjs/RecyclerList.internal.js.map +0 -1
  266. package/lib/commonjs/RecyclerList.js +0 -171
  267. package/lib/commonjs/RecyclerList.js.map +0 -1
  268. package/lib/commonjs/RecyclerList.types.js.map +0 -1
  269. package/lib/commonjs/cell/StableKey.js +0 -10
  270. package/lib/commonjs/cell/StableKey.js.map +0 -1
  271. package/lib/commonjs/hooks/useCellRenderer.js +0 -62
  272. package/lib/commonjs/hooks/useCellRenderer.js.map +0 -1
  273. package/lib/commonjs/hooks/useStableCallback.js +0 -13
  274. package/lib/commonjs/hooks/useStableCallback.js.map +0 -1
  275. package/lib/commonjs/layout/EstimatedLayoutProvider.js +0 -30
  276. package/lib/commonjs/layout/EstimatedLayoutProvider.js.map +0 -1
  277. package/lib/commonjs/layout/LayoutEngine.js +0 -21
  278. package/lib/commonjs/layout/LayoutEngine.js.map +0 -1
  279. package/lib/commonjs/layout/LayoutRectangle.js +0 -2
  280. package/lib/commonjs/native/NitroLayoutEngine.js +0 -9
  281. package/lib/commonjs/native/NitroLayoutEngine.js.map +0 -1
  282. package/lib/commonjs/native/NitroRecyclerView.js +0 -9
  283. package/lib/commonjs/native/NitroRecyclerView.js.map +0 -1
  284. package/lib/commonjs/specs/nitro-layout-engine.nitro.js.map +0 -1
  285. package/lib/commonjs/viewability/ViewabilityHelper.js +0 -121
  286. package/lib/commonjs/viewability/ViewabilityHelper.js.map +0 -1
  287. package/lib/commonjs/windowing/findVisibleIndexRange.js +0 -48
  288. package/lib/commonjs/windowing/findVisibleIndexRange.js.map +0 -1
  289. package/lib/module/NitroList.js +0 -5
  290. package/lib/module/NitroList.js.map +0 -1
  291. package/lib/module/RecyclerList.internal.js +0 -22
  292. package/lib/module/RecyclerList.internal.js.map +0 -1
  293. package/lib/module/RecyclerList.js +0 -166
  294. package/lib/module/RecyclerList.js.map +0 -1
  295. package/lib/module/RecyclerList.types.js +0 -4
  296. package/lib/module/RecyclerList.types.js.map +0 -1
  297. package/lib/module/cell/StableKey.js +0 -6
  298. package/lib/module/cell/StableKey.js.map +0 -1
  299. package/lib/module/hooks/useCellRenderer.js +0 -58
  300. package/lib/module/hooks/useCellRenderer.js.map +0 -1
  301. package/lib/module/hooks/useStableCallback.js +0 -9
  302. package/lib/module/hooks/useStableCallback.js.map +0 -1
  303. package/lib/module/layout/EstimatedLayoutProvider.js +0 -25
  304. package/lib/module/layout/EstimatedLayoutProvider.js.map +0 -1
  305. package/lib/module/layout/LayoutEngine.js +0 -17
  306. package/lib/module/layout/LayoutEngine.js.map +0 -1
  307. package/lib/module/layout/LayoutProvider.js +0 -4
  308. package/lib/module/layout/LayoutRectangle.js +0 -2
  309. package/lib/module/layout/LayoutRectangle.js.map +0 -1
  310. package/lib/module/native/NitroLayoutEngine.js +0 -5
  311. package/lib/module/native/NitroLayoutEngine.js.map +0 -1
  312. package/lib/module/native/NitroList.types.js +0 -4
  313. package/lib/module/native/NitroList.types.js.map +0 -1
  314. package/lib/module/native/NitroRecyclerView.js +0 -5
  315. package/lib/module/native/NitroRecyclerView.js.map +0 -1
  316. package/lib/module/specs/nitro-layout-engine.nitro.js +0 -4
  317. package/lib/module/specs/nitro-layout-engine.nitro.js.map +0 -1
  318. package/lib/module/viewability/ViewabilityHelper.js +0 -116
  319. package/lib/module/viewability/ViewabilityHelper.js.map +0 -1
  320. package/lib/module/windowing/findVisibleIndexRange.js +0 -44
  321. package/lib/module/windowing/findVisibleIndexRange.js.map +0 -1
  322. package/lib/typescript/src/NitroList.d.ts +0 -5
  323. package/lib/typescript/src/NitroList.d.ts.map +0 -1
  324. package/lib/typescript/src/RecyclerList.d.ts +0 -26
  325. package/lib/typescript/src/RecyclerList.d.ts.map +0 -1
  326. package/lib/typescript/src/RecyclerList.internal.d.ts +0 -9
  327. package/lib/typescript/src/RecyclerList.internal.d.ts.map +0 -1
  328. package/lib/typescript/src/RecyclerList.types.d.ts +0 -18
  329. package/lib/typescript/src/RecyclerList.types.d.ts.map +0 -1
  330. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts +0 -2
  331. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts.map +0 -1
  332. package/lib/typescript/src/cell/StableKey.d.ts +0 -2
  333. package/lib/typescript/src/cell/StableKey.d.ts.map +0 -1
  334. package/lib/typescript/src/hooks/useCellRenderer.d.ts +0 -19
  335. package/lib/typescript/src/hooks/useCellRenderer.d.ts.map +0 -1
  336. package/lib/typescript/src/hooks/useStableCallback.d.ts +0 -2
  337. package/lib/typescript/src/hooks/useStableCallback.d.ts.map +0 -1
  338. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts +0 -15
  339. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts.map +0 -1
  340. package/lib/typescript/src/layout/LayoutEngine.d.ts +0 -10
  341. package/lib/typescript/src/layout/LayoutEngine.d.ts.map +0 -1
  342. package/lib/typescript/src/layout/LayoutProvider.d.ts +0 -16
  343. package/lib/typescript/src/layout/LayoutProvider.d.ts.map +0 -1
  344. package/lib/typescript/src/layout/LayoutRectangle.d.ts +0 -11
  345. package/lib/typescript/src/layout/LayoutRectangle.d.ts.map +0 -1
  346. package/lib/typescript/src/native/NitroLayoutEngine.d.ts +0 -3
  347. package/lib/typescript/src/native/NitroLayoutEngine.d.ts.map +0 -1
  348. package/lib/typescript/src/native/NitroList.types.d.ts +0 -9
  349. package/lib/typescript/src/native/NitroList.types.d.ts.map +0 -1
  350. package/lib/typescript/src/native/NitroRecyclerView.d.ts +0 -5
  351. package/lib/typescript/src/native/NitroRecyclerView.d.ts.map +0 -1
  352. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts +0 -14
  353. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts.map +0 -1
  354. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts +0 -50
  355. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts.map +0 -1
  356. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts +0 -11
  357. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts.map +0 -1
  358. package/nitrogen/generated/ios/swift/HybridNitroLayoutEngineSpec.swift +0 -56
  359. package/src/NitroList.ts +0 -8
  360. package/src/RecyclerList.internal.ts +0 -38
  361. package/src/RecyclerList.tsx +0 -252
  362. package/src/RecyclerList.types.ts +0 -24
  363. package/src/__tests__/windowing/findVisibleIndexRange.test.ts +0 -55
  364. package/src/cell/StableKey.ts +0 -6
  365. package/src/hooks/useCellRenderer.ts +0 -86
  366. package/src/hooks/useStableCallback.ts +0 -13
  367. package/src/layout/EstimatedLayoutProvider.ts +0 -35
  368. package/src/layout/LayoutEngine.ts +0 -21
  369. package/src/layout/LayoutProvider.ts +0 -17
  370. package/src/layout/LayoutRectangle.ts +0 -10
  371. package/src/native/NitroLayoutEngine.ts +0 -7
  372. package/src/native/NitroList.types.ts +0 -12
  373. package/src/native/NitroRecyclerView.ts +0 -8
  374. package/src/specs/nitro-layout-engine.nitro.ts +0 -17
  375. package/src/viewability/ViewabilityHelper.ts +0 -130
  376. package/src/windowing/findVisibleIndexRange.ts +0 -60
@@ -1,62 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useCellRenderer = useCellRenderer;
7
- var _react = require("react");
8
- var _CellRecycler = require("../cell/CellRecycler");
9
- var _findVisibleIndexRange = require("../windowing/findVisibleIndexRange");
10
- /**
11
- * 🔒 Stable empty references (module-level)
12
- * These MUST NOT be recreated per render.
13
- */
14
- const EMPTY_INDICES = [];
15
-
16
- /**
17
- * React bridge for CellRecycler.
18
- * FlashList equivalent: useCellRenderer
19
- *
20
- * Responsibilities:
21
- * - Translate scroll state → visible indices
22
- * - Ask recycler for physical cells
23
- * - Commit results with referential stability
24
- *
25
- * Responsibilities it does NOT have:
26
- * ❌ Layout mutation
27
- * ❌ Measurement
28
- * ❌ Rendering
29
- */
30
- function useCellRenderer(layouts, metrics, bufferPx, getCellType) {
31
- /**
32
- * Recycler instance is stable across renders.
33
- */
34
- const recyclerRef = (0, _react.useRef)(new _CellRecycler.CellRecycler());
35
-
36
- /**
37
- * Compute visible indices.
38
- * PURE + TOTAL:
39
- * - Never throws
40
- * - Always returns the same reference when empty
41
- */
42
- const visibleIndices = (0, _react.useMemo)(() => layouts.length === 0 ? EMPTY_INDICES : (0, _findVisibleIndexRange.findVisibleIndexRange)(layouts, metrics, bufferPx), [layouts, metrics.offsetY, metrics.height, bufferPx]);
43
-
44
- /**
45
- * Physical cells to render.
46
- */
47
- const [cells, setCells] = (0, _react.useState)([]);
48
-
49
- /**
50
- * Reconcile visible indices → physical cells.
51
- *
52
- * FlashList invariant:
53
- * - Only update state if identity truly changed
54
- * - Prevents pointless re-renders
55
- */
56
- (0, _react.useEffect)(() => {
57
- const next = recyclerRef.current.reconcile(visibleIndices, getCellType);
58
- setCells(prev => prev.length === next.length && prev.every((c, i) => c === next[i]) ? prev : next);
59
- }, [visibleIndices, getCellType]);
60
- return cells;
61
- }
62
- //# sourceMappingURL=useCellRenderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_CellRecycler","_findVisibleIndexRange","EMPTY_INDICES","useCellRenderer","layouts","metrics","bufferPx","getCellType","recyclerRef","useRef","CellRecycler","visibleIndices","useMemo","length","findVisibleIndexRange","offsetY","height","cells","setCells","useState","useEffect","next","current","reconcile","prev","every","c","i"],"sourceRoot":"../../../src","sources":["hooks/useCellRenderer.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAF,OAAA;AAIA;AACA;AACA;AACA;AACA,MAAMG,aAAgC,GAAG,EAAE;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAC7BC,OAAmC,EACnCC,OAAsB,EACtBC,QAAgB,EAChBC,WAAsC,EACrB;EACjB;AACF;AACA;EACE,MAAMC,WAAW,GAAG,IAAAC,aAAM,EAAe,IAAIC,0BAAY,CAAC,CAAC,CAAC;;EAE5D;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,cAAc,GAAG,IAAAC,cAAO,EAC5B,MACER,OAAO,CAACS,MAAM,KAAK,CAAC,GAChBX,aAAa,GACb,IAAAY,4CAAqB,EACnBV,OAAO,EACPC,OAAO,EACPC,QACF,CAAC,EACP,CAACF,OAAO,EAAEC,OAAO,CAACU,OAAO,EAAEV,OAAO,CAACW,MAAM,EAAEV,QAAQ,CACrD,CAAC;;EAED;AACF;AACA;EACE,MAAM,CAACW,KAAK,EAAEC,QAAQ,CAAC,GACrB,IAAAC,eAAQ,EAAkB,EAAE,CAAC;;EAE/B;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,IAAI,GACRb,WAAW,CAACc,OAAO,CAACC,SAAS,CAC3BZ,cAAc,EACdJ,WACF,CAAC;IAEHW,QAAQ,CAACM,IAAI,IACXA,IAAI,CAACX,MAAM,KAAKQ,IAAI,CAACR,MAAM,IAC3BW,IAAI,CAACC,KAAK,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKL,IAAI,CAACM,CAAC,CAAC,CAAC,GAC/BH,IAAI,GACJH,IACN,CAAC;EACH,CAAC,EAAE,CAACV,cAAc,EAAEJ,WAAW,CAAC,CAAC;EAEjC,OAAOU,KAAK;AACd","ignoreList":[]}
@@ -1,13 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useStableCallback = useStableCallback;
7
- var _react = require("react");
8
- function useStableCallback(fn) {
9
- const ref = (0, _react.useRef)(fn);
10
- ref.current = fn;
11
- return (0, _react.useCallback)((...args) => ref.current(...args), []);
12
- }
13
- //# sourceMappingURL=useStableCallback.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","useStableCallback","fn","ref","useRef","current","useCallback","args"],"sourceRoot":"../../../src","sources":["hooks/useStableCallback.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,iBAAiBA,CAC/BC,EAAK,EACF;EACH,MAAMC,GAAG,GAAG,IAAAC,aAAM,EAACF,EAAE,CAAC;EACtBC,GAAG,CAACE,OAAO,GAAGH,EAAE;EAEhB,OAAO,IAAAI,kBAAW,EACf,CAAC,GAAGC,IAAa,KAAKJ,GAAG,CAACE,OAAO,CAAC,GAAGE,IAAI,CAAC,EAC3C,EACF,CAAC;AACH","ignoreList":[]}
@@ -1,30 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.EstimatedLayoutProvider = void 0;
7
- /**
8
- * Layout provider using estimated item heights.
9
- * Used before real measurements are available.
10
- */
11
- class EstimatedLayoutProvider {
12
- constructor(itemCount, itemHeight, width) {
13
- this.itemCount = itemCount;
14
- this.itemHeight = itemHeight;
15
- this.width = width;
16
- }
17
- getItemCount() {
18
- return this.itemCount;
19
- }
20
- getLayout(index) {
21
- return {
22
- x: 0,
23
- y: index * this.itemHeight,
24
- width: this.width,
25
- height: this.itemHeight
26
- };
27
- }
28
- }
29
- exports.EstimatedLayoutProvider = EstimatedLayoutProvider;
30
- //# sourceMappingURL=EstimatedLayoutProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["EstimatedLayoutProvider","constructor","itemCount","itemHeight","width","getItemCount","getLayout","index","x","y","height","exports"],"sourceRoot":"../../../src","sources":["layout/EstimatedLayoutProvider.ts"],"mappings":";;;;;;AAGA;AACA;AACA;AACA;AACO,MAAMA,uBAAuB,CAA2B;EAK7DC,WAAWA,CACTC,SAAiB,EACjBC,UAAkB,EAClBC,KAAa,EACb;IACA,IAAI,CAACF,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,KAAK,GAAGA,KAAK;EACpB;EAEAC,YAAYA,CAAA,EAAW;IACrB,OAAO,IAAI,CAACH,SAAS;EACvB;EAEAI,SAASA,CAACC,KAAa,EAAmB;IACxC,OAAO;MACLC,CAAC,EAAE,CAAC;MACJC,CAAC,EAAEF,KAAK,GAAG,IAAI,CAACJ,UAAU;MAC1BC,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBM,MAAM,EAAE,IAAI,CAACP;IACf,CAAC;EACH;AACF;AAACQ,OAAA,CAAAX,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.computeLayouts = computeLayouts;
7
- /**
8
- * Resolves layouts eagerly into a contiguous array.
9
- * Pure, deterministic, and reusable.
10
- *
11
- * FlashList equivalent: internal layout resolver.
12
- */
13
- function computeLayouts(provider) {
14
- const count = provider.getItemCount();
15
- const layouts = new Array(count);
16
- for (let i = 0; i < count; i++) {
17
- layouts[i] = provider.getLayout(i);
18
- }
19
- return layouts;
20
- }
21
- //# sourceMappingURL=LayoutEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["computeLayouts","provider","count","getItemCount","layouts","Array","i","getLayout"],"sourceRoot":"../../../src","sources":["layout/LayoutEngine.ts"],"mappings":";;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,cAAcA,CAC5BC,QAAwB,EACI;EAC5B,MAAMC,KAAK,GAAGD,QAAQ,CAACE,YAAY,CAAC,CAAC;EACrC,MAAMC,OAA0B,GAAG,IAAIC,KAAK,CAACH,KAAK,CAAC;EAEnD,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,KAAK,EAAEI,CAAC,EAAE,EAAE;IAC9BF,OAAO,CAACE,CAAC,CAAC,GAAGL,QAAQ,CAACM,SAAS,CAACD,CAAC,CAAC;EACpC;EAEA,OAAOF,OAAO;AAChB","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=LayoutRectangle.js.map
@@ -1,9 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.NitroLayoutEngine = void 0;
7
- var _reactNativeNitroModules = require("react-native-nitro-modules");
8
- const NitroLayoutEngine = exports.NitroLayoutEngine = _reactNativeNitroModules.NitroModules.createHybridObject('NitroLayoutEngine');
9
- //# sourceMappingURL=NitroLayoutEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_reactNativeNitroModules","require","NitroLayoutEngine","exports","NitroModules","createHybridObject"],"sourceRoot":"../../../src","sources":["native/NitroLayoutEngine.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAGO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAC5BE,qCAAY,CAACC,kBAAkB,CAC7B,mBACF,CAAC","ignoreList":[]}
@@ -1,9 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.NitroRecyclerView = void 0;
7
- var _reactNative = require("react-native");
8
- const NitroRecyclerView = exports.NitroRecyclerView = (0, _reactNative.requireNativeComponent)('NitroRecyclerView');
9
- //# sourceMappingURL=NitroRecyclerView.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_reactNative","require","NitroRecyclerView","exports","requireNativeComponent"],"sourceRoot":"../../../src","sources":["native/NitroRecyclerView.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAMO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAC5B,IAAAE,mCAAsB,EAAyB,mBAAmB,CAAC","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/nitro-layout-engine.nitro.ts"],"mappings":"","ignoreList":[]}
@@ -1,121 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ViewabilityHelper = void 0;
7
- /**
8
- * Public token describing viewability state of an item.
9
- * Mirrors FlashList's ViewToken concept.
10
- */
11
-
12
- /**
13
- * Configuration for viewability calculations.
14
- */
15
-
16
- /**
17
- * ViewabilityHelper
18
- *
19
- * Pure observer:
20
- * - Does NOT affect layout
21
- * - Does NOT affect recycling
22
- * - Computes visibility based on layout + scroll metrics
23
- *
24
- * This class is intentionally stateful (lastVisible)
25
- * to compute "changed" items efficiently.
26
- */
27
- class ViewabilityHelper {
28
- /** Previously visible indices */
29
- lastVisible = new Set();
30
- constructor(config = {}) {
31
- this.config = config;
32
- }
33
-
34
- /**
35
- * Computes which items are viewable and which changed
36
- * since the last invocation.
37
- *
38
- * IMPORTANT:
39
- * - This method should be called AFTER windowing,
40
- * not on the full dataset.
41
- */
42
- computeViewableItems(layouts, metrics) {
43
- const visibleNow = new Set();
44
- const viewableItems = [];
45
- const changed = [];
46
- const viewportTop = metrics.offsetY;
47
- const viewportBottom = viewportTop + metrics.height;
48
-
49
- // Normalize threshold into [0, 1]
50
- const threshold = (this.config.itemVisiblePercentThreshold ?? 0) / 100;
51
-
52
- /**
53
- * NOTE:
54
- * We intentionally iterate layouts sequentially,
55
- * but EXIT EARLY when items are completely below viewport.
56
- *
57
- * This keeps complexity near O(visibleItems),
58
- * not O(totalItems).
59
- */
60
- for (let i = 0; i < layouts.length; i++) {
61
- const layout = layouts[i];
62
-
63
- // If item is completely below viewport, stop
64
- if (layout.y > viewportBottom) {
65
- break;
66
- }
67
- const itemTop = layout.y;
68
- const itemBottom = layout.y + layout.height;
69
-
70
- // If item is completely above viewport, skip
71
- if (itemBottom < viewportTop) {
72
- continue;
73
- }
74
-
75
- // Compute visible intersection
76
- const visibleTop = Math.max(itemTop, viewportTop);
77
- const visibleBottom = Math.min(itemBottom, viewportBottom);
78
- const visibleHeight = Math.max(0, visibleBottom - visibleTop);
79
-
80
- // Guard against zero-height items
81
- const itemHeight = layout.height > 0 ? layout.height : 1;
82
- const visibleRatio = visibleHeight / itemHeight;
83
- if (visibleRatio >= threshold) {
84
- visibleNow.add(i);
85
- viewableItems.push({
86
- index: i,
87
- isViewable: true
88
- });
89
-
90
- // Newly visible
91
- if (!this.lastVisible.has(i)) {
92
- changed.push({
93
- index: i,
94
- isViewable: true
95
- });
96
- }
97
- }
98
- }
99
-
100
- /**
101
- * Items that were visible before but not anymore
102
- */
103
- for (const index of this.lastVisible) {
104
- if (!visibleNow.has(index)) {
105
- changed.push({
106
- index,
107
- isViewable: false
108
- });
109
- }
110
- }
111
-
112
- // Update snapshot
113
- this.lastVisible = visibleNow;
114
- return {
115
- viewableItems,
116
- changed
117
- };
118
- }
119
- }
120
- exports.ViewabilityHelper = ViewabilityHelper;
121
- //# sourceMappingURL=ViewabilityHelper.js.map
@@ -1 +0,0 @@
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","exports"],"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;AACO,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;AAAC0B,OAAA,CAAApC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1,48 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.findVisibleIndexRange = findVisibleIndexRange;
7
- /**
8
- * Computes the contiguous range of item indices
9
- * intersecting the viewport expanded by bufferPx.
10
- *
11
- * PURE function. No allocations besides output.
12
- * FlashList-style windowing.
13
- */
14
- function findVisibleIndexRange(layouts, metrics, bufferPx) {
15
- const count = layouts.length;
16
-
17
- // 🔒 CRITICAL GUARDS (FlashList-style)
18
- if (count === 0 || metrics.height <= 0 || bufferPx < 0) {
19
- return [];
20
- }
21
- const windowStart = Math.max(0, metrics.offsetY - bufferPx);
22
- const windowEnd = metrics.offsetY + metrics.height + bufferPx;
23
-
24
- // Binary search for first intersecting item
25
- let low = 0;
26
- let high = count - 1;
27
- let firstVisible = count;
28
- while (low <= high) {
29
- const mid = low + high >> 1;
30
- const rect = layouts[mid];
31
- if (rect.y + rect.height >= windowStart) {
32
- firstVisible = mid;
33
- high = mid - 1;
34
- } else {
35
- low = mid + 1;
36
- }
37
- }
38
-
39
- // Linear scan forward
40
- const visible = [];
41
- for (let i = firstVisible; i < count; i++) {
42
- const rect = layouts[i];
43
- if (rect.y > windowEnd) break;
44
- visible.push(i);
45
- }
46
- return visible;
47
- }
48
- //# sourceMappingURL=findVisibleIndexRange.js.map
@@ -1 +0,0 @@
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;AACO,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":[]}
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- import { requireNativeComponent } from 'react-native';
4
- export const NitroRecyclerView = requireNativeComponent('NitroRecyclerView');
5
- //# sourceMappingURL=NitroList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["requireNativeComponent","NitroRecyclerView"],"sourceRoot":"../../src","sources":["NitroList.ts"],"mappings":";;AAAA,SAASA,sBAAsB,QAAQ,cAAc;AAMrD,OAAO,MAAMC,iBAAiB,GAC5BD,sBAAsB,CAAyB,mBAAmB,CAAC","ignoreList":[]}
@@ -1,22 +0,0 @@
1
- "use strict";
2
-
3
- import { useCellRenderer } from './hooks/useCellRenderer';
4
-
5
- /**
6
- * INTERNAL hook.
7
- * MUST ALWAYS CALL hooks in the same order.
8
- */
9
- export function useRecyclerListInternal(layouts, metrics, bufferPx, getItemType) {
10
- /**
11
- * FlashList rule:
12
- * Hooks are ALWAYS called.
13
- * Inputs are guarded instead.
14
- */
15
- const safeLayouts = metrics.height > 0 ? layouts : EMPTY_LAYOUTS;
16
- const safeBufferPx = metrics.height > 0 ? bufferPx : 0;
17
- return useCellRenderer(safeLayouts, metrics, safeBufferPx, getItemType);
18
- }
19
-
20
- /** Stable empty reference */
21
- const EMPTY_LAYOUTS = [];
22
- //# sourceMappingURL=RecyclerList.internal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCellRenderer","useRecyclerListInternal","layouts","metrics","bufferPx","getItemType","safeLayouts","height","EMPTY_LAYOUTS","safeBufferPx"],"sourceRoot":"../../src","sources":["RecyclerList.internal.ts"],"mappings":";;AAIA,SAASA,eAAe,QAAQ,yBAAyB;;AAEzD;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CACrCC,OAAmC,EACnCC,OAAsB,EACtBC,QAAgB,EAChBC,WAAsC,EACrB;EAEjB;AACF;AACA;AACA;AACA;EACE,MAAMC,WAAW,GACfH,OAAO,CAACI,MAAM,GAAG,CAAC,GAAGL,OAAO,GAAGM,aAAa;EAE9C,MAAMC,YAAY,GAChBN,OAAO,CAACI,MAAM,GAAG,CAAC,GAAGH,QAAQ,GAAG,CAAC;EAEnC,OAAOJ,eAAe,CACpBM,WAAW,EACXH,OAAO,EACPM,YAAY,EACZJ,WACF,CAAC;AACH;;AAEA;AACA,MAAMG,aAAyC,GAAG,EAAE","ignoreList":[]}
@@ -1,166 +0,0 @@
1
- "use strict";
2
-
3
- import React, { useMemo, useRef, useEffect } from 'react';
4
- import { ScrollView, View, StyleSheet } from 'react-native';
5
- import { useRecyclerListInternal } from './RecyclerList.internal';
6
- import { useScrollMetrics } from './windowing';
7
- import { MutableLinearLayout } from './layout/MutableLinearLayout';
8
- import { ViewabilityHelper } from './viewability/ViewabilityHelper';
9
- import { PrefetchHelper } from './prefetch/PrefetchHelper';
10
-
11
- /**
12
- * Public API — mirrors FlashList behavior, not internals.
13
- */
14
- import { jsx as _jsx } from "react/jsx-runtime";
15
- /**
16
- * FlashList invariant:
17
- * Never allow viewport height = 0 to gate windowing.
18
- */
19
- const DEFAULT_VIEWPORT_HEIGHT = 800;
20
- export function RecyclerList(props) {
21
- const {
22
- containerWidth,
23
- itemCount,
24
- itemHeights,
25
- estimatedItemHeight = 80,
26
- renderBufferRatio = 1.3,
27
- getItemType = () => 'default',
28
- renderItem,
29
- onPrefetch,
30
- onViewableItemsChanged
31
- } = props;
32
-
33
- /**
34
- * 🚨 DEV WARNINGS ONLY (never throw in render!)
35
- */
36
- if (__DEV__) {
37
- if (!itemHeights && itemCount == null) {
38
- console.error('RecyclerList requires either itemCount or itemHeights.');
39
- }
40
- if (itemHeights && itemCount != null) {
41
- console.error('Provide only one of itemCount or itemHeights.');
42
- }
43
- }
44
-
45
- /**
46
- * STEP 1: Resolve item count safely (props only).
47
- * Never depend on hooks for structural decisions.
48
- */
49
- const itemLength = itemHeights?.length ?? itemCount ?? 0;
50
-
51
- /**
52
- * STEP 2: Resolve initial heights (always defined).
53
- */
54
- const resolvedHeights = useMemo(() => {
55
- if (itemHeights) return itemHeights;
56
- return Array.from({
57
- length: itemLength
58
- }, () => estimatedItemHeight);
59
- }, [itemHeights, itemLength, estimatedItemHeight]);
60
-
61
- /**
62
- * STEP 3: Mutable layout lifecycle.
63
- * Recreate layout only when shape changes.
64
- */
65
- const layoutRef = useRef(null);
66
- const lastLayoutKeyRef = useRef(null);
67
- const layoutKey = `${containerWidth}-${itemLength}`;
68
- if (!layoutRef.current || lastLayoutKeyRef.current !== layoutKey) {
69
- layoutRef.current = new MutableLinearLayout(resolvedHeights, containerWidth);
70
- lastLayoutKeyRef.current = layoutKey;
71
- }
72
-
73
- /**
74
- * STEP 4: Read layout snapshot.
75
- */
76
- const layouts = layoutRef.current.getLayouts();
77
- const contentHeight = layoutRef.current.getContentHeight();
78
-
79
- /**
80
- * STEP 5: Scroll metrics.
81
- */
82
- const {
83
- metrics,
84
- onScroll,
85
- onLayout
86
- } = useScrollMetrics();
87
-
88
- /**
89
- * STEP 6: Guard initial windowing.
90
- */
91
- const effectiveViewportHeight = metrics.height > 0 ? metrics.height : DEFAULT_VIEWPORT_HEIGHT;
92
- const bufferPx = effectiveViewportHeight * renderBufferRatio;
93
-
94
- /**
95
- * STEP 7: Windowing + recycling.
96
- */
97
- const cells = useRecyclerListInternal(layouts, metrics, bufferPx, getItemType);
98
-
99
- /**
100
- * STEP 8: Phase-1 observers.
101
- */
102
- const viewabilityRef = useRef(new ViewabilityHelper({
103
- itemVisiblePercentThreshold: 50
104
- }));
105
- const prefetchRef = useRef(new PrefetchHelper());
106
- useEffect(() => {
107
- prefetchRef.current = new PrefetchHelper();
108
- }, [itemLength]);
109
- useEffect(() => {
110
- if (metrics.height === 0) return;
111
- if (onViewableItemsChanged) {
112
- const visibleLayouts = [];
113
- for (const cell of cells) {
114
- const layout = layouts[cell.index];
115
- if (layout) visibleLayouts.push(layout);
116
- }
117
- const info = viewabilityRef.current.computeViewableItems(visibleLayouts, metrics);
118
- onViewableItemsChanged(info);
119
- }
120
- if (onPrefetch && itemLength > 0) {
121
- prefetchRef.current.runPrefetch(cells.map(c => c.index), itemLength, 5, onPrefetch);
122
- }
123
- }, [cells, metrics.offsetY, metrics.height, onViewableItemsChanged, onPrefetch, itemLength, layouts]);
124
-
125
- /**
126
- * STEP 9: Render absolutely positioned cells.
127
- */
128
- return /*#__PURE__*/_jsx(ScrollView, {
129
- style: styles.container,
130
- onLayout: onLayout,
131
- onScroll: onScroll,
132
- scrollEventThrottle: 16,
133
- removeClippedSubviews: true,
134
- children: /*#__PURE__*/_jsx(View, {
135
- style: [styles.content, {
136
- height: contentHeight
137
- }],
138
- children: cells.map(cell => {
139
- const layout = layouts[cell.index];
140
- if (!layout) return null;
141
- return /*#__PURE__*/_jsx(View, {
142
- style: [styles.cell, {
143
- top: layout.y,
144
- width: layout.width,
145
- height: layout.height
146
- }],
147
- children: renderItem(cell.index)
148
- }, cell.key);
149
- })
150
- })
151
- });
152
- }
153
- const styles = StyleSheet.create({
154
- container: {
155
- flex: 1
156
- },
157
- content: {
158
- position: 'relative',
159
- width: '100%'
160
- },
161
- cell: {
162
- position: 'absolute',
163
- left: 0
164
- }
165
- });
166
- //# sourceMappingURL=RecyclerList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useMemo","useRef","useEffect","ScrollView","View","StyleSheet","useRecyclerListInternal","useScrollMetrics","MutableLinearLayout","ViewabilityHelper","PrefetchHelper","jsx","_jsx","DEFAULT_VIEWPORT_HEIGHT","RecyclerList","props","containerWidth","itemCount","itemHeights","estimatedItemHeight","renderBufferRatio","getItemType","renderItem","onPrefetch","onViewableItemsChanged","__DEV__","console","error","itemLength","length","resolvedHeights","Array","from","layoutRef","lastLayoutKeyRef","layoutKey","current","layouts","getLayouts","contentHeight","getContentHeight","metrics","onScroll","onLayout","effectiveViewportHeight","height","bufferPx","cells","viewabilityRef","itemVisiblePercentThreshold","prefetchRef","visibleLayouts","cell","layout","index","push","info","computeViewableItems","runPrefetch","map","c","offsetY","style","styles","container","scrollEventThrottle","removeClippedSubviews","children","content","top","y","width","key","create","flex","position","left"],"sourceRoot":"../../src","sources":["RecyclerList.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- "use strict";
2
-
3
- export {};
4
- //# sourceMappingURL=RecyclerList.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sourceRoot":"../../src","sources":["RecyclerList.types.ts"],"mappings":"","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- "use strict";
2
-
3
- export function getStableKey(slotKey, index) {
4
- return `${slotKey}:${index}`;
5
- }
6
- //# sourceMappingURL=StableKey.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getStableKey","slotKey","index"],"sourceRoot":"../../../src","sources":["cell/StableKey.ts"],"mappings":";;AAAA,OAAO,SAASA,YAAYA,CAC1BC,OAAe,EACfC,KAAa,EACL;EACR,OAAO,GAAGD,OAAO,IAAIC,KAAK,EAAE;AAC9B","ignoreList":[]}
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- import { useEffect, useMemo, useRef, useState } from 'react';
4
- import { CellRecycler } from '../cell/CellRecycler';
5
- import { findVisibleIndexRange } from '../windowing/findVisibleIndexRange';
6
- /**
7
- * 🔒 Stable empty references (module-level)
8
- * These MUST NOT be recreated per render.
9
- */
10
- const EMPTY_INDICES = [];
11
-
12
- /**
13
- * React bridge for CellRecycler.
14
- * FlashList equivalent: useCellRenderer
15
- *
16
- * Responsibilities:
17
- * - Translate scroll state → visible indices
18
- * - Ask recycler for physical cells
19
- * - Commit results with referential stability
20
- *
21
- * Responsibilities it does NOT have:
22
- * ❌ Layout mutation
23
- * ❌ Measurement
24
- * ❌ Rendering
25
- */
26
- export function useCellRenderer(layouts, metrics, bufferPx, getCellType) {
27
- /**
28
- * Recycler instance is stable across renders.
29
- */
30
- const recyclerRef = useRef(new CellRecycler());
31
-
32
- /**
33
- * Compute visible indices.
34
- * PURE + TOTAL:
35
- * - Never throws
36
- * - Always returns the same reference when empty
37
- */
38
- const visibleIndices = useMemo(() => layouts.length === 0 ? EMPTY_INDICES : findVisibleIndexRange(layouts, metrics, bufferPx), [layouts, metrics.offsetY, metrics.height, bufferPx]);
39
-
40
- /**
41
- * Physical cells to render.
42
- */
43
- const [cells, setCells] = useState([]);
44
-
45
- /**
46
- * Reconcile visible indices → physical cells.
47
- *
48
- * FlashList invariant:
49
- * - Only update state if identity truly changed
50
- * - Prevents pointless re-renders
51
- */
52
- useEffect(() => {
53
- const next = recyclerRef.current.reconcile(visibleIndices, getCellType);
54
- setCells(prev => prev.length === next.length && prev.every((c, i) => c === next[i]) ? prev : next);
55
- }, [visibleIndices, getCellType]);
56
- return cells;
57
- }
58
- //# sourceMappingURL=useCellRenderer.js.map