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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
  5. package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
  6. package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
  7. package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
  8. package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
  9. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
  10. package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
  11. package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
  12. package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
  13. package/Common/cpp/Tools/Mapper.cpp +41 -29
  14. package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
  15. package/Common/cpp/Tools/Scheduler.cpp +14 -6
  16. package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
  17. package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
  18. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
  19. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
  20. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
  21. package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
  22. package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
  23. package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
  24. package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
  25. package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
  26. package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
  27. package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
  28. package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
  29. package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
  30. package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
  31. package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
  32. package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
  33. package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
  34. package/Common/cpp/headers/Tools/Mapper.h +24 -18
  35. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
  36. package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
  37. package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
  38. package/Common/cpp/headers/Tools/Scheduler.h +28 -33
  39. package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
  40. package/Common/cpp/hidden_headers/Logger.h +14 -14
  41. package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
  42. package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
  43. package/README.md +1 -1
  44. package/RNReanimated.podspec +4 -4
  45. package/android/build.gradle +80 -3
  46. package/android/react-native-reanimated-63-hermes.aar +0 -0
  47. package/android/react-native-reanimated-63-jsc.aar +0 -0
  48. package/android/react-native-reanimated-64-hermes.aar +0 -0
  49. package/android/react-native-reanimated-64-jsc.aar +0 -0
  50. package/android/react-native-reanimated-65-hermes.aar +0 -0
  51. package/android/react-native-reanimated-65-jsc.aar +0 -0
  52. package/android/react-native-reanimated-66-hermes.aar +0 -0
  53. package/android/react-native-reanimated-66-jsc.aar +0 -0
  54. package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
  55. package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
  56. package/ios/LayoutReanimation/REASnapshot.h +13 -0
  57. package/ios/LayoutReanimation/REASnapshot.m +29 -0
  58. package/ios/LayoutReanimation/REAUIManager.h +16 -0
  59. package/ios/LayoutReanimation/REAUIManager.mm +348 -0
  60. package/ios/Nodes/REAAlwaysNode.m +14 -15
  61. package/ios/Nodes/REABezierNode.m +8 -7
  62. package/ios/Nodes/REABlockNode.m +1 -1
  63. package/ios/Nodes/REACallFuncNode.h +0 -1
  64. package/ios/Nodes/REACallFuncNode.m +10 -8
  65. package/ios/Nodes/REAClockNodes.m +22 -20
  66. package/ios/Nodes/REAConcatNode.h +0 -1
  67. package/ios/Nodes/REAConcatNode.m +2 -2
  68. package/ios/Nodes/REACondNode.m +7 -5
  69. package/ios/Nodes/READebugNode.m +5 -4
  70. package/ios/Nodes/REAEventNode.m +1 -1
  71. package/ios/Nodes/REAFunctionNode.h +0 -1
  72. package/ios/Nodes/REAFunctionNode.m +2 -2
  73. package/ios/Nodes/REAJSCallNode.m +4 -5
  74. package/ios/Nodes/REANode.h +3 -4
  75. package/ios/Nodes/REANode.m +9 -11
  76. package/ios/Nodes/REAOperatorNode.m +68 -67
  77. package/ios/Nodes/REAParamNode.h +1 -3
  78. package/ios/Nodes/REAParamNode.m +15 -17
  79. package/ios/Nodes/REAPropsNode.h +1 -3
  80. package/ios/Nodes/REAPropsNode.m +19 -22
  81. package/ios/Nodes/REASetNode.h +0 -1
  82. package/ios/Nodes/REASetNode.m +7 -5
  83. package/ios/Nodes/REAStyleNode.h +0 -1
  84. package/ios/Nodes/REAStyleNode.m +2 -4
  85. package/ios/Nodes/REATransformNode.h +0 -1
  86. package/ios/Nodes/REATransformNode.m +3 -5
  87. package/ios/Nodes/REAValueNode.m +5 -7
  88. package/ios/REAEventDispatcher.m +3 -3
  89. package/ios/REAModule.h +0 -2
  90. package/ios/REAModule.m +29 -40
  91. package/ios/REANodesManager.h +11 -19
  92. package/ios/REANodesManager.m +105 -130
  93. package/ios/REAUtils.h +5 -3
  94. package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
  95. package/ios/Transitioning/REAAllTransitions.h +2 -2
  96. package/ios/Transitioning/REAAllTransitions.m +14 -25
  97. package/ios/Transitioning/REATransition.h +8 -7
  98. package/ios/Transitioning/REATransition.m +19 -16
  99. package/ios/Transitioning/REATransitionAnimation.h +1 -1
  100. package/ios/Transitioning/REATransitionAnimation.m +2 -3
  101. package/ios/Transitioning/REATransitionManager.m +3 -3
  102. package/ios/native/NativeMethods.h +15 -5
  103. package/ios/native/NativeProxy.h +4 -3
  104. package/ios/native/NativeProxy.mm +19 -5
  105. package/ios/native/REAIOSErrorHandler.h +13 -10
  106. package/ios/native/REAIOSLogger.h +8 -8
  107. package/ios/native/REAIOSScheduler.h +5 -5
  108. package/ios/native/REAIOSScheduler.mm +7 -5
  109. package/ios/native/REAInitializer.h +37 -0
  110. package/ios/native/REAInitializer.mm +63 -0
  111. package/ios/native/UIResponder+Reanimated.mm +9 -48
  112. package/lib/ConfigHelper.js +1 -0
  113. package/lib/ReanimatedModule.native.js +10 -2
  114. package/lib/createAnimatedComponent.js +64 -30
  115. package/lib/reanimated1/core/AnimatedAlways.js +1 -1
  116. package/lib/reanimated1/core/AnimatedBezier.js +1 -1
  117. package/lib/reanimated1/core/AnimatedBlock.js +1 -1
  118. package/lib/reanimated1/core/AnimatedCall.js +1 -1
  119. package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
  120. package/lib/reanimated1/core/AnimatedConcat.js +1 -1
  121. package/lib/reanimated1/core/AnimatedCond.js +1 -1
  122. package/lib/reanimated1/core/AnimatedDebug.js +1 -1
  123. package/lib/reanimated1/core/AnimatedEvent.js +1 -1
  124. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  125. package/lib/reanimated1/core/AnimatedOperator.js +1 -1
  126. package/lib/reanimated1/core/AnimatedParam.js +1 -1
  127. package/lib/reanimated1/core/AnimatedProps.js +2 -2
  128. package/lib/reanimated1/core/AnimatedSet.js +1 -1
  129. package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
  130. package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
  131. package/lib/reanimated1/core/AnimatedStyle.js +1 -1
  132. package/lib/reanimated1/core/AnimatedTransform.js +1 -1
  133. package/lib/reanimated1/core/Core.test.js +30 -0
  134. package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
  135. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  136. package/lib/reanimated1/derived/interpolate.js +1 -1
  137. package/lib/reanimated2/Colors.js +16 -12
  138. package/lib/reanimated2/NativeMethods.js +3 -14
  139. package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
  140. package/lib/reanimated2/NativeReanimated/index.js +15 -0
  141. package/lib/reanimated2/PlatformChecker.js +16 -0
  142. package/lib/reanimated2/PropAdapters.js +14 -4
  143. package/lib/reanimated2/UpdateProps.js +14 -11
  144. package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
  145. package/lib/reanimated2/WorkletEventHandler.js +15 -13
  146. package/lib/reanimated2/animation/commonTypes.js +1 -0
  147. package/lib/reanimated2/animation/decay.js +71 -0
  148. package/lib/reanimated2/animation/delay.js +64 -0
  149. package/lib/reanimated2/animation/index.js +8 -0
  150. package/lib/reanimated2/animation/repeat.js +69 -0
  151. package/lib/reanimated2/animation/sequence.js +72 -0
  152. package/lib/reanimated2/animation/spring.js +101 -0
  153. package/lib/reanimated2/animation/styleAnimation.js +166 -0
  154. package/lib/reanimated2/animation/timing.js +64 -0
  155. package/lib/reanimated2/animation/util.js +157 -0
  156. package/lib/reanimated2/commonTypes.js +1 -0
  157. package/lib/reanimated2/core.js +35 -39
  158. package/lib/reanimated2/globals.d.ts +47 -1
  159. package/lib/reanimated2/hook/Hooks.js +9 -0
  160. package/lib/reanimated2/hook/commonTypes.js +1 -0
  161. package/lib/reanimated2/hook/index.js +8 -0
  162. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
  163. package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
  164. package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
  165. package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
  166. package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
  167. package/lib/reanimated2/hook/useDerivedValue.js +36 -0
  168. package/lib/reanimated2/hook/useSharedValue.js +17 -0
  169. package/lib/reanimated2/hook/utils.js +175 -0
  170. package/lib/reanimated2/index.js +3 -2
  171. package/lib/reanimated2/interpolation.js +95 -86
  172. package/lib/reanimated2/jestUtils.js +0 -12
  173. package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
  174. package/lib/reanimated2/js-reanimated/index.js +57 -1
  175. package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
  176. package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
  177. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
  178. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
  179. package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
  180. package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
  181. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
  182. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
  183. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
  184. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
  185. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
  186. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
  187. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
  188. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
  189. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
  190. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
  191. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
  192. package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
  193. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
  194. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
  195. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
  196. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
  197. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
  198. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
  199. package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
  200. package/lib/reanimated2/layoutReanimation/index.js +3 -2
  201. package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
  202. package/lib/reanimated2/utils.js +9 -0
  203. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  204. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  205. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  206. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
  207. package/package.json +21 -10
  208. package/plugin.js +244 -85
  209. package/react-native-reanimated.d.ts +531 -453
  210. package/src/ConfigHelper.js +1 -0
  211. package/src/ReanimatedModule.native.js +10 -2
  212. package/src/createAnimatedComponent.js +64 -30
  213. package/src/reanimated1/core/AnimatedAlways.js +1 -1
  214. package/src/reanimated1/core/AnimatedBezier.js +1 -1
  215. package/src/reanimated1/core/AnimatedBlock.js +1 -1
  216. package/src/reanimated1/core/AnimatedCall.js +1 -1
  217. package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
  218. package/src/reanimated1/core/AnimatedConcat.js +1 -1
  219. package/src/reanimated1/core/AnimatedCond.js +1 -1
  220. package/src/reanimated1/core/AnimatedDebug.js +1 -1
  221. package/src/reanimated1/core/AnimatedEvent.js +1 -1
  222. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  223. package/src/reanimated1/core/AnimatedOperator.js +1 -1
  224. package/src/reanimated1/core/AnimatedParam.js +1 -1
  225. package/src/reanimated1/core/AnimatedProps.js +2 -2
  226. package/src/reanimated1/core/AnimatedSet.js +1 -1
  227. package/src/reanimated1/core/AnimatedStartClock.js +1 -1
  228. package/src/reanimated1/core/AnimatedStopClock.js +1 -1
  229. package/src/reanimated1/core/AnimatedStyle.js +1 -1
  230. package/src/reanimated1/core/AnimatedTransform.js +1 -1
  231. package/src/reanimated1/core/Core.test.js +30 -0
  232. package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
  233. package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  234. package/src/reanimated1/derived/interpolate.js +1 -1
  235. package/src/reanimated2/Colors.ts +30 -27
  236. package/src/reanimated2/Easing.ts +3 -1
  237. package/src/reanimated2/NativeMethods.ts +26 -16
  238. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
  239. package/src/reanimated2/NativeReanimated/index.ts +18 -0
  240. package/src/reanimated2/PlatformChecker.ts +21 -0
  241. package/src/reanimated2/PropAdapters.ts +52 -34
  242. package/src/reanimated2/UpdateProps.ts +40 -20
  243. package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
  244. package/src/reanimated2/WorkletEventHandler.ts +41 -23
  245. package/src/reanimated2/animation/commonTypes.ts +48 -0
  246. package/src/reanimated2/animation/decay.ts +141 -0
  247. package/src/reanimated2/animation/delay.ts +103 -0
  248. package/src/reanimated2/animation/index.ts +16 -0
  249. package/src/reanimated2/animation/repeat.ts +128 -0
  250. package/src/reanimated2/animation/sequence.ts +110 -0
  251. package/src/reanimated2/animation/spring.ts +165 -0
  252. package/src/reanimated2/animation/styleAnimation.ts +253 -0
  253. package/src/reanimated2/animation/timing.ts +109 -0
  254. package/src/reanimated2/animation/util.ts +242 -0
  255. package/src/reanimated2/commonTypes.ts +81 -0
  256. package/src/reanimated2/core.ts +128 -82
  257. package/src/reanimated2/globals.d.ts +47 -1
  258. package/src/reanimated2/hook/Hooks.ts +16 -0
  259. package/src/reanimated2/hook/commonTypes.ts +12 -0
  260. package/src/reanimated2/hook/index.ts +25 -0
  261. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
  262. package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
  263. package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
  264. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
  265. package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
  266. package/src/reanimated2/hook/useDerivedValue.ts +48 -0
  267. package/src/reanimated2/hook/useSharedValue.ts +22 -0
  268. package/src/reanimated2/hook/utils.ts +259 -0
  269. package/src/reanimated2/index.ts +3 -2
  270. package/src/reanimated2/interpolation.ts +170 -101
  271. package/src/reanimated2/jestUtils.ts +0 -12
  272. package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
  273. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  274. package/src/reanimated2/js-reanimated/index.ts +71 -0
  275. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
  276. package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
  277. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
  278. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
  279. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
  280. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
  281. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
  282. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
  283. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
  284. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
  285. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
  286. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
  287. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
  288. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
  289. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
  290. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
  291. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
  292. package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
  293. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
  294. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
  295. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
  296. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
  297. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
  298. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
  299. package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
  300. package/src/reanimated2/layoutReanimation/index.ts +3 -2
  301. package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
  302. package/src/reanimated2/utils.ts +21 -0
  303. package/android/react-native-reanimated-62-hermes.aar +0 -0
  304. package/android/react-native-reanimated-62-jsc.aar +0 -0
  305. package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
  306. package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
  307. package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
  308. package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
  309. package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
  310. package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
  311. package/ios/LayoutReanimation/REASnapshooter.h +0 -19
  312. package/ios/LayoutReanimation/REASnapshooter.m +0 -64
  313. package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
  314. package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
  315. package/lib/reanimated2/Hooks.js +0 -732
  316. package/lib/reanimated2/NativeReanimated.js +0 -4
  317. package/lib/reanimated2/animations.js +0 -713
  318. package/lib/reanimated2/js-reanimated/index.web.js +0 -20
  319. package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
  320. package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
  321. package/src/reanimated2/Hooks.ts +0 -918
  322. package/src/reanimated2/NativeReanimated.native.ts +0 -61
  323. package/src/reanimated2/NativeReanimated.ts +0 -5
  324. package/src/reanimated2/animations.ts +0 -868
  325. package/src/reanimated2/js-reanimated/index.js +0 -0
  326. package/src/reanimated2/js-reanimated/index.web.ts +0 -29
  327. package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
  328. package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
@@ -0,0 +1,15 @@
1
+ import reanimatedJS from '../js-reanimated';
2
+ import { nativeShouldBeMock } from '../PlatformChecker';
3
+ import { Platform } from 'react-native';
4
+ import { NativeReanimated } from './NativeReanimated';
5
+ let exportedModule;
6
+ if (nativeShouldBeMock()) {
7
+ exportedModule = reanimatedJS;
8
+ }
9
+ else {
10
+ exportedModule = new NativeReanimated();
11
+ if (exportedModule.useOnlyV1 && Platform.OS === 'android') {
12
+ console.warn(`If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/installation`);
13
+ }
14
+ }
15
+ export default exportedModule;
@@ -0,0 +1,16 @@
1
+ import { Platform } from 'react-native';
2
+ export function isJest() {
3
+ return !!process.env.JEST_WORKER_ID;
4
+ }
5
+ export function isChromeDebugger() {
6
+ return !global.nativeCallSyncHook || global.__REMOTEDEV__;
7
+ }
8
+ export function isWeb() {
9
+ return Platform.OS === 'web';
10
+ }
11
+ export function shouldBeUseWeb() {
12
+ return isJest() || isChromeDebugger() || isWeb();
13
+ }
14
+ export function nativeShouldBeMock() {
15
+ return isJest() || isChromeDebugger();
16
+ }
@@ -1,6 +1,15 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
- // @ts-nocheck
3
- import { createAnimatedPropAdapter } from './core';
1
+ // @ts-ignore JS file
2
+ import { addWhitelistedNativeProps } from '../ConfigHelper';
3
+ export function createAnimatedPropAdapter(adapter, nativeProps) {
4
+ const nativePropsToAdd = {};
5
+ // eslint-disable-next-line no-unused-expressions
6
+ nativeProps === null || nativeProps === void 0 ? void 0 : nativeProps.forEach((prop) => {
7
+ nativePropsToAdd[prop] = true;
8
+ });
9
+ addWhitelistedNativeProps(nativePropsToAdd);
10
+ return adapter;
11
+ }
12
+ // ADAPTERS
4
13
  export const SVGAdapter = createAnimatedPropAdapter((props) => {
5
14
  'worklet';
6
15
  var _a, _b;
@@ -23,7 +32,8 @@ export const SVGAdapter = createAnimatedPropAdapter((props) => {
23
32
  else if (typeof props.transform === 'string') {
24
33
  // case of string 'translate(translateX translateY)'
25
34
  // todo: handle other cases of transform string like here https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/lib/extract/extractTransform.ts#L184
26
- const arr = props.transform
35
+ const transform = props.transform;
36
+ const arr = transform
27
37
  .replace('translate(', '')
28
38
  .replace(')', '')
29
39
  .split(' ');
@@ -1,10 +1,7 @@
1
- /* global _updateProps */
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
1
  import { processColor } from './Colors';
5
2
  import { makeShareable, isConfigured } from './core';
6
- import { Platform } from 'react-native';
7
3
  import { _updatePropsJS } from './js-reanimated';
4
+ import { shouldBeUseWeb } from './PlatformChecker';
8
5
  // copied from react-native/Libraries/Components/View/ReactNativeStyleAttributes
9
6
  export const colorProps = [
10
7
  'backgroundColor',
@@ -24,29 +21,35 @@ export const colorProps = [
24
21
  ];
25
22
  const ColorProperties = !isConfigured() ? [] : makeShareable(colorProps);
26
23
  let updatePropsByPlatform;
27
- if (Platform.OS === 'web' || process.env.JEST_WORKER_ID) {
28
- updatePropsByPlatform = (viewDescriptor, updates, maybeViewRef) => {
24
+ if (shouldBeUseWeb()) {
25
+ updatePropsByPlatform = (_, updates, maybeViewRef) => {
29
26
  'worklet';
30
- _updatePropsJS(viewDescriptor.value.tag, null, updates, maybeViewRef);
27
+ if (maybeViewRef) {
28
+ maybeViewRef.items.forEach((item, _) => {
29
+ _updatePropsJS(updates, item);
30
+ });
31
+ }
31
32
  };
32
33
  }
33
34
  else {
34
- updatePropsByPlatform = (viewDescriptor, updates, _) => {
35
+ updatePropsByPlatform = (viewDescriptors, updates, _) => {
35
36
  'worklet';
36
37
  for (const key in updates) {
37
38
  if (ColorProperties.indexOf(key) !== -1) {
38
39
  updates[key] = processColor(updates[key]);
39
40
  }
40
41
  }
41
- _updateProps(viewDescriptor.value.tag, viewDescriptor.value.name || 'RCTView', updates);
42
+ viewDescriptors.value.forEach((viewDescriptor) => {
43
+ _updateProps(viewDescriptor.tag, viewDescriptor.name || 'RCTView', updates);
44
+ });
42
45
  };
43
46
  }
44
47
  export const updateProps = updatePropsByPlatform;
45
- export const updatePropsJestWrapper = (viewDescriptor, updates, maybeViewRef, animatedStyle, adapters) => {
48
+ export const updatePropsJestWrapper = (viewDescriptors, updates, maybeViewRef, animatedStyle, adapters) => {
46
49
  adapters.forEach((adapter) => {
47
50
  adapter(updates);
48
51
  });
49
52
  animatedStyle.current.value = Object.assign(Object.assign({}, animatedStyle.current.value), updates);
50
- updateProps(viewDescriptor, updates, maybeViewRef);
53
+ updateProps(viewDescriptors, updates, maybeViewRef);
51
54
  };
52
55
  export default updateProps;
@@ -0,0 +1,73 @@
1
+ import { useRef } from 'react';
2
+ import { makeMutable } from './core';
3
+ export function makeViewDescriptorsSet() {
4
+ const ref = useRef(null);
5
+ if (ref.current === null) {
6
+ const data = {
7
+ batchToRemove: new Set(),
8
+ tags: new Set(),
9
+ waitForInsertSync: false,
10
+ waitForRemoveSync: false,
11
+ sharableViewDescriptors: makeMutable([]),
12
+ items: [],
13
+ add: (item) => {
14
+ if (data.tags.has(item.tag)) {
15
+ return;
16
+ }
17
+ data.tags.add(item.tag);
18
+ data.items.push(item);
19
+ if (!data.waitForInsertSync) {
20
+ data.waitForInsertSync = true;
21
+ setImmediate(() => {
22
+ data.sharableViewDescriptors.value = data.items;
23
+ data.waitForInsertSync = false;
24
+ });
25
+ }
26
+ },
27
+ remove: (viewTag) => {
28
+ data.batchToRemove.add(viewTag);
29
+ if (!data.waitForRemoveSync) {
30
+ data.waitForRemoveSync = true;
31
+ setImmediate(() => {
32
+ const items = [];
33
+ for (const item of data.items) {
34
+ if (data.batchToRemove.has(item.tag)) {
35
+ data.tags.delete(item.tag);
36
+ }
37
+ else {
38
+ items.push(item);
39
+ }
40
+ }
41
+ data.items = items;
42
+ data.sharableViewDescriptors.value = items;
43
+ data.batchToRemove = new Set();
44
+ data.waitForRemoveSync = false;
45
+ });
46
+ }
47
+ },
48
+ rebuildsharableViewDescriptors: (sharableViewDescriptors) => {
49
+ data.sharableViewDescriptors = sharableViewDescriptors;
50
+ },
51
+ };
52
+ ref.current = data;
53
+ }
54
+ return ref.current;
55
+ }
56
+ export function makeViewsRefSet() {
57
+ const ref = useRef(null);
58
+ if (ref.current === null) {
59
+ const data = {
60
+ items: new Set(),
61
+ add: (item) => {
62
+ if (data.items.has(item))
63
+ return;
64
+ data.items.add(item);
65
+ },
66
+ remove: (item) => {
67
+ data.items.delete(item);
68
+ },
69
+ };
70
+ ref.current = data;
71
+ }
72
+ return ref.current;
73
+ }
@@ -1,15 +1,18 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
- // @ts-nocheck
3
- import NativeModule from './NativeReanimated';
4
- const jsListener = (eventName, handler) => (evt) => {
5
- handler(Object.assign(Object.assign({}, evt.nativeEvent), { eventName }));
6
- };
1
+ import NativeReanimatedModule from './NativeReanimated';
2
+ function jsListener(eventName, handler) {
3
+ return (evt) => {
4
+ handler(Object.assign(Object.assign({}, evt.nativeEvent), { eventName }));
5
+ };
6
+ }
7
7
  export default class WorkletEventHandler {
8
8
  constructor(worklet, eventNames = []) {
9
9
  this.worklet = worklet;
10
10
  this.eventNames = eventNames;
11
11
  this.reattachNeeded = false;
12
- if (!NativeModule.native) {
12
+ this.listeners = {};
13
+ this.viewTag = undefined;
14
+ this.registrations = [];
15
+ if (!NativeReanimatedModule.native) {
13
16
  this.listeners = eventNames.reduce((acc, eventName) => {
14
17
  acc[eventName] = jsListener(eventName, worklet);
15
18
  return acc;
@@ -20,16 +23,15 @@ export default class WorkletEventHandler {
20
23
  this.worklet = newWorklet;
21
24
  this.reattachNeeded = true;
22
25
  }
23
- registerForEvents(viewTag, fallbackEventName = undefined) {
26
+ registerForEvents(viewTag, fallbackEventName) {
24
27
  this.viewTag = viewTag;
25
- this.registrations = this.eventNames.map((eventName) => NativeModule.registerEventHandler(viewTag + eventName, this.worklet));
28
+ this.registrations = this.eventNames.map((eventName) => NativeReanimatedModule.registerEventHandler(viewTag + eventName, this.worklet));
26
29
  if (this.registrations.length === 0 && fallbackEventName) {
27
- this.registrations.push(NativeModule.registerEventHandler(viewTag + fallbackEventName, this.worklet));
30
+ this.registrations.push(NativeReanimatedModule.registerEventHandler(viewTag + fallbackEventName, this.worklet));
28
31
  }
29
32
  }
30
33
  unregisterFromEvents() {
31
- this.registrations &&
32
- this.registrations.forEach((id) => NativeModule.unregisterEventHandler(id));
33
- this.registrations = undefined;
34
+ this.registrations.forEach((id) => NativeReanimatedModule.unregisterEventHandler(id));
35
+ this.registrations = [];
34
36
  }
35
37
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,71 @@
1
+ import { defineAnimation } from './util';
2
+ import { Platform } from 'react-native';
3
+ export function withDecay(userConfig, callback) {
4
+ 'worklet';
5
+ return defineAnimation(0, () => {
6
+ 'worklet';
7
+ var _a;
8
+ const config = {
9
+ deceleration: 0.998,
10
+ velocityFactor: Platform.OS !== 'web' ? 1 : 1000,
11
+ velocity: 0,
12
+ };
13
+ if (userConfig) {
14
+ Object.keys(userConfig).forEach((key) => (config[key] = userConfig[key]));
15
+ }
16
+ const VELOCITY_EPS = Platform.OS !== 'web' ? 1 : 1 / 20;
17
+ const SLOPE_FACTOR = 0.1;
18
+ function decay(animation, now) {
19
+ const { lastTimestamp, startTimestamp, initialVelocity, current, velocity, } = animation;
20
+ const deltaTime = Math.min(now - lastTimestamp, 64);
21
+ const v = velocity *
22
+ Math.exp(-(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR);
23
+ animation.current =
24
+ current + (v * config.velocityFactor * deltaTime) / 1000; // /1000 because time is in ms not in s
25
+ animation.velocity = v;
26
+ animation.lastTimestamp = now;
27
+ if (config.clamp) {
28
+ if (initialVelocity < 0 && animation.current <= config.clamp[0]) {
29
+ animation.current = config.clamp[0];
30
+ return true;
31
+ }
32
+ else if (initialVelocity > 0 &&
33
+ animation.current >= config.clamp[1]) {
34
+ animation.current = config.clamp[1];
35
+ return true;
36
+ }
37
+ }
38
+ return Math.abs(v) < VELOCITY_EPS;
39
+ }
40
+ function validateConfig() {
41
+ if (config.clamp) {
42
+ if (!Array.isArray(config.clamp)) {
43
+ throw Error(`config.clamp must be an array but is ${typeof config.clamp}`);
44
+ }
45
+ if (config.clamp.length !== 2) {
46
+ throw Error(`clamp array must contain 2 items but is given ${config.clamp.length}`);
47
+ }
48
+ }
49
+ if (config.velocityFactor <= 0) {
50
+ throw Error(`config.velocityFactor must be greather then 0 but is ${config.velocityFactor}`);
51
+ }
52
+ }
53
+ function onStart(animation, value, now) {
54
+ animation.current = value;
55
+ animation.lastTimestamp = now;
56
+ animation.startTimestamp = now;
57
+ animation.initialVelocity = config.velocity;
58
+ validateConfig();
59
+ }
60
+ return {
61
+ onFrame: decay,
62
+ onStart,
63
+ callback,
64
+ velocity: (_a = config.velocity) !== null && _a !== void 0 ? _a : 0,
65
+ initialVelocity: 0,
66
+ current: 0,
67
+ lastTimestamp: 0,
68
+ startTimestamp: 0,
69
+ };
70
+ });
71
+ }
@@ -0,0 +1,64 @@
1
+ import { defineAnimation } from './util';
2
+ export function withDelay(delayMs, _nextAnimation) {
3
+ 'worklet';
4
+ return defineAnimation(_nextAnimation, () => {
5
+ 'worklet';
6
+ const nextAnimation = typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;
7
+ function delay(animation, now) {
8
+ const { startTime, started, previousAnimation } = animation;
9
+ if (now - startTime > delayMs) {
10
+ if (!started) {
11
+ nextAnimation.onStart(nextAnimation, animation.current, now, previousAnimation);
12
+ animation.previousAnimation = null;
13
+ animation.started = true;
14
+ }
15
+ const finished = nextAnimation.onFrame(nextAnimation, now);
16
+ animation.current = nextAnimation.current;
17
+ return finished;
18
+ }
19
+ else if (previousAnimation) {
20
+ const finished = previousAnimation.finished ||
21
+ previousAnimation.onFrame(previousAnimation, now);
22
+ animation.current = previousAnimation.current;
23
+ if (finished) {
24
+ animation.previousAnimation = null;
25
+ }
26
+ }
27
+ return false;
28
+ }
29
+ function onStart(animation, value, now, previousAnimation) {
30
+ animation.startTime = now;
31
+ animation.started = false;
32
+ animation.current = value;
33
+ if (previousAnimation === animation) {
34
+ animation.previousAnimation = previousAnimation.previousAnimation;
35
+ }
36
+ else {
37
+ animation.previousAnimation = previousAnimation;
38
+ }
39
+ }
40
+ const callback = (finished) => {
41
+ if (nextAnimation.callback) {
42
+ nextAnimation.callback(finished);
43
+ }
44
+ };
45
+ return {
46
+ isHigherOrder: true,
47
+ onFrame: delay,
48
+ onStart,
49
+ current: nextAnimation.current,
50
+ callback,
51
+ previousAnimation: null,
52
+ startTime: 0,
53
+ started: false,
54
+ };
55
+ });
56
+ }
57
+ /**
58
+ * @deprecated Kept for backward compatibility. Will be removed soon.
59
+ */
60
+ export function delay(delayMs, _nextAnimation) {
61
+ 'worklet';
62
+ console.warn('Method `delay` is deprecated. Please use `withDelay` instead');
63
+ return withDelay(delayMs, _nextAnimation);
64
+ }
@@ -0,0 +1,8 @@
1
+ export { cancelAnimation, defineAnimation, initialUpdaterRun } from './util';
2
+ export { withTiming } from './timing';
3
+ export { withSpring } from './spring';
4
+ export { withDecay } from './decay';
5
+ export { withDelay } from './delay';
6
+ export { withRepeat } from './repeat';
7
+ export { withSequence } from './sequence';
8
+ export { withStyleAnimation } from './styleAnimation';
@@ -0,0 +1,69 @@
1
+ import { defineAnimation } from './util';
2
+ export function withRepeat(_nextAnimation, numberOfReps = 2, reverse = false, callback) {
3
+ 'worklet';
4
+ return defineAnimation(_nextAnimation, () => {
5
+ 'worklet';
6
+ const nextAnimation = typeof _nextAnimation === 'function' ? _nextAnimation() : _nextAnimation;
7
+ function repeat(animation, now) {
8
+ const finished = nextAnimation.onFrame(nextAnimation, now);
9
+ animation.current = nextAnimation.current;
10
+ if (finished) {
11
+ animation.reps += 1;
12
+ // call inner animation's callback on every repetition
13
+ // as the second argument the animation's current value is passed
14
+ if (nextAnimation.callback) {
15
+ nextAnimation.callback(true /* finished */, animation.current);
16
+ }
17
+ if (numberOfReps > 0 && animation.reps >= numberOfReps) {
18
+ return true;
19
+ }
20
+ const startValue = reverse
21
+ ? nextAnimation.current
22
+ : animation.startValue;
23
+ if (reverse) {
24
+ nextAnimation.toValue = animation.startValue;
25
+ animation.startValue = startValue;
26
+ }
27
+ nextAnimation.onStart(nextAnimation, startValue, now, nextAnimation.previousAnimation);
28
+ return false;
29
+ }
30
+ return false;
31
+ }
32
+ const repCallback = (finished) => {
33
+ if (callback) {
34
+ callback(finished);
35
+ }
36
+ // when cancelled call inner animation's callback
37
+ if (!finished && nextAnimation.callback) {
38
+ nextAnimation.callback(false /* finished */);
39
+ }
40
+ };
41
+ function onStart(animation, value, now, previousAnimation) {
42
+ animation.startValue = value;
43
+ animation.reps = 0;
44
+ nextAnimation.onStart(nextAnimation, value, now, previousAnimation);
45
+ }
46
+ return {
47
+ isHigherOrder: true,
48
+ onFrame: repeat,
49
+ onStart,
50
+ reps: 0,
51
+ current: nextAnimation.current,
52
+ callback: repCallback,
53
+ startValue: 0,
54
+ };
55
+ });
56
+ }
57
+ /**
58
+ * @deprecated Kept for backward compatibility. Will be removed soon.
59
+ */
60
+ export function repeat(_nextAnimation, numberOfReps = 2, reverse = false, callback) {
61
+ 'worklet';
62
+ console.warn('Method `repeat` is deprecated. Please use `withRepeat` instead');
63
+ return withRepeat(_nextAnimation, numberOfReps, reverse, callback);
64
+ }
65
+ export function loop(nextAnimation, numberOfLoops = 1) {
66
+ 'worklet';
67
+ console.warn('Method `loop` is deprecated. Please use `withRepeat` instead');
68
+ return repeat(nextAnimation, Math.round(numberOfLoops * 2), true);
69
+ }
@@ -0,0 +1,72 @@
1
+ import { defineAnimation } from './util';
2
+ export function withSequence(..._animations) {
3
+ 'worklet';
4
+ return defineAnimation(_animations[0], () => {
5
+ 'worklet';
6
+ const animations = _animations.map((a) => {
7
+ const result = typeof a === 'function' ? a() : a;
8
+ result.finished = false;
9
+ return result;
10
+ });
11
+ const firstAnimation = animations[0];
12
+ const callback = (finished) => {
13
+ if (finished) {
14
+ // we want to call the callback after every single animation
15
+ // not after all of them
16
+ return;
17
+ }
18
+ // this is going to be called only if sequence has been cancelled
19
+ animations.forEach((animation) => {
20
+ if (typeof animation.callback === 'function' && !animation.finished) {
21
+ animation.callback(finished);
22
+ }
23
+ });
24
+ };
25
+ function sequence(animation, now) {
26
+ const currentAnim = animations[animation.animationIndex];
27
+ const finished = currentAnim.onFrame(currentAnim, now);
28
+ animation.current = currentAnim.current;
29
+ if (finished) {
30
+ // we want to call the callback after every single animation
31
+ if (currentAnim.callback) {
32
+ currentAnim.callback(true /* finished */);
33
+ }
34
+ currentAnim.finished = true;
35
+ animation.animationIndex += 1;
36
+ if (animation.animationIndex < animations.length) {
37
+ const nextAnim = animations[animation.animationIndex];
38
+ nextAnim.onStart(nextAnim, currentAnim.current, now, currentAnim);
39
+ return false;
40
+ }
41
+ return true;
42
+ }
43
+ return false;
44
+ }
45
+ function onStart(animation, value, now, previousAnimation) {
46
+ if (animations.length === 1) {
47
+ throw Error('withSequence() animation require more than one animation as argument');
48
+ }
49
+ animation.animationIndex = 0;
50
+ if (previousAnimation === undefined) {
51
+ previousAnimation = animations[animations.length - 1];
52
+ }
53
+ firstAnimation.onStart(firstAnimation, value, now, previousAnimation);
54
+ }
55
+ return {
56
+ isHigherOrder: true,
57
+ onFrame: sequence,
58
+ onStart,
59
+ animationIndex: 0,
60
+ current: firstAnimation.current,
61
+ callback,
62
+ };
63
+ });
64
+ }
65
+ /**
66
+ * @deprecated Kept for backward compatibility. Will be removed soon.
67
+ */
68
+ export function sequence(..._animations) {
69
+ 'worklet';
70
+ console.warn('Method `sequence` is deprecated. Please use `withSequence` instead');
71
+ return withSequence(..._animations);
72
+ }
@@ -0,0 +1,101 @@
1
+ import { defineAnimation } from './util';
2
+ export function withSpring(toValue, userConfig, callback) {
3
+ 'worklet';
4
+ return defineAnimation(toValue, () => {
5
+ 'worklet';
6
+ // TODO: figure out why we can't use spread or Object.assign here
7
+ // when user config is "frozen object" we can't enumerate it (perhaps
8
+ // something is wrong with the object prototype).
9
+ const config = {
10
+ damping: 10,
11
+ mass: 1,
12
+ stiffness: 100,
13
+ overshootClamping: false,
14
+ restDisplacementThreshold: 0.01,
15
+ restSpeedThreshold: 2,
16
+ velocity: 0,
17
+ };
18
+ if (userConfig) {
19
+ Object.keys(userConfig).forEach((key) => (config[key] = userConfig[key]));
20
+ }
21
+ function spring(animation, now) {
22
+ const { toValue, lastTimestamp, current, velocity } = animation;
23
+ const deltaTime = Math.min(now - lastTimestamp, 64);
24
+ animation.lastTimestamp = now;
25
+ const c = config.damping;
26
+ const m = config.mass;
27
+ const k = config.stiffness;
28
+ const v0 = -velocity;
29
+ const x0 = toValue - current;
30
+ const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio
31
+ const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)
32
+ const omega1 = omega0 * Math.sqrt(1 - Math.pow(zeta, 2)); // exponential decay
33
+ const t = deltaTime / 1000;
34
+ const sin1 = Math.sin(omega1 * t);
35
+ const cos1 = Math.cos(omega1 * t);
36
+ // under damped
37
+ const underDampedEnvelope = Math.exp(-zeta * omega0 * t);
38
+ const underDampedFrag1 = underDampedEnvelope *
39
+ (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);
40
+ const underDampedPosition = toValue - underDampedFrag1;
41
+ // This looks crazy -- it's actually just the derivative of the oscillation function
42
+ const underDampedVelocity = zeta * omega0 * underDampedFrag1 -
43
+ underDampedEnvelope *
44
+ (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);
45
+ // critically damped
46
+ const criticallyDampedEnvelope = Math.exp(-omega0 * t);
47
+ const criticallyDampedPosition = toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);
48
+ const criticallyDampedVelocity = criticallyDampedEnvelope *
49
+ (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);
50
+ const isOvershooting = () => {
51
+ if (config.overshootClamping && config.stiffness !== 0) {
52
+ return current < toValue
53
+ ? animation.current > toValue
54
+ : animation.current < toValue;
55
+ }
56
+ else {
57
+ return false;
58
+ }
59
+ };
60
+ const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;
61
+ const isDisplacement = config.stiffness === 0 ||
62
+ Math.abs(toValue - current) < config.restDisplacementThreshold;
63
+ if (zeta < 1) {
64
+ animation.current = underDampedPosition;
65
+ animation.velocity = underDampedVelocity;
66
+ }
67
+ else {
68
+ animation.current = criticallyDampedPosition;
69
+ animation.velocity = criticallyDampedVelocity;
70
+ }
71
+ if (isOvershooting() || (isVelocity && isDisplacement)) {
72
+ if (config.stiffness !== 0) {
73
+ animation.velocity = 0;
74
+ animation.current = toValue;
75
+ }
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ function onStart(animation, value, now, previousAnimation) {
81
+ animation.current = value;
82
+ if (previousAnimation) {
83
+ animation.velocity =
84
+ previousAnimation.velocity || animation.velocity || 0;
85
+ animation.lastTimestamp = previousAnimation.lastTimestamp || now;
86
+ }
87
+ else {
88
+ animation.lastTimestamp = now;
89
+ }
90
+ }
91
+ return {
92
+ onFrame: spring,
93
+ onStart,
94
+ toValue,
95
+ velocity: config.velocity || 0,
96
+ current: toValue,
97
+ callback,
98
+ lastTimestamp: 0,
99
+ };
100
+ });
101
+ }