react-native-reanimated 2.3.3 → 2.5.0

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 (249) hide show
  1. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +72 -0
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +30 -1
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +64 -39
  4. package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -0
  5. package/Common/cpp/headers/AnimatedSensor/AnimatedSensorModule.h +41 -0
  6. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +14 -0
  7. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +14 -0
  8. package/Common/cpp/headers/SharedItems/MutableValue.h +4 -1
  9. package/Common/cpp/headers/SharedItems/ShareableValue.h +3 -0
  10. package/Common/cpp/headers/SharedItems/ValueWrapper.h +3 -0
  11. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +11 -0
  12. package/Common/cpp/headers/Tools/RuntimeDecorator.h +2 -0
  13. package/LICENSE +1 -1
  14. package/README.md +2 -2
  15. package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
  16. package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
  17. package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
  18. package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
  19. package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
  20. package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
  21. package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
  22. package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
  23. package/android/.gradle/7.2/gc.properties +0 -0
  24. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  25. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  26. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  27. package/android/.gradle/checksums/checksums.lock +0 -0
  28. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  29. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  30. package/android/.gradle/vcs-1/gc.properties +0 -0
  31. package/android/CMakeLists.txt +198 -0
  32. package/android/README.md +15 -0
  33. package/android/build.gradle +686 -73
  34. package/android/empty.cpp +1 -0
  35. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  36. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  37. package/android/gradle.properties +25 -0
  38. package/android/gradlew +234 -0
  39. package/android/gradlew.bat +89 -0
  40. package/android/react-native-reanimated-64-hermes.aar +0 -0
  41. package/android/react-native-reanimated-64-jsc.aar +0 -0
  42. package/android/react-native-reanimated-65-hermes.aar +0 -0
  43. package/android/react-native-reanimated-65-jsc.aar +0 -0
  44. package/android/react-native-reanimated-66-hermes.aar +0 -0
  45. package/android/react-native-reanimated-66-jsc.aar +0 -0
  46. package/android/react-native-reanimated-67-hermes.aar +0 -0
  47. package/android/react-native-reanimated-67-jsc.aar +0 -0
  48. package/android/react-native-reanimated-68-hermes.aar +0 -0
  49. package/android/react-native-reanimated-68-jsc.aar +0 -0
  50. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedNativeHierarchyManager.java +412 -0
  51. package/android/rnVersionPatch/62/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  52. package/android/rnVersionPatch/63/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  53. package/android/rnVersionPatch/64/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  54. package/android/rnVersionPatch/65/.gitkeep +0 -0
  55. package/android/rnVersionPatch/66/.gitkeep +0 -0
  56. package/android/rnVersionPatch/67/.gitkeep +0 -0
  57. package/android/rnVersionPatch/68/.gitkeep +0 -0
  58. package/android/rnVersionPatch/backup/.gitkeep +0 -0
  59. package/android/settings.gradle +1 -0
  60. package/android/spotless.gradle +9 -0
  61. package/android/src/{AndroidManifest.xml → main/AndroidManifest.xml} +0 -0
  62. package/android/src/main/cpp/AndroidErrorHandler.cpp +42 -0
  63. package/android/src/main/cpp/AndroidLogger.cpp +27 -0
  64. package/android/src/main/cpp/AndroidScheduler.cpp +59 -0
  65. package/android/src/main/cpp/JNIHelper.cpp +59 -0
  66. package/android/src/main/cpp/LayoutAnimations.cpp +103 -0
  67. package/android/src/main/cpp/NativeProxy.cpp +327 -0
  68. package/android/src/main/cpp/OnLoad.cpp +17 -0
  69. package/android/src/main/cpp/TurboModule.cpp +44 -0
  70. package/android/src/main/cpp/headers/AndroidErrorHandler.h +30 -0
  71. package/android/src/main/cpp/headers/AndroidLogger.h +16 -0
  72. package/android/src/main/cpp/headers/AndroidScheduler.h +41 -0
  73. package/android/src/main/cpp/headers/JNIHelper.h +30 -0
  74. package/android/src/main/cpp/headers/LayoutAnimations.h +42 -0
  75. package/android/src/main/cpp/headers/NativeProxy.h +170 -0
  76. package/android/src/main/cpp/headers/TurboModule.h +70 -0
  77. package/android/src/main/java/com/facebook/react/uimanager/UIManagerReanimatedHelper.java +15 -0
  78. package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.java +5 -0
  79. package/android/src/main/java/com/swmansion/reanimated/AndroidErrorHandler.java +8 -0
  80. package/android/src/main/java/com/swmansion/reanimated/CopiedEvent.java +43 -0
  81. package/android/src/main/java/com/swmansion/reanimated/MapUtils.java +26 -0
  82. package/android/src/main/java/com/swmansion/reanimated/NativeMethodsHelper.java +117 -0
  83. package/android/src/main/java/com/swmansion/reanimated/NativeProxy.java +285 -0
  84. package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +682 -0
  85. package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +29 -0
  86. package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +251 -0
  87. package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +96 -0
  88. package/android/src/main/java/com/swmansion/reanimated/Scheduler.java +51 -0
  89. package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +11 -0
  90. package/android/src/main/java/com/swmansion/reanimated/Utils.java +32 -0
  91. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +517 -0
  92. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +56 -0
  93. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +11 -0
  94. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +410 -0
  95. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java +68 -0
  96. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +292 -0
  97. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +121 -0
  98. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +12 -0
  99. package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +29 -0
  100. package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +87 -0
  101. package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +24 -0
  102. package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +49 -0
  103. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +38 -0
  104. package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +73 -0
  105. package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +36 -0
  106. package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +41 -0
  107. package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +33 -0
  108. package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +83 -0
  109. package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +5 -0
  110. package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +20 -0
  111. package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +41 -0
  112. package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +139 -0
  113. package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +37 -0
  114. package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +377 -0
  115. package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +71 -0
  116. package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +153 -0
  117. package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +32 -0
  118. package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +40 -0
  119. package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +84 -0
  120. package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +40 -0
  121. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +41 -0
  122. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +40 -0
  123. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -0
  124. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorType.java +35 -0
  125. package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +84 -0
  126. package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +25 -0
  127. package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +86 -0
  128. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +41 -0
  129. package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +161 -0
  130. package/ios/LayoutReanimation/REAAnimationsManager.h +1 -1
  131. package/ios/LayoutReanimation/REAAnimationsManager.m +18 -4
  132. package/ios/REAModule.m +8 -9
  133. package/ios/REANodesManager.h +4 -1
  134. package/ios/REANodesManager.m +75 -3
  135. package/ios/native/NativeMethods.h +1 -1
  136. package/ios/native/NativeProxy.mm +85 -5
  137. package/ios/sensor/ReanimatedSensor.h +21 -0
  138. package/ios/sensor/ReanimatedSensor.m +169 -0
  139. package/ios/sensor/ReanimatedSensorContainer.h +13 -0
  140. package/ios/sensor/ReanimatedSensorContainer.m +41 -0
  141. package/ios/sensor/ReanimatedSensorType.h +7 -0
  142. package/lib/ConfigHelper.js +2 -2
  143. package/lib/createAnimatedComponent.js +3 -4
  144. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  145. package/lib/reanimated1/derived/interpolate.js +2 -4
  146. package/lib/reanimated2/Colors.js +3 -98
  147. package/lib/reanimated2/Easing.js +5 -0
  148. package/lib/reanimated2/NativeMethods.js +15 -5
  149. package/lib/reanimated2/NativeReanimated/NativeReanimated.js +25 -12
  150. package/lib/reanimated2/NativeReanimated/index.js +2 -6
  151. package/lib/reanimated2/ViewDescriptorsSet.js +2 -2
  152. package/lib/reanimated2/animation/styleAnimation.js +2 -1
  153. package/lib/reanimated2/core.js +30 -24
  154. package/lib/reanimated2/globals.d.ts +6 -0
  155. package/lib/reanimated2/hook/index.js +1 -0
  156. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +1 -2
  157. package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
  158. package/lib/reanimated2/hook/useAnimatedStyle.js +31 -14
  159. package/lib/reanimated2/hook/utils.js +14 -11
  160. package/lib/reanimated2/index.js +2 -0
  161. package/lib/reanimated2/interpolateColor.js +98 -0
  162. package/lib/reanimated2/interpolation.js +1 -1
  163. package/lib/reanimated2/jestUtils.js +9 -4
  164. package/lib/reanimated2/js-reanimated/JSReanimated.js +24 -3
  165. package/lib/reanimated2/js-reanimated/commonTypes.js +1 -0
  166. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +8 -0
  167. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +2 -1
  168. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +32 -42
  169. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +20 -38
  170. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +32 -44
  171. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -16
  172. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -10
  173. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  174. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +20 -36
  175. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +16 -20
  176. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +8 -12
  177. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +32 -48
  178. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +22 -18
  179. package/lib/reanimated2/mock.js +3 -2
  180. package/mock.js +6 -4
  181. package/package.json +44 -36
  182. package/plugin.js +3 -0
  183. package/react-native-reanimated.d.ts +102 -15
  184. package/src/ConfigHelper.ts +4 -4
  185. package/src/createAnimatedComponent.tsx +3 -3
  186. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  187. package/src/reanimated1/derived/interpolate.js +2 -4
  188. package/src/reanimated2/Colors.ts +8 -151
  189. package/src/reanimated2/Easing.ts +11 -0
  190. package/src/reanimated2/NativeMethods.ts +19 -6
  191. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +42 -14
  192. package/src/reanimated2/NativeReanimated/index.ts +2 -8
  193. package/src/reanimated2/ViewDescriptorsSet.ts +2 -3
  194. package/src/reanimated2/animation/commonTypes.ts +44 -40
  195. package/src/reanimated2/animation/decay.ts +1 -1
  196. package/src/reanimated2/animation/delay.ts +2 -16
  197. package/src/reanimated2/animation/index.ts +8 -8
  198. package/src/reanimated2/animation/repeat.ts +2 -12
  199. package/src/reanimated2/animation/sequence.ts +3 -10
  200. package/src/reanimated2/animation/spring.ts +1 -1
  201. package/src/reanimated2/animation/styleAnimation.ts +11 -25
  202. package/src/reanimated2/animation/timing.ts +4 -2
  203. package/src/reanimated2/animation/util.ts +22 -20
  204. package/src/reanimated2/commonTypes.ts +68 -1
  205. package/src/reanimated2/component/FlatList.tsx +2 -1
  206. package/src/reanimated2/core.ts +35 -29
  207. package/src/reanimated2/globals.d.ts +6 -0
  208. package/src/reanimated2/hook/commonTypes.ts +5 -0
  209. package/src/reanimated2/hook/index.ts +1 -0
  210. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +1 -2
  211. package/src/reanimated2/hook/useAnimatedRef.ts +1 -5
  212. package/src/reanimated2/hook/useAnimatedSensor.ts +91 -0
  213. package/src/reanimated2/hook/useAnimatedStyle.ts +35 -16
  214. package/src/reanimated2/hook/utils.ts +20 -18
  215. package/src/reanimated2/index.ts +2 -0
  216. package/src/reanimated2/interpolateColor.ts +178 -0
  217. package/src/reanimated2/interpolation.ts +2 -6
  218. package/src/reanimated2/jestUtils.ts +9 -4
  219. package/src/reanimated2/js-reanimated/JSReanimated.ts +28 -6
  220. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  221. package/src/reanimated2/js-reanimated/MapperRegistry.ts +1 -1
  222. package/src/reanimated2/js-reanimated/commonTypes.ts +51 -0
  223. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +13 -0
  224. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -3
  225. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +51 -21
  226. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +40 -10
  227. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +48 -12
  228. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +16 -4
  229. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -2
  230. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +16 -4
  231. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +32 -8
  232. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -10
  233. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +16 -4
  234. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +64 -16
  235. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +2 -1
  236. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +32 -21
  237. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +2 -1
  238. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +2 -1
  239. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +2 -1
  240. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +2 -1
  241. package/src/reanimated2/mock.ts +3 -2
  242. package/src/reanimated2/utils.ts +1 -1
  243. package/android/react-native-reanimated-63-hermes.aar +0 -0
  244. package/android/react-native-reanimated-63-jsc.aar +0 -0
  245. package/android/src/main/java/com/swmansion/reanimated/ReanimatedProxyPackage.java +0 -15
  246. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  247. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  248. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  249. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useRef } from 'react';
2
2
  import { processColor } from '../Colors';
3
3
  import { makeRemote } from '../core';
4
- import { isWeb } from '../PlatformChecker';
4
+ import { isWeb, isJest } from '../PlatformChecker';
5
5
  import { colorProps } from '../UpdateProps';
6
6
  import WorkletEventHandler from '../WorkletEventHandler';
7
7
  export function useEvent(handler, eventNames = [], rebuild = false) {
@@ -36,7 +36,7 @@ export function useHandler(handlers, dependencies) {
36
36
  dependencies = buildDependencies(dependencies, handlers);
37
37
  const doDependenciesDiffer = !areDependenciesEqual(dependencies, savedDependencies);
38
38
  initRef.current.savedDependencies = dependencies;
39
- const useWeb = isWeb();
39
+ const useWeb = isWeb() || isJest();
40
40
  return { context, doDependenciesDiffer, useWeb };
41
41
  }
42
42
  // builds one big hash from multiple worklets' hashes
@@ -95,7 +95,12 @@ export function parseColors(updates) {
95
95
  'worklet';
96
96
  for (const key in updates) {
97
97
  if (colorProps.indexOf(key) !== -1) {
98
- updates[key] = processColor(updates[key]);
98
+ // value could be an animation in which case processColor will recognize it and will return undefined
99
+ // -> in such a case we don't want to override style of that key
100
+ const processedColor = processColor(updates[key]);
101
+ if (processedColor !== undefined) {
102
+ updates[key] = processedColor;
103
+ }
99
104
  }
100
105
  }
101
106
  }
@@ -132,24 +137,22 @@ export function isAnimated(prop) {
132
137
  export function styleDiff(oldStyle, newStyle) {
133
138
  'worklet';
134
139
  const diff = {};
135
- Object.keys(oldStyle).forEach((key) => {
140
+ for (const key in oldStyle) {
136
141
  if (newStyle[key] === undefined) {
137
142
  diff[key] = null;
138
143
  }
139
- });
140
- Object.keys(newStyle).forEach((key) => {
144
+ }
145
+ for (const key in newStyle) {
141
146
  const value = newStyle[key];
142
147
  const oldValue = oldStyle[key];
143
148
  if (isAnimated(value)) {
144
149
  // do nothing
145
- return;
150
+ continue;
146
151
  }
147
- if (oldValue !== value &&
148
- JSON.stringify(oldValue) !== JSON.stringify(value)) {
149
- // I'd use deep equal here but that'd take additional work and this was easier
152
+ if (oldValue !== value) {
150
153
  diff[key] = value;
151
154
  }
152
- });
155
+ }
153
156
  return diff;
154
157
  }
155
158
  export function getStyleWithoutAnimations(newStyle) {
@@ -2,9 +2,11 @@ export * from './core';
2
2
  export * from './hook';
3
3
  export * from './animation';
4
4
  export * from './interpolation';
5
+ export * from './interpolateColor';
5
6
  export * from './Easing';
6
7
  export * from './NativeMethods';
7
8
  export * from './Colors';
8
9
  export * from './PropAdapters';
9
10
  export * from './layoutReanimation';
10
11
  export * from './utils';
12
+ export * from './commonTypes';
@@ -0,0 +1,98 @@
1
+ import { hsvToColor, RGBtoHSV, rgbaColor, processColor, red, green, blue, opacity, } from './Colors';
2
+ import { makeMutable } from './core';
3
+ import { interpolate } from './interpolation';
4
+ // @ts-ignore JS file
5
+ import { Extrapolate } from '../reanimated1/derived';
6
+ import { useSharedValue } from './hook/useSharedValue';
7
+ const interpolateColorsHSV = (value, inputRange, colors) => {
8
+ 'worklet';
9
+ const h = interpolate(value, inputRange, colors.h, Extrapolate.CLAMP);
10
+ const s = interpolate(value, inputRange, colors.s, Extrapolate.CLAMP);
11
+ const v = interpolate(value, inputRange, colors.v, Extrapolate.CLAMP);
12
+ return hsvToColor(h, s, v);
13
+ };
14
+ const interpolateColorsRGB = (value, inputRange, colors) => {
15
+ 'worklet';
16
+ const r = interpolate(value, inputRange, colors.r, Extrapolate.CLAMP);
17
+ const g = interpolate(value, inputRange, colors.g, Extrapolate.CLAMP);
18
+ const b = interpolate(value, inputRange, colors.b, Extrapolate.CLAMP);
19
+ const a = interpolate(value, inputRange, colors.a, Extrapolate.CLAMP);
20
+ return rgbaColor(r, g, b, a);
21
+ };
22
+ const getInterpolateRGB = (colors) => {
23
+ 'worklet';
24
+ const r = [];
25
+ const g = [];
26
+ const b = [];
27
+ const a = [];
28
+ for (let i = 0; i < colors.length; ++i) {
29
+ const color = colors[i];
30
+ const proocessedColor = processColor(color);
31
+ // explicit check in case if processedColor is 0
32
+ if (proocessedColor !== null && proocessedColor !== undefined) {
33
+ r.push(red(proocessedColor));
34
+ g.push(green(proocessedColor));
35
+ b.push(blue(proocessedColor));
36
+ a.push(opacity(proocessedColor));
37
+ }
38
+ }
39
+ return { r, g, b, a };
40
+ };
41
+ const getInterpolateHSV = (colors) => {
42
+ 'worklet';
43
+ const h = [];
44
+ const s = [];
45
+ const v = [];
46
+ for (let i = 0; i < colors.length; ++i) {
47
+ const color = colors[i];
48
+ const proocessedColor = RGBtoHSV(processColor(color));
49
+ if (proocessedColor) {
50
+ h.push(proocessedColor.h);
51
+ s.push(proocessedColor.s);
52
+ v.push(proocessedColor.v);
53
+ }
54
+ }
55
+ return { h, s, v };
56
+ };
57
+ export const interpolateColor = (value, inputRange, outputRange, colorSpace = 'RGB') => {
58
+ 'worklet';
59
+ if (colorSpace === 'HSV') {
60
+ return interpolateColorsHSV(value, inputRange, getInterpolateHSV(outputRange));
61
+ }
62
+ else if (colorSpace === 'RGB') {
63
+ return interpolateColorsRGB(value, inputRange, getInterpolateRGB(outputRange));
64
+ }
65
+ throw new Error(`Invalid color space provided: ${colorSpace}. Supported values are: ['RGB', 'HSV']`);
66
+ };
67
+ export var ColorSpace;
68
+ (function (ColorSpace) {
69
+ ColorSpace[ColorSpace["RGB"] = 0] = "RGB";
70
+ ColorSpace[ColorSpace["HSV"] = 1] = "HSV";
71
+ })(ColorSpace || (ColorSpace = {}));
72
+ export function useInterpolateConfig(inputRange, outputRange, colorSpace = ColorSpace.RGB) {
73
+ return useSharedValue({
74
+ inputRange,
75
+ outputRange,
76
+ colorSpace,
77
+ cache: makeMutable(null),
78
+ });
79
+ }
80
+ export const interpolateSharableColor = (value, interpolateConfig) => {
81
+ 'worklet';
82
+ let colors = interpolateConfig.value.cache.value;
83
+ if (interpolateConfig.value.colorSpace === ColorSpace.RGB) {
84
+ if (!colors) {
85
+ colors = getInterpolateRGB(interpolateConfig.value.outputRange);
86
+ interpolateConfig.value.cache.value = colors;
87
+ }
88
+ return interpolateColorsRGB(value, interpolateConfig.value.inputRange, colors);
89
+ }
90
+ else if (interpolateConfig.value.colorSpace === ColorSpace.HSV) {
91
+ if (!colors) {
92
+ colors = getInterpolateHSV(interpolateConfig.value.outputRange);
93
+ interpolateConfig.value.cache.value = colors;
94
+ }
95
+ return interpolateColorsHSV(value, interpolateConfig.value.inputRange, colors);
96
+ }
97
+ throw new Error(`Invalid color space provided: ${interpolateConfig.value.colorSpace}. Supported values are: ['RGB', 'HSV']`);
98
+ };
@@ -66,7 +66,7 @@ function validateType(type) {
66
66
  }
67
67
  function internalInterpolate(x, narrowedInput, extrapolationConfig) {
68
68
  'worklet';
69
- const { leftEdgeInput, rightEdgeInput, leftEdgeOutput, rightEdgeOutput, } = narrowedInput;
69
+ const { leftEdgeInput, rightEdgeInput, leftEdgeOutput, rightEdgeOutput } = narrowedInput;
70
70
  if (rightEdgeInput - leftEdgeInput === 0)
71
71
  return leftEdgeOutput;
72
72
  const progress = (x - leftEdgeInput) / (rightEdgeInput - leftEdgeInput);
@@ -1,6 +1,6 @@
1
1
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
2
  // @ts-nocheck
3
- const MockDate = require('mockdate');
3
+ import { jestResetJsReanimatedModule } from './core';
4
4
  let config = {
5
5
  fps: 60,
6
6
  };
@@ -105,22 +105,26 @@ const compareStyle = (received, expectedStyle, config) => {
105
105
  };
106
106
  let frameTime = 1000 / config.fps;
107
107
  let requestAnimationFrameCopy;
108
+ let currentTimestamp = 0;
108
109
  const requestAnimationFrame = (callback) => {
109
110
  setTimeout(callback, frameTime);
110
111
  };
111
112
  const beforeTest = () => {
113
+ jestResetJsReanimatedModule();
112
114
  requestAnimationFrameCopy = global.requestAnimationFrame;
113
115
  global.requestAnimationFrame = requestAnimationFrame;
114
- MockDate.set(0);
116
+ global.ReanimatedDataMock = {
117
+ now: () => currentTimestamp,
118
+ };
119
+ currentTimestamp = 0;
115
120
  jest.useFakeTimers();
116
121
  };
117
122
  const afterTest = () => {
118
- MockDate.reset();
119
123
  jest.useRealTimers();
120
124
  global.requestAnimationFrame = requestAnimationFrameCopy;
121
125
  };
122
126
  const tickTravel = () => {
123
- MockDate.set(new Date(Date.now() + frameTime));
127
+ currentTimestamp += frameTime;
124
128
  jest.advanceTimersByTime(frameTime);
125
129
  };
126
130
  export const withReanimatedTimer = (animatonTest) => {
@@ -142,6 +146,7 @@ export const advanceAnimationByFrame = (count) => {
142
146
  };
143
147
  export const setUpTests = (userConfig = {}) => {
144
148
  const expect = require('expect');
149
+ require('setimmediate');
145
150
  frameTime = Math.round(1000 / config.fps);
146
151
  config = Object.assign(Object.assign({}, config), userConfig);
147
152
  expect.extend({
@@ -1,7 +1,8 @@
1
1
  import MapperRegistry from './MapperRegistry';
2
- import MutableValue from './MutableValue';
3
2
  import Mapper from './Mapper';
3
+ import MutableValue from './MutableValue';
4
4
  import { NativeReanimated } from '../NativeReanimated/NativeReanimated';
5
+ import { isJest } from '../PlatformChecker';
5
6
  export default class JSReanimated extends NativeReanimated {
6
7
  constructor() {
7
8
  super(false);
@@ -9,8 +10,8 @@ export default class JSReanimated extends NativeReanimated {
9
10
  this._renderRequested = false;
10
11
  this._mapperRegistry = new MapperRegistry(this);
11
12
  this._frames = [];
12
- if (process.env.JEST_WORKER_ID) {
13
- this.timeProvider = { now: () => Date.now() };
13
+ if (isJest()) {
14
+ this.timeProvider = { now: () => global.ReanimatedDataMock.now() };
14
15
  }
15
16
  else {
16
17
  this.timeProvider = { now: () => window.performance.now() };
@@ -75,4 +76,24 @@ export default class JSReanimated extends NativeReanimated {
75
76
  enableLayoutAnimations() {
76
77
  console.warn('[Reanimated] enableLayoutAnimations is not available for WEB yet');
77
78
  }
79
+ registerSensor() {
80
+ console.warn('[Reanimated] useAnimatedSensor is not available on web yet.');
81
+ return -1;
82
+ }
83
+ unregisterSensor() {
84
+ // noop
85
+ }
86
+ jestResetModule() {
87
+ if (isJest()) {
88
+ /**
89
+ * If someone used timers to stop animation before the end,
90
+ * then _renderRequested was set as true
91
+ * and any new update from another test wasn't applied.
92
+ */
93
+ this._renderRequested = false;
94
+ }
95
+ else {
96
+ throw Error('This method can be only use in Jest testing.');
97
+ }
98
+ }
78
99
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -73,6 +73,14 @@ export class ComplexAnimationBuilder extends BaseAnimationBuilder {
73
73
  this.restSpeedThresholdV = restSpeedThreshold;
74
74
  return this;
75
75
  }
76
+ static withInitialValues(values) {
77
+ const instance = this.createInstance();
78
+ return instance.withInitialValues(values);
79
+ }
80
+ withInitialValues(values) {
81
+ this.initialValues = values;
82
+ return this;
83
+ }
76
84
  getAnimationAndConfig() {
77
85
  const duration = this.durationV;
78
86
  const easing = this.easingV;
@@ -109,7 +109,8 @@ export class Keyframe {
109
109
  if (styleProp === 'transform') {
110
110
  (_a = initialValues[styleProp]) === null || _a === void 0 ? void 0 : _a.forEach((transformStyle, index) => {
111
111
  Object.keys(transformStyle).forEach((transformProp) => {
112
- parsedKeyframes[index.toString() + '_transform:' + transformProp] = [];
112
+ parsedKeyframes[index.toString() + '_transform:' + transformProp] =
113
+ [];
113
114
  });
114
115
  });
115
116
  }
@@ -1,8 +1,8 @@
1
1
  import { withSequence, withTiming } from '../../animation';
2
2
  import { Dimensions } from 'react-native';
3
- import { BaseAnimationBuilder } from '../animationBuilder/BaseAnimationBuilder';
3
+ import { ComplexAnimationBuilder } from '../animationBuilder/ComplexAnimationBuilder';
4
4
  const { width, height } = Dimensions.get('window');
5
- export class BounceIn extends BaseAnimationBuilder {
5
+ export class BounceIn extends ComplexAnimationBuilder {
6
6
  constructor() {
7
7
  super(...arguments);
8
8
  this.build = () => {
@@ -10,6 +10,7 @@ export class BounceIn extends BaseAnimationBuilder {
10
10
  const delay = this.getDelay();
11
11
  const duration = this.getDuration();
12
12
  const callback = this.callbackV;
13
+ const initialValues = this.initialValues;
13
14
  return () => {
14
15
  'worklet';
15
16
  return {
@@ -20,9 +21,7 @@ export class BounceIn extends BaseAnimationBuilder {
20
21
  },
21
22
  ],
22
23
  },
23
- initialValues: {
24
- transform: [{ scale: 0 }],
25
- },
24
+ initialValues: Object.assign({ transform: [{ scale: 0 }] }, initialValues),
26
25
  callback: callback,
27
26
  };
28
27
  };
@@ -39,7 +38,7 @@ export class BounceIn extends BaseAnimationBuilder {
39
38
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
40
39
  }
41
40
  }
42
- export class BounceInDown extends BaseAnimationBuilder {
41
+ export class BounceInDown extends ComplexAnimationBuilder {
43
42
  constructor() {
44
43
  super(...arguments);
45
44
  this.build = () => {
@@ -47,6 +46,7 @@ export class BounceInDown extends BaseAnimationBuilder {
47
46
  const delay = this.getDelay();
48
47
  const duration = this.getDuration();
49
48
  const callback = this.callbackV;
49
+ const initialValues = this.initialValues;
50
50
  return () => {
51
51
  'worklet';
52
52
  return {
@@ -57,13 +57,11 @@ export class BounceInDown extends BaseAnimationBuilder {
57
57
  },
58
58
  ],
59
59
  },
60
- initialValues: {
61
- transform: [
60
+ initialValues: Object.assign({ transform: [
62
61
  {
63
62
  translateY: height,
64
63
  },
65
- ],
66
- },
64
+ ] }, initialValues),
67
65
  callback: callback,
68
66
  };
69
67
  };
@@ -80,7 +78,7 @@ export class BounceInDown extends BaseAnimationBuilder {
80
78
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
81
79
  }
82
80
  }
83
- export class BounceInUp extends BaseAnimationBuilder {
81
+ export class BounceInUp extends ComplexAnimationBuilder {
84
82
  constructor() {
85
83
  super(...arguments);
86
84
  this.build = () => {
@@ -88,6 +86,7 @@ export class BounceInUp extends BaseAnimationBuilder {
88
86
  const delay = this.getDelay();
89
87
  const duration = this.getDuration();
90
88
  const callback = this.callbackV;
89
+ const initialValues = this.initialValues;
91
90
  return () => {
92
91
  'worklet';
93
92
  return {
@@ -98,9 +97,7 @@ export class BounceInUp extends BaseAnimationBuilder {
98
97
  },
99
98
  ],
100
99
  },
101
- initialValues: {
102
- transform: [{ translateY: -height }],
103
- },
100
+ initialValues: Object.assign({ transform: [{ translateY: -height }] }, initialValues),
104
101
  callback: callback,
105
102
  };
106
103
  };
@@ -117,7 +114,7 @@ export class BounceInUp extends BaseAnimationBuilder {
117
114
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
118
115
  }
119
116
  }
120
- export class BounceInLeft extends BaseAnimationBuilder {
117
+ export class BounceInLeft extends ComplexAnimationBuilder {
121
118
  constructor() {
122
119
  super(...arguments);
123
120
  this.build = () => {
@@ -125,6 +122,7 @@ export class BounceInLeft extends BaseAnimationBuilder {
125
122
  const delay = this.getDelay();
126
123
  const duration = this.getDuration();
127
124
  const callback = this.callbackV;
125
+ const initialValues = this.initialValues;
128
126
  return () => {
129
127
  'worklet';
130
128
  return {
@@ -135,9 +133,7 @@ export class BounceInLeft extends BaseAnimationBuilder {
135
133
  },
136
134
  ],
137
135
  },
138
- initialValues: {
139
- transform: [{ translateX: -width }],
140
- },
136
+ initialValues: Object.assign({ transform: [{ translateX: -width }] }, initialValues),
141
137
  callback: callback,
142
138
  };
143
139
  };
@@ -154,7 +150,7 @@ export class BounceInLeft extends BaseAnimationBuilder {
154
150
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
155
151
  }
156
152
  }
157
- export class BounceInRight extends BaseAnimationBuilder {
153
+ export class BounceInRight extends ComplexAnimationBuilder {
158
154
  constructor() {
159
155
  super(...arguments);
160
156
  this.build = () => {
@@ -162,6 +158,7 @@ export class BounceInRight extends BaseAnimationBuilder {
162
158
  const delay = this.getDelay();
163
159
  const duration = this.getDuration();
164
160
  const callback = this.callbackV;
161
+ const initialValues = this.initialValues;
165
162
  return () => {
166
163
  'worklet';
167
164
  return {
@@ -172,9 +169,7 @@ export class BounceInRight extends BaseAnimationBuilder {
172
169
  },
173
170
  ],
174
171
  },
175
- initialValues: {
176
- transform: [{ translateX: width }],
177
- },
172
+ initialValues: Object.assign({ transform: [{ translateX: width }] }, initialValues),
178
173
  callback: callback,
179
174
  };
180
175
  };
@@ -191,7 +186,7 @@ export class BounceInRight extends BaseAnimationBuilder {
191
186
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
192
187
  }
193
188
  }
194
- export class BounceOut extends BaseAnimationBuilder {
189
+ export class BounceOut extends ComplexAnimationBuilder {
195
190
  constructor() {
196
191
  super(...arguments);
197
192
  this.build = () => {
@@ -199,6 +194,7 @@ export class BounceOut extends BaseAnimationBuilder {
199
194
  const delay = this.getDelay();
200
195
  const duration = this.getDuration();
201
196
  const callback = this.callbackV;
197
+ const initialValues = this.initialValues;
202
198
  return () => {
203
199
  'worklet';
204
200
  return {
@@ -209,9 +205,7 @@ export class BounceOut extends BaseAnimationBuilder {
209
205
  },
210
206
  ],
211
207
  },
212
- initialValues: {
213
- transform: [{ scale: 1 }],
214
- },
208
+ initialValues: Object.assign({ transform: [{ scale: 1 }] }, initialValues),
215
209
  callback: callback,
216
210
  };
217
211
  };
@@ -228,7 +222,7 @@ export class BounceOut extends BaseAnimationBuilder {
228
222
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
229
223
  }
230
224
  }
231
- export class BounceOutDown extends BaseAnimationBuilder {
225
+ export class BounceOutDown extends ComplexAnimationBuilder {
232
226
  constructor() {
233
227
  super(...arguments);
234
228
  this.build = () => {
@@ -236,6 +230,7 @@ export class BounceOutDown extends BaseAnimationBuilder {
236
230
  const delay = this.getDelay();
237
231
  const duration = this.getDuration();
238
232
  const callback = this.callbackV;
233
+ const initialValues = this.initialValues;
239
234
  return () => {
240
235
  'worklet';
241
236
  return {
@@ -248,9 +243,7 @@ export class BounceOutDown extends BaseAnimationBuilder {
248
243
  },
249
244
  ],
250
245
  },
251
- initialValues: {
252
- transform: [{ translateY: 0 }],
253
- },
246
+ initialValues: Object.assign({ transform: [{ translateY: 0 }] }, initialValues),
254
247
  callback: callback,
255
248
  };
256
249
  };
@@ -267,7 +260,7 @@ export class BounceOutDown extends BaseAnimationBuilder {
267
260
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
268
261
  }
269
262
  }
270
- export class BounceOutUp extends BaseAnimationBuilder {
263
+ export class BounceOutUp extends ComplexAnimationBuilder {
271
264
  constructor() {
272
265
  super(...arguments);
273
266
  this.build = () => {
@@ -275,6 +268,7 @@ export class BounceOutUp extends BaseAnimationBuilder {
275
268
  const delay = this.getDelay();
276
269
  const duration = this.getDuration();
277
270
  const callback = this.callbackV;
271
+ const initialValues = this.initialValues;
278
272
  return () => {
279
273
  'worklet';
280
274
  return {
@@ -287,9 +281,7 @@ export class BounceOutUp extends BaseAnimationBuilder {
287
281
  },
288
282
  ],
289
283
  },
290
- initialValues: {
291
- transform: [{ translateY: 0 }],
292
- },
284
+ initialValues: Object.assign({ transform: [{ translateY: 0 }] }, initialValues),
293
285
  callback: callback,
294
286
  };
295
287
  };
@@ -306,7 +298,7 @@ export class BounceOutUp extends BaseAnimationBuilder {
306
298
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
307
299
  }
308
300
  }
309
- export class BounceOutLeft extends BaseAnimationBuilder {
301
+ export class BounceOutLeft extends ComplexAnimationBuilder {
310
302
  constructor() {
311
303
  super(...arguments);
312
304
  this.build = () => {
@@ -314,6 +306,7 @@ export class BounceOutLeft extends BaseAnimationBuilder {
314
306
  const delay = this.getDelay();
315
307
  const duration = this.getDuration();
316
308
  const callback = this.callbackV;
309
+ const initialValues = this.initialValues;
317
310
  return () => {
318
311
  'worklet';
319
312
  return {
@@ -326,9 +319,7 @@ export class BounceOutLeft extends BaseAnimationBuilder {
326
319
  },
327
320
  ],
328
321
  },
329
- initialValues: {
330
- transform: [{ translateX: 0 }],
331
- },
322
+ initialValues: Object.assign({ transform: [{ translateX: 0 }] }, initialValues),
332
323
  callback: callback,
333
324
  };
334
325
  };
@@ -345,7 +336,7 @@ export class BounceOutLeft extends BaseAnimationBuilder {
345
336
  return (_a = this.durationV) !== null && _a !== void 0 ? _a : 600;
346
337
  }
347
338
  }
348
- export class BounceOutRight extends BaseAnimationBuilder {
339
+ export class BounceOutRight extends ComplexAnimationBuilder {
349
340
  constructor() {
350
341
  super(...arguments);
351
342
  this.build = () => {
@@ -353,6 +344,7 @@ export class BounceOutRight extends BaseAnimationBuilder {
353
344
  const delay = this.getDelay();
354
345
  const duration = this.getDuration();
355
346
  const callback = this.callbackV;
347
+ const initialValues = this.initialValues;
356
348
  return () => {
357
349
  'worklet';
358
350
  return {
@@ -365,9 +357,7 @@ export class BounceOutRight extends BaseAnimationBuilder {
365
357
  },
366
358
  ],
367
359
  },
368
- initialValues: {
369
- transform: [{ translateX: 0 }],
370
- },
360
+ initialValues: Object.assign({ transform: [{ translateX: 0 }] }, initialValues),
371
361
  callback: callback,
372
362
  };
373
363
  };