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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
  5. package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
  6. package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
  7. package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
  8. package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
  9. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
  10. package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
  11. package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
  12. package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
  13. package/Common/cpp/Tools/Mapper.cpp +41 -29
  14. package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
  15. package/Common/cpp/Tools/Scheduler.cpp +14 -6
  16. package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
  17. package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
  18. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
  19. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
  20. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
  21. package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
  22. package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
  23. package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
  24. package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
  25. package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
  26. package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
  27. package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
  28. package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
  29. package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
  30. package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
  31. package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
  32. package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
  33. package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
  34. package/Common/cpp/headers/Tools/Mapper.h +24 -18
  35. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
  36. package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
  37. package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
  38. package/Common/cpp/headers/Tools/Scheduler.h +28 -33
  39. package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
  40. package/Common/cpp/hidden_headers/Logger.h +14 -14
  41. package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
  42. package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
  43. package/README.md +1 -1
  44. package/RNReanimated.podspec +4 -4
  45. package/android/build.gradle +80 -3
  46. package/android/react-native-reanimated-63-hermes.aar +0 -0
  47. package/android/react-native-reanimated-63-jsc.aar +0 -0
  48. package/android/react-native-reanimated-64-hermes.aar +0 -0
  49. package/android/react-native-reanimated-64-jsc.aar +0 -0
  50. package/android/react-native-reanimated-65-hermes.aar +0 -0
  51. package/android/react-native-reanimated-65-jsc.aar +0 -0
  52. package/android/react-native-reanimated-66-hermes.aar +0 -0
  53. package/android/react-native-reanimated-66-jsc.aar +0 -0
  54. package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
  55. package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
  56. package/ios/LayoutReanimation/REASnapshot.h +13 -0
  57. package/ios/LayoutReanimation/REASnapshot.m +29 -0
  58. package/ios/LayoutReanimation/REAUIManager.h +16 -0
  59. package/ios/LayoutReanimation/REAUIManager.mm +348 -0
  60. package/ios/Nodes/REAAlwaysNode.m +14 -15
  61. package/ios/Nodes/REABezierNode.m +8 -7
  62. package/ios/Nodes/REABlockNode.m +1 -1
  63. package/ios/Nodes/REACallFuncNode.h +0 -1
  64. package/ios/Nodes/REACallFuncNode.m +10 -8
  65. package/ios/Nodes/REAClockNodes.m +22 -20
  66. package/ios/Nodes/REAConcatNode.h +0 -1
  67. package/ios/Nodes/REAConcatNode.m +2 -2
  68. package/ios/Nodes/REACondNode.m +7 -5
  69. package/ios/Nodes/READebugNode.m +5 -4
  70. package/ios/Nodes/REAEventNode.m +1 -1
  71. package/ios/Nodes/REAFunctionNode.h +0 -1
  72. package/ios/Nodes/REAFunctionNode.m +2 -2
  73. package/ios/Nodes/REAJSCallNode.m +4 -5
  74. package/ios/Nodes/REANode.h +3 -4
  75. package/ios/Nodes/REANode.m +9 -11
  76. package/ios/Nodes/REAOperatorNode.m +68 -67
  77. package/ios/Nodes/REAParamNode.h +1 -3
  78. package/ios/Nodes/REAParamNode.m +15 -17
  79. package/ios/Nodes/REAPropsNode.h +1 -3
  80. package/ios/Nodes/REAPropsNode.m +19 -22
  81. package/ios/Nodes/REASetNode.h +0 -1
  82. package/ios/Nodes/REASetNode.m +7 -5
  83. package/ios/Nodes/REAStyleNode.h +0 -1
  84. package/ios/Nodes/REAStyleNode.m +2 -4
  85. package/ios/Nodes/REATransformNode.h +0 -1
  86. package/ios/Nodes/REATransformNode.m +3 -5
  87. package/ios/Nodes/REAValueNode.m +5 -7
  88. package/ios/REAEventDispatcher.m +3 -3
  89. package/ios/REAModule.h +0 -2
  90. package/ios/REAModule.m +29 -40
  91. package/ios/REANodesManager.h +11 -19
  92. package/ios/REANodesManager.m +105 -130
  93. package/ios/REAUtils.h +5 -3
  94. package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
  95. package/ios/Transitioning/REAAllTransitions.h +2 -2
  96. package/ios/Transitioning/REAAllTransitions.m +14 -25
  97. package/ios/Transitioning/REATransition.h +8 -7
  98. package/ios/Transitioning/REATransition.m +19 -16
  99. package/ios/Transitioning/REATransitionAnimation.h +1 -1
  100. package/ios/Transitioning/REATransitionAnimation.m +2 -3
  101. package/ios/Transitioning/REATransitionManager.m +3 -3
  102. package/ios/native/NativeMethods.h +15 -5
  103. package/ios/native/NativeProxy.h +4 -3
  104. package/ios/native/NativeProxy.mm +19 -5
  105. package/ios/native/REAIOSErrorHandler.h +13 -10
  106. package/ios/native/REAIOSLogger.h +8 -8
  107. package/ios/native/REAIOSScheduler.h +5 -5
  108. package/ios/native/REAIOSScheduler.mm +7 -5
  109. package/ios/native/REAInitializer.h +37 -0
  110. package/ios/native/REAInitializer.mm +63 -0
  111. package/ios/native/UIResponder+Reanimated.mm +9 -48
  112. package/lib/ConfigHelper.js +1 -0
  113. package/lib/ReanimatedModule.native.js +10 -2
  114. package/lib/createAnimatedComponent.js +64 -30
  115. package/lib/reanimated1/core/AnimatedAlways.js +1 -1
  116. package/lib/reanimated1/core/AnimatedBezier.js +1 -1
  117. package/lib/reanimated1/core/AnimatedBlock.js +1 -1
  118. package/lib/reanimated1/core/AnimatedCall.js +1 -1
  119. package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
  120. package/lib/reanimated1/core/AnimatedConcat.js +1 -1
  121. package/lib/reanimated1/core/AnimatedCond.js +1 -1
  122. package/lib/reanimated1/core/AnimatedDebug.js +1 -1
  123. package/lib/reanimated1/core/AnimatedEvent.js +1 -1
  124. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  125. package/lib/reanimated1/core/AnimatedOperator.js +1 -1
  126. package/lib/reanimated1/core/AnimatedParam.js +1 -1
  127. package/lib/reanimated1/core/AnimatedProps.js +2 -2
  128. package/lib/reanimated1/core/AnimatedSet.js +1 -1
  129. package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
  130. package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
  131. package/lib/reanimated1/core/AnimatedStyle.js +1 -1
  132. package/lib/reanimated1/core/AnimatedTransform.js +1 -1
  133. package/lib/reanimated1/core/Core.test.js +30 -0
  134. package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
  135. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  136. package/lib/reanimated1/derived/interpolate.js +1 -1
  137. package/lib/reanimated2/Colors.js +16 -12
  138. package/lib/reanimated2/NativeMethods.js +3 -14
  139. package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
  140. package/lib/reanimated2/NativeReanimated/index.js +15 -0
  141. package/lib/reanimated2/PlatformChecker.js +16 -0
  142. package/lib/reanimated2/PropAdapters.js +14 -4
  143. package/lib/reanimated2/UpdateProps.js +14 -11
  144. package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
  145. package/lib/reanimated2/WorkletEventHandler.js +15 -13
  146. package/lib/reanimated2/animation/commonTypes.js +1 -0
  147. package/lib/reanimated2/animation/decay.js +71 -0
  148. package/lib/reanimated2/animation/delay.js +64 -0
  149. package/lib/reanimated2/animation/index.js +8 -0
  150. package/lib/reanimated2/animation/repeat.js +69 -0
  151. package/lib/reanimated2/animation/sequence.js +72 -0
  152. package/lib/reanimated2/animation/spring.js +101 -0
  153. package/lib/reanimated2/animation/styleAnimation.js +166 -0
  154. package/lib/reanimated2/animation/timing.js +64 -0
  155. package/lib/reanimated2/animation/util.js +157 -0
  156. package/lib/reanimated2/commonTypes.js +1 -0
  157. package/lib/reanimated2/core.js +35 -39
  158. package/lib/reanimated2/globals.d.ts +47 -1
  159. package/lib/reanimated2/hook/Hooks.js +9 -0
  160. package/lib/reanimated2/hook/commonTypes.js +1 -0
  161. package/lib/reanimated2/hook/index.js +8 -0
  162. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
  163. package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
  164. package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
  165. package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
  166. package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
  167. package/lib/reanimated2/hook/useDerivedValue.js +36 -0
  168. package/lib/reanimated2/hook/useSharedValue.js +17 -0
  169. package/lib/reanimated2/hook/utils.js +175 -0
  170. package/lib/reanimated2/index.js +3 -2
  171. package/lib/reanimated2/interpolation.js +95 -86
  172. package/lib/reanimated2/jestUtils.js +0 -12
  173. package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
  174. package/lib/reanimated2/js-reanimated/index.js +57 -1
  175. package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
  176. package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
  177. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
  178. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
  179. package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
  180. package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
  181. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
  182. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
  183. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
  184. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
  185. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
  186. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
  187. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
  188. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
  189. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
  190. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
  191. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
  192. package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
  193. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
  194. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
  195. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
  196. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
  197. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
  198. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
  199. package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
  200. package/lib/reanimated2/layoutReanimation/index.js +3 -2
  201. package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
  202. package/lib/reanimated2/utils.js +9 -0
  203. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  204. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  205. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  206. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
  207. package/package.json +21 -10
  208. package/plugin.js +244 -85
  209. package/react-native-reanimated.d.ts +531 -453
  210. package/src/ConfigHelper.js +1 -0
  211. package/src/ReanimatedModule.native.js +10 -2
  212. package/src/createAnimatedComponent.js +64 -30
  213. package/src/reanimated1/core/AnimatedAlways.js +1 -1
  214. package/src/reanimated1/core/AnimatedBezier.js +1 -1
  215. package/src/reanimated1/core/AnimatedBlock.js +1 -1
  216. package/src/reanimated1/core/AnimatedCall.js +1 -1
  217. package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
  218. package/src/reanimated1/core/AnimatedConcat.js +1 -1
  219. package/src/reanimated1/core/AnimatedCond.js +1 -1
  220. package/src/reanimated1/core/AnimatedDebug.js +1 -1
  221. package/src/reanimated1/core/AnimatedEvent.js +1 -1
  222. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  223. package/src/reanimated1/core/AnimatedOperator.js +1 -1
  224. package/src/reanimated1/core/AnimatedParam.js +1 -1
  225. package/src/reanimated1/core/AnimatedProps.js +2 -2
  226. package/src/reanimated1/core/AnimatedSet.js +1 -1
  227. package/src/reanimated1/core/AnimatedStartClock.js +1 -1
  228. package/src/reanimated1/core/AnimatedStopClock.js +1 -1
  229. package/src/reanimated1/core/AnimatedStyle.js +1 -1
  230. package/src/reanimated1/core/AnimatedTransform.js +1 -1
  231. package/src/reanimated1/core/Core.test.js +30 -0
  232. package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
  233. package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  234. package/src/reanimated1/derived/interpolate.js +1 -1
  235. package/src/reanimated2/Colors.ts +30 -27
  236. package/src/reanimated2/Easing.ts +3 -1
  237. package/src/reanimated2/NativeMethods.ts +26 -16
  238. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
  239. package/src/reanimated2/NativeReanimated/index.ts +18 -0
  240. package/src/reanimated2/PlatformChecker.ts +21 -0
  241. package/src/reanimated2/PropAdapters.ts +52 -34
  242. package/src/reanimated2/UpdateProps.ts +40 -20
  243. package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
  244. package/src/reanimated2/WorkletEventHandler.ts +41 -23
  245. package/src/reanimated2/animation/commonTypes.ts +48 -0
  246. package/src/reanimated2/animation/decay.ts +141 -0
  247. package/src/reanimated2/animation/delay.ts +103 -0
  248. package/src/reanimated2/animation/index.ts +16 -0
  249. package/src/reanimated2/animation/repeat.ts +128 -0
  250. package/src/reanimated2/animation/sequence.ts +110 -0
  251. package/src/reanimated2/animation/spring.ts +165 -0
  252. package/src/reanimated2/animation/styleAnimation.ts +253 -0
  253. package/src/reanimated2/animation/timing.ts +109 -0
  254. package/src/reanimated2/animation/util.ts +242 -0
  255. package/src/reanimated2/commonTypes.ts +81 -0
  256. package/src/reanimated2/core.ts +128 -82
  257. package/src/reanimated2/globals.d.ts +47 -1
  258. package/src/reanimated2/hook/Hooks.ts +16 -0
  259. package/src/reanimated2/hook/commonTypes.ts +12 -0
  260. package/src/reanimated2/hook/index.ts +25 -0
  261. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
  262. package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
  263. package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
  264. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
  265. package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
  266. package/src/reanimated2/hook/useDerivedValue.ts +48 -0
  267. package/src/reanimated2/hook/useSharedValue.ts +22 -0
  268. package/src/reanimated2/hook/utils.ts +259 -0
  269. package/src/reanimated2/index.ts +3 -2
  270. package/src/reanimated2/interpolation.ts +170 -101
  271. package/src/reanimated2/jestUtils.ts +0 -12
  272. package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
  273. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  274. package/src/reanimated2/js-reanimated/index.ts +71 -0
  275. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
  276. package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
  277. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
  278. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
  279. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
  280. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
  281. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
  282. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
  283. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
  284. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
  285. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
  286. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
  287. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
  288. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
  289. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
  290. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
  291. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
  292. package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
  293. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
  294. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
  295. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
  296. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
  297. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
  298. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
  299. package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
  300. package/src/reanimated2/layoutReanimation/index.ts +3 -2
  301. package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
  302. package/src/reanimated2/utils.ts +21 -0
  303. package/android/react-native-reanimated-62-hermes.aar +0 -0
  304. package/android/react-native-reanimated-62-jsc.aar +0 -0
  305. package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
  306. package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
  307. package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
  308. package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
  309. package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
  310. package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
  311. package/ios/LayoutReanimation/REASnapshooter.h +0 -19
  312. package/ios/LayoutReanimation/REASnapshooter.m +0 -64
  313. package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
  314. package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
  315. package/lib/reanimated2/Hooks.js +0 -732
  316. package/lib/reanimated2/NativeReanimated.js +0 -4
  317. package/lib/reanimated2/animations.js +0 -713
  318. package/lib/reanimated2/js-reanimated/index.web.js +0 -20
  319. package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
  320. package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
  321. package/src/reanimated2/Hooks.ts +0 -918
  322. package/src/reanimated2/NativeReanimated.native.ts +0 -61
  323. package/src/reanimated2/NativeReanimated.ts +0 -5
  324. package/src/reanimated2/animations.ts +0 -868
  325. package/src/reanimated2/js-reanimated/index.js +0 -0
  326. package/src/reanimated2/js-reanimated/index.web.ts +0 -29
  327. package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
  328. package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
@@ -103,6 +103,7 @@ let NATIVE_THREAD_PROPS_WHITELIST = {
103
103
  color: true,
104
104
  tintColor: true,
105
105
  shadowColor: true,
106
+ placeholderTextColor: true,
106
107
  };
107
108
 
108
109
  function configureProps() {
@@ -1,5 +1,13 @@
1
1
  import { NativeModules } from 'react-native';
2
+ import ReanimatedModuleCompat from './ReanimatedModuleCompat';
3
+ import { nativeShouldBeMock } from './reanimated2/PlatformChecker';
2
4
 
3
- const { ReanimatedModule } = NativeModules;
5
+ let exportedModule;
6
+ if (nativeShouldBeMock()) {
7
+ exportedModule = ReanimatedModuleCompat;
8
+ } else {
9
+ const { ReanimatedModule } = NativeModules;
10
+ exportedModule = ReanimatedModule;
11
+ }
4
12
 
5
- export default ReanimatedModule;
13
+ export default exportedModule;
@@ -8,8 +8,9 @@ import AnimatedValue from './reanimated1/core/AnimatedValue';
8
8
  import { createOrReusePropsNode } from './reanimated1/core/AnimatedProps';
9
9
  import WorkletEventHandler from './reanimated2/WorkletEventHandler';
10
10
  import setAndForwardRef from './setAndForwardRef';
11
+ import './reanimated2/layoutReanimation/LayoutAnimationRepository';
11
12
 
12
- import invariant from 'fbjs/lib/invariant';
13
+ import invariant from 'invariant';
13
14
  import { adaptViewConfig } from './ConfigHelper';
14
15
  import { RNRenderer } from './reanimated2/platform-specific/RNRenderer';
15
16
  import { makeMutable, runOnUI } from './reanimated2/core';
@@ -17,7 +18,9 @@ import {
17
18
  DefaultEntering,
18
19
  DefaultExiting,
19
20
  DefaultLayout,
20
- } from './reanimated2/layoutReanimation/defaultAnimationsBuilder';
21
+ } from './reanimated2/layoutReanimation/defaultAnimations/Default';
22
+ import { isJest, isChromeDebugger } from './reanimated2/PlatformChecker';
23
+ import { initialUpdaterRun } from './reanimated2/animation';
21
24
 
22
25
  const NODE_MAPPING = new Map();
23
26
 
@@ -46,7 +49,7 @@ function hasAnimatedNodes(value) {
46
49
 
47
50
  function flattenArray(array) {
48
51
  if (!Array.isArray(array)) {
49
- return array;
52
+ return [array];
50
53
  }
51
54
  const resultArr = [];
52
55
 
@@ -73,11 +76,14 @@ export default function createAnimatedComponent(Component, options = {}) {
73
76
 
74
77
  class AnimatedComponent extends React.Component {
75
78
  _invokeAnimatedPropsCallbackOnMount = false;
79
+ _styles = null;
80
+ _viewTag = -1;
81
+ _isFirstRender = true;
76
82
 
77
83
  constructor(props) {
78
84
  super(props);
79
85
  this._attachProps(this.props);
80
- if (process.env.JEST_WORKER_ID) {
86
+ if (isJest()) {
81
87
  this.animatedStyle = { value: {} };
82
88
  }
83
89
  this.sv = makeMutable({});
@@ -87,6 +93,7 @@ export default function createAnimatedComponent(Component, options = {}) {
87
93
  this._detachPropUpdater();
88
94
  this._propsAnimated && this._propsAnimated.__detach();
89
95
  this._detachNativeEvents();
96
+ this._detachStyles();
90
97
  this.sv = null;
91
98
  }
92
99
 
@@ -113,7 +120,6 @@ export default function createAnimatedComponent(Component, options = {}) {
113
120
  _attachNativeEvents() {
114
121
  const node = this._getEventViewRef();
115
122
  const viewTag = findNodeHandle(options.setNativeProps ? this : node);
116
-
117
123
  for (const key in this.props) {
118
124
  const prop = this.props[key];
119
125
  if (prop instanceof AnimatedEvent) {
@@ -143,6 +149,25 @@ export default function createAnimatedComponent(Component, options = {}) {
143
149
  }
144
150
  }
145
151
 
152
+ _detachStyles() {
153
+ if (Platform.OS === 'web') {
154
+ for (const style of this._styles) {
155
+ if (style?.viewsRef) {
156
+ style.viewsRef.remove(this);
157
+ }
158
+ }
159
+ } else if (this._viewTag !== -1) {
160
+ for (const style of this._styles) {
161
+ if (style?.viewDescriptors) {
162
+ style.viewDescriptors.remove(this._viewTag);
163
+ }
164
+ }
165
+ if (this.props.animatedProps?.viewDescriptors) {
166
+ this.props.animatedProps.viewDescriptors.remove(this._viewTag);
167
+ }
168
+ }
169
+ }
170
+
146
171
  _reattachNativeEvents(prevProps) {
147
172
  const node = this._getEventViewRef();
148
173
  const attached = new Set();
@@ -257,10 +282,8 @@ export default function createAnimatedComponent(Component, options = {}) {
257
282
  }
258
283
 
259
284
  _attachAnimatedStyles() {
260
- let styles = Array.isArray(this.props.style)
261
- ? this.props.style
262
- : [this.props.style];
263
- styles = flattenArray(styles);
285
+ const styles = flattenArray(this.props.style);
286
+ this._styles = styles;
264
287
  let viewTag, viewName;
265
288
  if (Platform.OS === 'web') {
266
289
  viewTag = findNodeHandle(this);
@@ -289,11 +312,12 @@ export default function createAnimatedComponent(Component, options = {}) {
289
312
  adaptViewConfig(hostInstance.viewConfig);
290
313
  }
291
314
  }
315
+ this._viewTag = viewTag;
292
316
 
293
317
  styles.forEach((style) => {
294
- if (style?.viewDescriptor) {
295
- style.viewDescriptor.value = { tag: viewTag, name: viewName };
296
- if (process.env.JEST_WORKER_ID) {
318
+ if (style?.viewDescriptors) {
319
+ style.viewDescriptors.add({ tag: viewTag, name: viewName });
320
+ if (isJest()) {
297
321
  /**
298
322
  * We need to connect Jest's TestObject instance whose contains just props object
299
323
  * with the updateProps() function where we update the properties of the component.
@@ -302,29 +326,29 @@ export default function createAnimatedComponent(Component, options = {}) {
302
326
  */
303
327
  this.animatedStyle.value = {
304
328
  ...this.animatedStyle.value,
305
- ...style.initial,
329
+ ...style.initial.value,
306
330
  };
307
331
  style.animatedStyle.current = this.animatedStyle;
308
332
  }
309
333
  }
310
334
  });
311
335
  // attach animatedProps property
312
- if (this.props.animatedProps?.viewDescriptor) {
313
- this.props.animatedProps.viewDescriptor.value = {
336
+ if (this.props.animatedProps?.viewDescriptors) {
337
+ this.props.animatedProps.viewDescriptors.add({
314
338
  tag: viewTag,
315
339
  name: viewName,
316
- };
340
+ });
317
341
  }
318
342
  }
319
343
 
320
344
  _hasReanimated2Props(flattenStyles) {
321
- if (this.props.animatedProps?.viewDescriptor) {
345
+ if (this.props.animatedProps?.viewDescriptors) {
322
346
  return true;
323
347
  }
324
348
  if (this.props.style) {
325
349
  for (const style of flattenStyles) {
326
350
  // eslint-disable-next-line no-prototype-builtins
327
- if (style?.hasOwnProperty('viewDescriptor')) {
351
+ if (style?.hasOwnProperty('viewDescriptors')) {
328
352
  return true;
329
353
  }
330
354
  }
@@ -345,6 +369,7 @@ export default function createAnimatedComponent(Component, options = {}) {
345
369
  this._reattachNativeEvents(prevProps);
346
370
 
347
371
  this._propsAnimated && this._propsAnimated.setNativeView(this._component);
372
+ this._attachAnimatedStyles();
348
373
  }
349
374
 
350
375
  _setComponentRef = setAndForwardRef({
@@ -428,14 +453,19 @@ export default function createAnimatedComponent(Component, options = {}) {
428
453
  for (const key in inputProps) {
429
454
  const value = inputProps[key];
430
455
  if (key === 'style') {
431
- const styles = Array.isArray(value) ? value : [value];
456
+ const styles = flattenArray(value);
432
457
  const processedStyle = styles.map((style) => {
433
- if (style && style.viewDescriptor) {
458
+ if (style && style.viewDescriptors) {
434
459
  // this is how we recognize styles returned by useAnimatedStyle
435
- if (style.viewRef.current === null) {
436
- style.viewRef.current = this;
460
+ style.viewsRef.add(this);
461
+ if (this._isFirstRender) {
462
+ return {
463
+ ...style.initial.value,
464
+ ...initialUpdaterRun(style.initial.updater),
465
+ };
466
+ } else {
467
+ return style.initial.value;
437
468
  }
438
- return style.initial;
439
469
  } else {
440
470
  return style;
441
471
  }
@@ -444,11 +474,9 @@ export default function createAnimatedComponent(Component, options = {}) {
444
474
  StyleSheet.flatten(processedStyle)
445
475
  );
446
476
  } else if (key === 'animatedProps') {
447
- Object.keys(value.initial).forEach((key) => {
448
- props[key] = value.initial[key];
449
- if (value.viewRef.current === null) {
450
- value.viewRef.current = this;
451
- }
477
+ Object.keys(value.initial.value).forEach((key) => {
478
+ props[key] = value.initial.value[key];
479
+ value.viewsRef.add(this);
452
480
  });
453
481
  } else if (value instanceof AnimatedEvent) {
454
482
  // we cannot filter out event listeners completely as some components
@@ -470,7 +498,9 @@ export default function createAnimatedComponent(Component, options = {}) {
470
498
  props[key] = dummyListener;
471
499
  }
472
500
  } else if (!(value instanceof AnimatedNode)) {
473
- props[key] = value;
501
+ if (key !== 'onGestureHandlerStateChange' || !isChromeDebugger()) {
502
+ props[key] = value;
503
+ }
474
504
  } else if (value instanceof AnimatedValue) {
475
505
  // if any prop in animated component is set directly to the `Value` we set those props to the first value of `Value` node in order
476
506
  // to avoid default values for a short moment when `Value` is being asynchrounously sent via bridge and initialized in the native side.
@@ -482,10 +512,14 @@ export default function createAnimatedComponent(Component, options = {}) {
482
512
 
483
513
  render() {
484
514
  const props = this._filterNonAnimatedProps(this.props);
485
- if (process.env.JEST_WORKER_ID) {
515
+ if (isJest()) {
486
516
  props.animatedStyle = this.animatedStyle;
487
517
  }
488
518
 
519
+ if (this._isFirstRender) {
520
+ this._isFirstRender = false;
521
+ }
522
+
489
523
  const platformProps = Platform.select({
490
524
  web: {},
491
525
  default: { collapsable: false },
@@ -1,5 +1,5 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
- import invariant from 'fbjs/lib/invariant';
2
+ import invariant from 'invariant';
3
3
  import { val } from '../val';
4
4
 
5
5
  class AnimatedAlways extends AnimatedNode {
@@ -1,6 +1,6 @@
1
1
  import { val } from '../val';
2
2
  import AnimatedNode from './AnimatedNode';
3
- import invariant from 'fbjs/lib/invariant';
3
+ import invariant from 'invariant';
4
4
 
5
5
  // These values are established by empiricism with tests (tradeoff: performance VS precision)
6
6
  var NEWTON_ITERATIONS = 4;
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import { val } from '../val';
3
3
  import AnimatedNode from './AnimatedNode';
4
4
  import InternalAnimatedValue from './InternalAnimatedValue';
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import ReanimatedEventEmitter from '../../ReanimatedEventEmitter';
3
3
  import { val } from '../val';
4
4
  import AnimatedNode from './AnimatedNode';
@@ -1,7 +1,7 @@
1
1
  import AnimatedNode, { getCallID, setCallID } from './AnimatedNode';
2
2
  import { adapt } from './AnimatedBlock';
3
3
  import { val } from '../val';
4
- import invariant from 'fbjs/lib/invariant';
4
+ import invariant from 'invariant';
5
5
 
6
6
  class AnimatedCallFunc extends AnimatedNode {
7
7
  _previousCallID;
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import { adapt } from '../core/AnimatedBlock';
3
3
  import AnimatedNode from './AnimatedNode';
4
4
  import { val } from '../val';
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import { adapt } from '../core/AnimatedBlock';
3
3
  import { val } from '../val';
4
4
  import AnimatedNode from './AnimatedNode';
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import { NativeModules } from 'react-native';
3
3
  import { val } from '../val';
4
4
  import { adapt, createAnimatedBlock as block } from './AnimatedBlock';
@@ -5,7 +5,7 @@ import AnimatedNode from './AnimatedNode';
5
5
  import InternalAnimatedValue from './AnimatedValue';
6
6
  import { createAnimatedAlways } from './AnimatedAlways';
7
7
 
8
- import invariant from 'fbjs/lib/invariant';
8
+ import invariant from 'invariant';
9
9
  import createEventObjectProxyPolyfill from './createEventObjectProxyPolyfill';
10
10
 
11
11
  function sanitizeArgMapping(argMapping) {
@@ -2,7 +2,7 @@ import AnimatedNode from './AnimatedNode';
2
2
  import { createAnimatedCallFunc } from './AnimatedCallFunc';
3
3
  import { createAnimatedParam } from './AnimatedParam';
4
4
  import { val } from '../val';
5
- import invariant from 'fbjs/lib/invariant';
5
+ import invariant from 'invariant';
6
6
 
7
7
  class AnimatedFunction extends AnimatedNode {
8
8
  _what;
@@ -1,7 +1,7 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
2
  import { val } from '../val';
3
3
 
4
- import invariant from 'fbjs/lib/invariant';
4
+ import invariant from 'invariant';
5
5
  import { adapt } from '../core/AnimatedBlock';
6
6
 
7
7
  function reduce(fn) {
@@ -1,4 +1,4 @@
1
- import invariant from 'fbjs/lib/invariant';
1
+ import invariant from 'invariant';
2
2
  import AnimatedNode, { getCallID, setCallID } from './AnimatedNode';
3
3
  import AnimatedClock from './AnimatedClock';
4
4
  import { val } from '../val';
@@ -4,8 +4,8 @@ import AnimatedNode from './AnimatedNode';
4
4
  import AnimatedEvent from './AnimatedEvent';
5
5
  import { createOrReuseStyleNode } from './AnimatedStyle';
6
6
 
7
- import invariant from 'fbjs/lib/invariant';
8
- import deepEqual from 'fbjs/lib/areEqual';
7
+ import invariant from 'invariant';
8
+ import deepEqual from 'lodash.isequal';
9
9
  import { val } from '../val';
10
10
 
11
11
  function sanitizeProps(inputProps) {
@@ -1,5 +1,5 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
- import invariant from 'fbjs/lib/invariant';
2
+ import invariant from 'invariant';
3
3
  import { val } from '../val';
4
4
  import { adapt } from '../core/AnimatedBlock';
5
5
 
@@ -1,7 +1,7 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
2
  import AnimatedClock from './AnimatedClock';
3
3
  import { AnimatedParam } from './AnimatedParam';
4
- import invariant from 'fbjs/lib/invariant';
4
+ import invariant from 'invariant';
5
5
 
6
6
  class AnimatedStartClock extends AnimatedNode {
7
7
  _clockNode;
@@ -1,7 +1,7 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
2
  import AnimatedClock from './AnimatedClock';
3
3
  import { AnimatedParam } from './AnimatedParam';
4
- import invariant from 'fbjs/lib/invariant';
4
+ import invariant from 'invariant';
5
5
 
6
6
  class AnimatedStopClock extends AnimatedNode {
7
7
  _clockNode;
@@ -3,7 +3,7 @@ import { StyleSheet } from 'react-native';
3
3
  import AnimatedNode from './AnimatedNode';
4
4
  import { createOrReuseTransformNode } from './AnimatedTransform';
5
5
 
6
- import deepEqual from 'fbjs/lib/areEqual';
6
+ import deepEqual from 'lodash.isequal';
7
7
 
8
8
  function sanitizeStyle(inputStyle) {
9
9
  let style;
@@ -1,6 +1,6 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
2
 
3
- import deepEqual from 'fbjs/lib/areEqual';
3
+ import deepEqual from 'lodash.isequal';
4
4
 
5
5
  function sanitizeTransform(inputTransform) {
6
6
  const outputTransform = [];
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import Animated from '../../Animated';
3
+
4
+ import renderer from 'react-test-renderer';
5
+
6
+ jest.mock('../../ReanimatedEventEmitter');
7
+ jest.mock('../../ReanimatedModule');
8
+ jest.mock('../../reanimated2/NativeReanimated');
9
+
10
+ describe('Core Animated components', () => {
11
+ xit('fails if something other then a node or function that returns a node is passed to Animated.Code exec prop', () => {
12
+ console.error = jest.fn();
13
+
14
+ expect(() =>
15
+ renderer.create(<Animated.Code exec="not a node" />)
16
+ ).toThrowError(
17
+ "<Animated.Code /> expects the 'exec' prop or children to be an animated node or a function returning an animated node."
18
+ );
19
+ });
20
+
21
+ xit('fails if something other then a node or function that returns a node is passed to Animated.Code children', () => {
22
+ console.error = jest.fn();
23
+
24
+ expect(() =>
25
+ renderer.create(<Animated.Code>not a node</Animated.Code>)
26
+ ).toThrowError(
27
+ "<Animated.Code /> expects the 'exec' prop or children to be an animated node or a function returning an animated node."
28
+ );
29
+ });
30
+ });
@@ -1,7 +1,7 @@
1
1
  import AnimatedNode from './AnimatedNode';
2
2
  import { val } from '../val';
3
3
  import ReanimatedModule from '../../ReanimatedModule';
4
- import invariant from 'fbjs/lib/invariant';
4
+ import invariant from 'invariant';
5
5
 
6
6
  function sanitizeValue(value) {
7
7
  return value === null || value === undefined || typeof value === 'string'
@@ -2,7 +2,7 @@ import AnimatedNode from '../AnimatedNode';
2
2
  import AnimatedEvent from '../AnimatedEvent';
3
3
  import AnimatedStyle, { createOrReuseStyleNode } from '../AnimatedStyle';
4
4
 
5
- import deepEqual from 'fbjs/lib/areEqual';
5
+ import deepEqual from 'lodash.isequal';
6
6
 
7
7
  // This file has been mocked as react-native's `findNodeHandle` is returning undefined value;
8
8
  // and I became easier to mock whole this file instead of mocking RN
@@ -8,7 +8,7 @@ import {
8
8
  lessOrEq,
9
9
  eq,
10
10
  } from '../operators';
11
- import invariant from 'fbjs/lib/invariant';
11
+ import invariant from 'invariant';
12
12
 
13
13
  import AnimatedNode from '../core/AnimatedNode';
14
14
  import { createAnimatedCond as cond } from '../core/AnimatedCond';
@@ -37,18 +37,18 @@ function call(...args: unknown[]): string {
37
37
  // matchers use RegExp objects which needs to be created separately on JS and on
38
38
  // the UI thread. We keep separate cache of Regexes for UI and JS using the below
39
39
  // objects, then pick the right cache in getMatchers() method.
40
- const jsCachedMatchers = {};
41
- const uiCachedMatchers = !isConfigured() ? null : makeRemote({});
40
+ const jsCachedMatchers: Matchers = {};
41
+ const uiCachedMatchers: Matchers = !isConfigured() ? {} : makeRemote({});
42
42
  type Matchers = {
43
- rgb: RegExp;
44
- rgba: RegExp;
45
- hsl: RegExp;
46
- hsla: RegExp;
47
- hex3: RegExp;
48
- hex4: RegExp;
49
- hex5: RegExp;
50
- hex6: RegExp;
51
- hex8: RegExp;
43
+ rgb?: RegExp;
44
+ rgba?: RegExp;
45
+ hsl?: RegExp;
46
+ hsla?: RegExp;
47
+ hex3?: RegExp;
48
+ hex4?: RegExp;
49
+ hex5?: RegExp;
50
+ hex6?: RegExp;
51
+ hex8?: RegExp;
52
52
  };
53
53
  function getMatchers(): Matchers {
54
54
  'worklet';
@@ -329,10 +329,10 @@ function normalizeColor(color: unknown): number | null {
329
329
 
330
330
  const matchers = getMatchers();
331
331
 
332
- let match: RegExpExecArray | null;
332
+ let match: RegExpExecArray | null | undefined;
333
333
 
334
334
  // Ordered based on occurrences on Facebook codebase
335
- if ((match = matchers.hex6.exec(color))) {
335
+ if ((match = matchers?.hex6?.exec(color))) {
336
336
  return Number.parseInt(match[1] + 'ff', 16) >>> 0;
337
337
  }
338
338
 
@@ -340,7 +340,7 @@ function normalizeColor(color: unknown): number | null {
340
340
  return names[color];
341
341
  }
342
342
 
343
- if ((match = matchers.rgb.exec(color))) {
343
+ if ((match = matchers?.rgb?.exec(color))) {
344
344
  return (
345
345
  // b
346
346
  ((parse255(match[1]) << 24) | // r
@@ -351,7 +351,7 @@ function normalizeColor(color: unknown): number | null {
351
351
  );
352
352
  }
353
353
 
354
- if ((match = matchers.rgba.exec(color))) {
354
+ if ((match = matchers?.rgba?.exec(color))) {
355
355
  return (
356
356
  // b
357
357
  ((parse255(match[1]) << 24) | // r
@@ -362,7 +362,7 @@ function normalizeColor(color: unknown): number | null {
362
362
  );
363
363
  }
364
364
 
365
- if ((match = matchers.hex3.exec(color))) {
365
+ if ((match = matchers?.hex3?.exec(color))) {
366
366
  return (
367
367
  Number.parseInt(
368
368
  match[1] +
@@ -378,11 +378,11 @@ function normalizeColor(color: unknown): number | null {
378
378
  }
379
379
 
380
380
  // https://drafts.csswg.org/css-color-4/#hex-notation
381
- if ((match = matchers.hex8.exec(color))) {
381
+ if ((match = matchers?.hex8?.exec(color))) {
382
382
  return Number.parseInt(match[1], 16) >>> 0;
383
383
  }
384
384
 
385
- if ((match = matchers.hex4.exec(color))) {
385
+ if ((match = matchers?.hex4?.exec(color))) {
386
386
  return (
387
387
  Number.parseInt(
388
388
  match[1] +
@@ -398,7 +398,7 @@ function normalizeColor(color: unknown): number | null {
398
398
  );
399
399
  }
400
400
 
401
- if ((match = matchers.hsl.exec(color))) {
401
+ if ((match = matchers?.hsl?.exec(color))) {
402
402
  return (
403
403
  (hslToRgb(
404
404
  parse360(match[1]), // h
@@ -410,7 +410,7 @@ function normalizeColor(color: unknown): number | null {
410
410
  );
411
411
  }
412
412
 
413
- if ((match = matchers.hsla.exec(color))) {
413
+ if ((match = matchers?.hsla?.exec(color))) {
414
414
  return (
415
415
  (hslToRgb(
416
416
  parse360(match[1]), // h
@@ -634,9 +634,9 @@ export function processColor(color: unknown): number | null | undefined {
634
634
  return normalizedColor;
635
635
  }
636
636
 
637
- export function convertToHSVA(
638
- color: unknown
639
- ): [number, number, number, number] {
637
+ export type ParsedColorArray = [number, number, number, number];
638
+
639
+ export function convertToHSVA(color: unknown): ParsedColorArray {
640
640
  'worklet';
641
641
  const processedColor = processColorInitially(color)!; // argb;
642
642
  const a = (processedColor >>> 24) / 255;
@@ -647,7 +647,7 @@ export function convertToHSVA(
647
647
  return [h, s, v, a];
648
648
  }
649
649
 
650
- export function toRGBA(HSVA: [number, number, number, number]): string {
650
+ export function toRGBA(HSVA: ParsedColorArray): string {
651
651
  'worklet';
652
652
  const { r, g, b } = HSVtoRGB(HSVA[0], HSVA[1], HSVA[2]);
653
653
  return `rgba(${r}, ${g}, ${b}, ${HSVA[3]})`;
@@ -704,9 +704,11 @@ const getInterpolateCacheRGBA = (
704
704
  const g = [];
705
705
  const b = [];
706
706
  const a = [];
707
- for (const color of colors) {
707
+ for (let i = 0; i < colors.length; ++i) {
708
+ const color = colors[i];
708
709
  const proocessedColor = processColor(color);
709
- if (proocessedColor) {
710
+ // explicit check in case if processedColor is 0
711
+ if (proocessedColor !== null && proocessedColor !== undefined) {
710
712
  r.push(red(proocessedColor));
711
713
  g.push(green(proocessedColor));
712
714
  b.push(blue(proocessedColor));
@@ -747,7 +749,8 @@ const getInterpolateCacheHSV = (
747
749
  const h = [];
748
750
  const s = [];
749
751
  const v = [];
750
- for (const color of colors) {
752
+ for (let i = 0; i < colors.length; ++i) {
753
+ const color = colors[i];
751
754
  const proocessedColor = RGBtoHSV(processColor(color) as any);
752
755
  if (proocessedColor) {
753
756
  h.push(proocessedColor.h);
@@ -54,7 +54,9 @@ import { Bezier } from './Bezier';
54
54
  * - [`out`](docs/easing.html#out) runs an easing function backwards
55
55
  */
56
56
 
57
- type EasingFn = (t: number) => number;
57
+ export type EasingFn = (t: number) => number;
58
+
59
+ export type EasingFactoryFn = { factory: () => EasingFn };
58
60
  /**
59
61
  * A linear function, `f(t) = t`. Position correlates to elapsed time one to
60
62
  * one.