react-native-reanimated 3.0.0-rc.8 → 3.0.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 (339) hide show
  1. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +30 -12
  2. package/Common/cpp/AnimatedSensor/AnimatedSensorModule.h +2 -0
  3. package/Common/cpp/Fabric/FabricUtils.cpp +3 -107
  4. package/Common/cpp/Fabric/FabricUtils.h +3 -24
  5. package/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp +54 -37
  6. package/Common/cpp/LayoutAnimations/LayoutAnimationType.h +8 -0
  7. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.cpp +81 -26
  8. package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.h +20 -3
  9. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +122 -121
  10. package/Common/cpp/NativeModules/NativeReanimatedModule.h +21 -14
  11. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +15 -7
  12. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +8 -4
  13. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.cpp +50 -1
  14. package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.h +10 -1
  15. package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.cpp +5 -1
  16. package/Common/cpp/Registries/EventHandlerRegistry.cpp +8 -34
  17. package/Common/cpp/Registries/EventHandlerRegistry.h +7 -13
  18. package/Common/cpp/SharedItems/Shareables.cpp +11 -63
  19. package/Common/cpp/SharedItems/Shareables.h +113 -93
  20. package/Common/cpp/Tools/CollectionUtils.h +14 -0
  21. package/Common/cpp/Tools/JsiUtils.cpp +26 -0
  22. package/Common/cpp/Tools/JsiUtils.h +176 -0
  23. package/Common/cpp/Tools/PlatformDepMethodsHolder.h +5 -5
  24. package/Common/cpp/Tools/ReanimatedVersion.cpp +17 -0
  25. package/Common/cpp/Tools/ReanimatedVersion.h +11 -0
  26. package/Common/cpp/Tools/RuntimeDecorator.cpp +67 -247
  27. package/Common/cpp/Tools/RuntimeDecorator.h +2 -3
  28. package/Common/cpp/Tools/WorkletEventHandler.cpp +3 -2
  29. package/Common/cpp/Tools/WorkletEventHandler.h +14 -6
  30. package/RNReanimated.podspec +2 -1
  31. package/android/CMakeLists.txt +188 -181
  32. package/android/build.gradle +362 -311
  33. package/android/proguard-rules.pro +2 -0
  34. package/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java +63 -295
  35. package/android/src/main/cpp/LayoutAnimations.cpp +35 -5
  36. package/android/src/main/cpp/LayoutAnimations.h +23 -6
  37. package/android/src/main/cpp/NativeProxy.cpp +143 -98
  38. package/android/src/main/cpp/NativeProxy.h +22 -28
  39. package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +5 -4
  40. package/android/src/main/java/com/swmansion/reanimated/Utils.java +7 -1
  41. package/android/src/main/java/com/swmansion/reanimated/keyboardObserver/ReanimatedKeyboardEventListener.java +10 -3
  42. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +218 -35
  43. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +43 -17
  44. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +6 -2
  45. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/SharedElement.java +19 -0
  46. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/SharedTransitionManager.java +610 -0
  47. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +93 -23
  48. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/AnimationFrameCallback.java +19 -0
  49. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/EventHandler.java +35 -0
  50. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/KeyboardEventDataUpdater.java +16 -0
  51. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java +206 -0
  52. package/android/src/main/java/com/swmansion/reanimated/nativeProxy/SensorSetter.java +17 -0
  53. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +9 -3
  54. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +3 -4
  55. package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -7
  56. package/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java +90 -307
  57. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/70/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +16 -0
  58. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +63 -0
  59. package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +271 -0
  60. package/android/src/reactNativeVersionPatch/nativeHierarchyManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +76 -20
  61. package/ios/LayoutReanimation/REAAnimationsManager.h +31 -5
  62. package/ios/LayoutReanimation/REAAnimationsManager.m +265 -77
  63. package/ios/LayoutReanimation/REAFrame.h +10 -0
  64. package/ios/LayoutReanimation/REAFrame.m +15 -0
  65. package/ios/LayoutReanimation/REAScreensHelper.h +19 -0
  66. package/ios/LayoutReanimation/REAScreensHelper.m +106 -0
  67. package/ios/LayoutReanimation/REASharedElement.h +15 -0
  68. package/ios/LayoutReanimation/REASharedElement.m +16 -0
  69. package/ios/LayoutReanimation/REASharedTransitionManager.h +17 -0
  70. package/ios/LayoutReanimation/REASharedTransitionManager.m +632 -0
  71. package/ios/LayoutReanimation/REASnapshot.h +1 -0
  72. package/ios/LayoutReanimation/REASnapshot.m +96 -11
  73. package/ios/LayoutReanimation/REAUIManager.mm +67 -60
  74. package/ios/REAModule.mm +2 -7
  75. package/ios/REANodesManager.mm +1 -21
  76. package/ios/keyboardObserver/REAKeyboardEventObserver.m +72 -36
  77. package/ios/native/NativeProxy.mm +75 -114
  78. package/ios/native/REAInitializer.mm +2 -7
  79. package/ios/native/REAJSIUtils.h +60 -2
  80. package/ios/sensor/ReanimatedSensor.h +6 -2
  81. package/ios/sensor/ReanimatedSensor.m +43 -7
  82. package/ios/sensor/ReanimatedSensorContainer.h +4 -1
  83. package/ios/sensor/ReanimatedSensorContainer.m +8 -2
  84. package/lib/commonjs/createAnimatedComponent.js +232 -28
  85. package/lib/commonjs/createAnimatedComponent.js.map +1 -1
  86. package/lib/commonjs/reanimated2/Colors.js +43 -22
  87. package/lib/commonjs/reanimated2/Colors.js.map +1 -1
  88. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js +18 -35
  89. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  90. package/lib/commonjs/reanimated2/animation/styleAnimation.js +5 -1
  91. package/lib/commonjs/reanimated2/animation/styleAnimation.js.map +1 -1
  92. package/lib/commonjs/reanimated2/animation/util.js +17 -15
  93. package/lib/commonjs/reanimated2/animation/util.js.map +1 -1
  94. package/lib/commonjs/reanimated2/commonTypes.js +33 -1
  95. package/lib/commonjs/reanimated2/commonTypes.js.map +1 -1
  96. package/lib/commonjs/reanimated2/component/FlatList.js +19 -3
  97. package/lib/commonjs/reanimated2/component/FlatList.js.map +1 -1
  98. package/lib/commonjs/reanimated2/core.js +34 -83
  99. package/lib/commonjs/reanimated2/core.js.map +1 -1
  100. package/lib/commonjs/reanimated2/errors.js +66 -0
  101. package/lib/commonjs/reanimated2/errors.js.map +1 -0
  102. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  103. package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  104. package/lib/commonjs/reanimated2/globals.d.js.map +1 -1
  105. package/lib/commonjs/reanimated2/hook/index.js +0 -6
  106. package/lib/commonjs/reanimated2/hook/index.js.map +1 -1
  107. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  108. package/lib/commonjs/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  109. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js +13 -1
  110. package/lib/commonjs/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  111. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js +1 -1
  112. package/lib/commonjs/reanimated2/hook/useAnimatedRef.js.map +1 -1
  113. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js +89 -16
  114. package/lib/commonjs/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  115. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js +43 -50
  116. package/lib/commonjs/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  117. package/lib/commonjs/reanimated2/hook/useDerivedValue.js +13 -1
  118. package/lib/commonjs/reanimated2/hook/useDerivedValue.js.map +1 -1
  119. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js +2 -2
  120. package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  121. package/lib/commonjs/reanimated2/hook/utils.js +18 -65
  122. package/lib/commonjs/reanimated2/hook/utils.js.map +1 -1
  123. package/lib/commonjs/reanimated2/index.js +13 -0
  124. package/lib/commonjs/reanimated2/index.js.map +1 -1
  125. package/lib/commonjs/reanimated2/initializers.js +196 -0
  126. package/lib/commonjs/reanimated2/initializers.js.map +1 -0
  127. package/lib/commonjs/reanimated2/interpolateColor.js +96 -19
  128. package/lib/commonjs/reanimated2/interpolateColor.js.map +1 -1
  129. package/lib/commonjs/reanimated2/jestUtils.js +1 -1
  130. package/lib/commonjs/reanimated2/jestUtils.js.map +1 -1
  131. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js +101 -16
  132. package/lib/commonjs/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  133. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js +22 -0
  134. package/lib/commonjs/reanimated2/js-reanimated/Mapper.js.map +1 -1
  135. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js +2 -0
  136. package/lib/commonjs/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  137. package/lib/commonjs/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  138. package/lib/commonjs/reanimated2/js-reanimated/global.js +4 -9
  139. package/lib/commonjs/reanimated2/js-reanimated/global.js.map +1 -1
  140. package/lib/commonjs/reanimated2/js-reanimated/index.js +0 -1
  141. package/lib/commonjs/reanimated2/js-reanimated/index.js.map +1 -1
  142. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +11 -0
  143. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  144. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js +8 -0
  145. package/lib/commonjs/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  146. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js +16 -12
  147. package/lib/commonjs/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  148. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -23
  149. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  150. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -14
  151. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  152. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -14
  153. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  154. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -15
  155. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  156. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -23
  157. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  158. package/lib/commonjs/reanimated2/layoutReanimation/index.js +13 -0
  159. package/lib/commonjs/reanimated2/layoutReanimation/index.js.map +1 -1
  160. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js +94 -0
  161. package/lib/commonjs/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  162. package/lib/commonjs/reanimated2/mappers.js +18 -6
  163. package/lib/commonjs/reanimated2/mappers.js.map +1 -1
  164. package/lib/commonjs/reanimated2/mock.js +45 -0
  165. package/lib/commonjs/reanimated2/mock.js.map +1 -1
  166. package/lib/commonjs/reanimated2/mutables.js +4 -2
  167. package/lib/commonjs/reanimated2/mutables.js.map +1 -1
  168. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js +42 -0
  169. package/lib/commonjs/reanimated2/platform-specific/checkVersion.js.map +1 -0
  170. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js +15 -0
  171. package/lib/commonjs/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  172. package/lib/commonjs/reanimated2/pluginUtils.js +11 -0
  173. package/lib/commonjs/reanimated2/pluginUtils.js.map +1 -0
  174. package/lib/commonjs/reanimated2/shareables.js +38 -11
  175. package/lib/commonjs/reanimated2/shareables.js.map +1 -1
  176. package/lib/commonjs/reanimated2/threads.js +114 -4
  177. package/lib/commonjs/reanimated2/threads.js.map +1 -1
  178. package/lib/commonjs/reanimated2/utils.js +7 -0
  179. package/lib/commonjs/reanimated2/utils.js.map +1 -1
  180. package/lib/commonjs/reanimated2/valueSetter.js +1 -3
  181. package/lib/commonjs/reanimated2/valueSetter.js.map +1 -1
  182. package/lib/module/createAnimatedComponent.js +229 -29
  183. package/lib/module/createAnimatedComponent.js.map +1 -1
  184. package/lib/module/reanimated2/Colors.js +35 -19
  185. package/lib/module/reanimated2/Colors.js.map +1 -1
  186. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +18 -34
  187. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  188. package/lib/module/reanimated2/animation/styleAnimation.js +5 -1
  189. package/lib/module/reanimated2/animation/styleAnimation.js.map +1 -1
  190. package/lib/module/reanimated2/animation/util.js +17 -16
  191. package/lib/module/reanimated2/animation/util.js.map +1 -1
  192. package/lib/module/reanimated2/commonTypes.js +29 -0
  193. package/lib/module/reanimated2/commonTypes.js.map +1 -1
  194. package/lib/module/reanimated2/component/FlatList.js +18 -4
  195. package/lib/module/reanimated2/component/FlatList.js.map +1 -1
  196. package/lib/module/reanimated2/core.js +30 -76
  197. package/lib/module/reanimated2/core.js.map +1 -1
  198. package/lib/module/reanimated2/errors.js +58 -0
  199. package/lib/module/reanimated2/errors.js.map +1 -0
  200. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js +2 -2
  201. package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
  202. package/lib/module/reanimated2/globals.d.js.map +1 -1
  203. package/lib/module/reanimated2/hook/index.js +1 -1
  204. package/lib/module/reanimated2/hook/index.js.map +1 -1
  205. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js +5 -2
  206. package/lib/module/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
  207. package/lib/module/reanimated2/hook/useAnimatedReaction.js +12 -1
  208. package/lib/module/reanimated2/hook/useAnimatedReaction.js.map +1 -1
  209. package/lib/module/reanimated2/hook/useAnimatedRef.js +2 -2
  210. package/lib/module/reanimated2/hook/useAnimatedRef.js.map +1 -1
  211. package/lib/module/reanimated2/hook/useAnimatedSensor.js +88 -13
  212. package/lib/module/reanimated2/hook/useAnimatedSensor.js.map +1 -1
  213. package/lib/module/reanimated2/hook/useAnimatedStyle.js +45 -52
  214. package/lib/module/reanimated2/hook/useAnimatedStyle.js.map +1 -1
  215. package/lib/module/reanimated2/hook/useDerivedValue.js +12 -1
  216. package/lib/module/reanimated2/hook/useDerivedValue.js.map +1 -1
  217. package/lib/module/reanimated2/hook/useScrollViewOffset.js +2 -2
  218. package/lib/module/reanimated2/hook/useScrollViewOffset.js.map +1 -1
  219. package/lib/module/reanimated2/hook/utils.js +17 -60
  220. package/lib/module/reanimated2/hook/utils.js.map +1 -1
  221. package/lib/module/reanimated2/index.js +1 -0
  222. package/lib/module/reanimated2/index.js.map +1 -1
  223. package/lib/module/reanimated2/initializers.js +182 -0
  224. package/lib/module/reanimated2/initializers.js.map +1 -0
  225. package/lib/module/reanimated2/interpolateColor.js +96 -19
  226. package/lib/module/reanimated2/interpolateColor.js.map +1 -1
  227. package/lib/module/reanimated2/jestUtils.js +1 -1
  228. package/lib/module/reanimated2/jestUtils.js.map +1 -1
  229. package/lib/module/reanimated2/js-reanimated/JSReanimated.js +101 -16
  230. package/lib/module/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
  231. package/lib/module/reanimated2/js-reanimated/Mapper.js +21 -0
  232. package/lib/module/reanimated2/js-reanimated/Mapper.js.map +1 -1
  233. package/lib/module/reanimated2/js-reanimated/WebSensor.js +2 -0
  234. package/lib/module/reanimated2/js-reanimated/WebSensor.js.map +1 -0
  235. package/lib/module/reanimated2/js-reanimated/commonTypes.js.map +1 -1
  236. package/lib/module/reanimated2/js-reanimated/global.js +4 -9
  237. package/lib/module/reanimated2/js-reanimated/global.js.map +1 -1
  238. package/lib/module/reanimated2/js-reanimated/index.js +0 -1
  239. package/lib/module/reanimated2/js-reanimated/index.js.map +1 -1
  240. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +9 -1
  241. package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
  242. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js +1 -0
  243. package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
  244. package/lib/module/reanimated2/layoutReanimation/animationsManager.js +15 -10
  245. package/lib/module/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
  246. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +16 -21
  247. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
  248. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -12
  249. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
  250. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
  251. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
  252. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js +8 -13
  253. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
  254. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +16 -21
  255. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
  256. package/lib/module/reanimated2/layoutReanimation/index.js +1 -0
  257. package/lib/module/reanimated2/layoutReanimation/index.js.map +1 -1
  258. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js +82 -0
  259. package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -0
  260. package/lib/module/reanimated2/mappers.js +16 -6
  261. package/lib/module/reanimated2/mappers.js.map +1 -1
  262. package/lib/module/reanimated2/mock.js +45 -0
  263. package/lib/module/reanimated2/mock.js.map +1 -1
  264. package/lib/module/reanimated2/mutables.js +4 -2
  265. package/lib/module/reanimated2/mutables.js.map +1 -1
  266. package/lib/module/reanimated2/platform-specific/checkVersion.js +35 -0
  267. package/lib/module/reanimated2/platform-specific/checkVersion.js.map +1 -0
  268. package/lib/module/reanimated2/platform-specific/checkVersion.web.js +8 -0
  269. package/lib/module/reanimated2/platform-specific/checkVersion.web.js.map +1 -0
  270. package/lib/module/reanimated2/pluginUtils.js +4 -0
  271. package/lib/module/reanimated2/pluginUtils.js.map +1 -0
  272. package/lib/module/reanimated2/shareables.js +38 -9
  273. package/lib/module/reanimated2/shareables.js.map +1 -1
  274. package/lib/module/reanimated2/threads.js +105 -4
  275. package/lib/module/reanimated2/threads.js.map +1 -1
  276. package/lib/module/reanimated2/utils.js +5 -0
  277. package/lib/module/reanimated2/utils.js.map +1 -1
  278. package/lib/module/reanimated2/valueSetter.js +1 -2
  279. package/lib/module/reanimated2/valueSetter.js.map +1 -1
  280. package/package.json +9 -8
  281. package/{plugin.js → plugin/index.js} +173 -228
  282. package/react-native-reanimated.d.ts +57 -10
  283. package/scripts/reanimated_utils.rb +15 -2
  284. package/src/createAnimatedComponent.tsx +238 -28
  285. package/src/reanimated2/Colors.ts +38 -11
  286. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +63 -41
  287. package/src/reanimated2/animation/styleAnimation.ts +8 -1
  288. package/src/reanimated2/animation/util.ts +29 -16
  289. package/src/reanimated2/commonTypes.ts +28 -1
  290. package/src/reanimated2/component/FlatList.tsx +30 -5
  291. package/src/reanimated2/core.ts +45 -75
  292. package/src/reanimated2/errors.ts +57 -0
  293. package/src/reanimated2/frameCallback/FrameCallbackRegistryUI.ts +2 -2
  294. package/src/reanimated2/globals.d.ts +34 -18
  295. package/src/reanimated2/hook/index.ts +1 -1
  296. package/src/reanimated2/hook/useAnimatedKeyboard.ts +10 -4
  297. package/src/reanimated2/hook/useAnimatedReaction.ts +12 -5
  298. package/src/reanimated2/hook/useAnimatedRef.ts +1 -4
  299. package/src/reanimated2/hook/useAnimatedSensor.ts +88 -11
  300. package/src/reanimated2/hook/useAnimatedStyle.ts +43 -45
  301. package/src/reanimated2/hook/useDerivedValue.ts +8 -1
  302. package/src/reanimated2/hook/useScrollViewOffset.ts +2 -2
  303. package/src/reanimated2/hook/utils.ts +15 -61
  304. package/src/reanimated2/index.ts +1 -0
  305. package/src/reanimated2/initializers.ts +184 -0
  306. package/src/reanimated2/interpolateColor.ts +104 -20
  307. package/src/reanimated2/jestUtils.ts +1 -1
  308. package/src/reanimated2/js-reanimated/JSReanimated.ts +105 -18
  309. package/src/reanimated2/js-reanimated/Mapper.ts +32 -0
  310. package/src/reanimated2/js-reanimated/WebSensor.ts +34 -0
  311. package/src/reanimated2/js-reanimated/commonTypes.ts +0 -1
  312. package/src/reanimated2/js-reanimated/global.ts +4 -8
  313. package/src/reanimated2/js-reanimated/index.ts +0 -1
  314. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +13 -1
  315. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +1 -0
  316. package/src/reanimated2/layoutReanimation/animationsManager.ts +17 -12
  317. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +16 -19
  318. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +14 -11
  319. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +21 -11
  320. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -11
  321. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +36 -19
  322. package/src/reanimated2/layoutReanimation/index.ts +1 -0
  323. package/src/reanimated2/layoutReanimation/sharedTransitions/index.ts +87 -0
  324. package/src/reanimated2/mappers.ts +17 -6
  325. package/src/reanimated2/mock.ts +128 -0
  326. package/src/reanimated2/mutables.ts +2 -0
  327. package/src/reanimated2/platform-specific/checkVersion.ts +39 -0
  328. package/src/reanimated2/platform-specific/checkVersion.web.ts +6 -0
  329. package/src/reanimated2/pluginUtils.ts +8 -0
  330. package/src/reanimated2/shareables.ts +47 -11
  331. package/src/reanimated2/threads.ts +103 -1
  332. package/src/reanimated2/utils.ts +6 -0
  333. package/src/reanimated2/valueSetter.ts +1 -2
  334. package/lib/commonjs/reanimated2/time.js +0 -55
  335. package/lib/commonjs/reanimated2/time.js.map +0 -1
  336. package/lib/module/reanimated2/time.js +0 -37
  337. package/lib/module/reanimated2/time.js.map +0 -1
  338. package/src/reanimated2/time.ts +0 -30
  339. /package/android/src/{main/java → reactNativeVersionPatch/ReanimatedUIManager/70}/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","startMapper","stopMapper","useSharedValue","useAnimatedReaction","prepare","react","dependencies","previous","undefined","Object","values","_closure","__workletHash","push","fun","input","value","mapperId"],"sources":["useAnimatedReaction.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { BasicWorkletFunction, WorkletFunction } from '../commonTypes';\nimport { startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\nimport { useSharedValue } from './useSharedValue';\n\nexport interface AnimatedReactionWorkletFunction<T> extends WorkletFunction {\n (prepared: T, previous: T | null): void;\n}\n/**\n * @param prepare - worklet used for data preparation for the second parameter\n * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions\n * the first worklet defines the inputs, in other words on which shared values change will it be called.\n * the second one can modify any shared values but those which are mentioned in the first worklet. Beware of that, because this may result in endless loop and high cpu usage.\n */\nexport function useAnimatedReaction<T>(\n prepare: BasicWorkletFunction<T>,\n react: AnimatedReactionWorkletFunction<T>,\n dependencies: DependencyList\n): void {\n const previous = useSharedValue<T | null>(null);\n if (dependencies === undefined) {\n dependencies = [\n Object.values(prepare._closure ?? {}),\n Object.values(react._closure ?? {}),\n prepare.__workletHash,\n react.__workletHash,\n ];\n } else {\n dependencies.push(prepare.__workletHash, react.__workletHash);\n }\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n const input = prepare();\n react(input, previous.value);\n previous.value = input;\n };\n const mapperId = startMapper(\n fun,\n Object.values(prepare._closure ?? {}),\n []\n );\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n}\n"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AAEA,SAASC,WAAT,EAAsBC,UAAtB,QAAwC,SAAxC;AAEA,SAASC,cAAT,QAA+B,kBAA/B;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAT,CACLC,OADK,EAELC,KAFK,EAGLC,YAHK,EAIC;EACN,MAAMC,QAAQ,GAAGL,cAAc,CAAW,IAAX,CAA/B;;EACA,IAAII,YAAY,KAAKE,SAArB,EAAgC;IAC9BF,YAAY,GAAG,CACbG,MAAM,CAACC,MAAP,CAAcN,OAAO,CAACO,QAAR,IAAoB,EAAlC,CADa,EAEbF,MAAM,CAACC,MAAP,CAAcL,KAAK,CAACM,QAAN,IAAkB,EAAhC,CAFa,EAGbP,OAAO,CAACQ,aAHK,EAIbP,KAAK,CAACO,aAJO,CAAf;EAMD,CAPD,MAOO;IACLN,YAAY,CAACO,IAAb,CAAkBT,OAAO,CAACQ,aAA1B,EAAyCP,KAAK,CAACO,aAA/C;EACD;;EAEDb,SAAS,CAAC,MAAM;IACd,MAAMe,GAAG,GAAG,MAAM;MAChB;;MACA,MAAMC,KAAK,GAAGX,OAAO,EAArB;MACAC,KAAK,CAACU,KAAD,EAAQR,QAAQ,CAACS,KAAjB,CAAL;MACAT,QAAQ,CAACS,KAAT,GAAiBD,KAAjB;IACD,CALD;;IAMA,MAAME,QAAQ,GAAGjB,WAAW,CAC1Bc,GAD0B,EAE1BL,MAAM,CAACC,MAAP,CAAcN,OAAO,CAACO,QAAR,IAAoB,EAAlC,CAF0B,EAG1B,EAH0B,CAA5B;IAKA,OAAO,MAAM;MACXV,UAAU,CAACgB,QAAD,CAAV;IACD,CAFD;EAGD,CAfQ,EAeNX,YAfM,CAAT;AAgBD"}
1
+ {"version":3,"names":["useEffect","startMapper","stopMapper","useSharedValue","shouldBeUseWeb","useAnimatedReaction","prepare","react","dependencies","previous","inputs","Object","values","_closure","length","undefined","__workletHash","push","fun","input","value","mapperId"],"sources":["useAnimatedReaction.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { BasicWorkletFunction, WorkletFunction } from '../commonTypes';\nimport { startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\nimport { useSharedValue } from './useSharedValue';\nimport { shouldBeUseWeb } from '../PlatformChecker';\n\nexport interface AnimatedReactionWorkletFunction<T> extends WorkletFunction {\n (prepared: T, previous: T | null): void;\n}\n/**\n * @param prepare - worklet used for data preparation for the second parameter\n * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions\n * the first worklet defines the inputs, in other words on which shared values change will it be called.\n * the second one can modify any shared values but those which are mentioned in the first worklet. Beware of that, because this may result in endless loop and high cpu usage.\n */\nexport function useAnimatedReaction<T>(\n prepare: BasicWorkletFunction<T>,\n react: AnimatedReactionWorkletFunction<T>,\n dependencies: DependencyList\n): void {\n const previous = useSharedValue<T | null>(null);\n\n let inputs = Object.values(prepare._closure ?? {});\n\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n }\n\n if (dependencies === undefined) {\n dependencies = [\n Object.values(prepare._closure ?? {}),\n Object.values(react._closure ?? {}),\n prepare.__workletHash,\n react.__workletHash,\n ];\n } else {\n dependencies.push(prepare.__workletHash, react.__workletHash);\n }\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n const input = prepare();\n react(input, previous.value);\n previous.value = input;\n };\n const mapperId = startMapper(fun, inputs, []);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n}\n"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AAEA,SAASC,WAAT,EAAsBC,UAAtB,QAAwC,SAAxC;AAEA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,cAAT,QAA+B,oBAA/B;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,mBAAT,CACLC,OADK,EAELC,KAFK,EAGLC,YAHK,EAIC;EACN,MAAMC,QAAQ,GAAGN,cAAc,CAAW,IAAX,CAA/B;EAEA,IAAIO,MAAM,GAAGC,MAAM,CAACC,MAAP,CAAcN,OAAO,CAACO,QAAR,IAAoB,EAAlC,CAAb;;EAEA,IAAIT,cAAc,EAAlB,EAAsB;IAAA;;IACpB,IAAI,CAACM,MAAM,CAACI,MAAR,qBAAkBN,YAAlB,0CAAkB,cAAcM,MAApC,EAA4C;MAC1C;MACAJ,MAAM,GAAGF,YAAT;IACD;EACF;;EAED,IAAIA,YAAY,KAAKO,SAArB,EAAgC;IAC9BP,YAAY,GAAG,CACbG,MAAM,CAACC,MAAP,CAAcN,OAAO,CAACO,QAAR,IAAoB,EAAlC,CADa,EAEbF,MAAM,CAACC,MAAP,CAAcL,KAAK,CAACM,QAAN,IAAkB,EAAhC,CAFa,EAGbP,OAAO,CAACU,aAHK,EAIbT,KAAK,CAACS,aAJO,CAAf;EAMD,CAPD,MAOO;IACLR,YAAY,CAACS,IAAb,CAAkBX,OAAO,CAACU,aAA1B,EAAyCT,KAAK,CAACS,aAA/C;EACD;;EAEDhB,SAAS,CAAC,MAAM;IACd,MAAMkB,GAAG,GAAG,MAAM;MAChB;;MACA,MAAMC,KAAK,GAAGb,OAAO,EAArB;MACAC,KAAK,CAACY,KAAD,EAAQV,QAAQ,CAACW,KAAjB,CAAL;MACAX,QAAQ,CAACW,KAAT,GAAiBD,KAAjB;IACD,CALD;;IAMA,MAAME,QAAQ,GAAGpB,WAAW,CAACiB,GAAD,EAAMR,MAAN,EAAc,EAAd,CAA5B;IACA,OAAO,MAAM;MACXR,UAAU,CAACmB,QAAD,CAAV;IACD,CAFD;EAGD,CAXQ,EAWNb,YAXM,CAAT;AAYD"}
@@ -2,10 +2,10 @@ import { useRef } from 'react';
2
2
  import { useSharedValue } from './useSharedValue';
3
3
  import { getTag } from '../NativeMethods';
4
4
  import { getShadowNodeWrapperFromHostInstance } from '../fabricUtils';
5
- import { makeShareableCloneRecursive, makeShareableShadowNodeWrapper, registerShareableMapping } from '../shareables';
5
+ import { makeShareableCloneRecursive, registerShareableMapping } from '../shareables';
6
6
 
7
7
  function getShareableShadowNodeFromComponent(component) {
8
- return makeShareableShadowNodeWrapper(getShadowNodeWrapperFromHostInstance(component));
8
+ return getShadowNodeWrapperFromHostInstance(component);
9
9
  }
10
10
 
11
11
  const getTagValueFunction = global._IS_FABRIC ? getShareableShadowNodeFromComponent : getTag;
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","useSharedValue","getTag","getShadowNodeWrapperFromHostInstance","makeShareableCloneRecursive","makeShareableShadowNodeWrapper","registerShareableMapping","getShareableShadowNodeFromComponent","component","getTagValueFunction","global","_IS_FABRIC","useAnimatedRef","tag","ref","current","fun","value","remoteRef","__init"],"sources":["useAnimatedRef.ts"],"sourcesContent":["import { Component, useRef } from 'react';\nimport { useSharedValue } from './useSharedValue';\nimport { RefObjectFunction } from './commonTypes';\nimport { ShadowNodeWrapper } from '../commonTypes';\nimport { getTag } from '../NativeMethods';\nimport { getShadowNodeWrapperFromHostInstance } from '../fabricUtils';\nimport {\n makeShareableCloneRecursive,\n makeShareableShadowNodeWrapper,\n registerShareableMapping,\n} from '../shareables';\n\nfunction getShareableShadowNodeFromComponent(\n component: Component\n): ShadowNodeWrapper {\n return makeShareableShadowNodeWrapper(\n getShadowNodeWrapperFromHostInstance(component)\n );\n}\n\nconst getTagValueFunction = global._IS_FABRIC\n ? getShareableShadowNodeFromComponent\n : getTag;\n\nexport function useAnimatedRef<T extends Component>(): RefObjectFunction<T> {\n const tag = useSharedValue<number | ShadowNodeWrapper | null>(-1);\n const ref = useRef<RefObjectFunction<T>>();\n\n if (!ref.current) {\n const fun: RefObjectFunction<T> = <RefObjectFunction<T>>((component) => {\n // enters when ref is set by attaching to a component\n if (component) {\n tag.value = getTagValueFunction(component);\n fun.current = component;\n }\n return tag.value;\n });\n\n fun.current = null;\n\n const remoteRef = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return () => tag.value;\n },\n });\n registerShareableMapping(fun, remoteRef);\n\n ref.current = fun;\n }\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAAoBA,MAApB,QAAkC,OAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAGA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,oCAAT,QAAqD,gBAArD;AACA,SACEC,2BADF,EAEEC,8BAFF,EAGEC,wBAHF,QAIO,eAJP;;AAMA,SAASC,mCAAT,CACEC,SADF,EAEqB;EACnB,OAAOH,8BAA8B,CACnCF,oCAAoC,CAACK,SAAD,CADD,CAArC;AAGD;;AAED,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,UAAP,GACxBJ,mCADwB,GAExBL,MAFJ;AAIA,OAAO,SAASU,cAAT,GAAqE;EAC1E,MAAMC,GAAG,GAAGZ,cAAc,CAAoC,CAAC,CAArC,CAA1B;EACA,MAAMa,GAAG,GAAGd,MAAM,EAAlB;;EAEA,IAAI,CAACc,GAAG,CAACC,OAAT,EAAkB;IAChB,MAAMC,GAAyB,GAA2BR,SAAD,IAAe;MACtE;MACA,IAAIA,SAAJ,EAAe;QACbK,GAAG,CAACI,KAAJ,GAAYR,mBAAmB,CAACD,SAAD,CAA/B;QACAQ,GAAG,CAACD,OAAJ,GAAcP,SAAd;MACD;;MACD,OAAOK,GAAG,CAACI,KAAX;IACD,CAPD;;IASAD,GAAG,CAACD,OAAJ,GAAc,IAAd;IAEA,MAAMG,SAAS,GAAGd,2BAA2B,CAAC;MAC5Ce,MAAM,EAAE,MAAM;QACZ;;QACA,OAAO,MAAMN,GAAG,CAACI,KAAjB;MACD;IAJ2C,CAAD,CAA7C;IAMAX,wBAAwB,CAACU,GAAD,EAAME,SAAN,CAAxB;IAEAJ,GAAG,CAACC,OAAJ,GAAcC,GAAd;EACD;;EAED,OAAOF,GAAG,CAACC,OAAX;AACD"}
1
+ {"version":3,"names":["useRef","useSharedValue","getTag","getShadowNodeWrapperFromHostInstance","makeShareableCloneRecursive","registerShareableMapping","getShareableShadowNodeFromComponent","component","getTagValueFunction","global","_IS_FABRIC","useAnimatedRef","tag","ref","current","fun","value","remoteRef","__init"],"sources":["useAnimatedRef.ts"],"sourcesContent":["import { Component, useRef } from 'react';\nimport { useSharedValue } from './useSharedValue';\nimport { RefObjectFunction } from './commonTypes';\nimport { ShadowNodeWrapper } from '../commonTypes';\nimport { getTag } from '../NativeMethods';\nimport { getShadowNodeWrapperFromHostInstance } from '../fabricUtils';\nimport {\n makeShareableCloneRecursive,\n registerShareableMapping,\n} from '../shareables';\n\nfunction getShareableShadowNodeFromComponent(\n component: Component\n): ShadowNodeWrapper {\n return getShadowNodeWrapperFromHostInstance(component);\n}\n\nconst getTagValueFunction = global._IS_FABRIC\n ? getShareableShadowNodeFromComponent\n : getTag;\n\nexport function useAnimatedRef<T extends Component>(): RefObjectFunction<T> {\n const tag = useSharedValue<number | ShadowNodeWrapper | null>(-1);\n const ref = useRef<RefObjectFunction<T>>();\n\n if (!ref.current) {\n const fun: RefObjectFunction<T> = <RefObjectFunction<T>>((component) => {\n // enters when ref is set by attaching to a component\n if (component) {\n tag.value = getTagValueFunction(component);\n fun.current = component;\n }\n return tag.value;\n });\n\n fun.current = null;\n\n const remoteRef = makeShareableCloneRecursive({\n __init: () => {\n 'worklet';\n return () => tag.value;\n },\n });\n registerShareableMapping(fun, remoteRef);\n\n ref.current = fun;\n }\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAAoBA,MAApB,QAAkC,OAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAGA,SAASC,MAAT,QAAuB,kBAAvB;AACA,SAASC,oCAAT,QAAqD,gBAArD;AACA,SACEC,2BADF,EAEEC,wBAFF,QAGO,eAHP;;AAKA,SAASC,mCAAT,CACEC,SADF,EAEqB;EACnB,OAAOJ,oCAAoC,CAACI,SAAD,CAA3C;AACD;;AAED,MAAMC,mBAAmB,GAAGC,MAAM,CAACC,UAAP,GACxBJ,mCADwB,GAExBJ,MAFJ;AAIA,OAAO,SAASS,cAAT,GAAqE;EAC1E,MAAMC,GAAG,GAAGX,cAAc,CAAoC,CAAC,CAArC,CAA1B;EACA,MAAMY,GAAG,GAAGb,MAAM,EAAlB;;EAEA,IAAI,CAACa,GAAG,CAACC,OAAT,EAAkB;IAChB,MAAMC,GAAyB,GAA2BR,SAAD,IAAe;MACtE;MACA,IAAIA,SAAJ,EAAe;QACbK,GAAG,CAACI,KAAJ,GAAYR,mBAAmB,CAACD,SAAD,CAA/B;QACAQ,GAAG,CAACD,OAAJ,GAAcP,SAAd;MACD;;MACD,OAAOK,GAAG,CAACI,KAAX;IACD,CAPD;;IASAD,GAAG,CAACD,OAAJ,GAAc,IAAd;IAEA,MAAMG,SAAS,GAAGb,2BAA2B,CAAC;MAC5Cc,MAAM,EAAE,MAAM;QACZ;;QACA,OAAO,MAAMN,GAAG,CAACI,KAAjB;MACD;IAJ2C,CAAD,CAA7C;IAMAX,wBAAwB,CAACU,GAAD,EAAME,SAAN,CAAxB;IAEAJ,GAAG,CAACC,OAAJ,GAAcC,GAAd;EACD;;EAED,OAAOF,GAAG,CAACC,OAAX;AACD"}
@@ -1,14 +1,6 @@
1
1
  import { useEffect, useRef } from 'react';
2
2
  import { makeMutable, registerSensor, unregisterSensor } from '../core';
3
- export let SensorType;
4
-
5
- (function (SensorType) {
6
- SensorType[SensorType["ACCELEROMETER"] = 1] = "ACCELEROMETER";
7
- SensorType[SensorType["GYROSCOPE"] = 2] = "GYROSCOPE";
8
- SensorType[SensorType["GRAVITY"] = 3] = "GRAVITY";
9
- SensorType[SensorType["MAGNETIC_FIELD"] = 4] = "MAGNETIC_FIELD";
10
- SensorType[SensorType["ROTATION"] = 5] = "ROTATION";
11
- })(SensorType || (SensorType = {}));
3
+ import { SensorType, IOSReferenceFrame } from '../commonTypes';
12
4
 
13
5
  function initSensorData(sensorType) {
14
6
  if (sensorType === SensorType.ROTATION) {
@@ -19,15 +11,86 @@ function initSensorData(sensorType) {
19
11
  qz: 0,
20
12
  yaw: 0,
21
13
  pitch: 0,
22
- roll: 0
14
+ roll: 0,
15
+ interfaceOrientation: 0
23
16
  });
24
17
  } else {
25
18
  return makeMutable({
26
19
  x: 0,
27
20
  y: 0,
28
- z: 0
21
+ z: 0,
22
+ interfaceOrientation: 0
29
23
  });
30
24
  }
25
+ } // euler angles are in order ZXY, z = yaw, x = pitch, y = roll
26
+ // https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js#L237
27
+
28
+
29
+ function eulerToQuaternion(pitch, roll, yaw) {
30
+ 'worklet';
31
+
32
+ const c1 = Math.cos(pitch / 2);
33
+ const s1 = Math.sin(pitch / 2);
34
+ const c2 = Math.cos(roll / 2);
35
+ const s2 = Math.sin(roll / 2);
36
+ const c3 = Math.cos(yaw / 2);
37
+ const s3 = Math.sin(yaw / 2);
38
+ return [s1 * c2 * c3 - c1 * s2 * s3, c1 * s2 * c3 + s1 * c2 * s3, c1 * c2 * s3 + s1 * s2 * c3, c1 * c2 * c3 - s1 * s2 * s3];
39
+ }
40
+
41
+ function adjustRotationToInterfaceOrientation(data) {
42
+ 'worklet';
43
+
44
+ const {
45
+ interfaceOrientation,
46
+ pitch,
47
+ roll,
48
+ yaw
49
+ } = data;
50
+
51
+ if (interfaceOrientation === 90) {
52
+ data.pitch = roll;
53
+ data.roll = -pitch;
54
+ data.yaw = yaw - Math.PI / 2;
55
+ } else if (interfaceOrientation === 270) {
56
+ data.pitch = -roll;
57
+ data.roll = pitch;
58
+ data.yaw = yaw + Math.PI / 2;
59
+ } else if (interfaceOrientation === 180) {
60
+ data.pitch *= -1;
61
+ data.roll *= -1;
62
+ data.yaw *= -1;
63
+ }
64
+
65
+ const q = eulerToQuaternion(data.pitch, data.roll, data.yaw);
66
+ data.qx = q[0];
67
+ data.qy = q[1];
68
+ data.qz = q[2];
69
+ data.qw = q[3];
70
+ return data;
71
+ }
72
+
73
+ function adjustVectorToInterfaceOrientation(data) {
74
+ 'worklet';
75
+
76
+ const {
77
+ interfaceOrientation,
78
+ x,
79
+ y
80
+ } = data;
81
+
82
+ if (interfaceOrientation === 90) {
83
+ data.x = -y;
84
+ data.y = x;
85
+ } else if (interfaceOrientation === 270) {
86
+ data.x = y;
87
+ data.y = -x;
88
+ } else if (interfaceOrientation === 180) {
89
+ data.x *= -1;
90
+ data.y *= -1;
91
+ }
92
+
93
+ return data;
31
94
  }
32
95
 
33
96
  export function useAnimatedSensor(sensorType, userConfig) {
@@ -37,18 +100,30 @@ export function useAnimatedSensor(sensorType, userConfig) {
37
100
  },
38
101
  isAvailable: false,
39
102
  config: {
40
- interval: 0
103
+ interval: 0,
104
+ adjustToInterfaceOrientation: true,
105
+ iosReferenceFrame: IOSReferenceFrame.Auto
41
106
  }
42
107
  });
43
108
  useEffect(() => {
44
109
  ref.current.config = {
45
110
  interval: 'auto',
111
+ adjustToInterfaceOrientation: true,
112
+ iosReferenceFrame: IOSReferenceFrame.Auto,
46
113
  ...userConfig
47
114
  };
48
115
  const sensorData = ref.current.sensor;
49
- const id = registerSensor(sensorType, ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval, data => {
116
+ const id = registerSensor(sensorType, ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval, ref.current.config.iosReferenceFrame, data => {
50
117
  'worklet';
51
118
 
119
+ if (ref.current.config.adjustToInterfaceOrientation) {
120
+ if (sensorType === SensorType.ROTATION) {
121
+ data = adjustRotationToInterfaceOrientation(data);
122
+ } else {
123
+ data = adjustVectorToInterfaceOrientation(data);
124
+ }
125
+ }
126
+
52
127
  sensorData.value = data;
53
128
  });
54
129
 
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","makeMutable","registerSensor","unregisterSensor","SensorType","initSensorData","sensorType","ROTATION","qw","qx","qy","qz","yaw","pitch","roll","x","y","z","useAnimatedSensor","userConfig","ref","sensor","unregister","isAvailable","config","interval","current","sensorData","id","data","value"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { makeMutable, registerSensor, unregisterSensor } from '../core';\nimport { SharedValue, Value3D, ValueRotation } from '../commonTypes';\n\nexport enum SensorType {\n ACCELEROMETER = 1,\n GYROSCOPE = 2,\n GRAVITY = 3,\n MAGNETIC_FIELD = 4,\n ROTATION = 5,\n}\n\nexport type SensorConfig = {\n interval: number | 'auto';\n};\n\nexport type AnimatedSensor = {\n sensor: SharedValue<Value3D | ValueRotation>;\n unregister: () => void;\n isAvailable: boolean;\n config: SensorConfig;\n};\n\nfunction initSensorData(\n sensorType: SensorType\n): SharedValue<Value3D | ValueRotation> {\n if (sensorType === SensorType.ROTATION) {\n return makeMutable<Value3D | ValueRotation>({\n qw: 0,\n qx: 0,\n qy: 0,\n qz: 0,\n yaw: 0,\n pitch: 0,\n roll: 0,\n });\n } else {\n return makeMutable<Value3D | ValueRotation>({\n x: 0,\n y: 0,\n z: 0,\n });\n }\n}\n\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: SensorConfig\n): AnimatedSensor {\n const ref = useRef<AnimatedSensor>({\n sensor: initSensorData(sensorType),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config: {\n interval: 0,\n },\n });\n\n useEffect(() => {\n ref.current.config = { interval: 'auto', ...userConfig };\n const sensorData = ref.current.sensor!;\n const id = registerSensor(\n sensorType,\n ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval,\n (data) => {\n 'worklet';\n sensorData.value = data;\n }\n );\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AACA,SAASC,WAAT,EAAsBC,cAAtB,EAAsCC,gBAAtC,QAA8D,SAA9D;AAGA,WAAYC,UAAZ;;WAAYA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;EAAAA,U,CAAAA,U;GAAAA,U,KAAAA,U;;AAmBZ,SAASC,cAAT,CACEC,UADF,EAEwC;EACtC,IAAIA,UAAU,KAAKF,UAAU,CAACG,QAA9B,EAAwC;IACtC,OAAON,WAAW,CAA0B;MAC1CO,EAAE,EAAE,CADsC;MAE1CC,EAAE,EAAE,CAFsC;MAG1CC,EAAE,EAAE,CAHsC;MAI1CC,EAAE,EAAE,CAJsC;MAK1CC,GAAG,EAAE,CALqC;MAM1CC,KAAK,EAAE,CANmC;MAO1CC,IAAI,EAAE;IAPoC,CAA1B,CAAlB;EASD,CAVD,MAUO;IACL,OAAOb,WAAW,CAA0B;MAC1Cc,CAAC,EAAE,CADuC;MAE1CC,CAAC,EAAE,CAFuC;MAG1CC,CAAC,EAAE;IAHuC,CAA1B,CAAlB;EAKD;AACF;;AAED,OAAO,SAASC,iBAAT,CACLZ,UADK,EAELa,UAFK,EAGW;EAChB,MAAMC,GAAG,GAAGpB,MAAM,CAAiB;IACjCqB,MAAM,EAAEhB,cAAc,CAACC,UAAD,CADW;IAEjCgB,UAAU,EAAE,MAAM,CAChB;IACD,CAJgC;IAKjCC,WAAW,EAAE,KALoB;IAMjCC,MAAM,EAAE;MACNC,QAAQ,EAAE;IADJ;EANyB,CAAjB,CAAlB;EAWA1B,SAAS,CAAC,MAAM;IACdqB,GAAG,CAACM,OAAJ,CAAYF,MAAZ,GAAqB;MAAEC,QAAQ,EAAE,MAAZ;MAAoB,GAAGN;IAAvB,CAArB;IACA,MAAMQ,UAAU,GAAGP,GAAG,CAACM,OAAJ,CAAYL,MAA/B;IACA,MAAMO,EAAE,GAAG1B,cAAc,CACvBI,UADuB,EAEvBc,GAAG,CAACM,OAAJ,CAAYF,MAAZ,CAAmBC,QAAnB,KAAgC,MAAhC,GAAyC,CAAC,CAA1C,GAA8CL,GAAG,CAACM,OAAJ,CAAYF,MAAZ,CAAmBC,QAF1C,EAGtBI,IAAD,IAAU;MACR;;MACAF,UAAU,CAACG,KAAX,GAAmBD,IAAnB;IACD,CANsB,CAAzB;;IASA,IAAID,EAAE,KAAK,CAAC,CAAZ,EAAe;MACb;MACAR,GAAG,CAACM,OAAJ,CAAYJ,UAAZ,GAAyB,MAAMnB,gBAAgB,CAACyB,EAAD,CAA/C;;MACAR,GAAG,CAACM,OAAJ,CAAYH,WAAZ,GAA0B,IAA1B;IACD,CAJD,MAIO;MACL;MACAH,GAAG,CAACM,OAAJ,CAAYJ,UAAZ,GAAyB,MAAM,CAC7B;MACD,CAFD;;MAGAF,GAAG,CAACM,OAAJ,CAAYH,WAAZ,GAA0B,KAA1B;IACD;;IAED,OAAO,MAAM;MACXH,GAAG,CAACM,OAAJ,CAAYJ,UAAZ;IACD,CAFD;EAGD,CA3BQ,EA2BN,CAAChB,UAAD,EAAaa,UAAb,CA3BM,CAAT;EA6BA,OAAOC,GAAG,CAACM,OAAX;AACD"}
1
+ {"version":3,"names":["useEffect","useRef","makeMutable","registerSensor","unregisterSensor","SensorType","IOSReferenceFrame","initSensorData","sensorType","ROTATION","qw","qx","qy","qz","yaw","pitch","roll","interfaceOrientation","x","y","z","eulerToQuaternion","c1","Math","cos","s1","sin","c2","s2","c3","s3","adjustRotationToInterfaceOrientation","data","PI","q","adjustVectorToInterfaceOrientation","useAnimatedSensor","userConfig","ref","sensor","unregister","isAvailable","config","interval","adjustToInterfaceOrientation","iosReferenceFrame","Auto","current","sensorData","id","value"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { makeMutable, registerSensor, unregisterSensor } from '../core';\nimport {\n SensorType,\n SharedValue,\n Value3D,\n ValueRotation,\n IOSReferenceFrame,\n} from '../commonTypes';\n\nexport type SensorConfig = {\n interval: number | 'auto';\n adjustToInterfaceOrientation: boolean;\n iosReferenceFrame: IOSReferenceFrame;\n};\n\nexport type AnimatedSensor = {\n sensor: SharedValue<Value3D | ValueRotation>;\n unregister: () => void;\n isAvailable: boolean;\n config: SensorConfig;\n};\n\nfunction initSensorData(\n sensorType: SensorType\n): SharedValue<Value3D | ValueRotation> {\n if (sensorType === SensorType.ROTATION) {\n return makeMutable<Value3D | ValueRotation>({\n qw: 0,\n qx: 0,\n qy: 0,\n qz: 0,\n yaw: 0,\n pitch: 0,\n roll: 0,\n interfaceOrientation: 0,\n });\n } else {\n return makeMutable<Value3D | ValueRotation>({\n x: 0,\n y: 0,\n z: 0,\n interfaceOrientation: 0,\n });\n }\n}\n\n// euler angles are in order ZXY, z = yaw, x = pitch, y = roll\n// https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js#L237\nfunction eulerToQuaternion(pitch: number, roll: number, yaw: number) {\n 'worklet';\n const c1 = Math.cos(pitch / 2);\n const s1 = Math.sin(pitch / 2);\n const c2 = Math.cos(roll / 2);\n const s2 = Math.sin(roll / 2);\n const c3 = Math.cos(yaw / 2);\n const s3 = Math.sin(yaw / 2);\n\n return [\n s1 * c2 * c3 - c1 * s2 * s3,\n c1 * s2 * c3 + s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3,\n ];\n}\n\nfunction adjustRotationToInterfaceOrientation(data: ValueRotation) {\n 'worklet';\n const { interfaceOrientation, pitch, roll, yaw } = data;\n if (interfaceOrientation === 90) {\n data.pitch = roll;\n data.roll = -pitch;\n data.yaw = yaw - Math.PI / 2;\n } else if (interfaceOrientation === 270) {\n data.pitch = -roll;\n data.roll = pitch;\n data.yaw = yaw + Math.PI / 2;\n } else if (interfaceOrientation === 180) {\n data.pitch *= -1;\n data.roll *= -1;\n data.yaw *= -1;\n }\n\n const q = eulerToQuaternion(data.pitch, data.roll, data.yaw);\n data.qx = q[0];\n data.qy = q[1];\n data.qz = q[2];\n data.qw = q[3];\n return data;\n}\n\nfunction adjustVectorToInterfaceOrientation(data: Value3D) {\n 'worklet';\n const { interfaceOrientation, x, y } = data;\n if (interfaceOrientation === 90) {\n data.x = -y;\n data.y = x;\n } else if (interfaceOrientation === 270) {\n data.x = y;\n data.y = -x;\n } else if (interfaceOrientation === 180) {\n data.x *= -1;\n data.y *= -1;\n }\n return data;\n}\n\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor {\n const ref = useRef<AnimatedSensor>({\n sensor: initSensorData(sensorType),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config: {\n interval: 0,\n adjustToInterfaceOrientation: true,\n iosReferenceFrame: IOSReferenceFrame.Auto,\n },\n });\n\n useEffect(() => {\n ref.current.config = {\n interval: 'auto',\n adjustToInterfaceOrientation: true,\n iosReferenceFrame: IOSReferenceFrame.Auto,\n ...userConfig,\n };\n const sensorData = ref.current.sensor!;\n const id = registerSensor(\n sensorType,\n ref.current.config.interval === 'auto' ? -1 : ref.current.config.interval,\n ref.current.config.iosReferenceFrame,\n (data) => {\n 'worklet';\n if (ref.current.config.adjustToInterfaceOrientation) {\n if (sensorType === SensorType.ROTATION) {\n data = adjustRotationToInterfaceOrientation(data as ValueRotation);\n } else {\n data = adjustVectorToInterfaceOrientation(data as Value3D);\n }\n }\n sensorData.value = data;\n }\n );\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current;\n}\n"],"mappings":"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"}
@@ -1,20 +1,19 @@
1
- /* global _frameTimestamp */
2
1
  import { useEffect, useRef } from 'react';
3
- import { startMapper, stopMapper, makeRemote, getTimestamp } from '../core';
2
+ import { startMapper, stopMapper, makeRemote } from '../core';
4
3
  import updateProps, { updatePropsJestWrapper } from '../UpdateProps';
5
4
  import { initialUpdaterRun } from '../animation';
6
5
  import NativeReanimatedModule from '../NativeReanimated';
7
6
  import { useSharedValue } from './useSharedValue';
8
- import { buildWorkletsHash, getStyleWithoutAnimations, isAnimated, parseColors, styleDiff, validateAnimatedStyles } from './utils';
7
+ import { buildWorkletsHash, isAnimated, shallowEqual, validateAnimatedStyles } from './utils';
9
8
  import { makeViewDescriptorsSet, makeViewsRefSet } from '../ViewDescriptorsSet';
10
9
  import { isJest, shouldBeUseWeb } from '../PlatformChecker';
11
10
 
12
- function prepareAnimation(animatedProp, lastAnimation, lastValue) {
11
+ function prepareAnimation(frameTimestamp, animatedProp, lastAnimation, lastValue) {
13
12
  'worklet';
14
13
 
15
14
  if (Array.isArray(animatedProp)) {
16
15
  animatedProp.forEach((prop, index) => {
17
- prepareAnimation(prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index]);
16
+ prepareAnimation(frameTimestamp, prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index]);
18
17
  }); // return animatedProp;
19
18
  }
20
19
 
@@ -46,11 +45,11 @@ function prepareAnimation(animatedProp, lastAnimation, lastValue) {
46
45
  animation.onStart(animation, value, timestamp, lastAnimation);
47
46
  };
48
47
 
49
- animation.callStart(getTimestamp());
48
+ animation.callStart(frameTimestamp);
50
49
  animation.callStart = null;
51
50
  } else if (typeof animatedProp === 'object') {
52
51
  // it is an object
53
- Object.keys(animatedProp).forEach(key => prepareAnimation(animatedProp[key], lastAnimation && lastAnimation[key], lastValue && lastValue[key]));
52
+ Object.keys(animatedProp).forEach(key => prepareAnimation(frameTimestamp, animatedProp[key], lastAnimation && lastAnimation[key], lastValue && lastValue[key]));
54
53
  }
55
54
  }
56
55
 
@@ -113,30 +112,34 @@ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsA
113
112
  const animations = state.animations ?? {};
114
113
  const newValues = updater() ?? {};
115
114
  const oldValues = state.last;
115
+ const nonAnimatedNewValues = {};
116
116
  let hasAnimations = false;
117
+ let frameTimestamp;
118
+ let hasNonAnimatedValues = false;
117
119
 
118
120
  for (const key in newValues) {
119
121
  const value = newValues[key];
120
122
 
121
123
  if (isAnimated(value)) {
122
- prepareAnimation(value, animations[key], oldValues[key]);
124
+ frameTimestamp = global.__frameTimestamp || performance.now();
125
+ prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);
123
126
  animations[key] = value;
124
127
  hasAnimations = true;
125
128
  } else {
129
+ hasNonAnimatedValues = true;
130
+ nonAnimatedNewValues[key] = value;
126
131
  delete animations[key];
127
132
  }
128
133
  }
129
134
 
130
135
  if (hasAnimations) {
131
- const frame = _timestamp => {
136
+ const frame = timestamp => {
132
137
  const {
133
138
  animations,
134
139
  last,
135
140
  isAnimationCancelled
136
141
  } = state;
137
142
 
138
- const timestamp = _timestamp ?? getTimestamp();
139
-
140
143
  if (isAnimationCancelled) {
141
144
  state.isAnimationRunning = false;
142
145
  return;
@@ -172,30 +175,22 @@ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsA
172
175
  if (!state.isAnimationRunning) {
173
176
  state.isAnimationCancelled = false;
174
177
  state.isAnimationRunning = true;
175
-
176
- if (_frameTimestamp) {
177
- frame(_frameTimestamp);
178
- } else {
179
- requestAnimationFrame(frame);
180
- }
178
+ frame(frameTimestamp);
181
179
  }
182
180
 
183
- state.last = Object.assign({}, oldValues, newValues);
184
- const style = getStyleWithoutAnimations(state.last);
185
-
186
- if (style) {
187
- updateProps(viewDescriptors, style, maybeViewRef);
181
+ if (hasNonAnimatedValues) {
182
+ updateProps(viewDescriptors, nonAnimatedNewValues, maybeViewRef);
188
183
  }
189
184
  } else {
190
185
  state.isAnimationCancelled = true;
191
186
  state.animations = [];
192
- const diff = styleDiff(oldValues, newValues);
193
- state.last = Object.assign({}, oldValues, newValues);
194
187
 
195
- if (diff) {
188
+ if (!shallowEqual(oldValues, newValues)) {
196
189
  updateProps(viewDescriptors, newValues, maybeViewRef);
197
190
  }
198
191
  }
192
+
193
+ state.last = newValues;
199
194
  }
200
195
 
201
196
  function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsActive, animatedStyle) {
@@ -207,6 +202,7 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
207
202
  const oldValues = state.last; // extract animated props
208
203
 
209
204
  let hasAnimations = false;
205
+ let frameTimestamp;
210
206
  Object.keys(animations).forEach(key => {
211
207
  const value = newValues[key];
212
208
 
@@ -218,21 +214,20 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
218
214
  const value = newValues[key];
219
215
 
220
216
  if (isAnimated(value)) {
221
- prepareAnimation(value, animations[key], oldValues[key]);
217
+ frameTimestamp = global.__frameTimestamp || performance.now();
218
+ prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);
222
219
  animations[key] = value;
223
220
  hasAnimations = true;
224
221
  }
225
222
  });
226
223
 
227
- function frame(_timestamp) {
224
+ function frame(timestamp) {
228
225
  const {
229
226
  animations,
230
227
  last,
231
228
  isAnimationCancelled
232
229
  } = state;
233
230
 
234
- const timestamp = _timestamp ?? getTimestamp();
235
-
236
231
  if (isAnimationCancelled) {
237
232
  state.isAnimationRunning = false;
238
233
  return;
@@ -268,12 +263,7 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
268
263
  if (!state.isAnimationRunning) {
269
264
  state.isAnimationCancelled = false;
270
265
  state.isAnimationRunning = true;
271
-
272
- if (_frameTimestamp) {
273
- frame(_frameTimestamp);
274
- } else {
275
- requestAnimationFrame(frame);
276
- }
266
+ frame(frameTimestamp);
277
267
  }
278
268
  } else {
279
269
  state.isAnimationCancelled = true;
@@ -281,11 +271,10 @@ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animati
281
271
  } // calculate diff
282
272
 
283
273
 
284
- const diff = styleDiff(oldValues, newValues);
285
- state.last = Object.assign({}, oldValues, newValues);
274
+ state.last = newValues;
286
275
 
287
- if (Object.keys(diff).length !== 0) {
288
- updatePropsJestWrapper(viewDescriptors, diff, maybeViewRef, animatedStyle, adapters);
276
+ if (!shallowEqual(oldValues, newValues)) {
277
+ updatePropsJestWrapper(viewDescriptors, newValues, maybeViewRef, animatedStyle, adapters);
289
278
  }
290
279
  } // check for invalid usage of shared values in returned object
291
280
 
@@ -310,7 +299,23 @@ function checkSharedValueUsage(prop, currentKey) {
310
299
  export function useAnimatedStyle(updater, dependencies, adapters) {
311
300
  const viewsRef = makeViewsRefSet();
312
301
  const initRef = useRef();
313
- const inputs = Object.values(updater._closure ?? {});
302
+ let inputs = Object.values(updater._closure ?? {});
303
+
304
+ if (shouldBeUseWeb()) {
305
+ var _dependencies;
306
+
307
+ if (!inputs.length && (_dependencies = dependencies) !== null && _dependencies !== void 0 && _dependencies.length) {
308
+ // let web work without a Babel/SWC plugin
309
+ inputs = dependencies;
310
+ }
311
+
312
+ if (__DEV__ && !inputs.length && !dependencies && !updater.__workletHash) {
313
+ throw new Error(`useAnimatedStyle was used without a dependency array or Babel plugin. Please explicitly pass a dependency array, or enable the Babel/SWC plugin.
314
+
315
+ For more, see the docs: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/web-support#web-without-a-babel-plugin`);
316
+ }
317
+ }
318
+
314
319
  const adaptersArray = adapters ? Array.isArray(adapters) ? adapters : [adapters] : [];
315
320
  const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;
316
321
  const animationsActive = useSharedValue(true);
@@ -367,16 +372,6 @@ export function useAnimatedStyle(updater, dependencies, adapters) {
367
372
  };
368
373
  }
369
374
 
370
- if (!shouldBeUseWeb()) {
371
- updaterFn = () => {
372
- 'worklet';
373
-
374
- const style = updaterFn();
375
- parseColors(style);
376
- return style;
377
- };
378
- }
379
-
380
375
  if (isJest()) {
381
376
  fun = () => {
382
377
  'worklet';
@@ -399,8 +394,6 @@ export function useAnimatedStyle(updater, dependencies, adapters) {
399
394
  useEffect(() => {
400
395
  animationsActive.value = true;
401
396
  return () => {
402
- // initRef.current = null;
403
- // viewsRef = null;
404
397
  animationsActive.value = false;
405
398
  };
406
399
  }, []);
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","startMapper","stopMapper","makeRemote","getTimestamp","updateProps","updatePropsJestWrapper","initialUpdaterRun","NativeReanimatedModule","useSharedValue","buildWorkletsHash","getStyleWithoutAnimations","isAnimated","parseColors","styleDiff","validateAnimatedStyles","makeViewDescriptorsSet","makeViewsRefSet","isJest","shouldBeUseWeb","prepareAnimation","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","animations","newValues","oldValues","last","hasAnimations","frame","_timestamp","isAnimationCancelled","isAnimationRunning","updates","propName","requestAnimationFrame","_frameTimestamp","assign","style","diff","jestStyleUpdater","animatedStyle","adapters","length","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","initRef","inputs","values","_closure","adaptersArray","adaptersHash","__workletHash","push","initialStyle","initial","remoteState","sharableViewDescriptors","native","fun","updaterFn","adapter","mapperId","process","env","JEST_WORKER_ID"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["/* global _frameTimestamp */\nimport { MutableRefObject, useEffect, useRef } from 'react';\n\nimport { startMapper, stopMapper, makeRemote, getTimestamp } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n getStyleWithoutAnimations,\n isAnimated,\n parseColors,\n styleDiff,\n validateAnimatedStyles,\n} from './utils';\nimport { DependencyList, Descriptor } from './commonTypes';\nimport {\n makeViewDescriptorsSet,\n makeViewsRefSet,\n ViewDescriptorsSet,\n ViewRefSet,\n} from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n AnimatedStyle,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n} from '../commonTypes';\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet<any>;\n animatedStyle?: MutableRefObject<AnimatedStyle>;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(getTimestamp());\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n let hasAnimations = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (_timestamp?: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n const timestamp = _timestamp ?? getTimestamp();\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestAnimationFrame(frame);\n }\n }\n state.last = Object.assign({}, oldValues, newValues);\n const style = getStyleWithoutAnimations(state.last);\n if (style) {\n updateProps(viewDescriptors, style, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n if (diff) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle>,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n prepareAnimation(value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(_timestamp?: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n const timestamp = _timestamp ?? getTimestamp();\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n if (_frameTimestamp) {\n frame(_frameTimestamp);\n } else {\n requestAnimationFrame(frame);\n }\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n const diff = styleDiff(oldValues, newValues);\n state.last = Object.assign({}, oldValues, newValues);\n\n if (Object.keys(diff).length !== 0) {\n updatePropsJestWrapper(\n viewDescriptors,\n diff,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (typeof prop === 'object' && prop.value === undefined) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\nexport function useAnimatedStyle<T extends AnimatedStyle>(\n updater: BasicWorkletFunction<T>,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet<any> = makeViewsRefSet();\n const initRef = useRef<AnimationRef>();\n const inputs = Object.values(updater._closure ?? {});\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue<boolean>(true);\n const animatedStyle: MutableRefObject<AnimatedStyle> = useRef<AnimatedStyle>(\n {}\n );\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote<AnimatedState>({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, viewDescriptors } = initRef.current!;\n const sharableViewDescriptors = viewDescriptors.sharableViewDescriptors;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n dependencies.push(sharableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional<T>;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (!shouldBeUseWeb()) {\n updaterFn = () => {\n 'worklet';\n const style = updaterFn();\n parseColors(style);\n return style;\n };\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n // initRef.current = null;\n // viewsRef = null;\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (process.env.JEST_WORKER_ID) {\n return { viewDescriptors, initial: initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial: initial, viewsRef };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useEffect","useRef","startMapper","stopMapper","makeRemote","updateProps","updatePropsJestWrapper","initialUpdaterRun","NativeReanimatedModule","useSharedValue","buildWorkletsHash","isAnimated","shallowEqual","validateAnimatedStyles","makeViewDescriptorsSet","makeViewsRefSet","isJest","shouldBeUseWeb","prepareAnimation","frameTimestamp","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","animations","newValues","oldValues","last","nonAnimatedNewValues","hasAnimations","hasNonAnimatedValues","global","__frameTimestamp","performance","now","frame","isAnimationCancelled","isAnimationRunning","updates","propName","requestAnimationFrame","jestStyleUpdater","animatedStyle","adapters","length","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","initRef","inputs","values","_closure","__DEV__","__workletHash","adaptersArray","adaptersHash","push","initialStyle","initial","remoteState","sharableViewDescriptors","native","fun","updaterFn","adapter","mapperId","process","env","JEST_WORKER_ID"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["import { MutableRefObject, useEffect, useRef } from 'react';\n\nimport { startMapper, stopMapper, makeRemote } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport NativeReanimatedModule from '../NativeReanimated';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n isAnimated,\n shallowEqual,\n validateAnimatedStyles,\n} from './utils';\nimport { DependencyList, Descriptor } from './commonTypes';\nimport {\n makeViewDescriptorsSet,\n makeViewsRefSet,\n ViewDescriptorsSet,\n ViewRefSet,\n} from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport {\n AnimationObject,\n Timestamp,\n AdapterWorkletFunction,\n AnimatedStyle,\n BasicWorkletFunction,\n BasicWorkletFunctionOptional,\n NestedObjectValues,\n SharedValue,\n StyleProps,\n} from '../commonTypes';\nexport interface AnimatedStyleResult {\n viewDescriptors: ViewDescriptorsSet;\n initial: AnimatedStyle;\n viewsRef: ViewRefSet<any>;\n animatedStyle?: MutableRefObject<AnimatedStyle>;\n}\n\ninterface AnimatedState {\n last: AnimatedStyle;\n animations: AnimatedStyle;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimationRef {\n initial: {\n value: AnimatedStyle;\n updater: () => AnimatedStyle;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n frameTimestamp: number,\n animatedProp: AnimatedStyle,\n lastAnimation: AnimatedStyle,\n lastValue: AnimatedStyle\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n frameTimestamp,\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(frameTimestamp);\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n frameTimestamp,\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n const nonAnimatedNewValues: StyleProps = {};\n\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n let hasNonAnimatedValues = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || performance.now();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n hasNonAnimatedValues = true;\n nonAnimatedNewValues[key] = value;\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n\n if (hasNonAnimatedValues) {\n updateProps(viewDescriptors, nonAnimatedNewValues, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n if (!shallowEqual(oldValues, newValues)) {\n updateProps(viewDescriptors, newValues, maybeViewRef);\n }\n }\n state.last = newValues;\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: BasicWorkletFunction<AnimatedStyle>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle>,\n adapters: AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || performance.now();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n state.last = newValues;\n\n if (!shallowEqual(oldValues, newValues)) {\n updatePropsJestWrapper(\n viewDescriptors,\n newValues,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (typeof prop === 'object' && prop.value === undefined) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\nexport function useAnimatedStyle<T extends AnimatedStyle>(\n updater: BasicWorkletFunction<T>,\n dependencies?: DependencyList,\n adapters?: AdapterWorkletFunction | AdapterWorkletFunction[]\n): AnimatedStyleResult {\n const viewsRef: ViewRefSet<any> = makeViewsRefSet();\n const initRef = useRef<AnimationRef>();\n let inputs = Object.values(updater._closure ?? {});\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n if (__DEV__ && !inputs.length && !dependencies && !updater.__workletHash) {\n throw new Error(\n `useAnimatedStyle was used without a dependency array or Babel plugin. Please explicitly pass a dependency array, or enable the Babel/SWC plugin.\n\nFor more, see the docs: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/web-support#web-without-a-babel-plugin`\n );\n }\n }\n const adaptersArray: AdapterWorkletFunction[] = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const animationsActive = useSharedValue<boolean>(true);\n const animatedStyle: MutableRefObject<AnimatedStyle> = useRef<AnimatedStyle>(\n {}\n );\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!initRef.current) {\n const initialStyle: AnimatedStyle = initialUpdaterRun(updater);\n validateAnimatedStyles(initialStyle);\n initRef.current = {\n initial: {\n value: initialStyle,\n updater: updater,\n },\n remoteState: makeRemote<AnimatedState>({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { initial, remoteState, viewDescriptors } = initRef.current!;\n const sharableViewDescriptors = viewDescriptors.sharableViewDescriptors;\n const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;\n\n dependencies.push(sharableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater as BasicWorkletFunctionOptional<T>;\n if (adapters) {\n updaterFn = () => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n };\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n sharableViewDescriptors,\n updater,\n remoteState,\n maybeViewRef,\n animationsActive,\n animatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n sharableViewDescriptors,\n updaterFn,\n remoteState,\n maybeViewRef,\n animationsActive\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n animationsActive.value = true;\n return () => {\n animationsActive.value = false;\n };\n }, []);\n\n checkSharedValueUsage(initial.value);\n\n if (process.env.JEST_WORKER_ID) {\n return { viewDescriptors, initial: initial, viewsRef, animatedStyle };\n } else {\n return { viewDescriptors, initial: initial, viewsRef };\n }\n}\n"],"mappings":"AAAA,SAA2BA,SAA3B,EAAsCC,MAAtC,QAAoD,OAApD;AAEA,SAASC,WAAT,EAAsBC,UAAtB,EAAkCC,UAAlC,QAAoD,SAApD;AACA,OAAOC,WAAP,IAAsBC,sBAAtB,QAAoD,gBAApD;AACA,SAASC,iBAAT,QAAkC,cAAlC;AACA,OAAOC,sBAAP,MAAmC,qBAAnC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SACEC,iBADF,EAEEC,UAFF,EAGEC,YAHF,EAIEC,sBAJF,QAKO,SALP;AAOA,SACEC,sBADF,EAEEC,eAFF,QAKO,uBALP;AAMA,SAASC,MAAT,EAAiBC,cAAjB,QAAuC,oBAAvC;;AAmCA,SAASC,gBAAT,CACEC,cADF,EAEEC,YAFF,EAGEC,aAHF,EAIEC,SAJF,EAKQ;EACN;;EACA,IAAIC,KAAK,CAACC,OAAN,CAAcJ,YAAd,CAAJ,EAAiC;IAC/BA,YAAY,CAACK,OAAb,CAAqB,CAACC,IAAD,EAAOC,KAAP,KAAiB;MACpCT,gBAAgB,CACdC,cADc,EAEdO,IAFc,EAGdL,aAAa,IAAIA,aAAa,CAACM,KAAD,CAHhB,EAIdL,SAAS,IAAIA,SAAS,CAACK,KAAD,CAJR,CAAhB;IAMD,CAPD,EAD+B,CAS/B;EACD;;EACD,IAAI,OAAOP,YAAP,KAAwB,QAAxB,IAAoCA,YAAY,CAACQ,OAArD,EAA8D;IAC5D,MAAMC,SAAS,GAAGT,YAAlB;IAEA,IAAIU,KAAK,GAAGD,SAAS,CAACE,OAAtB;;IACA,IAAIT,SAAS,KAAKU,SAAlB,EAA6B;MAC3B,IAAI,OAAOV,SAAP,KAAqB,QAAzB,EAAmC;QACjC,IAAIA,SAAS,CAACQ,KAAV,KAAoBE,SAAxB,EAAmC;UACjC;UACAF,KAAK,GAAGR,SAAS,CAACQ,KAAlB;QACD,CAHD,MAGO,IAAIR,SAAS,CAACM,OAAV,KAAsBI,SAA1B,EAAqC;UAC1C,IAAI,CAAAX,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,CAAEU,OAAf,MAA2BC,SAA/B,EAA0C;YACxC;YACAF,KAAK,GAAGT,aAAa,CAACU,OAAtB;UACD,CAHD,MAGO,IAAI,CAAAT,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAES,OAAX,MAAuBC,SAA3B,EAAsC;YAC3C;YACAF,KAAK,GAAGR,SAAS,CAACS,OAAlB;UACD;QACF;MACF,CAbD,MAaO;QACL;QACAD,KAAK,GAAGR,SAAR;MACD;IACF;;IAEDO,SAAS,CAACI,SAAV,GAAuBC,SAAD,IAA0B;MAC9CL,SAAS,CAACM,OAAV,CAAkBN,SAAlB,EAA6BC,KAA7B,EAAoCI,SAApC,EAA+Cb,aAA/C;IACD,CAFD;;IAGAQ,SAAS,CAACI,SAAV,CAAoBd,cAApB;IACAU,SAAS,CAACI,SAAV,GAAsB,IAAtB;EACD,CA7BD,MA6BO,IAAI,OAAOb,YAAP,KAAwB,QAA5B,EAAsC;IAC3C;IACAgB,MAAM,CAACC,IAAP,CAAYjB,YAAZ,EAA0BK,OAA1B,CAAmCa,GAAD,IAChCpB,gBAAgB,CACdC,cADc,EAEdC,YAAY,CAACkB,GAAD,CAFE,EAGdjB,aAAa,IAAIA,aAAa,CAACiB,GAAD,CAHhB,EAIdhB,SAAS,IAAIA,SAAS,CAACgB,GAAD,CAJR,CADlB;EAQD;AACF;;AAED,SAASC,aAAT,CACEV,SADF,EAEEK,SAFF,EAGEI,GAHF,EAIEE,MAJF,EAKEC,gBALF,EAMW;EACT;;EACA,IAAI,CAACA,gBAAgB,CAACX,KAAtB,EAA6B;IAC3B,OAAO,IAAP;EACD;;EACD,IAAIP,KAAK,CAACC,OAAN,CAAcK,SAAd,CAAJ,EAA8B;IAC5BW,MAAM,CAACF,GAAD,CAAN,GAAc,EAAd;IACA,IAAII,WAAW,GAAG,IAAlB;IACAb,SAAS,CAACJ,OAAV,CAAkB,CAACkB,KAAD,EAAQhB,KAAR,KAAkB;MAClC,IACE,CAACY,aAAa,CAACI,KAAD,EAAQT,SAAR,EAAmBP,KAAnB,EAA0Ba,MAAM,CAACF,GAAD,CAAhC,EAAuCG,gBAAvC,CADhB,EAEE;QACAC,WAAW,GAAG,KAAd;MACD;IACF,CAND;IAOA,OAAOA,WAAP;EACD,CAXD,MAWO,IAAI,OAAOb,SAAP,KAAqB,QAArB,IAAiCA,SAAS,CAACD,OAA/C,EAAwD;IAC7D,IAAIgB,QAAQ,GAAG,IAAf;;IACA,IAAI,CAACf,SAAS,CAACe,QAAf,EAAyB;MACvB,IAAIf,SAAS,CAACI,SAAd,EAAyB;QACvBJ,SAAS,CAACI,SAAV,CAAoBC,SAApB;QACAL,SAAS,CAACI,SAAV,GAAsB,IAAtB;MACD;;MACDW,QAAQ,GAAGf,SAAS,CAACD,OAAV,CAAkBC,SAAlB,EAA6BK,SAA7B,CAAX;MACAL,SAAS,CAACK,SAAV,GAAsBA,SAAtB;;MACA,IAAIU,QAAJ,EAAc;QACZf,SAAS,CAACe,QAAV,GAAqB,IAArB;QACAf,SAAS,CAACgB,QAAV,IAAsBhB,SAAS,CAACgB,QAAV,CAAmB;QAAK;QAAxB,CAAtB;MACD;IACF;;IACDL,MAAM,CAACF,GAAD,CAAN,GAAcT,SAAS,CAACE,OAAxB;IACA,OAAOa,QAAP;EACD,CAhBM,MAgBA,IAAI,OAAOf,SAAP,KAAqB,QAAzB,EAAmC;IACxCW,MAAM,CAACF,GAAD,CAAN,GAAc,EAAd;IACA,IAAII,WAAW,GAAG,IAAlB;IACAN,MAAM,CAACC,IAAP,CAAYR,SAAZ,EAAuBJ,OAAvB,CAAgCqB,CAAD,IAAO;MACpC,IACE,CAACP,aAAa,CACZV,SAAS,CAACiB,CAAD,CADG,EAEZZ,SAFY,EAGZY,CAHY,EAIZN,MAAM,CAACF,GAAD,CAJM,EAKZG,gBALY,CADhB,EAQE;QACAC,WAAW,GAAG,KAAd;MACD;IACF,CAZD;IAaA,OAAOA,WAAP;EACD,CAjBM,MAiBA;IACLF,MAAM,CAACF,GAAD,CAAN,GAAcT,SAAd;IACA,OAAO,IAAP;EACD;AACF;;AAED,SAASkB,YAAT,CACEC,eADF,EAEEC,OAFF,EAGEC,KAHF,EAIEC,YAJF,EAKEV,gBALF,EAMQ;EACN;;EACA,MAAMW,UAAU,GAAGF,KAAK,CAACE,UAAN,IAAoB,EAAvC;EACA,MAAMC,SAAS,GAAGJ,OAAO,MAAM,EAA/B;EACA,MAAMK,SAAS,GAAGJ,KAAK,CAACK,IAAxB;EACA,MAAMC,oBAAgC,GAAG,EAAzC;EAEA,IAAIC,aAAa,GAAG,KAApB;EACA,IAAItC,cAAJ;EACA,IAAIuC,oBAAoB,GAAG,KAA3B;;EACA,KAAK,MAAMpB,GAAX,IAAkBe,SAAlB,EAA6B;IAC3B,MAAMvB,KAAK,GAAGuB,SAAS,CAACf,GAAD,CAAvB;;IACA,IAAI3B,UAAU,CAACmB,KAAD,CAAd,EAAuB;MACrBX,cAAc,GAAGwC,MAAM,CAACC,gBAAP,IAA2BC,WAAW,CAACC,GAAZ,EAA5C;MACA5C,gBAAgB,CAACC,cAAD,EAAiBW,KAAjB,EAAwBsB,UAAU,CAACd,GAAD,CAAlC,EAAyCgB,SAAS,CAAChB,GAAD,CAAlD,CAAhB;MACAc,UAAU,CAACd,GAAD,CAAV,GAAkBR,KAAlB;MACA2B,aAAa,GAAG,IAAhB;IACD,CALD,MAKO;MACLC,oBAAoB,GAAG,IAAvB;MACAF,oBAAoB,CAAClB,GAAD,CAApB,GAA4BR,KAA5B;MACA,OAAOsB,UAAU,CAACd,GAAD,CAAjB;IACD;EACF;;EAED,IAAImB,aAAJ,EAAmB;IACjB,MAAMM,KAAK,GAAI7B,SAAD,IAA0B;MACtC,MAAM;QAAEkB,UAAF;QAAcG,IAAd;QAAoBS;MAApB,IAA6Cd,KAAnD;;MACA,IAAIc,oBAAJ,EAA0B;QACxBd,KAAK,CAACe,kBAAN,GAA2B,KAA3B;QACA;MACD;;MAED,MAAMC,OAAsB,GAAG,EAA/B;MACA,IAAIxB,WAAW,GAAG,IAAlB;;MACA,KAAK,MAAMyB,QAAX,IAAuBf,UAAvB,EAAmC;QACjC,MAAMR,QAAQ,GAAGL,aAAa,CAC5Ba,UAAU,CAACe,QAAD,CADkB,EAE5BjC,SAF4B,EAG5BiC,QAH4B,EAI5BD,OAJ4B,EAK5BzB,gBAL4B,CAA9B;;QAOA,IAAIG,QAAJ,EAAc;UACZW,IAAI,CAACY,QAAD,CAAJ,GAAiBD,OAAO,CAACC,QAAD,CAAxB;UACA,OAAOf,UAAU,CAACe,QAAD,CAAjB;QACD,CAHD,MAGO;UACLzB,WAAW,GAAG,KAAd;QACD;MACF;;MAED,IAAIwB,OAAJ,EAAa;QACX7D,WAAW,CAAC2C,eAAD,EAAkBkB,OAAlB,EAA2Bf,YAA3B,CAAX;MACD;;MAED,IAAI,CAACT,WAAL,EAAkB;QAChB0B,qBAAqB,CAACL,KAAD,CAArB;MACD,CAFD,MAEO;QACLb,KAAK,CAACe,kBAAN,GAA2B,KAA3B;MACD;IACF,CAlCD;;IAoCAf,KAAK,CAACE,UAAN,GAAmBA,UAAnB;;IACA,IAAI,CAACF,KAAK,CAACe,kBAAX,EAA+B;MAC7Bf,KAAK,CAACc,oBAAN,GAA6B,KAA7B;MACAd,KAAK,CAACe,kBAAN,GAA2B,IAA3B;MACAF,KAAK,CAAC5C,cAAD,CAAL;IACD;;IAED,IAAIuC,oBAAJ,EAA0B;MACxBrD,WAAW,CAAC2C,eAAD,EAAkBQ,oBAAlB,EAAwCL,YAAxC,CAAX;IACD;EACF,CA/CD,MA+CO;IACLD,KAAK,CAACc,oBAAN,GAA6B,IAA7B;IACAd,KAAK,CAACE,UAAN,GAAmB,EAAnB;;IAEA,IAAI,CAACxC,YAAY,CAAC0C,SAAD,EAAYD,SAAZ,CAAjB,EAAyC;MACvChD,WAAW,CAAC2C,eAAD,EAAkBK,SAAlB,EAA6BF,YAA7B,CAAX;IACD;EACF;;EACDD,KAAK,CAACK,IAAN,GAAaF,SAAb;AACD;;AAED,SAASgB,gBAAT,CACErB,eADF,EAEEC,OAFF,EAGEC,KAHF,EAIEC,YAJF,EAKEV,gBALF,EAME6B,aANF,EAQQ;EACN;;EADM,IADNC,QACM,uEAD+B,EAC/B;EAEN,MAAMnB,UAAyB,GAAGF,KAAK,CAACE,UAAN,IAAoB,EAAtD;EACA,MAAMC,SAAS,GAAGJ,OAAO,MAAM,EAA/B;EACA,MAAMK,SAAS,GAAGJ,KAAK,CAACK,IAAxB,CAJM,CAMN;;EACA,IAAIE,aAAa,GAAG,KAApB;EACA,IAAItC,cAAJ;EACAiB,MAAM,CAACC,IAAP,CAAYe,UAAZ,EAAwB3B,OAAxB,CAAiCa,GAAD,IAAS;IACvC,MAAMR,KAAK,GAAGuB,SAAS,CAACf,GAAD,CAAvB;;IACA,IAAI,CAAC3B,UAAU,CAACmB,KAAD,CAAf,EAAwB;MACtB,OAAOsB,UAAU,CAACd,GAAD,CAAjB;IACD;EACF,CALD;EAMAF,MAAM,CAACC,IAAP,CAAYgB,SAAZ,EAAuB5B,OAAvB,CAAgCa,GAAD,IAAS;IACtC,MAAMR,KAAK,GAAGuB,SAAS,CAACf,GAAD,CAAvB;;IACA,IAAI3B,UAAU,CAACmB,KAAD,CAAd,EAAuB;MACrBX,cAAc,GAAGwC,MAAM,CAACC,gBAAP,IAA2BC,WAAW,CAACC,GAAZ,EAA5C;MACA5C,gBAAgB,CAACC,cAAD,EAAiBW,KAAjB,EAAwBsB,UAAU,CAACd,GAAD,CAAlC,EAAyCgB,SAAS,CAAChB,GAAD,CAAlD,CAAhB;MACAc,UAAU,CAACd,GAAD,CAAV,GAAkBR,KAAlB;MACA2B,aAAa,GAAG,IAAhB;IACD;EACF,CARD;;EAUA,SAASM,KAAT,CAAe7B,SAAf,EAAqC;IACnC,MAAM;MAAEkB,UAAF;MAAcG,IAAd;MAAoBS;IAApB,IAA6Cd,KAAnD;;IACA,IAAIc,oBAAJ,EAA0B;MACxBd,KAAK,CAACe,kBAAN,GAA2B,KAA3B;MACA;IACD;;IAED,MAAMC,OAAsB,GAAG,EAA/B;IACA,IAAIxB,WAAW,GAAG,IAAlB;IACAN,MAAM,CAACC,IAAP,CAAYe,UAAZ,EAAwB3B,OAAxB,CAAiC0C,QAAD,IAAc;MAC5C,MAAMvB,QAAQ,GAAGL,aAAa,CAC5Ba,UAAU,CAACe,QAAD,CADkB,EAE5BjC,SAF4B,EAG5BiC,QAH4B,EAI5BD,OAJ4B,EAK5BzB,gBAL4B,CAA9B;;MAOA,IAAIG,QAAJ,EAAc;QACZW,IAAI,CAACY,QAAD,CAAJ,GAAiBD,OAAO,CAACC,QAAD,CAAxB;QACA,OAAOf,UAAU,CAACe,QAAD,CAAjB;MACD,CAHD,MAGO;QACLzB,WAAW,GAAG,KAAd;MACD;IACF,CAdD;;IAgBA,IAAIN,MAAM,CAACC,IAAP,CAAY6B,OAAZ,EAAqBM,MAAzB,EAAiC;MAC/BlE,sBAAsB,CACpB0C,eADoB,EAEpBkB,OAFoB,EAGpBf,YAHoB,EAIpBmB,aAJoB,EAKpBC,QALoB,CAAtB;IAOD;;IAED,IAAI,CAAC7B,WAAL,EAAkB;MAChB0B,qBAAqB,CAACL,KAAD,CAArB;IACD,CAFD,MAEO;MACLb,KAAK,CAACe,kBAAN,GAA2B,KAA3B;IACD;EACF;;EAED,IAAIR,aAAJ,EAAmB;IACjBP,KAAK,CAACE,UAAN,GAAmBA,UAAnB;;IACA,IAAI,CAACF,KAAK,CAACe,kBAAX,EAA+B;MAC7Bf,KAAK,CAACc,oBAAN,GAA6B,KAA7B;MACAd,KAAK,CAACe,kBAAN,GAA2B,IAA3B;MACAF,KAAK,CAAC5C,cAAD,CAAL;IACD;EACF,CAPD,MAOO;IACL+B,KAAK,CAACc,oBAAN,GAA6B,IAA7B;IACAd,KAAK,CAACE,UAAN,GAAmB,EAAnB;EACD,CA7EK,CA+EN;;;EACAF,KAAK,CAACK,IAAN,GAAaF,SAAb;;EAEA,IAAI,CAACzC,YAAY,CAAC0C,SAAD,EAAYD,SAAZ,CAAjB,EAAyC;IACvC/C,sBAAsB,CACpB0C,eADoB,EAEpBK,SAFoB,EAGpBF,YAHoB,EAIpBmB,aAJoB,EAKpBC,QALoB,CAAtB;EAOD;AACF,C,CAED;;;AACA,SAASE,qBAAT,CACE/C,IADF,EAEEgD,UAFF,EAGQ;EACN,IAAInD,KAAK,CAACC,OAAN,CAAcE,IAAd,CAAJ,EAAyB;IACvB;IACA,KAAK,MAAMiD,OAAX,IAAsBjD,IAAtB,EAA4B;MAC1B+C,qBAAqB,CAACE,OAAD,EAAUD,UAAV,CAArB;IACD;EACF,CALD,MAKO,IAAI,OAAOhD,IAAP,KAAgB,QAAhB,IAA4BA,IAAI,CAACI,KAAL,KAAeE,SAA/C,EAA0D;IAC/D;IACA,KAAK,MAAMM,GAAX,IAAkBF,MAAM,CAACC,IAAP,CAAYX,IAAZ,CAAlB,EAAqC;MACnC+C,qBAAqB,CAAC/C,IAAI,CAACY,GAAD,CAAL,EAAYA,GAAZ,CAArB;IACD;EACF,CALM,MAKA,IACLoC,UAAU,KAAK1C,SAAf,IACA,OAAON,IAAP,KAAgB,QADhB,IAEAA,IAAI,CAACI,KAAL,KAAeE,SAHV,EAIL;IACA;IACA,MAAM,IAAI4C,KAAJ,CACH,6BAA4BF,UAAW,yCADpC,CAAN;EAGD;AACF;;AAED,OAAO,SAASG,gBAAT,CACL5B,OADK,EAEL6B,YAFK,EAGLP,QAHK,EAIgB;EACrB,MAAMQ,QAAyB,GAAGhE,eAAe,EAAjD;EACA,MAAMiE,OAAO,GAAG/E,MAAM,EAAtB;EACA,IAAIgF,MAAM,GAAG7C,MAAM,CAAC8C,MAAP,CAAcjC,OAAO,CAACkC,QAAR,IAAoB,EAAlC,CAAb;;EACA,IAAIlE,cAAc,EAAlB,EAAsB;IAAA;;IACpB,IAAI,CAACgE,MAAM,CAACT,MAAR,qBAAkBM,YAAlB,0CAAkB,cAAcN,MAApC,EAA4C;MAC1C;MACAS,MAAM,GAAGH,YAAT;IACD;;IACD,IAAIM,OAAO,IAAI,CAACH,MAAM,CAACT,MAAnB,IAA6B,CAACM,YAA9B,IAA8C,CAAC7B,OAAO,CAACoC,aAA3D,EAA0E;MACxE,MAAM,IAAIT,KAAJ,CACH;AACT;AACA,oIAHY,CAAN;IAKD;EACF;;EACD,MAAMU,aAAuC,GAAGf,QAAQ,GACpDhD,KAAK,CAACC,OAAN,CAAc+C,QAAd,IACEA,QADF,GAEE,CAACA,QAAD,CAHkD,GAIpD,EAJJ;EAKA,MAAMgB,YAAY,GAAGhB,QAAQ,GAAG7D,iBAAiB,CAAC4E,aAAD,CAApB,GAAsC,IAAnE;EACA,MAAM7C,gBAAgB,GAAGhC,cAAc,CAAU,IAAV,CAAvC;EACA,MAAM6D,aAA8C,GAAGrE,MAAM,CAC3D,EAD2D,CAA7D,CAxBqB,CA4BrB;;EACA,IAAI,CAAC6E,YAAL,EAAmB;IACjBA,YAAY,GAAG,CAAC,GAAGG,MAAJ,EAAYhC,OAAO,CAACoC,aAApB,CAAf;EACD,CAFD,MAEO;IACLP,YAAY,CAACU,IAAb,CAAkBvC,OAAO,CAACoC,aAA1B;EACD;;EACDE,YAAY,IAAIT,YAAY,CAACU,IAAb,CAAkBD,YAAlB,CAAhB;;EAEA,IAAI,CAACP,OAAO,CAACjD,OAAb,EAAsB;IACpB,MAAM0D,YAA2B,GAAGlF,iBAAiB,CAAC0C,OAAD,CAArD;IACApC,sBAAsB,CAAC4E,YAAD,CAAtB;IACAT,OAAO,CAACjD,OAAR,GAAkB;MAChB2D,OAAO,EAAE;QACP5D,KAAK,EAAE2D,YADA;QAEPxC,OAAO,EAAEA;MAFF,CADO;MAKhB0C,WAAW,EAAEvF,UAAU,CAAgB;QACrCmD,IAAI,EAAEkC,YAD+B;QAErCrC,UAAU,EAAE,EAFyB;QAGrCY,oBAAoB,EAAE,KAHe;QAIrCC,kBAAkB,EAAE;MAJiB,CAAhB,CALP;MAWhBjB,eAAe,EAAElC,sBAAsB;IAXvB,CAAlB;EAaD,CApDoB,CAsDrB;;;EACA,MAAM;IAAE4E,OAAF;IAAWC,WAAX;IAAwB3C;EAAxB,IAA4CgC,OAAO,CAACjD,OAA1D;EACA,MAAM6D,uBAAuB,GAAG5C,eAAe,CAAC4C,uBAAhD;EACA,MAAMzC,YAAY,GAAG3C,sBAAsB,CAACqF,MAAvB,GAAgC7D,SAAhC,GAA4C+C,QAAjE;EAEAD,YAAY,CAACU,IAAb,CAAkBI,uBAAlB;EAEA5F,SAAS,CAAC,MAAM;IACd,IAAI8F,GAAJ;IACA,IAAIC,SAAS,GAAG9C,OAAhB;;IACA,IAAIsB,QAAJ,EAAc;MACZwB,SAAS,GAAG,MAAM;QAChB;;QACA,MAAM1C,SAAS,GAAGJ,OAAO,EAAzB;QACAqC,aAAa,CAAC7D,OAAd,CAAuBuE,OAAD,IAAa;UACjCA,OAAO,CAAC3C,SAAD,CAAP;QACD,CAFD;QAGA,OAAOA,SAAP;MACD,CAPD;IAQD;;IAED,IAAIrC,MAAM,EAAV,EAAc;MACZ8E,GAAG,GAAG,MAAM;QACV;;QACAzB,gBAAgB,CACduB,uBADc,EAEd3C,OAFc,EAGd0C,WAHc,EAIdxC,YAJc,EAKdV,gBALc,EAMd6B,aANc,EAOdgB,aAPc,CAAhB;MASD,CAXD;IAYD,CAbD,MAaO;MACLQ,GAAG,GAAG,MAAM;QACV;;QACA/C,YAAY,CACV6C,uBADU,EAEVG,SAFU,EAGVJ,WAHU,EAIVxC,YAJU,EAKVV,gBALU,CAAZ;MAOD,CATD;IAUD;;IACD,MAAMwD,QAAQ,GAAG/F,WAAW,CAAC4F,GAAD,EAAMb,MAAN,CAA5B;IACA,OAAO,MAAM;MACX9E,UAAU,CAAC8F,QAAD,CAAV;IACD,CAFD;EAGD,CA3CQ,EA2CNnB,YA3CM,CAAT;EA6CA9E,SAAS,CAAC,MAAM;IACdyC,gBAAgB,CAACX,KAAjB,GAAyB,IAAzB;IACA,OAAO,MAAM;MACXW,gBAAgB,CAACX,KAAjB,GAAyB,KAAzB;IACD,CAFD;EAGD,CALQ,EAKN,EALM,CAAT;EAOA2C,qBAAqB,CAACiB,OAAO,CAAC5D,KAAT,CAArB;;EAEA,IAAIoE,OAAO,CAACC,GAAR,CAAYC,cAAhB,EAAgC;IAC9B,OAAO;MAAEpD,eAAF;MAAmB0C,OAAO,EAAEA,OAA5B;MAAqCX,QAArC;MAA+CT;IAA/C,CAAP;EACD,CAFD,MAEO;IACL,OAAO;MAAEtB,eAAF;MAAmB0C,OAAO,EAAEA,OAA5B;MAAqCX;IAArC,CAAP;EACD;AACF"}
@@ -1,9 +1,20 @@
1
1
  import { useEffect, useRef } from 'react';
2
2
  import { initialUpdaterRun } from '../animation';
3
3
  import { makeMutable, startMapper, stopMapper } from '../core';
4
+ import { shouldBeUseWeb } from '../PlatformChecker';
4
5
  export function useDerivedValue(processor, dependencies) {
5
6
  const initRef = useRef(null);
6
- const inputs = Object.values(processor._closure ?? {}); // build dependencies
7
+ let inputs = Object.values(processor._closure ?? {});
8
+
9
+ if (shouldBeUseWeb()) {
10
+ var _dependencies;
11
+
12
+ if (!inputs.length && (_dependencies = dependencies) !== null && _dependencies !== void 0 && _dependencies.length) {
13
+ // let web work without a Babel/SWC plugin
14
+ inputs = dependencies;
15
+ }
16
+ } // build dependencies
17
+
7
18
 
8
19
  if (dependencies === undefined) {
9
20
  dependencies = [...inputs, processor.__workletHash];
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","initialUpdaterRun","makeMutable","startMapper","stopMapper","useDerivedValue","processor","dependencies","initRef","inputs","Object","values","_closure","undefined","__workletHash","push","current","sharedValue","fun","value","mapperId"],"sources":["useDerivedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { initialUpdaterRun } from '../animation';\nimport { BasicWorkletFunction, SharedValue } from '../commonTypes';\nimport { makeMutable, startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\n\nexport type DerivedValue<T> = Readonly<SharedValue<T>>;\n\nexport function useDerivedValue<T>(\n processor: BasicWorkletFunction<T>,\n dependencies: DependencyList\n): DerivedValue<T> {\n const initRef = useRef<SharedValue<T> | null>(null);\n const inputs = Object.values(processor._closure ?? {});\n\n // build dependencies\n if (dependencies === undefined) {\n dependencies = [...inputs, processor.__workletHash];\n } else {\n dependencies.push(processor.__workletHash);\n }\n\n if (initRef.current === null) {\n initRef.current = makeMutable(initialUpdaterRun(processor));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sharedValue: SharedValue<T> = initRef.current!;\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n sharedValue.value = processor();\n };\n const mapperId = startMapper(fun, inputs, [sharedValue]);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n return sharedValue;\n}\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AACA,SAASC,iBAAT,QAAkC,cAAlC;AAEA,SAASC,WAAT,EAAsBC,WAAtB,EAAmCC,UAAnC,QAAqD,SAArD;AAKA,OAAO,SAASC,eAAT,CACLC,SADK,EAELC,YAFK,EAGY;EACjB,MAAMC,OAAO,GAAGR,MAAM,CAAwB,IAAxB,CAAtB;EACA,MAAMS,MAAM,GAAGC,MAAM,CAACC,MAAP,CAAcL,SAAS,CAACM,QAAV,IAAsB,EAApC,CAAf,CAFiB,CAIjB;;EACA,IAAIL,YAAY,KAAKM,SAArB,EAAgC;IAC9BN,YAAY,GAAG,CAAC,GAAGE,MAAJ,EAAYH,SAAS,CAACQ,aAAtB,CAAf;EACD,CAFD,MAEO;IACLP,YAAY,CAACQ,IAAb,CAAkBT,SAAS,CAACQ,aAA5B;EACD;;EAED,IAAIN,OAAO,CAACQ,OAAR,KAAoB,IAAxB,EAA8B;IAC5BR,OAAO,CAACQ,OAAR,GAAkBd,WAAW,CAACD,iBAAiB,CAACK,SAAD,CAAlB,CAA7B;EACD,CAbgB,CAejB;;;EACA,MAAMW,WAA2B,GAAGT,OAAO,CAACQ,OAA5C;EAEAjB,SAAS,CAAC,MAAM;IACd,MAAMmB,GAAG,GAAG,MAAM;MAChB;;MACAD,WAAW,CAACE,KAAZ,GAAoBb,SAAS,EAA7B;IACD,CAHD;;IAIA,MAAMc,QAAQ,GAAGjB,WAAW,CAACe,GAAD,EAAMT,MAAN,EAAc,CAACQ,WAAD,CAAd,CAA5B;IACA,OAAO,MAAM;MACXb,UAAU,CAACgB,QAAD,CAAV;IACD,CAFD;EAGD,CATQ,EASNb,YATM,CAAT;EAWAR,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACXS,OAAO,CAACQ,OAAR,GAAkB,IAAlB;IACD,CAFD;EAGD,CAJQ,EAIN,EAJM,CAAT;EAMA,OAAOC,WAAP;AACD"}
1
+ {"version":3,"names":["useEffect","useRef","initialUpdaterRun","makeMutable","startMapper","stopMapper","shouldBeUseWeb","useDerivedValue","processor","dependencies","initRef","inputs","Object","values","_closure","length","undefined","__workletHash","push","current","sharedValue","fun","value","mapperId"],"sources":["useDerivedValue.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { initialUpdaterRun } from '../animation';\nimport { BasicWorkletFunction, SharedValue } from '../commonTypes';\nimport { makeMutable, startMapper, stopMapper } from '../core';\nimport { DependencyList } from './commonTypes';\nimport { shouldBeUseWeb } from '../PlatformChecker';\n\nexport type DerivedValue<T> = Readonly<SharedValue<T>>;\n\nexport function useDerivedValue<T>(\n processor: BasicWorkletFunction<T>,\n dependencies: DependencyList\n): DerivedValue<T> {\n const initRef = useRef<SharedValue<T> | null>(null);\n let inputs = Object.values(processor._closure ?? {});\n if (shouldBeUseWeb()) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel/SWC plugin\n inputs = dependencies;\n }\n }\n\n // build dependencies\n if (dependencies === undefined) {\n dependencies = [...inputs, processor.__workletHash];\n } else {\n dependencies.push(processor.__workletHash);\n }\n\n if (initRef.current === null) {\n initRef.current = makeMutable(initialUpdaterRun(processor));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sharedValue: SharedValue<T> = initRef.current!;\n\n useEffect(() => {\n const fun = () => {\n 'worklet';\n sharedValue.value = processor();\n };\n const mapperId = startMapper(fun, inputs, [sharedValue]);\n return () => {\n stopMapper(mapperId);\n };\n }, dependencies);\n\n useEffect(() => {\n return () => {\n initRef.current = null;\n };\n }, []);\n\n return sharedValue;\n}\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AACA,SAASC,iBAAT,QAAkC,cAAlC;AAEA,SAASC,WAAT,EAAsBC,WAAtB,EAAmCC,UAAnC,QAAqD,SAArD;AAEA,SAASC,cAAT,QAA+B,oBAA/B;AAIA,OAAO,SAASC,eAAT,CACLC,SADK,EAELC,YAFK,EAGY;EACjB,MAAMC,OAAO,GAAGT,MAAM,CAAwB,IAAxB,CAAtB;EACA,IAAIU,MAAM,GAAGC,MAAM,CAACC,MAAP,CAAcL,SAAS,CAACM,QAAV,IAAsB,EAApC,CAAb;;EACA,IAAIR,cAAc,EAAlB,EAAsB;IAAA;;IACpB,IAAI,CAACK,MAAM,CAACI,MAAR,qBAAkBN,YAAlB,0CAAkB,cAAcM,MAApC,EAA4C;MAC1C;MACAJ,MAAM,GAAGF,YAAT;IACD;EACF,CARgB,CAUjB;;;EACA,IAAIA,YAAY,KAAKO,SAArB,EAAgC;IAC9BP,YAAY,GAAG,CAAC,GAAGE,MAAJ,EAAYH,SAAS,CAACS,aAAtB,CAAf;EACD,CAFD,MAEO;IACLR,YAAY,CAACS,IAAb,CAAkBV,SAAS,CAACS,aAA5B;EACD;;EAED,IAAIP,OAAO,CAACS,OAAR,KAAoB,IAAxB,EAA8B;IAC5BT,OAAO,CAACS,OAAR,GAAkBhB,WAAW,CAACD,iBAAiB,CAACM,SAAD,CAAlB,CAA7B;EACD,CAnBgB,CAqBjB;;;EACA,MAAMY,WAA2B,GAAGV,OAAO,CAACS,OAA5C;EAEAnB,SAAS,CAAC,MAAM;IACd,MAAMqB,GAAG,GAAG,MAAM;MAChB;;MACAD,WAAW,CAACE,KAAZ,GAAoBd,SAAS,EAA7B;IACD,CAHD;;IAIA,MAAMe,QAAQ,GAAGnB,WAAW,CAACiB,GAAD,EAAMV,MAAN,EAAc,CAACS,WAAD,CAAd,CAA5B;IACA,OAAO,MAAM;MACXf,UAAU,CAACkB,QAAD,CAAV;IACD,CAFD;EAGD,CATQ,EASNd,YATM,CAAT;EAWAT,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACXU,OAAO,CAACS,OAAR,GAAkB,IAAlB;IACD,CAFD;EAGD,CAJQ,EAIN,EAJM,CAAT;EAMA,OAAOC,WAAP;AACD"}