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,868 +0,0 @@
1
- /* global _WORKLET */
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
- import { Easing } from './Easing';
5
- import { isColor, convertToHSVA, toRGBA } from './Colors';
6
- import NativeReanimated from './NativeReanimated';
7
- import { Platform } from 'react-native';
8
-
9
- let IN_STYLE_UPDATER = false;
10
-
11
- export function initialUpdaterRun(updater) {
12
- IN_STYLE_UPDATER = true;
13
- const result = updater();
14
- IN_STYLE_UPDATER = false;
15
- return result;
16
- }
17
-
18
- export function transform(value, handler) {
19
- 'worklet';
20
- if (value === undefined) {
21
- return undefined;
22
- }
23
-
24
- if (typeof value === 'string') {
25
- // toInt
26
- // TODO handle color
27
- const match = value.match(/([A-Za-z]*)(-?\d*\.?\d*)([A-Za-z%]*)/);
28
- const prefix = match[1];
29
- const suffix = match[3];
30
- const number = match[2];
31
- handler.__prefix = prefix;
32
- handler.__suffix = suffix;
33
- return parseFloat(number);
34
- }
35
-
36
- // toString if __prefix is available and number otherwise
37
- if (handler.__prefix === undefined) {
38
- return value;
39
- }
40
-
41
- return handler.__prefix + value + handler.__suffix;
42
- }
43
-
44
- export function transformAnimation(animation) {
45
- 'worklet';
46
- if (!animation) {
47
- return;
48
- }
49
- animation.toValue = transform(animation.toValue, animation);
50
- animation.current = transform(animation.current, animation);
51
- animation.startValue = transform(animation.startValue, animation);
52
- }
53
-
54
- export function decorateAnimation(animation) {
55
- 'worklet';
56
- if (animation.isHigherOrder) {
57
- return;
58
- }
59
- const baseOnStart = animation.onStart;
60
- const baseOnFrame = animation.onFrame;
61
- const animationCopy = Object.assign({}, animation);
62
- delete animationCopy.callback;
63
-
64
- const prefNumberSuffOnStart = (
65
- animation,
66
- value,
67
- timestamp,
68
- previousAnimation
69
- ) => {
70
- const val = transform(value, animation);
71
- transformAnimation(animation);
72
- if (previousAnimation !== animation) transformAnimation(previousAnimation);
73
-
74
- baseOnStart(animation, val, timestamp, previousAnimation);
75
-
76
- transformAnimation(animation);
77
- if (previousAnimation !== animation) transformAnimation(previousAnimation);
78
- };
79
- const prefNumberSuffOnFrame = (animation, timestamp) => {
80
- transformAnimation(animation);
81
-
82
- const res = baseOnFrame(animation, timestamp);
83
-
84
- transformAnimation(animation);
85
- return res;
86
- };
87
-
88
- const tab = ['H', 'S', 'V', 'A'];
89
- const colorOnStart = (animation, value, timestamp, previousAnimation) => {
90
- let HSVAValue;
91
- let HSVACurrent;
92
- let HSVAToValue;
93
- const res = [];
94
- if (isColor(value)) {
95
- HSVACurrent = convertToHSVA(animation.current);
96
- HSVAValue = convertToHSVA(value);
97
- if (animation.toValue) {
98
- HSVAToValue = convertToHSVA(animation.toValue);
99
- }
100
- }
101
- tab.forEach((i, index) => {
102
- animation[i] = Object.assign({}, animationCopy);
103
- animation[i].current = HSVACurrent[index];
104
- animation[i].toValue = HSVAToValue ? HSVAToValue[index] : undefined;
105
- animation[i].onStart(
106
- animation[i],
107
- HSVAValue[index],
108
- timestamp,
109
- previousAnimation ? previousAnimation[i] : undefined
110
- );
111
- res.push(animation[i].current);
112
- });
113
-
114
- animation.current = toRGBA(res);
115
- };
116
-
117
- const colorOnFrame = (animation, timestamp) => {
118
- const HSVACurrent = convertToHSVA(animation.current);
119
- const res = [];
120
- let finished = true;
121
- tab.forEach((i, index) => {
122
- animation[i].current = HSVACurrent[index];
123
- finished &= animation[i].onFrame(animation[i], timestamp);
124
- res.push(animation[i].current);
125
- });
126
-
127
- animation.current = toRGBA(res);
128
- return finished;
129
- };
130
-
131
- animation.onStart = (animation, value, timestamp, previousAnimation) => {
132
- if (isColor(value)) {
133
- colorOnStart(animation, value, timestamp, previousAnimation);
134
- animation.onFrame = colorOnFrame;
135
- return;
136
- } else if (typeof value === 'string') {
137
- prefNumberSuffOnStart(animation, value, timestamp, previousAnimation);
138
- animation.onFrame = prefNumberSuffOnFrame;
139
- return;
140
- }
141
- baseOnStart(animation, value, timestamp, previousAnimation);
142
- };
143
- }
144
-
145
- export function defineAnimation(starting, factory) {
146
- 'worklet';
147
- if (IN_STYLE_UPDATER) {
148
- return starting;
149
- }
150
- const create = () => {
151
- 'worklet';
152
- const animation = factory();
153
- decorateAnimation(animation);
154
- return animation;
155
- };
156
-
157
- if (_WORKLET || !NativeReanimated.native) {
158
- return create();
159
- }
160
- return create;
161
- }
162
-
163
- export function cancelAnimation(sharedValue) {
164
- 'worklet';
165
- // setting the current value cancels the animation if one is currently running
166
- sharedValue.value = sharedValue.value; // eslint-disable-line no-self-assign
167
- }
168
-
169
- // TODO it should work only if there was no animation before.
170
- export function withStartValue(startValue, animation) {
171
- 'worklet';
172
- return defineAnimation(startValue, () => {
173
- 'worklet';
174
- if (!_WORKLET && typeof animation === 'function') {
175
- animation = animation();
176
- }
177
- animation.current = startValue;
178
- return animation;
179
- });
180
- }
181
-
182
- export function withTiming(toValue, userConfig, callback) {
183
- 'worklet';
184
-
185
- return defineAnimation(toValue, () => {
186
- 'worklet';
187
- const config = {
188
- duration: 300,
189
- easing: Easing.inOut(Easing.quad),
190
- };
191
- if (userConfig) {
192
- Object.keys(userConfig).forEach((key) => (config[key] = userConfig[key]));
193
- }
194
-
195
- function timing(animation, now) {
196
- const { toValue, progress, startTime, current } = animation;
197
- const runtime = now - startTime;
198
-
199
- if (runtime >= config.duration) {
200
- // reset startTime to avoid reusing finished animation config in `start` method
201
- animation.startTime = 0;
202
- animation.current = toValue;
203
- return true;
204
- }
205
-
206
- const newProgress = animation.easing(runtime / config.duration);
207
- animation.current +=
208
- ((toValue - current) * (newProgress - progress)) / (1 - progress);
209
- animation.progress = newProgress;
210
- return false;
211
- }
212
-
213
- function onStart(animation, value, now, previousAnimation) {
214
- if (
215
- previousAnimation &&
216
- previousAnimation.type === 'timing' &&
217
- previousAnimation.toValue === toValue &&
218
- previousAnimation.startTime
219
- ) {
220
- // to maintain continuity of timing animations we check if we are starting
221
- // new timing over the old one with the same parameters. If so, we want
222
- // to copy animation timeline properties
223
- animation.startTime = previousAnimation.startTime;
224
- animation.progress = previousAnimation.progress;
225
- } else {
226
- animation.startTime = now;
227
- animation.progress = 0;
228
- }
229
- animation.current = value;
230
- if (typeof config.easing === 'object') {
231
- animation.easing = config.easing.factory();
232
- } else {
233
- animation.easing = config.easing;
234
- }
235
- }
236
-
237
- return {
238
- type: 'timing',
239
- onFrame: timing,
240
- onStart,
241
- progress: 0,
242
- toValue,
243
- current: toValue,
244
- callback,
245
- };
246
- });
247
- }
248
-
249
- export function withStyleAnimation(styleAnimations) {
250
- 'worklet';
251
- return defineAnimation({}, () => {
252
- 'worklet';
253
-
254
- const onFrame = (animation, now) => {
255
- let stillGoing = false;
256
- Object.keys(styleAnimations).forEach((key) => {
257
- const currentAnimation = animation.styleAnimations[key];
258
- if (key === 'transform') {
259
- const transform = animation.styleAnimations.transform;
260
- for (let i = 0; i < transform.length; i++) {
261
- const type = Object.keys(transform[i])[0];
262
- const currentAnimation = transform[i][type];
263
- if (currentAnimation.finished) {
264
- continue;
265
- }
266
- const finished = currentAnimation.onFrame(currentAnimation, now);
267
- if (finished) {
268
- currentAnimation.finished = true;
269
- if (currentAnimation.callback) {
270
- currentAnimation.callback(true);
271
- }
272
- } else {
273
- stillGoing = true;
274
- }
275
- animation.current.transform[i][type] = currentAnimation.current;
276
- }
277
- } else {
278
- if (!currentAnimation.finished) {
279
- const finished = currentAnimation.onFrame(currentAnimation, now);
280
- if (finished) {
281
- currentAnimation.finished = true;
282
- if (currentAnimation.callback) {
283
- currentAnimation.callback(true);
284
- }
285
- } else {
286
- stillGoing = true;
287
- }
288
- animation.current[key] = currentAnimation.current;
289
- }
290
- }
291
- });
292
- return !stillGoing;
293
- };
294
-
295
- const onStart = (animation, value, now, previousAnimation) => {
296
- Object.keys(styleAnimations).forEach((key) => {
297
- if (key === 'transform') {
298
- animation.current.transform = [];
299
- const transform = styleAnimations.transform;
300
- const prevTransform = null;
301
- const valueTransform = value.transform;
302
- if (
303
- previousAnimation &&
304
- previousAnimation.styleAnimations &&
305
- previousAnimation.styleAnimations.transform
306
- ) {
307
- prevAnimation = previousAnimation.styleAnimations.transform;
308
- }
309
-
310
- for (let i = 0; i < transform.length; i++) {
311
- // duplication of code to avoid function calls
312
- let prevAnimation = null;
313
- const type = Object.keys(transform[i])[0];
314
- if (prevTransform && prevTransform.length > i) {
315
- const prevTransformStep = prevTransform[i];
316
- const prevType = Object.keys(prevTransformStep)[0];
317
- if (prevType === type) {
318
- prevAnimation = prevTransformStep[prevType];
319
- }
320
- }
321
-
322
- let prevVal = 0;
323
- if (prevAnimation != null) {
324
- prevVal = prevAnimation.current;
325
- }
326
- if (
327
- valueTransform != null &&
328
- valueTransform.length > i &&
329
- valueTransform[i][type]
330
- ) {
331
- prevVal = valueTransform[i][type];
332
- }
333
- const obj = {};
334
- obj[type] = prevVal;
335
- animation.current.transform[i] = obj;
336
- let currentAnimation = transform[i][type];
337
- if (
338
- typeof currentAnimation !== 'object' &&
339
- !Array.isArray(currentAnimation)
340
- ) {
341
- currentAnimation = withTiming(currentAnimation, { duration: 0 });
342
- transform[i][type] = currentAnimation;
343
- }
344
- currentAnimation.onStart(
345
- currentAnimation,
346
- prevVal,
347
- now,
348
- prevAnimation
349
- );
350
- }
351
- } else {
352
- let prevAnimation = null;
353
- if (
354
- previousAnimation &&
355
- previousAnimation.styleAnimations &&
356
- previousAnimation.styleAnimations[key]
357
- ) {
358
- prevAnimation = previousAnimation.styleAnimations[key];
359
- }
360
- let prevVal = 0;
361
- if (prevAnimation != null) {
362
- prevVal = prevAnimation.current;
363
- }
364
- if (value[key]) {
365
- prevVal = value[key];
366
- }
367
- animation.current[key] = prevVal;
368
- let currentAnimation = animation.styleAnimations[key];
369
- if (
370
- typeof currentAnimation !== 'object' &&
371
- !Array.isArray(currentAnimation)
372
- ) {
373
- currentAnimation = withTiming(currentAnimation, { duration: 0 });
374
- animation.styleAnimations[key] = currentAnimation;
375
- }
376
- currentAnimation.onStart(
377
- currentAnimation,
378
- prevVal,
379
- now,
380
- prevAnimation
381
- );
382
- }
383
- });
384
- };
385
-
386
- const callback = (finished) => {
387
- if (!finished) {
388
- Object.keys(styleAnimations).forEach((key) => {
389
- const currentAnimation = styleAnimations[key];
390
- if (key === 'transform') {
391
- const transform = styleAnimations.transform;
392
- for (let i = 0; i < transform.length; i++) {
393
- const type = Object.keys(transform[i])[0];
394
- const currentAnimation = transform[i][type];
395
- if (currentAnimation.finished) {
396
- continue;
397
- }
398
- if (currentAnimation.callback) {
399
- currentAnimation.callback(false);
400
- }
401
- }
402
- } else {
403
- if (!currentAnimation.finished) {
404
- if (currentAnimation.callback) {
405
- currentAnimation.callback(false);
406
- }
407
- }
408
- }
409
- });
410
- }
411
- };
412
-
413
- return {
414
- isHigherOrder: true,
415
- onFrame,
416
- onStart,
417
- current: {},
418
- styleAnimations,
419
- callback,
420
- };
421
- });
422
- }
423
-
424
- export function withSpring(toValue, userConfig, callback) {
425
- 'worklet';
426
-
427
- return defineAnimation(toValue, () => {
428
- 'worklet';
429
-
430
- // TODO: figure out why we can't use spread or Object.assign here
431
- // when user config is "frozen object" we can't enumerate it (perhaps
432
- // something is wrong with the object prototype).
433
- const config = {
434
- damping: 10,
435
- mass: 1,
436
- stiffness: 100,
437
- overshootClamping: false,
438
- restDisplacementThreshold: 0.01,
439
- restSpeedThreshold: 2,
440
- };
441
- if (userConfig) {
442
- Object.keys(userConfig).forEach((key) => (config[key] = userConfig[key]));
443
- }
444
-
445
- function spring(animation, now) {
446
- const { toValue, lastTimestamp, current, velocity } = animation;
447
-
448
- const deltaTime = Math.min(now - lastTimestamp, 64);
449
- animation.lastTimestamp = now;
450
-
451
- const c = config.damping;
452
- const m = config.mass;
453
- const k = config.stiffness;
454
-
455
- const v0 = -velocity;
456
- const x0 = toValue - current;
457
-
458
- const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio
459
- const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)
460
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay
461
-
462
- const t = deltaTime / 1000;
463
-
464
- const sin1 = Math.sin(omega1 * t);
465
- const cos1 = Math.cos(omega1 * t);
466
-
467
- // under damped
468
- const underDampedEnvelope = Math.exp(-zeta * omega0 * t);
469
- const underDampedFrag1 =
470
- underDampedEnvelope *
471
- (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);
472
-
473
- const underDampedPosition = toValue - underDampedFrag1;
474
- // This looks crazy -- it's actually just the derivative of the oscillation function
475
- const underDampedVelocity =
476
- zeta * omega0 * underDampedFrag1 -
477
- underDampedEnvelope *
478
- (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);
479
-
480
- // critically damped
481
- const criticallyDampedEnvelope = Math.exp(-omega0 * t);
482
- const criticallyDampedPosition =
483
- toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);
484
-
485
- const criticallyDampedVelocity =
486
- criticallyDampedEnvelope *
487
- (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);
488
-
489
- const isOvershooting = () => {
490
- if (config.overshootClamping && config.stiffness !== 0) {
491
- return current < toValue
492
- ? animation.current > toValue
493
- : animation.current < toValue;
494
- } else {
495
- return false;
496
- }
497
- };
498
-
499
- const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;
500
- const isDisplacement =
501
- config.stiffness === 0 ||
502
- Math.abs(toValue - current) < config.restDisplacementThreshold;
503
-
504
- if (zeta < 1) {
505
- animation.current = underDampedPosition;
506
- animation.velocity = underDampedVelocity;
507
- } else {
508
- animation.current = criticallyDampedPosition;
509
- animation.velocity = criticallyDampedVelocity;
510
- }
511
-
512
- if (isOvershooting() || (isVelocity && isDisplacement)) {
513
- if (config.stiffness !== 0) {
514
- animation.velocity = 0;
515
- animation.current = toValue;
516
- }
517
- return true;
518
- }
519
- }
520
-
521
- function onStart(animation, value, now, previousAnimation) {
522
- animation.current = value;
523
- if (previousAnimation) {
524
- animation.velocity =
525
- previousAnimation.velocity || animation.velocity || 0;
526
- animation.lastTimestamp = previousAnimation.lastTimestamp || now;
527
- } else {
528
- animation.lastTimestamp = now;
529
- }
530
- }
531
-
532
- return {
533
- onFrame: spring,
534
- onStart,
535
- toValue,
536
- velocity: config.velocity || 0,
537
- current: toValue,
538
- callback,
539
- };
540
- });
541
- }
542
-
543
- export function withDecay(userConfig, callback) {
544
- 'worklet';
545
-
546
- return defineAnimation(0, () => {
547
- 'worklet';
548
- const config = {
549
- deceleration: 0.998,
550
- velocityFactor: Platform.OS !== 'web' ? 1 : 1000,
551
- };
552
- if (userConfig) {
553
- Object.keys(userConfig).forEach((key) => (config[key] = userConfig[key]));
554
- }
555
-
556
- const VELOCITY_EPS = Platform.OS !== 'web' ? 1 : 1 / 20;
557
- const SLOPE_FACTOR = 0.1;
558
-
559
- function decay(animation, now) {
560
- const {
561
- lastTimestamp,
562
- startTimestamp,
563
- initialVelocity,
564
- current,
565
- velocity,
566
- } = animation;
567
-
568
- const deltaTime = Math.min(now - lastTimestamp, 64);
569
- const v =
570
- velocity *
571
- Math.exp(
572
- -(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR
573
- );
574
- animation.current =
575
- current + (v * config.velocityFactor * deltaTime) / 1000; // /1000 because time is in ms not in s
576
- animation.velocity = v;
577
- animation.lastTimestamp = now;
578
-
579
- if (config.clamp) {
580
- if (initialVelocity < 0 && animation.current <= config.clamp[0]) {
581
- animation.current = config.clamp[0];
582
- return true;
583
- } else if (
584
- initialVelocity > 0 &&
585
- animation.current >= config.clamp[1]
586
- ) {
587
- animation.current = config.clamp[1];
588
- return true;
589
- }
590
- }
591
-
592
- if (Math.abs(v) < VELOCITY_EPS) {
593
- return true;
594
- }
595
- }
596
-
597
- function validateConfig() {
598
- if (config.clamp) {
599
- if (Array.isArray(config.clamp)) {
600
- if (config.clamp.length !== 2) {
601
- console.error(
602
- `clamp array must contain 2 items but is given ${config.clamp.length}`
603
- );
604
- }
605
- } else {
606
- console.error(
607
- `config.clamp must be an array but is ${typeof config.clamp}`
608
- );
609
- }
610
- }
611
- if (config.velocityFactor <= 0) {
612
- console.error(
613
- `config.velocityFactor must be greather then 0 but is ${config.velocityFactor}`
614
- );
615
- }
616
- }
617
-
618
- function onStart(animation, value, now) {
619
- animation.current = value;
620
- animation.lastTimestamp = now;
621
- animation.startTimestamp = now;
622
- animation.initialVelocity = config.velocity;
623
- validateConfig();
624
- }
625
-
626
- return {
627
- onFrame: decay,
628
- onStart,
629
- velocity: config.velocity || 0,
630
- callback,
631
- };
632
- });
633
- }
634
-
635
- export function withDelay(delayMs, _nextAnimation) {
636
- 'worklet';
637
- return defineAnimation(_nextAnimation, () => {
638
- 'worklet';
639
- const nextAnimation =
640
- typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;
641
-
642
- function delay(animation, now) {
643
- const { startTime, started, previousAnimation } = animation;
644
-
645
- if (now - startTime > delayMs) {
646
- if (!started) {
647
- nextAnimation.onStart(
648
- nextAnimation,
649
- animation.current,
650
- now,
651
- previousAnimation
652
- );
653
- animation.previousAnimation = null;
654
- animation.started = true;
655
- }
656
- const finished = nextAnimation.onFrame(nextAnimation, now);
657
- animation.current = nextAnimation.current;
658
- return finished;
659
- } else if (previousAnimation) {
660
- const finished = previousAnimation.onFrame(previousAnimation, now);
661
- animation.current = previousAnimation.current;
662
- if (finished) {
663
- animation.previousAnimation = null;
664
- }
665
- }
666
- return false;
667
- }
668
-
669
- function onStart(animation, value, now, previousAnimation) {
670
- animation.startTime = now;
671
- animation.started = false;
672
- animation.current = value;
673
- animation.previousAnimation = previousAnimation;
674
- }
675
-
676
- const callback = (finished) => {
677
- if (nextAnimation.callback) {
678
- nextAnimation.callback(finished);
679
- }
680
- };
681
-
682
- return {
683
- isHigherOrder: true,
684
- onFrame: delay,
685
- onStart,
686
- current: nextAnimation.current,
687
- callback,
688
- };
689
- });
690
- }
691
-
692
- export function withSequence(..._animations) {
693
- 'worklet';
694
- return defineAnimation(_animations[0], () => {
695
- 'worklet';
696
- const animations = _animations.map((a) => {
697
- const result = typeof a === 'function' ? a() : a;
698
- result.finished = false;
699
- return result;
700
- });
701
- const firstAnimation = animations[0];
702
-
703
- const callback = (finished) => {
704
- if (finished) {
705
- // we want to call the callback after every single animation
706
- // not after all of them
707
- return;
708
- }
709
- // this is going to be called only if sequence has been cancelled
710
- animations.forEach((animation) => {
711
- if (typeof animation.callback === 'function' && !animation.finished) {
712
- animation.callback(finished);
713
- }
714
- });
715
- };
716
-
717
- function sequence(animation, now) {
718
- const currentAnim = animations[animation.animationIndex];
719
- const finished = currentAnim.onFrame(currentAnim, now);
720
- animation.current = currentAnim.current;
721
- if (finished) {
722
- // we want to call the callback after every single animation
723
- if (currentAnim.callback) {
724
- currentAnim.callback(true /* finished */);
725
- }
726
- currentAnim.finished = true;
727
- animation.animationIndex += 1;
728
- if (animation.animationIndex < animations.length) {
729
- const nextAnim = animations[animation.animationIndex];
730
- nextAnim.onStart(nextAnim, currentAnim.current, now, currentAnim);
731
- return false;
732
- }
733
- return true;
734
- }
735
- return false;
736
- }
737
-
738
- function onStart(animation, value, now, previousAnimation) {
739
- if (animations.length === 1) {
740
- throw Error(
741
- 'withSequence() animation require more than one animation as argument'
742
- );
743
- }
744
- animation.animationIndex = 0;
745
- if (previousAnimation === undefined) {
746
- previousAnimation = animations[animations.length - 1];
747
- }
748
- firstAnimation.onStart(firstAnimation, value, now, previousAnimation);
749
- }
750
-
751
- return {
752
- isHigherOrder: true,
753
- onFrame: sequence,
754
- onStart,
755
- animationIndex: 0,
756
- current: firstAnimation.current,
757
- callback,
758
- };
759
- });
760
- }
761
-
762
- export function withRepeat(
763
- _nextAnimation,
764
- numberOfReps = 2,
765
- reverse = false,
766
- callback
767
- ) {
768
- 'worklet';
769
-
770
- return defineAnimation(_nextAnimation, () => {
771
- 'worklet';
772
-
773
- const nextAnimation =
774
- typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;
775
-
776
- function repeat(animation, now) {
777
- const finished = nextAnimation.onFrame(nextAnimation, now);
778
- animation.current = nextAnimation.current;
779
- if (finished) {
780
- animation.reps += 1;
781
- // call inner animation's callback on every repetition
782
- // as the second argument the animation's current value is passed
783
- if (nextAnimation.callback) {
784
- nextAnimation.callback(true /* finished */, animation.current);
785
- }
786
- if (numberOfReps > 0 && animation.reps >= numberOfReps) {
787
- return true;
788
- }
789
-
790
- const startValue = reverse
791
- ? nextAnimation.current
792
- : animation.startValue;
793
- if (reverse) {
794
- nextAnimation.toValue = animation.startValue;
795
- animation.startValue = startValue;
796
- }
797
- nextAnimation.onStart(
798
- nextAnimation,
799
- startValue,
800
- now,
801
- nextAnimation.previousAnimation
802
- );
803
- return false;
804
- }
805
- return false;
806
- }
807
-
808
- const repCallback = (finished) => {
809
- if (callback) {
810
- callback(finished);
811
- }
812
- // when cancelled call inner animation's callback
813
- if (!finished && nextAnimation.callback) {
814
- nextAnimation.callback(false /* finished */);
815
- }
816
- };
817
-
818
- function onStart(animation, value, now, previousAnimation) {
819
- animation.startValue = value;
820
- animation.reps = 0;
821
- nextAnimation.onStart(nextAnimation, value, now, previousAnimation);
822
- }
823
-
824
- return {
825
- isHigherOrder: true,
826
- onFrame: repeat,
827
- onStart,
828
- reps: 0,
829
- current: nextAnimation.current,
830
- callback: repCallback,
831
- };
832
- });
833
- }
834
-
835
- /* Deprecated section, kept for backward compatibility. Will be removed soon */
836
- export function delay(delayMs, _nextAnimation) {
837
- 'worklet';
838
- console.warn('Method `delay` is deprecated. Please use `withDelay` instead');
839
- return withDelay(delayMs, _nextAnimation);
840
- }
841
-
842
- export function repeat(
843
- _nextAnimation,
844
- numberOfReps = 2,
845
- reverse = false,
846
- callback
847
- ) {
848
- 'worklet';
849
- console.warn(
850
- 'Method `repeat` is deprecated. Please use `withRepeat` instead'
851
- );
852
- return withRepeat(_nextAnimation, numberOfReps, reverse, callback);
853
- }
854
-
855
- export function loop(nextAnimation, numberOfLoops = 1) {
856
- 'worklet';
857
- console.warn('Method `loop` is deprecated. Please use `withRepeat` instead');
858
- return repeat(nextAnimation, Math.round(numberOfLoops * 2), true);
859
- }
860
-
861
- export function sequence(..._animations) {
862
- 'worklet';
863
- console.warn(
864
- 'Method `sequence` is deprecated. Please use `withSequence` instead'
865
- );
866
- return withSequence(..._animations);
867
- }
868
- /* Deprecated section end */