@shopify/flash-list 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (329) hide show
  1. package/README.md +67 -96
  2. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/BlankAreaEvent.kt +2 -2
  3. package/dist/AnimatedFlashList.d.ts +0 -1
  4. package/dist/AnimatedFlashList.d.ts.map +1 -1
  5. package/dist/AnimatedFlashList.js +3 -3
  6. package/dist/AnimatedFlashList.js.map +1 -1
  7. package/dist/FlashList.d.ts +9 -0
  8. package/dist/FlashList.d.ts.map +1 -1
  9. package/dist/FlashList.js +22 -3
  10. package/dist/FlashList.js.map +1 -1
  11. package/dist/FlashListProps.d.ts +33 -13
  12. package/dist/FlashListProps.d.ts.map +1 -1
  13. package/dist/FlashListProps.js.map +1 -1
  14. package/dist/FlashListRef.d.ts +305 -0
  15. package/dist/FlashListRef.d.ts.map +1 -0
  16. package/dist/FlashListRef.js +3 -0
  17. package/dist/FlashListRef.js.map +1 -0
  18. package/dist/GridLayoutProviderWithProps.js +1 -2
  19. package/dist/GridLayoutProviderWithProps.js.map +1 -1
  20. package/dist/MasonryFlashList.d.ts +2 -2
  21. package/dist/MasonryFlashList.d.ts.map +1 -1
  22. package/dist/MasonryFlashList.js.map +1 -1
  23. package/dist/PureComponentWrapper.js +1 -1
  24. package/dist/PureComponentWrapper.js.map +1 -1
  25. package/dist/__tests__/AverageWindow.test.js.map +1 -1
  26. package/dist/__tests__/ConsecutiveNumbers.test.d.ts +2 -0
  27. package/dist/__tests__/ConsecutiveNumbers.test.d.ts.map +1 -0
  28. package/dist/__tests__/ConsecutiveNumbers.test.js +224 -0
  29. package/dist/__tests__/ConsecutiveNumbers.test.js.map +1 -0
  30. package/dist/__tests__/FlashList.test.js.map +1 -1
  31. package/dist/__tests__/GridLayoutManager.test.d.ts +2 -0
  32. package/dist/__tests__/GridLayoutManager.test.d.ts.map +1 -0
  33. package/dist/__tests__/GridLayoutManager.test.js +69 -0
  34. package/dist/__tests__/GridLayoutManager.test.js.map +1 -0
  35. package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +1 -1
  36. package/dist/__tests__/LayoutCommitObserver.test.d.ts +2 -0
  37. package/dist/__tests__/LayoutCommitObserver.test.d.ts.map +1 -0
  38. package/dist/__tests__/LayoutCommitObserver.test.js +35 -0
  39. package/dist/__tests__/LayoutCommitObserver.test.js.map +1 -0
  40. package/dist/__tests__/LinearLayoutManager.test.d.ts +2 -0
  41. package/dist/__tests__/LinearLayoutManager.test.d.ts.map +1 -0
  42. package/dist/__tests__/LinearLayoutManager.test.js +140 -0
  43. package/dist/__tests__/LinearLayoutManager.test.js.map +1 -0
  44. package/dist/__tests__/MasonryFlashList.test.js.map +1 -1
  45. package/dist/__tests__/MasonryLayoutManager.test.d.ts +2 -0
  46. package/dist/__tests__/MasonryLayoutManager.test.d.ts.map +1 -0
  47. package/dist/__tests__/MasonryLayoutManager.test.js +148 -0
  48. package/dist/__tests__/MasonryLayoutManager.test.js.map +1 -0
  49. package/dist/__tests__/RecyclerView.test.d.ts +2 -0
  50. package/dist/__tests__/RecyclerView.test.d.ts.map +1 -0
  51. package/dist/__tests__/RecyclerView.test.js +103 -0
  52. package/dist/__tests__/RecyclerView.test.js.map +1 -0
  53. package/dist/__tests__/RenderStackManager.test.d.ts +2 -0
  54. package/dist/__tests__/RenderStackManager.test.d.ts.map +1 -0
  55. package/dist/__tests__/RenderStackManager.test.js +485 -0
  56. package/dist/__tests__/RenderStackManager.test.js.map +1 -0
  57. package/dist/__tests__/ViewabilityHelper.test.js.map +1 -1
  58. package/dist/__tests__/findVisibleIndex.test.d.ts +2 -0
  59. package/dist/__tests__/findVisibleIndex.test.d.ts.map +1 -0
  60. package/dist/__tests__/findVisibleIndex.test.js +259 -0
  61. package/dist/__tests__/findVisibleIndex.test.js.map +1 -0
  62. package/dist/__tests__/helpers/createLayoutManager.d.ts +34 -0
  63. package/dist/__tests__/helpers/createLayoutManager.d.ts.map +1 -0
  64. package/dist/__tests__/helpers/createLayoutManager.js +110 -0
  65. package/dist/__tests__/helpers/createLayoutManager.js.map +1 -0
  66. package/dist/__tests__/helpers/mountFlashList.d.ts +2 -2
  67. package/dist/__tests__/helpers/mountFlashList.d.ts.map +1 -1
  68. package/dist/__tests__/helpers/mountFlashList.js +2 -2
  69. package/dist/__tests__/helpers/mountFlashList.js.map +1 -1
  70. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +2 -2
  71. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +1 -1
  72. package/dist/__tests__/helpers/mountMasonryFlashList.js +2 -2
  73. package/dist/__tests__/helpers/mountMasonryFlashList.js.map +1 -1
  74. package/dist/__tests__/useBlankAreaTracker.test.js.map +1 -1
  75. package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts +2 -0
  76. package/dist/__tests__/useUnmountAwareCallbacks.test.d.ts.map +1 -0
  77. package/dist/__tests__/useUnmountAwareCallbacks.test.js +185 -0
  78. package/dist/__tests__/useUnmountAwareCallbacks.test.js.map +1 -0
  79. package/dist/benchmark/AutoScrollHelper.js +2 -2
  80. package/dist/benchmark/AutoScrollHelper.js.map +1 -1
  81. package/dist/benchmark/JSFPSMonitor.js.map +1 -1
  82. package/dist/benchmark/roundToDecimalPlaces.js +1 -2
  83. package/dist/benchmark/roundToDecimalPlaces.js.map +1 -1
  84. package/dist/benchmark/useBenchmark.js +2 -28
  85. package/dist/benchmark/useBenchmark.js.map +1 -1
  86. package/dist/benchmark/useBlankAreaTracker.js +1 -2
  87. package/dist/benchmark/useBlankAreaTracker.js.map +1 -1
  88. package/dist/benchmark/useDataMultiplier.js +1 -2
  89. package/dist/benchmark/useDataMultiplier.js.map +1 -1
  90. package/dist/benchmark/useFlatListBenchmark.d.ts +0 -1
  91. package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
  92. package/dist/benchmark/useFlatListBenchmark.js +9 -9
  93. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  94. package/dist/enableNewCore.d.ts.map +1 -1
  95. package/dist/enableNewCore.js +4 -4
  96. package/dist/enableNewCore.js.map +1 -1
  97. package/dist/errors/CustomError.js.map +1 -1
  98. package/dist/index.d.ts +4 -1
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +11 -3
  101. package/dist/index.js.map +1 -1
  102. package/dist/native/auto-layout/AutoLayoutView.d.ts +1 -1
  103. package/dist/native/auto-layout/AutoLayoutView.d.ts.map +1 -1
  104. package/dist/native/auto-layout/AutoLayoutView.js +1 -1
  105. package/dist/native/auto-layout/AutoLayoutView.js.map +1 -1
  106. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +1 -1
  107. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +1 -1
  108. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +1 -1
  109. package/dist/native/config/PlatformHelper.android.d.ts +2 -0
  110. package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
  111. package/dist/native/config/PlatformHelper.android.js +2 -0
  112. package/dist/native/config/PlatformHelper.android.js.map +1 -1
  113. package/dist/native/config/PlatformHelper.d.ts +2 -0
  114. package/dist/native/config/PlatformHelper.d.ts.map +1 -1
  115. package/dist/native/config/PlatformHelper.ios.d.ts +2 -0
  116. package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
  117. package/dist/native/config/PlatformHelper.ios.js +2 -0
  118. package/dist/native/config/PlatformHelper.ios.js.map +1 -1
  119. package/dist/native/config/PlatformHelper.js +2 -0
  120. package/dist/native/config/PlatformHelper.js.map +1 -1
  121. package/dist/native/config/PlatformHelper.web.d.ts +2 -0
  122. package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
  123. package/dist/native/config/PlatformHelper.web.js +3 -1
  124. package/dist/native/config/PlatformHelper.web.js.map +1 -1
  125. package/dist/recyclerview/LayoutCommitObserver.d.ts +12 -0
  126. package/dist/recyclerview/LayoutCommitObserver.d.ts.map +1 -0
  127. package/dist/recyclerview/LayoutCommitObserver.js +62 -0
  128. package/dist/recyclerview/LayoutCommitObserver.js.map +1 -0
  129. package/dist/recyclerview/RecyclerView.d.ts +3 -2
  130. package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
  131. package/dist/recyclerview/RecyclerView.js +133 -69
  132. package/dist/recyclerview/RecyclerView.js.map +1 -1
  133. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +41 -7
  134. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -1
  135. package/dist/recyclerview/RecyclerViewContextProvider.js +6 -2
  136. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -1
  137. package/dist/recyclerview/RecyclerViewManager.d.ts +31 -7
  138. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
  139. package/dist/recyclerview/RecyclerViewManager.js +154 -117
  140. package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
  141. package/dist/recyclerview/RecyclerViewProps.d.ts +1 -1
  142. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -1
  143. package/dist/recyclerview/RenderStackManager.d.ts +86 -0
  144. package/dist/recyclerview/RenderStackManager.d.ts.map +1 -0
  145. package/dist/recyclerview/RenderStackManager.js +343 -0
  146. package/dist/recyclerview/RenderStackManager.js.map +1 -0
  147. package/dist/recyclerview/ViewHolder.d.ts.map +1 -1
  148. package/dist/recyclerview/ViewHolder.js +8 -6
  149. package/dist/recyclerview/ViewHolder.js.map +1 -1
  150. package/dist/recyclerview/ViewHolderCollection.d.ts +10 -4
  151. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -1
  152. package/dist/recyclerview/ViewHolderCollection.js +26 -10
  153. package/dist/recyclerview/ViewHolderCollection.js.map +1 -1
  154. package/dist/recyclerview/components/ScrollAnchor.d.ts +2 -1
  155. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -1
  156. package/dist/recyclerview/components/ScrollAnchor.js +12 -9
  157. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -1
  158. package/dist/recyclerview/components/StickyHeaders.d.ts +2 -2
  159. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -1
  160. package/dist/recyclerview/components/StickyHeaders.js +44 -45
  161. package/dist/recyclerview/components/StickyHeaders.js.map +1 -1
  162. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +1 -1
  163. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -1
  164. package/dist/recyclerview/helpers/ConsecutiveNumbers.js +2 -2
  165. package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -1
  166. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +48 -2
  167. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -1
  168. package/dist/recyclerview/helpers/EngagedIndicesTracker.js +89 -19
  169. package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -1
  170. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +11 -0
  171. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -0
  172. package/dist/recyclerview/helpers/RenderTimeTracker.js +42 -0
  173. package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -0
  174. package/dist/recyclerview/helpers/VelocityTracker.d.ts +29 -0
  175. package/dist/recyclerview/helpers/VelocityTracker.d.ts.map +1 -0
  176. package/dist/recyclerview/helpers/VelocityTracker.js +70 -0
  177. package/dist/recyclerview/helpers/VelocityTracker.js.map +1 -0
  178. package/dist/recyclerview/hooks/useBoundDetection.d.ts +1 -3
  179. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -1
  180. package/dist/recyclerview/hooks/useBoundDetection.js +60 -28
  181. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -1
  182. package/dist/recyclerview/hooks/useLayoutState.d.ts +3 -1
  183. package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -1
  184. package/dist/recyclerview/hooks/useLayoutState.js +6 -5
  185. package/dist/recyclerview/hooks/useLayoutState.js.map +1 -1
  186. package/dist/recyclerview/hooks/useMappingHelper.d.ts +9 -0
  187. package/dist/recyclerview/hooks/useMappingHelper.d.ts.map +1 -0
  188. package/dist/recyclerview/hooks/useMappingHelper.js +19 -0
  189. package/dist/recyclerview/hooks/useMappingHelper.js.map +1 -0
  190. package/dist/recyclerview/hooks/useOnLoad.d.ts +2 -2
  191. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -1
  192. package/dist/recyclerview/hooks/useOnLoad.js +9 -10
  193. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -1
  194. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +5 -49
  195. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
  196. package/dist/recyclerview/hooks/useRecyclerViewController.js +343 -191
  197. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
  198. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +2 -0
  199. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -1
  200. package/dist/recyclerview/hooks/useRecyclerViewManager.js +11 -1
  201. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -1
  202. package/dist/recyclerview/hooks/useRecyclingState.d.ts +4 -2
  203. package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -1
  204. package/dist/recyclerview/hooks/useRecyclingState.js +3 -4
  205. package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -1
  206. package/dist/recyclerview/hooks/useSecondaryProps.d.ts +1 -1
  207. package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -1
  208. package/dist/recyclerview/hooks/useSecondaryProps.js +15 -12
  209. package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -1
  210. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts +15 -0
  211. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.d.ts.map +1 -0
  212. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js +63 -0
  213. package/dist/recyclerview/hooks/useUnmountAwareCallbacks.js.map +1 -0
  214. package/dist/recyclerview/hooks/useUnmountFlag.d.ts +0 -1
  215. package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -1
  216. package/dist/recyclerview/hooks/useUnmountFlag.js +1 -0
  217. package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -1
  218. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +18 -4
  219. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -1
  220. package/dist/recyclerview/layout-managers/GridLayoutManager.js +61 -25
  221. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -1
  222. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +36 -21
  223. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
  224. package/dist/recyclerview/layout-managers/LayoutManager.js +96 -28
  225. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
  226. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +1 -2
  227. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -1
  228. package/dist/recyclerview/layout-managers/LinearLayoutManager.js +3 -3
  229. package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -1
  230. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +9 -1
  231. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -1
  232. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +30 -16
  233. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -1
  234. package/dist/recyclerview/utils/adjustOffsetForRTL.js +1 -2
  235. package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -1
  236. package/dist/recyclerview/utils/componentUtils.d.ts +1 -1
  237. package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -1
  238. package/dist/recyclerview/utils/componentUtils.js.map +1 -1
  239. package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -1
  240. package/dist/recyclerview/utils/findVisibleIndex.js +3 -5
  241. package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -1
  242. package/dist/recyclerview/utils/measureLayout.d.ts +24 -28
  243. package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -1
  244. package/dist/recyclerview/utils/measureLayout.js +36 -6
  245. package/dist/recyclerview/utils/measureLayout.js.map +1 -1
  246. package/dist/recyclerview/utils/measureLayout.web.d.ts +29 -0
  247. package/dist/recyclerview/utils/measureLayout.web.d.ts.map +1 -0
  248. package/dist/recyclerview/utils/measureLayout.web.js +87 -0
  249. package/dist/recyclerview/utils/measureLayout.web.js.map +1 -0
  250. package/dist/specs/AutoLayoutNativeComponent.d.ts +1 -2
  251. package/dist/specs/AutoLayoutNativeComponent.d.ts.map +1 -1
  252. package/dist/specs/CellContainerNativeComponent.d.ts +0 -1
  253. package/dist/specs/CellContainerNativeComponent.d.ts.map +1 -1
  254. package/dist/tsconfig.tsbuildinfo +1 -1
  255. package/dist/utils/AverageWindow.js.map +1 -1
  256. package/dist/utils/ContentContainerUtils.d.ts.map +1 -1
  257. package/dist/utils/ContentContainerUtils.js.map +1 -1
  258. package/dist/viewability/ViewToken.d.ts +2 -2
  259. package/dist/viewability/ViewToken.d.ts.map +1 -1
  260. package/dist/viewability/ViewabilityHelper.js +1 -1
  261. package/dist/viewability/ViewabilityHelper.js.map +1 -1
  262. package/dist/viewability/ViewabilityManager.d.ts.map +1 -1
  263. package/dist/viewability/ViewabilityManager.js +11 -5
  264. package/dist/viewability/ViewabilityManager.js.map +1 -1
  265. package/jestSetup.js +30 -11
  266. package/package.json +4 -3
  267. package/src/AnimatedFlashList.ts +3 -2
  268. package/src/FlashList.tsx +25 -1
  269. package/src/FlashListProps.ts +42 -11
  270. package/src/FlashListRef.ts +320 -0
  271. package/src/MasonryFlashList.tsx +2 -2
  272. package/src/__tests__/ConsecutiveNumbers.test.ts +232 -0
  273. package/src/__tests__/GridLayoutManager.test.ts +113 -0
  274. package/src/__tests__/LayoutCommitObserver.test.tsx +60 -0
  275. package/src/__tests__/LinearLayoutManager.test.ts +227 -0
  276. package/src/__tests__/MasonryLayoutManager.test.ts +202 -0
  277. package/src/__tests__/RecyclerView.test.tsx +144 -0
  278. package/src/__tests__/RenderStackManager.test.ts +574 -0
  279. package/src/__tests__/findVisibleIndex.test.ts +369 -0
  280. package/src/__tests__/helpers/createLayoutManager.ts +141 -0
  281. package/src/__tests__/useUnmountAwareCallbacks.test.tsx +285 -0
  282. package/src/benchmark/useBenchmark.ts +0 -37
  283. package/src/benchmark/useFlatListBenchmark.ts +2 -2
  284. package/src/enableNewCore.ts +3 -1
  285. package/src/index.ts +14 -3
  286. package/src/native/config/PlatformHelper.android.ts +2 -0
  287. package/src/native/config/PlatformHelper.ios.ts +2 -0
  288. package/src/native/config/PlatformHelper.ts +2 -0
  289. package/src/native/config/PlatformHelper.web.ts +3 -1
  290. package/src/recyclerview/LayoutCommitObserver.tsx +74 -0
  291. package/src/recyclerview/RecyclerView.tsx +178 -89
  292. package/src/recyclerview/RecyclerViewContextProvider.ts +53 -7
  293. package/src/recyclerview/RecyclerViewManager.ts +176 -97
  294. package/src/recyclerview/RecyclerViewProps.ts +2 -1
  295. package/src/recyclerview/RenderStackManager.ts +317 -0
  296. package/src/recyclerview/ViewHolder.tsx +13 -6
  297. package/src/recyclerview/ViewHolderCollection.tsx +45 -16
  298. package/src/recyclerview/components/ScrollAnchor.tsx +24 -11
  299. package/src/recyclerview/components/StickyHeaders.tsx +70 -58
  300. package/src/recyclerview/helpers/ConsecutiveNumbers.ts +2 -2
  301. package/src/recyclerview/helpers/EngagedIndicesTracker.ts +135 -25
  302. package/src/recyclerview/helpers/RenderTimeTracker.ts +42 -0
  303. package/src/recyclerview/helpers/VelocityTracker.ts +77 -0
  304. package/src/recyclerview/hooks/useBoundDetection.ts +74 -25
  305. package/src/recyclerview/hooks/useLayoutState.ts +15 -6
  306. package/src/recyclerview/hooks/useMappingHelper.ts +20 -0
  307. package/src/recyclerview/hooks/useOnLoad.ts +11 -10
  308. package/src/recyclerview/hooks/useRecyclerViewController.tsx +380 -241
  309. package/src/recyclerview/hooks/useRecyclerViewManager.ts +13 -1
  310. package/src/recyclerview/hooks/useRecyclingState.ts +11 -7
  311. package/src/recyclerview/hooks/useSecondaryProps.tsx +12 -7
  312. package/src/recyclerview/hooks/useUnmountAwareCallbacks.ts +73 -0
  313. package/src/recyclerview/hooks/useUnmountFlag.ts +1 -0
  314. package/src/recyclerview/layout-managers/GridLayoutManager.ts +68 -27
  315. package/src/recyclerview/layout-managers/LayoutManager.ts +116 -42
  316. package/src/recyclerview/layout-managers/LinearLayoutManager.ts +12 -8
  317. package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +34 -13
  318. package/src/recyclerview/utils/componentUtils.ts +1 -1
  319. package/src/recyclerview/utils/findVisibleIndex.ts +1 -2
  320. package/src/recyclerview/utils/measureLayout.ts +41 -2
  321. package/src/recyclerview/utils/measureLayout.web.ts +102 -0
  322. package/src/viewability/ViewToken.ts +2 -2
  323. package/src/viewability/ViewabilityHelper.ts +1 -1
  324. package/src/viewability/ViewabilityManager.ts +16 -9
  325. package/dist/recyclerview/RecycleKeyManager.d.ts +0 -82
  326. package/dist/recyclerview/RecycleKeyManager.d.ts.map +0 -1
  327. package/dist/recyclerview/RecycleKeyManager.js +0 -135
  328. package/dist/recyclerview/RecycleKeyManager.js.map +0 -1
  329. package/src/recyclerview/RecycleKeyManager.ts +0 -185
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Tracks and calculates velocity for scroll/drag movements
3
+ * Used to determine momentum scrolling behavior
4
+ */
5
+ export declare class VelocityTracker<T> {
6
+ /** Timestamp of the last velocity update */
7
+ private lastUpdateTime;
8
+ /** Current velocity vector with x and y components */
9
+ private velocity;
10
+ /** Reference to the momentum end timeout */
11
+ private timeoutId;
12
+ /**
13
+ * Calculates velocity based on position change over time
14
+ * @param newOffset Current position value
15
+ * @param oldOffset Previous position value
16
+ * @param isHorizontal Whether movement is horizontal (true) or vertical (false)
17
+ * @param isRTL Whether layout direction is right-to-left
18
+ * @param callback Function to call with velocity updates and momentum end signal
19
+ */
20
+ computeVelocity(newOffset: number, oldOffset: number, isHorizontal: boolean, callback: (velocity: {
21
+ x: number;
22
+ y: number;
23
+ }, isMomentumEnd: boolean) => void): void;
24
+ /**
25
+ * Cleans up resources by clearing any pending timeout
26
+ */
27
+ cleanUp(): void;
28
+ }
29
+ //# sourceMappingURL=VelocityTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VelocityTracker.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/helpers/VelocityTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAc;IACpC,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAkB;IAElC,4CAA4C;IAC5C,OAAO,CAAC,SAAS,CAA+B;IAEhD;;;;;;;OAOG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,QAAQ,EAAE,CACR,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAClC,aAAa,EAAE,OAAO,KACnB,IAAI;IAuCX;;OAEG;IACH,OAAO;CAMR"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VelocityTracker = void 0;
4
+ /**
5
+ * Tracks and calculates velocity for scroll/drag movements
6
+ * Used to determine momentum scrolling behavior
7
+ */
8
+ var VelocityTracker = /** @class */ (function () {
9
+ function VelocityTracker() {
10
+ /** Timestamp of the last velocity update */
11
+ this.lastUpdateTime = Date.now();
12
+ /** Current velocity vector with x and y components */
13
+ this.velocity = { x: 0, y: 0 };
14
+ /** Reference to the momentum end timeout */
15
+ this.timeoutId = null;
16
+ }
17
+ /**
18
+ * Calculates velocity based on position change over time
19
+ * @param newOffset Current position value
20
+ * @param oldOffset Previous position value
21
+ * @param isHorizontal Whether movement is horizontal (true) or vertical (false)
22
+ * @param isRTL Whether layout direction is right-to-left
23
+ * @param callback Function to call with velocity updates and momentum end signal
24
+ */
25
+ VelocityTracker.prototype.computeVelocity = function (newOffset, oldOffset, isHorizontal, callback) {
26
+ var _this = this;
27
+ // Clear any pending momentum end timeout
28
+ this.cleanUp();
29
+ // Calculate time since last update
30
+ var currentTime = Date.now();
31
+ var timeSinceLastUpdate = Math.max(1, currentTime - this.lastUpdateTime);
32
+ // Calculate velocity as distance/time
33
+ var newVelocity = (newOffset - oldOffset) / timeSinceLastUpdate;
34
+ // console.log(
35
+ // "newVelocity",
36
+ // newOffset,
37
+ // oldOffset,
38
+ // currentTime,
39
+ // this.lastUpdateTime,
40
+ // timeSinceLastUpdate,
41
+ // newVelocity
42
+ // );
43
+ this.lastUpdateTime = currentTime;
44
+ // Apply velocity to the correct axis
45
+ this.velocity.x = isHorizontal ? newVelocity : 0;
46
+ this.velocity.y = isHorizontal ? 0 : newVelocity;
47
+ // Trigger callback with current velocity
48
+ callback(this.velocity, false);
49
+ // Set timeout to signal momentum end after 100ms of no updates
50
+ this.timeoutId = setTimeout(function () {
51
+ _this.cleanUp();
52
+ _this.lastUpdateTime = Date.now();
53
+ _this.velocity.x = 0;
54
+ _this.velocity.y = 0;
55
+ callback(_this.velocity, true);
56
+ }, 100);
57
+ };
58
+ /**
59
+ * Cleans up resources by clearing any pending timeout
60
+ */
61
+ VelocityTracker.prototype.cleanUp = function () {
62
+ if (this.timeoutId !== null) {
63
+ clearTimeout(this.timeoutId);
64
+ this.timeoutId = null;
65
+ }
66
+ };
67
+ return VelocityTracker;
68
+ }());
69
+ exports.VelocityTracker = VelocityTracker;
70
+ //# sourceMappingURL=VelocityTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VelocityTracker.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/VelocityTracker.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH;IAAA;QACE,4CAA4C;QACpC,mBAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,sDAAsD;QAC9C,aAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAElC,4CAA4C;QACpC,cAAS,GAA0B,IAAI,CAAC;IAiElD,CAAC;IA/DC;;;;;;;OAOG;IACH,yCAAe,GAAf,UACE,SAAiB,EACjB,SAAiB,EACjB,YAAqB,EACrB,QAGS;QAPX,iBA4CC;QAnCC,yCAAyC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,mCAAmC;QACnC,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAE3E,sCAAsC;QACtC,IAAM,WAAW,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,mBAAmB,CAAC;QAElE,eAAe;QACf,mBAAmB;QACnB,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,yBAAyB;QACzB,yBAAyB;QACzB,gBAAgB;QAChB,KAAK;QACL,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAElC,qCAAqC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAEjD,yCAAyC;QACzC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAE/B,+DAA+D;QAC/D,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;YAC1B,KAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjC,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,QAAQ,CAAC,KAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED;;OAEG;IACH,iCAAO,GAAP;QACE,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACH,sBAAC;AAAD,CAAC,AAxED,IAwEC;AAxEY,0CAAe"}
@@ -1,6 +1,4 @@
1
- /// <reference types="react" />
2
1
  import { RecyclerViewManager } from "../RecyclerViewManager";
3
- import { RecyclerViewProps } from "../RecyclerViewProps";
4
2
  import { CompatScroller } from "../components/CompatScroller";
5
3
  /**
6
4
  * Hook to detect when the scroll position reaches near the start or end of the list
@@ -13,7 +11,7 @@ import { CompatScroller } from "../components/CompatScroller";
13
11
  * @param props - The RecyclerViewProps containing configuration and callbacks
14
12
  * @param scrollViewRef - Reference to the scrollable container component
15
13
  */
16
- export declare function useBoundDetection<T>(recyclerViewManager: RecyclerViewManager<T>, props: RecyclerViewProps<T>, scrollViewRef: React.RefObject<CompatScroller>): {
14
+ export declare function useBoundDetection<T>(recyclerViewManager: RecyclerViewManager<T>, scrollViewRef: React.RefObject<CompatScroller>): {
17
15
  checkBounds: () => void;
18
16
  };
19
17
  //# sourceMappingURL=useBoundDetection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBoundDetection.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC3C,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;;EA0G/C"}
1
+ {"version":3,"file":"useBoundDetection.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC3C,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;;EA2J/C"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useBoundDetection = void 0;
3
+ exports.useBoundDetection = useBoundDetection;
4
4
  var react_1 = require("react");
5
- var react_2 = require("react");
5
+ var useUnmountAwareCallbacks_1 = require("./useUnmountAwareCallbacks");
6
6
  /**
7
7
  * Hook to detect when the scroll position reaches near the start or end of the list
8
8
  * and trigger the appropriate callbacks. This hook is responsible for:
@@ -14,61 +14,75 @@ var react_2 = require("react");
14
14
  * @param props - The RecyclerViewProps containing configuration and callbacks
15
15
  * @param scrollViewRef - Reference to the scrollable container component
16
16
  */
17
- function useBoundDetection(recyclerViewManager, props, scrollViewRef) {
17
+ function useBoundDetection(recyclerViewManager, scrollViewRef) {
18
18
  // Track whether we've already triggered the end reached callback to prevent duplicate calls
19
- var pendingEndReached = (0, react_2.useRef)(false);
19
+ var pendingEndReached = (0, react_1.useRef)(false);
20
20
  // Track whether we've already triggered the start reached callback to prevent duplicate calls
21
- var pendingStartReached = (0, react_2.useRef)(false);
21
+ var pendingStartReached = (0, react_1.useRef)(false);
22
22
  // Track whether we should auto-scroll to bottom when new content is added
23
- var pendingAutoscrollToBottom = (0, react_2.useRef)(false);
24
- var horizontal = props.horizontal, data = props.data, maintainVisibleContentPosition = props.maintainVisibleContentPosition;
23
+ var pendingAutoscrollToBottom = (0, react_1.useRef)(false);
24
+ var lastCheckBoundsTime = (0, react_1.useRef)(Date.now());
25
+ var data = recyclerViewManager.props.data;
26
+ var requestAnimationFrame = (0, useUnmountAwareCallbacks_1.useUnmountAwareAnimationFrame)().requestAnimationFrame;
27
+ var windowHeight = recyclerViewManager.hasLayout()
28
+ ? recyclerViewManager.getWindowSize().height
29
+ : 0;
30
+ var contentHeight = recyclerViewManager.hasLayout()
31
+ ? recyclerViewManager.getChildContainerDimensions().height
32
+ : 0;
33
+ var windowWidth = recyclerViewManager.hasLayout()
34
+ ? recyclerViewManager.getWindowSize().width
35
+ : 0;
36
+ var contentWidth = recyclerViewManager.hasLayout()
37
+ ? recyclerViewManager.getChildContainerDimensions().width
38
+ : 0;
25
39
  /**
26
40
  * Checks if the scroll position is near the start or end of the list
27
41
  * and triggers appropriate callbacks if configured.
28
42
  */
29
43
  var checkBounds = (0, react_1.useCallback)(function () {
30
- var _a, _b, _c;
44
+ var _a;
45
+ lastCheckBoundsTime.current = Date.now();
46
+ var _b = recyclerViewManager.props, onEndReached = _b.onEndReached, onStartReached = _b.onStartReached, maintainVisibleContentPosition = _b.maintainVisibleContentPosition, horizontal = _b.horizontal, onEndReachedThresholdProp = _b.onEndReachedThreshold, onStartReachedThresholdProp = _b.onStartReachedThreshold;
31
47
  // Skip all calculations if neither callback is provided and autoscroll is disabled
32
48
  var autoscrollToBottomThreshold = (_a = maintainVisibleContentPosition === null || maintainVisibleContentPosition === void 0 ? void 0 : maintainVisibleContentPosition.autoscrollToBottomThreshold) !== null && _a !== void 0 ? _a : -1;
33
- if (!props.onEndReached &&
34
- !props.onStartReached &&
35
- autoscrollToBottomThreshold < 0) {
49
+ if (!onEndReached && !onStartReached && autoscrollToBottomThreshold < 0) {
36
50
  return;
37
51
  }
38
52
  if (recyclerViewManager.getIsFirstLayoutComplete()) {
39
53
  var lastScrollOffset = recyclerViewManager.getAbsoluteLastScrollOffset();
40
54
  var contentSize = recyclerViewManager.getChildContainerDimensions();
41
55
  var windowSize = recyclerViewManager.getWindowSize();
42
- var isHorizontal = props.horizontal === true;
56
+ var isHorizontal = horizontal === true;
43
57
  // Calculate dimensions based on scroll direction
44
58
  var visibleLength = isHorizontal ? windowSize.width : windowSize.height;
45
59
  var contentLength = (isHorizontal ? contentSize.width : contentSize.height) +
46
60
  recyclerViewManager.firstItemOffset;
47
61
  // Check if we're near the end of the list
48
- if (props.onEndReached) {
49
- var onEndReachedThreshold = (_b = props.onEndReachedThreshold) !== null && _b !== void 0 ? _b : 0.5;
62
+ if (onEndReached) {
63
+ var onEndReachedThreshold = onEndReachedThresholdProp !== null && onEndReachedThresholdProp !== void 0 ? onEndReachedThresholdProp : 0.5;
50
64
  var endThresholdDistance = onEndReachedThreshold * visibleLength;
51
65
  var isNearEnd = Math.ceil(lastScrollOffset + visibleLength) >=
52
66
  contentLength - endThresholdDistance;
53
67
  if (isNearEnd && !pendingEndReached.current) {
54
68
  pendingEndReached.current = true;
55
- props.onEndReached();
69
+ onEndReached();
56
70
  }
57
71
  pendingEndReached.current = isNearEnd;
58
72
  }
59
73
  // Check if we're near the start of the list
60
- if (props.onStartReached) {
61
- var onStartReachedThreshold = (_c = props.onStartReachedThreshold) !== null && _c !== void 0 ? _c : 0.2;
74
+ if (onStartReached) {
75
+ var onStartReachedThreshold = onStartReachedThresholdProp !== null && onStartReachedThresholdProp !== void 0 ? onStartReachedThresholdProp : 0.2;
62
76
  var startThresholdDistance = onStartReachedThreshold * visibleLength;
63
77
  var isNearStart = lastScrollOffset <= startThresholdDistance;
64
78
  if (isNearStart && !pendingStartReached.current) {
65
79
  pendingStartReached.current = true;
66
- props.onStartReached();
80
+ onStartReached();
67
81
  }
68
82
  pendingStartReached.current = isNearStart;
69
83
  }
70
84
  // Handle auto-scrolling to bottom for vertical lists
71
- if (!horizontal) {
85
+ if (!isHorizontal && autoscrollToBottomThreshold >= 0) {
72
86
  var autoscrollToBottomThresholdDistance = autoscrollToBottomThreshold * visibleLength;
73
87
  var isNearBottom = Math.ceil(lastScrollOffset + visibleLength) >=
74
88
  contentLength - autoscrollToBottomThresholdDistance;
@@ -80,24 +94,42 @@ function useBoundDetection(recyclerViewManager, props, scrollViewRef) {
80
94
  }
81
95
  }
82
96
  }
83
- }, [recyclerViewManager, props]);
97
+ }, [recyclerViewManager]);
98
+ var runAutoScrollToBottomCheck = (0, react_1.useCallback)(function () {
99
+ if (pendingAutoscrollToBottom.current) {
100
+ pendingAutoscrollToBottom.current = false;
101
+ requestAnimationFrame(function () {
102
+ var _a, _b, _c;
103
+ var shouldAnimate = (_b = (_a = recyclerViewManager.props.maintainVisibleContentPosition) === null || _a === void 0 ? void 0 : _a.animateAutoScrollToBottom) !== null && _b !== void 0 ? _b : true;
104
+ (_c = scrollViewRef.current) === null || _c === void 0 ? void 0 : _c.scrollToEnd({
105
+ animated: shouldAnimate,
106
+ });
107
+ });
108
+ }
109
+ }, [requestAnimationFrame, scrollViewRef, recyclerViewManager]);
84
110
  // Reset end reached state when data changes
85
111
  (0, react_1.useMemo)(function () {
86
112
  pendingEndReached.current = false;
113
+ // needs to run only when data changes
114
+ // eslint-disable-next-line react-hooks/exhaustive-deps
87
115
  }, [data]);
88
116
  // Auto-scroll to bottom when new content is added and we're near the bottom
89
117
  (0, react_1.useEffect)(function () {
90
- if (pendingAutoscrollToBottom.current) {
91
- requestAnimationFrame(function () {
92
- var _a;
93
- (_a = scrollViewRef.current) === null || _a === void 0 ? void 0 : _a.scrollToEnd();
94
- pendingAutoscrollToBottom.current = false;
95
- });
118
+ runAutoScrollToBottomCheck();
119
+ }, [data, runAutoScrollToBottomCheck, windowHeight, windowWidth]);
120
+ // Since content changes frequently, we try and avoid doing the auto scroll during active scrolls
121
+ (0, react_1.useEffect)(function () {
122
+ if (Date.now() - lastCheckBoundsTime.current >= 100) {
123
+ runAutoScrollToBottomCheck();
96
124
  }
97
- }, [data]);
125
+ }, [
126
+ contentHeight,
127
+ contentWidth,
128
+ recyclerViewManager.firstItemOffset,
129
+ runAutoScrollToBottomCheck,
130
+ ]);
98
131
  return {
99
132
  checkBounds: checkBounds,
100
133
  };
101
134
  }
102
- exports.useBoundDetection = useBoundDetection;
103
135
  //# sourceMappingURL=useBoundDetection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBoundDetection.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useBoundDetection.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useBoundDetection.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export type LayoutStateSetter<T> = (newValue: T | ((prevValue: T) => T), skipParentLayout?: boolean) => void;
2
+ export type LayoutStateInitialValue<T> = T | (() => T);
1
3
  /**
2
4
  * Custom hook that combines state management with RecyclerView layout updates.
3
5
  * This hook provides a way to manage state that affects the layout of the RecyclerView,
@@ -8,5 +10,5 @@
8
10
  * - The current state value
9
11
  * - A setter function that updates the state and triggers a layout recalculation
10
12
  */
11
- export declare function useLayoutState<T>(initialState: T | (() => T)): [T, (newValue: T | ((prevValue: T) => T)) => void];
13
+ export declare function useLayoutState<T>(initialState: LayoutStateInitialValue<T>): [T, LayoutStateSetter<T>];
12
14
  //# sourceMappingURL=useLayoutState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLayoutState.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAC1B,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CA6BpD"}
1
+ {"version":3,"file":"useLayoutState.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CACjC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EACnC,gBAAgB,CAAC,EAAE,OAAO,KACvB,IAAI,CAAC;AAEV,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC,GACvC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CA+B3B"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useLayoutState = void 0;
3
+ exports.useLayoutState = useLayoutState;
4
4
  var tslib_1 = require("tslib");
5
5
  var react_1 = require("react");
6
6
  var RecyclerViewContextProvider_1 = require("../RecyclerViewContextProvider");
@@ -27,17 +27,18 @@ function useLayoutState(initialState) {
27
27
  * @param newValue - Either a new state value or a function that receives the previous state
28
28
  * and returns the new state
29
29
  */
30
- var setLayoutState = (0, react_1.useCallback)(function (newValue) {
30
+ var setLayoutState = (0, react_1.useCallback)(function (newValue, skipParentLayout) {
31
31
  // Update the state using either the new value or the result of the updater function
32
32
  setState(function (prevValue) {
33
33
  return typeof newValue === "function"
34
34
  ? newValue(prevValue)
35
35
  : newValue;
36
36
  });
37
- // Trigger a layout recalculation in the RecyclerView
38
- recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
37
+ if (!skipParentLayout) {
38
+ // Trigger a layout recalculation in the RecyclerView
39
+ recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
40
+ }
39
41
  }, [recyclerViewContext]);
40
42
  return [state, setLayoutState];
41
43
  }
42
- exports.useLayoutState = useLayoutState;
43
44
  //# sourceMappingURL=useLayoutState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLayoutState.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":";;;;AAAA,+BAA8C;AAE9C,8EAAwE;AAExE;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,YAA2B;IAE3B,mDAAmD;IAC7C,IAAA,KAAA,eAAoB,IAAA,gBAAQ,EAAI,YAAY,CAAC,IAAA,EAA5C,KAAK,QAAA,EAAE,QAAQ,QAA6B,CAAC;IACpD,qDAAqD;IACrD,IAAM,mBAAmB,GAAG,IAAA,oDAAsB,GAAE,CAAC;IAErD;;;;;;;OAOG;IACH,IAAM,cAAc,GAAG,IAAA,mBAAW,EAChC,UAAC,QAAmC;QAClC,oFAAoF;QACpF,QAAQ,CAAC,UAAC,SAAS;YACjB,OAAA,OAAO,QAAQ,KAAK,UAAU;gBAC5B,CAAC,CAAE,QAAgC,CAAC,SAAS,CAAC;gBAC9C,CAAC,CAAC,QAAQ;QAFZ,CAEY,CACb,CAAC;QACF,qDAAqD;QACrD,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,EAAE,CAAC;IAChC,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,CAAC;AA/BD,wCA+BC"}
1
+ {"version":3,"file":"useLayoutState.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useLayoutState.ts"],"names":[],"mappings":";;AAqBA,wCAiCC;;AAtDD,+BAA8C;AAE9C,8EAAwE;AASxE;;;;;;;;;GASG;AACH,SAAgB,cAAc,CAC5B,YAAwC;IAExC,mDAAmD;IAC7C,IAAA,KAAA,eAAoB,IAAA,gBAAQ,EAAI,YAAY,CAAC,IAAA,EAA5C,KAAK,QAAA,EAAE,QAAQ,QAA6B,CAAC;IACpD,qDAAqD;IACrD,IAAM,mBAAmB,GAAG,IAAA,oDAAsB,GAAE,CAAC;IAErD;;;;;;;OAOG;IACH,IAAM,cAAc,GAAyB,IAAA,mBAAW,EACtD,UAAC,QAAQ,EAAE,gBAAgB;QACzB,oFAAoF;QACpF,QAAQ,CAAC,UAAC,SAAS;YACjB,OAAA,OAAO,QAAQ,KAAK,UAAU;gBAC5B,CAAC,CAAE,QAAgC,CAAC,SAAS,CAAC;gBAC9C,CAAC,CAAC,QAAQ;QAFZ,CAEY,CACb,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,qDAAqD;YACrD,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Returns a function that can help create a mapping key for the items.
3
+ * Useful when doing .map on items to create a list of components.
4
+ * Using this ensures that performance is optimal for FlashList
5
+ */
6
+ export declare const useMappingHelper: () => {
7
+ getMappingKey: (itemKey: string | number | bigint, index: number) => string | number | bigint;
8
+ };
9
+ //# sourceMappingURL=useMappingHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMappingHelper.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useMappingHelper.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;6BAGf,MAAM,GAAG,MAAM,GAAG,MAAM,SAAS,MAAM;CAOpD,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useMappingHelper = void 0;
4
+ var react_1 = require("react");
5
+ var RecyclerViewContextProvider_1 = require("../RecyclerViewContextProvider");
6
+ /**
7
+ * Returns a function that can help create a mapping key for the items.
8
+ * Useful when doing .map on items to create a list of components.
9
+ * Using this ensures that performance is optimal for FlashList
10
+ */
11
+ var useMappingHelper = function () {
12
+ var recyclerViewContext = (0, RecyclerViewContextProvider_1.useRecyclerViewContext)();
13
+ var getMappingKey = (0, react_1.useCallback)(function (itemKey, index) {
14
+ return recyclerViewContext ? index : itemKey;
15
+ }, [recyclerViewContext]);
16
+ return { getMappingKey: getMappingKey };
17
+ };
18
+ exports.useMappingHelper = useMappingHelper;
19
+ //# sourceMappingURL=useMappingHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMappingHelper.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useMappingHelper.ts"],"names":[],"mappings":";;;AAAA,+BAAoC;AAEpC,8EAAwE;AAExE;;;;GAIG;AACI,IAAM,gBAAgB,GAAG;IAC9B,IAAM,mBAAmB,GAAG,IAAA,oDAAsB,GAAE,CAAC;IACrD,IAAM,aAAa,GAAG,IAAA,mBAAW,EAC/B,UAAC,OAAiC,EAAE,KAAa;QAC/C,OAAO,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,OAAO,EAAE,aAAa,eAAA,EAAE,CAAC;AAC3B,CAAC,CAAC;AAVW,QAAA,gBAAgB,oBAU3B"}
@@ -8,9 +8,9 @@ import { RecyclerViewManager } from "../RecyclerViewManager";
8
8
  * @param onLoad - Optional callback function that will be called when the list has loaded with timing information
9
9
  * @returns Object containing isLoaded state indicating whether the list has completed initial rendering
10
10
  */
11
- export declare const useOnListLoad: <T>(recyclerViewManager: RecyclerViewManager<T>, onLoad?: ((info: {
11
+ export declare const useOnListLoad: <T>(recyclerViewManager: RecyclerViewManager<T>, onLoad?: (info: {
12
12
  elapsedTimeInMs: number;
13
- }) => void) | undefined) => {
13
+ }) => void) => {
14
14
  isLoaded: boolean;
15
15
  };
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useOnLoad.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useOnLoad.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,oEAER;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI;cACvC,OAAO;CAsCrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,2DAEZ,MAAM,IAAI,SAUnB,CAAC"}
1
+ {"version":3,"file":"useOnLoad.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useOnLoad.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAK7D;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,qBAAqB,mBAAmB,CAAC,CAAC,CAAC,EAC3C,SAAS,CAAC,IAAI,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,KACnD;IAAE,QAAQ,EAAE,OAAO,CAAA;CAqCrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,qBAAqB,mBAAmB,CAAC,CAAC,CAAC,EAC3C,QAAQ,MAAM,IAAI,SAUnB,CAAC"}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useOnLoad = exports.useOnListLoad = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var react_1 = require("react");
6
- var useUnmountFlag_1 = require("./useUnmountFlag");
7
- //import { ToastAndroid } from "react-native";
6
+ var useUnmountAwareCallbacks_1 = require("./useUnmountAwareCallbacks");
7
+ // import { ToastAndroid } from "react-native";
8
8
  /**
9
9
  * Hook to track when the RecyclerView has loaded its items and notify when loading is complete.
10
10
  * Similar to FlashList's onLoad functionality, this hook tracks the time it takes to render
@@ -18,8 +18,8 @@ var useOnListLoad = function (recyclerViewManager, onLoad) {
18
18
  var loadStartTimeRef = (0, react_1.useRef)(Date.now());
19
19
  var _a = tslib_1.__read((0, react_1.useState)(false), 2), isLoaded = _a[0], setIsLoaded = _a[1];
20
20
  var dataLength = recyclerViewManager.getDataLength();
21
- //const dataCollector = useRef<number[]>([]);
22
- var isUnmounted = (0, useUnmountFlag_1.useUnmountFlag)();
21
+ // const dataCollector = useRef<number[]>([]);
22
+ var requestAnimationFrame = (0, useUnmountAwareCallbacks_1.useUnmountAwareAnimationFrame)().requestAnimationFrame;
23
23
  // Track render cycles by collecting elapsed time on each render
24
24
  // useEffect(() => {
25
25
  // const elapsedTimeInMs = Date.now() - loadStartTimeRef.current;
@@ -27,6 +27,7 @@ var useOnListLoad = function (recyclerViewManager, onLoad) {
27
27
  // });
28
28
  (0, react_1.useMemo)(function () {
29
29
  loadStartTimeRef.current = Date.now();
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
31
  }, [dataLength]);
31
32
  (0, exports.useOnLoad)(recyclerViewManager, function () {
32
33
  var elapsedTimeInMs = Date.now() - loadStartTimeRef.current;
@@ -39,13 +40,11 @@ var useOnListLoad = function (recyclerViewManager, onLoad) {
39
40
  // `onLoad called after ${dataCollectorString}`,
40
41
  // ToastAndroid.SHORT
41
42
  // );
42
- //console.log("----------> dataCollector", dataCollectorString);
43
- //console.log("----------> elapsedTimeInMs", elapsedTimeInMs);
43
+ // console.log("----------> dataCollector", dataCollectorString);
44
+ // console.log("----------> FlashList v2 load in", `${elapsedTimeInMs} ms`);
44
45
  requestAnimationFrame(function () {
45
- if (!isUnmounted.current) {
46
- onLoad === null || onLoad === void 0 ? void 0 : onLoad({ elapsedTimeInMs: elapsedTimeInMs });
47
- setIsLoaded(true);
48
- }
46
+ onLoad === null || onLoad === void 0 ? void 0 : onLoad({ elapsedTimeInMs: elapsedTimeInMs });
47
+ setIsLoaded(true);
49
48
  });
50
49
  });
51
50
  return { isLoaded: isLoaded };
@@ -1 +1 @@
1
- {"version":3,"file":"useOnLoad.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useOnLoad.ts"],"names":[],"mappings":";;;;AAAA,+BAA6D;AAE7D,mDAAkD;AAClD,8CAA8C;AAE9C;;;;;;;;GAQG;AACI,IAAM,aAAa,GAAG,UAC3B,mBAA2C,EAC3C,MAAoD;IAEpD,IAAM,gBAAgB,GAAG,IAAA,cAAM,EAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAA,KAAA,eAA0B,IAAA,gBAAQ,EAAU,KAAK,CAAC,IAAA,EAAjD,QAAQ,QAAA,EAAE,WAAW,QAA4B,CAAC;IACzD,IAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC;IACvD,6CAA6C;IAC7C,IAAM,WAAW,GAAG,IAAA,+BAAc,GAAE,CAAC;IACrC,gEAAgE;IAChE,oBAAoB;IACpB,mEAAmE;IACnE,kDAAkD;IAClD,MAAM;IAEN,IAAA,eAAO,EAAC;QACN,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,mBAAmB,EAAE;QAC7B,IAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC9D,uDAAuD;QACvD,8CAA8C;QAC9C,oDAAoD;QACpD,uCAAuC;QACvC,iBAAiB;QACjB,sBAAsB;QACtB,kDAAkD;QAClD,uBAAuB;QACvB,KAAK;QACL,gEAAgE;QAChE,8DAA8D;QAC9D,qBAAqB,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBACxB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,EAAE,eAAe,iBAAA,EAAE,CAAC,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,UAAA,EAAE,CAAC;AACtB,CAAC,CAAC;AAzCW,QAAA,aAAa,iBAyCxB;AAEF;;;;;;;GAOG;AACI,IAAM,SAAS,GAAG,UACvB,mBAA2C,EAC3C,MAAkB;IAElB,IAAM,QAAQ,GAAG,IAAA,cAAM,EAAU,KAAK,CAAC,CAAC;IACxC,IAAA,iBAAS,EAAC;QACR,kEAAkE;QAClE,IAAI,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,MAAM,EAAE,CAAC;SACV;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAZW,QAAA,SAAS,aAYpB"}
1
+ {"version":3,"file":"useOnLoad.js","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useOnLoad.ts"],"names":[],"mappings":";;;;AAAA,+BAA6D;AAI7D,uEAA2E;AAC3E,+CAA+C;AAE/C;;;;;;;;GAQG;AACI,IAAM,aAAa,GAAG,UAC3B,mBAA2C,EAC3C,MAAoD;IAEpD,IAAM,gBAAgB,GAAG,IAAA,cAAM,EAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,IAAA,KAAA,eAA0B,IAAA,gBAAQ,EAAU,KAAK,CAAC,IAAA,EAAjD,QAAQ,QAAA,EAAE,WAAW,QAA4B,CAAC;IACzD,IAAM,UAAU,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC;IACvD,8CAA8C;IACtC,IAAA,qBAAqB,GAAK,IAAA,wDAA6B,GAAE,sBAApC,CAAqC;IAClE,gEAAgE;IAChE,oBAAoB;IACpB,mEAAmE;IACnE,kDAAkD;IAClD,MAAM;IAEN,IAAA,eAAO,EAAC;QACN,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,uDAAuD;IACzD,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,mBAAmB,EAAE;QAC7B,IAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC9D,uDAAuD;QACvD,8CAA8C;QAC9C,oDAAoD;QACpD,uCAAuC;QACvC,iBAAiB;QACjB,sBAAsB;QACtB,kDAAkD;QAClD,uBAAuB;QACvB,KAAK;QACL,iEAAiE;QACjE,4EAA4E;QAC5E,qBAAqB,CAAC;YACpB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAG,EAAE,eAAe,iBAAA,EAAE,CAAC,CAAC;YAC9B,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,UAAA,EAAE,CAAC;AACtB,CAAC,CAAC;AAxCW,QAAA,aAAa,iBAwCxB;AAEF;;;;;;;GAOG;AACI,IAAM,SAAS,GAAG,UACvB,mBAA2C,EAC3C,MAAkB;IAElB,IAAM,QAAQ,GAAG,IAAA,cAAM,EAAU,KAAK,CAAC,CAAC;IACxC,IAAA,iBAAS,EAAC;QACR,kEAAkE;QAClE,IAAI,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACxE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAZW,QAAA,SAAS,aAYpB"}
@@ -1,54 +1,8 @@
1
1
  import { RefObject } from "react";
2
- import { RecyclerViewProps } from "../RecyclerViewProps";
2
+ import { FlashListRef } from "../../FlashListRef";
3
3
  import { CompatScroller } from "../components/CompatScroller";
4
4
  import { RecyclerViewManager } from "../RecyclerViewManager";
5
5
  import { ScrollAnchorRef } from "../components/ScrollAnchor";
6
- /**
7
- * Parameters for scrolling to a specific position in the list.
8
- * Extends ScrollToEdgeParams to include view positioning options.
9
- */
10
- export interface ScrollToParams extends ScrollToEdgeParams {
11
- /** Position of the target item relative to the viewport (0 = top, 0.5 = center, 1 = bottom) */
12
- viewPosition?: number;
13
- /** Additional offset to apply after viewPosition calculation */
14
- viewOffset?: number;
15
- }
16
- /**
17
- * Parameters for scrolling to a specific offset in the list.
18
- * Used when you want to scroll to an exact pixel position.
19
- */
20
- export interface ScrollToOffsetParams extends ScrollToParams {
21
- /** The pixel offset to scroll to */
22
- offset: number;
23
- /**
24
- * If true, the first item offset will not be added to the offset calculation.
25
- * First offset represents header size or top padding.
26
- */
27
- skipFirstItemOffset?: boolean;
28
- }
29
- /**
30
- * Parameters for scrolling to a specific index in the list.
31
- * Used when you want to scroll to a specific item by its position in the data array.
32
- */
33
- export interface ScrollToIndexParams extends ScrollToParams {
34
- /** The index of the item to scroll to */
35
- index: number;
36
- }
37
- /**
38
- * Parameters for scrolling to a specific item in the list.
39
- * Used when you want to scroll to a specific item by its data value.
40
- */
41
- export interface ScrollToItemParams<T> extends ScrollToParams {
42
- /** The item to scroll to */
43
- item: T;
44
- }
45
- /**
46
- * Base parameters for scrolling to the edges of the list.
47
- */
48
- export interface ScrollToEdgeParams {
49
- /** Whether the scroll should be animated */
50
- animated?: boolean;
51
- }
52
6
  /**
53
7
  * Comprehensive hook that manages RecyclerView scrolling behavior and provides
54
8
  * imperative methods for controlling the RecyclerView.
@@ -65,8 +19,10 @@ export interface ScrollToEdgeParams {
65
19
  * @param scrollAnchorRef - Reference to the scroll anchor component
66
20
  * @param props - The RecyclerViewProps containing configuration
67
21
  */
68
- export declare function useRecyclerViewController<T>(recyclerViewManager: RecyclerViewManager<T>, ref: React.Ref<any>, scrollViewRef: RefObject<CompatScroller>, scrollAnchorRef: React.RefObject<ScrollAnchorRef>, props: RecyclerViewProps<T>): {
69
- applyContentOffset: () => Promise<void>;
22
+ export declare function useRecyclerViewController<T>(recyclerViewManager: RecyclerViewManager<T>, ref: React.Ref<FlashListRef<T>>, scrollViewRef: RefObject<CompatScroller>, scrollAnchorRef: React.RefObject<ScrollAnchorRef>): {
23
+ applyOffsetCorrection: () => void;
24
+ computeFirstVisibleIndexForOffsetCorrection: () => void;
70
25
  applyInitialScrollIndex: () => void;
26
+ handlerMethods: FlashListRef<T>;
71
27
  };
72
28
  //# sourceMappingURL=useRecyclerViewController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRecyclerViewController.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useRecyclerViewController.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,CAAE,SAAQ,cAAc;IAC3D,4BAA4B;IAC5B,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC3C,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EACnB,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,EACxC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,EACjD,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;;;EA6Y5B"}
1
+ {"version":3,"file":"useRecyclerViewController.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/hooks/useRecyclerViewController.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAGf,OAAO,EAKL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC3C,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC/B,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,EACxC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;;;;;EAkkBlD"}