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,732 +0,0 @@
1
- /* global _frameTimestamp */
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
- import { useEffect, useRef, useCallback } from 'react';
5
- import WorkletEventHandler from './WorkletEventHandler';
6
- import { startMapper, stopMapper, makeMutable, makeRemote, requestFrame, getTimestamp, } from './core';
7
- import updateProps, { updatePropsJestWrapper, colorProps } from './UpdateProps';
8
- import { initialUpdaterRun, cancelAnimation } from './animations';
9
- import { getTag } from './NativeMethods';
10
- import NativeReanimated from './NativeReanimated';
11
- import { Platform } from 'react-native';
12
- import { processColor } from './Colors';
13
- export function useSharedValue(init) {
14
- const ref = useRef(null);
15
- if (ref.current === null) {
16
- ref.current = makeMutable(init);
17
- }
18
- useEffect(() => {
19
- return () => {
20
- cancelAnimation(ref.current);
21
- };
22
- }, []);
23
- return ref.current;
24
- }
25
- export function useEvent(handler, eventNames = [], rebuild = false) {
26
- const initRef = useRef(null);
27
- if (initRef.current === null) {
28
- initRef.current = new WorkletEventHandler(handler, eventNames);
29
- }
30
- else if (rebuild) {
31
- initRef.current.updateWorklet(handler);
32
- }
33
- useEffect(() => {
34
- return () => {
35
- initRef.current = null;
36
- };
37
- }, []);
38
- return initRef;
39
- }
40
- function prepareAnimation(animatedProp, lastAnimation, lastValue) {
41
- 'worklet';
42
- if (Array.isArray(animatedProp)) {
43
- animatedProp.forEach((prop, index) => prepareAnimation(prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index]));
44
- return animatedProp;
45
- }
46
- if (typeof animatedProp === 'object' && animatedProp.onFrame) {
47
- const animation = animatedProp;
48
- let value = animation.current;
49
- if (lastValue !== undefined) {
50
- if (typeof lastValue === 'object') {
51
- if (lastValue.value !== undefined) {
52
- // previously it was a shared value
53
- value = lastValue.value;
54
- }
55
- else if (lastValue.onFrame !== undefined) {
56
- if ((lastAnimation === null || lastAnimation === void 0 ? void 0 : lastAnimation.current) !== undefined) {
57
- // it was an animation before, copy its state
58
- value = lastAnimation.current;
59
- }
60
- else if ((lastValue === null || lastValue === void 0 ? void 0 : lastValue.current) !== undefined) {
61
- // it was initialized
62
- value = lastValue.current;
63
- }
64
- }
65
- }
66
- else {
67
- // previously it was a plain value, just set it as starting point
68
- value = lastValue;
69
- }
70
- }
71
- animation.callStart = (timestamp) => {
72
- animation.onStart(animation, value, timestamp, lastAnimation);
73
- };
74
- animation.callStart(getTimestamp());
75
- animation.callStart = null;
76
- }
77
- else if (typeof animatedProp === 'object') {
78
- // it is an object
79
- Object.keys(animatedProp).forEach((key) => prepareAnimation(animatedProp[key], lastAnimation && lastAnimation[key], lastValue && lastValue[key]));
80
- }
81
- }
82
- function runAnimations(animation, timestamp, key, result, animationsActive) {
83
- 'worklet';
84
- if (!animationsActive.value) {
85
- return true;
86
- }
87
- if (Array.isArray(animation)) {
88
- result[key] = [];
89
- let allFinished = true;
90
- animation.forEach((entry, index) => {
91
- if (!runAnimations(entry, timestamp, index, result[key], animationsActive)) {
92
- allFinished = false;
93
- }
94
- });
95
- return allFinished;
96
- }
97
- else if (typeof animation === 'object' && animation.onFrame) {
98
- let finished = true;
99
- if (!animation.finished) {
100
- if (animation.callStart) {
101
- animation.callStart(timestamp);
102
- animation.callStart = null;
103
- }
104
- finished = animation.onFrame(animation, timestamp);
105
- animation.timestamp = timestamp;
106
- if (finished) {
107
- animation.finished = true;
108
- animation.callback && animation.callback(true /* finished */);
109
- }
110
- }
111
- result[key] = animation.current;
112
- return finished;
113
- }
114
- else if (typeof animation === 'object') {
115
- result[key] = {};
116
- let allFinished = true;
117
- Object.keys(animation).forEach((k) => {
118
- if (!runAnimations(animation[k], timestamp, k, result[key], animationsActive)) {
119
- allFinished = false;
120
- }
121
- });
122
- return allFinished;
123
- }
124
- else {
125
- result[key] = animation;
126
- return true;
127
- }
128
- }
129
- function isAnimated(prop) {
130
- 'worklet';
131
- if (Array.isArray(prop)) {
132
- for (const item of prop) {
133
- for (const key in item) {
134
- if (item[key].onFrame !== undefined) {
135
- return true;
136
- }
137
- }
138
- }
139
- return false;
140
- }
141
- return (prop === null || prop === void 0 ? void 0 : prop.onFrame) !== undefined;
142
- }
143
- function styleDiff(oldStyle, newStyle) {
144
- 'worklet';
145
- const diff = {};
146
- Object.keys(oldStyle).forEach((key) => {
147
- if (newStyle[key] === undefined) {
148
- diff[key] = null;
149
- }
150
- });
151
- Object.keys(newStyle).forEach((key) => {
152
- const value = newStyle[key];
153
- const oldValue = oldStyle[key];
154
- if (isAnimated(value)) {
155
- // do nothing
156
- return;
157
- }
158
- if (oldValue !== value &&
159
- JSON.stringify(oldValue) !== JSON.stringify(value)) {
160
- // I'd use deep equal here but that'd take additional work and this was easier
161
- diff[key] = value;
162
- }
163
- });
164
- return diff;
165
- }
166
- function getStyleWithoutAnimations(newStyle) {
167
- 'worklet';
168
- const diff = {};
169
- for (const key in newStyle) {
170
- const value = newStyle[key];
171
- if (isAnimated(value)) {
172
- continue;
173
- }
174
- diff[key] = value;
175
- }
176
- return diff;
177
- }
178
- const validateAnimatedStyles = (styles) => {
179
- 'worklet';
180
- if (typeof styles !== 'object') {
181
- throw new Error(`useAnimatedStyle has to return an object, found ${typeof styles} instead`);
182
- }
183
- else if (Array.isArray(styles)) {
184
- throw new Error('useAnimatedStyle has to return an object and cannot return static styles combined with dynamic ones. Please do merging where a component receives props.');
185
- }
186
- };
187
- function styleUpdater(viewDescriptor, updater, state, maybeViewRef, animationsActive) {
188
- 'worklet';
189
- const animations = state.animations || {};
190
- const newValues = updater() || {};
191
- const oldValues = state.last;
192
- let hasAnimations = false;
193
- for (const key in newValues) {
194
- const value = newValues[key];
195
- if (isAnimated(value)) {
196
- prepareAnimation(value, animations[key], oldValues[key]);
197
- animations[key] = value;
198
- hasAnimations = true;
199
- }
200
- else {
201
- delete animations[key];
202
- }
203
- }
204
- if (hasAnimations) {
205
- const frame = (timestamp) => {
206
- const { animations, last, isAnimationCancelled } = state;
207
- if (isAnimationCancelled) {
208
- state.isAnimationRunning = false;
209
- return;
210
- }
211
- const updates = {};
212
- let allFinished = true;
213
- for (const propName in animations) {
214
- const finished = runAnimations(animations[propName], timestamp, propName, updates, animationsActive);
215
- if (finished) {
216
- last[propName] = updates[propName];
217
- delete animations[propName];
218
- }
219
- else {
220
- allFinished = false;
221
- }
222
- }
223
- if (updates) {
224
- updateProps(viewDescriptor, updates, maybeViewRef);
225
- }
226
- if (!allFinished) {
227
- requestFrame(frame);
228
- }
229
- else {
230
- state.isAnimationRunning = false;
231
- }
232
- };
233
- state.animations = animations;
234
- if (!state.isAnimationRunning) {
235
- state.isAnimationCancelled = false;
236
- state.isAnimationRunning = true;
237
- if (_frameTimestamp) {
238
- frame(_frameTimestamp);
239
- }
240
- else {
241
- requestFrame(frame);
242
- }
243
- }
244
- state.last = Object.assign({}, oldValues, newValues);
245
- const style = getStyleWithoutAnimations(oldValues, newValues);
246
- if (style) {
247
- updateProps(viewDescriptor, style, maybeViewRef);
248
- }
249
- }
250
- else {
251
- state.isAnimationCancelled = true;
252
- state.animations = {};
253
- updateProps(viewDescriptor, newValues, maybeViewRef);
254
- }
255
- }
256
- function jestStyleUpdater(viewDescriptor, updater, state, maybeViewRef, animationsActive, animatedStyle, adapters = []) {
257
- 'worklet';
258
- const animations = state.animations || {};
259
- const newValues = updater() || {};
260
- const oldValues = state.last;
261
- // extract animated props
262
- let hasAnimations = false;
263
- Object.keys(animations).forEach((key) => {
264
- const value = newValues[key];
265
- if (!isAnimated(value)) {
266
- delete animations[key];
267
- }
268
- });
269
- Object.keys(newValues).forEach((key) => {
270
- const value = newValues[key];
271
- if (isAnimated(value)) {
272
- prepareAnimation(value, animations[key], oldValues[key]);
273
- animations[key] = value;
274
- hasAnimations = true;
275
- }
276
- });
277
- function frame(timestamp) {
278
- const { animations, last, isAnimationCancelled } = state;
279
- if (isAnimationCancelled) {
280
- state.isAnimationRunning = false;
281
- return;
282
- }
283
- const updates = {};
284
- let allFinished = true;
285
- Object.keys(animations).forEach((propName) => {
286
- const finished = runAnimations(animations[propName], timestamp, propName, updates, animationsActive);
287
- if (finished) {
288
- last[propName] = updates[propName];
289
- delete animations[propName];
290
- }
291
- else {
292
- allFinished = false;
293
- }
294
- });
295
- if (Object.keys(updates).length) {
296
- updatePropsJestWrapper(viewDescriptor, updates, maybeViewRef, animatedStyle, adapters);
297
- }
298
- if (!allFinished) {
299
- requestFrame(frame);
300
- }
301
- else {
302
- state.isAnimationRunning = false;
303
- }
304
- }
305
- if (hasAnimations) {
306
- state.animations = animations;
307
- if (!state.isAnimationRunning) {
308
- state.isAnimationCancelled = false;
309
- state.isAnimationRunning = true;
310
- if (_frameTimestamp) {
311
- frame(_frameTimestamp);
312
- }
313
- else {
314
- requestFrame(frame);
315
- }
316
- }
317
- }
318
- else {
319
- state.isAnimationCancelled = true;
320
- state.animations = {};
321
- }
322
- // calculate diff
323
- const diff = styleDiff(oldValues, newValues);
324
- state.last = Object.assign({}, oldValues, newValues);
325
- if (Object.keys(diff).length !== 0) {
326
- updatePropsJestWrapper(viewDescriptor, diff, maybeViewRef, animatedStyle, adapters);
327
- }
328
- }
329
- const colorPropsSet = new Set(colorProps);
330
- const hasColorProps = (updates) => {
331
- for (const key in updates) {
332
- if (colorPropsSet.has(key)) {
333
- return true;
334
- }
335
- }
336
- return false;
337
- };
338
- const parseColors = (updates) => {
339
- 'worklet';
340
- for (const key in updates) {
341
- if (colorProps.indexOf(key) !== -1) {
342
- updates[key] = processColor(updates[key]);
343
- }
344
- }
345
- };
346
- const canApplyOptimalisation = (upadterFn) => {
347
- const FUNCTIONLESS_FLAG = 0b00000001;
348
- const STATEMENTLESS_FLAG = 0b00000010;
349
- const optimalization = upadterFn.__optimalization;
350
- return (optimalization & FUNCTIONLESS_FLAG && optimalization & STATEMENTLESS_FLAG);
351
- };
352
- export function useAnimatedStyle(updater, dependencies, adapters) {
353
- const viewDescriptor = useSharedValue({ tag: -1, name: null }, false);
354
- const initRef = useRef(null);
355
- const inputs = Object.values(updater._closure);
356
- const viewRef = useRef(null);
357
- adapters = !adapters || Array.isArray(adapters) ? adapters : [adapters];
358
- const adaptersHash = adapters ? buildWorkletsHash(adapters) : null;
359
- const animationsActive = useSharedValue(true);
360
- let animatedStyle;
361
- if (process.env.JEST_WORKER_ID) {
362
- animatedStyle = useRef({});
363
- }
364
- // build dependencies
365
- if (!dependencies) {
366
- dependencies = [...inputs, updater.__workletHash];
367
- }
368
- else {
369
- dependencies.push(updater.__workletHash);
370
- }
371
- adaptersHash && dependencies.push(adaptersHash);
372
- if (initRef.current === null) {
373
- const initial = initialUpdaterRun(updater);
374
- validateAnimatedStyles(initial);
375
- initRef.current = {
376
- initial,
377
- remoteState: makeRemote({ last: initial }),
378
- };
379
- }
380
- const { remoteState, initial } = initRef.current;
381
- const maybeViewRef = NativeReanimated.native ? undefined : viewRef;
382
- useEffect(() => {
383
- let fun;
384
- let upadterFn = updater;
385
- let optimalization = updater.__optimalization;
386
- if (adapters) {
387
- upadterFn = () => {
388
- 'worklet';
389
- const newValues = updater();
390
- adapters.forEach((adapter) => {
391
- adapter(newValues);
392
- });
393
- return newValues;
394
- };
395
- }
396
- if (canApplyOptimalisation(upadterFn) && Platform.OS !== 'web') {
397
- if (hasColorProps(upadterFn())) {
398
- upadterFn = () => {
399
- 'worklet';
400
- const style = upadterFn();
401
- parseColors(style);
402
- return style;
403
- };
404
- }
405
- }
406
- else if (Platform.OS !== 'web') {
407
- optimalization = 0;
408
- upadterFn = () => {
409
- 'worklet';
410
- const style = upadterFn();
411
- parseColors(style);
412
- return style;
413
- };
414
- }
415
- if (typeof updater.__optimalization !== undefined) {
416
- upadterFn.__optimalization = optimalization;
417
- }
418
- if (process.env.JEST_WORKER_ID) {
419
- fun = () => {
420
- 'worklet';
421
- jestStyleUpdater(viewDescriptor, updater, remoteState, maybeViewRef, animationsActive, animatedStyle, adapters);
422
- };
423
- }
424
- else {
425
- fun = () => {
426
- 'worklet';
427
- styleUpdater(viewDescriptor, upadterFn, remoteState, maybeViewRef, animationsActive);
428
- };
429
- }
430
- const mapperId = startMapper(fun, inputs, [], upadterFn, viewDescriptor.value.tag, viewDescriptor.value.name || 'RCTView');
431
- return () => {
432
- stopMapper(mapperId);
433
- };
434
- }, dependencies);
435
- useEffect(() => {
436
- animationsActive.value = true;
437
- return () => {
438
- initRef.current = null;
439
- viewRef.current = null;
440
- animationsActive.value = false;
441
- };
442
- }, []);
443
- // check for invalid usage of shared values in returned object
444
- let wrongKey;
445
- const isObjectValid = (element, key) => {
446
- const result = typeof element === 'object' && element.value !== undefined;
447
- if (result) {
448
- wrongKey = key;
449
- }
450
- return !result;
451
- };
452
- const isError = Object.keys(initial).some((key) => {
453
- const element = initial[key];
454
- let result = false;
455
- // a case for transform that has a format of an array of objects
456
- if (Array.isArray(element)) {
457
- for (const elementArrayItem of element) {
458
- // this means unhandled format and it doesn't match the transform format
459
- if (typeof elementArrayItem !== 'object') {
460
- break;
461
- }
462
- const objectValue = Object.values(elementArrayItem)[0];
463
- result = isObjectValid(objectValue, key);
464
- if (!result) {
465
- break;
466
- }
467
- }
468
- }
469
- else {
470
- result = isObjectValid(element, key);
471
- }
472
- return !result;
473
- });
474
- if (isError && wrongKey !== undefined) {
475
- throw new Error(`invalid value passed to \`${wrongKey}\`, maybe you forgot to use \`.value\`?`);
476
- }
477
- if (process.env.JEST_WORKER_ID) {
478
- return { viewDescriptor, initial, viewRef, animatedStyle };
479
- }
480
- else {
481
- return { viewDescriptor, initial, viewRef };
482
- }
483
- }
484
- // TODO: we should make sure that when useAP is used we are not assigning styles
485
- // when you need styles to animated you should always use useAS
486
- export const useAnimatedProps = useAnimatedStyle;
487
- export function useDerivedValue(processor, dependencies) {
488
- const initRef = useRef(null);
489
- const inputs = Object.values(processor._closure);
490
- // build dependencies
491
- if (dependencies === undefined) {
492
- dependencies = [...inputs, processor.__workletHash];
493
- }
494
- else {
495
- dependencies.push(processor.__workletHash);
496
- }
497
- if (initRef.current === null) {
498
- initRef.current = makeMutable(initialUpdaterRun(processor));
499
- }
500
- const sharedValue = initRef.current;
501
- useEffect(() => {
502
- const fun = () => {
503
- 'worklet';
504
- sharedValue.value = processor();
505
- };
506
- const mapperId = startMapper(fun, inputs, [sharedValue]);
507
- return () => {
508
- stopMapper(mapperId);
509
- };
510
- }, dependencies);
511
- useEffect(() => {
512
- return () => {
513
- initRef.current = null;
514
- };
515
- }, []);
516
- return sharedValue;
517
- }
518
- // builds one big hash from multiple worklets' hashes
519
- function buildWorkletsHash(handlers) {
520
- return Object.keys(handlers).reduce((previousValue, key) => previousValue === null
521
- ? handlers[key].__workletHash
522
- : previousValue.toString() + handlers[key].__workletHash.toString(), null);
523
- }
524
- // builds dependencies array for gesture handlers
525
- function buildDependencies(dependencies, handlers) {
526
- if (!dependencies) {
527
- dependencies = Object.keys(handlers).map((handlerKey) => {
528
- const handler = handlers[handlerKey];
529
- return {
530
- workletHash: handler.__workletHash,
531
- closure: handler._closure,
532
- };
533
- });
534
- }
535
- else {
536
- dependencies.push(buildWorkletsHash(handlers));
537
- }
538
- return dependencies;
539
- }
540
- // this is supposed to work as useEffect comparison
541
- function areDependenciesEqual(nextDeps, prevDeps) {
542
- function is(x, y) {
543
- /* eslint-disable no-self-compare */
544
- return (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y);
545
- /* eslint-enable no-self-compare */
546
- }
547
- const objectIs = typeof Object.is === 'function' ? Object.is : is;
548
- function areHookInputsEqual(nextDeps, prevDeps) {
549
- if (!nextDeps || !prevDeps || prevDeps.length !== nextDeps.length) {
550
- return false;
551
- }
552
- for (let i = 0; i < prevDeps.length; ++i) {
553
- if (!objectIs(nextDeps[i], prevDeps[i])) {
554
- return false;
555
- }
556
- }
557
- return true;
558
- }
559
- return areHookInputsEqual(nextDeps, prevDeps);
560
- }
561
- export function useAnimatedGestureHandler(handlers, dependencies) {
562
- const initRef = useRef(null);
563
- if (initRef.current === null) {
564
- initRef.current = {
565
- context: makeRemote({}),
566
- savedDependencies: [],
567
- };
568
- }
569
- useEffect(() => {
570
- return () => {
571
- initRef.current = null;
572
- };
573
- }, []);
574
- const { context, savedDependencies } = initRef.current;
575
- dependencies = buildDependencies(dependencies, handlers);
576
- const dependenciesDiffer = !areDependenciesEqual(dependencies, savedDependencies);
577
- initRef.current.savedDependencies = dependencies;
578
- const handler = (event) => {
579
- 'worklet';
580
- event = Platform.OS === 'web' ? event.nativeEvent : event;
581
- const FAILED = 1;
582
- const BEGAN = 2;
583
- const CANCELLED = 3;
584
- const ACTIVE = 4;
585
- const END = 5;
586
- if (event.state === BEGAN && handlers.onStart) {
587
- handlers.onStart(event, context);
588
- }
589
- if (event.state === ACTIVE && handlers.onActive) {
590
- handlers.onActive(event, context);
591
- }
592
- if (event.oldState === ACTIVE && event.state === END && handlers.onEnd) {
593
- handlers.onEnd(event, context);
594
- }
595
- if (event.oldState === BEGAN && event.state === FAILED && handlers.onFail) {
596
- handlers.onFail(event, context);
597
- }
598
- if (event.oldState === ACTIVE &&
599
- event.state === CANCELLED &&
600
- handlers.onCancel) {
601
- handlers.onCancel(event, context);
602
- }
603
- if ((event.oldState === BEGAN || event.oldState === ACTIVE) &&
604
- event.state !== BEGAN &&
605
- event.state !== ACTIVE &&
606
- handlers.onFinish) {
607
- handlers.onFinish(event, context, event.state === CANCELLED || event.state === FAILED);
608
- }
609
- };
610
- if (Platform.OS === 'web') {
611
- return handler;
612
- }
613
- return useEvent(handler, ['onGestureHandlerStateChange', 'onGestureHandlerEvent'], dependenciesDiffer);
614
- }
615
- export function useAnimatedScrollHandler(handlers, dependencies) {
616
- const initRef = useRef(null);
617
- if (initRef.current === null) {
618
- initRef.current = {
619
- context: makeRemote({}),
620
- savedDependencies: [],
621
- };
622
- }
623
- useEffect(() => {
624
- return () => {
625
- initRef.current = null;
626
- };
627
- }, []);
628
- const { context, savedDependencies } = initRef.current;
629
- dependencies = buildDependencies(dependencies, handlers);
630
- const dependenciesDiffer = !areDependenciesEqual(dependencies, savedDependencies);
631
- initRef.current.savedDependencies = dependencies;
632
- // build event subscription array
633
- const subscribeForEvents = ['onScroll'];
634
- if (handlers.onBeginDrag !== undefined) {
635
- subscribeForEvents.push('onScrollBeginDrag');
636
- }
637
- if (handlers.onEndDrag !== undefined) {
638
- subscribeForEvents.push('onScrollEndDrag');
639
- }
640
- if (handlers.onMomentumBegin !== undefined) {
641
- subscribeForEvents.push('onMomentumScrollBegin');
642
- }
643
- if (handlers.onMomentumEnd !== undefined) {
644
- subscribeForEvents.push('onMomentumScrollEnd');
645
- }
646
- return useEvent((event) => {
647
- 'worklet';
648
- const { onScroll, onBeginDrag, onEndDrag, onMomentumBegin, onMomentumEnd, } = handlers;
649
- if (event.eventName.endsWith('onScroll')) {
650
- if (onScroll) {
651
- onScroll(event, context);
652
- }
653
- else if (typeof handlers === 'function') {
654
- handlers(event, context);
655
- }
656
- }
657
- else if (onBeginDrag && event.eventName.endsWith('onScrollBeginDrag')) {
658
- onBeginDrag(event, context);
659
- }
660
- else if (onEndDrag && event.eventName.endsWith('onScrollEndDrag')) {
661
- onEndDrag(event, context);
662
- }
663
- else if (onMomentumBegin &&
664
- event.eventName.endsWith('onMomentumScrollBegin')) {
665
- onMomentumBegin(event, context);
666
- }
667
- else if (onMomentumEnd &&
668
- event.eventName.endsWith('onMomentumScrollEnd')) {
669
- onMomentumEnd(event, context);
670
- }
671
- }, subscribeForEvents, dependenciesDiffer);
672
- }
673
- export function useAnimatedRef() {
674
- const tag = useSharedValue(-1);
675
- const ref = useRef(null);
676
- if (!ref.current) {
677
- const fun = function (component) {
678
- 'worklet';
679
- // enters when ref is set by attaching to a component
680
- if (component) {
681
- tag.value = getTag(component);
682
- fun.current = component;
683
- }
684
- return tag.value;
685
- };
686
- Object.defineProperty(fun, 'current', {
687
- value: null,
688
- writable: true,
689
- enumerable: false,
690
- });
691
- ref.current = fun;
692
- }
693
- return ref.current;
694
- }
695
- /**
696
- * @param prepare - worklet used for data preparation for the second parameter
697
- * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions
698
- * the first worklet defines the inputs, in other words on which shared values change will it be called.
699
- * 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.
700
- */
701
- export function useAnimatedReaction(prepare, react, dependencies) {
702
- const previous = useSharedValue(null);
703
- if (dependencies === undefined) {
704
- dependencies = [
705
- Object.values(prepare._closure),
706
- Object.values(react._closure),
707
- prepare.__workletHash,
708
- react.__workletHash,
709
- ];
710
- }
711
- else {
712
- dependencies.push(prepare.__workletHash, react.__workletHash);
713
- }
714
- useEffect(() => {
715
- const fun = () => {
716
- 'worklet';
717
- const input = prepare();
718
- react(input, previous.value);
719
- previous.value = input;
720
- };
721
- const mapperId = startMapper(fun, Object.values(prepare._closure), []);
722
- return () => {
723
- stopMapper(mapperId);
724
- };
725
- }, dependencies);
726
- }
727
- export function useWorkletCallback(fun, deps) {
728
- return useCallback(fun, deps);
729
- }
730
- export function createWorklet(fun) {
731
- return fun;
732
- }