react-native-reanimated 2.16.0 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/.gradle/7.5.1/checksums/checksums.lock +0 -0
- package/android/.gradle/7.5.1/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/7.5.1/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.5.1/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.5.1/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/7.5.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.5.1/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.5.1/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.5.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.5.1/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.5.1/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/file-system.probe +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/react-native-reanimated-67-hermes.aar +0 -0
- package/android/react-native-reanimated-67-jsc.aar +0 -0
- package/android/react-native-reanimated-68-hermes.aar +0 -0
- package/android/react-native-reanimated-68-jsc.aar +0 -0
- package/android/react-native-reanimated-69-hermes.aar +0 -0
- package/android/react-native-reanimated-69-jsc.aar +0 -0
- package/android/react-native-reanimated-70-hermes.aar +0 -0
- package/android/react-native-reanimated-70-jsc.aar +0 -0
- package/android/react-native-reanimated-71-hermes.aar +0 -0
- package/android/react-native-reanimated-71-jsc.aar +0 -0
- package/lib/Animated.js +9 -0
- package/lib/ConfigHelper.js +145 -0
- package/lib/ReanimatedEventEmitter.js +3 -0
- package/lib/ReanimatedModule.js +2 -0
- package/lib/ReanimatedModule.macos.js +2 -0
- package/lib/ReanimatedModule.native.js +12 -0
- package/lib/ReanimatedModule.windows.js +2 -0
- package/lib/ReanimatedModuleCompat.js +66 -0
- package/lib/__mocks__/ReanimatedEventEmitter.js +8 -0
- package/lib/__mocks__/ReanimatedModule.native.js +11 -0
- package/lib/createAnimatedComponent.js +518 -0
- package/lib/index.js +14 -0
- package/lib/index.web.js +6 -0
- package/lib/reanimated1/Easing.js +231 -0
- package/lib/reanimated1/SpringConfig.js +79 -0
- package/lib/reanimated1/Transitioning.js +158 -0
- package/lib/reanimated1/animations/Animation.js +32 -0
- package/lib/reanimated1/animations/SpringUtils.js +199 -0
- package/lib/reanimated1/animations/backwardCompatibleAnimWrapper.js +117 -0
- package/lib/reanimated1/animations/decay.js +54 -0
- package/lib/reanimated1/animations/spring.js +198 -0
- package/lib/reanimated1/animations/timing.js +74 -0
- package/lib/reanimated1/base.js +13 -0
- package/lib/reanimated1/core/AnimatedAlways.js +33 -0
- package/lib/reanimated1/core/AnimatedBezier.js +150 -0
- package/lib/reanimated1/core/AnimatedBlock.js +52 -0
- package/lib/reanimated1/core/AnimatedCall.js +55 -0
- package/lib/reanimated1/core/AnimatedCallFunc.js +72 -0
- package/lib/reanimated1/core/AnimatedClock.js +90 -0
- package/lib/reanimated1/core/AnimatedClockTest.js +22 -0
- package/lib/reanimated1/core/AnimatedCode.js +32 -0
- package/lib/reanimated1/core/AnimatedConcat.js +32 -0
- package/lib/reanimated1/core/AnimatedCond.js +57 -0
- package/lib/reanimated1/core/AnimatedDebug.js +62 -0
- package/lib/reanimated1/core/AnimatedEvent.js +126 -0
- package/lib/reanimated1/core/AnimatedFunction.js +55 -0
- package/lib/reanimated1/core/AnimatedNode.js +223 -0
- package/lib/reanimated1/core/AnimatedOperator.js +103 -0
- package/lib/reanimated1/core/AnimatedParam.js +88 -0
- package/lib/reanimated1/core/AnimatedProps.js +108 -0
- package/lib/reanimated1/core/AnimatedSet.js +38 -0
- package/lib/reanimated1/core/AnimatedStartClock.js +30 -0
- package/lib/reanimated1/core/AnimatedStopClock.js +30 -0
- package/lib/reanimated1/core/AnimatedStyle.js +78 -0
- package/lib/reanimated1/core/AnimatedTransform.js +78 -0
- package/lib/reanimated1/core/AnimatedValue.js +38 -0
- package/lib/reanimated1/core/InternalAnimatedValue.js +87 -0
- package/lib/reanimated1/core/__mocks__/AnimatedProps.js +86 -0
- package/lib/reanimated1/core/createEventObjectProxyPolyfill.js +44 -0
- package/lib/reanimated1/derived/__mocks__/evaluateOnce.js +14 -0
- package/lib/reanimated1/derived/acc.js +11 -0
- package/lib/reanimated1/derived/color.js +47 -0
- package/lib/reanimated1/derived/diff.js +16 -0
- package/lib/reanimated1/derived/diffClamp.js +11 -0
- package/lib/reanimated1/derived/evaluateOnce.js +35 -0
- package/lib/reanimated1/derived/index.js +8 -0
- package/lib/reanimated1/derived/interpolate.js +152 -0
- package/lib/reanimated1/derived/interpolateColors.js +62 -0
- package/lib/reanimated1/derived/onChange.js +14 -0
- package/lib/reanimated1/derived/useCode.js +41 -0
- package/lib/reanimated1/index.js +53 -0
- package/lib/reanimated1/operators.js +35 -0
- package/lib/reanimated1/useValue.js +10 -0
- package/lib/reanimated1/val.js +3 -0
- package/lib/reanimated2/Bezier.js +126 -0
- package/lib/reanimated2/Colors.js +538 -0
- package/lib/reanimated2/Easing.js +248 -0
- package/lib/reanimated2/NativeMethods.js +94 -0
- package/lib/reanimated2/NativeReanimated/NativeReanimated.js +60 -0
- package/lib/reanimated2/NativeReanimated/index.js +11 -0
- package/lib/reanimated2/PlatformChecker.js +16 -0
- package/lib/reanimated2/PropAdapters.js +55 -0
- package/lib/reanimated2/UpdateProps.js +55 -0
- package/lib/reanimated2/ViewDescriptorsSet.js +75 -0
- package/lib/reanimated2/WorkletEventHandler.js +37 -0
- package/lib/reanimated2/__mocks__/MutableValue.js +13 -0
- package/lib/reanimated2/__mocks__/NativeReanimated.js +20 -0
- 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 +69 -0
- package/lib/reanimated2/animation/spring.js +103 -0
- package/lib/reanimated2/animation/styleAnimation.js +174 -0
- package/lib/reanimated2/animation/timing.js +64 -0
- package/lib/reanimated2/animation/util.js +183 -0
- package/lib/reanimated2/commonTypes.js +8 -0
- package/lib/reanimated2/component/FlatList.js +30 -0
- package/lib/reanimated2/component/Image.js +4 -0
- package/lib/reanimated2/component/ScrollView.js +4 -0
- package/lib/reanimated2/component/Text.js +4 -0
- package/lib/reanimated2/component/View.js +4 -0
- package/lib/reanimated2/core.js +269 -0
- package/lib/reanimated2/frameCallback/FrameCallbackRegistryJS.js +32 -0
- package/lib/reanimated2/frameCallback/FrameCallbackRegistryUI.js +76 -0
- package/lib/reanimated2/globals.d.ts +91 -0
- package/lib/reanimated2/hook/Hooks.js +9 -0
- package/lib/reanimated2/hook/commonTypes.js +1 -0
- package/lib/reanimated2/hook/index.js +12 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +49 -0
- package/lib/reanimated2/hook/useAnimatedKeyboard.js +31 -0
- package/lib/reanimated2/hook/useAnimatedReaction.js +44 -0
- package/lib/reanimated2/hook/useAnimatedRef.js +25 -0
- package/lib/reanimated2/hook/useAnimatedScrollHandler.js +41 -0
- package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +402 -0
- package/lib/reanimated2/hook/useDerivedValue.js +43 -0
- package/lib/reanimated2/hook/useFrameCallback.js +23 -0
- package/lib/reanimated2/hook/useScrollViewOffset.js +27 -0
- package/lib/reanimated2/hook/useSharedValue.js +17 -0
- package/lib/reanimated2/hook/utils.js +165 -0
- package/lib/reanimated2/index.js +12 -0
- package/lib/reanimated2/interpolateColor.js +157 -0
- package/lib/reanimated2/interpolation.js +127 -0
- package/lib/reanimated2/jestUtils.js +175 -0
- package/lib/reanimated2/js-reanimated/JSReanimated.js +106 -0
- package/lib/reanimated2/js-reanimated/Mapper.js +43 -0
- package/lib/reanimated2/js-reanimated/MapperRegistry.js +101 -0
- package/lib/reanimated2/js-reanimated/MutableValue.js +29 -0
- package/lib/reanimated2/js-reanimated/commonTypes.js +1 -0
- package/lib/reanimated2/js-reanimated/global.js +36 -0
- package/lib/reanimated2/js-reanimated/index.js +35 -0
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +67 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +69 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +133 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +194 -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 +374 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +36 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +275 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +385 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +136 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +81 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +120 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +273 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +201 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +101 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +457 -0
- package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +10 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +90 -0
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +132 -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 +4 -0
- package/lib/reanimated2/mock.js +75 -0
- package/lib/reanimated2/platform-specific/RNRenderer.js +3 -0
- package/lib/reanimated2/platform-specific/RNRenderer.web.js +3 -0
- package/lib/reanimated2/platform-specific/checkVersion.js +28 -0
- package/lib/reanimated2/platform-specific/checkVersion.web.js +6 -0
- package/lib/reanimated2/utils.js +16 -0
- package/lib/setAndForwardRef.js +19 -0
- package/lib/types/lib/Animated.d.ts +8 -0
- package/lib/types/lib/ConfigHelper.d.ts +12 -0
- package/lib/types/lib/ReanimatedEventEmitter.d.ts +3 -0
- package/lib/types/lib/ReanimatedModule.d.ts +2 -0
- package/lib/types/lib/ReanimatedModule.macos.d.ts +2 -0
- package/lib/types/lib/ReanimatedModule.native.d.ts +2 -0
- package/lib/types/lib/ReanimatedModule.windows.d.ts +2 -0
- package/lib/types/lib/ReanimatedModuleCompat.d.ts +14 -0
- package/lib/types/lib/createAnimatedComponent.d.ts +33 -0
- package/lib/types/lib/index.d.ts +4 -0
- package/lib/types/lib/index.web.d.ts +4 -0
- package/lib/types/lib/reanimated2/Bezier.d.ts +6 -0
- package/lib/types/lib/reanimated2/Colors.d.ts +33 -0
- package/lib/types/lib/reanimated2/Easing.d.ts +172 -0
- package/lib/types/lib/reanimated2/NativeMethods.d.ts +7 -0
- package/lib/types/lib/reanimated2/NativeReanimated/NativeReanimated.d.ts +22 -0
- package/lib/types/lib/reanimated2/NativeReanimated/index.d.ts +3 -0
- package/lib/types/lib/reanimated2/PlatformChecker.d.ts +5 -0
- package/lib/types/lib/reanimated2/PropAdapters.d.ts +4 -0
- package/lib/types/lib/reanimated2/UpdateProps.d.ts +9 -0
- package/lib/types/lib/reanimated2/ViewDescriptorsSet.d.ts +20 -0
- package/lib/types/lib/reanimated2/WorkletEventHandler.d.ts +13 -0
- package/lib/types/lib/reanimated2/__mocks__/MutableValue.d.ts +5 -0
- package/lib/types/lib/reanimated2/__mocks__/NativeReanimated.d.ts +13 -0
- package/lib/types/lib/reanimated2/animation/commonTypes.d.ts +27 -0
- package/lib/types/lib/reanimated2/animation/decay.d.ts +19 -0
- package/lib/types/lib/reanimated2/animation/delay.d.ts +7 -0
- package/lib/types/lib/reanimated2/animation/index.d.ts +9 -0
- package/lib/types/lib/reanimated2/animation/repeat.d.ts +12 -0
- package/lib/types/lib/reanimated2/animation/sequence.d.ts +7 -0
- package/lib/types/lib/reanimated2/animation/spring.d.ts +22 -0
- package/lib/types/lib/reanimated2/animation/styleAnimation.d.ts +7 -0
- package/lib/types/lib/reanimated2/animation/timing.d.ts +21 -0
- package/lib/types/lib/reanimated2/animation/util.d.ts +9 -0
- package/lib/types/lib/reanimated2/commonTypes.d.ts +99 -0
- package/lib/types/lib/reanimated2/component/FlatList.d.ts +9 -0
- package/lib/types/lib/reanimated2/component/Image.d.ts +3 -0
- package/lib/types/lib/reanimated2/component/ScrollView.d.ts +3 -0
- package/lib/types/lib/reanimated2/component/Text.d.ts +3 -0
- package/lib/types/lib/reanimated2/component/View.d.ts +3 -0
- package/lib/types/lib/reanimated2/core.d.ts +24 -0
- package/lib/types/lib/reanimated2/frameCallback/FrameCallbackRegistryJS.d.ts +8 -0
- package/lib/types/lib/reanimated2/frameCallback/FrameCallbackRegistryUI.d.ts +20 -0
- package/lib/types/lib/reanimated2/hook/Hooks.d.ts +5 -0
- package/lib/types/lib/reanimated2/hook/commonTypes.d.ts +14 -0
- package/lib/types/lib/reanimated2/hook/index.d.ts +14 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedGestureHandler.d.ts +35 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedKeyboard.d.ts +2 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedReaction.d.ts +12 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedRef.d.ts +3 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedScrollHandler.d.ts +20 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedSensor.d.ts +18 -0
- package/lib/types/lib/reanimated2/hook/useAnimatedStyle.d.ts +11 -0
- package/lib/types/lib/reanimated2/hook/useDerivedValue.d.ts +4 -0
- package/lib/types/lib/reanimated2/hook/useFrameCallback.d.ts +7 -0
- package/lib/types/lib/reanimated2/hook/useScrollViewOffset.d.ts +4 -0
- package/lib/types/lib/reanimated2/hook/useSharedValue.d.ts +2 -0
- package/lib/types/lib/reanimated2/hook/utils.d.ts +28 -0
- package/lib/types/lib/reanimated2/index.d.ts +12 -0
- package/lib/types/lib/reanimated2/interpolateColor.d.ts +32 -0
- package/lib/types/lib/reanimated2/interpolation.d.ts +14 -0
- package/lib/types/lib/reanimated2/jestUtils.d.ts +12 -0
- package/lib/types/lib/reanimated2/js-reanimated/JSReanimated.d.ts +32 -0
- package/lib/types/lib/reanimated2/js-reanimated/Mapper.d.ts +14 -0
- package/lib/types/lib/reanimated2/js-reanimated/MapperRegistry.d.ts +14 -0
- package/lib/types/lib/reanimated2/js-reanimated/MutableValue.d.ts +14 -0
- package/lib/types/lib/reanimated2/js-reanimated/commonTypes.d.ts +44 -0
- package/lib/types/lib/reanimated2/js-reanimated/global.d.ts +2 -0
- package/lib/types/lib/reanimated2/js-reanimated/index.d.ts +15 -0
- package/lib/types/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.d.ts +1 -0
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.d.ts +22 -0
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.d.ts +38 -0
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.d.ts +25 -0
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.d.ts +81 -0
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/index.d.ts +4 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.d.ts +62 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Default.d.ts +4 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.d.ts +42 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.d.ts +50 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.d.ts +18 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.d.ts +10 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.d.ts +18 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.d.ts +34 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.d.ts +34 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.d.ts +18 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.d.ts +66 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/index.d.ts +10 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.d.ts +19 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.d.ts +13 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.d.ts +6 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.d.ts +6 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.d.ts +7 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.d.ts +9 -0
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/index.d.ts +6 -0
- package/lib/types/lib/reanimated2/layoutReanimation/index.d.ts +4 -0
- package/lib/types/lib/reanimated2/mock.d.ts +61 -0
- package/lib/types/lib/reanimated2/platform-specific/RNRenderer.d.ts +1 -0
- package/lib/types/lib/reanimated2/platform-specific/RNRenderer.web.d.ts +0 -0
- package/lib/types/lib/reanimated2/platform-specific/checkVersion.d.ts +4 -0
- package/lib/types/lib/reanimated2/platform-specific/checkVersion.web.d.ts +5 -0
- package/lib/types/lib/reanimated2/utils.d.ts +11 -0
- package/lib/types/lib/setAndForwardRef.d.ts +40 -0
- package/package.json +1 -1
- package/src/reanimated1/core/Core.test.js +0 -30
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import ReanimatedModule from '../../ReanimatedModule';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
3
|
+
|
|
4
|
+
const UPDATED_NODES = [];
|
|
5
|
+
|
|
6
|
+
let loopID = 1;
|
|
7
|
+
let propUpdatesEnqueued = null;
|
|
8
|
+
let nodeCount = 0;
|
|
9
|
+
let callID = '';
|
|
10
|
+
|
|
11
|
+
export function getCallID() {
|
|
12
|
+
return callID;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function setCallID(nextCallID) {
|
|
16
|
+
callID = nextCallID;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function sanitizeConfig(config) {
|
|
20
|
+
if (
|
|
21
|
+
Platform.OS === 'web' ||
|
|
22
|
+
Platform.OS === 'windows' ||
|
|
23
|
+
Platform.OS === 'macos' ||
|
|
24
|
+
['undefined', 'string', 'function', 'boolean', 'number'].includes(
|
|
25
|
+
typeof config
|
|
26
|
+
)
|
|
27
|
+
) {
|
|
28
|
+
return config;
|
|
29
|
+
} else if (Array.isArray(config)) {
|
|
30
|
+
return config.map(sanitizeConfig);
|
|
31
|
+
} else if (config instanceof AnimatedNode) {
|
|
32
|
+
return config.__nodeID;
|
|
33
|
+
} else if (typeof config === 'object') {
|
|
34
|
+
const output = {};
|
|
35
|
+
for (const property in config) {
|
|
36
|
+
if (property in config) {
|
|
37
|
+
output[property] = sanitizeConfig(config[property]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
// unhandled
|
|
43
|
+
return config;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function runPropUpdates() {
|
|
47
|
+
const visitedNodes = new Set();
|
|
48
|
+
const findAndUpdateNodes = (node) => {
|
|
49
|
+
if (!node) {
|
|
50
|
+
console.warn('findAndUpdateNodes was passed a nullish node');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (visitedNodes.has(node)) {
|
|
55
|
+
return;
|
|
56
|
+
} else {
|
|
57
|
+
visitedNodes.add(node);
|
|
58
|
+
}
|
|
59
|
+
if (typeof node.update === 'function') {
|
|
60
|
+
node.update();
|
|
61
|
+
} else {
|
|
62
|
+
const nodes = node.__getChildren();
|
|
63
|
+
if (nodes) {
|
|
64
|
+
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
65
|
+
findAndUpdateNodes(nodes[i]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
for (let i = 0; i < UPDATED_NODES.length; i++) {
|
|
71
|
+
const node = UPDATED_NODES[i];
|
|
72
|
+
findAndUpdateNodes(node);
|
|
73
|
+
}
|
|
74
|
+
UPDATED_NODES.length = 0; // clear array
|
|
75
|
+
propUpdatesEnqueued = null;
|
|
76
|
+
loopID += 1;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const scheduleUpdates =
|
|
80
|
+
Platform.OS === 'web' ? requestAnimationFrame : setImmediate;
|
|
81
|
+
|
|
82
|
+
export default class AnimatedNode {
|
|
83
|
+
__nodeID;
|
|
84
|
+
__lastLoopID = { '': -1 };
|
|
85
|
+
__memoizedValue = { '': null };
|
|
86
|
+
__children = [];
|
|
87
|
+
|
|
88
|
+
constructor(nodeConfig, inputNodes) {
|
|
89
|
+
this.__nodeID = ++nodeCount;
|
|
90
|
+
this.__nodeConfig = sanitizeConfig(nodeConfig);
|
|
91
|
+
this.__initialized = false;
|
|
92
|
+
this.__inputNodes =
|
|
93
|
+
inputNodes && inputNodes.filter((node) => node instanceof AnimatedNode);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
toString() {
|
|
97
|
+
return `AnimatedNode, id: ${this.__nodeID}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
__attach() {
|
|
101
|
+
this.__nativeInitialize();
|
|
102
|
+
|
|
103
|
+
const nodes = this.__inputNodes;
|
|
104
|
+
|
|
105
|
+
if (nodes) {
|
|
106
|
+
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
107
|
+
nodes[i].__addChild(this);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
__detach() {
|
|
113
|
+
const nodes = this.__inputNodes;
|
|
114
|
+
|
|
115
|
+
if (nodes) {
|
|
116
|
+
for (let i = 0, l = nodes.length; i < l; i++) {
|
|
117
|
+
nodes[i].__removeChild(this);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
this.__nativeTearDown();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
__getValue() {
|
|
125
|
+
if (!(callID in this.__lastLoopID) || this.__lastLoopID[callID] < loopID) {
|
|
126
|
+
this.__lastLoopID[callID] = loopID;
|
|
127
|
+
const result = this.__onEvaluate();
|
|
128
|
+
this.__memoizedValue[callID] = result;
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
return this.__memoizedValue[callID];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
__forceUpdateCache(newValue) {
|
|
135
|
+
this.__memoizedValue[callID] = newValue;
|
|
136
|
+
this.__markUpdated();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
__dangerouslyRescheduleEvaluate() {
|
|
140
|
+
this.__lastLoopID[callID] = -1;
|
|
141
|
+
this.__markUpdated();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
__markUpdated() {
|
|
145
|
+
UPDATED_NODES.push(this);
|
|
146
|
+
if (!propUpdatesEnqueued) {
|
|
147
|
+
propUpdatesEnqueued = scheduleUpdates(runPropUpdates);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
__nativeInitialize() {
|
|
152
|
+
if (!this.__initialized) {
|
|
153
|
+
ReanimatedModule.createNode(this.__nodeID, { ...this.__nodeConfig });
|
|
154
|
+
this.__initialized = true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
__nativeTearDown() {
|
|
159
|
+
if (this.__initialized) {
|
|
160
|
+
ReanimatedModule.dropNode(this.__nodeID);
|
|
161
|
+
this.__initialized = false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
isNativelyInitialized() {
|
|
166
|
+
return this.__initialized;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
__onEvaluate() {
|
|
170
|
+
throw new Error('Missing implementation of onEvaluate');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
__getProps() {
|
|
174
|
+
return this.__getValue();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
__getChildren() {
|
|
178
|
+
return this.__children;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
__addChild(child) {
|
|
182
|
+
if (this.__children.length === 0) {
|
|
183
|
+
this.__attach();
|
|
184
|
+
}
|
|
185
|
+
this.__children.push(child);
|
|
186
|
+
child.__nativeInitialize();
|
|
187
|
+
|
|
188
|
+
if (ReanimatedModule.connectNodes) {
|
|
189
|
+
ReanimatedModule.connectNodes(this.__nodeID, child.__nodeID);
|
|
190
|
+
} else {
|
|
191
|
+
child.__dangerouslyRescheduleEvaluate();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
__removeChild(child) {
|
|
196
|
+
const index = this.__children.indexOf(child);
|
|
197
|
+
if (index === -1) {
|
|
198
|
+
console.warn("Trying to remove a child that doesn't exist");
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (ReanimatedModule.disconnectNodes) {
|
|
203
|
+
ReanimatedModule.disconnectNodes(this.__nodeID, child.__nodeID);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
this.__children.splice(index, 1);
|
|
207
|
+
if (this.__children.length === 0) {
|
|
208
|
+
this.__detach();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
_connectAnimatedView(nativeViewTag) {
|
|
213
|
+
if (ReanimatedModule.connectNodeToView) {
|
|
214
|
+
ReanimatedModule.connectNodeToView(this.__nodeID, nativeViewTag);
|
|
215
|
+
} else {
|
|
216
|
+
this.__dangerouslyRescheduleEvaluate();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
_disconnectAnimatedView(nativeViewTag) {
|
|
221
|
+
ReanimatedModule.disconnectNodeFromView(this.__nodeID, nativeViewTag);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import AnimatedNode from './AnimatedNode';
|
|
2
|
+
import { val } from '../val';
|
|
3
|
+
|
|
4
|
+
import invariant from 'invariant';
|
|
5
|
+
import { adapt } from '../core/AnimatedBlock';
|
|
6
|
+
|
|
7
|
+
function reduce(fn) {
|
|
8
|
+
return (input) => input.reduce((a, b) => fn(val(a), val(b)));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function reduceFrom(fn, initialValue) {
|
|
12
|
+
return (input) => input.reduce((a, b) => fn(val(a), val(b)), initialValue);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function infix(fn) {
|
|
16
|
+
return (input) => fn(val(input[0]), val(input[1]));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function single(fn) {
|
|
20
|
+
return (input) => fn(val(input[0]));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const OPERATIONS = {
|
|
24
|
+
// arithmetic
|
|
25
|
+
add: reduce((a, b) => a + b),
|
|
26
|
+
sub: reduce((a, b) => a - b),
|
|
27
|
+
multiply: reduce((a, b) => a * b),
|
|
28
|
+
divide: reduce((a, b) => a / b),
|
|
29
|
+
pow: reduce((a, b) => Math.pow(a, b)),
|
|
30
|
+
modulo: reduce((a, b) => ((a % b) + b) % b),
|
|
31
|
+
sqrt: single((a) => Math.sqrt(a)),
|
|
32
|
+
log: single((a) => Math.log(a)),
|
|
33
|
+
sin: single((a) => Math.sin(a)),
|
|
34
|
+
cos: single((a) => Math.cos(a)),
|
|
35
|
+
tan: single((a) => Math.tan(a)),
|
|
36
|
+
acos: single((a) => Math.acos(a)),
|
|
37
|
+
asin: single((a) => Math.asin(a)),
|
|
38
|
+
atan: single((a) => Math.atan(a)),
|
|
39
|
+
exp: single((a) => Math.exp(a)),
|
|
40
|
+
round: single((a) => Math.round(a)),
|
|
41
|
+
abs: single((a) => Math.abs(a)),
|
|
42
|
+
ceil: single((a) => Math.ceil(a)),
|
|
43
|
+
floor: single((a) => Math.floor(a)),
|
|
44
|
+
max: reduce((a, b) => Math.max(a, b)),
|
|
45
|
+
min: reduce((a, b) => Math.min(a, b)),
|
|
46
|
+
|
|
47
|
+
// logical
|
|
48
|
+
and: reduceFrom((a, b) => a && b, true),
|
|
49
|
+
or: reduceFrom((a, b) => a || b, false),
|
|
50
|
+
not: single((a) => !a),
|
|
51
|
+
defined: single((a) => a !== null && a !== undefined && !isNaN(a)),
|
|
52
|
+
|
|
53
|
+
// comparing
|
|
54
|
+
lessThan: infix((a, b) => a < b),
|
|
55
|
+
/* eslint-disable-next-line eqeqeq */
|
|
56
|
+
eq: infix((a, b) => a == b),
|
|
57
|
+
greaterThan: infix((a, b) => a > b),
|
|
58
|
+
lessOrEq: infix((a, b) => a <= b),
|
|
59
|
+
greaterOrEq: infix((a, b) => a >= b),
|
|
60
|
+
/* eslint-disable-next-line eqeqeq */
|
|
61
|
+
neq: infix((a, b) => a != b),
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
class AnimatedOperator extends AnimatedNode {
|
|
65
|
+
_input;
|
|
66
|
+
_op;
|
|
67
|
+
_operation;
|
|
68
|
+
|
|
69
|
+
constructor(operator, input) {
|
|
70
|
+
invariant(
|
|
71
|
+
typeof operator === 'string',
|
|
72
|
+
`Reanimated: Animated.operator node first argument should be of type String, but got: ${operator}`
|
|
73
|
+
);
|
|
74
|
+
invariant(
|
|
75
|
+
input.every(
|
|
76
|
+
(el) =>
|
|
77
|
+
el instanceof AnimatedNode ||
|
|
78
|
+
typeof el === 'string' ||
|
|
79
|
+
typeof el === 'number'
|
|
80
|
+
),
|
|
81
|
+
`Reanimated: Animated.operator node second argument should be one or more of type AnimatedNode, String or Number but got ${input}`
|
|
82
|
+
);
|
|
83
|
+
super({ type: 'op', op: operator, input }, input);
|
|
84
|
+
this._op = operator;
|
|
85
|
+
this._input = input;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
toString() {
|
|
89
|
+
return `AnimatedOperator, id: ${this.__nodeID}`;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
__onEvaluate() {
|
|
93
|
+
if (!this._operation) {
|
|
94
|
+
this._operation = OPERATIONS[this._op];
|
|
95
|
+
invariant(this._operation, `Illegal operator '%s'`, this._op);
|
|
96
|
+
}
|
|
97
|
+
return this._operation(this._input);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function createAnimatedOperator(name) {
|
|
102
|
+
return (...args) => new AnimatedOperator(name, args.map(adapt));
|
|
103
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import invariant from 'invariant';
|
|
2
|
+
import AnimatedNode, { getCallID, setCallID } from './AnimatedNode';
|
|
3
|
+
import AnimatedClock from './AnimatedClock';
|
|
4
|
+
import { val } from '../val';
|
|
5
|
+
|
|
6
|
+
export class AnimatedParam extends AnimatedNode {
|
|
7
|
+
argsStack = [];
|
|
8
|
+
_prevCallID;
|
|
9
|
+
|
|
10
|
+
constructor() {
|
|
11
|
+
super({ type: 'param' }, []);
|
|
12
|
+
this.__attach();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
beginContext(ref, prevCallID) {
|
|
16
|
+
this._prevCallID = prevCallID;
|
|
17
|
+
this.argsStack.push(ref);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
endContext() {
|
|
21
|
+
this.argsStack.pop();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_getTopNode() {
|
|
25
|
+
if (this.argsStack.length === 0)
|
|
26
|
+
throw new Error(`param: Invocation failed because argsStack is empty`);
|
|
27
|
+
const top = this.argsStack[this.argsStack.length - 1];
|
|
28
|
+
return top;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
setValue(value) {
|
|
32
|
+
const top = this._getTopNode();
|
|
33
|
+
if (top.setValue) {
|
|
34
|
+
const callID = getCallID();
|
|
35
|
+
setCallID(this._prevCallID);
|
|
36
|
+
top.setValue(value);
|
|
37
|
+
setCallID(callID);
|
|
38
|
+
} else {
|
|
39
|
+
throw new Error(
|
|
40
|
+
`param: setValue(${value}) failed because the top element has no known method for updating it's current value.`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
__onEvaluate() {
|
|
46
|
+
const callID = getCallID();
|
|
47
|
+
setCallID(this._prevCallID);
|
|
48
|
+
const top = this._getTopNode();
|
|
49
|
+
const value = val(top);
|
|
50
|
+
setCallID(callID);
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
start() {
|
|
55
|
+
const node = this._getTopNode();
|
|
56
|
+
invariant(
|
|
57
|
+
node instanceof AnimatedClock || node instanceof AnimatedParam,
|
|
58
|
+
`param: top node should be of type AnimatedClock but got ${node}`
|
|
59
|
+
);
|
|
60
|
+
node.start();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
stop() {
|
|
64
|
+
const node = this._getTopNode();
|
|
65
|
+
invariant(
|
|
66
|
+
node instanceof AnimatedClock || node instanceof AnimatedParam,
|
|
67
|
+
`param: top node should be of type AnimatedClock but got ${node}`
|
|
68
|
+
);
|
|
69
|
+
node.stop();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
isRunning() {
|
|
73
|
+
const node = this._getTopNode();
|
|
74
|
+
|
|
75
|
+
if (node instanceof AnimatedParam) {
|
|
76
|
+
return node.isRunning();
|
|
77
|
+
}
|
|
78
|
+
invariant(
|
|
79
|
+
node instanceof AnimatedClock,
|
|
80
|
+
`param: top node should be of type AnimatedClock but got ${node}`
|
|
81
|
+
);
|
|
82
|
+
return node.isStarted();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function createAnimatedParam() {
|
|
87
|
+
return new AnimatedParam();
|
|
88
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { findNodeHandle } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import AnimatedNode from './AnimatedNode';
|
|
4
|
+
import AnimatedEvent from './AnimatedEvent';
|
|
5
|
+
import { createOrReuseStyleNode } from './AnimatedStyle';
|
|
6
|
+
|
|
7
|
+
import invariant from 'invariant';
|
|
8
|
+
import deepEqual from 'lodash.isequal';
|
|
9
|
+
import { val } from '../val';
|
|
10
|
+
|
|
11
|
+
function sanitizeProps(inputProps) {
|
|
12
|
+
let props;
|
|
13
|
+
for (const key in inputProps) {
|
|
14
|
+
const value = inputProps[key];
|
|
15
|
+
if (value instanceof AnimatedNode && !(value instanceof AnimatedEvent)) {
|
|
16
|
+
if (props === undefined) {
|
|
17
|
+
props = {};
|
|
18
|
+
}
|
|
19
|
+
props[key] = value.__nodeID;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return props;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function createOrReusePropsNode(props, callback, oldNode) {
|
|
26
|
+
if (props.style) {
|
|
27
|
+
const style = createOrReuseStyleNode(
|
|
28
|
+
props.style,
|
|
29
|
+
oldNode && oldNode._props.style
|
|
30
|
+
);
|
|
31
|
+
if (style) {
|
|
32
|
+
props = {
|
|
33
|
+
...props,
|
|
34
|
+
style,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const config = sanitizeProps(props);
|
|
39
|
+
if (config === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (oldNode && deepEqual(config, oldNode._config)) {
|
|
43
|
+
return oldNode;
|
|
44
|
+
}
|
|
45
|
+
return new AnimatedProps(props, config, callback);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
class AnimatedProps extends AnimatedNode {
|
|
49
|
+
constructor(props, config, callback) {
|
|
50
|
+
super(
|
|
51
|
+
{ type: 'props', props: config },
|
|
52
|
+
Object.values(props).filter((n) => !(n instanceof AnimatedEvent))
|
|
53
|
+
);
|
|
54
|
+
this._config = config;
|
|
55
|
+
this._props = props;
|
|
56
|
+
this._callback = callback;
|
|
57
|
+
this.__attach();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
toString() {
|
|
61
|
+
return `AnimatedProps, id: ${this.__nodeID}`;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
__onEvaluate() {
|
|
65
|
+
const props = {};
|
|
66
|
+
for (const key in this._props) {
|
|
67
|
+
const value = this._props[key];
|
|
68
|
+
if (value instanceof AnimatedNode) {
|
|
69
|
+
props[key] = value.__getValue();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return props;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
__detach() {
|
|
76
|
+
const nativeViewTag = findNodeHandle(this._animatedView);
|
|
77
|
+
invariant(
|
|
78
|
+
nativeViewTag != null,
|
|
79
|
+
'Unable to locate attached view in the native tree'
|
|
80
|
+
);
|
|
81
|
+
this._disconnectAnimatedView(nativeViewTag);
|
|
82
|
+
super.__detach();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
update() {
|
|
86
|
+
this._callback();
|
|
87
|
+
|
|
88
|
+
if (!this._animatedView) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
val(this);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
setNativeView(animatedView) {
|
|
96
|
+
if (this._animatedView === animatedView) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this._animatedView = animatedView;
|
|
100
|
+
|
|
101
|
+
const nativeViewTag = findNodeHandle(this._animatedView);
|
|
102
|
+
invariant(
|
|
103
|
+
nativeViewTag != null,
|
|
104
|
+
'Unable to locate attached view in the native tree'
|
|
105
|
+
);
|
|
106
|
+
this._connectAnimatedView(nativeViewTag);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import AnimatedNode from './AnimatedNode';
|
|
2
|
+
import invariant from 'invariant';
|
|
3
|
+
import { val } from '../val';
|
|
4
|
+
import { adapt } from '../core/AnimatedBlock';
|
|
5
|
+
|
|
6
|
+
class AnimatedSet extends AnimatedNode {
|
|
7
|
+
_what;
|
|
8
|
+
_value;
|
|
9
|
+
|
|
10
|
+
constructor(what, value) {
|
|
11
|
+
invariant(
|
|
12
|
+
what instanceof AnimatedNode,
|
|
13
|
+
`Reanimated: Animated.set first argument should be of type AnimatedNode but got ${what}`
|
|
14
|
+
);
|
|
15
|
+
invariant(
|
|
16
|
+
value instanceof AnimatedNode,
|
|
17
|
+
`Reanimated: Animated.set second argument should be of type AnimatedNode, String or Number but got ${value}`
|
|
18
|
+
);
|
|
19
|
+
super({ type: 'set', what, value }, [value]);
|
|
20
|
+
invariant(!what._constant, 'Value to be set cannot be constant');
|
|
21
|
+
this._what = what;
|
|
22
|
+
this._value = value;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
toString() {
|
|
26
|
+
return `AnimatedSet, id: ${this.__nodeID}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
__onEvaluate() {
|
|
30
|
+
const newValue = val(this._value);
|
|
31
|
+
this._what.setValue(newValue);
|
|
32
|
+
return newValue;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function createAnimatedSet(what, value) {
|
|
37
|
+
return new AnimatedSet(what, adapt(value));
|
|
38
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import AnimatedNode from './AnimatedNode';
|
|
2
|
+
import AnimatedClock from './AnimatedClock';
|
|
3
|
+
import { AnimatedParam } from './AnimatedParam';
|
|
4
|
+
import invariant from 'invariant';
|
|
5
|
+
|
|
6
|
+
class AnimatedStartClock extends AnimatedNode {
|
|
7
|
+
_clockNode;
|
|
8
|
+
|
|
9
|
+
constructor(clockNode) {
|
|
10
|
+
invariant(
|
|
11
|
+
clockNode instanceof AnimatedClock || clockNode instanceof AnimatedParam,
|
|
12
|
+
`Reanimated: Animated.startClock argument should be of type AnimatedClock but got ${clockNode}`
|
|
13
|
+
);
|
|
14
|
+
super({ type: 'clockStart', clock: clockNode });
|
|
15
|
+
this._clockNode = clockNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
toString() {
|
|
19
|
+
return `AnimatedStartClock, id: ${this.__nodeID}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
__onEvaluate() {
|
|
23
|
+
this._clockNode.start();
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createAnimatedStartClock(clock) {
|
|
29
|
+
return new AnimatedStartClock(clock);
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import AnimatedNode from './AnimatedNode';
|
|
2
|
+
import AnimatedClock from './AnimatedClock';
|
|
3
|
+
import { AnimatedParam } from './AnimatedParam';
|
|
4
|
+
import invariant from 'invariant';
|
|
5
|
+
|
|
6
|
+
class AnimatedStopClock extends AnimatedNode {
|
|
7
|
+
_clockNode;
|
|
8
|
+
|
|
9
|
+
constructor(clockNode) {
|
|
10
|
+
invariant(
|
|
11
|
+
clockNode instanceof AnimatedClock || clockNode instanceof AnimatedParam,
|
|
12
|
+
`Reanimated: Animated.stopClock argument should be of type AnimatedClock but got ${clockNode}`
|
|
13
|
+
);
|
|
14
|
+
super({ type: 'clockStop', clock: clockNode });
|
|
15
|
+
this._clockNode = clockNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
toString() {
|
|
19
|
+
return `AnimatedStopClock, id: ${this.__nodeID}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
__onEvaluate() {
|
|
23
|
+
this._clockNode.stop();
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createAnimatedStopClock(clock) {
|
|
29
|
+
return new AnimatedStopClock(clock);
|
|
30
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import AnimatedNode from './AnimatedNode';
|
|
4
|
+
import { createOrReuseTransformNode } from './AnimatedTransform';
|
|
5
|
+
|
|
6
|
+
import deepEqual from 'lodash.isequal';
|
|
7
|
+
|
|
8
|
+
function sanitizeStyle(inputStyle) {
|
|
9
|
+
let style;
|
|
10
|
+
for (const key in inputStyle) {
|
|
11
|
+
const value = inputStyle[key];
|
|
12
|
+
if (value instanceof AnimatedNode) {
|
|
13
|
+
if (style === undefined) {
|
|
14
|
+
style = {};
|
|
15
|
+
}
|
|
16
|
+
style[key] = value.__nodeID;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return style;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function createOrReuseStyleNode(style, oldNode) {
|
|
23
|
+
style = StyleSheet.flatten(style) || {};
|
|
24
|
+
if (style.transform) {
|
|
25
|
+
const transform = createOrReuseTransformNode(
|
|
26
|
+
style.transform,
|
|
27
|
+
oldNode && oldNode._style.transform
|
|
28
|
+
);
|
|
29
|
+
if (transform) {
|
|
30
|
+
style = {
|
|
31
|
+
...style,
|
|
32
|
+
transform,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const config = sanitizeStyle(style);
|
|
37
|
+
if (config === undefined) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
if (oldNode && deepEqual(config, oldNode._config)) {
|
|
41
|
+
return oldNode;
|
|
42
|
+
}
|
|
43
|
+
return new AnimatedStyle(style, config);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* AnimatedStyle should never be directly instantiated, use createOrReuseStyleNode
|
|
48
|
+
* in order to make a new instance of this node.
|
|
49
|
+
*/
|
|
50
|
+
export default class AnimatedStyle extends AnimatedNode {
|
|
51
|
+
constructor(style, config) {
|
|
52
|
+
super({ type: 'style', style: config }, Object.values(style));
|
|
53
|
+
this._config = config;
|
|
54
|
+
this._style = style;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
toString() {
|
|
58
|
+
return `AnimatedStyle, id: ${this.__nodeID}`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
_walkStyleAndGetAnimatedValues(style) {
|
|
62
|
+
const updatedStyle = {};
|
|
63
|
+
for (const key in style) {
|
|
64
|
+
const value = style[key];
|
|
65
|
+
if (value instanceof AnimatedNode) {
|
|
66
|
+
updatedStyle[key] = value.__getValue();
|
|
67
|
+
} else if (value && !Array.isArray(value) && typeof value === 'object') {
|
|
68
|
+
// Support animating nested values (for example: shadowOffset.height)
|
|
69
|
+
updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return updatedStyle;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
__onEvaluate() {
|
|
76
|
+
return this._walkStyleAndGetAnimatedValues(this._style);
|
|
77
|
+
}
|
|
78
|
+
}
|