react-native-nitro-list 0.1.1 → 0.1.2

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 (312) hide show
  1. package/ios/HybridNitroList.swift +10 -14
  2. package/lib/commonjs/cell/CellKeyGenerator.js +21 -0
  3. package/lib/commonjs/cell/CellKeyGenerator.js.map +1 -0
  4. package/lib/commonjs/cell/CellRecycler.js +48 -40
  5. package/lib/commonjs/cell/CellRecycler.js.map +1 -1
  6. package/lib/commonjs/cell/createCell.js +21 -0
  7. package/lib/commonjs/cell/createCell.js.map +1 -0
  8. package/lib/commonjs/cell/index.js +20 -0
  9. package/lib/commonjs/cell/index.js.map +1 -0
  10. package/lib/commonjs/getVisibleIndices.js.map +1 -1
  11. package/lib/commonjs/hooks/usePersistentCallback.js +36 -0
  12. package/lib/commonjs/hooks/usePersistentCallback.js.map +1 -0
  13. package/lib/commonjs/index.js +1 -1
  14. package/lib/commonjs/layout/MutableLinearLayout.js +78 -39
  15. package/lib/commonjs/layout/MutableLinearLayout.js.map +1 -1
  16. package/lib/commonjs/layout/constants/layoutDefaults.js +19 -0
  17. package/lib/commonjs/layout/constants/layoutDefaults.js.map +1 -0
  18. package/lib/commonjs/layout/index.js +0 -18
  19. package/lib/commonjs/layout/index.js.map +1 -1
  20. package/lib/commonjs/recycler/CellPool.js +46 -0
  21. package/lib/commonjs/recycler/CellPool.js.map +1 -0
  22. package/lib/commonjs/recycler/RecyclerList.js +224 -0
  23. package/lib/commonjs/recycler/RecyclerList.js.map +1 -0
  24. package/lib/commonjs/types/Axis.js +2 -0
  25. package/lib/commonjs/{layout/LayoutProvider.js.map → types/Axis.js.map} +1 -1
  26. package/lib/commonjs/types/CellKey.js +2 -0
  27. package/lib/{module/layout/LayoutProvider.js.map → commonjs/types/CellKey.js.map} +1 -1
  28. package/lib/commonjs/types/CellType.js +2 -0
  29. package/lib/commonjs/{layout/LayoutRectangle.js.map → types/CellType.js.map} +1 -1
  30. package/lib/commonjs/types/VisibleRange.js +2 -0
  31. package/lib/{module/layout/LayoutRectangle.js.map → commonjs/types/VisibleRange.js.map} +1 -1
  32. package/lib/commonjs/{RecyclerList.types.js → types/VisibleRangeInput.js} +1 -1
  33. package/lib/commonjs/types/VisibleRangeInput.js.map +1 -0
  34. package/lib/commonjs/types/index.js +13 -0
  35. package/lib/commonjs/types/index.js.map +1 -0
  36. package/lib/commonjs/types/layout/LayoutRect.js +2 -0
  37. package/lib/commonjs/types/layout/LayoutRect.js.map +1 -0
  38. package/lib/commonjs/types/layout/LinearLayoutInput.js +6 -0
  39. package/lib/commonjs/types/layout/LinearLayoutInput.js.map +1 -0
  40. package/lib/commonjs/types/layout/MainAxisPadding.js +26 -0
  41. package/lib/commonjs/types/layout/MainAxisPadding.js.map +1 -0
  42. package/lib/commonjs/types/layout/index.js +2 -0
  43. package/lib/commonjs/types/layout/index.js.map +1 -0
  44. package/lib/commonjs/types/recycler/RecyclerCellInstance.js +6 -0
  45. package/lib/commonjs/types/recycler/RecyclerCellInstance.js.map +1 -0
  46. package/lib/commonjs/types/recycler/RecyclerItemRenderer.js +6 -0
  47. package/lib/commonjs/types/recycler/RecyclerItemRenderer.js.map +1 -0
  48. package/lib/commonjs/types/recycler/RecyclerListProps.js +6 -0
  49. package/lib/commonjs/types/recycler/RecyclerListProps.js.map +1 -0
  50. package/lib/commonjs/types/recycler/index.js +2 -0
  51. package/lib/commonjs/types/recycler/index.js.map +1 -0
  52. package/lib/commonjs/{layout/LayoutProvider.js → types/scroll/ScrollMetrics.js} +1 -1
  53. package/lib/commonjs/types/scroll/ScrollMetrics.js.map +1 -0
  54. package/lib/commonjs/types/scroll/index.js +2 -0
  55. package/lib/commonjs/types/scroll/index.js.map +1 -0
  56. package/lib/commonjs/windowing/computeVisibleItemRange.js +71 -0
  57. package/lib/commonjs/windowing/computeVisibleItemRange.js.map +1 -0
  58. package/lib/commonjs/windowing/index.js +3 -3
  59. package/lib/commonjs/windowing/index.js.map +1 -1
  60. package/lib/module/cell/CellKeyGenerator.js +16 -0
  61. package/lib/module/cell/CellKeyGenerator.js.map +1 -0
  62. package/lib/module/cell/CellRecycler.js +48 -39
  63. package/lib/module/cell/CellRecycler.js.map +1 -1
  64. package/lib/module/cell/createCell.js +17 -0
  65. package/lib/module/cell/createCell.js.map +1 -0
  66. package/lib/module/cell/index.js +7 -0
  67. package/lib/module/cell/index.js.map +1 -0
  68. package/lib/module/getVisibleIndices.js.map +1 -1
  69. package/lib/module/hooks/usePersistentCallback.js +33 -0
  70. package/lib/module/hooks/usePersistentCallback.js.map +1 -0
  71. package/lib/module/index.js +1 -1
  72. package/lib/module/index.js.map +1 -1
  73. package/lib/module/layout/MutableLinearLayout.js +78 -38
  74. package/lib/module/layout/MutableLinearLayout.js.map +1 -1
  75. package/lib/module/layout/constants/layoutDefaults.js +15 -0
  76. package/lib/module/layout/constants/layoutDefaults.js.map +1 -0
  77. package/lib/module/layout/index.js +0 -3
  78. package/lib/module/layout/index.js.map +1 -1
  79. package/lib/module/recycler/CellPool.js +41 -0
  80. package/lib/module/recycler/CellPool.js.map +1 -0
  81. package/lib/module/recycler/RecyclerList.js +221 -0
  82. package/lib/module/recycler/RecyclerList.js.map +1 -0
  83. package/lib/module/types/Axis.js +2 -0
  84. package/lib/module/types/Axis.js.map +1 -0
  85. package/lib/module/types/CellKey.js +2 -0
  86. package/lib/module/types/CellKey.js.map +1 -0
  87. package/lib/module/types/CellType.js +2 -0
  88. package/lib/module/types/CellType.js.map +1 -0
  89. package/lib/module/types/VisibleRange.js +2 -0
  90. package/lib/module/types/VisibleRange.js.map +1 -0
  91. package/lib/module/types/VisibleRangeInput.js +4 -0
  92. package/lib/module/types/VisibleRangeInput.js.map +1 -0
  93. package/lib/module/types/index.js +4 -0
  94. package/lib/module/types/index.js.map +1 -0
  95. package/lib/module/types/layout/LayoutRect.js +2 -0
  96. package/lib/module/types/layout/LayoutRect.js.map +1 -0
  97. package/lib/module/types/layout/LinearLayoutInput.js +4 -0
  98. package/lib/module/types/layout/LinearLayoutInput.js.map +1 -0
  99. package/lib/module/types/layout/MainAxisPadding.js +22 -0
  100. package/lib/module/types/layout/MainAxisPadding.js.map +1 -0
  101. package/lib/module/types/layout/index.js +2 -0
  102. package/lib/module/types/layout/index.js.map +1 -0
  103. package/lib/module/types/recycler/RecyclerCellInstance.js +4 -0
  104. package/lib/module/types/recycler/RecyclerCellInstance.js.map +1 -0
  105. package/lib/module/types/recycler/RecyclerItemRenderer.js +4 -0
  106. package/lib/module/types/recycler/RecyclerItemRenderer.js.map +1 -0
  107. package/lib/module/types/recycler/RecyclerListProps.js +4 -0
  108. package/lib/module/types/recycler/RecyclerListProps.js.map +1 -0
  109. package/lib/module/types/recycler/index.js +2 -0
  110. package/lib/module/types/recycler/index.js.map +1 -0
  111. package/lib/module/types/scroll/ScrollMetrics.js +4 -0
  112. package/lib/module/types/scroll/ScrollMetrics.js.map +1 -0
  113. package/lib/module/types/scroll/index.js +2 -0
  114. package/lib/module/types/scroll/index.js.map +1 -0
  115. package/lib/module/windowing/computeVisibleItemRange.js +67 -0
  116. package/lib/module/windowing/computeVisibleItemRange.js.map +1 -0
  117. package/lib/module/windowing/index.js +1 -1
  118. package/lib/module/windowing/index.js.map +1 -1
  119. package/lib/typescript/src/cell/Cell.d.ts +13 -4
  120. package/lib/typescript/src/cell/Cell.d.ts.map +1 -1
  121. package/lib/typescript/src/cell/CellKeyGenerator.d.ts +11 -0
  122. package/lib/typescript/src/cell/CellKeyGenerator.d.ts.map +1 -0
  123. package/lib/typescript/src/cell/CellRecycler.d.ts +19 -11
  124. package/lib/typescript/src/cell/CellRecycler.d.ts.map +1 -1
  125. package/lib/typescript/src/cell/createCell.d.ts +7 -0
  126. package/lib/typescript/src/cell/createCell.d.ts.map +1 -0
  127. package/lib/typescript/src/cell/index.d.ts +4 -0
  128. package/lib/typescript/src/cell/index.d.ts.map +1 -0
  129. package/lib/typescript/src/getVisibleIndices.d.ts +2 -2
  130. package/lib/typescript/src/getVisibleIndices.d.ts.map +1 -1
  131. package/lib/typescript/src/hooks/usePersistentCallback.d.ts +16 -0
  132. package/lib/typescript/src/hooks/usePersistentCallback.d.ts.map +1 -0
  133. package/lib/typescript/src/index.d.ts +1 -2
  134. package/lib/typescript/src/index.d.ts.map +1 -1
  135. package/lib/typescript/src/layout/MutableLinearLayout.d.ts +45 -13
  136. package/lib/typescript/src/layout/MutableLinearLayout.d.ts.map +1 -1
  137. package/lib/typescript/src/layout/constants/layoutDefaults.d.ts +13 -0
  138. package/lib/typescript/src/layout/constants/layoutDefaults.d.ts.map +1 -0
  139. package/lib/typescript/src/layout/index.d.ts +1 -4
  140. package/lib/typescript/src/layout/index.d.ts.map +1 -1
  141. package/lib/typescript/src/native/NitroList.types.d.ts +2 -2
  142. package/lib/typescript/src/native/NitroList.types.d.ts.map +1 -1
  143. package/lib/typescript/src/recycler/CellPool.d.ts +14 -0
  144. package/lib/typescript/src/recycler/CellPool.d.ts.map +1 -0
  145. package/lib/typescript/src/recycler/RecyclerList.d.ts +4 -0
  146. package/lib/typescript/src/recycler/RecyclerList.d.ts.map +1 -0
  147. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts +2 -2
  148. package/lib/typescript/src/specs/nitro-layout-engine.nitro.d.ts.map +1 -1
  149. package/lib/typescript/src/types/Axis.d.ts +11 -0
  150. package/lib/typescript/src/types/Axis.d.ts.map +1 -0
  151. package/lib/typescript/src/types/CellKey.d.ts +10 -0
  152. package/lib/typescript/src/types/CellKey.d.ts.map +1 -0
  153. package/lib/typescript/src/types/CellType.d.ts +11 -0
  154. package/lib/typescript/src/types/CellType.d.ts.map +1 -0
  155. package/lib/typescript/src/types/VisibleRange.d.ts +10 -0
  156. package/lib/typescript/src/types/VisibleRange.d.ts.map +1 -0
  157. package/lib/typescript/src/types/VisibleRangeInput.d.ts +35 -0
  158. package/lib/typescript/src/types/VisibleRangeInput.d.ts.map +1 -0
  159. package/lib/typescript/src/types/index.d.ts +8 -0
  160. package/lib/typescript/src/types/index.d.ts.map +1 -0
  161. package/lib/typescript/src/types/layout/LayoutRect.d.ts +15 -0
  162. package/lib/typescript/src/types/layout/LayoutRect.d.ts.map +1 -0
  163. package/lib/typescript/src/types/layout/LinearLayoutInput.d.ts +10 -0
  164. package/lib/typescript/src/types/layout/LinearLayoutInput.d.ts.map +1 -0
  165. package/lib/typescript/src/types/layout/MainAxisPadding.d.ts +20 -0
  166. package/lib/typescript/src/types/layout/MainAxisPadding.d.ts.map +1 -0
  167. package/lib/typescript/src/types/layout/index.d.ts +4 -0
  168. package/lib/typescript/src/types/layout/index.d.ts.map +1 -0
  169. package/lib/typescript/src/types/recycler/RecyclerCellInstance.d.ts +37 -0
  170. package/lib/typescript/src/types/recycler/RecyclerCellInstance.d.ts.map +1 -0
  171. package/lib/typescript/src/types/recycler/RecyclerItemRenderer.d.ts +8 -0
  172. package/lib/typescript/src/types/recycler/RecyclerItemRenderer.d.ts.map +1 -0
  173. package/lib/typescript/src/types/recycler/RecyclerListProps.d.ts +66 -0
  174. package/lib/typescript/src/types/recycler/RecyclerListProps.d.ts.map +1 -0
  175. package/lib/typescript/src/types/recycler/index.d.ts +4 -0
  176. package/lib/typescript/src/types/recycler/index.d.ts.map +1 -0
  177. package/lib/typescript/src/types/scroll/ScrollMetrics.d.ts +15 -0
  178. package/lib/typescript/src/types/scroll/ScrollMetrics.d.ts.map +1 -0
  179. package/lib/typescript/src/types/scroll/index.d.ts +2 -0
  180. package/lib/typescript/src/types/scroll/index.d.ts.map +1 -0
  181. package/lib/typescript/src/windowing/computeVisibleItemRange.d.ts +15 -0
  182. package/lib/typescript/src/windowing/computeVisibleItemRange.d.ts.map +1 -0
  183. package/lib/typescript/src/windowing/index.d.ts +1 -1
  184. package/lib/typescript/src/windowing/index.d.ts.map +1 -1
  185. package/nitrogen/generated/android/c++/JHybridNitroLayoutEngineSpec.cpp +7 -7
  186. package/nitrogen/generated/android/c++/JHybridNitroLayoutEngineSpec.hpp +1 -1
  187. package/nitrogen/generated/android/c++/{JLayoutRectangle.hpp → JLayoutRect.hpp} +10 -10
  188. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/HybridNitroLayoutEngineSpec.kt +1 -1
  189. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrolist/{LayoutRectangle.kt → LayoutRect.kt} +5 -5
  190. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Bridge.hpp +14 -14
  191. package/nitrogen/generated/ios/NitroList-Swift-Cxx-Umbrella.hpp +3 -3
  192. package/nitrogen/generated/ios/c++/HybridNitroLayoutEngineSpecSwift.hpp +4 -4
  193. package/nitrogen/generated/ios/swift/HybridNitroLayoutEngineSpec.swift +1 -1
  194. package/nitrogen/generated/ios/swift/HybridNitroLayoutEngineSpec_cxx.swift +5 -5
  195. package/nitrogen/generated/ios/swift/{LayoutRectangle.swift → LayoutRect.swift} +5 -5
  196. package/nitrogen/generated/shared/c++/HybridNitroLayoutEngineSpec.hpp +4 -4
  197. package/nitrogen/generated/shared/c++/{LayoutRectangle.hpp → LayoutRect.hpp} +11 -11
  198. package/package.json +1 -1
  199. package/src/cell/Cell.ts +13 -4
  200. package/src/cell/CellKeyGenerator.ts +17 -0
  201. package/src/cell/CellRecycler.ts +53 -43
  202. package/src/cell/createCell.ts +15 -0
  203. package/src/cell/index.ts +5 -0
  204. package/src/getVisibleIndices.ts +4 -2
  205. package/src/hooks/usePersistentCallback.ts +37 -0
  206. package/src/index.ts +1 -2
  207. package/src/layout/MutableLinearLayout.ts +91 -58
  208. package/src/layout/constants/layoutDefaults.ts +12 -0
  209. package/src/layout/index.ts +1 -4
  210. package/src/native/NitroList.types.ts +3 -2
  211. package/src/recycler/CellPool.ts +47 -0
  212. package/src/recycler/RecyclerList.tsx +304 -0
  213. package/src/specs/nitro-layout-engine.nitro.ts +2 -2
  214. package/src/types/Axis.ts +10 -0
  215. package/src/types/CellKey.ts +9 -0
  216. package/src/types/CellType.ts +10 -0
  217. package/src/types/VisibleRange.ts +9 -0
  218. package/src/types/VisibleRangeInput.ts +39 -0
  219. package/src/types/index.ts +15 -0
  220. package/src/types/layout/LayoutRect.ts +14 -0
  221. package/src/types/layout/LinearLayoutInput.ts +12 -0
  222. package/src/types/layout/MainAxisPadding.ts +23 -0
  223. package/src/types/layout/index.ts +3 -0
  224. package/src/types/recycler/RecyclerCellInstance.ts +40 -0
  225. package/src/types/recycler/RecyclerItemRenderer.ts +8 -0
  226. package/src/types/recycler/RecyclerListProps.ts +74 -0
  227. package/src/types/recycler/index.ts +3 -0
  228. package/src/types/scroll/ScrollMetrics.ts +18 -0
  229. package/src/types/scroll/index.ts +1 -0
  230. package/src/windowing/computeVisibleItemRange.ts +78 -0
  231. package/src/windowing/index.ts +1 -1
  232. package/lib/commonjs/RecyclerList.internal.js +0 -25
  233. package/lib/commonjs/RecyclerList.internal.js.map +0 -1
  234. package/lib/commonjs/RecyclerList.js +0 -171
  235. package/lib/commonjs/RecyclerList.js.map +0 -1
  236. package/lib/commonjs/RecyclerList.types.js.map +0 -1
  237. package/lib/commonjs/cell/StableKey.js +0 -10
  238. package/lib/commonjs/cell/StableKey.js.map +0 -1
  239. package/lib/commonjs/hooks/useCellRenderer.js +0 -62
  240. package/lib/commonjs/hooks/useCellRenderer.js.map +0 -1
  241. package/lib/commonjs/hooks/useStableCallback.js +0 -13
  242. package/lib/commonjs/hooks/useStableCallback.js.map +0 -1
  243. package/lib/commonjs/layout/EstimatedLayoutProvider.js +0 -30
  244. package/lib/commonjs/layout/EstimatedLayoutProvider.js.map +0 -1
  245. package/lib/commonjs/layout/LayoutEngine.js +0 -21
  246. package/lib/commonjs/layout/LayoutEngine.js.map +0 -1
  247. package/lib/commonjs/layout/LayoutRectangle.js +0 -2
  248. package/lib/commonjs/viewability/ViewabilityHelper.js +0 -121
  249. package/lib/commonjs/viewability/ViewabilityHelper.js.map +0 -1
  250. package/lib/commonjs/windowing/findVisibleIndexRange.js +0 -48
  251. package/lib/commonjs/windowing/findVisibleIndexRange.js.map +0 -1
  252. package/lib/module/RecyclerList.internal.js +0 -22
  253. package/lib/module/RecyclerList.internal.js.map +0 -1
  254. package/lib/module/RecyclerList.js +0 -166
  255. package/lib/module/RecyclerList.js.map +0 -1
  256. package/lib/module/RecyclerList.types.js +0 -4
  257. package/lib/module/RecyclerList.types.js.map +0 -1
  258. package/lib/module/cell/StableKey.js +0 -6
  259. package/lib/module/cell/StableKey.js.map +0 -1
  260. package/lib/module/hooks/useCellRenderer.js +0 -58
  261. package/lib/module/hooks/useCellRenderer.js.map +0 -1
  262. package/lib/module/hooks/useStableCallback.js +0 -9
  263. package/lib/module/hooks/useStableCallback.js.map +0 -1
  264. package/lib/module/layout/EstimatedLayoutProvider.js +0 -25
  265. package/lib/module/layout/EstimatedLayoutProvider.js.map +0 -1
  266. package/lib/module/layout/LayoutEngine.js +0 -17
  267. package/lib/module/layout/LayoutEngine.js.map +0 -1
  268. package/lib/module/layout/LayoutProvider.js +0 -4
  269. package/lib/module/layout/LayoutRectangle.js +0 -2
  270. package/lib/module/viewability/ViewabilityHelper.js +0 -116
  271. package/lib/module/viewability/ViewabilityHelper.js.map +0 -1
  272. package/lib/module/windowing/findVisibleIndexRange.js +0 -44
  273. package/lib/module/windowing/findVisibleIndexRange.js.map +0 -1
  274. package/lib/typescript/src/RecyclerList.d.ts +0 -26
  275. package/lib/typescript/src/RecyclerList.d.ts.map +0 -1
  276. package/lib/typescript/src/RecyclerList.internal.d.ts +0 -9
  277. package/lib/typescript/src/RecyclerList.internal.d.ts.map +0 -1
  278. package/lib/typescript/src/RecyclerList.types.d.ts +0 -18
  279. package/lib/typescript/src/RecyclerList.types.d.ts.map +0 -1
  280. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts +0 -2
  281. package/lib/typescript/src/__tests__/windowing/findVisibleIndexRange.test.d.ts.map +0 -1
  282. package/lib/typescript/src/cell/StableKey.d.ts +0 -2
  283. package/lib/typescript/src/cell/StableKey.d.ts.map +0 -1
  284. package/lib/typescript/src/hooks/useCellRenderer.d.ts +0 -19
  285. package/lib/typescript/src/hooks/useCellRenderer.d.ts.map +0 -1
  286. package/lib/typescript/src/hooks/useStableCallback.d.ts +0 -2
  287. package/lib/typescript/src/hooks/useStableCallback.d.ts.map +0 -1
  288. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts +0 -15
  289. package/lib/typescript/src/layout/EstimatedLayoutProvider.d.ts.map +0 -1
  290. package/lib/typescript/src/layout/LayoutEngine.d.ts +0 -10
  291. package/lib/typescript/src/layout/LayoutEngine.d.ts.map +0 -1
  292. package/lib/typescript/src/layout/LayoutProvider.d.ts +0 -16
  293. package/lib/typescript/src/layout/LayoutProvider.d.ts.map +0 -1
  294. package/lib/typescript/src/layout/LayoutRectangle.d.ts +0 -11
  295. package/lib/typescript/src/layout/LayoutRectangle.d.ts.map +0 -1
  296. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts +0 -50
  297. package/lib/typescript/src/viewability/ViewabilityHelper.d.ts.map +0 -1
  298. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts +0 -11
  299. package/lib/typescript/src/windowing/findVisibleIndexRange.d.ts.map +0 -1
  300. package/src/RecyclerList.internal.ts +0 -38
  301. package/src/RecyclerList.tsx +0 -252
  302. package/src/RecyclerList.types.ts +0 -24
  303. package/src/__tests__/windowing/findVisibleIndexRange.test.ts +0 -55
  304. package/src/cell/StableKey.ts +0 -6
  305. package/src/hooks/useCellRenderer.ts +0 -86
  306. package/src/hooks/useStableCallback.ts +0 -13
  307. package/src/layout/EstimatedLayoutProvider.ts +0 -35
  308. package/src/layout/LayoutEngine.ts +0 -21
  309. package/src/layout/LayoutProvider.ts +0 -17
  310. package/src/layout/LayoutRectangle.ts +0 -10
  311. package/src/viewability/ViewabilityHelper.ts +0 -130
  312. package/src/windowing/findVisibleIndexRange.ts +0 -60
@@ -5,31 +5,27 @@ import NitroModules
5
5
  * Native layout engine for RecyclerList.
6
6
  * Pure, deterministic, synchronous computation.
7
7
  */
8
- final class HybridNitroList: HybridNitroListSpec {
8
+ final class HybridNitroLayoutEngine: HybridNitroLayoutEngineSpec {
9
9
 
10
- /**
11
- * Computes absolute layout rectangles for all items.
12
- * Called synchronously via JSI.
13
- */
14
10
  func computeLayout(
15
11
  containerWidth: Double,
16
12
  itemHeights: [Double]
17
- ) -> [LayoutRectangle] {
13
+ ) -> [LayoutRect] {
18
14
 
19
- var layouts: [LayoutRectangle] = []
15
+ var layouts: [LayoutRect] = []
20
16
  layouts.reserveCapacity(itemHeights.count)
21
17
 
22
18
  var currentY: Double = 0
23
19
 
24
20
  for height in itemHeights {
25
- let rect = LayoutRectangle(
26
- x: 0,
27
- y: currentY,
28
- width: containerWidth,
29
- height: height
21
+ layouts.append(
22
+ LayoutRect(
23
+ x: 0,
24
+ y: currentY,
25
+ width: containerWidth,
26
+ height: height
27
+ )
30
28
  )
31
-
32
- layouts.append(rect)
33
29
  currentY += height
34
30
  }
35
31
 
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CellKeyGenerator = void 0;
7
+ /**
8
+ * Monotonic key generator for physical cell instances.
9
+ * Guarantees stable keys across the lifetime of the list.
10
+ */
11
+ class CellKeyGenerator {
12
+ nextId = 0;
13
+ next() {
14
+ return this.nextId++;
15
+ }
16
+ reset() {
17
+ this.nextId = 0;
18
+ }
19
+ }
20
+ exports.CellKeyGenerator = CellKeyGenerator;
21
+ //# sourceMappingURL=CellKeyGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CellKeyGenerator","nextId","next","reset","exports"],"sourceRoot":"../../../src","sources":["cell/CellKeyGenerator.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACO,MAAMA,gBAAgB,CAAC;EACpBC,MAAM,GAAG,CAAC;EAElBC,IAAIA,CAAA,EAAY;IACd,OAAO,IAAI,CAACD,MAAM,EAAE;EACtB;EAEAE,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACF,MAAM,GAAG,CAAC;EACjB;AACF;AAACG,OAAA,CAAAJ,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -4,58 +4,66 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CellRecycler = void 0;
7
- const MAX_CELLS = 40;
8
-
7
+ var _createCell = require("./createCell");
9
8
  /**
10
- * Owns physical cell reuse.
11
- * Stateful, imperative, React-agnostic.
12
- *
13
- * FlashList equivalent: CellRecycler
9
+ * Manages physical cell reuse.
10
+ * Imperative and stateful by design.
11
+ * This is NOT React code.
14
12
  */
15
13
  class CellRecycler {
16
- activeCells = new Map();
17
- reusableCellsByType = new Map();
18
- orderedCells = [];
19
- nextCellId = 0;
14
+ /**
15
+ * Active cells mapped by logical index.
16
+ */
17
+ indexToCell = new Map();
20
18
 
21
19
  /**
22
- * Reconcile visible indices against existing cells.
23
- * Returns a stable ordered snapshot.
20
+ * Pool of detached reusable cells.
24
21
  */
25
- reconcile(visibleIndices, getCellType) {
26
- const visibleSet = new Set(visibleIndices);
22
+ recycledCells = [];
27
23
 
28
- // 1️⃣ Release cells no longer visible
29
- for (const [index, cell] of this.activeCells) {
30
- if (visibleSet.has(index)) continue;
31
- this.activeCells.delete(index);
32
- const orderedIndex = this.orderedCells.indexOf(cell);
33
- if (orderedIndex !== -1) {
34
- this.orderedCells.splice(orderedIndex, 1);
24
+ /**
25
+ * Reconcile a contiguous visible index range
26
+ * into a stable list of physical cells.
27
+ *
28
+ * HOT PATH:
29
+ * - No index arrays
30
+ * - Minimal allocations
31
+ * - Deterministic
32
+ */
33
+ reconcileRange(startIndex, endIndex, resolveCellType) {
34
+ const nextActive = [];
35
+
36
+ // Track which current indices are no longer visible
37
+ const unusedIndices = new Set(this.indexToCell.keys());
38
+ for (let index = startIndex; index <= endIndex; index++) {
39
+ unusedIndices.delete(index);
40
+ let cell = this.indexToCell.get(index);
41
+ if (cell) {
42
+ // Existing assignment — reuse
43
+ nextActive.push(cell);
44
+ continue;
35
45
  }
36
- const pool = this.reusableCellsByType.get(cell.type) ?? [];
37
- if (pool.length < MAX_CELLS) pool.push(cell);
38
- this.reusableCellsByType.set(cell.type, pool);
39
- }
46
+ const type = resolveCellType(index);
40
47
 
41
- // 2️⃣ Acquire cells for newly visible indices
42
- for (const index of visibleIndices) {
43
- if (this.activeCells.has(index)) continue;
44
- const type = getCellType(index);
45
- const pool = this.reusableCellsByType.get(type);
46
- let cell = pool?.pop();
47
- if (!cell) {
48
- cell = {
49
- key: `cell-${this.nextCellId++}`,
50
- type,
51
- index
52
- };
48
+ // Try to reuse a recycled cell of same type
49
+ const recycledIdx = this.recycledCells.findIndex(c => c.type === type);
50
+ if (recycledIdx !== -1) {
51
+ cell = this.recycledCells.splice(recycledIdx, 1)[0];
52
+ } else {
53
+ cell = (0, _createCell.createCell)(type);
53
54
  }
54
55
  cell.index = index;
55
- this.activeCells.set(index, cell);
56
- this.orderedCells.push(cell);
56
+ this.indexToCell.set(index, cell);
57
+ nextActive.push(cell);
58
+ }
59
+
60
+ // Recycle cells that left the visible window
61
+ for (const index of unusedIndices) {
62
+ const cell = this.indexToCell.get(index);
63
+ this.indexToCell.delete(index);
64
+ this.recycledCells.push(cell);
57
65
  }
58
- return this.orderedCells;
66
+ return nextActive;
59
67
  }
60
68
  }
61
69
  exports.CellRecycler = CellRecycler;
@@ -1 +1 @@
1
- {"version":3,"names":["MAX_CELLS","CellRecycler","activeCells","Map","reusableCellsByType","orderedCells","nextCellId","reconcile","visibleIndices","getCellType","visibleSet","Set","index","cell","has","delete","orderedIndex","indexOf","splice","pool","get","type","length","push","set","pop","key","exports"],"sourceRoot":"../../../src","sources":["cell/CellRecycler.ts"],"mappings":";;;;;;AAEA,MAAMA,SAAS,GAAG,EAAE;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAY,CAAC;EACPC,WAAW,GAAG,IAAIC,GAAG,CAAe,CAAC;EACrCC,mBAAmB,GAAG,IAAID,GAAG,CAAiB,CAAC;EAC/CE,YAAY,GAAW,EAAE;EAClCC,UAAU,GAAG,CAAC;;EAEtB;AACF;AACA;AACA;EACEC,SAASA,CACPC,cAAiC,EACjCC,WAAsC,EACrB;IACjB,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAACH,cAAc,CAAC;;IAE1C;IACA,KAAK,MAAM,CAACI,KAAK,EAAEC,IAAI,CAAC,IAAI,IAAI,CAACX,WAAW,EAAE;MAC5C,IAAIQ,UAAU,CAACI,GAAG,CAACF,KAAK,CAAC,EAAE;MAE3B,IAAI,CAACV,WAAW,CAACa,MAAM,CAACH,KAAK,CAAC;MAE9B,MAAMI,YAAY,GAAG,IAAI,CAACX,YAAY,CAACY,OAAO,CAACJ,IAAI,CAAC;MACpD,IAAIG,YAAY,KAAK,CAAC,CAAC,EAAE;QACvB,IAAI,CAACX,YAAY,CAACa,MAAM,CAACF,YAAY,EAAE,CAAC,CAAC;MAC3C;MAEA,MAAMG,IAAI,GAAG,IAAI,CAACf,mBAAmB,CAACgB,GAAG,CAACP,IAAI,CAACQ,IAAI,CAAC,IAAI,EAAE;MAC1D,IAAIF,IAAI,CAACG,MAAM,GAAGtB,SAAS,EAAEmB,IAAI,CAACI,IAAI,CAACV,IAAI,CAAC;MAC5C,IAAI,CAACT,mBAAmB,CAACoB,GAAG,CAACX,IAAI,CAACQ,IAAI,EAAEF,IAAI,CAAC;IAC/C;;IAEA;IACA,KAAK,MAAMP,KAAK,IAAIJ,cAAc,EAAE;MAClC,IAAI,IAAI,CAACN,WAAW,CAACY,GAAG,CAACF,KAAK,CAAC,EAAE;MAEjC,MAAMS,IAAI,GAAGZ,WAAW,CAACG,KAAK,CAAC;MAC/B,MAAMO,IAAI,GAAG,IAAI,CAACf,mBAAmB,CAACgB,GAAG,CAACC,IAAI,CAAC;MAC/C,IAAIR,IAAI,GAAGM,IAAI,EAAEM,GAAG,CAAC,CAAC;MAEtB,IAAI,CAACZ,IAAI,EAAE;QACTA,IAAI,GAAG;UACLa,GAAG,EAAE,QAAQ,IAAI,CAACpB,UAAU,EAAE,EAAE;UAChCe,IAAI;UACJT;QACF,CAAC;MACH;MAEAC,IAAI,CAACD,KAAK,GAAGA,KAAK;MAClB,IAAI,CAACV,WAAW,CAACsB,GAAG,CAACZ,KAAK,EAAEC,IAAI,CAAC;MACjC,IAAI,CAACR,YAAY,CAACkB,IAAI,CAACV,IAAI,CAAC;IAC9B;IAEA,OAAO,IAAI,CAACR,YAAY;EAC1B;AACF;AAACsB,OAAA,CAAA1B,YAAA,GAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_createCell","require","CellRecycler","indexToCell","Map","recycledCells","reconcileRange","startIndex","endIndex","resolveCellType","nextActive","unusedIndices","Set","keys","index","delete","cell","get","push","type","recycledIdx","findIndex","c","splice","createCell","set","exports"],"sourceRoot":"../../../src","sources":["cell/CellRecycler.ts"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMC,YAAY,CAAC;EACxB;AACF;AACA;EACmBC,WAAW,GAAG,IAAIC,GAAG,CAAe,CAAC;;EAEtD;AACF;AACA;EACmBC,aAAa,GAAW,EAAE;;EAE3C;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CACZC,UAAkB,EAClBC,QAAgB,EAChBC,eAA0C,EACzB;IACjB,MAAMC,UAAkB,GAAG,EAAE;;IAE7B;IACA,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAC,IAAI,CAACT,WAAW,CAACU,IAAI,CAAC,CAAC,CAAC;IAEtD,KAAK,IAAIC,KAAK,GAAGP,UAAU,EAAEO,KAAK,IAAIN,QAAQ,EAAEM,KAAK,EAAE,EAAE;MACvDH,aAAa,CAACI,MAAM,CAACD,KAAK,CAAC;MAE3B,IAAIE,IAAI,GAAG,IAAI,CAACb,WAAW,CAACc,GAAG,CAACH,KAAK,CAAC;MACtC,IAAIE,IAAI,EAAE;QACR;QACAN,UAAU,CAACQ,IAAI,CAACF,IAAI,CAAC;QACrB;MACF;MAEA,MAAMG,IAAI,GAAGV,eAAe,CAACK,KAAK,CAAC;;MAEnC;MACA,MAAMM,WAAW,GAAG,IAAI,CAACf,aAAa,CAACgB,SAAS,CAC9CC,CAAC,IAAIA,CAAC,CAACH,IAAI,KAAKA,IAClB,CAAC;MAED,IAAIC,WAAW,KAAK,CAAC,CAAC,EAAE;QACtBJ,IAAI,GAAG,IAAI,CAACX,aAAa,CAACkB,MAAM,CAACH,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE;MACtD,CAAC,MAAM;QACLJ,IAAI,GAAG,IAAAQ,sBAAU,EAACL,IAAI,CAAC;MACzB;MAEAH,IAAI,CAACF,KAAK,GAAGA,KAAK;MAClB,IAAI,CAACX,WAAW,CAACsB,GAAG,CAACX,KAAK,EAAEE,IAAI,CAAC;MACjCN,UAAU,CAACQ,IAAI,CAACF,IAAI,CAAC;IACvB;;IAEA;IACA,KAAK,MAAMF,KAAK,IAAIH,aAAa,EAAE;MACjC,MAAMK,IAAI,GAAG,IAAI,CAACb,WAAW,CAACc,GAAG,CAACH,KAAK,CAAE;MACzC,IAAI,CAACX,WAAW,CAACY,MAAM,CAACD,KAAK,CAAC;MAC9B,IAAI,CAACT,aAAa,CAACa,IAAI,CAACF,IAAI,CAAC;IAC/B;IAEA,OAAON,UAAU;EACnB;AACF;AAACgB,OAAA,CAAAxB,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createCell = createCell;
7
+ let nextCellId = 0;
8
+
9
+ /**
10
+ * Creates a new physical cell with a stable identity.
11
+ * The key is generated ONCE and never changes.
12
+ */
13
+ function createCell(type) {
14
+ return {
15
+ key: `cell-${nextCellId++}`,
16
+ // stable physical identity
17
+ type,
18
+ index: -1 // assigned by recycler
19
+ };
20
+ }
21
+ //# sourceMappingURL=createCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["nextCellId","createCell","type","key","index"],"sourceRoot":"../../../src","sources":["cell/createCell.ts"],"mappings":";;;;;;AAEA,IAAIA,UAAU,GAAG,CAAC;;AAElB;AACA;AACA;AACA;AACO,SAASC,UAAUA,CAACC,IAAY,EAAQ;EAC7C,OAAO;IACLC,GAAG,EAAE,QAAQH,UAAU,EAAE,EAAE;IAAE;IAC7BE,IAAI;IACJE,KAAK,EAAE,CAAC,CAAC,CAAmB;EAC9B,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CellRecycler", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _CellRecycler.CellRecycler;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "createCell", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _createCell.createCell;
16
+ }
17
+ });
18
+ var _CellRecycler = require("./CellRecycler");
19
+ var _createCell = require("./createCell");
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_CellRecycler","require","_createCell"],"sourceRoot":"../../../src","sources":["cell/index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAGA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["getVisibleRange","layouts","metrics","bufferPx","length","height","startY","Math","max","offsetY","endY","low","high","first","mid","rect","y","visible","i","push"],"sourceRoot":"../../src","sources":["getVisibleIndices.ts"],"mappings":";;;;;;AAGA;AACA;AACA;AACA;AACO,SAASA,eAAeA,CAC7BC,OAAmC,EACnCC,OAAsB,EACtBC,QAAgB,EACG;EACnB,IACEF,OAAO,CAACG,MAAM,KAAK,CAAC,IACpBF,OAAO,CAACG,MAAM,IAAI,CAAC,EACnB;IACA,OAAO,EAAE;EACX;EAEA,MAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CACrB,CAAC,EACDN,OAAO,CAACO,OAAO,GAAGN,QACpB,CAAC;EAED,MAAMO,IAAI,GACRR,OAAO,CAACO,OAAO,GAAGP,OAAO,CAACG,MAAM,GAAGF,QAAQ;EAE7C,IAAIQ,GAAG,GAAG,CAAC;EACX,IAAIC,IAAI,GAAGX,OAAO,CAACG,MAAM,GAAG,CAAC;EAC7B,IAAIS,KAAK,GAAGZ,OAAO,CAACG,MAAM;EAE1B,OAAOO,GAAG,IAAIC,IAAI,EAAE;IAClB,MAAME,GAAG,GAAIH,GAAG,GAAGC,IAAI,IAAK,CAAC;IAC7B,MAAMG,IAAI,GAAGd,OAAO,CAACa,GAAG,CAAE;IAE1B,IAAIC,IAAI,CAACC,CAAC,GAAGD,IAAI,CAACV,MAAM,IAAIC,MAAM,EAAE;MAClCO,KAAK,GAAGC,GAAG;MACXF,IAAI,GAAGE,GAAG,GAAG,CAAC;IAChB,CAAC,MAAM;MACLH,GAAG,GAAGG,GAAG,GAAG,CAAC;IACf;EACF;EAEA,MAAMG,OAAiB,GAAG,EAAE;EAE5B,KAAK,IAAIC,CAAC,GAAGL,KAAK,EAAEK,CAAC,GAAGjB,OAAO,CAACG,MAAM,EAAEc,CAAC,EAAE,EAAE;IAC3C,MAAMH,IAAI,GAAGd,OAAO,CAACiB,CAAC,CAAE;IACxB,IAAIH,IAAI,CAACC,CAAC,GAAGN,IAAI,EAAE;IACnBO,OAAO,CAACE,IAAI,CAACD,CAAC,CAAC;EACjB;EAEA,OAAOD,OAAO;AAChB","ignoreList":[]}
1
+ {"version":3,"names":["getVisibleRange","layouts","metrics","bufferPx","length","height","startY","Math","max","offsetY","endY","low","high","first","mid","rect","y","visible","i","push"],"sourceRoot":"../../src","sources":["getVisibleIndices.ts"],"mappings":";;;;;;AAKA;AACA;AACA;AACA;AACO,SAASA,eAAeA,CAC7BC,OAA8B,EAC9BC,OAAsB,EACtBC,QAAgB,EACG;EACnB,IACEF,OAAO,CAACG,MAAM,KAAK,CAAC,IACpBF,OAAO,CAACG,MAAM,IAAI,CAAC,EACnB;IACA,OAAO,EAAE;EACX;EAEA,MAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CACrB,CAAC,EACDN,OAAO,CAACO,OAAO,GAAGN,QACpB,CAAC;EAED,MAAMO,IAAI,GACRR,OAAO,CAACO,OAAO,GAAGP,OAAO,CAACG,MAAM,GAAGF,QAAQ;EAE7C,IAAIQ,GAAG,GAAG,CAAC;EACX,IAAIC,IAAI,GAAGX,OAAO,CAACG,MAAM,GAAG,CAAC;EAC7B,IAAIS,KAAK,GAAGZ,OAAO,CAACG,MAAM;EAE1B,OAAOO,GAAG,IAAIC,IAAI,EAAE;IAClB,MAAME,GAAG,GAAIH,GAAG,GAAGC,IAAI,IAAK,CAAC;IAC7B,MAAMG,IAAI,GAAGd,OAAO,CAACa,GAAG,CAAE;IAE1B,IAAIC,IAAI,CAACC,CAAC,GAAGD,IAAI,CAACV,MAAM,IAAIC,MAAM,EAAE;MAClCO,KAAK,GAAGC,GAAG;MACXF,IAAI,GAAGE,GAAG,GAAG,CAAC;IAChB,CAAC,MAAM;MACLH,GAAG,GAAGG,GAAG,GAAG,CAAC;IACf;EACF;EAEA,MAAMG,OAAiB,GAAG,EAAE;EAE5B,KAAK,IAAIC,CAAC,GAAGL,KAAK,EAAEK,CAAC,GAAGjB,OAAO,CAACG,MAAM,EAAEc,CAAC,EAAE,EAAE;IAC3C,MAAMH,IAAI,GAAGd,OAAO,CAACiB,CAAC,CAAE;IACxB,IAAIH,IAAI,CAACC,CAAC,GAAGN,IAAI,EAAE;IACnBO,OAAO,CAACE,IAAI,CAACD,CAAC,CAAC;EACjB;EAEA,OAAOD,OAAO;AAChB","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePersistentCallback = usePersistentCallback;
7
+ var _react = require("react");
8
+ /**
9
+ * Returns a function whose identity is stable across renders,
10
+ * but always invokes the latest provided implementation.
11
+ *
12
+ * Invariants:
13
+ * - Function reference NEVER changes
14
+ * - Logic is ALWAYS up to date
15
+ *
16
+ * This is critical for long-lived systems such as:
17
+ * - Recyclers
18
+ * - Effects
19
+ * - Native bridges
20
+ * - Event pipelines
21
+ */
22
+ function usePersistentCallback(fn) {
23
+ /**
24
+ * Holds the latest implementation.
25
+ * Updating this does NOT trigger re-renders.
26
+ */
27
+ const fnRef = (0, _react.useRef)(fn);
28
+ fnRef.current = fn;
29
+
30
+ /**
31
+ * Stable wrapper that forwards calls
32
+ * to the latest implementation.
33
+ */
34
+ return (0, _react.useCallback)((...args) => fnRef.current(...args), []);
35
+ }
36
+ //# sourceMappingURL=usePersistentCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","usePersistentCallback","fn","fnRef","useRef","current","useCallback","args"],"sourceRoot":"../../../src","sources":["hooks/usePersistentCallback.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAEnCC,EAAK,EAAK;EAEV;AACF;AACA;AACA;EACE,MAAMC,KAAK,GAAG,IAAAC,aAAM,EAACF,EAAE,CAAC;EACxBC,KAAK,CAACE,OAAO,GAAGH,EAAE;;EAElB;AACF;AACA;AACA;EACE,OAAO,IAAAI,kBAAW,EACf,CAAC,GAAGC,IAAa,KAChBJ,KAAK,CAACE,OAAO,CAAC,GAAGE,IAAI,CAAC,EACxB,EACF,CAAC;AACH","ignoreList":[]}
@@ -9,5 +9,5 @@ Object.defineProperty(exports, "RecyclerList", {
9
9
  return _RecyclerList.RecyclerList;
10
10
  }
11
11
  });
12
- var _RecyclerList = require("./RecyclerList");
12
+ var _RecyclerList = require("./recycler/RecyclerList");
13
13
  //# sourceMappingURL=index.js.map
@@ -4,61 +4,100 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.MutableLinearLayout = void 0;
7
+ var _layoutDefaults = require("./constants/layoutDefaults");
7
8
  /**
8
- * INTERNAL mutable layout record.
9
- * This is intentionally mutable and never exposed publicly.
10
- */
11
-
12
- /**
13
- * Mutable linear layout store.
14
- * FlashList-style incremental relayout.
9
+ * Mutable, deterministic linear layout engine.
10
+ *
11
+ * Responsibilities:
12
+ * - Compute absolute item geometry
13
+ * - Own layout truth (no React, no scroll state)
14
+ * - Guarantee monotonic ordering along the main axis
15
+ *
16
+ * Cross-platform equivalents:
17
+ * - Flutter: RenderSliver / SliverList
18
+ * - Android: LinearLayoutManager
19
+ * - iOS: UICollectionViewFlowLayout (linear)
15
20
  */
16
21
  class MutableLinearLayout {
17
- constructor(initialHeights, width) {
18
- this.layouts = [];
19
- let y = 0;
20
- for (const height of initialHeights) {
21
- this.layouts.push({
22
+ /** Absolute item layouts in index order */
23
+ layouts = [];
24
+
25
+ /** Total scrollable size along main axis */
26
+ contentSize = 0;
27
+ constructor(axis) {
28
+ this.isVertical = axis === 'vertical';
29
+ }
30
+
31
+ /**
32
+ * Computes layout synchronously from input.
33
+ *
34
+ * This method is intentionally parameter-object based
35
+ * to allow future extension without breaking API.
36
+ *
37
+ * Invariants:
38
+ * - Layouts are monotonic along main axis
39
+ * - No gaps except explicit spacing
40
+ * - Deterministic for identical inputs
41
+ */
42
+ compute(input) {
43
+ const {
44
+ crossAxisSize,
45
+ itemMainAxisSizes,
46
+ padding,
47
+ itemSpacing = _layoutDefaults.DEFAULT_ITEM_SPACING
48
+ } = input;
49
+ const itemCount = itemMainAxisSizes.length;
50
+ const layouts = new Array(itemCount);
51
+ let cursor = padding.start;
52
+ for (let i = 0; i < itemCount; i++) {
53
+ const mainAxisSize = itemMainAxisSizes[i];
54
+ layouts[i] = this.isVertical ? {
22
55
  x: 0,
23
- y,
24
- width,
25
- height
26
- });
27
- y += height;
56
+ y: cursor,
57
+ width: crossAxisSize,
58
+ height: mainAxisSize
59
+ } : {
60
+ x: cursor,
61
+ y: 0,
62
+ width: mainAxisSize,
63
+ height: crossAxisSize
64
+ };
65
+ cursor += mainAxisSize;
66
+
67
+ // Space BETWEEN items, not after the last
68
+ if (i < itemCount - 1) {
69
+ cursor += itemSpacing;
70
+ }
28
71
  }
29
- this.totalHeight = y;
72
+ this.layouts = layouts;
73
+ this.contentSize = cursor + padding.end;
30
74
  }
31
75
 
32
76
  /**
33
- * Read-only snapshot for consumers.
34
- * Returned type is immutable.
77
+ * Returns computed item layouts.
78
+ *
79
+ * Order is guaranteed monotonic along the main axis,
80
+ * which is required for binary-search-based windowing.
35
81
  */
36
82
  getLayouts() {
37
83
  return this.layouts;
38
84
  }
39
- getContentHeight() {
40
- return this.totalHeight;
41
- }
42
85
 
43
86
  /**
44
- * Update height of one item and shift following items.
45
- * Returns true if layout changed.
87
+ * Returns total scrollable size along the main axis,
88
+ * including padding and inter-item spacing.
46
89
  */
47
- updateItemHeight(index, newHeight) {
48
- const layout = this.layouts[index];
49
- if (!layout) return false;
50
- const delta = newHeight - layout.height;
51
- if (delta === 0) return false;
52
-
53
- // Update this item
54
- layout.height = newHeight;
90
+ getContentSize() {
91
+ return this.contentSize;
92
+ }
55
93
 
56
- // Shift all items after this index
57
- for (let i = index + 1; i < this.layouts.length; i++) {
58
- this.layouts[i].y += delta;
59
- }
60
- this.totalHeight += delta;
61
- return true;
94
+ /**
95
+ * Clears internal layout state.
96
+ * Call on severe invalidation or teardown.
97
+ */
98
+ reset() {
99
+ this.layouts = [];
100
+ this.contentSize = 0;
62
101
  }
63
102
  }
64
103
  exports.MutableLinearLayout = MutableLinearLayout;
@@ -1 +1 @@
1
- {"version":3,"names":["MutableLinearLayout","constructor","initialHeights","width","layouts","y","height","push","x","totalHeight","getLayouts","getContentHeight","updateItemHeight","index","newHeight","layout","delta","i","length","exports"],"sourceRoot":"../../../src","sources":["layout/MutableLinearLayout.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACO,MAAMA,mBAAmB,CAAC;EAI/BC,WAAWA,CACTC,cAAiC,EACjCC,KAAa,EACb;IACA,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAIC,CAAC,GAAG,CAAC;IAET,KAAK,MAAMC,MAAM,IAAIJ,cAAc,EAAE;MACnC,IAAI,CAACE,OAAO,CAACG,IAAI,CAAC;QAChBC,CAAC,EAAE,CAAC;QACJH,CAAC;QACDF,KAAK;QACLG;MACF,CAAC,CAAC;MACFD,CAAC,IAAIC,MAAM;IACb;IAEA,IAAI,CAACG,WAAW,GAAGJ,CAAC;EACtB;;EAEA;AACF;AACA;AACA;EACEK,UAAUA,CAAA,EAA+B;IACvC,OAAO,IAAI,CAACN,OAAO;EACrB;EAEAO,gBAAgBA,CAAA,EAAW;IACzB,OAAO,IAAI,CAACF,WAAW;EACzB;;EAEA;AACF;AACA;AACA;EACEG,gBAAgBA,CACdC,KAAa,EACbC,SAAiB,EACR;IACT,MAAMC,MAAM,GAAG,IAAI,CAACX,OAAO,CAACS,KAAK,CAAC;IAClC,IAAI,CAACE,MAAM,EAAE,OAAO,KAAK;IAEzB,MAAMC,KAAK,GAAGF,SAAS,GAAGC,MAAM,CAACT,MAAM;IACvC,IAAIU,KAAK,KAAK,CAAC,EAAE,OAAO,KAAK;;IAE7B;IACAD,MAAM,CAACT,MAAM,GAAGQ,SAAS;;IAEzB;IACA,KAAK,IAAIG,CAAC,GAAGJ,KAAK,GAAG,CAAC,EAAEI,CAAC,GAAG,IAAI,CAACb,OAAO,CAACc,MAAM,EAAED,CAAC,EAAE,EAAE;MACpD,IAAI,CAACb,OAAO,CAACa,CAAC,CAAC,CAAEZ,CAAC,IAAIW,KAAK;IAC7B;IAEA,IAAI,CAACP,WAAW,IAAIO,KAAK;IACzB,OAAO,IAAI;EACb;AACF;AAACG,OAAA,CAAAnB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_layoutDefaults","require","MutableLinearLayout","layouts","contentSize","constructor","axis","isVertical","compute","input","crossAxisSize","itemMainAxisSizes","padding","itemSpacing","DEFAULT_ITEM_SPACING","itemCount","length","Array","cursor","start","i","mainAxisSize","x","y","width","height","end","getLayouts","getContentSize","reset","exports"],"sourceRoot":"../../../src","sources":["layout/MutableLinearLayout.ts"],"mappings":";;;;;;AAIA,IAAAA,eAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,mBAAmB,CAAC;EAG/B;EACQC,OAAO,GAAiB,EAAE;;EAElC;EACQC,WAAW,GAAG,CAAC;EAEvBC,WAAWA,CAACC,IAAU,EAAE;IACtB,IAAI,CAACC,UAAU,GAAGD,IAAI,KAAK,UAAU;EACvC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,OAAOA,CAACC,KAAwB,EAAQ;IACtC,MAAM;MACJC,aAAa;MACbC,iBAAiB;MACjBC,OAAO;MACPC,WAAW,GAAGC;IAChB,CAAC,GAAGL,KAAK;IAET,MAAMM,SAAS,GAAGJ,iBAAiB,CAACK,MAAM;IAC1C,MAAMb,OAAqB,GAAG,IAAIc,KAAK,CAACF,SAAS,CAAC;IAElD,IAAIG,MAAM,GAAGN,OAAO,CAACO,KAAK;IAE1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,SAAS,EAAEK,CAAC,EAAE,EAAE;MAClC,MAAMC,YAAY,GAAGV,iBAAiB,CAACS,CAAC,CAAE;MAE1CjB,OAAO,CAACiB,CAAC,CAAC,GAAG,IAAI,CAACb,UAAU,GACxB;QACEe,CAAC,EAAE,CAAC;QACJC,CAAC,EAAEL,MAAM;QACTM,KAAK,EAAEd,aAAa;QACpBe,MAAM,EAAEJ;MACV,CAAC,GACD;QACEC,CAAC,EAAEJ,MAAM;QACTK,CAAC,EAAE,CAAC;QACJC,KAAK,EAAEH,YAAY;QACnBI,MAAM,EAAEf;MACV,CAAC;MAELQ,MAAM,IAAIG,YAAY;;MAEtB;MACA,IAAID,CAAC,GAAGL,SAAS,GAAG,CAAC,EAAE;QACrBG,MAAM,IAAIL,WAAW;MACvB;IACF;IAEA,IAAI,CAACV,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,WAAW,GAAGc,MAAM,GAAGN,OAAO,CAACc,GAAG;EACzC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEC,UAAUA,CAAA,EAA0B;IAClC,OAAO,IAAI,CAACxB,OAAO;EACrB;;EAEA;AACF;AACA;AACA;EACEyB,cAAcA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACxB,WAAW;EACzB;;EAEA;AACF;AACA;AACA;EACEyB,KAAKA,CAAA,EAAS;IACZ,IAAI,CAAC1B,OAAO,GAAG,EAAE;IACjB,IAAI,CAACC,WAAW,GAAG,CAAC;EACtB;AACF;AAAC0B,OAAA,CAAA5B,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DEFAULT_ITEM_SPACING = void 0;
7
+ /**
8
+ * Default spacing between items along the main axis.
9
+ *
10
+ * This value is used by layout engines when no explicit
11
+ * itemSpacing is provided.
12
+ *
13
+ * Mirrors:
14
+ * - Android RecyclerView ItemDecoration (typical 8–16dp)
15
+ * - iOS UICollectionViewFlowLayout minimumLineSpacing
16
+ * - Flutter SliverList spacing conventions
17
+ */
18
+ const DEFAULT_ITEM_SPACING = exports.DEFAULT_ITEM_SPACING = 12;
19
+ //# sourceMappingURL=layoutDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_ITEM_SPACING","exports"],"sourceRoot":"../../../../src","sources":["layout/constants/layoutDefaults.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAG,EAAE","ignoreList":[]}
@@ -1,20 +1,2 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "EstimatedLayoutProvider", {
7
- enumerable: true,
8
- get: function () {
9
- return _EstimatedLayoutProvider.EstimatedLayoutProvider;
10
- }
11
- });
12
- Object.defineProperty(exports, "computeLayouts", {
13
- enumerable: true,
14
- get: function () {
15
- return _LayoutEngine.computeLayouts;
16
- }
17
- });
18
- var _EstimatedLayoutProvider = require("./EstimatedLayoutProvider");
19
- var _LayoutEngine = require("./LayoutEngine");
20
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_EstimatedLayoutProvider","require","_LayoutEngine"],"sourceRoot":"../../../src","sources":["layout/index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAEA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["layout/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CellPool = void 0;
7
+ class CellPool {
8
+ pools = new Map();
9
+ maxPerType = new Map();
10
+
11
+ /** ✅ NEW: check if a type is registered */
12
+ hasType(type) {
13
+ return this.pools.has(type);
14
+ }
15
+ registerType(type, maxCount) {
16
+ if (this.maxPerType.has(type)) return;
17
+ this.maxPerType.set(type, maxCount);
18
+ this.pools.set(type, []);
19
+ }
20
+ acquire(type) {
21
+ const bucket = this.pools.get(type);
22
+ if (!bucket || bucket.length === 0) return null;
23
+ return bucket.pop();
24
+ }
25
+ release(cell) {
26
+ const {
27
+ type
28
+ } = cell;
29
+ const bucket = this.pools.get(type);
30
+ const max = this.maxPerType.get(type);
31
+ if (!bucket || max === undefined) return;
32
+ cell.index = -1;
33
+ if (bucket.length >= max) return;
34
+ bucket.push(cell);
35
+ }
36
+ clear() {
37
+ for (const bucket of this.pools.values()) {
38
+ bucket.length = 0;
39
+ }
40
+ }
41
+ getPoolSize(type) {
42
+ return this.pools.get(type)?.length ?? 0;
43
+ }
44
+ }
45
+ exports.CellPool = CellPool;
46
+ //# sourceMappingURL=CellPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CellPool","pools","Map","maxPerType","hasType","type","has","registerType","maxCount","set","acquire","bucket","get","length","pop","release","cell","max","undefined","index","push","clear","values","getPoolSize","exports"],"sourceRoot":"../../../src","sources":["recycler/CellPool.ts"],"mappings":";;;;;;AAGO,MAAMA,QAAQ,CAAC;EACHC,KAAK,GAAG,IAAIC,GAAG,CAAmC,CAAC;EACnDC,UAAU,GAAG,IAAID,GAAG,CAAmB,CAAC;;EAEzD;EACAE,OAAOA,CAACC,IAAc,EAAW;IAC/B,OAAO,IAAI,CAACJ,KAAK,CAACK,GAAG,CAACD,IAAI,CAAC;EAC7B;EAEAE,YAAYA,CAACF,IAAc,EAAEG,QAAgB,EAAQ;IACnD,IAAI,IAAI,CAACL,UAAU,CAACG,GAAG,CAACD,IAAI,CAAC,EAAE;IAC/B,IAAI,CAACF,UAAU,CAACM,GAAG,CAACJ,IAAI,EAAEG,QAAQ,CAAC;IACnC,IAAI,CAACP,KAAK,CAACQ,GAAG,CAACJ,IAAI,EAAE,EAAE,CAAC;EAC1B;EAEAK,OAAOA,CAACL,IAAc,EAA+B;IACnD,MAAMM,MAAM,GAAG,IAAI,CAACV,KAAK,CAACW,GAAG,CAACP,IAAI,CAAC;IACnC,IAAI,CAACM,MAAM,IAAIA,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IAC/C,OAAOF,MAAM,CAACG,GAAG,CAAC,CAAC;EACrB;EAEAC,OAAOA,CAACC,IAA0B,EAAQ;IACxC,MAAM;MAAEX;IAAK,CAAC,GAAGW,IAAI;IACrB,MAAML,MAAM,GAAG,IAAI,CAACV,KAAK,CAACW,GAAG,CAACP,IAAI,CAAC;IACnC,MAAMY,GAAG,GAAG,IAAI,CAACd,UAAU,CAACS,GAAG,CAACP,IAAI,CAAC;IAErC,IAAI,CAACM,MAAM,IAAIM,GAAG,KAAKC,SAAS,EAAE;IAElCF,IAAI,CAACG,KAAK,GAAG,CAAC,CAAC;IAEf,IAAIR,MAAM,CAACE,MAAM,IAAII,GAAG,EAAE;IAC1BN,MAAM,CAACS,IAAI,CAACJ,IAAI,CAAC;EACnB;EAEAK,KAAKA,CAAA,EAAS;IACZ,KAAK,MAAMV,MAAM,IAAI,IAAI,CAACV,KAAK,CAACqB,MAAM,CAAC,CAAC,EAAE;MACxCX,MAAM,CAACE,MAAM,GAAG,CAAC;IACnB;EACF;EAEAU,WAAWA,CAAClB,IAAc,EAAU;IAClC,OAAO,IAAI,CAACJ,KAAK,CAACW,GAAG,CAACP,IAAI,CAAC,EAAEQ,MAAM,IAAI,CAAC;EAC1C;AACF;AAACW,OAAA,CAAAxB,QAAA,GAAAA,QAAA","ignoreList":[]}