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.
- package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +15 -8
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +170 -166
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +36 -34
- package/Common/cpp/Registries/EventHandlerRegistry.cpp +13 -6
- package/Common/cpp/Registries/MapperRegistry.cpp +19 -15
- package/Common/cpp/Registries/WorkletsCache.cpp +19 -9
- package/Common/cpp/SharedItems/FrozenObject.cpp +19 -8
- package/Common/cpp/SharedItems/MutableValue.cpp +38 -25
- package/Common/cpp/SharedItems/MutableValueSetterProxy.cpp +11 -7
- package/Common/cpp/SharedItems/RemoteObject.cpp +9 -5
- package/Common/cpp/SharedItems/ShareableValue.cpp +216 -143
- package/Common/cpp/Tools/JSIStoreValueUser.cpp +36 -24
- package/Common/cpp/Tools/Mapper.cpp +41 -29
- package/Common/cpp/Tools/RuntimeDecorator.cpp +103 -84
- package/Common/cpp/Tools/Scheduler.cpp +14 -6
- package/Common/cpp/Tools/WorkletEventHandler.cpp +1 -1
- package/Common/cpp/headers/LayoutAnimations/LayoutAnimationsProxy.h +12 -11
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +45 -34
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +28 -16
- package/Common/cpp/headers/Registries/EventHandlerRegistry.h +14 -8
- package/Common/cpp/headers/Registries/MapperRegistry.h +4 -4
- package/Common/cpp/headers/Registries/WorkletsCache.h +9 -7
- package/Common/cpp/headers/SharedItems/FrozenObject.h +15 -11
- package/Common/cpp/headers/SharedItems/HostFunctionHandler.h +6 -4
- package/Common/cpp/headers/SharedItems/MutableValue.h +21 -12
- package/Common/cpp/headers/SharedItems/MutableValueSetterProxy.h +10 -7
- package/Common/cpp/headers/SharedItems/RemoteObject.h +16 -8
- package/Common/cpp/headers/SharedItems/RuntimeManager.h +39 -21
- package/Common/cpp/headers/SharedItems/ShareableValue.h +31 -27
- package/Common/cpp/headers/SharedItems/SharedParent.h +7 -4
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +80 -61
- package/Common/cpp/headers/SpecTools/ErrorHandler.h +17 -19
- package/Common/cpp/headers/Tools/JSIStoreValueUser.h +18 -13
- package/Common/cpp/headers/Tools/Mapper.h +24 -18
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +12 -7
- package/Common/cpp/headers/Tools/ReanimatedHiddenHeaders.h +7 -7
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +29 -23
- package/Common/cpp/headers/Tools/Scheduler.h +28 -33
- package/Common/cpp/headers/Tools/WorkletEventHandler.h +9 -7
- package/Common/cpp/hidden_headers/Logger.h +14 -14
- package/Common/cpp/hidden_headers/LoggerInterface.h +8 -9
- package/Common/cpp/hidden_headers/SpeedChecker.h +7 -8
- package/README.md +1 -1
- package/RNReanimated.podspec +4 -4
- package/android/build.gradle +80 -3
- package/android/react-native-reanimated-63-hermes.aar +0 -0
- package/android/react-native-reanimated-63-jsc.aar +0 -0
- package/android/react-native-reanimated-64-hermes.aar +0 -0
- package/android/react-native-reanimated-64-jsc.aar +0 -0
- package/android/react-native-reanimated-65-hermes.aar +0 -0
- package/android/react-native-reanimated-65-jsc.aar +0 -0
- package/android/react-native-reanimated-66-hermes.aar +0 -0
- package/android/react-native-reanimated-66-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationsManager.h +19 -10
- package/ios/LayoutReanimation/REAAnimationsManager.m +195 -200
- package/ios/LayoutReanimation/REASnapshot.h +13 -0
- package/ios/LayoutReanimation/REASnapshot.m +29 -0
- package/ios/LayoutReanimation/REAUIManager.h +16 -0
- package/ios/LayoutReanimation/REAUIManager.mm +348 -0
- package/ios/Nodes/REAAlwaysNode.m +14 -15
- package/ios/Nodes/REABezierNode.m +8 -7
- package/ios/Nodes/REABlockNode.m +1 -1
- package/ios/Nodes/REACallFuncNode.h +0 -1
- package/ios/Nodes/REACallFuncNode.m +10 -8
- package/ios/Nodes/REAClockNodes.m +22 -20
- package/ios/Nodes/REAConcatNode.h +0 -1
- package/ios/Nodes/REAConcatNode.m +2 -2
- package/ios/Nodes/REACondNode.m +7 -5
- package/ios/Nodes/READebugNode.m +5 -4
- package/ios/Nodes/REAEventNode.m +1 -1
- package/ios/Nodes/REAFunctionNode.h +0 -1
- package/ios/Nodes/REAFunctionNode.m +2 -2
- package/ios/Nodes/REAJSCallNode.m +4 -5
- package/ios/Nodes/REANode.h +3 -4
- package/ios/Nodes/REANode.m +9 -11
- package/ios/Nodes/REAOperatorNode.m +68 -67
- package/ios/Nodes/REAParamNode.h +1 -3
- package/ios/Nodes/REAParamNode.m +15 -17
- package/ios/Nodes/REAPropsNode.h +1 -3
- package/ios/Nodes/REAPropsNode.m +19 -22
- package/ios/Nodes/REASetNode.h +0 -1
- package/ios/Nodes/REASetNode.m +7 -5
- package/ios/Nodes/REAStyleNode.h +0 -1
- package/ios/Nodes/REAStyleNode.m +2 -4
- package/ios/Nodes/REATransformNode.h +0 -1
- package/ios/Nodes/REATransformNode.m +3 -5
- package/ios/Nodes/REAValueNode.m +5 -7
- package/ios/REAEventDispatcher.m +3 -3
- package/ios/REAModule.h +0 -2
- package/ios/REAModule.m +29 -40
- package/ios/REANodesManager.h +11 -19
- package/ios/REANodesManager.m +105 -130
- package/ios/REAUtils.h +5 -3
- package/ios/Transitioning/RCTConvert+REATransition.m +45 -29
- package/ios/Transitioning/REAAllTransitions.h +2 -2
- package/ios/Transitioning/REAAllTransitions.m +14 -25
- package/ios/Transitioning/REATransition.h +8 -7
- package/ios/Transitioning/REATransition.m +19 -16
- package/ios/Transitioning/REATransitionAnimation.h +1 -1
- package/ios/Transitioning/REATransitionAnimation.m +2 -3
- package/ios/Transitioning/REATransitionManager.m +3 -3
- package/ios/native/NativeMethods.h +15 -5
- package/ios/native/NativeProxy.h +4 -3
- package/ios/native/NativeProxy.mm +19 -5
- package/ios/native/REAIOSErrorHandler.h +13 -10
- package/ios/native/REAIOSLogger.h +8 -8
- package/ios/native/REAIOSScheduler.h +5 -5
- package/ios/native/REAIOSScheduler.mm +7 -5
- package/ios/native/REAInitializer.h +37 -0
- package/ios/native/REAInitializer.mm +63 -0
- package/ios/native/UIResponder+Reanimated.mm +9 -48
- package/lib/ConfigHelper.js +1 -0
- package/lib/ReanimatedModule.native.js +10 -2
- package/lib/createAnimatedComponent.js +64 -30
- package/lib/reanimated1/core/AnimatedAlways.js +1 -1
- package/lib/reanimated1/core/AnimatedBezier.js +1 -1
- package/lib/reanimated1/core/AnimatedBlock.js +1 -1
- package/lib/reanimated1/core/AnimatedCall.js +1 -1
- package/lib/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/lib/reanimated1/core/AnimatedConcat.js +1 -1
- package/lib/reanimated1/core/AnimatedCond.js +1 -1
- package/lib/reanimated1/core/AnimatedDebug.js +1 -1
- package/lib/reanimated1/core/AnimatedEvent.js +1 -1
- package/lib/reanimated1/core/AnimatedFunction.js +1 -1
- package/lib/reanimated1/core/AnimatedOperator.js +1 -1
- package/lib/reanimated1/core/AnimatedParam.js +1 -1
- package/lib/reanimated1/core/AnimatedProps.js +2 -2
- package/lib/reanimated1/core/AnimatedSet.js +1 -1
- package/lib/reanimated1/core/AnimatedStartClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStopClock.js +1 -1
- package/lib/reanimated1/core/AnimatedStyle.js +1 -1
- package/lib/reanimated1/core/AnimatedTransform.js +1 -1
- package/lib/reanimated1/core/Core.test.js +30 -0
- package/lib/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/lib/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/lib/reanimated1/derived/interpolate.js +1 -1
- package/lib/reanimated2/Colors.js +16 -12
- package/lib/reanimated2/NativeMethods.js +3 -14
- package/lib/reanimated2/{NativeReanimated.native.js → NativeReanimated/NativeReanimated.js} +19 -24
- package/lib/reanimated2/NativeReanimated/index.js +15 -0
- package/lib/reanimated2/PlatformChecker.js +16 -0
- package/lib/reanimated2/PropAdapters.js +14 -4
- package/lib/reanimated2/UpdateProps.js +14 -11
- package/lib/reanimated2/ViewDescriptorsSet.js +73 -0
- package/lib/reanimated2/WorkletEventHandler.js +15 -13
- package/lib/reanimated2/animation/commonTypes.js +1 -0
- package/lib/reanimated2/animation/decay.js +71 -0
- package/lib/reanimated2/animation/delay.js +64 -0
- package/lib/reanimated2/animation/index.js +8 -0
- package/lib/reanimated2/animation/repeat.js +69 -0
- package/lib/reanimated2/animation/sequence.js +72 -0
- package/lib/reanimated2/animation/spring.js +101 -0
- package/lib/reanimated2/animation/styleAnimation.js +166 -0
- package/lib/reanimated2/animation/timing.js +64 -0
- package/lib/reanimated2/animation/util.js +157 -0
- package/lib/reanimated2/commonTypes.js +1 -0
- package/lib/reanimated2/core.js +35 -39
- package/lib/reanimated2/globals.d.ts +47 -1
- package/lib/reanimated2/hook/Hooks.js +9 -0
- package/lib/reanimated2/hook/commonTypes.js +1 -0
- package/lib/reanimated2/hook/index.js +8 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +50 -0
- package/lib/reanimated2/hook/useAnimatedReaction.js +37 -0
- package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
- package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +376 -0
- package/lib/reanimated2/hook/useDerivedValue.js +36 -0
- package/lib/reanimated2/hook/useSharedValue.js +17 -0
- package/lib/reanimated2/hook/utils.js +175 -0
- package/lib/reanimated2/index.js +3 -2
- package/lib/reanimated2/interpolation.js +95 -86
- package/lib/reanimated2/jestUtils.js +0 -12
- package/lib/reanimated2/js-reanimated/JSReanimated.js +9 -10
- package/lib/reanimated2/js-reanimated/index.js +57 -1
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +58 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +125 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +193 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +1 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +3 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +325 -207
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +235 -187
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +327 -269
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +146 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +85 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +119 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +289 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +159 -121
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +83 -65
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +371 -277
- package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +4 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +78 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +128 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +37 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +41 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +34 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +46 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +6 -0
- package/lib/reanimated2/layoutReanimation/index.js +3 -2
- package/lib/reanimated2/platform-specific/RNRenderer.web.js +2 -0
- package/lib/reanimated2/utils.js +9 -0
- package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
- package/package.json +21 -10
- package/plugin.js +244 -85
- package/react-native-reanimated.d.ts +531 -453
- package/src/ConfigHelper.js +1 -0
- package/src/ReanimatedModule.native.js +10 -2
- package/src/createAnimatedComponent.js +64 -30
- package/src/reanimated1/core/AnimatedAlways.js +1 -1
- package/src/reanimated1/core/AnimatedBezier.js +1 -1
- package/src/reanimated1/core/AnimatedBlock.js +1 -1
- package/src/reanimated1/core/AnimatedCall.js +1 -1
- package/src/reanimated1/core/AnimatedCallFunc.js +1 -1
- package/src/reanimated1/core/AnimatedConcat.js +1 -1
- package/src/reanimated1/core/AnimatedCond.js +1 -1
- package/src/reanimated1/core/AnimatedDebug.js +1 -1
- package/src/reanimated1/core/AnimatedEvent.js +1 -1
- package/src/reanimated1/core/AnimatedFunction.js +1 -1
- package/src/reanimated1/core/AnimatedOperator.js +1 -1
- package/src/reanimated1/core/AnimatedParam.js +1 -1
- package/src/reanimated1/core/AnimatedProps.js +2 -2
- package/src/reanimated1/core/AnimatedSet.js +1 -1
- package/src/reanimated1/core/AnimatedStartClock.js +1 -1
- package/src/reanimated1/core/AnimatedStopClock.js +1 -1
- package/src/reanimated1/core/AnimatedStyle.js +1 -1
- package/src/reanimated1/core/AnimatedTransform.js +1 -1
- package/src/reanimated1/core/Core.test.js +30 -0
- package/src/reanimated1/core/InternalAnimatedValue.js +1 -1
- package/src/reanimated1/core/__mocks__/AnimatedProps.js +1 -1
- package/src/reanimated1/derived/interpolate.js +1 -1
- package/src/reanimated2/Colors.ts +30 -27
- package/src/reanimated2/Easing.ts +3 -1
- package/src/reanimated2/NativeMethods.ts +26 -16
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +78 -0
- package/src/reanimated2/NativeReanimated/index.ts +18 -0
- package/src/reanimated2/PlatformChecker.ts +21 -0
- package/src/reanimated2/PropAdapters.ts +52 -34
- package/src/reanimated2/UpdateProps.ts +40 -20
- package/src/reanimated2/ViewDescriptorsSet.ts +108 -0
- package/src/reanimated2/WorkletEventHandler.ts +41 -23
- package/src/reanimated2/animation/commonTypes.ts +48 -0
- package/src/reanimated2/animation/decay.ts +141 -0
- package/src/reanimated2/animation/delay.ts +103 -0
- package/src/reanimated2/animation/index.ts +16 -0
- package/src/reanimated2/animation/repeat.ts +128 -0
- package/src/reanimated2/animation/sequence.ts +110 -0
- package/src/reanimated2/animation/spring.ts +165 -0
- package/src/reanimated2/animation/styleAnimation.ts +253 -0
- package/src/reanimated2/animation/timing.ts +109 -0
- package/src/reanimated2/animation/util.ts +242 -0
- package/src/reanimated2/commonTypes.ts +81 -0
- package/src/reanimated2/core.ts +128 -82
- package/src/reanimated2/globals.d.ts +47 -1
- package/src/reanimated2/hook/Hooks.ts +16 -0
- package/src/reanimated2/hook/commonTypes.ts +12 -0
- package/src/reanimated2/hook/index.ts +25 -0
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +110 -0
- package/src/reanimated2/hook/useAnimatedReaction.ts +49 -0
- package/src/reanimated2/hook/useAnimatedRef.ts +34 -0
- package/src/reanimated2/hook/useAnimatedScrollHandler.ts +83 -0
- package/src/reanimated2/hook/useAnimatedStyle.ts +538 -0
- package/src/reanimated2/hook/useDerivedValue.ts +48 -0
- package/src/reanimated2/hook/useSharedValue.ts +22 -0
- package/src/reanimated2/hook/utils.ts +259 -0
- package/src/reanimated2/index.ts +3 -2
- package/src/reanimated2/interpolation.ts +170 -101
- package/src/reanimated2/jestUtils.ts +0 -12
- package/src/reanimated2/js-reanimated/JSReanimated.ts +47 -22
- package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
- package/src/reanimated2/js-reanimated/index.ts +71 -0
- package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.tsx +62 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.ts +91 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +169 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +263 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +78 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +16 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +243 -121
- package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +43 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +95 -53
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +114 -64
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +179 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +93 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +132 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +333 -0
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +84 -50
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +41 -23
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +234 -154
- package/src/reanimated2/layoutReanimation/defaultAnimations/index.ts +4 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +104 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +213 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +60 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +58 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +41 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +78 -0
- package/src/reanimated2/layoutReanimation/defaultTransitions/index.ts +6 -0
- package/src/reanimated2/layoutReanimation/index.ts +3 -2
- package/src/reanimated2/platform-specific/RNRenderer.web.ts +2 -0
- package/src/reanimated2/utils.ts +21 -0
- package/android/react-native-reanimated-62-hermes.aar +0 -0
- package/android/react-native-reanimated-62-jsc.aar +0 -0
- package/ios/LayoutReanimation/REAAnimationRootView.h +0 -12
- package/ios/LayoutReanimation/REAAnimationRootView.m +0 -16
- package/ios/LayoutReanimation/REAAnimationRootViewManager.h +0 -9
- package/ios/LayoutReanimation/REAAnimationRootViewManager.m +0 -49
- package/ios/LayoutReanimation/REAReactBatchObserver.h +0 -20
- package/ios/LayoutReanimation/REAReactBatchObserver.m +0 -125
- package/ios/LayoutReanimation/REASnapshooter.h +0 -19
- package/ios/LayoutReanimation/REASnapshooter.m +0 -64
- package/ios/LayoutReanimation/REAViewTraverser.h +0 -13
- package/ios/LayoutReanimation/REAViewTraverser.m +0 -40
- package/lib/reanimated2/Hooks.js +0 -732
- package/lib/reanimated2/NativeReanimated.js +0 -4
- package/lib/reanimated2/animations.js +0 -713
- package/lib/reanimated2/js-reanimated/index.web.js +0 -20
- package/lib/reanimated2/layoutReanimation/AnimatedRoot.js +0 -55
- package/lib/reanimated2/layoutReanimation/defaultAnimationsBuilder.js +0 -374
- package/src/reanimated2/Hooks.ts +0 -918
- package/src/reanimated2/NativeReanimated.native.ts +0 -61
- package/src/reanimated2/NativeReanimated.ts +0 -5
- package/src/reanimated2/animations.ts +0 -868
- package/src/reanimated2/js-reanimated/index.js +0 -0
- package/src/reanimated2/js-reanimated/index.web.ts +0 -29
- package/src/reanimated2/layoutReanimation/AnimatedRoot.tsx +0 -68
- package/src/reanimated2/layoutReanimation/defaultAnimationsBuilder.ts +0 -440
package/src/reanimated2/core.ts
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
/* global _WORKLET _getCurrentTime _frameTimestamp _eventTimestamp, _setGlobalConsole */
|
|
2
|
-
|
|
3
|
-
// @ts-nocheck
|
|
4
|
-
import NativeReanimated from './NativeReanimated';
|
|
2
|
+
import NativeReanimatedModule from './NativeReanimated';
|
|
5
3
|
import { Platform } from 'react-native';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { nativeShouldBeMock, shouldBeUseWeb } from './PlatformChecker';
|
|
5
|
+
import {
|
|
6
|
+
BasicWorkletFunction,
|
|
7
|
+
WorkletFunction,
|
|
8
|
+
ComplexWorkletFunction,
|
|
9
|
+
SharedValue,
|
|
10
|
+
} from './commonTypes';
|
|
11
|
+
import {
|
|
12
|
+
AnimationObject,
|
|
13
|
+
PrimitiveValue,
|
|
14
|
+
Timestamp,
|
|
15
|
+
} from './animation/commonTypes';
|
|
16
|
+
import { Descriptor } from './hook/commonTypes';
|
|
17
|
+
import JSReanimated from './js-reanimated/JSReanimated';
|
|
18
|
+
|
|
19
|
+
global.__reanimatedWorkletInit = function (worklet: WorkletFunction) {
|
|
9
20
|
worklet.__worklet = true;
|
|
10
21
|
};
|
|
11
22
|
|
|
@@ -16,12 +27,25 @@ if (global._setGlobalConsole === undefined) {
|
|
|
16
27
|
};
|
|
17
28
|
}
|
|
18
29
|
|
|
19
|
-
|
|
30
|
+
export type ReanimatedConsole = Pick<
|
|
31
|
+
Console,
|
|
32
|
+
'debug' | 'log' | 'warn' | 'info' | 'error'
|
|
33
|
+
>;
|
|
34
|
+
interface WorkletValueSetterContext {
|
|
35
|
+
_animation?: AnimationObject | null;
|
|
36
|
+
_value?: PrimitiveValue | Descriptor;
|
|
37
|
+
value?: PrimitiveValue;
|
|
38
|
+
_setValue?: (val: PrimitiveValue | Descriptor) => void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const testWorklet: BasicWorkletFunction<void> = () => {
|
|
20
42
|
'worklet';
|
|
21
43
|
};
|
|
22
44
|
|
|
23
|
-
export const checkPluginState
|
|
24
|
-
|
|
45
|
+
export const checkPluginState: (throwError: boolean) => boolean = (
|
|
46
|
+
throwError = true
|
|
47
|
+
) => {
|
|
48
|
+
if (!testWorklet.__workletHash && !shouldBeUseWeb()) {
|
|
25
49
|
if (throwError) {
|
|
26
50
|
throw new Error(
|
|
27
51
|
"Reanimated 2 failed to create a worklet, maybe you forgot to add Reanimated's babel plugin?"
|
|
@@ -32,19 +56,21 @@ export const checkPluginState = (throwError = true) => {
|
|
|
32
56
|
return true;
|
|
33
57
|
};
|
|
34
58
|
|
|
35
|
-
export const isConfigured
|
|
36
|
-
|
|
59
|
+
export const isConfigured: (throwError?: boolean) => boolean = (
|
|
60
|
+
throwError = false
|
|
61
|
+
) => {
|
|
62
|
+
return checkPluginState(throwError) && !NativeReanimatedModule.useOnlyV1;
|
|
37
63
|
};
|
|
38
64
|
|
|
39
|
-
export const isConfiguredCheck = () => {
|
|
65
|
+
export const isConfiguredCheck: () => void = () => {
|
|
40
66
|
if (!isConfigured(true)) {
|
|
41
67
|
throw new Error(
|
|
42
|
-
'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/installation'
|
|
68
|
+
'If you want to use Reanimated 2 then go through our installation steps https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/installation'
|
|
43
69
|
);
|
|
44
70
|
}
|
|
45
71
|
};
|
|
46
72
|
|
|
47
|
-
function _toArrayReanimated(object) {
|
|
73
|
+
function _toArrayReanimated<T>(object: Iterable<T> | ArrayLike<T> | T[]): T[] {
|
|
48
74
|
'worklet';
|
|
49
75
|
if (Array.isArray(object)) {
|
|
50
76
|
return object;
|
|
@@ -53,19 +79,23 @@ function _toArrayReanimated(object) {
|
|
|
53
79
|
typeof Symbol !== 'undefined' &&
|
|
54
80
|
(typeof Symbol === 'function' ? Symbol.iterator : '@@iterator') in
|
|
55
81
|
Object(object)
|
|
56
|
-
)
|
|
82
|
+
) {
|
|
57
83
|
return Array.from(object);
|
|
58
|
-
|
|
84
|
+
}
|
|
85
|
+
throw new Error(
|
|
86
|
+
'Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'
|
|
87
|
+
);
|
|
59
88
|
}
|
|
60
89
|
|
|
61
|
-
function _mergeObjectsReanimated() {
|
|
90
|
+
function _mergeObjectsReanimated(): unknown {
|
|
62
91
|
'worklet';
|
|
63
92
|
// we can't use rest parameters in worklets at the moment
|
|
64
93
|
// eslint-disable-next-line prefer-rest-params
|
|
65
|
-
|
|
94
|
+
const arr = Array.from(arguments);
|
|
95
|
+
return Object.assign.apply(null, [arr[0], ...arr.slice(1)]);
|
|
66
96
|
}
|
|
67
97
|
|
|
68
|
-
global.__reanimatedWorkletInit = function (worklet) {
|
|
98
|
+
global.__reanimatedWorkletInit = function (worklet: WorkletFunction) {
|
|
69
99
|
worklet.__worklet = true;
|
|
70
100
|
|
|
71
101
|
if (worklet._closure) {
|
|
@@ -82,13 +112,13 @@ global.__reanimatedWorkletInit = function (worklet) {
|
|
|
82
112
|
}
|
|
83
113
|
};
|
|
84
114
|
|
|
85
|
-
function pushFrame(frame) {
|
|
86
|
-
|
|
115
|
+
function pushFrame(frame: (timestamp: Timestamp) => void): void {
|
|
116
|
+
(NativeReanimatedModule as JSReanimated).pushFrame(frame);
|
|
87
117
|
}
|
|
88
118
|
|
|
89
|
-
export function requestFrame(frame) {
|
|
119
|
+
export function requestFrame(frame: (timestamp: Timestamp) => void): void {
|
|
90
120
|
'worklet';
|
|
91
|
-
if (
|
|
121
|
+
if (NativeReanimatedModule.native) {
|
|
92
122
|
requestAnimationFrame(frame);
|
|
93
123
|
} else {
|
|
94
124
|
pushFrame(frame);
|
|
@@ -96,35 +126,41 @@ export function requestFrame(frame) {
|
|
|
96
126
|
}
|
|
97
127
|
|
|
98
128
|
global._WORKLET = false;
|
|
99
|
-
global._log = function (s) {
|
|
129
|
+
global._log = function (s: string) {
|
|
100
130
|
console.log(s);
|
|
101
131
|
};
|
|
102
132
|
|
|
103
|
-
export function runOnUI(
|
|
133
|
+
export function runOnUI<A extends any[], R>(
|
|
134
|
+
worklet: ComplexWorkletFunction<A, R>
|
|
135
|
+
): (...args: A) => void {
|
|
104
136
|
return makeShareable(worklet);
|
|
105
137
|
}
|
|
106
138
|
|
|
107
|
-
export function makeShareable(value) {
|
|
139
|
+
export function makeShareable<T>(value: T): T {
|
|
108
140
|
isConfiguredCheck();
|
|
109
|
-
return
|
|
141
|
+
return NativeReanimatedModule.makeShareable(value);
|
|
110
142
|
}
|
|
111
143
|
|
|
112
|
-
export function getViewProp(viewTag, propName) {
|
|
144
|
+
export function getViewProp<T>(viewTag: string, propName: string): Promise<T> {
|
|
113
145
|
return new Promise((resolve, reject) => {
|
|
114
|
-
return
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
146
|
+
return NativeReanimatedModule.getViewProp(
|
|
147
|
+
viewTag,
|
|
148
|
+
propName,
|
|
149
|
+
(result: T) => {
|
|
150
|
+
if (typeof result === 'string' && result.substr(0, 6) === 'error:') {
|
|
151
|
+
reject(result);
|
|
152
|
+
} else {
|
|
153
|
+
resolve(result);
|
|
154
|
+
}
|
|
119
155
|
}
|
|
120
|
-
|
|
156
|
+
);
|
|
121
157
|
});
|
|
122
158
|
}
|
|
123
159
|
|
|
124
|
-
let _getTimestamp;
|
|
125
|
-
if (
|
|
160
|
+
let _getTimestamp: () => number;
|
|
161
|
+
if (nativeShouldBeMock()) {
|
|
126
162
|
_getTimestamp = () => {
|
|
127
|
-
return
|
|
163
|
+
return (NativeReanimatedModule as JSReanimated).getTimestamp();
|
|
128
164
|
};
|
|
129
165
|
} else {
|
|
130
166
|
_getTimestamp = () => {
|
|
@@ -139,15 +175,18 @@ if (process.env.JEST_WORKER_ID) {
|
|
|
139
175
|
};
|
|
140
176
|
}
|
|
141
177
|
|
|
142
|
-
export function getTimestamp() {
|
|
178
|
+
export function getTimestamp(): number {
|
|
143
179
|
'worklet';
|
|
144
180
|
if (Platform.OS === 'web') {
|
|
145
|
-
return
|
|
181
|
+
return (NativeReanimatedModule as JSReanimated).getTimestamp();
|
|
146
182
|
}
|
|
147
183
|
return _getTimestamp();
|
|
148
184
|
}
|
|
149
185
|
|
|
150
|
-
function workletValueSetter(
|
|
186
|
+
function workletValueSetter(
|
|
187
|
+
this: WorkletValueSetterContext,
|
|
188
|
+
value: (() => AnimationObject) | AnimationObject | PrimitiveValue | Descriptor
|
|
189
|
+
): void {
|
|
151
190
|
'worklet';
|
|
152
191
|
const previousAnimation = this._animation;
|
|
153
192
|
if (previousAnimation) {
|
|
@@ -156,22 +195,26 @@ function workletValueSetter(value) {
|
|
|
156
195
|
}
|
|
157
196
|
if (
|
|
158
197
|
typeof value === 'function' ||
|
|
159
|
-
(value !== null &&
|
|
198
|
+
(value !== null &&
|
|
199
|
+
typeof value === 'object' &&
|
|
200
|
+
(value as AnimationObject).onFrame !== undefined)
|
|
160
201
|
) {
|
|
161
|
-
const animation =
|
|
202
|
+
const animation: AnimationObject =
|
|
203
|
+
typeof value === 'function' ? value() : (value as AnimationObject);
|
|
162
204
|
// prevent setting again to the same value
|
|
163
205
|
// and triggering the mappers that treat this value as an input
|
|
164
206
|
// this happens when the animation's target value(stored in animation.current until animation.onStart is called) is set to the same value as a current one(this._value)
|
|
165
207
|
// built in animations that are not higher order(withTiming, withSpring) hold target value in .current
|
|
166
208
|
if (this._value === animation.current && !animation.isHigherOrder) {
|
|
209
|
+
animation.callback && animation.callback(true);
|
|
167
210
|
return;
|
|
168
211
|
}
|
|
169
212
|
// animated set
|
|
170
|
-
const initializeAnimation = (timestamp) => {
|
|
213
|
+
const initializeAnimation = (timestamp: number) => {
|
|
171
214
|
animation.onStart(animation, this.value, timestamp, previousAnimation);
|
|
172
215
|
};
|
|
173
216
|
initializeAnimation(getTimestamp());
|
|
174
|
-
const step = (timestamp) => {
|
|
217
|
+
const step = (timestamp: number) => {
|
|
175
218
|
if (animation.cancelled) {
|
|
176
219
|
animation.callback && animation.callback(false /* finished */);
|
|
177
220
|
return;
|
|
@@ -201,13 +244,16 @@ function workletValueSetter(value) {
|
|
|
201
244
|
if (this._value === value) {
|
|
202
245
|
return;
|
|
203
246
|
}
|
|
204
|
-
this._value = value;
|
|
247
|
+
this._value = value as Descriptor | PrimitiveValue;
|
|
205
248
|
}
|
|
206
249
|
}
|
|
207
250
|
|
|
208
251
|
// We cannot use pushFrame
|
|
209
252
|
// so we use own implementation for js
|
|
210
|
-
function workletValueSetterJS(
|
|
253
|
+
function workletValueSetterJS(
|
|
254
|
+
this: WorkletValueSetterContext,
|
|
255
|
+
value: (() => AnimationObject) | AnimationObject | PrimitiveValue | Descriptor
|
|
256
|
+
): void {
|
|
211
257
|
const previousAnimation = this._animation;
|
|
212
258
|
if (previousAnimation) {
|
|
213
259
|
previousAnimation.cancelled = true;
|
|
@@ -215,14 +261,19 @@ function workletValueSetterJS(value) {
|
|
|
215
261
|
}
|
|
216
262
|
if (
|
|
217
263
|
typeof value === 'function' ||
|
|
218
|
-
(value !== null &&
|
|
264
|
+
(value !== null &&
|
|
265
|
+
typeof value === 'object' &&
|
|
266
|
+
(value as AnimationObject).onFrame)
|
|
219
267
|
) {
|
|
220
268
|
// animated set
|
|
221
|
-
const animation =
|
|
222
|
-
|
|
269
|
+
const animation: AnimationObject =
|
|
270
|
+
typeof value === 'function' ? value() : (value as AnimationObject);
|
|
271
|
+
let initializeAnimation: ((timestamp: number) => void) | null = (
|
|
272
|
+
timestamp: number
|
|
273
|
+
) => {
|
|
223
274
|
animation.onStart(animation, this.value, timestamp, previousAnimation);
|
|
224
275
|
};
|
|
225
|
-
const step = (timestamp) => {
|
|
276
|
+
const step = (timestamp: number) => {
|
|
226
277
|
if (animation.cancelled) {
|
|
227
278
|
animation.callback && animation.callback(false /* finished */);
|
|
228
279
|
return;
|
|
@@ -233,7 +284,7 @@ function workletValueSetterJS(value) {
|
|
|
233
284
|
}
|
|
234
285
|
const finished = animation.onFrame(animation, timestamp);
|
|
235
286
|
animation.timestamp = timestamp;
|
|
236
|
-
this._setValue(animation.current);
|
|
287
|
+
this._setValue && this._setValue(animation.current as PrimitiveValue);
|
|
237
288
|
if (finished) {
|
|
238
289
|
animation.callback && animation.callback(true /* finished */);
|
|
239
290
|
} else {
|
|
@@ -245,46 +296,51 @@ function workletValueSetterJS(value) {
|
|
|
245
296
|
|
|
246
297
|
requestFrame(step);
|
|
247
298
|
} else {
|
|
248
|
-
this._setValue(value);
|
|
299
|
+
this._setValue && this._setValue(value as PrimitiveValue | Descriptor);
|
|
249
300
|
}
|
|
250
301
|
}
|
|
251
302
|
|
|
252
|
-
export function makeMutable(value) {
|
|
303
|
+
export function makeMutable<T>(value: T): SharedValue<T> {
|
|
253
304
|
isConfiguredCheck();
|
|
254
|
-
return
|
|
305
|
+
return NativeReanimatedModule.makeMutable(value);
|
|
255
306
|
}
|
|
256
307
|
|
|
257
|
-
export function makeRemote(object = {}) {
|
|
308
|
+
export function makeRemote<T>(object = {}): T {
|
|
258
309
|
isConfiguredCheck();
|
|
259
|
-
return
|
|
310
|
+
return NativeReanimatedModule.makeRemote(object);
|
|
260
311
|
}
|
|
261
312
|
|
|
262
313
|
export function startMapper(
|
|
263
|
-
mapper,
|
|
264
|
-
inputs = [],
|
|
265
|
-
outputs = [],
|
|
266
|
-
updater = () => {
|
|
314
|
+
mapper: () => void,
|
|
315
|
+
inputs: any[] = [],
|
|
316
|
+
outputs: any[] = [],
|
|
317
|
+
updater: () => void = () => {
|
|
267
318
|
// noop
|
|
268
319
|
},
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
) {
|
|
320
|
+
viewDescriptors: Descriptor[] | SharedValue<Descriptor[]> = []
|
|
321
|
+
): number {
|
|
272
322
|
isConfiguredCheck();
|
|
273
|
-
return
|
|
323
|
+
return NativeReanimatedModule.startMapper(
|
|
274
324
|
mapper,
|
|
275
325
|
inputs,
|
|
276
326
|
outputs,
|
|
277
327
|
updater,
|
|
278
|
-
|
|
279
|
-
name
|
|
328
|
+
viewDescriptors
|
|
280
329
|
);
|
|
281
330
|
}
|
|
282
331
|
|
|
283
|
-
export function stopMapper(mapperId) {
|
|
284
|
-
|
|
332
|
+
export function stopMapper(mapperId: number): void {
|
|
333
|
+
NativeReanimatedModule.stopMapper(mapperId);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export interface RunOnJSFunction<A extends any[], R> {
|
|
337
|
+
__callAsync?: (...args: A) => void;
|
|
338
|
+
(...args: A): R;
|
|
285
339
|
}
|
|
286
340
|
|
|
287
|
-
export
|
|
341
|
+
export function runOnJS<A extends any[], R>(
|
|
342
|
+
fun: RunOnJSFunction<A, R>
|
|
343
|
+
): () => void {
|
|
288
344
|
'worklet';
|
|
289
345
|
if (!_WORKLET) {
|
|
290
346
|
return fun;
|
|
@@ -296,21 +352,11 @@ export const runOnJS = (fun) => {
|
|
|
296
352
|
} else {
|
|
297
353
|
return fun.__callAsync;
|
|
298
354
|
}
|
|
299
|
-
};
|
|
300
|
-
|
|
301
|
-
export function createAnimatedPropAdapter(adapter, nativeProps) {
|
|
302
|
-
const nativePropsToAdd = {};
|
|
303
|
-
// eslint-disable-next-line no-unused-expressions
|
|
304
|
-
nativeProps?.forEach((prop) => {
|
|
305
|
-
nativePropsToAdd[prop] = true;
|
|
306
|
-
});
|
|
307
|
-
addWhitelistedNativeProps(nativePropsToAdd);
|
|
308
|
-
return adapter;
|
|
309
355
|
}
|
|
310
356
|
|
|
311
|
-
if (!
|
|
312
|
-
|
|
313
|
-
|
|
357
|
+
if (!NativeReanimatedModule.useOnlyV1) {
|
|
358
|
+
NativeReanimatedModule.installCoreFunctions(
|
|
359
|
+
NativeReanimatedModule.native ? workletValueSetter : workletValueSetterJS
|
|
314
360
|
);
|
|
315
361
|
|
|
316
362
|
const capturableConsole = console;
|
|
@@ -1 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
import { AnimatedStyle, StyleProps, WorkletFunction } from './commonTypes';
|
|
2
|
+
import { ReanimatedConsole } from './core';
|
|
3
|
+
import { MeasuredDimensions } from './NativeMethods';
|
|
4
|
+
import { NativeReanimated } from './NativeReanimated/NativeReanimated';
|
|
5
|
+
declare global {
|
|
6
|
+
const _WORKLET: boolean;
|
|
7
|
+
const _frameTimestamp: number;
|
|
8
|
+
const _eventTimestamp: number;
|
|
9
|
+
const _setGlobalConsole: (console?: ReanimatedConsole) => void;
|
|
10
|
+
const _getCurrentTime: () => number;
|
|
11
|
+
const _stopObservingProgress: (tag: number, flag: boolean) => void;
|
|
12
|
+
const _startObservingProgress: (
|
|
13
|
+
tag: number,
|
|
14
|
+
flag: { value: boolean; _value: boolean }
|
|
15
|
+
) => void;
|
|
16
|
+
const _updateProps: (
|
|
17
|
+
tag: number,
|
|
18
|
+
name: string,
|
|
19
|
+
updates: StyleProps | AnimatedStyle
|
|
20
|
+
) => void;
|
|
21
|
+
const _measure: (viewTag: number) => MeasuredDimensions;
|
|
22
|
+
const _scrollTo: (
|
|
23
|
+
viewTag: number,
|
|
24
|
+
x: number,
|
|
25
|
+
y: number,
|
|
26
|
+
animated: boolean
|
|
27
|
+
) => void;
|
|
28
|
+
namespace NodeJS {
|
|
29
|
+
interface Global {
|
|
30
|
+
__reanimatedWorkletInit: (worklet: WorkletFunction) => void;
|
|
31
|
+
_setGlobalConsole: (console?: ReanimatedConsole) => void;
|
|
32
|
+
_log: (s: string) => void;
|
|
33
|
+
_WORKLET: boolean;
|
|
34
|
+
__reanimatedModuleProxy: NativeReanimated;
|
|
35
|
+
LayoutAnimationRepository: {
|
|
36
|
+
configs: Record<string, unknown>;
|
|
37
|
+
registerConfig(tag: number, config: Record<string, unknown>): void;
|
|
38
|
+
removeConfig(tag: number): void;
|
|
39
|
+
startAnimationForTag(
|
|
40
|
+
tag: number,
|
|
41
|
+
type: string,
|
|
42
|
+
yogaValues: unknown
|
|
43
|
+
): void;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { DependencyList } from './commonTypes';
|
|
3
|
+
import { useAnimatedStyle } from './useAnimatedStyle';
|
|
4
|
+
|
|
5
|
+
// TODO: we should make sure that when useAP is used we are not assigning styles
|
|
6
|
+
// when you need styles to animated you should always use useAS
|
|
7
|
+
export const useAnimatedProps = useAnimatedStyle;
|
|
8
|
+
|
|
9
|
+
export function useWorkletCallback<A extends unknown[], R>(
|
|
10
|
+
fun: (...args: A) => R,
|
|
11
|
+
deps?: DependencyList
|
|
12
|
+
): (...args: Parameters<typeof fun>) => R {
|
|
13
|
+
return useCallback(fun, deps ?? []);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { useEvent, useHandler } from './utils';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type DependencyList = Array<unknown> | undefined;
|
|
2
|
+
|
|
3
|
+
export type Context = Record<string, unknown>;
|
|
4
|
+
|
|
5
|
+
export interface ContextWithDependencies<TContext extends Context> {
|
|
6
|
+
context: TContext;
|
|
7
|
+
savedDependencies: DependencyList;
|
|
8
|
+
}
|
|
9
|
+
export interface Descriptor {
|
|
10
|
+
tag: number;
|
|
11
|
+
name: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { DependencyList, Context } from './commonTypes';
|
|
2
|
+
export {
|
|
3
|
+
useAnimatedProps,
|
|
4
|
+
useEvent,
|
|
5
|
+
useHandler,
|
|
6
|
+
useWorkletCallback,
|
|
7
|
+
} from './Hooks';
|
|
8
|
+
export { useSharedValue } from './useSharedValue';
|
|
9
|
+
export { useAnimatedStyle, AnimatedStyleResult } from './useAnimatedStyle';
|
|
10
|
+
export {
|
|
11
|
+
useAnimatedGestureHandler,
|
|
12
|
+
GestureHandlerEvent,
|
|
13
|
+
GestureHandlers,
|
|
14
|
+
} from './useAnimatedGestureHandler';
|
|
15
|
+
export {
|
|
16
|
+
useAnimatedReaction,
|
|
17
|
+
AnimatedReactionWorkletFunction,
|
|
18
|
+
} from './useAnimatedReaction';
|
|
19
|
+
export { useAnimatedRef } from './useAnimatedRef';
|
|
20
|
+
export {
|
|
21
|
+
useAnimatedScrollHandler,
|
|
22
|
+
ScrollHandler,
|
|
23
|
+
ScrollHandlers,
|
|
24
|
+
} from './useAnimatedScrollHandler';
|
|
25
|
+
export { useDerivedValue, DerivedValue } from './useDerivedValue';
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { WorkletFunction } from '../commonTypes';
|
|
3
|
+
import { isWeb } from '../PlatformChecker';
|
|
4
|
+
import WorkletEventHandler from '../WorkletEventHandler';
|
|
5
|
+
import { Context, DependencyList } from './commonTypes';
|
|
6
|
+
import { useEvent, useHandler } from './Hooks';
|
|
7
|
+
|
|
8
|
+
interface Handler<T, TContext extends Context> extends WorkletFunction {
|
|
9
|
+
(event: T, context: TContext, isCanceledOrFailed?: boolean): void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface GestureHandlers<T, TContext extends Context> {
|
|
13
|
+
[key: string]: Handler<T, TContext> | undefined;
|
|
14
|
+
onStart?: Handler<T, TContext>;
|
|
15
|
+
onActive?: Handler<T, TContext>;
|
|
16
|
+
onEnd?: Handler<T, TContext>;
|
|
17
|
+
onFail?: Handler<T, TContext>;
|
|
18
|
+
onCancel?: Handler<T, TContext>;
|
|
19
|
+
onFinish?: Handler<T, TContext>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export enum EventType {
|
|
23
|
+
UNDETERMINED = 0,
|
|
24
|
+
FAILED,
|
|
25
|
+
BEGAN,
|
|
26
|
+
CANCELLED,
|
|
27
|
+
ACTIVE,
|
|
28
|
+
END,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface GestureHandlerStateChangeNativeEvent {
|
|
32
|
+
handlerTag: number;
|
|
33
|
+
numberOfPointers: number;
|
|
34
|
+
state: EventType;
|
|
35
|
+
oldState: EventType;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface GestureHandlerEvent<T>
|
|
39
|
+
extends GestureHandlerStateChangeNativeEvent {
|
|
40
|
+
nativeEvent: T;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function useAnimatedGestureHandler<
|
|
44
|
+
T extends GestureHandlerEvent<T>,
|
|
45
|
+
TContext extends Context
|
|
46
|
+
>(
|
|
47
|
+
handlers: GestureHandlers<T, TContext>,
|
|
48
|
+
dependencies?: DependencyList
|
|
49
|
+
): MutableRefObject<WorkletEventHandler<T> | null> | ((e: T) => void) {
|
|
50
|
+
const { context, doDependenciesDiffer, useWeb } = useHandler<T, TContext>(
|
|
51
|
+
handlers,
|
|
52
|
+
dependencies
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const handler = (e: T) => {
|
|
56
|
+
'worklet';
|
|
57
|
+
const event = useWeb ? e.nativeEvent : e;
|
|
58
|
+
|
|
59
|
+
if (event.state === EventType.BEGAN && handlers.onStart) {
|
|
60
|
+
handlers.onStart(event, context);
|
|
61
|
+
}
|
|
62
|
+
if (event.state === EventType.ACTIVE && handlers.onActive) {
|
|
63
|
+
handlers.onActive(event, context);
|
|
64
|
+
}
|
|
65
|
+
if (
|
|
66
|
+
event.oldState === EventType.ACTIVE &&
|
|
67
|
+
event.state === EventType.END &&
|
|
68
|
+
handlers.onEnd
|
|
69
|
+
) {
|
|
70
|
+
handlers.onEnd(event, context);
|
|
71
|
+
}
|
|
72
|
+
if (
|
|
73
|
+
event.oldState === EventType.BEGAN &&
|
|
74
|
+
event.state === EventType.FAILED &&
|
|
75
|
+
handlers.onFail
|
|
76
|
+
) {
|
|
77
|
+
handlers.onFail(event, context);
|
|
78
|
+
}
|
|
79
|
+
if (
|
|
80
|
+
event.oldState === EventType.ACTIVE &&
|
|
81
|
+
event.state === EventType.CANCELLED &&
|
|
82
|
+
handlers.onCancel
|
|
83
|
+
) {
|
|
84
|
+
handlers.onCancel(event, context);
|
|
85
|
+
}
|
|
86
|
+
if (
|
|
87
|
+
(event.oldState === EventType.BEGAN ||
|
|
88
|
+
event.oldState === EventType.ACTIVE) &&
|
|
89
|
+
event.state !== EventType.BEGAN &&
|
|
90
|
+
event.state !== EventType.ACTIVE &&
|
|
91
|
+
handlers.onFinish
|
|
92
|
+
) {
|
|
93
|
+
handlers.onFinish(
|
|
94
|
+
event,
|
|
95
|
+
context,
|
|
96
|
+
event.state === EventType.CANCELLED || event.state === EventType.FAILED
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
if (isWeb()) {
|
|
102
|
+
return handler;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return useEvent<T>(
|
|
106
|
+
handler,
|
|
107
|
+
['onGestureHandlerStateChange', 'onGestureHandlerEvent'],
|
|
108
|
+
doDependenciesDiffer
|
|
109
|
+
);
|
|
110
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { BasicWorkletFunction, WorkletFunction } from '../commonTypes';
|
|
3
|
+
import { startMapper, stopMapper } from '../core';
|
|
4
|
+
import { DependencyList } from './commonTypes';
|
|
5
|
+
import { useSharedValue } from './useSharedValue';
|
|
6
|
+
|
|
7
|
+
export interface AnimatedReactionWorkletFunction<T> extends WorkletFunction {
|
|
8
|
+
(prepared: T, previous: T | null): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @param prepare - worklet used for data preparation for the second parameter
|
|
12
|
+
* @param react - worklet which takes data prepared by the one in the first parameter and performs certain actions
|
|
13
|
+
* the first worklet defines the inputs, in other words on which shared values change will it be called.
|
|
14
|
+
* 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.
|
|
15
|
+
*/
|
|
16
|
+
export function useAnimatedReaction<T>(
|
|
17
|
+
prepare: BasicWorkletFunction<T>,
|
|
18
|
+
react: AnimatedReactionWorkletFunction<T>,
|
|
19
|
+
dependencies: DependencyList
|
|
20
|
+
): void {
|
|
21
|
+
const previous = useSharedValue<T | null>(null);
|
|
22
|
+
if (dependencies === undefined) {
|
|
23
|
+
dependencies = [
|
|
24
|
+
Object.values(prepare._closure ?? {}),
|
|
25
|
+
Object.values(react._closure ?? {}),
|
|
26
|
+
prepare.__workletHash,
|
|
27
|
+
react.__workletHash,
|
|
28
|
+
];
|
|
29
|
+
} else {
|
|
30
|
+
dependencies.push(prepare.__workletHash, react.__workletHash);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const fun = () => {
|
|
35
|
+
'worklet';
|
|
36
|
+
const input = prepare();
|
|
37
|
+
react(input, previous.value);
|
|
38
|
+
previous.value = input;
|
|
39
|
+
};
|
|
40
|
+
const mapperId = startMapper(
|
|
41
|
+
fun,
|
|
42
|
+
Object.values(prepare._closure ?? {}),
|
|
43
|
+
[]
|
|
44
|
+
);
|
|
45
|
+
return () => {
|
|
46
|
+
stopMapper(mapperId);
|
|
47
|
+
};
|
|
48
|
+
}, dependencies);
|
|
49
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Component, useRef } from 'react';
|
|
2
|
+
import { getTag } from '../NativeMethods';
|
|
3
|
+
import { useSharedValue } from './useSharedValue';
|
|
4
|
+
|
|
5
|
+
export interface RefObjectFunction<T> {
|
|
6
|
+
current: T | null;
|
|
7
|
+
(component?: T): number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function useAnimatedRef<T extends Component>(): RefObjectFunction<T> {
|
|
11
|
+
const tag = useSharedValue<number | null>(-1);
|
|
12
|
+
const ref = useRef<RefObjectFunction<T>>();
|
|
13
|
+
|
|
14
|
+
if (!ref.current) {
|
|
15
|
+
const fun: RefObjectFunction<T> = <RefObjectFunction<T>>((component) => {
|
|
16
|
+
'worklet';
|
|
17
|
+
// enters when ref is set by attaching to a component
|
|
18
|
+
if (component) {
|
|
19
|
+
tag.value = getTag(component);
|
|
20
|
+
fun.current = component;
|
|
21
|
+
}
|
|
22
|
+
return tag.value;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(fun, 'current', {
|
|
26
|
+
value: null,
|
|
27
|
+
writable: true,
|
|
28
|
+
enumerable: false,
|
|
29
|
+
});
|
|
30
|
+
ref.current = fun;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return ref.current;
|
|
34
|
+
}
|