@shopify/flash-list 2.0.0 → 2.0.2-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +97 -27
  2. package/RNFlashList.podspec +37 -0
  3. package/android/build.gradle +89 -0
  4. package/android/src/main/AndroidManifest.xml +3 -0
  5. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutShadow.kt +105 -0
  6. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutView.kt +158 -0
  7. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/AutoLayoutViewManager.kt +70 -0
  8. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/BlankAreaEvent.kt +29 -0
  9. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainer.java +16 -0
  10. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerImpl.kt +16 -0
  11. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/CellContainerManager.kt +34 -0
  12. package/android/src/main/kotlin/com/shopify/reactnative/flash_list/FlashListPackage.kt +19 -0
  13. package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerDelegate.java +47 -0
  14. package/android/src/paper/java/com/facebook/react/viewmanagers/AutoLayoutViewManagerInterface.java +21 -0
  15. package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerDelegate.java +32 -0
  16. package/android/src/paper/java/com/facebook/react/viewmanagers/CellContainerManagerInterface.java +16 -0
  17. package/android/src/test/java/com/shopify/reactnative/flash_list/AutoLayoutShadowTest.kt +147 -0
  18. package/android/src/test/java/com/shopify/reactnative/flash_list/models/Rect.kt +61 -0
  19. package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestCollection.kt +6 -0
  20. package/android/src/test/java/com/shopify/reactnative/flash_list/models/TestDataModel.kt +8 -0
  21. package/android/src/test/resources/LayoutTestData.json +788 -0
  22. package/dist/AnimatedFlashList.js +2 -2
  23. package/dist/AnimatedFlashList.js.map +1 -1
  24. package/dist/FlashList.d.ts +167 -1
  25. package/dist/FlashList.d.ts.map +1 -1
  26. package/dist/FlashList.js +595 -3
  27. package/dist/FlashList.js.map +1 -1
  28. package/dist/FlashListProps.d.ts +63 -2
  29. package/dist/FlashListProps.d.ts.map +1 -1
  30. package/dist/FlashListProps.js.map +1 -1
  31. package/dist/GridLayoutProviderWithProps.d.ts +42 -0
  32. package/dist/GridLayoutProviderWithProps.d.ts.map +1 -0
  33. package/dist/GridLayoutProviderWithProps.js +114 -0
  34. package/dist/GridLayoutProviderWithProps.js.map +1 -0
  35. package/dist/MasonryFlashList.d.ts +51 -0
  36. package/dist/MasonryFlashList.d.ts.map +1 -0
  37. package/dist/MasonryFlashList.js +252 -0
  38. package/dist/MasonryFlashList.js.map +1 -0
  39. package/dist/PureComponentWrapper.d.ts +22 -0
  40. package/dist/PureComponentWrapper.d.ts.map +1 -0
  41. package/dist/PureComponentWrapper.js +37 -0
  42. package/dist/PureComponentWrapper.js.map +1 -0
  43. package/dist/__tests__/ContentContainerUtils.test.d.ts +2 -0
  44. package/dist/__tests__/ContentContainerUtils.test.d.ts.map +1 -0
  45. package/dist/__tests__/ContentContainerUtils.test.js +85 -0
  46. package/dist/__tests__/ContentContainerUtils.test.js.map +1 -0
  47. package/dist/__tests__/FlashList.test.d.ts +2 -0
  48. package/dist/__tests__/FlashList.test.d.ts.map +1 -0
  49. package/dist/__tests__/FlashList.test.js +902 -0
  50. package/dist/__tests__/FlashList.test.js.map +1 -0
  51. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts +2 -0
  52. package/dist/__tests__/GridLayoutProviderWithProps.test.d.ts.map +1 -0
  53. package/dist/__tests__/GridLayoutProviderWithProps.test.js +143 -0
  54. package/dist/__tests__/GridLayoutProviderWithProps.test.js.map +1 -0
  55. package/dist/__tests__/MasonryFlashList.test.d.ts +2 -0
  56. package/dist/__tests__/MasonryFlashList.test.d.ts.map +1 -0
  57. package/dist/__tests__/MasonryFlashList.test.js +254 -0
  58. package/dist/__tests__/MasonryFlashList.test.js.map +1 -0
  59. package/dist/__tests__/PlatformHelper.web.test.d.ts +2 -0
  60. package/dist/__tests__/PlatformHelper.web.test.d.ts.map +1 -0
  61. package/dist/__tests__/PlatformHelper.web.test.js +33 -0
  62. package/dist/__tests__/PlatformHelper.web.test.js.map +1 -0
  63. package/dist/__tests__/ViewabilityHelper.test.js +4 -3
  64. package/dist/__tests__/ViewabilityHelper.test.js.map +1 -1
  65. package/dist/__tests__/helpers/mountFlashList.d.ts +19 -0
  66. package/dist/__tests__/helpers/mountFlashList.d.ts.map +1 -0
  67. package/dist/__tests__/helpers/mountFlashList.js +44 -0
  68. package/dist/__tests__/helpers/mountFlashList.js.map +1 -0
  69. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts +18 -0
  70. package/dist/__tests__/helpers/mountMasonryFlashList.d.ts.map +1 -0
  71. package/dist/__tests__/helpers/mountMasonryFlashList.js +49 -0
  72. package/dist/__tests__/helpers/mountMasonryFlashList.js.map +1 -0
  73. package/dist/__tests__/useBlankAreaTracker.test.d.ts +2 -0
  74. package/dist/__tests__/useBlankAreaTracker.test.d.ts.map +1 -0
  75. package/dist/__tests__/useBlankAreaTracker.test.js +179 -0
  76. package/dist/__tests__/useBlankAreaTracker.test.js.map +1 -0
  77. package/dist/benchmark/JSFPSMonitor.d.ts.map +1 -1
  78. package/dist/benchmark/JSFPSMonitor.js +1 -2
  79. package/dist/benchmark/JSFPSMonitor.js.map +1 -1
  80. package/dist/benchmark/useBenchmark.d.ts +4 -2
  81. package/dist/benchmark/useBenchmark.d.ts.map +1 -1
  82. package/dist/benchmark/useBenchmark.js +24 -12
  83. package/dist/benchmark/useBenchmark.js.map +1 -1
  84. package/dist/benchmark/useBlankAreaTracker.d.ts +34 -0
  85. package/dist/benchmark/useBlankAreaTracker.d.ts.map +1 -0
  86. package/dist/benchmark/useBlankAreaTracker.js +66 -0
  87. package/dist/benchmark/useBlankAreaTracker.js.map +1 -0
  88. package/dist/benchmark/useFlatListBenchmark.d.ts.map +1 -1
  89. package/dist/benchmark/useFlatListBenchmark.js +1 -2
  90. package/dist/benchmark/useFlatListBenchmark.js.map +1 -1
  91. package/dist/enableNewCore.d.ts +3 -0
  92. package/dist/enableNewCore.d.ts.map +1 -0
  93. package/dist/enableNewCore.js +25 -0
  94. package/dist/enableNewCore.js.map +1 -0
  95. package/dist/errors/CustomError.d.ts +8 -0
  96. package/dist/errors/CustomError.d.ts.map +1 -0
  97. package/dist/errors/CustomError.js +14 -0
  98. package/dist/errors/CustomError.js.map +1 -0
  99. package/dist/errors/ExceptionList.d.ts +24 -0
  100. package/dist/errors/ExceptionList.d.ts.map +1 -0
  101. package/dist/errors/ExceptionList.js +26 -0
  102. package/dist/errors/ExceptionList.js.map +1 -0
  103. package/dist/errors/Warnings.d.ts +9 -0
  104. package/dist/errors/Warnings.d.ts.map +1 -0
  105. package/dist/errors/Warnings.js +13 -0
  106. package/dist/errors/Warnings.js.map +1 -0
  107. package/dist/index.d.ts +9 -3
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +29 -7
  110. package/dist/index.js.map +1 -1
  111. package/dist/native/auto-layout/AutoLayoutView.d.ts +22 -0
  112. package/dist/native/auto-layout/AutoLayoutView.d.ts.map +1 -0
  113. package/dist/native/auto-layout/AutoLayoutView.js +48 -0
  114. package/dist/native/auto-layout/AutoLayoutView.js.map +1 -0
  115. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts +4 -0
  116. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.d.ts.map +1 -0
  117. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js +6 -0
  118. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.android.js.map +1 -0
  119. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts +5 -0
  120. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.d.ts.map +1 -0
  121. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts +4 -0
  122. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.d.ts.map +1 -0
  123. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js +6 -0
  124. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.ios.js.map +1 -0
  125. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js +6 -0
  126. package/dist/native/auto-layout/AutoLayoutViewNativeComponent.js.map +1 -0
  127. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts +16 -0
  128. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.d.ts.map +1 -0
  129. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js +3 -0
  130. package/dist/native/auto-layout/AutoLayoutViewNativeComponentProps.js.map +1 -0
  131. package/dist/native/cell-container/CellContainer.android.d.ts +6 -0
  132. package/dist/native/cell-container/CellContainer.android.d.ts.map +1 -0
  133. package/dist/native/cell-container/CellContainer.android.js +9 -0
  134. package/dist/native/cell-container/CellContainer.android.js.map +1 -0
  135. package/dist/native/cell-container/CellContainer.d.ts +8 -0
  136. package/dist/native/cell-container/CellContainer.d.ts.map +1 -0
  137. package/dist/native/cell-container/CellContainer.ios.d.ts +6 -0
  138. package/dist/native/cell-container/CellContainer.ios.d.ts.map +1 -0
  139. package/dist/native/cell-container/CellContainer.ios.js +9 -0
  140. package/dist/native/cell-container/CellContainer.ios.js.map +1 -0
  141. package/dist/native/cell-container/CellContainer.js +11 -0
  142. package/dist/native/cell-container/CellContainer.js.map +1 -0
  143. package/dist/native/cell-container/CellContainer.web.d.ts +7 -0
  144. package/dist/native/cell-container/CellContainer.web.d.ts.map +1 -0
  145. package/dist/native/cell-container/CellContainer.web.js +13 -0
  146. package/dist/native/cell-container/CellContainer.web.js.map +1 -0
  147. package/dist/native/config/PlatformHelper.android.d.ts +22 -1
  148. package/dist/native/config/PlatformHelper.android.d.ts.map +1 -1
  149. package/dist/native/config/PlatformHelper.android.js +16 -1
  150. package/dist/native/config/PlatformHelper.android.js.map +1 -1
  151. package/dist/native/config/PlatformHelper.d.ts +22 -1
  152. package/dist/native/config/PlatformHelper.d.ts.map +1 -1
  153. package/dist/native/config/PlatformHelper.ios.d.ts +22 -1
  154. package/dist/native/config/PlatformHelper.ios.d.ts.map +1 -1
  155. package/dist/native/config/PlatformHelper.ios.js +15 -1
  156. package/dist/native/config/PlatformHelper.ios.js.map +1 -1
  157. package/dist/native/config/PlatformHelper.js +16 -1
  158. package/dist/native/config/PlatformHelper.js.map +1 -1
  159. package/dist/native/config/PlatformHelper.web.d.ts +23 -1
  160. package/dist/native/config/PlatformHelper.web.d.ts.map +1 -1
  161. package/dist/native/config/PlatformHelper.web.js +18 -1
  162. package/dist/native/config/PlatformHelper.web.js.map +1 -1
  163. package/dist/recyclerview/RecyclerView.d.ts.map +1 -1
  164. package/dist/recyclerview/RecyclerView.js +6 -6
  165. package/dist/recyclerview/RecyclerView.js.map +1 -1
  166. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -1
  167. package/dist/recyclerview/RecyclerViewManager.js +8 -9
  168. package/dist/recyclerview/RecyclerViewManager.js.map +1 -1
  169. package/dist/recyclerview/RecyclerViewProps.d.ts +8 -1
  170. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -1
  171. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts +3 -0
  172. package/dist/recyclerview/helpers/RenderTimeTracker.d.ts.map +1 -1
  173. package/dist/recyclerview/helpers/RenderTimeTracker.js +7 -0
  174. package/dist/recyclerview/helpers/RenderTimeTracker.js.map +1 -1
  175. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -1
  176. package/dist/recyclerview/hooks/useRecyclerViewController.js +0 -4
  177. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -1
  178. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -1
  179. package/dist/recyclerview/layout-managers/LayoutManager.js +1 -2
  180. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -1
  181. package/dist/specs/AutoLayoutNativeComponent.d.ts +18 -0
  182. package/dist/specs/AutoLayoutNativeComponent.d.ts.map +1 -0
  183. package/dist/specs/AutoLayoutNativeComponent.js +6 -0
  184. package/dist/specs/AutoLayoutNativeComponent.js.map +1 -0
  185. package/dist/specs/CellContainerNativeComponent.d.ts +8 -0
  186. package/dist/specs/CellContainerNativeComponent.d.ts.map +1 -0
  187. package/dist/specs/CellContainerNativeComponent.js +6 -0
  188. package/dist/specs/CellContainerNativeComponent.js.map +1 -0
  189. package/dist/tsconfig.tsbuildinfo +1 -1
  190. package/dist/utils/ContentContainerUtils.d.ts +27 -0
  191. package/dist/utils/ContentContainerUtils.d.ts.map +1 -0
  192. package/dist/utils/ContentContainerUtils.js +48 -0
  193. package/dist/utils/ContentContainerUtils.js.map +1 -0
  194. package/dist/viewability/ViewToken.d.ts.map +1 -0
  195. package/dist/viewability/ViewToken.js.map +1 -0
  196. package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.d.ts +2 -2
  197. package/dist/viewability/ViewabilityHelper.d.ts.map +1 -0
  198. package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.js +4 -2
  199. package/dist/{recyclerview/viewability → viewability}/ViewabilityHelper.js.map +1 -1
  200. package/dist/{recyclerview/viewability → viewability}/ViewabilityManager.d.ts +3 -3
  201. package/dist/viewability/ViewabilityManager.d.ts.map +1 -0
  202. package/dist/{recyclerview/viewability → viewability}/ViewabilityManager.js +16 -16
  203. package/dist/viewability/ViewabilityManager.js.map +1 -0
  204. package/ios/RNFlashList.xcodeproj/project.pbxproj +3 -0
  205. package/ios/RNFlashList.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  206. package/ios/Sources/AutoLayoutView.swift +294 -0
  207. package/ios/Sources/AutoLayoutViewComponentView.h +16 -0
  208. package/ios/Sources/AutoLayoutViewComponentView.mm +90 -0
  209. package/ios/Sources/AutoLayoutViewManager.mm +14 -0
  210. package/ios/Sources/AutoLayoutViewManager.swift +12 -0
  211. package/ios/Sources/CellContainerComponentView.h +18 -0
  212. package/ios/Sources/CellContainerComponentView.mm +62 -0
  213. package/ios/Sources/CellContainerManager.mm +8 -0
  214. package/ios/Sources/CellContainerManager.swift +12 -0
  215. package/ios/Sources/FlatListPro-Bridging-Header.h +11 -0
  216. package/ios/Tests/AutoLayoutViewTests.swift +113 -0
  217. package/package.json +14 -3
  218. package/src/AnimatedFlashList.ts +2 -2
  219. package/src/FlashList.tsx +953 -0
  220. package/src/FlashListProps.ts +79 -3
  221. package/src/GridLayoutProviderWithProps.ts +180 -0
  222. package/src/MasonryFlashList.tsx +476 -0
  223. package/src/PureComponentWrapper.tsx +42 -0
  224. package/src/__tests__/ContentContainerUtils.test.ts +130 -0
  225. package/src/__tests__/FlashList.test.tsx +1001 -0
  226. package/src/__tests__/GridLayoutProviderWithProps.test.ts +179 -0
  227. package/src/__tests__/MasonryFlashList.test.ts +292 -0
  228. package/src/__tests__/PlatformHelper.web.test.ts +45 -0
  229. package/src/__tests__/ViewabilityHelper.test.ts +14 -13
  230. package/src/__tests__/helpers/mountFlashList.tsx +62 -0
  231. package/src/__tests__/helpers/mountMasonryFlashList.tsx +70 -0
  232. package/src/__tests__/useBlankAreaTracker.test.tsx +206 -0
  233. package/src/benchmark/JSFPSMonitor.ts +3 -3
  234. package/src/benchmark/useBenchmark.ts +40 -12
  235. package/src/benchmark/useBlankAreaTracker.ts +117 -0
  236. package/src/benchmark/useFlatListBenchmark.ts +1 -3
  237. package/src/enableNewCore.ts +24 -0
  238. package/src/errors/CustomError.ts +10 -0
  239. package/src/errors/ExceptionList.ts +28 -0
  240. package/src/errors/Warnings.ts +15 -0
  241. package/src/index.ts +43 -7
  242. package/src/native/auto-layout/AutoLayoutView.tsx +73 -0
  243. package/src/native/auto-layout/AutoLayoutViewNativeComponent.android.ts +7 -0
  244. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ios.ts +7 -0
  245. package/src/native/auto-layout/AutoLayoutViewNativeComponent.ts +7 -0
  246. package/src/native/auto-layout/AutoLayoutViewNativeComponentProps.ts +17 -0
  247. package/src/native/cell-container/CellContainer.android.ts +7 -0
  248. package/src/native/cell-container/CellContainer.ios.ts +7 -0
  249. package/src/native/cell-container/CellContainer.tsx +14 -0
  250. package/src/native/cell-container/CellContainer.web.tsx +9 -0
  251. package/src/native/config/PlatformHelper.android.ts +25 -1
  252. package/src/native/config/PlatformHelper.ios.ts +24 -1
  253. package/src/native/config/PlatformHelper.ts +25 -1
  254. package/src/native/config/PlatformHelper.web.ts +30 -1
  255. package/src/recyclerview/RecyclerView.tsx +11 -6
  256. package/src/recyclerview/RecyclerViewManager.ts +18 -9
  257. package/src/recyclerview/RecyclerViewProps.ts +11 -1
  258. package/src/recyclerview/helpers/RenderTimeTracker.ts +8 -0
  259. package/src/recyclerview/hooks/useRecyclerViewController.tsx +0 -4
  260. package/src/recyclerview/layout-managers/LayoutManager.ts +1 -2
  261. package/src/specs/AutoLayoutNativeComponent.ts +24 -0
  262. package/src/specs/CellContainerNativeComponent.ts +9 -0
  263. package/src/utils/ContentContainerUtils.ts +92 -0
  264. package/src/{recyclerview/viewability → viewability}/ViewabilityHelper.ts +9 -8
  265. package/src/{recyclerview/viewability → viewability}/ViewabilityManager.ts +20 -18
  266. package/dist/errors/ErrorMessages.d.ts +0 -16
  267. package/dist/errors/ErrorMessages.d.ts.map +0 -1
  268. package/dist/errors/ErrorMessages.js +0 -19
  269. package/dist/errors/ErrorMessages.js.map +0 -1
  270. package/dist/errors/WarningMessages.d.ts +0 -4
  271. package/dist/errors/WarningMessages.d.ts.map +0 -1
  272. package/dist/errors/WarningMessages.js +0 -7
  273. package/dist/errors/WarningMessages.js.map +0 -1
  274. package/dist/isNewArch.d.ts +0 -2
  275. package/dist/isNewArch.d.ts.map +0 -1
  276. package/dist/isNewArch.js +0 -25
  277. package/dist/isNewArch.js.map +0 -1
  278. package/dist/recyclerview/viewability/ViewToken.d.ts.map +0 -1
  279. package/dist/recyclerview/viewability/ViewToken.js.map +0 -1
  280. package/dist/recyclerview/viewability/ViewabilityHelper.d.ts.map +0 -1
  281. package/dist/recyclerview/viewability/ViewabilityManager.d.ts.map +0 -1
  282. package/dist/recyclerview/viewability/ViewabilityManager.js.map +0 -1
  283. package/src/FlashList.ts +0 -1
  284. package/src/errors/ErrorMessages.ts +0 -26
  285. package/src/errors/WarningMessages.ts +0 -4
  286. package/src/isNewArch.ts +0 -25
  287. /package/dist/{recyclerview/viewability → viewability}/ViewToken.d.ts +0 -0
  288. /package/dist/{recyclerview/viewability → viewability}/ViewToken.js +0 -0
  289. /package/src/{recyclerview/viewability → viewability}/ViewToken.ts +0 -0
package/src/index.ts CHANGED
@@ -1,17 +1,25 @@
1
- // Keep this unmodified for TS type checking
2
- import { isNewArch } from "./isNewArch";
3
- import { ErrorMessages } from "./errors/ErrorMessages";
1
+ // eslint-disable-next-line import/no-named-default
2
+ import { default as OriginalFlashList } from "./FlashList";
3
+ import { isNewCoreEnabled } from "./enableNewCore";
4
+ import { RecyclerView } from "./recyclerview/RecyclerView";
4
5
 
5
- export { FlashList } from "./FlashList";
6
+ // Keep this unmodified for TS type checking
7
+ export { default as FlashList } from "./FlashList";
6
8
  export { FlashListRef } from "./FlashListRef";
7
9
  export {
8
10
  FlashListProps,
11
+ ContentStyle,
9
12
  ListRenderItem,
10
13
  ListRenderItemInfo,
11
14
  RenderTarget,
12
15
  RenderTargetOptions,
13
16
  } from "./FlashListProps";
14
17
  export { default as AnimatedFlashList } from "./AnimatedFlashList";
18
+ export {
19
+ useOnNativeBlankAreaEvents,
20
+ BlankAreaEventHandler,
21
+ BlankAreaEvent,
22
+ } from "./native/auto-layout/AutoLayoutView";
15
23
  export {
16
24
  useBenchmark,
17
25
  BenchmarkParams,
@@ -22,18 +30,46 @@ export {
22
30
  useFlatListBenchmark,
23
31
  FlatListBenchmarkParams,
24
32
  } from "./benchmark/useFlatListBenchmark";
33
+ export {
34
+ useBlankAreaTracker,
35
+ BlankAreaTrackerResult,
36
+ BlankAreaTrackerConfig,
37
+ } from "./benchmark/useBlankAreaTracker";
38
+ export {
39
+ MasonryFlashList,
40
+ MasonryFlashListProps,
41
+ MasonryFlashListScrollEvent,
42
+ MasonryFlashListRef,
43
+ MasonryListItem,
44
+ MasonryListRenderItem,
45
+ MasonryListRenderItemInfo,
46
+ } from "./MasonryFlashList";
25
47
  export { useLayoutState } from "./recyclerview/hooks/useLayoutState";
26
48
  export { useRecyclingState } from "./recyclerview/hooks/useRecyclingState";
27
49
  export { useMappingHelper } from "./recyclerview/hooks/useMappingHelper";
28
50
  export { JSFPSMonitor, JSFPSResult } from "./benchmark/JSFPSMonitor";
29
51
  export { autoScroll, Cancellable } from "./benchmark/AutoScrollHelper";
30
- export { default as ViewToken } from "./recyclerview/viewability/ViewToken";
52
+ export { default as ViewToken } from "./viewability/ViewToken";
53
+ export { default as CellContainer } from "./native/cell-container/CellContainer";
54
+ export { RecyclerView } from "./recyclerview/RecyclerView";
55
+ export { RecyclerViewProps } from "./recyclerview/RecyclerViewProps";
31
56
  export { useFlashListContext } from "./recyclerview/RecyclerViewContextProvider";
32
57
  export {
33
58
  LayoutCommitObserver,
34
59
  LayoutCommitObserverProps,
35
60
  } from "./recyclerview/LayoutCommitObserver";
36
61
 
37
- if (!isNewArch()) {
38
- throw new Error(ErrorMessages.flashListV2OnlySupportsNewArchitecture);
62
+ // @ts-ignore - This is ignored by TypeScript but will be present in the compiled JS
63
+ // In the compiled JS, this will override the previous FlashList export with a conditional one
64
+ if (
65
+ typeof module !== "undefined" &&
66
+ module.exports &&
67
+ process?.env?.NODE_ENV !== "test"
68
+ ) {
69
+ Object.defineProperty(module.exports, "FlashList", {
70
+ get() {
71
+ return isNewCoreEnabled() ? RecyclerView : OriginalFlashList;
72
+ },
73
+ configurable: true,
74
+ });
39
75
  }
@@ -0,0 +1,73 @@
1
+ import React, { useEffect, ReactNode } from "react";
2
+ import { LayoutChangeEvent } from "react-native";
3
+
4
+ import AutoLayoutViewNativeComponent from "./AutoLayoutViewNativeComponent";
5
+ import { OnBlankAreaEvent } from "./AutoLayoutViewNativeComponentProps";
6
+
7
+ export type BlankAreaEventHandler = (blankAreaEvent: BlankAreaEvent) => void;
8
+ const listeners: BlankAreaEventHandler[] = [];
9
+
10
+ export const useOnNativeBlankAreaEvents = (
11
+ onBlankAreaEvent: (blankAreaEvent: BlankAreaEvent) => void
12
+ ) => {
13
+ useEffect(() => {
14
+ listeners.push(onBlankAreaEvent);
15
+ return () => {
16
+ listeners.filter((callback) => callback !== onBlankAreaEvent);
17
+ };
18
+ }, [onBlankAreaEvent]);
19
+ };
20
+
21
+ export interface BlankAreaEvent {
22
+ offsetStart: number;
23
+ offsetEnd: number;
24
+ blankArea: number;
25
+ }
26
+
27
+ export interface AutoLayoutViewProps {
28
+ children?: ReactNode;
29
+ onBlankAreaEvent?: BlankAreaEventHandler;
30
+ onLayout?: (event: LayoutChangeEvent) => void;
31
+ disableAutoLayout?: boolean;
32
+ }
33
+
34
+ class AutoLayoutView extends React.Component<AutoLayoutViewProps> {
35
+ private onBlankAreaEventCallback = ({
36
+ nativeEvent,
37
+ }: OnBlankAreaEvent): void => {
38
+ const blankArea = Math.max(nativeEvent.offsetStart, nativeEvent.offsetEnd);
39
+ const blankEventValue = {
40
+ blankArea,
41
+ offsetStart: nativeEvent.offsetStart,
42
+ offsetEnd: nativeEvent.offsetEnd,
43
+ };
44
+ this.broadcastBlankEvent(blankEventValue);
45
+ if (this.props.onBlankAreaEvent) {
46
+ this.props.onBlankAreaEvent(blankEventValue);
47
+ }
48
+ };
49
+
50
+ private broadcastBlankEvent(value: BlankAreaEvent) {
51
+ const len = listeners.length;
52
+ for (let i = 0; i < len; i++) {
53
+ listeners[i](value);
54
+ }
55
+ }
56
+
57
+ render() {
58
+ return (
59
+ <AutoLayoutViewNativeComponent
60
+ {...this.props}
61
+ onBlankAreaEvent={this.onBlankAreaEventCallback}
62
+ enableInstrumentation={
63
+ listeners.length !== 0 || Boolean(this.props.onBlankAreaEvent)
64
+ }
65
+ disableAutoLayout={this.props.disableAutoLayout}
66
+ >
67
+ {this.props.children}
68
+ </AutoLayoutViewNativeComponent>
69
+ );
70
+ }
71
+ }
72
+
73
+ export default AutoLayoutView;
@@ -0,0 +1,7 @@
1
+ import { requireNativeComponent } from "react-native";
2
+
3
+ import { AutoLayoutViewNativeComponentProps } from "./AutoLayoutViewNativeComponentProps";
4
+
5
+ const AutoLayoutViewNativeComponent =
6
+ requireNativeComponent<AutoLayoutViewNativeComponentProps>("AutoLayoutView");
7
+ export default AutoLayoutViewNativeComponent;
@@ -0,0 +1,7 @@
1
+ import { requireNativeComponent } from "react-native";
2
+
3
+ import { AutoLayoutViewNativeComponentProps } from "./AutoLayoutViewNativeComponentProps";
4
+
5
+ const AutoLayoutViewNativeComponent =
6
+ requireNativeComponent<AutoLayoutViewNativeComponentProps>("AutoLayoutView");
7
+ export default AutoLayoutViewNativeComponent;
@@ -0,0 +1,7 @@
1
+ import { HostComponent, View } from "react-native";
2
+
3
+ import { AutoLayoutViewNativeComponentProps } from "./AutoLayoutViewNativeComponentProps";
4
+
5
+ const AutoLayoutViewNativeComponent =
6
+ View as any as HostComponent<AutoLayoutViewNativeComponentProps>;
7
+ export default AutoLayoutViewNativeComponent;
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from "react";
2
+
3
+ export interface OnBlankAreaEvent {
4
+ nativeEvent: {
5
+ offsetStart: number;
6
+ offsetEnd: number;
7
+ };
8
+ }
9
+
10
+ type OnBlankAreaEventHandler = (event: OnBlankAreaEvent) => void;
11
+
12
+ export interface AutoLayoutViewNativeComponentProps {
13
+ children?: ReactNode;
14
+ onBlankAreaEvent: OnBlankAreaEventHandler;
15
+ enableInstrumentation: boolean;
16
+ disableAutoLayout?: boolean;
17
+ }
@@ -0,0 +1,7 @@
1
+ import { requireNativeComponent } from "react-native";
2
+
3
+ /**
4
+ * Behaves as a regular `View` with an extra `index` prop that is saved in the native layer.
5
+ */
6
+ const CellContainer = requireNativeComponent("CellContainer");
7
+ export default CellContainer;
@@ -0,0 +1,7 @@
1
+ import { requireNativeComponent } from "react-native";
2
+
3
+ /**
4
+ * Behaves as a regular `View` with an extra `index` prop that is saved in the native layer.
5
+ */
6
+ const CellContainer = requireNativeComponent("CellContainer");
7
+ export default CellContainer;
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import { View, ViewProps } from "react-native";
3
+
4
+ export interface CellContainerProps extends ViewProps {
5
+ index: number;
6
+ }
7
+
8
+ const CellContainer = React.forwardRef(
9
+ (props: CellContainerProps, ref: any) => {
10
+ return <View ref={ref} {...props} />;
11
+ }
12
+ );
13
+ CellContainer.displayName = "CellContainer";
14
+ export default CellContainer;
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ /**
3
+ * On web we use a view instead of cell container till we build native web implementations
4
+ */
5
+ const CellContainer = React.forwardRef((props: any, ref) => {
6
+ return <div ref={ref} {...props} />;
7
+ });
8
+ CellContainer.displayName = "CellContainer";
9
+ export default CellContainer;
@@ -1,7 +1,31 @@
1
+ import { BaseItemAnimator } from "recyclerlistview";
2
+
1
3
  const PlatformConfig = {
2
4
  defaultDrawDistance: 250,
3
5
  supportsOffsetCorrection: true,
4
6
  trackAverageRenderTimeForOffsetProjection: true,
7
+ // Using rotate instead of scaleY on Android to avoid performance issues. Issue: https://github.com/Shopify/flash-list/issues/751
8
+ invertedTransformStyle: { transform: [{ rotate: "180deg" }] },
9
+ invertedTransformStyleHorizontal: { transform: [{ rotate: "180deg" }] },
10
+ };
11
+ const getCellContainerPlatformStyles = (
12
+ inverted: boolean,
13
+ parentProps: { x: number; y: number; isHorizontal?: boolean }
14
+ ): { transform: string; WebkitTransform: string } | undefined => {
15
+ return undefined;
16
+ };
17
+
18
+ const getItemAnimator = (): BaseItemAnimator | undefined => {
19
+ return undefined;
5
20
  };
6
21
 
7
- export { PlatformConfig };
22
+ const getFooterContainer = (): React.ComponentClass | undefined => {
23
+ return undefined;
24
+ };
25
+
26
+ export {
27
+ PlatformConfig,
28
+ getCellContainerPlatformStyles,
29
+ getItemAnimator,
30
+ getFooterContainer,
31
+ };
@@ -1,7 +1,30 @@
1
+ import { BaseItemAnimator } from "recyclerlistview";
2
+
1
3
  const PlatformConfig = {
2
4
  defaultDrawDistance: 250,
3
5
  supportsOffsetCorrection: true,
4
6
  trackAverageRenderTimeForOffsetProjection: false,
7
+ invertedTransformStyle: { transform: [{ scaleY: -1 }] },
8
+ invertedTransformStyleHorizontal: { transform: [{ scaleX: -1 }] },
9
+ };
10
+ const getCellContainerPlatformStyles = (
11
+ inverted: boolean,
12
+ parentProps: { x: number; y: number; isHorizontal?: boolean }
13
+ ): { transform: string; WebkitTransform: string } | undefined => {
14
+ return undefined;
15
+ };
16
+
17
+ const getItemAnimator = (): BaseItemAnimator | undefined => {
18
+ return undefined;
5
19
  };
6
20
 
7
- export { PlatformConfig };
21
+ const getFooterContainer = (): React.ComponentClass | undefined => {
22
+ return undefined;
23
+ };
24
+
25
+ export {
26
+ PlatformConfig,
27
+ getCellContainerPlatformStyles,
28
+ getItemAnimator,
29
+ getFooterContainer,
30
+ };
@@ -1,7 +1,31 @@
1
+ import { BaseItemAnimator } from "recyclerlistview";
2
+ import { DefaultJSItemAnimator } from "recyclerlistview/dist/reactnative/platform/reactnative/itemanimators/defaultjsanimator/DefaultJSItemAnimator";
3
+
1
4
  const PlatformConfig = {
2
5
  defaultDrawDistance: 250,
3
6
  supportsOffsetCorrection: false,
4
7
  trackAverageRenderTimeForOffsetProjection: false,
8
+ invertedTransformStyle: { transform: [{ scaleY: -1 }] },
9
+ invertedTransformStyleHorizontal: { transform: [{ scaleX: -1 }] },
10
+ };
11
+ const getCellContainerPlatformStyles = (
12
+ inverted: boolean,
13
+ parentProps: { x: number; y: number; isHorizontal?: boolean }
14
+ ): { transform: string; WebkitTransform: string } | undefined => {
15
+ return undefined;
16
+ };
17
+
18
+ const getItemAnimator = (): BaseItemAnimator | undefined => {
19
+ return new DefaultJSItemAnimator();
5
20
  };
6
21
 
7
- export { PlatformConfig };
22
+ const getFooterContainer = (): React.ComponentClass | undefined => {
23
+ return undefined;
24
+ };
25
+
26
+ export {
27
+ PlatformConfig,
28
+ getCellContainerPlatformStyles,
29
+ getItemAnimator,
30
+ getFooterContainer,
31
+ };
@@ -1,7 +1,36 @@
1
+ import React from "react";
2
+ import { View } from "react-native";
3
+ import { BaseItemAnimator } from "recyclerlistview";
4
+ import { DefaultJSItemAnimator } from "recyclerlistview/dist/reactnative/platform/reactnative/itemanimators/defaultjsanimator/DefaultJSItemAnimator";
5
+
1
6
  const PlatformConfig = {
2
7
  defaultDrawDistance: 500,
3
8
  supportsOffsetCorrection: false,
4
9
  trackAverageRenderTimeForOffsetProjection: false,
10
+ invertedTransformStyle: { transform: [{ scaleY: -1 }] },
11
+ invertedTransformStyleHorizontal: { transform: [{ scaleX: -1 }] },
12
+ };
13
+ const getCellContainerPlatformStyles = (
14
+ inverted: boolean,
15
+ parentProps: { x: number; y: number; isHorizontal?: boolean }
16
+ ): { transform: string; WebkitTransform: string } | undefined => {
17
+ const transformValue = `translate(${parentProps.x}px,${parentProps.y}px)${
18
+ inverted ? ` ${parentProps.isHorizontal ? `scaleX` : `scaleY`}(-1)` : ``
19
+ }`;
20
+ return { transform: transformValue, WebkitTransform: transformValue };
21
+ };
22
+
23
+ const getItemAnimator = (): BaseItemAnimator | undefined => {
24
+ return new DefaultJSItemAnimator();
5
25
  };
6
26
 
7
- export { PlatformConfig };
27
+ const getFooterContainer = (): React.ComponentClass | undefined => {
28
+ return View;
29
+ };
30
+
31
+ export {
32
+ PlatformConfig,
33
+ getCellContainerPlatformStyles,
34
+ getItemAnimator,
35
+ getFooterContainer,
36
+ };
@@ -20,7 +20,6 @@ import {
20
20
  } from "react-native";
21
21
 
22
22
  import { FlashListRef } from "../FlashListRef";
23
- import { ErrorMessages } from "../errors/ErrorMessages";
24
23
 
25
24
  import { RVDimension } from "./layout-managers/LayoutManager";
26
25
  import {
@@ -209,8 +208,18 @@ const RecyclerViewComponent = <T,>(
209
208
  return { index, dimensions: layout };
210
209
  });
211
210
 
211
+ const hasExceededMaxRendersWithoutCommit =
212
+ renderTimeTracker.hasExceededMaxRendersWithoutCommit();
213
+
214
+ if (hasExceededMaxRendersWithoutCommit) {
215
+ console.warn(
216
+ "FlashList: Exceeded max renders without commit, check for duplicate keys or parent being a ScrollView"
217
+ );
218
+ }
219
+
212
220
  if (
213
- recyclerViewManager.modifyChildrenLayout(layoutInfo, data?.length ?? 0)
221
+ recyclerViewManager.modifyChildrenLayout(layoutInfo, data?.length ?? 0) &&
222
+ !hasExceededMaxRendersWithoutCommit
214
223
  ) {
215
224
  // Trigger re-render if layout modifications were made
216
225
  setRenderId((prev) => prev + 1);
@@ -385,9 +394,6 @@ const RecyclerViewComponent = <T,>(
385
394
  stickyHeaderIndices &&
386
395
  stickyHeaderIndices.length > 0
387
396
  ) {
388
- if (horizontal) {
389
- throw new Error(ErrorMessages.stickyHeadersNotSupportedForHorizontal);
390
- }
391
397
  return (
392
398
  <StickyHeaders
393
399
  stickyHeaderIndices={stickyHeaderIndices}
@@ -406,7 +412,6 @@ const RecyclerViewComponent = <T,>(
406
412
  stickyHeaderIndices,
407
413
  renderItem,
408
414
  scrollY,
409
- horizontal,
410
415
  recyclerViewManager,
411
416
  extraData,
412
417
  ]);
@@ -1,6 +1,5 @@
1
- import { ErrorMessages } from "../errors/ErrorMessages";
1
+ import ViewabilityManager from "../viewability/ViewabilityManager";
2
2
 
3
- import ViewabilityManager from "./viewability/ViewabilityManager";
4
3
  import { ConsecutiveNumbers } from "./helpers/ConsecutiveNumbers";
5
4
  import { RVGridLayoutManagerImpl } from "./layout-managers/GridLayoutManager";
6
5
  import {
@@ -132,7 +131,9 @@ export class RecyclerViewManager<T> {
132
131
 
133
132
  getLayout(index: number) {
134
133
  if (!this.layoutManager) {
135
- throw new Error(ErrorMessages.layoutManagerNotInitializedLayoutInfo);
134
+ throw new Error(
135
+ "LayoutManager is not initialized, layout info is unavailable"
136
+ );
136
137
  }
137
138
  return this.layoutManager.getLayout(index);
138
139
  }
@@ -151,7 +152,9 @@ export class RecyclerViewManager<T> {
151
152
  // Doesn't include header / foot etc
152
153
  getChildContainerDimensions() {
153
154
  if (!this.layoutManager) {
154
- throw new Error(ErrorMessages.layoutManagerNotInitializedChildContainer);
155
+ throw new Error(
156
+ "LayoutManager is not initialized, child container layout is unavailable"
157
+ );
155
158
  }
156
159
  return this.layoutManager.getLayoutSize();
157
160
  }
@@ -162,7 +165,9 @@ export class RecyclerViewManager<T> {
162
165
 
163
166
  getWindowSize() {
164
167
  if (!this.layoutManager) {
165
- throw new Error(ErrorMessages.layoutManagerNotInitializedWindowSize);
168
+ throw new Error(
169
+ "LayoutManager is not initialized, window size is unavailable"
170
+ );
166
171
  }
167
172
  return this.layoutManager.getWindowsSize();
168
173
  }
@@ -206,7 +211,9 @@ export class RecyclerViewManager<T> {
206
211
  Boolean(this.layoutManager?.isHorizontal()) !==
207
212
  Boolean(this.propsRef.horizontal)
208
213
  ) {
209
- throw new Error(ErrorMessages.horizontalPropCannotBeToggled);
214
+ throw new Error(
215
+ "Horizontal prop cannot be toggled, you can use a key on FlashList to recreate it."
216
+ );
210
217
  }
211
218
  if (this._isLayoutManagerDirty) {
212
219
  this.layoutManager = undefined;
@@ -238,7 +245,9 @@ export class RecyclerViewManager<T> {
238
245
 
239
246
  computeVisibleIndices() {
240
247
  if (!this.layoutManager) {
241
- throw new Error(ErrorMessages.layoutManagerNotInitializedVisibleIndices);
248
+ throw new Error(
249
+ "LayoutManager is not initialized, visible indices are not unavailable"
250
+ );
242
251
  }
243
252
  return this.engagedIndicesTracker.computeVisibleIndices(this.layoutManager);
244
253
  }
@@ -351,10 +360,10 @@ export class RecyclerViewManager<T> {
351
360
  private getLayoutManagerClass() {
352
361
  // throw errors for incompatible props
353
362
  if (this.propsRef.masonry && this.propsRef.horizontal) {
354
- throw new Error(ErrorMessages.masonryAndHorizontalIncompatible);
363
+ throw new Error("Masonry and horizontal props are incompatible");
355
364
  }
356
365
  if (this.numColumns > 1 && this.propsRef.horizontal) {
357
- throw new Error(ErrorMessages.numColumnsAndHorizontalIncompatible);
366
+ throw new Error("numColumns and horizontal props are incompatible");
358
367
  }
359
368
  return this.propsRef.masonry
360
369
  ? RVMasonryLayoutManagerImpl
@@ -1 +1,11 @@
1
- export { FlashListProps as RecyclerViewProps } from "../FlashListProps";
1
+ import { ScrollViewProps } from "react-native";
2
+
3
+ import { FlashListProps } from "../FlashListProps";
4
+
5
+ export interface RecyclerViewProps<TItem>
6
+ extends Omit<FlashListProps<TItem>, "contentContainerStyle"> {
7
+ /**
8
+ * Style for the RecyclerView's parent container.
9
+ */
10
+ contentContainerStyle?: ScrollViewProps["contentContainerStyle"];
11
+ }
@@ -6,8 +6,11 @@ export class RenderTimeTracker {
6
6
  private lastTimerStartedAt = -1;
7
7
  private maxRenderTime = 32; // TODO: Improve this even more
8
8
  private defaultRenderTime = 16;
9
+ private rendersWithoutCommit = 0;
10
+ private maxRendersWithoutCommit = 40;
9
11
 
10
12
  startTracking() {
13
+ this.rendersWithoutCommit++;
11
14
  if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
12
15
  return;
13
16
  }
@@ -17,6 +20,7 @@ export class RenderTimeTracker {
17
20
  }
18
21
 
19
22
  markRenderComplete() {
23
+ this.rendersWithoutCommit = 0;
20
24
  if (!PlatformConfig.trackAverageRenderTimeForOffsetProjection) {
21
25
  return;
22
26
  }
@@ -26,6 +30,10 @@ export class RenderTimeTracker {
26
30
  }
27
31
  }
28
32
 
33
+ hasExceededMaxRendersWithoutCommit() {
34
+ return this.rendersWithoutCommit >= this.maxRendersWithoutCommit;
35
+ }
36
+
29
37
  getRawValue() {
30
38
  return this.renderTimeAvgWindow.currentValue;
31
39
  }
@@ -21,7 +21,6 @@ import { adjustOffsetForRTL } from "../utils/adjustOffsetForRTL";
21
21
  import { RVLayout } from "../layout-managers/LayoutManager";
22
22
  import { ScrollAnchorRef } from "../components/ScrollAnchor";
23
23
  import { PlatformConfig } from "../../native/config/PlatformHelper";
24
- import { WarningMessages } from "../../errors/WarningMessages";
25
24
 
26
25
  import { useUnmountFlag } from "./useUnmountFlag";
27
26
  import { useUnmountAwareTimeout } from "./useUnmountAwareCallbacks";
@@ -549,9 +548,6 @@ export function useRecyclerViewController<T>(
549
548
  * Disables item recycling in preparation for layout animations.
550
549
  */
551
550
  prepareForLayoutAnimationRender: () => {
552
- if (!recyclerViewManager.props.keyExtractor) {
553
- console.warn(WarningMessages.keyExtractorNotDefinedForAnimation);
554
- }
555
551
  recyclerViewManager.animationOptimizationsEnabled = true;
556
552
  },
557
553
  };
@@ -7,7 +7,6 @@ import {
7
7
  findLastVisibleIndex,
8
8
  } from "../utils/findVisibleIndex";
9
9
  import { areDimensionsNotEqual } from "../utils/measureLayout";
10
- import { ErrorMessages } from "../../errors/ErrorMessages";
11
10
 
12
11
  /**
13
12
  * Base abstract class for layout managers in the recycler view system.
@@ -225,7 +224,7 @@ export abstract class RVLayoutManager {
225
224
  */
226
225
  getLayout(index: number): RVLayout {
227
226
  if (index >= this.layouts.length) {
228
- throw new Error(ErrorMessages.indexOutOfBounds);
227
+ throw new Error("index out of bounds, not enough layouts");
229
228
  }
230
229
  let layout = this.layouts[index];
231
230
  if (!layout) {
@@ -0,0 +1,24 @@
1
+ import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
2
+ import type { ViewProps } from "react-native";
3
+ import type {
4
+ Int32,
5
+ Double,
6
+ DirectEventHandler,
7
+ } from "react-native/Libraries/Types/CodegenTypes";
8
+
9
+ type BlankAreaEvent = Readonly<{
10
+ offsetStart: Int32;
11
+ offsetEnd: Int32;
12
+ }>;
13
+
14
+ interface NativeProps extends ViewProps {
15
+ horizontal?: boolean;
16
+ scrollOffset?: Double;
17
+ windowSize?: Double;
18
+ renderAheadOffset?: Double;
19
+ enableInstrumentation?: boolean;
20
+ disableAutoLayout?: boolean;
21
+ onBlankAreaEvent?: DirectEventHandler<BlankAreaEvent>;
22
+ }
23
+
24
+ export default codegenNativeComponent<NativeProps>("AutoLayoutView");
@@ -0,0 +1,9 @@
1
+ import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
2
+ import type { Int32 } from "react-native/Libraries/Types/CodegenTypes";
3
+ import type { ViewProps } from "react-native";
4
+
5
+ interface NativeProps extends ViewProps {
6
+ index?: Int32;
7
+ }
8
+
9
+ export default codegenNativeComponent<NativeProps>("CellContainer");