react-native-reanimated 2.3.0-alpha.1 → 2.3.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
  5. package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
  6. package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
  7. package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
  8. package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
  9. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
  10. package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
  11. package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
  12. package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
  13. package/Common/cpp/Tools/Mapper.cpp +41 -29
  14. package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
  15. package/Common/cpp/Tools/Scheduler.cpp +14 -6
  16. package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
  17. package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
  18. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
  19. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
  20. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
  21. package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
  22. package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
  23. package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
  24. package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
  25. package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
  26. package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
  27. package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
  28. package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
  29. package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
  30. package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
  31. package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
  32. package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
  33. package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
  34. package/Common/cpp/headers/Tools/Mapper.h +24 -18
  35. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
  36. package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
  37. package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
  38. package/Common/cpp/headers/Tools/Scheduler.h +28 -33
  39. package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
  40. package/Common/cpp/hidden_headers/Logger.h +14 -14
  41. package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
  42. package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
  43. package/README.md +1 -1
  44. package/RNReanimated.podspec +4 -4
  45. package/android/build.gradle +80 -3
  46. package/android/react-native-reanimated-63-hermes.aar +0 -0
  47. package/android/react-native-reanimated-63-jsc.aar +0 -0
  48. package/android/react-native-reanimated-64-hermes.aar +0 -0
  49. package/android/react-native-reanimated-64-jsc.aar +0 -0
  50. package/android/react-native-reanimated-65-hermes.aar +0 -0
  51. package/android/react-native-reanimated-65-jsc.aar +0 -0
  52. package/android/react-native-reanimated-66-hermes.aar +0 -0
  53. package/android/react-native-reanimated-66-jsc.aar +0 -0
  54. package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
  55. package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
  56. package/ios/LayoutReanimation/REASnapshot.h +13 -0
  57. package/ios/LayoutReanimation/REASnapshot.m +29 -0
  58. package/ios/LayoutReanimation/REAUIManager.h +16 -0
  59. package/ios/LayoutReanimation/REAUIManager.mm +348 -0
  60. package/ios/Nodes/REAAlwaysNode.m +14 -15
  61. package/ios/Nodes/REABezierNode.m +8 -7
  62. package/ios/Nodes/REABlockNode.m +1 -1
  63. package/ios/Nodes/REACallFuncNode.h +0 -1
  64. package/ios/Nodes/REACallFuncNode.m +10 -8
  65. package/ios/Nodes/REAClockNodes.m +22 -20
  66. package/ios/Nodes/REAConcatNode.h +0 -1
  67. package/ios/Nodes/REAConcatNode.m +2 -2
  68. package/ios/Nodes/REACondNode.m +7 -5
  69. package/ios/Nodes/READebugNode.m +5 -4
  70. package/ios/Nodes/REAEventNode.m +1 -1
  71. package/ios/Nodes/REAFunctionNode.h +0 -1
  72. package/ios/Nodes/REAFunctionNode.m +2 -2
  73. package/ios/Nodes/REAJSCallNode.m +4 -5
  74. package/ios/Nodes/REANode.h +3 -4
  75. package/ios/Nodes/REANode.m +9 -11
  76. package/ios/Nodes/REAOperatorNode.m +68 -67
  77. package/ios/Nodes/REAParamNode.h +1 -3
  78. package/ios/Nodes/REAParamNode.m +15 -17
  79. package/ios/Nodes/REAPropsNode.h +1 -3
  80. package/ios/Nodes/REAPropsNode.m +19 -22
  81. package/ios/Nodes/REASetNode.h +0 -1
  82. package/ios/Nodes/REASetNode.m +7 -5
  83. package/ios/Nodes/REAStyleNode.h +0 -1
  84. package/ios/Nodes/REAStyleNode.m +2 -4
  85. package/ios/Nodes/REATransformNode.h +0 -1
  86. package/ios/Nodes/REATransformNode.m +3 -5
  87. package/ios/Nodes/REAValueNode.m +5 -7
  88. package/ios/REAEventDispatcher.m +3 -3
  89. package/ios/REAModule.h +0 -2
  90. package/ios/REAModule.m +29 -40
  91. package/ios/REANodesManager.h +11 -19
  92. package/ios/REANodesManager.m +105 -130
  93. package/ios/REAUtils.h +5 -3
  94. package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
  95. package/ios/Transitioning/REAAllTransitions.h +2 -2
  96. package/ios/Transitioning/REAAllTransitions.m +14 -25
  97. package/ios/Transitioning/REATransition.h +8 -7
  98. package/ios/Transitioning/REATransition.m +19 -16
  99. package/ios/Transitioning/REATransitionAnimation.h +1 -1
  100. package/ios/Transitioning/REATransitionAnimation.m +2 -3
  101. package/ios/Transitioning/REATransitionManager.m +3 -3
  102. package/ios/native/NativeMethods.h +15 -5
  103. package/ios/native/NativeProxy.h +4 -3
  104. package/ios/native/NativeProxy.mm +19 -5
  105. package/ios/native/REAIOSErrorHandler.h +13 -10
  106. package/ios/native/REAIOSLogger.h +8 -8
  107. package/ios/native/REAIOSScheduler.h +5 -5
  108. package/ios/native/REAIOSScheduler.mm +7 -5
  109. package/ios/native/REAInitializer.h +37 -0
  110. package/ios/native/REAInitializer.mm +63 -0
  111. package/ios/native/UIResponder+Reanimated.mm +9 -48
  112. package/lib/ConfigHelper.js +1 -0
  113. package/lib/ReanimatedModule.native.js +10 -2
  114. package/lib/createAnimatedComponent.js +64 -30
  115. package/lib/reanimated1/core/AnimatedAlways.js +1 -1
  116. package/lib/reanimated1/core/AnimatedBezier.js +1 -1
  117. package/lib/reanimated1/core/AnimatedBlock.js +1 -1
  118. package/lib/reanimated1/core/AnimatedCall.js +1 -1
  119. package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
  120. package/lib/reanimated1/core/AnimatedConcat.js +1 -1
  121. package/lib/reanimated1/core/AnimatedCond.js +1 -1
  122. package/lib/reanimated1/core/AnimatedDebug.js +1 -1
  123. package/lib/reanimated1/core/AnimatedEvent.js +1 -1
  124. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  125. package/lib/reanimated1/core/AnimatedOperator.js +1 -1
  126. package/lib/reanimated1/core/AnimatedParam.js +1 -1
  127. package/lib/reanimated1/core/AnimatedProps.js +2 -2
  128. package/lib/reanimated1/core/AnimatedSet.js +1 -1
  129. package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
  130. package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
  131. package/lib/reanimated1/core/AnimatedStyle.js +1 -1
  132. package/lib/reanimated1/core/AnimatedTransform.js +1 -1
  133. package/lib/reanimated1/core/Core.test.js +30 -0
  134. package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
  135. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  136. package/lib/reanimated1/derived/interpolate.js +1 -1
  137. package/lib/reanimated2/Colors.js +16 -12
  138. package/lib/reanimated2/NativeMethods.js +3 -14
  139. package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
  140. package/lib/reanimated2/NativeReanimated/index.js +15 -0
  141. package/lib/reanimated2/PlatformChecker.js +16 -0
  142. package/lib/reanimated2/PropAdapters.js +14 -4
  143. package/lib/reanimated2/UpdateProps.js +14 -11
  144. package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
  145. package/lib/reanimated2/WorkletEventHandler.js +15 -13
  146. package/lib/reanimated2/animation/commonTypes.js +1 -0
  147. package/lib/reanimated2/animation/decay.js +71 -0
  148. package/lib/reanimated2/animation/delay.js +64 -0
  149. package/lib/reanimated2/animation/index.js +8 -0
  150. package/lib/reanimated2/animation/repeat.js +69 -0
  151. package/lib/reanimated2/animation/sequence.js +72 -0
  152. package/lib/reanimated2/animation/spring.js +101 -0
  153. package/lib/reanimated2/animation/styleAnimation.js +166 -0
  154. package/lib/reanimated2/animation/timing.js +64 -0
  155. package/lib/reanimated2/animation/util.js +157 -0
  156. package/lib/reanimated2/commonTypes.js +1 -0
  157. package/lib/reanimated2/core.js +35 -39
  158. package/lib/reanimated2/globals.d.ts +47 -1
  159. package/lib/reanimated2/hook/Hooks.js +9 -0
  160. package/lib/reanimated2/hook/commonTypes.js +1 -0
  161. package/lib/reanimated2/hook/index.js +8 -0
  162. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
  163. package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
  164. package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
  165. package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
  166. package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
  167. package/lib/reanimated2/hook/useDerivedValue.js +36 -0
  168. package/lib/reanimated2/hook/useSharedValue.js +17 -0
  169. package/lib/reanimated2/hook/utils.js +175 -0
  170. package/lib/reanimated2/index.js +3 -2
  171. package/lib/reanimated2/interpolation.js +95 -86
  172. package/lib/reanimated2/jestUtils.js +0 -12
  173. package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
  174. package/lib/reanimated2/js-reanimated/index.js +57 -1
  175. package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
  176. package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
  177. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
  178. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
  179. package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
  180. package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
  181. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
  182. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
  183. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
  184. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
  185. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
  186. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
  187. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
  188. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
  189. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
  190. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
  191. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
  192. package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
  193. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
  194. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
  195. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
  196. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
  197. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
  198. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
  199. package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
  200. package/lib/reanimated2/layoutReanimation/index.js +3 -2
  201. package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
  202. package/lib/reanimated2/utils.js +9 -0
  203. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  204. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  205. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  206. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
  207. package/package.json +21 -10
  208. package/plugin.js +244 -85
  209. package/react-native-reanimated.d.ts +531 -453
  210. package/src/ConfigHelper.js +1 -0
  211. package/src/ReanimatedModule.native.js +10 -2
  212. package/src/createAnimatedComponent.js +64 -30
  213. package/src/reanimated1/core/AnimatedAlways.js +1 -1
  214. package/src/reanimated1/core/AnimatedBezier.js +1 -1
  215. package/src/reanimated1/core/AnimatedBlock.js +1 -1
  216. package/src/reanimated1/core/AnimatedCall.js +1 -1
  217. package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
  218. package/src/reanimated1/core/AnimatedConcat.js +1 -1
  219. package/src/reanimated1/core/AnimatedCond.js +1 -1
  220. package/src/reanimated1/core/AnimatedDebug.js +1 -1
  221. package/src/reanimated1/core/AnimatedEvent.js +1 -1
  222. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  223. package/src/reanimated1/core/AnimatedOperator.js +1 -1
  224. package/src/reanimated1/core/AnimatedParam.js +1 -1
  225. package/src/reanimated1/core/AnimatedProps.js +2 -2
  226. package/src/reanimated1/core/AnimatedSet.js +1 -1
  227. package/src/reanimated1/core/AnimatedStartClock.js +1 -1
  228. package/src/reanimated1/core/AnimatedStopClock.js +1 -1
  229. package/src/reanimated1/core/AnimatedStyle.js +1 -1
  230. package/src/reanimated1/core/AnimatedTransform.js +1 -1
  231. package/src/reanimated1/core/Core.test.js +30 -0
  232. package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
  233. package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  234. package/src/reanimated1/derived/interpolate.js +1 -1
  235. package/src/reanimated2/Colors.ts +30 -27
  236. package/src/reanimated2/Easing.ts +3 -1
  237. package/src/reanimated2/NativeMethods.ts +26 -16
  238. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
  239. package/src/reanimated2/NativeReanimated/index.ts +18 -0
  240. package/src/reanimated2/PlatformChecker.ts +21 -0
  241. package/src/reanimated2/PropAdapters.ts +52 -34
  242. package/src/reanimated2/UpdateProps.ts +40 -20
  243. package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
  244. package/src/reanimated2/WorkletEventHandler.ts +41 -23
  245. package/src/reanimated2/animation/commonTypes.ts +48 -0
  246. package/src/reanimated2/animation/decay.ts +141 -0
  247. package/src/reanimated2/animation/delay.ts +103 -0
  248. package/src/reanimated2/animation/index.ts +16 -0
  249. package/src/reanimated2/animation/repeat.ts +128 -0
  250. package/src/reanimated2/animation/sequence.ts +110 -0
  251. package/src/reanimated2/animation/spring.ts +165 -0
  252. package/src/reanimated2/animation/styleAnimation.ts +253 -0
  253. package/src/reanimated2/animation/timing.ts +109 -0
  254. package/src/reanimated2/animation/util.ts +242 -0
  255. package/src/reanimated2/commonTypes.ts +81 -0
  256. package/src/reanimated2/core.ts +128 -82
  257. package/src/reanimated2/globals.d.ts +47 -1
  258. package/src/reanimated2/hook/Hooks.ts +16 -0
  259. package/src/reanimated2/hook/commonTypes.ts +12 -0
  260. package/src/reanimated2/hook/index.ts +25 -0
  261. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
  262. package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
  263. package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
  264. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
  265. package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
  266. package/src/reanimated2/hook/useDerivedValue.ts +48 -0
  267. package/src/reanimated2/hook/useSharedValue.ts +22 -0
  268. package/src/reanimated2/hook/utils.ts +259 -0
  269. package/src/reanimated2/index.ts +3 -2
  270. package/src/reanimated2/interpolation.ts +170 -101
  271. package/src/reanimated2/jestUtils.ts +0 -12
  272. package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
  273. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  274. package/src/reanimated2/js-reanimated/index.ts +71 -0
  275. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
  276. package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
  277. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
  278. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
  279. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
  280. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
  281. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
  282. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
  283. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
  284. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
  285. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
  286. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
  287. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
  288. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
  289. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
  290. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
  291. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
  292. package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
  293. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
  294. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
  295. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
  296. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
  297. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
  298. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
  299. package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
  300. package/src/reanimated2/layoutReanimation/index.ts +3 -2
  301. package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
  302. package/src/reanimated2/utils.ts +21 -0
  303. package/android/react-native-reanimated-62-hermes.aar +0 -0
  304. package/android/react-native-reanimated-62-jsc.aar +0 -0
  305. package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
  306. package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
  307. package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
  308. package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
  309. package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
  310. package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
  311. package/ios/LayoutReanimation/REASnapshooter.h +0 -19
  312. package/ios/LayoutReanimation/REASnapshooter.m +0 -64
  313. package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
  314. package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
  315. package/lib/reanimated2/Hooks.js +0 -732
  316. package/lib/reanimated2/NativeReanimated.js +0 -4
  317. package/lib/reanimated2/animations.js +0 -713
  318. package/lib/reanimated2/js-reanimated/index.web.js +0 -20
  319. package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
  320. package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
  321. package/src/reanimated2/Hooks.ts +0 -918
  322. package/src/reanimated2/NativeReanimated.native.ts +0 -61
  323. package/src/reanimated2/NativeReanimated.ts +0 -5
  324. package/src/reanimated2/animations.ts +0 -868
  325. package/src/reanimated2/js-reanimated/index.js +0 -0
  326. package/src/reanimated2/js-reanimated/index.web.ts +0 -29
  327. package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
  328. package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
@@ -0,0 +1,259 @@
1
+ import { MutableRefObject, useEffect, useRef } from 'react';
2
+ import { AnimationObject } from '../animation';
3
+ import { processColor } from '../Colors';
4
+ import {
5
+ AnimatedStyle,
6
+ NativeEvent,
7
+ NestedObjectValues,
8
+ StyleProps,
9
+ WorkletFunction,
10
+ } from '../commonTypes';
11
+ import { makeRemote } from '../core';
12
+ import { isWeb } from '../PlatformChecker';
13
+ import { colorProps } from '../UpdateProps';
14
+ import WorkletEventHandler from '../WorkletEventHandler';
15
+ import {
16
+ Context,
17
+ ContextWithDependencies,
18
+ DependencyList,
19
+ } from './commonTypes';
20
+
21
+ interface Handler<T, TContext extends Context> extends WorkletFunction {
22
+ (event: T, context: TContext): void;
23
+ }
24
+
25
+ interface Handlers<T, TContext extends Context> {
26
+ [key: string]: Handler<T, TContext> | undefined;
27
+ }
28
+
29
+ export interface UseHandlerContext<TContext extends Context> {
30
+ context: TContext;
31
+ doDependenciesDiffer: boolean;
32
+ useWeb: boolean;
33
+ }
34
+
35
+ export function useEvent<T extends NativeEvent<T>>(
36
+ handler: (event: T) => void,
37
+ eventNames: string[] = [],
38
+ rebuild = false
39
+ ): MutableRefObject<WorkletEventHandler<T> | null> {
40
+ const initRef = useRef<WorkletEventHandler<T> | null>(null);
41
+ if (initRef.current === null) {
42
+ initRef.current = new WorkletEventHandler(handler, eventNames);
43
+ } else if (rebuild) {
44
+ initRef.current.updateWorklet(handler);
45
+ }
46
+
47
+ useEffect(() => {
48
+ return () => {
49
+ initRef.current = null;
50
+ };
51
+ }, []);
52
+
53
+ return initRef;
54
+ }
55
+
56
+ export function useHandler<T, TContext extends Context>(
57
+ handlers: Handlers<T, TContext>,
58
+ dependencies?: DependencyList
59
+ ): UseHandlerContext<TContext> {
60
+ const initRef = useRef<ContextWithDependencies<TContext> | null>(null);
61
+ if (initRef.current === null) {
62
+ initRef.current = {
63
+ context: makeRemote({}),
64
+ savedDependencies: [],
65
+ };
66
+ }
67
+
68
+ useEffect(() => {
69
+ return () => {
70
+ initRef.current = null;
71
+ };
72
+ }, []);
73
+
74
+ const { context, savedDependencies } = initRef.current;
75
+
76
+ dependencies = buildDependencies(dependencies, handlers);
77
+
78
+ const doDependenciesDiffer = !areDependenciesEqual(
79
+ dependencies,
80
+ savedDependencies
81
+ );
82
+ initRef.current.savedDependencies = dependencies;
83
+ const useWeb = isWeb();
84
+
85
+ return { context, doDependenciesDiffer, useWeb };
86
+ }
87
+
88
+ // builds one big hash from multiple worklets' hashes
89
+ export function buildWorkletsHash(
90
+ handlers: Record<string, WorkletFunction> | Array<WorkletFunction>
91
+ ): string {
92
+ return Object.values(handlers).reduce(
93
+ (acc: string, worklet: WorkletFunction) =>
94
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
95
+ acc + worklet.__workletHash!.toString(),
96
+ ''
97
+ );
98
+ }
99
+
100
+ // builds dependencies array for gesture handlers
101
+ export function buildDependencies(
102
+ dependencies: DependencyList,
103
+ handlers: Record<string, WorkletFunction | undefined>
104
+ ): Array<unknown> {
105
+ const handlersList: WorkletFunction[] = Object.values(handlers).filter(
106
+ (handler) => handler !== undefined
107
+ ) as WorkletFunction[];
108
+ if (!dependencies) {
109
+ dependencies = handlersList.map((handler) => {
110
+ return {
111
+ workletHash: handler.__workletHash,
112
+ closure: handler._closure,
113
+ };
114
+ });
115
+ } else {
116
+ dependencies.push(buildWorkletsHash(handlersList));
117
+ }
118
+ return dependencies;
119
+ }
120
+
121
+ // this is supposed to work as useEffect comparison
122
+ export function areDependenciesEqual(
123
+ nextDeps: DependencyList,
124
+ prevDeps: DependencyList
125
+ ): boolean {
126
+ function is(x: number, y: number) {
127
+ /* eslint-disable no-self-compare */
128
+ return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
129
+ /* eslint-enable no-self-compare */
130
+ }
131
+ const objectIs: (nextDeps: unknown, prevDeps: unknown) => boolean =
132
+ typeof Object.is === 'function' ? Object.is : is;
133
+
134
+ function areHookInputsEqual(
135
+ nextDeps: DependencyList,
136
+ prevDeps: DependencyList
137
+ ): boolean {
138
+ if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {
139
+ return false;
140
+ }
141
+ for (let i = 0; i < prevDeps.length; ++i) {
142
+ if (!objectIs(nextDeps[i], prevDeps[i])) {
143
+ return false;
144
+ }
145
+ }
146
+ return true;
147
+ }
148
+
149
+ return areHookInputsEqual(nextDeps, prevDeps);
150
+ }
151
+
152
+ export function hasColorProps(updates: AnimatedStyle): boolean {
153
+ const colorPropsSet = new Set(colorProps);
154
+ for (const key in updates) {
155
+ if (colorPropsSet.has(key)) {
156
+ return true;
157
+ }
158
+ }
159
+ return false;
160
+ }
161
+
162
+ export function parseColors(updates: AnimatedStyle): void {
163
+ 'worklet';
164
+ for (const key in updates) {
165
+ if (colorProps.indexOf(key) !== -1) {
166
+ updates[key] = processColor(updates[key]);
167
+ }
168
+ }
169
+ }
170
+
171
+ export function canApplyOptimalisation(upadterFn: WorkletFunction): number {
172
+ const FUNCTIONLESS_FLAG = 0b00000001;
173
+ const STATEMENTLESS_FLAG = 0b00000010;
174
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
175
+ const optimalization = upadterFn.__optimalization!;
176
+ return (
177
+ optimalization & FUNCTIONLESS_FLAG && optimalization & STATEMENTLESS_FLAG
178
+ );
179
+ }
180
+
181
+ export function isAnimated(prop: NestedObjectValues<AnimationObject>): boolean {
182
+ 'worklet';
183
+ const propsToCheck: NestedObjectValues<AnimationObject>[] = [prop];
184
+ while (propsToCheck.length > 0) {
185
+ const currentProp: NestedObjectValues<AnimationObject> = propsToCheck.pop() as NestedObjectValues<AnimationObject>;
186
+ if (Array.isArray(currentProp)) {
187
+ for (const item of currentProp) {
188
+ propsToCheck.push(item);
189
+ }
190
+ } else if (currentProp?.onFrame !== undefined) {
191
+ return true;
192
+ } else if (typeof currentProp === 'object') {
193
+ for (const item of Object.values(currentProp)) {
194
+ propsToCheck.push(item);
195
+ }
196
+ }
197
+ // if none of the above, it's not the animated prop, check next one
198
+ }
199
+
200
+ // when none of the props were animated return false
201
+ return false;
202
+ }
203
+
204
+ export function styleDiff(
205
+ oldStyle: AnimatedStyle,
206
+ newStyle: AnimatedStyle
207
+ ): AnimatedStyle {
208
+ 'worklet';
209
+ const diff: AnimatedStyle = {};
210
+ Object.keys(oldStyle).forEach((key) => {
211
+ if (newStyle[key] === undefined) {
212
+ diff[key] = null;
213
+ }
214
+ });
215
+ Object.keys(newStyle).forEach((key) => {
216
+ const value = newStyle[key];
217
+ const oldValue = oldStyle[key];
218
+
219
+ if (isAnimated(value)) {
220
+ // do nothing
221
+ return;
222
+ }
223
+ if (
224
+ oldValue !== value &&
225
+ JSON.stringify(oldValue) !== JSON.stringify(value)
226
+ ) {
227
+ // I'd use deep equal here but that'd take additional work and this was easier
228
+ diff[key] = value;
229
+ }
230
+ });
231
+ return diff;
232
+ }
233
+
234
+ export function getStyleWithoutAnimations(newStyle: AnimatedStyle): StyleProps {
235
+ 'worklet';
236
+ const diff: StyleProps = {};
237
+
238
+ for (const key in newStyle) {
239
+ const value = newStyle[key];
240
+ if (isAnimated(value)) {
241
+ continue;
242
+ }
243
+ diff[key] = value;
244
+ }
245
+ return diff;
246
+ }
247
+
248
+ export const validateAnimatedStyles = (styles: AnimatedStyle): void => {
249
+ 'worklet';
250
+ if (typeof styles !== 'object') {
251
+ throw new Error(
252
+ `useAnimatedStyle has to return an object, found ${typeof styles} instead`
253
+ );
254
+ } else if (Array.isArray(styles)) {
255
+ throw new Error(
256
+ 'useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.'
257
+ );
258
+ }
259
+ };
@@ -1,9 +1,10 @@
1
1
  export * from './core';
2
- export * from './Hooks';
3
- export * from './animations';
2
+ export * from './hook';
3
+ export * from './animation';
4
4
  export * from './interpolation';
5
5
  export * from './Easing';
6
6
  export * from './NativeMethods';
7
7
  export * from './Colors';
8
8
  export * from './PropAdapters';
9
9
  export * from './layoutReanimation';
10
+ export * from './utils';
@@ -1,147 +1,216 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
- // @ts-nocheck
3
- import interpolateNode, {
4
- Extrapolate,
5
- } from '../reanimated1/derived/interpolate';
1
+ // @ts-ignore JS file
2
+ import interpolateNode from '../reanimated1/derived/interpolate';
6
3
 
7
- function getVal(config) {
4
+ export enum Extrapolation {
5
+ IDENTITY = 'identity',
6
+ CLAMP = 'clamp',
7
+ EXTEND = 'extend',
8
+ }
9
+
10
+ export interface InterpolatedNode {
11
+ __nodeId: number;
12
+ }
13
+
14
+ interface InterpolationNarrowedInput {
15
+ leftEdgeInput: number;
16
+ rightEdgeInput: number;
17
+ leftEdgeOutput: number;
18
+ rightEdgeOutput: number;
19
+ }
20
+
21
+ export interface ExtrapolationConfig {
22
+ extrapolateLeft?: Extrapolation | string;
23
+ extrapolateRight?: Extrapolation | string;
24
+ }
25
+
26
+ interface RequiredExtrapolationConfig {
27
+ extrapolateLeft: Extrapolation;
28
+ extrapolateRight: Extrapolation;
29
+ }
30
+
31
+ export type ExtrapolationType =
32
+ | ExtrapolationConfig
33
+ | Extrapolation
34
+ | string
35
+ | undefined;
36
+
37
+ function isNode(x: number | InterpolatedNode): x is InterpolatedNode {
8
38
  'worklet';
39
+ return (x as InterpolatedNode).__nodeId !== undefined;
40
+ }
9
41
 
10
- const { type, coef, val, ll, rr, x } = config;
42
+ function getVal(
43
+ type: Extrapolation,
44
+ coef: number,
45
+ val: number,
46
+ leftEdgeOutput: number,
47
+ rightEdgeOutput: number,
48
+ x: number
49
+ ): number {
50
+ 'worklet';
11
51
 
12
52
  switch (type) {
13
- case Extrapolate.IDENTITY:
53
+ case Extrapolation.IDENTITY:
14
54
  return x;
15
- case Extrapolate.CLAMP:
16
- if (coef * val < coef * ll) {
17
- return ll;
55
+ case Extrapolation.CLAMP:
56
+ if (coef * val < coef * leftEdgeOutput) {
57
+ return leftEdgeOutput;
18
58
  }
19
- return rr;
20
- case Extrapolate.EXTEND:
59
+ return rightEdgeOutput;
60
+ case Extrapolation.EXTEND:
21
61
  default:
22
62
  return val;
23
63
  }
24
64
  }
25
65
 
26
- function isExtrapolate(value) {
66
+ function isExtrapolate(value: string): value is Extrapolation {
27
67
  'worklet';
28
68
 
29
69
  return (
30
- value === Extrapolate.EXTEND ||
31
- value === Extrapolate.CLAMP ||
32
- value === Extrapolate.IDENTITY
70
+ value === Extrapolation.EXTEND ||
71
+ value === Extrapolation.CLAMP ||
72
+ value === Extrapolation.IDENTITY
33
73
  );
34
74
  }
35
75
 
36
- function validateType(type) {
76
+ // validates extrapolations type
77
+ // if type is correct, converts it to ExtrapolationConfig
78
+ function validateType(type: ExtrapolationType): RequiredExtrapolationConfig {
37
79
  'worklet';
38
-
39
- const EXTRAPOLATE_ERROR_MSG = `Reanimated: config object is not valid, please provide valid config, for example:
40
- interpolate(value, [inputRange], [outputRange], {
41
- extrapolateLeft: 'clamp',
42
- extrapolateRight: 'extend',
43
- })`;
44
-
45
- const EXTRAPOLATE_ERROR = (
46
- extrapolate
47
- ) => `Reanimated: not supported value for "${extrapolate}" \nSupported values: ["extend", "clamp", "identity"]\n Valid example:
48
- interpolate(value, [inputRange], [outputRange], {
49
- ${extrapolate}: 'clamp',
50
- })`;
51
-
52
- type = type ?? 'extend';
53
-
54
- // eslint-disable-next-line no-prototype-builtins
55
- const hasExtrapolateLeft = type.hasOwnProperty('extrapolateLeft');
56
- // eslint-disable-next-line no-prototype-builtins
57
- const hasExtrapolateRight = type.hasOwnProperty('extrapolateRight');
58
-
59
- if (
60
- typeof type === 'object' &&
61
- ((Object.keys(type).length === 2 &&
62
- !(hasExtrapolateLeft && hasExtrapolateRight)) ||
63
- (Object.keys(type).length === 1 &&
64
- !(hasExtrapolateLeft || hasExtrapolateRight)) ||
65
- Object.keys(type).length > 2)
66
- ) {
67
- throw new Error(EXTRAPOLATE_ERROR_MSG);
80
+ // initialize extrapolationConfig with default extrapolation
81
+ const extrapolationConfig: RequiredExtrapolationConfig = {
82
+ extrapolateLeft: Extrapolation.EXTEND,
83
+ extrapolateRight: Extrapolation.EXTEND,
84
+ };
85
+
86
+ if (!type) {
87
+ return extrapolationConfig;
68
88
  }
69
89
 
70
- if (typeof type === 'object') {
71
- if (hasExtrapolateLeft && !isExtrapolate(type.extrapolateLeft)) {
72
- throw new Error(EXTRAPOLATE_ERROR('extrapolateLeft'));
73
- }
74
-
75
- if (hasExtrapolateRight && !isExtrapolate(type.extrapolateRight)) {
76
- throw new Error(EXTRAPOLATE_ERROR('extrapolateRight'));
90
+ if (typeof type === 'string') {
91
+ if (!isExtrapolate(type)) {
92
+ throw new Error(
93
+ `Reanimated: not supported value for "interpolate" \nSupported values: ["extend", "clamp", "identity", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\n Valid example:
94
+ interpolate(value, [inputRange], [outputRange], "clamp")`
95
+ );
77
96
  }
97
+ extrapolationConfig.extrapolateLeft = type;
98
+ extrapolationConfig.extrapolateRight = type;
99
+ return extrapolationConfig;
78
100
  }
79
101
 
80
- if (typeof type === 'string' && !isExtrapolate(type)) {
102
+ // otherwise type is extrapolation config object
103
+ if (
104
+ (type.extrapolateLeft && !isExtrapolate(type.extrapolateLeft)) ||
105
+ (type.extrapolateRight && !isExtrapolate(type.extrapolateRight))
106
+ ) {
81
107
  throw new Error(
82
- `Reanimated: not supported value for "interpolate" \nSupported values: ["extend", "clamp", "identity"]\n Valid example:
83
- interpolate(value, [inputRange], [outputRange], "clamp")`
108
+ `Reanimated: not supported value for "interpolate" \nSupported values: ["extend", "clamp", "identity", Extrapolatation.CLAMP, Extrapolatation.EXTEND, Extrapolatation.IDENTITY]\n Valid example:
109
+ interpolate(value, [inputRange], [outputRange], {
110
+ extrapolateLeft: Extrapolation.CLAMP,
111
+ extrapolateRight: Extrapolation.IDENTITY
112
+ }})`
84
113
  );
85
114
  }
115
+
116
+ Object.assign(extrapolationConfig, type);
117
+ return extrapolationConfig;
86
118
  }
87
119
 
88
- // TODO: support default values in worklets:
89
- // e.g. function interpolate(x, input, output, type = Extrapolate.CLAMP)
90
- function internalInterpolate(x, l, r, ll, rr, type) {
120
+ function internalInterpolate(
121
+ x: number,
122
+ narrowedInput: InterpolationNarrowedInput,
123
+ extrapolationConfig: RequiredExtrapolationConfig
124
+ ) {
91
125
  'worklet';
92
- if (r - l === 0) return ll;
93
- const progress = (x - l) / (r - l);
94
- const val = ll + progress * (rr - ll);
95
- const coef = rr >= ll ? 1 : -1;
96
-
97
- const config = { type, coef, val, ll, rr, x };
98
-
99
- if (__DEV__) validateType(type);
100
-
101
- if (typeof type === 'object') {
102
- if (coef * val < coef * ll) {
103
- return getVal(Object.assign(config, { type: type.extrapolateLeft }));
104
- } else if (coef * val > coef * ll) {
105
- return getVal(Object.assign(config, { type: type.extrapolateRight }));
106
- }
107
- }
108
-
109
- if (coef * val < coef * ll || coef * val > coef * rr) {
110
- return getVal(config);
126
+ const {
127
+ leftEdgeInput,
128
+ rightEdgeInput,
129
+ leftEdgeOutput,
130
+ rightEdgeOutput,
131
+ } = narrowedInput;
132
+ if (rightEdgeInput - leftEdgeInput === 0) return leftEdgeOutput;
133
+ const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);
134
+ const val = leftEdgeOutput + progress * (rightEdgeOutput - leftEdgeOutput);
135
+ const coef = rightEdgeOutput >= leftEdgeOutput ? 1 : -1;
136
+
137
+ if (coef * val < coef * leftEdgeOutput) {
138
+ return getVal(
139
+ extrapolationConfig.extrapolateLeft,
140
+ coef,
141
+ val,
142
+ leftEdgeOutput,
143
+ rightEdgeOutput,
144
+ x
145
+ );
146
+ } else if (coef * val > coef * rightEdgeOutput) {
147
+ return getVal(
148
+ extrapolationConfig.extrapolateRight,
149
+ coef,
150
+ val,
151
+ leftEdgeOutput,
152
+ rightEdgeOutput,
153
+ x
154
+ );
111
155
  }
112
156
 
113
157
  return val;
114
158
  }
115
159
 
116
- export function interpolate(x, input, output, type) {
160
+ // TODO: support default values in worklets:
161
+ // e.g. function interpolate(x, input, output, type = Extrapolatation.CLAMP)
162
+ export function interpolate(
163
+ x: number | InterpolatedNode,
164
+ input: readonly number[],
165
+ output: readonly number[],
166
+ type?: ExtrapolationType
167
+ ): number {
117
168
  'worklet';
118
- if (x && x.__nodeID) {
169
+ if (input.length < 2 || output.length < 2) {
170
+ throw Error(
171
+ 'Interpolation input and output should contain at least two values.'
172
+ );
173
+ }
174
+
175
+ const extrapolationConfig = validateType(type);
176
+
177
+ if (isNode(x)) {
119
178
  console.warn(
120
179
  `interpolate() was renamed to interpolateNode() in Reanimated 2. Please use interpolateNode() instead`
121
180
  );
122
- // we can't use rest parameters in worklets at the moment
123
- // eslint-disable-next-line prefer-spread, prefer-rest-params
124
- return interpolateNode.apply(undefined, arguments);
181
+ return interpolateNode(x, {
182
+ inputRange: input,
183
+ outputRange: output,
184
+ extrapolateLeft: extrapolationConfig.extrapolateLeft,
185
+ extrapolateRight: extrapolationConfig.extrapolateRight,
186
+ });
125
187
  }
126
188
 
127
189
  const length = input.length;
128
- let narrowedInput = [];
129
- if (x < input[0]) {
130
- narrowedInput = [input[0], input[1], output[0], output[1]];
131
- } else if (x > input[length - 1]) {
132
- narrowedInput = [
133
- input[length - 2],
134
- input[length - 1],
135
- output[length - 2],
136
- output[length - 1],
137
- ];
138
- } else {
139
- for (let i = 1; i < length; ++i) {
140
- if (x <= input[i]) {
141
- narrowedInput = [input[i - 1], input[i], output[i - 1], output[i]];
142
- break;
190
+ const narrowedInput: InterpolationNarrowedInput = {
191
+ leftEdgeInput: input[0],
192
+ rightEdgeInput: input[1],
193
+ leftEdgeOutput: output[0],
194
+ rightEdgeOutput: output[1],
195
+ };
196
+ if (length > 2) {
197
+ if (x > input[length - 1]) {
198
+ narrowedInput.leftEdgeInput = input[length - 2];
199
+ narrowedInput.rightEdgeInput = input[length - 1];
200
+ narrowedInput.leftEdgeOutput = output[length - 2];
201
+ narrowedInput.rightEdgeOutput = output[length - 1];
202
+ } else {
203
+ for (let i = 1; i < length; ++i) {
204
+ if (x <= input[i]) {
205
+ narrowedInput.leftEdgeInput = input[i - 1];
206
+ narrowedInput.rightEdgeInput = input[i];
207
+ narrowedInput.leftEdgeOutput = output[i - 1];
208
+ narrowedInput.rightEdgeOutput = output[i];
209
+ break;
210
+ }
143
211
  }
144
212
  }
145
213
  }
146
- return internalInterpolate.apply({}, [x].concat(narrowedInput).concat(type));
214
+
215
+ return internalInterpolate(x, narrowedInput, extrapolationConfig);
147
216
  }
@@ -186,18 +186,6 @@ export const setUpTests = (userConfig = {}) => {
186
186
  return compareStyle(received, expectedStyle, config);
187
187
  },
188
188
  });
189
-
190
- jest.mock('./js-reanimated', () => require('./js-reanimated/index.web'));
191
- jest.mock('../ReanimatedModule', () => require('../ReanimatedModuleCompat'));
192
- jest.mock('./NativeReanimated', () => {
193
- let module;
194
- try {
195
- module = require('./NativeReanimated.js');
196
- } catch {
197
- module = require('./NativeReanimated.ts');
198
- }
199
- return module.default;
200
- });
201
189
  };
202
190
 
203
191
  export const getAnimatedStyle = (received) => {