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
@@ -1,11 +1,22 @@
1
1
  /* global _WORKLET _getCurrentTime _frameTimestamp _eventTimestamp, _setGlobalConsole */
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
- import NativeReanimated from './NativeReanimated';
2
+ import NativeReanimatedModule from './NativeReanimated';
5
3
  import { Platform } from 'react-native';
6
- import { addWhitelistedNativeProps } from '../ConfigHelper';
7
-
8
- global.__reanimatedWorkletInit = function (worklet) {
4
+ import { nativeShouldBeMock, shouldBeUseWeb } from './PlatformChecker';
5
+ import {
6
+ BasicWorkletFunction,
7
+ WorkletFunction,
8
+ ComplexWorkletFunction,
9
+ SharedValue,
10
+ } from './commonTypes';
11
+ import {
12
+ AnimationObject,
13
+ PrimitiveValue,
14
+ Timestamp,
15
+ } from './animation/commonTypes';
16
+ import { Descriptor } from './hook/commonTypes';
17
+ import JSReanimated from './js-reanimated/JSReanimated';
18
+
19
+ global.__reanimatedWorkletInit = function (worklet: WorkletFunction) {
9
20
  worklet.__worklet = true;
10
21
  };
11
22
 
@@ -16,12 +27,25 @@ if (global._setGlobalConsole === undefined) {
16
27
  };
17
28
  }
18
29
 
19
- const testWorklet = () => {
30
+ export type ReanimatedConsole = Pick<
31
+ Console,
32
+ 'debug' | 'log' | 'warn' | 'info' | 'error'
33
+ >;
34
+ interface WorkletValueSetterContext {
35
+ _animation?: AnimationObject | null;
36
+ _value?: PrimitiveValue | Descriptor;
37
+ value?: PrimitiveValue;
38
+ _setValue?: (val: PrimitiveValue | Descriptor) => void;
39
+ }
40
+
41
+ const testWorklet: BasicWorkletFunction<void> = () => {
20
42
  'worklet';
21
43
  };
22
44
 
23
- export const checkPluginState = (throwError = true) => {
24
- if (!testWorklet.__workletHash && !process.env.JEST_WORKER_ID) {
45
+ export const checkPluginState: (throwError: boolean) => boolean = (
46
+ throwError = true
47
+ ) => {
48
+ if (!testWorklet.__workletHash && !shouldBeUseWeb()) {
25
49
  if (throwError) {
26
50
  throw new Error(
27
51
  "Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin?"
@@ -32,19 +56,21 @@ export const checkPluginState = (throwError = true) => {
32
56
  return true;
33
57
  };
34
58
 
35
- export const isConfigured = (throwError = false) => {
36
- return checkPluginState(throwError) && !NativeReanimated.useOnlyV1;
59
+ export const isConfigured: (throwError?: boolean) => boolean = (
60
+ throwError = false
61
+ ) => {
62
+ return checkPluginState(throwError) && !NativeReanimatedModule.useOnlyV1;
37
63
  };
38
64
 
39
- export const isConfiguredCheck = () => {
65
+ export const isConfiguredCheck: () => void = () => {
40
66
  if (!isConfigured(true)) {
41
67
  throw new Error(
42
- 'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/installation'
68
+ 'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation'
43
69
  );
44
70
  }
45
71
  };
46
72
 
47
- function _toArrayReanimated(object) {
73
+ function _toArrayReanimated<T>(object: Iterable<T> | ArrayLike<T> | T[]): T[] {
48
74
  'worklet';
49
75
  if (Array.isArray(object)) {
50
76
  return object;
@@ -53,19 +79,23 @@ function _toArrayReanimated(object) {
53
79
  typeof Symbol !== 'undefined' &&
54
80
  (typeof Symbol === 'function' ? Symbol.iterator : '@@iterator') in
55
81
  Object(object)
56
- )
82
+ ) {
57
83
  return Array.from(object);
58
- throw new 'Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'();
84
+ }
85
+ throw new Error(
86
+ 'Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'
87
+ );
59
88
  }
60
89
 
61
- function _mergeObjectsReanimated() {
90
+ function _mergeObjectsReanimated(): unknown {
62
91
  'worklet';
63
92
  // we can't use rest parameters in worklets at the moment
64
93
  // eslint-disable-next-line prefer-rest-params
65
- return Object.assign.apply(null, arguments);
94
+ const arr = Array.from(arguments);
95
+ return Object.assign.apply(null, [arr[0], ...arr.slice(1)]);
66
96
  }
67
97
 
68
- global.__reanimatedWorkletInit = function (worklet) {
98
+ global.__reanimatedWorkletInit = function (worklet: WorkletFunction) {
69
99
  worklet.__worklet = true;
70
100
 
71
101
  if (worklet._closure) {
@@ -82,13 +112,13 @@ global.__reanimatedWorkletInit = function (worklet) {
82
112
  }
83
113
  };
84
114
 
85
- function pushFrame(frame) {
86
- NativeReanimated.pushFrame(frame);
115
+ function pushFrame(frame: (timestamp: Timestamp) => void): void {
116
+ (NativeReanimatedModule as JSReanimated).pushFrame(frame);
87
117
  }
88
118
 
89
- export function requestFrame(frame) {
119
+ export function requestFrame(frame: (timestamp: Timestamp) => void): void {
90
120
  'worklet';
91
- if (NativeReanimated.native) {
121
+ if (NativeReanimatedModule.native) {
92
122
  requestAnimationFrame(frame);
93
123
  } else {
94
124
  pushFrame(frame);
@@ -96,35 +126,41 @@ export function requestFrame(frame) {
96
126
  }
97
127
 
98
128
  global._WORKLET = false;
99
- global._log = function (s) {
129
+ global._log = function (s: string) {
100
130
  console.log(s);
101
131
  };
102
132
 
103
- export function runOnUI(worklet) {
133
+ export function runOnUI<A extends any[], R>(
134
+ worklet: ComplexWorkletFunction<A, R>
135
+ ): (...args: A) => void {
104
136
  return makeShareable(worklet);
105
137
  }
106
138
 
107
- export function makeShareable(value) {
139
+ export function makeShareable<T>(value: T): T {
108
140
  isConfiguredCheck();
109
- return NativeReanimated.makeShareable(value);
141
+ return NativeReanimatedModule.makeShareable(value);
110
142
  }
111
143
 
112
- export function getViewProp(viewTag, propName) {
144
+ export function getViewProp<T>(viewTag: string, propName: string): Promise<T> {
113
145
  return new Promise((resolve, reject) => {
114
- return NativeReanimated.getViewProp(viewTag, propName, (result) => {
115
- if (result.substr(0, 6) === 'error:') {
116
- reject(result);
117
- } else {
118
- resolve(result);
146
+ return NativeReanimatedModule.getViewProp(
147
+ viewTag,
148
+ propName,
149
+ (result: T) => {
150
+ if (typeof result === 'string' && result.substr(0, 6) === 'error:') {
151
+ reject(result);
152
+ } else {
153
+ resolve(result);
154
+ }
119
155
  }
120
- });
156
+ );
121
157
  });
122
158
  }
123
159
 
124
- let _getTimestamp;
125
- if (process.env.JEST_WORKER_ID) {
160
+ let _getTimestamp: () => number;
161
+ if (nativeShouldBeMock()) {
126
162
  _getTimestamp = () => {
127
- return Date.now();
163
+ return (NativeReanimatedModule as JSReanimated).getTimestamp();
128
164
  };
129
165
  } else {
130
166
  _getTimestamp = () => {
@@ -139,15 +175,18 @@ if (process.env.JEST_WORKER_ID) {
139
175
  };
140
176
  }
141
177
 
142
- export function getTimestamp() {
178
+ export function getTimestamp(): number {
143
179
  'worklet';
144
180
  if (Platform.OS === 'web') {
145
- return NativeReanimated.getTimestamp();
181
+ return (NativeReanimatedModule as JSReanimated).getTimestamp();
146
182
  }
147
183
  return _getTimestamp();
148
184
  }
149
185
 
150
- function workletValueSetter(value) {
186
+ function workletValueSetter(
187
+ this: WorkletValueSetterContext,
188
+ value: (() => AnimationObject) | AnimationObject | PrimitiveValue | Descriptor
189
+ ): void {
151
190
  'worklet';
152
191
  const previousAnimation = this._animation;
153
192
  if (previousAnimation) {
@@ -156,22 +195,26 @@ function workletValueSetter(value) {
156
195
  }
157
196
  if (
158
197
  typeof value === 'function' ||
159
- (value !== null && typeof value === 'object' && value.onFrame)
198
+ (value !== null &&
199
+ typeof value === 'object' &&
200
+ (value as AnimationObject).onFrame !== undefined)
160
201
  ) {
161
- const animation = typeof value === 'function' ? value() : value;
202
+ const animation: AnimationObject =
203
+ typeof value === 'function' ? value() : (value as AnimationObject);
162
204
  // prevent setting again to the same value
163
205
  // and triggering the mappers that treat this value as an input
164
206
  // this happens when the animation's target value(stored in animation.current until animation.onStart is called) is set to the same value as a current one(this._value)
165
207
  // built in animations that are not higher order(withTiming, withSpring) hold target value in .current
166
208
  if (this._value === animation.current && !animation.isHigherOrder) {
209
+ animation.callback && animation.callback(true);
167
210
  return;
168
211
  }
169
212
  // animated set
170
- const initializeAnimation = (timestamp) => {
213
+ const initializeAnimation = (timestamp: number) => {
171
214
  animation.onStart(animation, this.value, timestamp, previousAnimation);
172
215
  };
173
216
  initializeAnimation(getTimestamp());
174
- const step = (timestamp) => {
217
+ const step = (timestamp: number) => {
175
218
  if (animation.cancelled) {
176
219
  animation.callback && animation.callback(false /* finished */);
177
220
  return;
@@ -201,13 +244,16 @@ function workletValueSetter(value) {
201
244
  if (this._value === value) {
202
245
  return;
203
246
  }
204
- this._value = value;
247
+ this._value = value as Descriptor | PrimitiveValue;
205
248
  }
206
249
  }
207
250
 
208
251
  // We cannot use pushFrame
209
252
  // so we use own implementation for js
210
- function workletValueSetterJS(value) {
253
+ function workletValueSetterJS(
254
+ this: WorkletValueSetterContext,
255
+ value: (() => AnimationObject) | AnimationObject | PrimitiveValue | Descriptor
256
+ ): void {
211
257
  const previousAnimation = this._animation;
212
258
  if (previousAnimation) {
213
259
  previousAnimation.cancelled = true;
@@ -215,14 +261,19 @@ function workletValueSetterJS(value) {
215
261
  }
216
262
  if (
217
263
  typeof value === 'function' ||
218
- (value !== null && typeof value === 'object' && value.onFrame)
264
+ (value !== null &&
265
+ typeof value === 'object' &&
266
+ (value as AnimationObject).onFrame)
219
267
  ) {
220
268
  // animated set
221
- const animation = typeof value === 'function' ? value() : value;
222
- let initializeAnimation = (timestamp) => {
269
+ const animation: AnimationObject =
270
+ typeof value === 'function' ? value() : (value as AnimationObject);
271
+ let initializeAnimation: ((timestamp: number) => void) | null = (
272
+ timestamp: number
273
+ ) => {
223
274
  animation.onStart(animation, this.value, timestamp, previousAnimation);
224
275
  };
225
- const step = (timestamp) => {
276
+ const step = (timestamp: number) => {
226
277
  if (animation.cancelled) {
227
278
  animation.callback && animation.callback(false /* finished */);
228
279
  return;
@@ -233,7 +284,7 @@ function workletValueSetterJS(value) {
233
284
  }
234
285
  const finished = animation.onFrame(animation, timestamp);
235
286
  animation.timestamp = timestamp;
236
- this._setValue(animation.current);
287
+ this._setValue && this._setValue(animation.current as PrimitiveValue);
237
288
  if (finished) {
238
289
  animation.callback && animation.callback(true /* finished */);
239
290
  } else {
@@ -245,46 +296,51 @@ function workletValueSetterJS(value) {
245
296
 
246
297
  requestFrame(step);
247
298
  } else {
248
- this._setValue(value);
299
+ this._setValue && this._setValue(value as PrimitiveValue | Descriptor);
249
300
  }
250
301
  }
251
302
 
252
- export function makeMutable(value) {
303
+ export function makeMutable<T>(value: T): SharedValue<T> {
253
304
  isConfiguredCheck();
254
- return NativeReanimated.makeMutable(value);
305
+ return NativeReanimatedModule.makeMutable(value);
255
306
  }
256
307
 
257
- export function makeRemote(object = {}) {
308
+ export function makeRemote<T>(object = {}): T {
258
309
  isConfiguredCheck();
259
- return NativeReanimated.makeRemote(object);
310
+ return NativeReanimatedModule.makeRemote(object);
260
311
  }
261
312
 
262
313
  export function startMapper(
263
- mapper,
264
- inputs = [],
265
- outputs = [],
266
- updater = () => {
314
+ mapper: () => void,
315
+ inputs: any[] = [],
316
+ outputs: any[] = [],
317
+ updater: () => void = () => {
267
318
  // noop
268
319
  },
269
- tag = 0,
270
- name = ''
271
- ) {
320
+ viewDescriptors: Descriptor[] | SharedValue<Descriptor[]> = []
321
+ ): number {
272
322
  isConfiguredCheck();
273
- return NativeReanimated.startMapper(
323
+ return NativeReanimatedModule.startMapper(
274
324
  mapper,
275
325
  inputs,
276
326
  outputs,
277
327
  updater,
278
- tag,
279
- name
328
+ viewDescriptors
280
329
  );
281
330
  }
282
331
 
283
- export function stopMapper(mapperId) {
284
- NativeReanimated.stopMapper(mapperId);
332
+ export function stopMapper(mapperId: number): void {
333
+ NativeReanimatedModule.stopMapper(mapperId);
334
+ }
335
+
336
+ export interface RunOnJSFunction<A extends any[], R> {
337
+ __callAsync?: (...args: A) => void;
338
+ (...args: A): R;
285
339
  }
286
340
 
287
- export const runOnJS = (fun) => {
341
+ export function runOnJS<A extends any[], R>(
342
+ fun: RunOnJSFunction<A, R>
343
+ ): () => void {
288
344
  'worklet';
289
345
  if (!_WORKLET) {
290
346
  return fun;
@@ -296,21 +352,11 @@ export const runOnJS = (fun) => {
296
352
  } else {
297
353
  return fun.__callAsync;
298
354
  }
299
- };
300
-
301
- export function createAnimatedPropAdapter(adapter, nativeProps) {
302
- const nativePropsToAdd = {};
303
- // eslint-disable-next-line no-unused-expressions
304
- nativeProps?.forEach((prop) => {
305
- nativePropsToAdd[prop] = true;
306
- });
307
- addWhitelistedNativeProps(nativePropsToAdd);
308
- return adapter;
309
355
  }
310
356
 
311
- if (!NativeReanimated.useOnlyV1) {
312
- NativeReanimated.installCoreFunctions(
313
- NativeReanimated.native ? workletValueSetter : workletValueSetterJS
357
+ if (!NativeReanimatedModule.useOnlyV1) {
358
+ NativeReanimatedModule.installCoreFunctions(
359
+ NativeReanimatedModule.native ? workletValueSetter : workletValueSetterJS
314
360
  );
315
361
 
316
362
  const capturableConsole = console;
@@ -1 +1,47 @@
1
- declare const _WORKLET: boolean;
1
+ import { AnimatedStyle, StyleProps, WorkletFunction } from './commonTypes';
2
+ import { ReanimatedConsole } from './core';
3
+ import { MeasuredDimensions } from './NativeMethods';
4
+ import { NativeReanimated } from './NativeReanimated/NativeReanimated';
5
+ declare global {
6
+ const _WORKLET: boolean;
7
+ const _frameTimestamp: number;
8
+ const _eventTimestamp: number;
9
+ const _setGlobalConsole: (console?: ReanimatedConsole) => void;
10
+ const _getCurrentTime: () => number;
11
+ const _stopObservingProgress: (tag: number, flag: boolean) => void;
12
+ const _startObservingProgress: (
13
+ tag: number,
14
+ flag: { value: boolean; _value: boolean }
15
+ ) => void;
16
+ const _updateProps: (
17
+ tag: number,
18
+ name: string,
19
+ updates: StyleProps | AnimatedStyle
20
+ ) => void;
21
+ const _measure: (viewTag: number) => MeasuredDimensions;
22
+ const _scrollTo: (
23
+ viewTag: number,
24
+ x: number,
25
+ y: number,
26
+ animated: boolean
27
+ ) => void;
28
+ namespace NodeJS {
29
+ interface Global {
30
+ __reanimatedWorkletInit: (worklet: WorkletFunction) => void;
31
+ _setGlobalConsole: (console?: ReanimatedConsole) => void;
32
+ _log: (s: string) => void;
33
+ _WORKLET: boolean;
34
+ __reanimatedModuleProxy: NativeReanimated;
35
+ LayoutAnimationRepository: {
36
+ configs: Record<string, unknown>;
37
+ registerConfig(tag: number, config: Record<string, unknown>): void;
38
+ removeConfig(tag: number): void;
39
+ startAnimationForTag(
40
+ tag: number,
41
+ type: string,
42
+ yogaValues: unknown
43
+ ): void;
44
+ };
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,16 @@
1
+ import { useCallback } from 'react';
2
+ import { DependencyList } from './commonTypes';
3
+ import { useAnimatedStyle } from './useAnimatedStyle';
4
+
5
+ // TODO: we should make sure that when useAP is used we are not assigning styles
6
+ // when you need styles to animated you should always use useAS
7
+ export const useAnimatedProps = useAnimatedStyle;
8
+
9
+ export function useWorkletCallback<A extends unknown[], R>(
10
+ fun: (...args: A) => R,
11
+ deps?: DependencyList
12
+ ): (...args: Parameters<typeof fun>) => R {
13
+ return useCallback(fun, deps ?? []);
14
+ }
15
+
16
+ export { useEvent, useHandler } from './utils';
@@ -0,0 +1,12 @@
1
+ export type DependencyList = Array<unknown> | undefined;
2
+
3
+ export type Context = Record<string, unknown>;
4
+
5
+ export interface ContextWithDependencies<TContext extends Context> {
6
+ context: TContext;
7
+ savedDependencies: DependencyList;
8
+ }
9
+ export interface Descriptor {
10
+ tag: number;
11
+ name: string;
12
+ }
@@ -0,0 +1,25 @@
1
+ export { DependencyList, Context } from './commonTypes';
2
+ export {
3
+ useAnimatedProps,
4
+ useEvent,
5
+ useHandler,
6
+ useWorkletCallback,
7
+ } from './Hooks';
8
+ export { useSharedValue } from './useSharedValue';
9
+ export { useAnimatedStyle, AnimatedStyleResult } from './useAnimatedStyle';
10
+ export {
11
+ useAnimatedGestureHandler,
12
+ GestureHandlerEvent,
13
+ GestureHandlers,
14
+ } from './useAnimatedGestureHandler';
15
+ export {
16
+ useAnimatedReaction,
17
+ AnimatedReactionWorkletFunction,
18
+ } from './useAnimatedReaction';
19
+ export { useAnimatedRef } from './useAnimatedRef';
20
+ export {
21
+ useAnimatedScrollHandler,
22
+ ScrollHandler,
23
+ ScrollHandlers,
24
+ } from './useAnimatedScrollHandler';
25
+ export { useDerivedValue, DerivedValue } from './useDerivedValue';
@@ -0,0 +1,110 @@
1
+ import { MutableRefObject } from 'react';
2
+ import { WorkletFunction } from '../commonTypes';
3
+ import { isWeb } from '../PlatformChecker';
4
+ import WorkletEventHandler from '../WorkletEventHandler';
5
+ import { Context, DependencyList } from './commonTypes';
6
+ import { useEvent, useHandler } from './Hooks';
7
+
8
+ interface Handler<T, TContext extends Context> extends WorkletFunction {
9
+ (event: T, context: TContext, isCanceledOrFailed?: boolean): void;
10
+ }
11
+
12
+ export interface GestureHandlers<T, TContext extends Context> {
13
+ [key: string]: Handler<T, TContext> | undefined;
14
+ onStart?: Handler<T, TContext>;
15
+ onActive?: Handler<T, TContext>;
16
+ onEnd?: Handler<T, TContext>;
17
+ onFail?: Handler<T, TContext>;
18
+ onCancel?: Handler<T, TContext>;
19
+ onFinish?: Handler<T, TContext>;
20
+ }
21
+
22
+ export enum EventType {
23
+ UNDETERMINED = 0,
24
+ FAILED,
25
+ BEGAN,
26
+ CANCELLED,
27
+ ACTIVE,
28
+ END,
29
+ }
30
+
31
+ export interface GestureHandlerStateChangeNativeEvent {
32
+ handlerTag: number;
33
+ numberOfPointers: number;
34
+ state: EventType;
35
+ oldState: EventType;
36
+ }
37
+
38
+ export interface GestureHandlerEvent<T>
39
+ extends GestureHandlerStateChangeNativeEvent {
40
+ nativeEvent: T;
41
+ }
42
+
43
+ export function useAnimatedGestureHandler<
44
+ T extends GestureHandlerEvent<T>,
45
+ TContext extends Context
46
+ >(
47
+ handlers: GestureHandlers<T, TContext>,
48
+ dependencies?: DependencyList
49
+ ): MutableRefObject<WorkletEventHandler<T> | null> | ((e: T) => void) {
50
+ const { context, doDependenciesDiffer, useWeb } = useHandler<T, TContext>(
51
+ handlers,
52
+ dependencies
53
+ );
54
+
55
+ const handler = (e: T) => {
56
+ 'worklet';
57
+ const event = useWeb ? e.nativeEvent : e;
58
+
59
+ if (event.state === EventType.BEGAN && handlers.onStart) {
60
+ handlers.onStart(event, context);
61
+ }
62
+ if (event.state === EventType.ACTIVE && handlers.onActive) {
63
+ handlers.onActive(event, context);
64
+ }
65
+ if (
66
+ event.oldState === EventType.ACTIVE &&
67
+ event.state === EventType.END &&
68
+ handlers.onEnd
69
+ ) {
70
+ handlers.onEnd(event, context);
71
+ }
72
+ if (
73
+ event.oldState === EventType.BEGAN &&
74
+ event.state === EventType.FAILED &&
75
+ handlers.onFail
76
+ ) {
77
+ handlers.onFail(event, context);
78
+ }
79
+ if (
80
+ event.oldState === EventType.ACTIVE &&
81
+ event.state === EventType.CANCELLED &&
82
+ handlers.onCancel
83
+ ) {
84
+ handlers.onCancel(event, context);
85
+ }
86
+ if (
87
+ (event.oldState === EventType.BEGAN ||
88
+ event.oldState === EventType.ACTIVE) &&
89
+ event.state !== EventType.BEGAN &&
90
+ event.state !== EventType.ACTIVE &&
91
+ handlers.onFinish
92
+ ) {
93
+ handlers.onFinish(
94
+ event,
95
+ context,
96
+ event.state === EventType.CANCELLED || event.state === EventType.FAILED
97
+ );
98
+ }
99
+ };
100
+
101
+ if (isWeb()) {
102
+ return handler;
103
+ }
104
+
105
+ return useEvent<T>(
106
+ handler,
107
+ ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
108
+ doDependenciesDiffer
109
+ );
110
+ }
@@ -0,0 +1,49 @@
1
+ import { useEffect } from 'react';
2
+ import { BasicWorkletFunction, WorkletFunction } from '../commonTypes';
3
+ import { startMapper, stopMapper } from '../core';
4
+ import { DependencyList } from './commonTypes';
5
+ import { useSharedValue } from './useSharedValue';
6
+
7
+ export interface AnimatedReactionWorkletFunction<T> extends WorkletFunction {
8
+ (prepared: T, previous: T | null): void;
9
+ }
10
+ /**
11
+ * @param prepare - worklet used for data preparation for the second parameter
12
+ * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions
13
+ * the first worklet defines the inputs, in other words on which shared values change will it be called.
14
+ * the second one can modify any shared values but those which are mentioned in the first worklet. Beware of that, because this may result in endless loop and high cpu usage.
15
+ */
16
+ export function useAnimatedReaction<T>(
17
+ prepare: BasicWorkletFunction<T>,
18
+ react: AnimatedReactionWorkletFunction<T>,
19
+ dependencies: DependencyList
20
+ ): void {
21
+ const previous = useSharedValue<T | null>(null);
22
+ if (dependencies === undefined) {
23
+ dependencies = [
24
+ Object.values(prepare._closure ?? {}),
25
+ Object.values(react._closure ?? {}),
26
+ prepare.__workletHash,
27
+ react.__workletHash,
28
+ ];
29
+ } else {
30
+ dependencies.push(prepare.__workletHash, react.__workletHash);
31
+ }
32
+
33
+ useEffect(() => {
34
+ const fun = () => {
35
+ 'worklet';
36
+ const input = prepare();
37
+ react(input, previous.value);
38
+ previous.value = input;
39
+ };
40
+ const mapperId = startMapper(
41
+ fun,
42
+ Object.values(prepare._closure ?? {}),
43
+ []
44
+ );
45
+ return () => {
46
+ stopMapper(mapperId);
47
+ };
48
+ }, dependencies);
49
+ }
@@ -0,0 +1,34 @@
1
+ import { Component, useRef } from 'react';
2
+ import { getTag } from '../NativeMethods';
3
+ import { useSharedValue } from './useSharedValue';
4
+
5
+ export interface RefObjectFunction<T> {
6
+ current: T | null;
7
+ (component?: T): number;
8
+ }
9
+
10
+ export function useAnimatedRef<T extends Component>(): RefObjectFunction<T> {
11
+ const tag = useSharedValue<number | null>(-1);
12
+ const ref = useRef<RefObjectFunction<T>>();
13
+
14
+ if (!ref.current) {
15
+ const fun: RefObjectFunction<T> = <RefObjectFunction<T>>((component) => {
16
+ 'worklet';
17
+ // enters when ref is set by attaching to a component
18
+ if (component) {
19
+ tag.value = getTag(component);
20
+ fun.current = component;
21
+ }
22
+ return tag.value;
23
+ });
24
+
25
+ Object.defineProperty(fun, 'current', {
26
+ value: null,
27
+ writable: true,
28
+ enumerable: false,
29
+ });
30
+ ref.current = fun;
31
+ }
32
+
33
+ return ref.current;
34
+ }