react-native-reanimated 2.8.0 → 3.0.0-rc.0

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 (381) hide show
  1. package/Common/cpp/Fabric/FabricUtils.cpp +128 -0
  2. package/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp +197 -0
  3. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +311 -6
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +14 -1
  5. package/Common/cpp/Registries/NewestShadowNodesRegistry.cpp +68 -0
  6. package/Common/cpp/SharedItems/ShareableValue.cpp +18 -0
  7. package/Common/cpp/Tools/Mapper.cpp +23 -4
  8. package/Common/cpp/Tools/RuntimeDecorator.cpp +92 -32
  9. package/Common/cpp/Tools/Scheduler.cpp +4 -0
  10. package/Common/cpp/headers/Fabric/FabricUtils.h +78 -0
  11. package/Common/cpp/headers/Fabric/ReanimatedUIManagerBinding.h +46 -0
  12. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +72 -2
  13. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +8 -0
  14. package/Common/cpp/headers/Registries/NewestShadowNodesRegistry.h +41 -0
  15. package/Common/cpp/headers/SharedItems/SharedParent.h +3 -0
  16. package/Common/cpp/headers/SharedItems/ValueWrapper.h +25 -0
  17. package/Common/cpp/headers/SpecTools/ErrorHandler.h +5 -0
  18. package/Common/cpp/headers/Tools/Mapper.h +1 -1
  19. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +43 -8
  20. package/Common/cpp/headers/Tools/RuntimeDecorator.h +8 -3
  21. package/README.md +4 -0
  22. package/RNReanimated.podspec +22 -11
  23. package/android/CMakeLists.txt +139 -27
  24. package/android/build.gradle +86 -209
  25. package/android/local.properties +1 -0
  26. package/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java +310 -0
  27. package/android/src/fabric/java/com/swmansion/reanimated/ReaCompatibility.java +25 -0
  28. package/android/src/main/cpp/NativeProxy.cpp +178 -33
  29. package/android/src/main/cpp/headers/NativeProxy.h +43 -7
  30. package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +13 -245
  31. package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +0 -125
  32. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +2 -1
  33. package/android/src/{main → paper}/java/com/swmansion/reanimated/NativeProxy.java +15 -2
  34. package/android/src/paper/java/com/swmansion/reanimated/ReaCompatibility.java +17 -0
  35. package/ios/Fabric/REAInitializerRCTFabricSurface.h +12 -0
  36. package/ios/Fabric/REAInitializerRCTFabricSurface.mm +73 -0
  37. package/ios/REAEventDispatcher.m +0 -1
  38. package/ios/REAModule.h +10 -1
  39. package/ios/REAModule.mm +284 -0
  40. package/ios/REANodesManager.h +27 -51
  41. package/ios/{REANodesManager.m → REANodesManager.mm} +91 -223
  42. package/ios/native/NativeProxy.mm +144 -17
  43. package/ios/native/REAInitializer.mm +12 -4
  44. package/ios/native/UIResponder+Reanimated.h +3 -1
  45. package/ios/native/UIResponder+Reanimated.mm +3 -1
  46. package/lib/Animated.js +0 -4
  47. package/lib/createAnimatedComponent.js +30 -169
  48. package/lib/index.js +0 -4
  49. package/lib/reanimated2/Easing.js +0 -42
  50. package/lib/reanimated2/NativeMethods.js +20 -3
  51. package/lib/reanimated2/UpdateProps.js +25 -10
  52. package/lib/reanimated2/core.js +4 -1
  53. package/lib/reanimated2/fabricUtils.js +18 -0
  54. package/lib/reanimated2/globals.d.ts +17 -1
  55. package/lib/reanimated2/hook/useAnimatedRef.js +6 -2
  56. package/lib/reanimated2/hook/utils.js +0 -5
  57. package/lib/reanimated2/interpolateColor.js +5 -2
  58. package/lib/reanimated2/interpolation.js +0 -15
  59. package/lib/reanimated2/js-reanimated/index.js +3 -0
  60. package/lib/types/{lib/ConfigHelper.d.ts → ConfigHelper.d.ts} +0 -0
  61. package/lib/types/{lib/ReanimatedEventEmitter.d.ts → ReanimatedEventEmitter.d.ts} +0 -0
  62. package/lib/types/{lib/ReanimatedModule.d.ts → ReanimatedModule.d.ts} +0 -0
  63. package/lib/types/{lib/ReanimatedModule.macos.d.ts → ReanimatedModule.macos.d.ts} +0 -0
  64. package/lib/types/{lib/ReanimatedModule.native.d.ts → ReanimatedModule.native.d.ts} +0 -0
  65. package/lib/types/{lib/ReanimatedModule.windows.d.ts → ReanimatedModule.windows.d.ts} +0 -0
  66. package/lib/types/{lib/ReanimatedModuleCompat.d.ts → ReanimatedModuleCompat.d.ts} +0 -0
  67. package/lib/types/{lib/createAnimatedComponent.d.ts → createAnimatedComponent.d.ts} +0 -0
  68. package/lib/types/{lib/reanimated2 → reanimated2}/Bezier.d.ts +0 -0
  69. package/lib/types/{lib/reanimated2 → reanimated2}/Colors.d.ts +0 -0
  70. package/lib/types/{lib/reanimated2 → reanimated2}/Easing.d.ts +0 -0
  71. package/lib/types/{lib/reanimated2 → reanimated2}/NativeMethods.d.ts +2 -1
  72. package/lib/types/{lib/reanimated2 → reanimated2}/NativeReanimated/NativeReanimated.d.ts +0 -0
  73. package/lib/types/{lib/reanimated2 → reanimated2}/NativeReanimated/index.d.ts +0 -0
  74. package/lib/types/{lib/reanimated2 → reanimated2}/PlatformChecker.d.ts +0 -0
  75. package/lib/types/{lib/reanimated2 → reanimated2}/PropAdapters.d.ts +0 -0
  76. package/lib/types/{lib/reanimated2 → reanimated2}/UpdateProps.d.ts +0 -0
  77. package/lib/types/{lib/reanimated2 → reanimated2}/ViewDescriptorsSet.d.ts +0 -0
  78. package/lib/types/{lib/reanimated2 → reanimated2}/WorkletEventHandler.d.ts +0 -0
  79. package/lib/types/{lib/reanimated2 → reanimated2}/__mocks__/MutableValue.d.ts +0 -0
  80. package/lib/types/{lib/reanimated2 → reanimated2}/__mocks__/NativeReanimated.d.ts +0 -0
  81. package/lib/types/{lib/reanimated2 → reanimated2}/__mocks__/NativeReanimated.native.d.ts +0 -0
  82. package/lib/types/{lib/reanimated2 → reanimated2}/animation/commonTypes.d.ts +0 -0
  83. package/lib/types/{lib/reanimated2 → reanimated2}/animation/decay.d.ts +0 -0
  84. package/lib/types/{lib/reanimated2 → reanimated2}/animation/delay.d.ts +0 -0
  85. package/lib/types/{lib/reanimated2 → reanimated2}/animation/index.d.ts +0 -0
  86. package/lib/types/{lib/reanimated2 → reanimated2}/animation/repeat.d.ts +0 -0
  87. package/lib/types/{lib/reanimated2 → reanimated2}/animation/sequence.d.ts +0 -0
  88. package/lib/types/{lib/reanimated2 → reanimated2}/animation/spring.d.ts +0 -0
  89. package/lib/types/{lib/reanimated2 → reanimated2}/animation/styleAnimation.d.ts +0 -0
  90. package/lib/types/{lib/reanimated2 → reanimated2}/animation/timing.d.ts +0 -0
  91. package/lib/types/{lib/reanimated2 → reanimated2}/animation/util.d.ts +0 -0
  92. package/lib/types/{lib/reanimated2 → reanimated2}/commonTypes.d.ts +2 -1
  93. package/lib/types/{lib/reanimated2 → reanimated2}/component/FlatList.d.ts +0 -0
  94. package/lib/types/{lib/reanimated2 → reanimated2}/component/WrappedComponents.d.ts +0 -0
  95. package/lib/types/{lib/reanimated2 → reanimated2}/component/index.d.ts +0 -0
  96. package/lib/types/{lib/reanimated2 → reanimated2}/core.d.ts +0 -0
  97. package/lib/types/reanimated2/fabricUtils.d.ts +4 -0
  98. package/lib/types/{lib/reanimated2 → reanimated2}/hook/Hooks.d.ts +0 -0
  99. package/lib/types/{lib/reanimated2 → reanimated2}/hook/commonTypes.d.ts +2 -1
  100. package/lib/types/{lib/reanimated2 → reanimated2}/hook/index.d.ts +1 -1
  101. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedGestureHandler.d.ts +2 -2
  102. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedReaction.d.ts +0 -0
  103. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedRef.d.ts +0 -0
  104. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedScrollHandler.d.ts +2 -2
  105. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedSensor.d.ts +0 -0
  106. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useAnimatedStyle.d.ts +0 -0
  107. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useDerivedValue.d.ts +0 -0
  108. package/lib/types/{lib/reanimated2 → reanimated2}/hook/useSharedValue.d.ts +0 -0
  109. package/lib/types/{lib/reanimated2 → reanimated2}/hook/utils.d.ts +2 -2
  110. package/lib/types/{lib/reanimated2 → reanimated2}/index.d.ts +0 -0
  111. package/lib/types/{lib/reanimated2 → reanimated2}/interpolateColor.d.ts +5 -0
  112. package/lib/types/{lib/reanimated2 → reanimated2}/interpolation.d.ts +1 -4
  113. package/lib/types/{lib/reanimated2 → reanimated2}/jestUtils.d.ts +0 -0
  114. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/JSReanimated.d.ts +0 -0
  115. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/Mapper.d.ts +0 -0
  116. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/MapperRegistry.d.ts +0 -0
  117. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/MutableValue.d.ts +0 -0
  118. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/commonTypes.d.ts +0 -0
  119. package/lib/types/{lib/reanimated2 → reanimated2}/js-reanimated/index.d.ts +0 -0
  120. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/LayoutAnimationRepository.d.ts +0 -0
  121. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/animationBuilder/BaseAnimationBuilder.d.ts +0 -0
  122. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/animationBuilder/ComplexAnimationBuilder.d.ts +0 -0
  123. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/animationBuilder/Keyframe.d.ts +0 -0
  124. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/animationBuilder/commonTypes.d.ts +0 -0
  125. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/animationBuilder/index.d.ts +0 -0
  126. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Bounce.d.ts +0 -0
  127. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Default.d.ts +0 -0
  128. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Fade.d.ts +0 -0
  129. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Flip.d.ts +0 -0
  130. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Lightspeed.d.ts +0 -0
  131. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Pinwheel.d.ts +0 -0
  132. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Roll.d.ts +0 -0
  133. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Rotate.d.ts +0 -0
  134. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Slide.d.ts +0 -0
  135. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Stretch.d.ts +0 -0
  136. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/Zoom.d.ts +0 -0
  137. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultAnimations/index.d.ts +0 -0
  138. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/CurvedTransition.d.ts +0 -0
  139. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/EntryExitTransition.d.ts +0 -0
  140. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/FadingTransition.d.ts +0 -0
  141. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/JumpingTransition.d.ts +0 -0
  142. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/LinearTransition.d.ts +0 -0
  143. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/SequencedTransition.d.ts +0 -0
  144. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/defaultTransitions/index.d.ts +0 -0
  145. package/lib/types/{lib/reanimated2 → reanimated2}/layoutReanimation/index.d.ts +0 -0
  146. package/lib/types/{lib/reanimated2 → reanimated2}/mock.d.ts +0 -0
  147. package/lib/types/{lib/reanimated2 → reanimated2}/platform-specific/RNRenderer.d.ts +0 -0
  148. package/lib/types/{lib/reanimated2 → reanimated2}/platform-specific/RNRenderer.web.d.ts +0 -0
  149. package/lib/types/{lib/reanimated2 → reanimated2}/utils.d.ts +0 -0
  150. package/lib/types/{lib/setAndForwardRef.d.ts → setAndForwardRef.d.ts} +0 -0
  151. package/package.json +7 -5
  152. package/plugin.js +4 -1
  153. package/src/Animated.js +0 -4
  154. package/src/createAnimatedComponent.tsx +37 -197
  155. package/src/reanimated2/Easing.ts +0 -53
  156. package/src/reanimated2/NativeMethods.ts +39 -7
  157. package/src/reanimated2/UpdateProps.ts +38 -19
  158. package/src/reanimated2/commonTypes.ts +4 -1
  159. package/src/reanimated2/component/FlatList.tsx +8 -5
  160. package/src/reanimated2/core.ts +7 -1
  161. package/src/reanimated2/fabricUtils.ts +27 -0
  162. package/src/reanimated2/globals.d.ts +17 -1
  163. package/src/reanimated2/hook/commonTypes.ts +4 -2
  164. package/src/reanimated2/hook/index.ts +1 -1
  165. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +2 -2
  166. package/src/reanimated2/hook/useAnimatedRef.ts +8 -3
  167. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +2 -2
  168. package/src/reanimated2/hook/utils.ts +2 -11
  169. package/src/reanimated2/interpolateColor.ts +6 -2
  170. package/src/reanimated2/interpolation.ts +1 -26
  171. package/src/reanimated2/js-reanimated/index.ts +5 -0
  172. package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  173. package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
  174. package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
  175. package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
  176. package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
  177. package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
  178. package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
  179. package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
  180. package/android/.gradle/7.2/gc.properties +0 -0
  181. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  182. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  183. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  184. package/android/.gradle/checksums/checksums.lock +0 -0
  185. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  186. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  187. package/android/.gradle/vcs-1/gc.properties +0 -0
  188. package/android/react-native-reanimated-64-hermes.aar +0 -0
  189. package/android/react-native-reanimated-64-jsc.aar +0 -0
  190. package/android/react-native-reanimated-65-hermes.aar +0 -0
  191. package/android/react-native-reanimated-65-jsc.aar +0 -0
  192. package/android/react-native-reanimated-66-hermes.aar +0 -0
  193. package/android/react-native-reanimated-66-jsc.aar +0 -0
  194. package/android/react-native-reanimated-67-hermes.aar +0 -0
  195. package/android/react-native-reanimated-67-jsc.aar +0 -0
  196. package/android/react-native-reanimated-68-hermes.aar +0 -0
  197. package/android/react-native-reanimated-68-jsc.aar +0 -0
  198. package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +0 -11
  199. package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +0 -29
  200. package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +0 -87
  201. package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +0 -24
  202. package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +0 -49
  203. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +0 -38
  204. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +0 -73
  205. package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +0 -36
  206. package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +0 -41
  207. package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +0 -33
  208. package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +0 -83
  209. package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +0 -5
  210. package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +0 -20
  211. package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +0 -41
  212. package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +0 -139
  213. package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +0 -37
  214. package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +0 -377
  215. package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +0 -71
  216. package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +0 -153
  217. package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +0 -32
  218. package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +0 -40
  219. package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +0 -84
  220. package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +0 -40
  221. package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +0 -84
  222. package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +0 -25
  223. package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +0 -86
  224. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +0 -41
  225. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +0 -161
  226. package/ios/Nodes/REAAlwaysNode.h +0 -4
  227. package/ios/Nodes/REAAlwaysNode.m +0 -35
  228. package/ios/Nodes/REABezierNode.h +0 -5
  229. package/ios/Nodes/REABezierNode.m +0 -103
  230. package/ios/Nodes/REABlockNode.h +0 -5
  231. package/ios/Nodes/REABlockNode.m +0 -25
  232. package/ios/Nodes/REACallFuncNode.h +0 -6
  233. package/ios/Nodes/REACallFuncNode.m +0 -69
  234. package/ios/Nodes/REAClockNodes.h +0 -19
  235. package/ios/Nodes/REAClockNodes.m +0 -118
  236. package/ios/Nodes/REAConcatNode.h +0 -5
  237. package/ios/Nodes/REAConcatNode.m +0 -32
  238. package/ios/Nodes/REACondNode.h +0 -5
  239. package/ios/Nodes/REACondNode.m +0 -36
  240. package/ios/Nodes/READebugNode.h +0 -5
  241. package/ios/Nodes/READebugNode.m +0 -30
  242. package/ios/Nodes/REAEventNode.h +0 -8
  243. package/ios/Nodes/REAEventNode.m +0 -35
  244. package/ios/Nodes/REAFunctionNode.h +0 -6
  245. package/ios/Nodes/REAFunctionNode.m +0 -24
  246. package/ios/Nodes/REAJSCallNode.h +0 -5
  247. package/ios/Nodes/REAJSCallNode.m +0 -30
  248. package/ios/Nodes/REANode.h +0 -40
  249. package/ios/Nodes/REANode.m +0 -155
  250. package/ios/Nodes/REAOperatorNode.h +0 -5
  251. package/ios/Nodes/REAOperatorNode.m +0 -114
  252. package/ios/Nodes/REAParamNode.h +0 -10
  253. package/ios/Nodes/REAParamNode.m +0 -79
  254. package/ios/Nodes/REAPropsNode.h +0 -9
  255. package/ios/Nodes/REAPropsNode.m +0 -96
  256. package/ios/Nodes/REASetNode.h +0 -5
  257. package/ios/Nodes/REASetNode.m +0 -34
  258. package/ios/Nodes/REAStyleNode.h +0 -5
  259. package/ios/Nodes/REAStyleNode.m +0 -27
  260. package/ios/Nodes/REATransformNode.h +0 -5
  261. package/ios/Nodes/REATransformNode.m +0 -36
  262. package/ios/Nodes/REAValueNode.h +0 -9
  263. package/ios/Nodes/REAValueNode.m +0 -26
  264. package/ios/REAModule.m +0 -184
  265. package/ios/Transitioning/RCTConvert+REATransition.h +0 -11
  266. package/ios/Transitioning/RCTConvert+REATransition.m +0 -53
  267. package/ios/Transitioning/REAAllTransitions.h +0 -26
  268. package/ios/Transitioning/REAAllTransitions.m +0 -296
  269. package/ios/Transitioning/REATransition.h +0 -64
  270. package/ios/Transitioning/REATransition.m +0 -210
  271. package/ios/Transitioning/REATransitionAnimation.h +0 -17
  272. package/ios/Transitioning/REATransitionAnimation.m +0 -79
  273. package/ios/Transitioning/REATransitionManager.h +0 -9
  274. package/ios/Transitioning/REATransitionManager.m +0 -60
  275. package/ios/Transitioning/REATransitionValues.h +0 -15
  276. package/ios/Transitioning/REATransitionValues.m +0 -25
  277. package/lib/reanimated1/Easing.js +0 -231
  278. package/lib/reanimated1/SpringConfig.js +0 -79
  279. package/lib/reanimated1/Transitioning.js +0 -158
  280. package/lib/reanimated1/animations/Animation.js +0 -32
  281. package/lib/reanimated1/animations/SpringUtils.js +0 -199
  282. package/lib/reanimated1/animations/backwardCompatibleAnimWrapper.js +0 -117
  283. package/lib/reanimated1/animations/decay.js +0 -54
  284. package/lib/reanimated1/animations/spring.js +0 -198
  285. package/lib/reanimated1/animations/timing.js +0 -74
  286. package/lib/reanimated1/base.js +0 -13
  287. package/lib/reanimated1/core/AnimatedAlways.js +0 -33
  288. package/lib/reanimated1/core/AnimatedBezier.js +0 -150
  289. package/lib/reanimated1/core/AnimatedBlock.js +0 -52
  290. package/lib/reanimated1/core/AnimatedCall.js +0 -55
  291. package/lib/reanimated1/core/AnimatedCallFunc.js +0 -72
  292. package/lib/reanimated1/core/AnimatedClock.js +0 -90
  293. package/lib/reanimated1/core/AnimatedClockTest.js +0 -22
  294. package/lib/reanimated1/core/AnimatedCode.js +0 -32
  295. package/lib/reanimated1/core/AnimatedConcat.js +0 -32
  296. package/lib/reanimated1/core/AnimatedCond.js +0 -57
  297. package/lib/reanimated1/core/AnimatedDebug.js +0 -62
  298. package/lib/reanimated1/core/AnimatedEvent.js +0 -126
  299. package/lib/reanimated1/core/AnimatedFunction.js +0 -55
  300. package/lib/reanimated1/core/AnimatedNode.js +0 -223
  301. package/lib/reanimated1/core/AnimatedOperator.js +0 -103
  302. package/lib/reanimated1/core/AnimatedParam.js +0 -88
  303. package/lib/reanimated1/core/AnimatedProps.js +0 -108
  304. package/lib/reanimated1/core/AnimatedSet.js +0 -38
  305. package/lib/reanimated1/core/AnimatedStartClock.js +0 -30
  306. package/lib/reanimated1/core/AnimatedStopClock.js +0 -30
  307. package/lib/reanimated1/core/AnimatedStyle.js +0 -78
  308. package/lib/reanimated1/core/AnimatedTransform.js +0 -78
  309. package/lib/reanimated1/core/AnimatedValue.js +0 -38
  310. package/lib/reanimated1/core/Core.test.js +0 -30
  311. package/lib/reanimated1/core/InternalAnimatedValue.js +0 -87
  312. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +0 -86
  313. package/lib/reanimated1/core/createEventObjectProxyPolyfill.js +0 -44
  314. package/lib/reanimated1/derived/__mocks__/evaluateOnce.js +0 -14
  315. package/lib/reanimated1/derived/acc.js +0 -11
  316. package/lib/reanimated1/derived/color.js +0 -47
  317. package/lib/reanimated1/derived/diff.js +0 -16
  318. package/lib/reanimated1/derived/diffClamp.js +0 -11
  319. package/lib/reanimated1/derived/evaluateOnce.js +0 -35
  320. package/lib/reanimated1/derived/index.js +0 -8
  321. package/lib/reanimated1/derived/interpolate.js +0 -152
  322. package/lib/reanimated1/derived/interpolateColors.js +0 -62
  323. package/lib/reanimated1/derived/onChange.js +0 -14
  324. package/lib/reanimated1/derived/useCode.js +0 -41
  325. package/lib/reanimated1/index.js +0 -53
  326. package/lib/reanimated1/operators.js +0 -35
  327. package/lib/reanimated1/useValue.js +0 -10
  328. package/lib/reanimated1/val.js +0 -3
  329. package/lib/types/react-native-reanimated-tests.d.ts +0 -1
  330. package/src/reanimated1/Easing.js +0 -231
  331. package/src/reanimated1/SpringConfig.js +0 -79
  332. package/src/reanimated1/Transitioning.js +0 -158
  333. package/src/reanimated1/animations/Animation.js +0 -32
  334. package/src/reanimated1/animations/SpringUtils.js +0 -199
  335. package/src/reanimated1/animations/backwardCompatibleAnimWrapper.js +0 -117
  336. package/src/reanimated1/animations/decay.js +0 -54
  337. package/src/reanimated1/animations/spring.js +0 -198
  338. package/src/reanimated1/animations/timing.js +0 -74
  339. package/src/reanimated1/base.js +0 -13
  340. package/src/reanimated1/core/AnimatedAlways.js +0 -33
  341. package/src/reanimated1/core/AnimatedBezier.js +0 -150
  342. package/src/reanimated1/core/AnimatedBlock.js +0 -52
  343. package/src/reanimated1/core/AnimatedCall.js +0 -55
  344. package/src/reanimated1/core/AnimatedCallFunc.js +0 -72
  345. package/src/reanimated1/core/AnimatedClock.js +0 -90
  346. package/src/reanimated1/core/AnimatedClockTest.js +0 -22
  347. package/src/reanimated1/core/AnimatedCode.js +0 -32
  348. package/src/reanimated1/core/AnimatedConcat.js +0 -32
  349. package/src/reanimated1/core/AnimatedCond.js +0 -57
  350. package/src/reanimated1/core/AnimatedDebug.js +0 -62
  351. package/src/reanimated1/core/AnimatedEvent.js +0 -126
  352. package/src/reanimated1/core/AnimatedFunction.js +0 -55
  353. package/src/reanimated1/core/AnimatedNode.js +0 -223
  354. package/src/reanimated1/core/AnimatedOperator.js +0 -103
  355. package/src/reanimated1/core/AnimatedParam.js +0 -88
  356. package/src/reanimated1/core/AnimatedProps.js +0 -108
  357. package/src/reanimated1/core/AnimatedSet.js +0 -38
  358. package/src/reanimated1/core/AnimatedStartClock.js +0 -30
  359. package/src/reanimated1/core/AnimatedStopClock.js +0 -30
  360. package/src/reanimated1/core/AnimatedStyle.js +0 -78
  361. package/src/reanimated1/core/AnimatedTransform.js +0 -78
  362. package/src/reanimated1/core/AnimatedValue.js +0 -38
  363. package/src/reanimated1/core/Core.test.js +0 -30
  364. package/src/reanimated1/core/InternalAnimatedValue.js +0 -87
  365. package/src/reanimated1/core/__mocks__/AnimatedProps.js +0 -86
  366. package/src/reanimated1/core/createEventObjectProxyPolyfill.js +0 -44
  367. package/src/reanimated1/derived/__mocks__/evaluateOnce.js +0 -14
  368. package/src/reanimated1/derived/acc.js +0 -11
  369. package/src/reanimated1/derived/color.js +0 -47
  370. package/src/reanimated1/derived/diff.js +0 -16
  371. package/src/reanimated1/derived/diffClamp.js +0 -11
  372. package/src/reanimated1/derived/evaluateOnce.js +0 -35
  373. package/src/reanimated1/derived/index.js +0 -8
  374. package/src/reanimated1/derived/interpolate.js +0 -152
  375. package/src/reanimated1/derived/interpolateColors.js +0 -62
  376. package/src/reanimated1/derived/onChange.js +0 -14
  377. package/src/reanimated1/derived/useCode.js +0 -41
  378. package/src/reanimated1/index.js +0 -53
  379. package/src/reanimated1/operators.js +0 -35
  380. package/src/reanimated1/useValue.js +0 -10
  381. package/src/reanimated1/val.js +0 -3
@@ -0,0 +1,128 @@
1
+ #ifdef RCT_NEW_ARCH_ENABLED
2
+
3
+ #include "FabricUtils.h"
4
+
5
+ #include <react/renderer/uimanager/UIManagerBinding.h>
6
+
7
+ using namespace facebook::react;
8
+
9
+ namespace reanimated {
10
+
11
+ #ifdef ANDROID
12
+ RuntimeExecutor getRuntimeExecutorFromBinding(Binding *binding) {
13
+ BindingPublic *bindingPublic = reinterpret_cast<BindingPublic *>(binding);
14
+ SchedulerPublic *schedulerPublic =
15
+ reinterpret_cast<SchedulerPublic *>((bindingPublic->scheduler_).get());
16
+ return schedulerPublic->runtimeExecutor_;
17
+ }
18
+ #endif
19
+
20
+ inline static const UIManagerPublic *getUIManagerPublic(
21
+ const UIManager *uiManager) {
22
+ return reinterpret_cast<const UIManagerPublic *>(uiManager);
23
+ }
24
+
25
+ std::shared_ptr<const ContextContainer> getContextContainerFromUIManager(
26
+ const UIManager *uiManager) {
27
+ return getUIManagerPublic(uiManager)->contextContainer_;
28
+ }
29
+
30
+ inline static UIManagerDelegate *getDelegateFromUIManager(
31
+ const UIManager *uiManager) {
32
+ return getUIManagerPublic(uiManager)->delegate_;
33
+ }
34
+
35
+ void UIManager_dispatchCommand(
36
+ const std::shared_ptr<UIManager> &uiManager,
37
+ const ShadowNode::Shared &shadowNode,
38
+ std::string const &commandName,
39
+ folly::dynamic const &args) {
40
+ auto delegate_ = getDelegateFromUIManager(&*uiManager);
41
+
42
+ // copied from UIManager.cpp
43
+ if (delegate_) {
44
+ delegate_->uiManagerDidDispatchCommand(shadowNode, commandName, args);
45
+ }
46
+ }
47
+
48
+ LayoutMetrics UIManager_getRelativeLayoutMetrics(
49
+ const std::shared_ptr<UIManager> &uiManager,
50
+ ShadowNode const &shadowNode,
51
+ ShadowNode const *ancestorShadowNode,
52
+ LayoutableShadowNode::LayoutInspectingPolicy policy) {
53
+ // based on implementation from UIManager.cpp
54
+ const auto &shadowTreeRegistry = uiManager->getShadowTreeRegistry();
55
+
56
+ // We might store here an owning pointer to `ancestorShadowNode` to ensure
57
+ // that the node is not deallocated during method execution lifetime.
58
+ auto owningAncestorShadowNode = ShadowNode::Shared{};
59
+
60
+ if (!ancestorShadowNode) {
61
+ shadowTreeRegistry.visit(
62
+ shadowNode.getSurfaceId(), [&](ShadowTree const &shadowTree) {
63
+ owningAncestorShadowNode =
64
+ shadowTree.getCurrentRevision().rootShadowNode;
65
+ ancestorShadowNode = owningAncestorShadowNode.get();
66
+ });
67
+ } else {
68
+ // It is possible for JavaScript (or other callers) to have a reference
69
+ // to a previous version of ShadowNodes, but we enforce that
70
+ // metrics are only calculated on most recently committed versions.
71
+ owningAncestorShadowNode =
72
+ uiManager->getNewestCloneOfShadowNode(*ancestorShadowNode);
73
+ ancestorShadowNode = owningAncestorShadowNode.get();
74
+ }
75
+
76
+ auto layoutableAncestorShadowNode =
77
+ traitCast<LayoutableShadowNode const *>(ancestorShadowNode);
78
+
79
+ if (!layoutableAncestorShadowNode) {
80
+ return EmptyLayoutMetrics;
81
+ }
82
+
83
+ return LayoutableShadowNode::computeRelativeLayoutMetrics(
84
+ shadowNode.getFamily(), *layoutableAncestorShadowNode, policy);
85
+ }
86
+
87
+ SharedShadowNode UIManager_cloneNode(
88
+ const UIManager *uiManager,
89
+ const ShadowNode::Shared &shadowNode,
90
+ const SharedShadowNodeSharedList &children,
91
+ const RawProps *rawProps) {
92
+ auto delegate_ = getDelegateFromUIManager(uiManager);
93
+ auto contextContainer_ = getContextContainerFromUIManager(uiManager);
94
+
95
+ // copied from UIManager.cpp
96
+ PropsParserContext propsParserContext{
97
+ shadowNode->getFamily().getSurfaceId(), *contextContainer_.get()};
98
+
99
+ auto &componentDescriptor = shadowNode->getComponentDescriptor();
100
+ auto clonedShadowNode = componentDescriptor.cloneShadowNode(
101
+ *shadowNode,
102
+ {
103
+ /* .props = */
104
+ rawProps ? componentDescriptor.cloneProps(
105
+ propsParserContext, shadowNode->getProps(), *rawProps)
106
+ : ShadowNodeFragment::propsPlaceholder(),
107
+ /* .children = */ children,
108
+ });
109
+
110
+ if (delegate_) {
111
+ delegate_->uiManagerDidCloneShadowNode(
112
+ *shadowNode.get(), *clonedShadowNode);
113
+ }
114
+
115
+ return clonedShadowNode;
116
+ }
117
+
118
+ void UIManager_appendChild(
119
+ const ShadowNode::Shared &parentShadowNode,
120
+ const ShadowNode::Shared &childShadowNode) {
121
+ // copied from UIManager.cpp
122
+ auto &componentDescriptor = parentShadowNode->getComponentDescriptor();
123
+ componentDescriptor.appendChild(parentShadowNode, childShadowNode);
124
+ }
125
+
126
+ } // namespace reanimated
127
+
128
+ #endif // RCT_NEW_ARCH_ENABLED
@@ -0,0 +1,197 @@
1
+ #ifdef RCT_NEW_ARCH_ENABLED
2
+
3
+ #include "ReanimatedUIManagerBinding.h"
4
+ #include "FabricUtils.h"
5
+ #include "NewestShadowNodesRegistry.h"
6
+
7
+ using namespace facebook;
8
+ using namespace react;
9
+
10
+ namespace reanimated {
11
+
12
+ void ReanimatedUIManagerBinding::createAndInstallIfNeeded(
13
+ jsi::Runtime &runtime,
14
+ RuntimeExecutor const &runtimeExecutor,
15
+ std::shared_ptr<UIManager> const &uiManager,
16
+ std::shared_ptr<NewestShadowNodesRegistry> const
17
+ &newestShadowNodesRegistry) {
18
+ // adapted from UIManagerBinding.cpp
19
+ auto uiManagerModuleName = "nativeFabricUIManager";
20
+ auto uiManagerBinding = std::make_shared<ReanimatedUIManagerBinding>(
21
+ uiManager, runtimeExecutor, newestShadowNodesRegistry);
22
+ auto object = jsi::Object::createFromHostObject(runtime, uiManagerBinding);
23
+ runtime.global().setProperty(runtime, uiManagerModuleName, std::move(object));
24
+ }
25
+
26
+ ReanimatedUIManagerBinding::ReanimatedUIManagerBinding(
27
+ std::shared_ptr<UIManager> uiManager,
28
+ RuntimeExecutor runtimeExecutor,
29
+ std::shared_ptr<NewestShadowNodesRegistry> newestShadowNodesRegistry)
30
+ : UIManagerBinding(uiManager, runtimeExecutor),
31
+ uiManager_(std::move(uiManager)),
32
+ newestShadowNodesRegistry_(newestShadowNodesRegistry) {}
33
+
34
+ ReanimatedUIManagerBinding::~ReanimatedUIManagerBinding() {}
35
+
36
+ void ReanimatedUIManagerBinding::invalidate() const {
37
+ uiManager_->setDelegate(nullptr);
38
+ }
39
+
40
+ static inline ShadowNode::Shared cloneNode(
41
+ UIManager *uiManager,
42
+ NewestShadowNodesRegistry *newestShadowNodesRegistry,
43
+ const ShadowNode::Shared &shadowNode,
44
+ const SharedShadowNodeSharedList &children = nullptr,
45
+ const RawProps *rawProps = nullptr) {
46
+ {
47
+ auto lock = newestShadowNodesRegistry->createLock();
48
+ auto newest = newestShadowNodesRegistry->get(shadowNode->getTag());
49
+ if (newest != nullptr) {
50
+ // ShadowNode managed by Reanimated, use newest ShadowNode from registry
51
+ auto clone = UIManager_cloneNode(uiManager, newest, children, rawProps);
52
+ newestShadowNodesRegistry->update(clone);
53
+ return clone;
54
+ }
55
+ } // release lock since we don't need registry anymore
56
+
57
+ // ShadowNode not managed by Reanimated (yet?)
58
+ return UIManager_cloneNode(uiManager, shadowNode, children, rawProps);
59
+ }
60
+
61
+ jsi::Value ReanimatedUIManagerBinding::get(
62
+ jsi::Runtime &runtime,
63
+ jsi::PropNameID const &name) {
64
+ // Currently, we need to overwrite all variants of `cloneNode` as well as
65
+ // `appendChild` to prevent React from overwriting layout props animated using
66
+ // Reanimated. However, this may degrade performance due to using locks.
67
+ // We already have an idea how this can be done better without locks
68
+ // (i.e. by overwriting `completeRoot` and using UIManagerCommitHooks).
69
+
70
+ // based on implementation from UIManagerBinding.cpp
71
+ auto methodName = name.utf8(runtime);
72
+ UIManager *uiManager = uiManager_.get();
73
+ NewestShadowNodesRegistry *newestShadowNodesRegistry =
74
+ newestShadowNodesRegistry_.get();
75
+
76
+ // Semantic: Clones the node with *same* props and *same* children.
77
+ if (methodName == "cloneNode") {
78
+ return jsi::Function::createFromHostFunction(
79
+ runtime,
80
+ name,
81
+ 1,
82
+ [uiManager, newestShadowNodesRegistry](
83
+ jsi::Runtime &runtime,
84
+ jsi::Value const &thisValue,
85
+ jsi::Value const *arguments,
86
+ size_t count) noexcept -> jsi::Value {
87
+ return valueFromShadowNode(
88
+ runtime,
89
+ cloneNode(
90
+ uiManager,
91
+ newestShadowNodesRegistry,
92
+ shadowNodeFromValue(runtime, arguments[0])));
93
+ });
94
+ }
95
+
96
+ // Semantic: Clones the node with *same* props and *empty* children.
97
+ if (methodName == "cloneNodeWithNewChildren") {
98
+ return jsi::Function::createFromHostFunction(
99
+ runtime,
100
+ name,
101
+ 1,
102
+ [uiManager, newestShadowNodesRegistry](
103
+ jsi::Runtime &runtime,
104
+ jsi::Value const &thisValue,
105
+ jsi::Value const *arguments,
106
+ size_t count) noexcept -> jsi::Value {
107
+ return valueFromShadowNode(
108
+ runtime,
109
+ cloneNode(
110
+ uiManager,
111
+ newestShadowNodesRegistry,
112
+ shadowNodeFromValue(runtime, arguments[0]),
113
+ ShadowNode::emptySharedShadowNodeSharedList()));
114
+ });
115
+ }
116
+
117
+ // Semantic: Clones the node with *given* props and *same* children.
118
+ if (methodName == "cloneNodeWithNewProps") {
119
+ return jsi::Function::createFromHostFunction(
120
+ runtime,
121
+ name,
122
+ 2,
123
+ [uiManager, newestShadowNodesRegistry](
124
+ jsi::Runtime &runtime,
125
+ jsi::Value const &thisValue,
126
+ jsi::Value const *arguments,
127
+ size_t count) noexcept -> jsi::Value {
128
+ auto const &rawProps = RawProps(runtime, arguments[1]);
129
+ return valueFromShadowNode(
130
+ runtime,
131
+ cloneNode(
132
+ uiManager,
133
+ newestShadowNodesRegistry,
134
+ shadowNodeFromValue(runtime, arguments[0]),
135
+ nullptr,
136
+ &rawProps));
137
+ });
138
+ }
139
+
140
+ // Semantic: Clones the node with *given* props and *empty* children.
141
+ if (methodName == "cloneNodeWithNewChildrenAndProps") {
142
+ return jsi::Function::createFromHostFunction(
143
+ runtime,
144
+ name,
145
+ 2,
146
+ [uiManager, newestShadowNodesRegistry](
147
+ jsi::Runtime &runtime,
148
+ jsi::Value const &thisValue,
149
+ jsi::Value const *arguments,
150
+ size_t count) noexcept -> jsi::Value {
151
+ auto const &rawProps = RawProps(runtime, arguments[1]);
152
+ return valueFromShadowNode(
153
+ runtime,
154
+ cloneNode(
155
+ uiManager,
156
+ newestShadowNodesRegistry,
157
+ shadowNodeFromValue(runtime, arguments[0]),
158
+ ShadowNode::emptySharedShadowNodeSharedList(),
159
+ &rawProps));
160
+ });
161
+ }
162
+
163
+ if (methodName == "appendChild") {
164
+ return jsi::Function::createFromHostFunction(
165
+ runtime,
166
+ name,
167
+ 2,
168
+ [newestShadowNodesRegistry](
169
+ jsi::Runtime &runtime,
170
+ jsi::Value const &thisValue,
171
+ jsi::Value const *arguments,
172
+ size_t count) noexcept -> jsi::Value {
173
+ auto parent = shadowNodeFromValue(runtime, arguments[0]);
174
+ auto child = shadowNodeFromValue(runtime, arguments[1]);
175
+ {
176
+ auto lock = newestShadowNodesRegistry->createLock();
177
+ auto newest = newestShadowNodesRegistry->get(child->getTag());
178
+ if (newest != nullptr) {
179
+ child = newest;
180
+ }
181
+ }
182
+ UIManager_appendChild(parent, child);
183
+ return jsi::Value::undefined();
184
+ });
185
+ }
186
+
187
+ // Methods like "findNodeAtPoint", "getRelativeLayoutMetrics", "measure" etc.
188
+ // use `UIManager::getNewestCloneOfShadowNode` or
189
+ // `ShadowTree::getCurrentRevision` under the hood,
190
+ // so there's no need to overwrite them.
191
+
192
+ return UIManagerBinding::get(runtime, name);
193
+ }
194
+
195
+ } // namespace reanimated
196
+
197
+ #endif // RCT_NEW_ARCH_ENABLED
@@ -1,7 +1,20 @@
1
1
  #include "NativeReanimatedModule.h"
2
+
3
+ #ifdef RCT_NEW_ARCH_ENABLED
4
+ #include <react/renderer/uimanager/UIManagerBinding.h>
5
+ #include <react/renderer/uimanager/primitives.h>
6
+ #endif
7
+
2
8
  #include <functional>
3
9
  #include <memory>
4
10
  #include <thread>
11
+
12
+ #ifdef RCT_NEW_ARCH_ENABLED
13
+ #include "FabricUtils.h"
14
+ #include "NewestShadowNodesRegistry.h"
15
+ #include "ReanimatedUIManagerBinding.h"
16
+ #endif
17
+
5
18
  #include "EventHandlerRegistry.h"
6
19
  #include "FeaturesConfig.h"
7
20
  #include "FrozenObject.h"
@@ -62,8 +75,12 @@ NativeReanimatedModule::NativeReanimatedModule(
62
75
  std::shared_ptr<Scheduler> scheduler,
63
76
  std::shared_ptr<jsi::Runtime> rt,
64
77
  std::shared_ptr<ErrorHandler> errorHandler,
78
+ #ifdef RCT_NEW_ARCH_ENABLED
79
+ // nothing
80
+ #else
65
81
  std::function<jsi::Value(jsi::Runtime &, const int, const jsi::String &)>
66
82
  propObtainer,
83
+ #endif
67
84
  std::shared_ptr<LayoutAnimationsProxy> layoutAnimationsProxy,
68
85
  PlatformDepMethodsHolder platformDepMethodsHolder)
69
86
  : NativeReanimatedModuleSpec(jsInvoker),
@@ -71,10 +88,20 @@ NativeReanimatedModule::NativeReanimatedModule(
71
88
  mapperRegistry(std::make_shared<MapperRegistry>()),
72
89
  eventHandlerRegistry(std::make_shared<EventHandlerRegistry>()),
73
90
  requestRender(platformDepMethodsHolder.requestRender),
91
+ #ifdef RCT_NEW_ARCH_ENABLED
92
+ // nothing
93
+ #else
74
94
  propObtainer(propObtainer),
95
+ #endif
75
96
  animatedSensorModule(platformDepMethodsHolder, this),
97
+ #ifdef RCT_NEW_ARCH_ENABLED
98
+ synchronouslyUpdateUIPropsFunction(
99
+ platformDepMethodsHolder.synchronouslyUpdateUIPropsFunction)
100
+ #else
76
101
  configurePropsPlatformFunction(
77
- platformDepMethodsHolder.configurePropsFunction) {
102
+ platformDepMethodsHolder.configurePropsFunction)
103
+ #endif
104
+ {
78
105
  auto requestAnimationFrame = [=](FrameCallback callback) {
79
106
  frameCallbacks.push_back(callback);
80
107
  maybeRequestRender();
@@ -82,12 +109,45 @@ NativeReanimatedModule::NativeReanimatedModule(
82
109
 
83
110
  this->layoutAnimationsProxy = layoutAnimationsProxy;
84
111
 
112
+ #ifdef RCT_NEW_ARCH_ENABLED
113
+ auto updateProps = [this](
114
+ jsi::Runtime &rt,
115
+ const jsi::Value &shadowNodeValue,
116
+ const jsi::Value &props) {
117
+ this->updateProps(rt, shadowNodeValue, props);
118
+ };
119
+
120
+ auto removeShadowNodeFromRegistry =
121
+ [this](jsi::Runtime &rt, const jsi::Value &shadowNodeValue) {
122
+ this->removeShadowNodeFromRegistry(rt, shadowNodeValue);
123
+ };
124
+
125
+ auto measure = [this](jsi::Runtime &rt, const jsi::Value &shadowNodeValue) {
126
+ return this->measure(rt, shadowNodeValue);
127
+ };
128
+
129
+ auto dispatchCommand = [this](
130
+ jsi::Runtime &rt,
131
+ const jsi::Value &shadowNodeValue,
132
+ const jsi::Value &commandNameValue,
133
+ const jsi::Value &argsValue) {
134
+ this->dispatchCommand(rt, shadowNodeValue, commandNameValue, argsValue);
135
+ };
136
+ #endif
137
+
85
138
  RuntimeDecorator::decorateUIRuntime(
86
139
  *runtime,
87
- platformDepMethodsHolder.updaterFunction,
88
- requestAnimationFrame,
140
+ #ifdef RCT_NEW_ARCH_ENABLED
141
+ updateProps,
142
+ measure,
143
+ removeShadowNodeFromRegistry,
144
+ dispatchCommand,
145
+ #else
146
+ platformDepMethodsHolder.updatePropsFunction,
147
+ platformDepMethodsHolder.measureFunction,
89
148
  platformDepMethodsHolder.scrollToFunction,
90
- platformDepMethodsHolder.measuringFunction,
149
+ #endif
150
+ requestAnimationFrame,
91
151
  platformDepMethodsHolder.getCurrentTime,
92
152
  platformDepMethodsHolder.registerSensor,
93
153
  platformDepMethodsHolder.unregisterSensor,
@@ -97,7 +157,12 @@ NativeReanimatedModule::NativeReanimatedModule(
97
157
  this->renderRequested = false;
98
158
  this->onRender(timestampMs);
99
159
  };
100
- updaterFunction = platformDepMethodsHolder.updaterFunction;
160
+
161
+ #ifdef RCT_NEW_ARCH_ENABLED
162
+ // nothing
163
+ #else
164
+ updatePropsFunction = platformDepMethodsHolder.updatePropsFunction;
165
+ #endif
101
166
  }
102
167
 
103
168
  void NativeReanimatedModule::installCoreFunctions(
@@ -253,15 +318,33 @@ jsi::Value NativeReanimatedModule::configureProps(
253
318
  jsi::Runtime &rt,
254
319
  const jsi::Value &uiProps,
255
320
  const jsi::Value &nativeProps) {
321
+ #ifdef RCT_NEW_ARCH_ENABLED
322
+ jsi::Array array = nativeProps.asObject(rt).asArray(rt);
323
+ for (int i = 0; i < array.size(rt); ++i) {
324
+ std::string name = array.getValueAtIndex(rt, i).asString(rt).utf8(rt);
325
+ nativePropNames_.insert(name);
326
+ }
327
+ #else
256
328
  configurePropsPlatformFunction(rt, uiProps, nativeProps);
329
+ #endif // RCT_NEW_ARCH_ENABLED
330
+
257
331
  return jsi::Value::undefined();
258
332
  }
259
333
 
260
334
  void NativeReanimatedModule::onEvent(
261
335
  std::string eventName,
262
- std::string eventAsString) {
336
+ #ifdef RCT_NEW_ARCH_ENABLED
337
+ jsi::Value &&payload
338
+ #else
339
+ std::string eventAsString
340
+ #endif
341
+ /**/) {
263
342
  try {
343
+ #ifdef RCT_NEW_ARCH_ENABLED
344
+ eventHandlerRegistry->processEvent(*runtime, eventName, payload);
345
+ #else
264
346
  eventHandlerRegistry->processEvent(*runtime, eventName, eventAsString);
347
+ #endif
265
348
  mapperRegistry->execute(*runtime);
266
349
  if (mapperRegistry->needRunOnRender()) {
267
350
  maybeRequestRender();
@@ -327,4 +410,226 @@ void NativeReanimatedModule::unregisterSensor(
327
410
  animatedSensorModule.unregisterSensor(sensorId);
328
411
  }
329
412
 
413
+ #ifdef RCT_NEW_ARCH_ENABLED
414
+ bool NativeReanimatedModule::isThereAnyLayoutProp(
415
+ jsi::Runtime &rt,
416
+ const jsi::Value &props) {
417
+ const jsi::Array propNames = props.asObject(rt).getPropertyNames(rt);
418
+ for (size_t i = 0; i < propNames.size(rt); ++i) {
419
+ const std::string propName =
420
+ propNames.getValueAtIndex(rt, i).asString(rt).utf8(rt);
421
+ bool isLayoutProp =
422
+ nativePropNames_.find(propName) != nativePropNames_.end();
423
+ if (isLayoutProp) {
424
+ return true;
425
+ }
426
+ }
427
+ return false;
428
+ }
429
+
430
+ bool NativeReanimatedModule::handleEvent(
431
+ const std::string &eventName,
432
+ jsi::Value &&payload,
433
+ double currentTime) {
434
+ jsi::Runtime &rt = *runtime.get();
435
+ jsi::Object global = rt.global();
436
+ jsi::String eventTimestampName =
437
+ jsi::String::createFromAscii(rt, "_eventTimestamp");
438
+ global.setProperty(rt, eventTimestampName, currentTime);
439
+ onEvent(eventName, std::move(payload));
440
+ global.setProperty(rt, eventTimestampName, jsi::Value::undefined());
441
+
442
+ // TODO: return true if Reanimated successfully handled the event
443
+ // to avoid sending it to JavaScript
444
+ return false;
445
+ }
446
+
447
+ bool NativeReanimatedModule::handleRawEvent(
448
+ const RawEvent &rawEvent,
449
+ double currentTime) {
450
+ const EventTarget *eventTarget = rawEvent.eventTarget.get();
451
+ if (eventTarget == nullptr) {
452
+ // after app reload scrollview is unmounted and its content offset is set to
453
+ // 0 and view is thrown into recycle pool setting content offset triggers
454
+ // scroll event eventTarget is null though, because it's unmounting we can
455
+ // just ignore this event, because it's an event on unmounted component
456
+ return false;
457
+ }
458
+ const std::string &type = rawEvent.type;
459
+ const ValueFactory &payloadFactory = rawEvent.payloadFactory;
460
+
461
+ int tag = eventTarget->getTag();
462
+ std::string eventType = type;
463
+ if (eventType.rfind("top", 0) == 0) {
464
+ eventType = "on" + eventType.substr(3);
465
+ }
466
+ std::string eventName = std::to_string(tag) + eventType;
467
+ jsi::Runtime &rt = *runtime.get();
468
+ jsi::Value payload = payloadFactory(rt);
469
+
470
+ return handleEvent(eventName, std::move(payload), currentTime);
471
+ }
472
+
473
+ void NativeReanimatedModule::updateProps(
474
+ jsi::Runtime &rt,
475
+ const jsi::Value &shadowNodeValue,
476
+ const jsi::Value &props) {
477
+ ShadowNode::Shared shadowNode = shadowNodeFromValue(rt, shadowNodeValue);
478
+
479
+ // TODO: support multiple surfaces
480
+ surfaceId_ = shadowNode->getSurfaceId();
481
+
482
+ if (isThereAnyLayoutProp(rt, props)) {
483
+ operationsInBatch_.emplace_back(
484
+ shadowNode, std::make_unique<jsi::Value>(rt, props));
485
+ } else {
486
+ // TODO: batch with layout props changes?
487
+ Tag tag = shadowNode->getTag();
488
+ synchronouslyUpdateUIPropsFunction(rt, tag, props);
489
+ }
490
+ }
491
+
492
+ void NativeReanimatedModule::performOperations() {
493
+ if (operationsInBatch_.empty()) {
494
+ return;
495
+ }
496
+
497
+ auto copiedOperationsQueue = std::move(operationsInBatch_);
498
+ operationsInBatch_ =
499
+ std::vector<std::pair<ShadowNode::Shared, std::unique_ptr<jsi::Value>>>();
500
+
501
+ auto copiedTagsToRemove = std::move(tagsToRemove_);
502
+ tagsToRemove_ = std::vector<Tag>();
503
+
504
+ react_native_assert(uiManager_ != nullptr);
505
+ const auto &shadowTreeRegistry = uiManager_->getShadowTreeRegistry();
506
+ auto contextContainer = getContextContainerFromUIManager(
507
+ &*uiManager_); // TODO: use Scheduler::getContextContainer
508
+ PropsParserContext propsParserContext{surfaceId_, *contextContainer};
509
+ jsi::Runtime &rt = *runtime.get();
510
+
511
+ shadowTreeRegistry.visit(surfaceId_, [&](ShadowTree const &shadowTree) {
512
+ shadowTree.commit([&](RootShadowNode const &oldRootShadowNode) {
513
+ // lock once due to performance reasons
514
+ auto lock = newestShadowNodesRegistry_->createLock();
515
+
516
+ auto rootNode = oldRootShadowNode.ShadowNode::clone(ShadowNodeFragment{});
517
+
518
+ for (const auto &pair : copiedOperationsQueue) {
519
+ const ShadowNodeFamily &family = pair.first->getFamily();
520
+ react_native_assert(family.getSurfaceId() == surfaceId_);
521
+
522
+ auto newRootNode =
523
+ rootNode->cloneTree(family, [&](ShadowNode const &oldShadowNode) {
524
+ const auto newest =
525
+ newestShadowNodesRegistry_->get(oldShadowNode.getTag());
526
+
527
+ const auto &source = newest == nullptr ? oldShadowNode : *newest;
528
+
529
+ const auto newProps = source.getComponentDescriptor().cloneProps(
530
+ propsParserContext,
531
+ source.getProps(),
532
+ RawProps(rt, *pair.second));
533
+
534
+ return source.clone({/* .props = */ newProps});
535
+ });
536
+
537
+ if (newRootNode == nullptr) {
538
+ // this happens when React removed the component but Reanimated still
539
+ // tries to animate it, let's skip update for this specific component
540
+ continue;
541
+ }
542
+ rootNode = newRootNode;
543
+
544
+ auto ancestors = family.getAncestors(*rootNode);
545
+ for (const auto &pair : ancestors) {
546
+ const auto &parent = pair.first.get();
547
+ const auto &child = parent.getChildren().at(pair.second);
548
+ newestShadowNodesRegistry_->set(child, parent.getTag());
549
+ }
550
+ }
551
+
552
+ // remove ShadowNodes and its ancestors from NewestShadowNodesRegistry
553
+ for (auto tag : copiedTagsToRemove) {
554
+ newestShadowNodesRegistry_->remove(tag);
555
+ }
556
+
557
+ return std::static_pointer_cast<RootShadowNode>(rootNode);
558
+ });
559
+ });
560
+ }
561
+
562
+ void NativeReanimatedModule::removeShadowNodeFromRegistry(
563
+ jsi::Runtime &rt,
564
+ const jsi::Value &shadowNodeValue) {
565
+ auto shadowNode = shadowNodeFromValue(rt, shadowNodeValue);
566
+ tagsToRemove_.push_back(shadowNode->getTag());
567
+ }
568
+
569
+ void NativeReanimatedModule::dispatchCommand(
570
+ jsi::Runtime &rt,
571
+ const jsi::Value &shadowNodeValue,
572
+ const jsi::Value &commandNameValue,
573
+ const jsi::Value &argsValue) {
574
+ ShadowNode::Shared shadowNode = shadowNodeFromValue(rt, shadowNodeValue);
575
+ std::string commandName = stringFromValue(rt, commandNameValue);
576
+ folly::dynamic args = commandArgsFromValue(rt, argsValue);
577
+
578
+ // TODO: use uiManager_->dispatchCommand once it's public
579
+ UIManager_dispatchCommand(uiManager_, shadowNode, commandName, args);
580
+ }
581
+
582
+ jsi::Value NativeReanimatedModule::measure(
583
+ jsi::Runtime &rt,
584
+ const jsi::Value &shadowNodeValue) {
585
+ // based on implementation from UIManagerBinding.cpp
586
+
587
+ auto shadowNode = shadowNodeFromValue(rt, shadowNodeValue);
588
+ // TODO: use uiManager_->getRelativeLayoutMetrics once it's public
589
+ // auto layoutMetrics = uiManager_->getRelativeLayoutMetrics(
590
+ // *shadowNode, nullptr, {/* .includeTransform = */ true});
591
+ auto layoutMetrics = UIManager_getRelativeLayoutMetrics(
592
+ uiManager_, *shadowNode, nullptr, {/* .includeTransform = */ true});
593
+
594
+ if (layoutMetrics == EmptyLayoutMetrics) {
595
+ return jsi::Value::undefined();
596
+ }
597
+ auto newestCloneOfShadowNode =
598
+ uiManager_->getNewestCloneOfShadowNode(*shadowNode);
599
+
600
+ auto layoutableShadowNode =
601
+ traitCast<LayoutableShadowNode const *>(newestCloneOfShadowNode.get());
602
+ facebook::react::Point originRelativeToParent = layoutableShadowNode
603
+ ? layoutableShadowNode->getLayoutMetrics().frame.origin
604
+ : facebook::react::Point();
605
+
606
+ auto frame = layoutMetrics.frame;
607
+
608
+ jsi::Object result(rt);
609
+ result.setProperty(
610
+ rt, "x", jsi::Value(static_cast<double>(originRelativeToParent.x)));
611
+ result.setProperty(
612
+ rt, "y", jsi::Value(static_cast<double>(originRelativeToParent.y)));
613
+ result.setProperty(
614
+ rt, "width", jsi::Value(static_cast<double>(frame.size.width)));
615
+ result.setProperty(
616
+ rt, "height", jsi::Value(static_cast<double>(frame.size.height)));
617
+ result.setProperty(
618
+ rt, "pageX", jsi::Value(static_cast<double>(frame.origin.x)));
619
+ result.setProperty(
620
+ rt, "pageY", jsi::Value(static_cast<double>(frame.origin.y)));
621
+ return result;
622
+ }
623
+
624
+ void NativeReanimatedModule::setUIManager(
625
+ std::shared_ptr<UIManager> uiManager) {
626
+ uiManager_ = uiManager;
627
+ }
628
+
629
+ void NativeReanimatedModule::setNewestShadowNodesRegistry(
630
+ std::shared_ptr<NewestShadowNodesRegistry> newestShadowNodesRegistry) {
631
+ newestShadowNodesRegistry_ = newestShadowNodesRegistry;
632
+ }
633
+ #endif // RCT_NEW_ARCH_ENABLED
634
+
330
635
  } // namespace reanimated