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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
  2. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
  3. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
  4. package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
  5. package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
  6. package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
  7. package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
  8. package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
  9. package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
  10. package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
  11. package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
  12. package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
  13. package/Common/cpp/Tools/Mapper.cpp +41 -29
  14. package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
  15. package/Common/cpp/Tools/Scheduler.cpp +14 -6
  16. package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
  17. package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
  18. package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
  19. package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
  20. package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
  21. package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
  22. package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
  23. package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
  24. package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
  25. package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
  26. package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
  27. package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
  28. package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
  29. package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
  30. package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
  31. package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
  32. package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
  33. package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
  34. package/Common/cpp/headers/Tools/Mapper.h +24 -18
  35. package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
  36. package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
  37. package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
  38. package/Common/cpp/headers/Tools/Scheduler.h +28 -33
  39. package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
  40. package/Common/cpp/hidden_headers/Logger.h +14 -14
  41. package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
  42. package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
  43. package/README.md +1 -1
  44. package/RNReanimated.podspec +4 -4
  45. package/android/build.gradle +80 -3
  46. package/android/react-native-reanimated-63-hermes.aar +0 -0
  47. package/android/react-native-reanimated-63-jsc.aar +0 -0
  48. package/android/react-native-reanimated-64-hermes.aar +0 -0
  49. package/android/react-native-reanimated-64-jsc.aar +0 -0
  50. package/android/react-native-reanimated-65-hermes.aar +0 -0
  51. package/android/react-native-reanimated-65-jsc.aar +0 -0
  52. package/android/react-native-reanimated-66-hermes.aar +0 -0
  53. package/android/react-native-reanimated-66-jsc.aar +0 -0
  54. package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
  55. package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
  56. package/ios/LayoutReanimation/REASnapshot.h +13 -0
  57. package/ios/LayoutReanimation/REASnapshot.m +29 -0
  58. package/ios/LayoutReanimation/REAUIManager.h +16 -0
  59. package/ios/LayoutReanimation/REAUIManager.mm +348 -0
  60. package/ios/Nodes/REAAlwaysNode.m +14 -15
  61. package/ios/Nodes/REABezierNode.m +8 -7
  62. package/ios/Nodes/REABlockNode.m +1 -1
  63. package/ios/Nodes/REACallFuncNode.h +0 -1
  64. package/ios/Nodes/REACallFuncNode.m +10 -8
  65. package/ios/Nodes/REAClockNodes.m +22 -20
  66. package/ios/Nodes/REAConcatNode.h +0 -1
  67. package/ios/Nodes/REAConcatNode.m +2 -2
  68. package/ios/Nodes/REACondNode.m +7 -5
  69. package/ios/Nodes/READebugNode.m +5 -4
  70. package/ios/Nodes/REAEventNode.m +1 -1
  71. package/ios/Nodes/REAFunctionNode.h +0 -1
  72. package/ios/Nodes/REAFunctionNode.m +2 -2
  73. package/ios/Nodes/REAJSCallNode.m +4 -5
  74. package/ios/Nodes/REANode.h +3 -4
  75. package/ios/Nodes/REANode.m +9 -11
  76. package/ios/Nodes/REAOperatorNode.m +68 -67
  77. package/ios/Nodes/REAParamNode.h +1 -3
  78. package/ios/Nodes/REAParamNode.m +15 -17
  79. package/ios/Nodes/REAPropsNode.h +1 -3
  80. package/ios/Nodes/REAPropsNode.m +19 -22
  81. package/ios/Nodes/REASetNode.h +0 -1
  82. package/ios/Nodes/REASetNode.m +7 -5
  83. package/ios/Nodes/REAStyleNode.h +0 -1
  84. package/ios/Nodes/REAStyleNode.m +2 -4
  85. package/ios/Nodes/REATransformNode.h +0 -1
  86. package/ios/Nodes/REATransformNode.m +3 -5
  87. package/ios/Nodes/REAValueNode.m +5 -7
  88. package/ios/REAEventDispatcher.m +3 -3
  89. package/ios/REAModule.h +0 -2
  90. package/ios/REAModule.m +29 -40
  91. package/ios/REANodesManager.h +11 -19
  92. package/ios/REANodesManager.m +105 -130
  93. package/ios/REAUtils.h +5 -3
  94. package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
  95. package/ios/Transitioning/REAAllTransitions.h +2 -2
  96. package/ios/Transitioning/REAAllTransitions.m +14 -25
  97. package/ios/Transitioning/REATransition.h +8 -7
  98. package/ios/Transitioning/REATransition.m +19 -16
  99. package/ios/Transitioning/REATransitionAnimation.h +1 -1
  100. package/ios/Transitioning/REATransitionAnimation.m +2 -3
  101. package/ios/Transitioning/REATransitionManager.m +3 -3
  102. package/ios/native/NativeMethods.h +15 -5
  103. package/ios/native/NativeProxy.h +4 -3
  104. package/ios/native/NativeProxy.mm +19 -5
  105. package/ios/native/REAIOSErrorHandler.h +13 -10
  106. package/ios/native/REAIOSLogger.h +8 -8
  107. package/ios/native/REAIOSScheduler.h +5 -5
  108. package/ios/native/REAIOSScheduler.mm +7 -5
  109. package/ios/native/REAInitializer.h +37 -0
  110. package/ios/native/REAInitializer.mm +63 -0
  111. package/ios/native/UIResponder+Reanimated.mm +9 -48
  112. package/lib/ConfigHelper.js +1 -0
  113. package/lib/ReanimatedModule.native.js +10 -2
  114. package/lib/createAnimatedComponent.js +64 -30
  115. package/lib/reanimated1/core/AnimatedAlways.js +1 -1
  116. package/lib/reanimated1/core/AnimatedBezier.js +1 -1
  117. package/lib/reanimated1/core/AnimatedBlock.js +1 -1
  118. package/lib/reanimated1/core/AnimatedCall.js +1 -1
  119. package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
  120. package/lib/reanimated1/core/AnimatedConcat.js +1 -1
  121. package/lib/reanimated1/core/AnimatedCond.js +1 -1
  122. package/lib/reanimated1/core/AnimatedDebug.js +1 -1
  123. package/lib/reanimated1/core/AnimatedEvent.js +1 -1
  124. package/lib/reanimated1/core/AnimatedFunction.js +1 -1
  125. package/lib/reanimated1/core/AnimatedOperator.js +1 -1
  126. package/lib/reanimated1/core/AnimatedParam.js +1 -1
  127. package/lib/reanimated1/core/AnimatedProps.js +2 -2
  128. package/lib/reanimated1/core/AnimatedSet.js +1 -1
  129. package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
  130. package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
  131. package/lib/reanimated1/core/AnimatedStyle.js +1 -1
  132. package/lib/reanimated1/core/AnimatedTransform.js +1 -1
  133. package/lib/reanimated1/core/Core.test.js +30 -0
  134. package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
  135. package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  136. package/lib/reanimated1/derived/interpolate.js +1 -1
  137. package/lib/reanimated2/Colors.js +16 -12
  138. package/lib/reanimated2/NativeMethods.js +3 -14
  139. package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
  140. package/lib/reanimated2/NativeReanimated/index.js +15 -0
  141. package/lib/reanimated2/PlatformChecker.js +16 -0
  142. package/lib/reanimated2/PropAdapters.js +14 -4
  143. package/lib/reanimated2/UpdateProps.js +14 -11
  144. package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
  145. package/lib/reanimated2/WorkletEventHandler.js +15 -13
  146. package/lib/reanimated2/animation/commonTypes.js +1 -0
  147. package/lib/reanimated2/animation/decay.js +71 -0
  148. package/lib/reanimated2/animation/delay.js +64 -0
  149. package/lib/reanimated2/animation/index.js +8 -0
  150. package/lib/reanimated2/animation/repeat.js +69 -0
  151. package/lib/reanimated2/animation/sequence.js +72 -0
  152. package/lib/reanimated2/animation/spring.js +101 -0
  153. package/lib/reanimated2/animation/styleAnimation.js +166 -0
  154. package/lib/reanimated2/animation/timing.js +64 -0
  155. package/lib/reanimated2/animation/util.js +157 -0
  156. package/lib/reanimated2/commonTypes.js +1 -0
  157. package/lib/reanimated2/core.js +35 -39
  158. package/lib/reanimated2/globals.d.ts +47 -1
  159. package/lib/reanimated2/hook/Hooks.js +9 -0
  160. package/lib/reanimated2/hook/commonTypes.js +1 -0
  161. package/lib/reanimated2/hook/index.js +8 -0
  162. package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
  163. package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
  164. package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
  165. package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
  166. package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
  167. package/lib/reanimated2/hook/useDerivedValue.js +36 -0
  168. package/lib/reanimated2/hook/useSharedValue.js +17 -0
  169. package/lib/reanimated2/hook/utils.js +175 -0
  170. package/lib/reanimated2/index.js +3 -2
  171. package/lib/reanimated2/interpolation.js +95 -86
  172. package/lib/reanimated2/jestUtils.js +0 -12
  173. package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
  174. package/lib/reanimated2/js-reanimated/index.js +57 -1
  175. package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
  176. package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
  177. package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
  178. package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
  179. package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
  180. package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
  181. package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
  182. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
  183. package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
  184. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
  185. package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
  186. package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
  187. package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
  188. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
  189. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
  190. package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
  191. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
  192. package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
  193. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
  194. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
  195. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
  196. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
  197. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
  198. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
  199. package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
  200. package/lib/reanimated2/layoutReanimation/index.js +3 -2
  201. package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
  202. package/lib/reanimated2/utils.js +9 -0
  203. package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
  204. package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
  205. package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
  206. package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
  207. package/package.json +21 -10
  208. package/plugin.js +244 -85
  209. package/react-native-reanimated.d.ts +531 -453
  210. package/src/ConfigHelper.js +1 -0
  211. package/src/ReanimatedModule.native.js +10 -2
  212. package/src/createAnimatedComponent.js +64 -30
  213. package/src/reanimated1/core/AnimatedAlways.js +1 -1
  214. package/src/reanimated1/core/AnimatedBezier.js +1 -1
  215. package/src/reanimated1/core/AnimatedBlock.js +1 -1
  216. package/src/reanimated1/core/AnimatedCall.js +1 -1
  217. package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
  218. package/src/reanimated1/core/AnimatedConcat.js +1 -1
  219. package/src/reanimated1/core/AnimatedCond.js +1 -1
  220. package/src/reanimated1/core/AnimatedDebug.js +1 -1
  221. package/src/reanimated1/core/AnimatedEvent.js +1 -1
  222. package/src/reanimated1/core/AnimatedFunction.js +1 -1
  223. package/src/reanimated1/core/AnimatedOperator.js +1 -1
  224. package/src/reanimated1/core/AnimatedParam.js +1 -1
  225. package/src/reanimated1/core/AnimatedProps.js +2 -2
  226. package/src/reanimated1/core/AnimatedSet.js +1 -1
  227. package/src/reanimated1/core/AnimatedStartClock.js +1 -1
  228. package/src/reanimated1/core/AnimatedStopClock.js +1 -1
  229. package/src/reanimated1/core/AnimatedStyle.js +1 -1
  230. package/src/reanimated1/core/AnimatedTransform.js +1 -1
  231. package/src/reanimated1/core/Core.test.js +30 -0
  232. package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
  233. package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
  234. package/src/reanimated1/derived/interpolate.js +1 -1
  235. package/src/reanimated2/Colors.ts +30 -27
  236. package/src/reanimated2/Easing.ts +3 -1
  237. package/src/reanimated2/NativeMethods.ts +26 -16
  238. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
  239. package/src/reanimated2/NativeReanimated/index.ts +18 -0
  240. package/src/reanimated2/PlatformChecker.ts +21 -0
  241. package/src/reanimated2/PropAdapters.ts +52 -34
  242. package/src/reanimated2/UpdateProps.ts +40 -20
  243. package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
  244. package/src/reanimated2/WorkletEventHandler.ts +41 -23
  245. package/src/reanimated2/animation/commonTypes.ts +48 -0
  246. package/src/reanimated2/animation/decay.ts +141 -0
  247. package/src/reanimated2/animation/delay.ts +103 -0
  248. package/src/reanimated2/animation/index.ts +16 -0
  249. package/src/reanimated2/animation/repeat.ts +128 -0
  250. package/src/reanimated2/animation/sequence.ts +110 -0
  251. package/src/reanimated2/animation/spring.ts +165 -0
  252. package/src/reanimated2/animation/styleAnimation.ts +253 -0
  253. package/src/reanimated2/animation/timing.ts +109 -0
  254. package/src/reanimated2/animation/util.ts +242 -0
  255. package/src/reanimated2/commonTypes.ts +81 -0
  256. package/src/reanimated2/core.ts +128 -82
  257. package/src/reanimated2/globals.d.ts +47 -1
  258. package/src/reanimated2/hook/Hooks.ts +16 -0
  259. package/src/reanimated2/hook/commonTypes.ts +12 -0
  260. package/src/reanimated2/hook/index.ts +25 -0
  261. package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
  262. package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
  263. package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
  264. package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
  265. package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
  266. package/src/reanimated2/hook/useDerivedValue.ts +48 -0
  267. package/src/reanimated2/hook/useSharedValue.ts +22 -0
  268. package/src/reanimated2/hook/utils.ts +259 -0
  269. package/src/reanimated2/index.ts +3 -2
  270. package/src/reanimated2/interpolation.ts +170 -101
  271. package/src/reanimated2/jestUtils.ts +0 -12
  272. package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
  273. package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
  274. package/src/reanimated2/js-reanimated/index.ts +71 -0
  275. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
  276. package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
  277. package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
  278. package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
  279. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
  280. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
  281. package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
  282. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
  283. package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
  284. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
  285. package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
  286. package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
  287. package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
  288. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
  289. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
  290. package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
  291. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
  292. package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
  293. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
  294. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
  295. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
  296. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
  297. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
  298. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
  299. package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
  300. package/src/reanimated2/layoutReanimation/index.ts +3 -2
  301. package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
  302. package/src/reanimated2/utils.ts +21 -0
  303. package/android/react-native-reanimated-62-hermes.aar +0 -0
  304. package/android/react-native-reanimated-62-jsc.aar +0 -0
  305. package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
  306. package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
  307. package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
  308. package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
  309. package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
  310. package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
  311. package/ios/LayoutReanimation/REASnapshooter.h +0 -19
  312. package/ios/LayoutReanimation/REASnapshooter.m +0 -64
  313. package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
  314. package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
  315. package/lib/reanimated2/Hooks.js +0 -732
  316. package/lib/reanimated2/NativeReanimated.js +0 -4
  317. package/lib/reanimated2/animations.js +0 -713
  318. package/lib/reanimated2/js-reanimated/index.web.js +0 -20
  319. package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
  320. package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
  321. package/src/reanimated2/Hooks.ts +0 -918
  322. package/src/reanimated2/NativeReanimated.native.ts +0 -61
  323. package/src/reanimated2/NativeReanimated.ts +0 -5
  324. package/src/reanimated2/animations.ts +0 -868
  325. package/src/reanimated2/js-reanimated/index.js +0 -0
  326. package/src/reanimated2/js-reanimated/index.web.ts +0 -29
  327. package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
  328. package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
@@ -0,0 +1,50 @@
1
+ import { isWeb } from '../PlatformChecker';
2
+ import { useEvent, useHandler } from './Hooks';
3
+ export var EventType;
4
+ (function (EventType) {
5
+ EventType[EventType["UNDETERMINED"] = 0] = "UNDETERMINED";
6
+ EventType[EventType["FAILED"] = 1] = "FAILED";
7
+ EventType[EventType["BEGAN"] = 2] = "BEGAN";
8
+ EventType[EventType["CANCELLED"] = 3] = "CANCELLED";
9
+ EventType[EventType["ACTIVE"] = 4] = "ACTIVE";
10
+ EventType[EventType["END"] = 5] = "END";
11
+ })(EventType || (EventType = {}));
12
+ export function useAnimatedGestureHandler(handlers, dependencies) {
13
+ const { context, doDependenciesDiffer, useWeb } = useHandler(handlers, dependencies);
14
+ const handler = (e) => {
15
+ 'worklet';
16
+ const event = useWeb ? e.nativeEvent : e;
17
+ if (event.state === EventType.BEGAN && handlers.onStart) {
18
+ handlers.onStart(event, context);
19
+ }
20
+ if (event.state === EventType.ACTIVE && handlers.onActive) {
21
+ handlers.onActive(event, context);
22
+ }
23
+ if (event.oldState === EventType.ACTIVE &&
24
+ event.state === EventType.END &&
25
+ handlers.onEnd) {
26
+ handlers.onEnd(event, context);
27
+ }
28
+ if (event.oldState === EventType.BEGAN &&
29
+ event.state === EventType.FAILED &&
30
+ handlers.onFail) {
31
+ handlers.onFail(event, context);
32
+ }
33
+ if (event.oldState === EventType.ACTIVE &&
34
+ event.state === EventType.CANCELLED &&
35
+ handlers.onCancel) {
36
+ handlers.onCancel(event, context);
37
+ }
38
+ if ((event.oldState === EventType.BEGAN ||
39
+ event.oldState === EventType.ACTIVE) &&
40
+ event.state !== EventType.BEGAN &&
41
+ event.state !== EventType.ACTIVE &&
42
+ handlers.onFinish) {
43
+ handlers.onFinish(event, context, event.state === EventType.CANCELLED || event.state === EventType.FAILED);
44
+ }
45
+ };
46
+ if (isWeb()) {
47
+ return handler;
48
+ }
49
+ return useEvent(handler, ['onGestureHandlerStateChange', 'onGestureHandlerEvent'], doDependenciesDiffer);
50
+ }
@@ -0,0 +1,37 @@
1
+ import { useEffect } from 'react';
2
+ import { startMapper, stopMapper } from '../core';
3
+ import { useSharedValue } from './useSharedValue';
4
+ /**
5
+ * @param prepare - worklet used for data preparation for the second parameter
6
+ * @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions
7
+ * the first worklet defines the inputs, in other words on which shared values change will it be called.
8
+ * 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.
9
+ */
10
+ export function useAnimatedReaction(prepare, react, dependencies) {
11
+ var _a, _b;
12
+ const previous = useSharedValue(null);
13
+ if (dependencies === undefined) {
14
+ dependencies = [
15
+ Object.values((_a = prepare._closure) !== null && _a !== void 0 ? _a : {}),
16
+ Object.values((_b = react._closure) !== null && _b !== void 0 ? _b : {}),
17
+ prepare.__workletHash,
18
+ react.__workletHash,
19
+ ];
20
+ }
21
+ else {
22
+ dependencies.push(prepare.__workletHash, react.__workletHash);
23
+ }
24
+ useEffect(() => {
25
+ var _a;
26
+ const fun = () => {
27
+ 'worklet';
28
+ const input = prepare();
29
+ react(input, previous.value);
30
+ previous.value = input;
31
+ };
32
+ const mapperId = startMapper(fun, Object.values((_a = prepare._closure) !== null && _a !== void 0 ? _a : {}), []);
33
+ return () => {
34
+ stopMapper(mapperId);
35
+ };
36
+ }, dependencies);
37
+ }
@@ -0,0 +1,25 @@
1
+ import { useRef } from 'react';
2
+ import { getTag } from '../NativeMethods';
3
+ import { useSharedValue } from './useSharedValue';
4
+ export function useAnimatedRef() {
5
+ const tag = useSharedValue(-1);
6
+ const ref = useRef();
7
+ if (!ref.current) {
8
+ const fun = ((component) => {
9
+ 'worklet';
10
+ // enters when ref is set by attaching to a component
11
+ if (component) {
12
+ tag.value = getTag(component);
13
+ fun.current = component;
14
+ }
15
+ return tag.value;
16
+ });
17
+ Object.defineProperty(fun, 'current', {
18
+ value: null,
19
+ writable: true,
20
+ enumerable: false,
21
+ });
22
+ ref.current = fun;
23
+ }
24
+ return ref.current;
25
+ }
@@ -0,0 +1,41 @@
1
+ import { useEvent, useHandler } from './Hooks';
2
+ export function useAnimatedScrollHandler(handlers, dependencies) {
3
+ // case when handlers is a function
4
+ const scrollHandlers = typeof handlers === 'function' ? { onScroll: handlers } : handlers;
5
+ const { context, doDependenciesDiffer } = useHandler(scrollHandlers, dependencies);
6
+ // build event subscription array
7
+ const subscribeForEvents = ['onScroll'];
8
+ if (scrollHandlers.onBeginDrag !== undefined) {
9
+ subscribeForEvents.push('onScrollBeginDrag');
10
+ }
11
+ if (scrollHandlers.onEndDrag !== undefined) {
12
+ subscribeForEvents.push('onScrollEndDrag');
13
+ }
14
+ if (scrollHandlers.onMomentumBegin !== undefined) {
15
+ subscribeForEvents.push('onMomentumScrollBegin');
16
+ }
17
+ if (scrollHandlers.onMomentumEnd !== undefined) {
18
+ subscribeForEvents.push('onMomentumScrollEnd');
19
+ }
20
+ return useEvent((event) => {
21
+ 'worklet';
22
+ const { onScroll, onBeginDrag, onEndDrag, onMomentumBegin, onMomentumEnd, } = scrollHandlers;
23
+ if (onScroll && event.eventName.endsWith('onScroll')) {
24
+ onScroll(event, context);
25
+ }
26
+ else if (onBeginDrag && event.eventName.endsWith('onScrollBeginDrag')) {
27
+ onBeginDrag(event, context);
28
+ }
29
+ else if (onEndDrag && event.eventName.endsWith('onScrollEndDrag')) {
30
+ onEndDrag(event, context);
31
+ }
32
+ else if (onMomentumBegin &&
33
+ event.eventName.endsWith('onMomentumScrollBegin')) {
34
+ onMomentumBegin(event, context);
35
+ }
36
+ else if (onMomentumEnd &&
37
+ event.eventName.endsWith('onMomentumScrollEnd')) {
38
+ onMomentumEnd(event, context);
39
+ }
40
+ }, subscribeForEvents, doDependenciesDiffer);
41
+ }
@@ -0,0 +1,376 @@
1
+ /* global _frameTimestamp */
2
+ import { useEffect, useRef } from 'react';
3
+ import { startMapper, stopMapper, makeRemote, requestFrame, getTimestamp, makeMutable, } from '../core';
4
+ import updateProps, { updatePropsJestWrapper } from '../UpdateProps';
5
+ import { initialUpdaterRun } from '../animation';
6
+ import NativeReanimatedModule from '../NativeReanimated';
7
+ import { useSharedValue } from './useSharedValue';
8
+ import { buildWorkletsHash, canApplyOptimalisation, getStyleWithoutAnimations, hasColorProps, isAnimated, parseColors, styleDiff, validateAnimatedStyles, } from './utils';
9
+ import { makeViewDescriptorsSet, makeViewsRefSet, } from '../ViewDescriptorsSet';
10
+ import { isJest, shouldBeUseWeb } from '../PlatformChecker';
11
+ function prepareAnimation(animatedProp, lastAnimation, lastValue) {
12
+ 'worklet';
13
+ if (Array.isArray(animatedProp)) {
14
+ animatedProp.forEach((prop, index) => prepareAnimation(prop, lastAnimation && lastAnimation[index], lastValue && lastValue[index]));
15
+ // return animatedProp;
16
+ }
17
+ if (typeof animatedProp === 'object' && animatedProp.onFrame) {
18
+ const animation = animatedProp;
19
+ let value = animation.current;
20
+ if (lastValue !== undefined) {
21
+ if (typeof lastValue === 'object') {
22
+ if (lastValue.value !== undefined) {
23
+ // previously it was a shared value
24
+ value = lastValue.value;
25
+ }
26
+ else if (lastValue.onFrame !== undefined) {
27
+ if ((lastAnimation === null || lastAnimation === void 0 ? void 0 : lastAnimation.current) !== undefined) {
28
+ // it was an animation before, copy its state
29
+ value = lastAnimation.current;
30
+ }
31
+ else if ((lastValue === null || lastValue === void 0 ? void 0 : lastValue.current) !== undefined) {
32
+ // it was initialized
33
+ value = lastValue.current;
34
+ }
35
+ }
36
+ }
37
+ else {
38
+ // previously it was a plain value, just set it as starting point
39
+ value = lastValue;
40
+ }
41
+ }
42
+ animation.callStart = (timestamp) => {
43
+ animation.onStart(animation, value, timestamp, lastAnimation);
44
+ };
45
+ animation.callStart(getTimestamp());
46
+ animation.callStart = null;
47
+ }
48
+ else if (typeof animatedProp === 'object') {
49
+ // it is an object
50
+ Object.keys(animatedProp).forEach((key) => prepareAnimation(animatedProp[key], lastAnimation && lastAnimation[key], lastValue && lastValue[key]));
51
+ }
52
+ }
53
+ function runAnimations(animation, timestamp, key, result, animationsActive) {
54
+ 'worklet';
55
+ if (!animationsActive.value) {
56
+ return true;
57
+ }
58
+ if (Array.isArray(animation)) {
59
+ result[key] = [];
60
+ let allFinished = true;
61
+ animation.forEach((entry, index) => {
62
+ if (!runAnimations(entry, timestamp, index, result[key], animationsActive)) {
63
+ allFinished = false;
64
+ }
65
+ });
66
+ return allFinished;
67
+ }
68
+ else if (typeof animation === 'object' && animation.onFrame) {
69
+ let finished = true;
70
+ if (!animation.finished) {
71
+ if (animation.callStart) {
72
+ animation.callStart(timestamp);
73
+ animation.callStart = null;
74
+ }
75
+ finished = animation.onFrame(animation, timestamp);
76
+ animation.timestamp = timestamp;
77
+ if (finished) {
78
+ animation.finished = true;
79
+ animation.callback && animation.callback(true /* finished */);
80
+ }
81
+ }
82
+ result[key] = animation.current;
83
+ return finished;
84
+ }
85
+ else if (typeof animation === 'object') {
86
+ result[key] = {};
87
+ let allFinished = true;
88
+ Object.keys(animation).forEach((k) => {
89
+ if (!runAnimations(animation[k], timestamp, k, result[key], animationsActive)) {
90
+ allFinished = false;
91
+ }
92
+ });
93
+ return allFinished;
94
+ }
95
+ else {
96
+ result[key] = animation;
97
+ return true;
98
+ }
99
+ }
100
+ function styleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsActive) {
101
+ 'worklet';
102
+ var _a, _b;
103
+ const animations = (_a = state.animations) !== null && _a !== void 0 ? _a : {};
104
+ const newValues = (_b = updater()) !== null && _b !== void 0 ? _b : {};
105
+ const oldValues = state.last;
106
+ let hasAnimations = false;
107
+ for (const key in newValues) {
108
+ const value = newValues[key];
109
+ if (isAnimated(value)) {
110
+ prepareAnimation(value, animations[key], oldValues[key]);
111
+ animations[key] = value;
112
+ hasAnimations = true;
113
+ }
114
+ else {
115
+ delete animations[key];
116
+ }
117
+ }
118
+ if (hasAnimations) {
119
+ const frame = (timestamp) => {
120
+ const { animations, last, isAnimationCancelled } = state;
121
+ if (isAnimationCancelled) {
122
+ state.isAnimationRunning = false;
123
+ return;
124
+ }
125
+ const updates = {};
126
+ let allFinished = true;
127
+ for (const propName in animations) {
128
+ const finished = runAnimations(animations[propName], timestamp, propName, updates, animationsActive);
129
+ if (finished) {
130
+ last[propName] = updates[propName];
131
+ delete animations[propName];
132
+ }
133
+ else {
134
+ allFinished = false;
135
+ }
136
+ }
137
+ if (updates) {
138
+ updateProps(viewDescriptors, updates, maybeViewRef);
139
+ }
140
+ if (!allFinished) {
141
+ requestFrame(frame);
142
+ }
143
+ else {
144
+ state.isAnimationRunning = false;
145
+ }
146
+ };
147
+ state.animations = animations;
148
+ if (!state.isAnimationRunning) {
149
+ state.isAnimationCancelled = false;
150
+ state.isAnimationRunning = true;
151
+ if (_frameTimestamp) {
152
+ frame(_frameTimestamp);
153
+ }
154
+ else {
155
+ requestFrame(frame);
156
+ }
157
+ }
158
+ state.last = Object.assign({}, oldValues, newValues);
159
+ const style = getStyleWithoutAnimations(state.last);
160
+ if (style) {
161
+ updateProps(viewDescriptors, style, maybeViewRef);
162
+ }
163
+ }
164
+ else {
165
+ state.isAnimationCancelled = true;
166
+ state.animations = [];
167
+ updateProps(viewDescriptors, newValues, maybeViewRef);
168
+ }
169
+ }
170
+ function jestStyleUpdater(viewDescriptors, updater, state, maybeViewRef, animationsActive, animatedStyle, adapters = []) {
171
+ 'worklet';
172
+ var _a, _b;
173
+ const animations = (_a = state.animations) !== null && _a !== void 0 ? _a : {};
174
+ const newValues = (_b = updater()) !== null && _b !== void 0 ? _b : {};
175
+ const oldValues = state.last;
176
+ // extract animated props
177
+ let hasAnimations = false;
178
+ Object.keys(animations).forEach((key) => {
179
+ const value = newValues[key];
180
+ if (!isAnimated(value)) {
181
+ delete animations[key];
182
+ }
183
+ });
184
+ Object.keys(newValues).forEach((key) => {
185
+ const value = newValues[key];
186
+ if (isAnimated(value)) {
187
+ prepareAnimation(value, animations[key], oldValues[key]);
188
+ animations[key] = value;
189
+ hasAnimations = true;
190
+ }
191
+ });
192
+ function frame(timestamp) {
193
+ const { animations, last, isAnimationCancelled } = state;
194
+ if (isAnimationCancelled) {
195
+ state.isAnimationRunning = false;
196
+ return;
197
+ }
198
+ const updates = {};
199
+ let allFinished = true;
200
+ Object.keys(animations).forEach((propName) => {
201
+ const finished = runAnimations(animations[propName], timestamp, propName, updates, animationsActive);
202
+ if (finished) {
203
+ last[propName] = updates[propName];
204
+ delete animations[propName];
205
+ }
206
+ else {
207
+ allFinished = false;
208
+ }
209
+ });
210
+ if (Object.keys(updates).length) {
211
+ updatePropsJestWrapper(viewDescriptors, updates, maybeViewRef, animatedStyle, adapters);
212
+ }
213
+ if (!allFinished) {
214
+ requestFrame(frame);
215
+ }
216
+ else {
217
+ state.isAnimationRunning = false;
218
+ }
219
+ }
220
+ if (hasAnimations) {
221
+ state.animations = animations;
222
+ if (!state.isAnimationRunning) {
223
+ state.isAnimationCancelled = false;
224
+ state.isAnimationRunning = true;
225
+ if (_frameTimestamp) {
226
+ frame(_frameTimestamp);
227
+ }
228
+ else {
229
+ requestFrame(frame);
230
+ }
231
+ }
232
+ }
233
+ else {
234
+ state.isAnimationCancelled = true;
235
+ state.animations = [];
236
+ }
237
+ // calculate diff
238
+ const diff = styleDiff(oldValues, newValues);
239
+ state.last = Object.assign({}, oldValues, newValues);
240
+ if (Object.keys(diff).length !== 0) {
241
+ updatePropsJestWrapper(viewDescriptors, diff, maybeViewRef, animatedStyle, adapters);
242
+ }
243
+ }
244
+ // check for invalid usage of shared values in returned object
245
+ function checkSharedValueUsage(prop, currentKey) {
246
+ if (Array.isArray(prop)) {
247
+ // if it's an array (i.ex. transform) validate all its elements
248
+ for (const element of prop) {
249
+ checkSharedValueUsage(element, currentKey);
250
+ }
251
+ }
252
+ else if (typeof prop === 'object' && prop.value === undefined) {
253
+ // if it's a nested object, run validation for all its props
254
+ for (const key of Object.keys(prop)) {
255
+ checkSharedValueUsage(prop[key], key);
256
+ }
257
+ }
258
+ else if (currentKey !== undefined &&
259
+ typeof prop === 'object' &&
260
+ prop.value !== undefined) {
261
+ // if shared value is passed insted of its value, throw an error
262
+ throw new Error(`invalid value passed to \`${currentKey}\`, maybe you forgot to use \`.value\`?`);
263
+ }
264
+ }
265
+ export function useAnimatedStyle(updater, dependencies, adapters) {
266
+ var _a, _b;
267
+ const viewsRef = makeViewsRefSet();
268
+ const viewDescriptors = makeViewDescriptorsSet();
269
+ const initRef = useRef();
270
+ const inputs = Object.values((_a = updater._closure) !== null && _a !== void 0 ? _a : {});
271
+ const adaptersArray = adapters
272
+ ? Array.isArray(adapters)
273
+ ? adapters
274
+ : [adapters]
275
+ : [];
276
+ const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;
277
+ const animationsActive = useSharedValue(true);
278
+ const animatedStyle = useRef({});
279
+ // build dependencies
280
+ if (!dependencies) {
281
+ dependencies = [...inputs, updater.__workletHash];
282
+ }
283
+ else {
284
+ dependencies.push(updater.__workletHash);
285
+ }
286
+ adaptersHash && dependencies.push(adaptersHash);
287
+ if (!initRef.current) {
288
+ const initialStyle = initialUpdaterRun(updater);
289
+ validateAnimatedStyles(initialStyle);
290
+ initRef.current = {
291
+ initial: {
292
+ value: initialStyle,
293
+ updater: updater,
294
+ },
295
+ remoteState: makeRemote({ last: initialStyle }),
296
+ sharableViewDescriptors: makeMutable([]),
297
+ };
298
+ viewDescriptors.rebuildsharableViewDescriptors(
299
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
300
+ initRef.current.sharableViewDescriptors);
301
+ }
302
+ dependencies.push((_b = initRef.current) === null || _b === void 0 ? void 0 : _b.sharableViewDescriptors.value);
303
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
304
+ const { initial, remoteState, sharableViewDescriptors } = initRef.current;
305
+ const maybeViewRef = NativeReanimatedModule.native ? undefined : viewsRef;
306
+ useEffect(() => {
307
+ let fun;
308
+ let upadterFn = updater;
309
+ let optimalization = updater.__optimalization;
310
+ if (adapters) {
311
+ upadterFn = () => {
312
+ 'worklet';
313
+ const newValues = updater();
314
+ adaptersArray.forEach((adapter) => {
315
+ adapter(newValues);
316
+ });
317
+ return newValues;
318
+ };
319
+ }
320
+ if (canApplyOptimalisation(upadterFn) && !shouldBeUseWeb()) {
321
+ if (hasColorProps(upadterFn())) {
322
+ upadterFn = () => {
323
+ 'worklet';
324
+ const style = upadterFn();
325
+ parseColors(style);
326
+ return style;
327
+ };
328
+ }
329
+ }
330
+ else if (!shouldBeUseWeb()) {
331
+ optimalization = 0;
332
+ upadterFn = () => {
333
+ 'worklet';
334
+ const style = upadterFn();
335
+ parseColors(style);
336
+ return style;
337
+ };
338
+ }
339
+ if (typeof updater.__optimalization !== undefined) {
340
+ upadterFn.__optimalization = optimalization;
341
+ }
342
+ if (isJest()) {
343
+ fun = () => {
344
+ 'worklet';
345
+ jestStyleUpdater(sharableViewDescriptors, updater, remoteState, maybeViewRef, animationsActive, animatedStyle, adaptersArray);
346
+ };
347
+ }
348
+ else {
349
+ fun = () => {
350
+ 'worklet';
351
+ styleUpdater(sharableViewDescriptors, upadterFn, remoteState, maybeViewRef, animationsActive);
352
+ };
353
+ }
354
+ const mapperId = startMapper(fun, inputs, [], upadterFn,
355
+ // TODO fix this
356
+ sharableViewDescriptors);
357
+ return () => {
358
+ stopMapper(mapperId);
359
+ };
360
+ }, dependencies);
361
+ useEffect(() => {
362
+ animationsActive.value = true;
363
+ return () => {
364
+ // initRef.current = null;
365
+ // viewsRef = null;
366
+ animationsActive.value = false;
367
+ };
368
+ }, []);
369
+ checkSharedValueUsage(initial.value);
370
+ if (process.env.JEST_WORKER_ID) {
371
+ return { viewDescriptors, initial: initial, viewsRef, animatedStyle };
372
+ }
373
+ else {
374
+ return { viewDescriptors, initial: initial, viewsRef };
375
+ }
376
+ }
@@ -0,0 +1,36 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { initialUpdaterRun } from '../animation';
3
+ import { makeMutable, startMapper, stopMapper } from '../core';
4
+ export function useDerivedValue(processor, dependencies) {
5
+ var _a;
6
+ const initRef = useRef(null);
7
+ const inputs = Object.values((_a = processor._closure) !== null && _a !== void 0 ? _a : {});
8
+ // build dependencies
9
+ if (dependencies === undefined) {
10
+ dependencies = [...inputs, processor.__workletHash];
11
+ }
12
+ else {
13
+ dependencies.push(processor.__workletHash);
14
+ }
15
+ if (initRef.current === null) {
16
+ initRef.current = makeMutable(initialUpdaterRun(processor));
17
+ }
18
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
19
+ const sharedValue = initRef.current;
20
+ useEffect(() => {
21
+ const fun = () => {
22
+ 'worklet';
23
+ sharedValue.value = processor();
24
+ };
25
+ const mapperId = startMapper(fun, inputs, [sharedValue]);
26
+ return () => {
27
+ stopMapper(mapperId);
28
+ };
29
+ }, dependencies);
30
+ useEffect(() => {
31
+ return () => {
32
+ initRef.current = null;
33
+ };
34
+ }, []);
35
+ return sharedValue;
36
+ }
@@ -0,0 +1,17 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { cancelAnimation } from '../animation';
3
+ import { makeMutable } from '../core';
4
+ export function useSharedValue(init) {
5
+ const ref = useRef(makeMutable(init));
6
+ if (ref.current === null) {
7
+ ref.current = makeMutable(init);
8
+ }
9
+ useEffect(() => {
10
+ return () => {
11
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
12
+ cancelAnimation(ref.current);
13
+ };
14
+ }, []);
15
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
16
+ return ref.current;
17
+ }