react-native-reanimated 2.14.4 → 2.16.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/Common/cpp/Registries/EventHandlerRegistry.cpp +8 -2
- package/Common/cpp/Tools/SingleInstanceChecker.h +10 -2
- package/android/build.gradle +4 -4
- package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +6 -7
- package/ios/REANodesManager.m +23 -4
- package/package.json +6 -3
- package/src/reanimated2/hook/useAnimatedReaction.ts +9 -5
- package/src/reanimated2/hook/useAnimatedStyle.ts +14 -3
- package/src/reanimated2/hook/useDerivedValue.ts +8 -1
- 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 +0 -2
- 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 +0 -9
- package/lib/ConfigHelper.js +0 -145
- package/lib/ReanimatedEventEmitter.js +0 -3
- package/lib/ReanimatedModule.js +0 -2
- package/lib/ReanimatedModule.macos.js +0 -2
- package/lib/ReanimatedModule.native.js +0 -12
- package/lib/ReanimatedModule.windows.js +0 -2
- package/lib/ReanimatedModuleCompat.js +0 -66
- package/lib/__mocks__/ReanimatedEventEmitter.js +0 -8
- package/lib/__mocks__/ReanimatedModule.native.js +0 -11
- package/lib/createAnimatedComponent.js +0 -518
- package/lib/index.js +0 -14
- package/lib/index.web.js +0 -6
- package/lib/reanimated1/Easing.js +0 -231
- package/lib/reanimated1/SpringConfig.js +0 -79
- package/lib/reanimated1/Transitioning.js +0 -158
- package/lib/reanimated1/animations/Animation.js +0 -32
- package/lib/reanimated1/animations/SpringUtils.js +0 -199
- package/lib/reanimated1/animations/backwardCompatibleAnimWrapper.js +0 -117
- package/lib/reanimated1/animations/decay.js +0 -54
- package/lib/reanimated1/animations/spring.js +0 -198
- package/lib/reanimated1/animations/timing.js +0 -74
- package/lib/reanimated1/base.js +0 -13
- package/lib/reanimated1/core/AnimatedAlways.js +0 -33
- package/lib/reanimated1/core/AnimatedBezier.js +0 -150
- package/lib/reanimated1/core/AnimatedBlock.js +0 -52
- package/lib/reanimated1/core/AnimatedCall.js +0 -55
- package/lib/reanimated1/core/AnimatedCallFunc.js +0 -72
- package/lib/reanimated1/core/AnimatedClock.js +0 -90
- package/lib/reanimated1/core/AnimatedClockTest.js +0 -22
- package/lib/reanimated1/core/AnimatedCode.js +0 -32
- package/lib/reanimated1/core/AnimatedConcat.js +0 -32
- package/lib/reanimated1/core/AnimatedCond.js +0 -57
- package/lib/reanimated1/core/AnimatedDebug.js +0 -62
- package/lib/reanimated1/core/AnimatedEvent.js +0 -126
- package/lib/reanimated1/core/AnimatedFunction.js +0 -55
- package/lib/reanimated1/core/AnimatedNode.js +0 -223
- package/lib/reanimated1/core/AnimatedOperator.js +0 -103
- package/lib/reanimated1/core/AnimatedParam.js +0 -88
- package/lib/reanimated1/core/AnimatedProps.js +0 -108
- package/lib/reanimated1/core/AnimatedSet.js +0 -38
- package/lib/reanimated1/core/AnimatedStartClock.js +0 -30
- package/lib/reanimated1/core/AnimatedStopClock.js +0 -30
- package/lib/reanimated1/core/AnimatedStyle.js +0 -78
- package/lib/reanimated1/core/AnimatedTransform.js +0 -78
- package/lib/reanimated1/core/AnimatedValue.js +0 -38
- package/lib/reanimated1/core/Core.test.js +0 -30
- package/lib/reanimated1/core/InternalAnimatedValue.js +0 -87
- package/lib/reanimated1/core/__mocks__/AnimatedProps.js +0 -86
- package/lib/reanimated1/core/createEventObjectProxyPolyfill.js +0 -44
- package/lib/reanimated1/derived/__mocks__/evaluateOnce.js +0 -14
- package/lib/reanimated1/derived/acc.js +0 -11
- package/lib/reanimated1/derived/color.js +0 -47
- package/lib/reanimated1/derived/diff.js +0 -16
- package/lib/reanimated1/derived/diffClamp.js +0 -11
- package/lib/reanimated1/derived/evaluateOnce.js +0 -35
- package/lib/reanimated1/derived/index.js +0 -8
- package/lib/reanimated1/derived/interpolate.js +0 -152
- package/lib/reanimated1/derived/interpolateColors.js +0 -62
- package/lib/reanimated1/derived/onChange.js +0 -14
- package/lib/reanimated1/derived/useCode.js +0 -41
- package/lib/reanimated1/index.js +0 -53
- package/lib/reanimated1/operators.js +0 -35
- package/lib/reanimated1/useValue.js +0 -10
- package/lib/reanimated1/val.js +0 -3
- package/lib/reanimated2/Bezier.js +0 -126
- package/lib/reanimated2/Colors.js +0 -538
- package/lib/reanimated2/Easing.js +0 -248
- package/lib/reanimated2/NativeMethods.js +0 -94
- package/lib/reanimated2/NativeReanimated/NativeReanimated.js +0 -60
- package/lib/reanimated2/NativeReanimated/index.js +0 -11
- package/lib/reanimated2/PlatformChecker.js +0 -16
- package/lib/reanimated2/PropAdapters.js +0 -55
- package/lib/reanimated2/UpdateProps.js +0 -55
- package/lib/reanimated2/ViewDescriptorsSet.js +0 -75
- package/lib/reanimated2/WorkletEventHandler.js +0 -37
- package/lib/reanimated2/__mocks__/MutableValue.js +0 -13
- package/lib/reanimated2/__mocks__/NativeReanimated.js +0 -20
- package/lib/reanimated2/animation/commonTypes.js +0 -1
- package/lib/reanimated2/animation/decay.js +0 -71
- package/lib/reanimated2/animation/delay.js +0 -64
- package/lib/reanimated2/animation/index.js +0 -8
- package/lib/reanimated2/animation/repeat.js +0 -69
- package/lib/reanimated2/animation/sequence.js +0 -69
- package/lib/reanimated2/animation/spring.js +0 -103
- package/lib/reanimated2/animation/styleAnimation.js +0 -174
- package/lib/reanimated2/animation/timing.js +0 -64
- package/lib/reanimated2/animation/util.js +0 -183
- package/lib/reanimated2/commonTypes.js +0 -8
- package/lib/reanimated2/component/FlatList.js +0 -30
- package/lib/reanimated2/component/Image.js +0 -4
- package/lib/reanimated2/component/ScrollView.js +0 -4
- package/lib/reanimated2/component/Text.js +0 -4
- package/lib/reanimated2/component/View.js +0 -4
- package/lib/reanimated2/core.js +0 -269
- package/lib/reanimated2/frameCallback/FrameCallbackRegistryJS.js +0 -32
- package/lib/reanimated2/frameCallback/FrameCallbackRegistryUI.js +0 -76
- package/lib/reanimated2/globals.d.ts +0 -91
- package/lib/reanimated2/hook/Hooks.js +0 -9
- package/lib/reanimated2/hook/commonTypes.js +0 -1
- package/lib/reanimated2/hook/index.js +0 -12
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +0 -49
- package/lib/reanimated2/hook/useAnimatedKeyboard.js +0 -31
- package/lib/reanimated2/hook/useAnimatedReaction.js +0 -37
- package/lib/reanimated2/hook/useAnimatedRef.js +0 -25
- package/lib/reanimated2/hook/useAnimatedScrollHandler.js +0 -41
- package/lib/reanimated2/hook/useAnimatedSensor.js +0 -66
- package/lib/reanimated2/hook/useAnimatedStyle.js +0 -393
- package/lib/reanimated2/hook/useDerivedValue.js +0 -36
- package/lib/reanimated2/hook/useFrameCallback.js +0 -23
- package/lib/reanimated2/hook/useScrollViewOffset.js +0 -27
- package/lib/reanimated2/hook/useSharedValue.js +0 -17
- package/lib/reanimated2/hook/utils.js +0 -165
- package/lib/reanimated2/index.js +0 -12
- package/lib/reanimated2/interpolateColor.js +0 -157
- package/lib/reanimated2/interpolation.js +0 -127
- package/lib/reanimated2/jestUtils.js +0 -175
- package/lib/reanimated2/js-reanimated/JSReanimated.js +0 -106
- package/lib/reanimated2/js-reanimated/Mapper.js +0 -43
- package/lib/reanimated2/js-reanimated/MapperRegistry.js +0 -101
- package/lib/reanimated2/js-reanimated/MutableValue.js +0 -29
- package/lib/reanimated2/js-reanimated/commonTypes.js +0 -1
- package/lib/reanimated2/js-reanimated/global.js +0 -36
- package/lib/reanimated2/js-reanimated/index.js +0 -35
- package/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.js +0 -67
- package/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +0 -69
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +0 -133
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +0 -194
- package/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.js +0 -1
- package/lib/reanimated2/layoutReanimation/animationBuilder/index.js +0 -3
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +0 -374
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +0 -36
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +0 -275
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +0 -385
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +0 -136
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +0 -81
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +0 -120
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +0 -273
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +0 -201
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +0 -101
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +0 -457
- package/lib/reanimated2/layoutReanimation/defaultAnimations/index.js +0 -10
- package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +0 -90
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +0 -132
- package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +0 -37
- package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +0 -41
- package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +0 -34
- package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +0 -46
- package/lib/reanimated2/layoutReanimation/defaultTransitions/index.js +0 -6
- package/lib/reanimated2/layoutReanimation/index.js +0 -4
- package/lib/reanimated2/mock.js +0 -75
- package/lib/reanimated2/platform-specific/RNRenderer.js +0 -3
- package/lib/reanimated2/platform-specific/RNRenderer.web.js +0 -3
- package/lib/reanimated2/platform-specific/checkVersion.js +0 -28
- package/lib/reanimated2/platform-specific/checkVersion.web.js +0 -6
- package/lib/reanimated2/utils.js +0 -16
- package/lib/setAndForwardRef.js +0 -19
- package/lib/types/lib/Animated.d.ts +0 -8
- package/lib/types/lib/ConfigHelper.d.ts +0 -12
- package/lib/types/lib/ReanimatedEventEmitter.d.ts +0 -3
- package/lib/types/lib/ReanimatedModule.d.ts +0 -2
- package/lib/types/lib/ReanimatedModule.macos.d.ts +0 -2
- package/lib/types/lib/ReanimatedModule.native.d.ts +0 -2
- package/lib/types/lib/ReanimatedModule.windows.d.ts +0 -2
- package/lib/types/lib/ReanimatedModuleCompat.d.ts +0 -14
- package/lib/types/lib/createAnimatedComponent.d.ts +0 -33
- package/lib/types/lib/index.d.ts +0 -4
- package/lib/types/lib/index.web.d.ts +0 -4
- package/lib/types/lib/reanimated2/Bezier.d.ts +0 -6
- package/lib/types/lib/reanimated2/Colors.d.ts +0 -33
- package/lib/types/lib/reanimated2/Easing.d.ts +0 -172
- package/lib/types/lib/reanimated2/NativeMethods.d.ts +0 -7
- package/lib/types/lib/reanimated2/NativeReanimated/NativeReanimated.d.ts +0 -22
- package/lib/types/lib/reanimated2/NativeReanimated/index.d.ts +0 -3
- package/lib/types/lib/reanimated2/PlatformChecker.d.ts +0 -5
- package/lib/types/lib/reanimated2/PropAdapters.d.ts +0 -4
- package/lib/types/lib/reanimated2/UpdateProps.d.ts +0 -9
- package/lib/types/lib/reanimated2/ViewDescriptorsSet.d.ts +0 -20
- package/lib/types/lib/reanimated2/WorkletEventHandler.d.ts +0 -13
- package/lib/types/lib/reanimated2/__mocks__/MutableValue.d.ts +0 -5
- package/lib/types/lib/reanimated2/__mocks__/NativeReanimated.d.ts +0 -13
- package/lib/types/lib/reanimated2/animation/commonTypes.d.ts +0 -27
- package/lib/types/lib/reanimated2/animation/decay.d.ts +0 -19
- package/lib/types/lib/reanimated2/animation/delay.d.ts +0 -7
- package/lib/types/lib/reanimated2/animation/index.d.ts +0 -9
- package/lib/types/lib/reanimated2/animation/repeat.d.ts +0 -12
- package/lib/types/lib/reanimated2/animation/sequence.d.ts +0 -7
- package/lib/types/lib/reanimated2/animation/spring.d.ts +0 -22
- package/lib/types/lib/reanimated2/animation/styleAnimation.d.ts +0 -7
- package/lib/types/lib/reanimated2/animation/timing.d.ts +0 -21
- package/lib/types/lib/reanimated2/animation/util.d.ts +0 -9
- package/lib/types/lib/reanimated2/commonTypes.d.ts +0 -99
- package/lib/types/lib/reanimated2/component/FlatList.d.ts +0 -9
- package/lib/types/lib/reanimated2/component/Image.d.ts +0 -3
- package/lib/types/lib/reanimated2/component/ScrollView.d.ts +0 -3
- package/lib/types/lib/reanimated2/component/Text.d.ts +0 -3
- package/lib/types/lib/reanimated2/component/View.d.ts +0 -3
- package/lib/types/lib/reanimated2/core.d.ts +0 -24
- package/lib/types/lib/reanimated2/frameCallback/FrameCallbackRegistryJS.d.ts +0 -8
- package/lib/types/lib/reanimated2/frameCallback/FrameCallbackRegistryUI.d.ts +0 -20
- package/lib/types/lib/reanimated2/hook/Hooks.d.ts +0 -5
- package/lib/types/lib/reanimated2/hook/commonTypes.d.ts +0 -14
- package/lib/types/lib/reanimated2/hook/index.d.ts +0 -14
- package/lib/types/lib/reanimated2/hook/useAnimatedGestureHandler.d.ts +0 -35
- package/lib/types/lib/reanimated2/hook/useAnimatedKeyboard.d.ts +0 -2
- package/lib/types/lib/reanimated2/hook/useAnimatedReaction.d.ts +0 -12
- package/lib/types/lib/reanimated2/hook/useAnimatedRef.d.ts +0 -3
- package/lib/types/lib/reanimated2/hook/useAnimatedScrollHandler.d.ts +0 -20
- package/lib/types/lib/reanimated2/hook/useAnimatedSensor.d.ts +0 -18
- package/lib/types/lib/reanimated2/hook/useAnimatedStyle.d.ts +0 -11
- package/lib/types/lib/reanimated2/hook/useDerivedValue.d.ts +0 -4
- package/lib/types/lib/reanimated2/hook/useFrameCallback.d.ts +0 -7
- package/lib/types/lib/reanimated2/hook/useScrollViewOffset.d.ts +0 -4
- package/lib/types/lib/reanimated2/hook/useSharedValue.d.ts +0 -2
- package/lib/types/lib/reanimated2/hook/utils.d.ts +0 -28
- package/lib/types/lib/reanimated2/index.d.ts +0 -12
- package/lib/types/lib/reanimated2/interpolateColor.d.ts +0 -32
- package/lib/types/lib/reanimated2/interpolation.d.ts +0 -14
- package/lib/types/lib/reanimated2/jestUtils.d.ts +0 -12
- package/lib/types/lib/reanimated2/js-reanimated/JSReanimated.d.ts +0 -32
- package/lib/types/lib/reanimated2/js-reanimated/Mapper.d.ts +0 -14
- package/lib/types/lib/reanimated2/js-reanimated/MapperRegistry.d.ts +0 -14
- package/lib/types/lib/reanimated2/js-reanimated/MutableValue.d.ts +0 -14
- package/lib/types/lib/reanimated2/js-reanimated/commonTypes.d.ts +0 -44
- package/lib/types/lib/reanimated2/js-reanimated/global.d.ts +0 -2
- package/lib/types/lib/reanimated2/js-reanimated/index.d.ts +0 -15
- package/lib/types/lib/reanimated2/layoutReanimation/LayoutAnimationRepository.d.ts +0 -1
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.d.ts +0 -22
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.d.ts +0 -38
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.d.ts +0 -25
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/commonTypes.d.ts +0 -81
- package/lib/types/lib/reanimated2/layoutReanimation/animationBuilder/index.d.ts +0 -4
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.d.ts +0 -62
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Default.d.ts +0 -4
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.d.ts +0 -42
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.d.ts +0 -50
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.d.ts +0 -18
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.d.ts +0 -10
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.d.ts +0 -18
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.d.ts +0 -34
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.d.ts +0 -34
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.d.ts +0 -18
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.d.ts +0 -66
- package/lib/types/lib/reanimated2/layoutReanimation/defaultAnimations/index.d.ts +0 -10
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.d.ts +0 -19
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.d.ts +0 -13
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.d.ts +0 -6
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.d.ts +0 -6
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.d.ts +0 -7
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.d.ts +0 -9
- package/lib/types/lib/reanimated2/layoutReanimation/defaultTransitions/index.d.ts +0 -6
- package/lib/types/lib/reanimated2/layoutReanimation/index.d.ts +0 -4
- package/lib/types/lib/reanimated2/mock.d.ts +0 -61
- package/lib/types/lib/reanimated2/platform-specific/RNRenderer.d.ts +0 -1
- package/lib/types/lib/reanimated2/platform-specific/RNRenderer.web.d.ts +0 -0
- package/lib/types/lib/reanimated2/platform-specific/checkVersion.d.ts +0 -4
- package/lib/types/lib/reanimated2/platform-specific/checkVersion.web.d.ts +0 -5
- package/lib/types/lib/reanimated2/utils.d.ts +0 -11
- package/lib/types/lib/setAndForwardRef.d.ts +0 -40
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import AnimatedNode from './AnimatedNode';
|
|
2
|
-
|
|
3
|
-
import deepEqual from 'lodash.isequal';
|
|
4
|
-
|
|
5
|
-
function sanitizeTransform(inputTransform) {
|
|
6
|
-
const outputTransform = [];
|
|
7
|
-
let hasAnimatedTransform = false;
|
|
8
|
-
inputTransform.forEach((transform) => {
|
|
9
|
-
for (const key in transform) {
|
|
10
|
-
const value = transform[key];
|
|
11
|
-
if (value instanceof AnimatedNode) {
|
|
12
|
-
hasAnimatedTransform = true;
|
|
13
|
-
outputTransform.push({
|
|
14
|
-
property: key,
|
|
15
|
-
nodeID: value.__nodeID,
|
|
16
|
-
});
|
|
17
|
-
} else {
|
|
18
|
-
outputTransform.push({
|
|
19
|
-
property: key,
|
|
20
|
-
value,
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return hasAnimatedTransform ? outputTransform : undefined;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function extractAnimatedParentNodes(transform) {
|
|
29
|
-
const parents = [];
|
|
30
|
-
transform.forEach((transform) => {
|
|
31
|
-
for (const key in transform) {
|
|
32
|
-
const value = transform[key];
|
|
33
|
-
if (value instanceof AnimatedNode) {
|
|
34
|
-
parents.push(value);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
return parents;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function createOrReuseTransformNode(transform, oldNode) {
|
|
42
|
-
const config = sanitizeTransform(transform);
|
|
43
|
-
if (config === undefined) {
|
|
44
|
-
return undefined;
|
|
45
|
-
}
|
|
46
|
-
if (oldNode && deepEqual(config, oldNode._config)) {
|
|
47
|
-
return oldNode;
|
|
48
|
-
}
|
|
49
|
-
return new AnimatedTransform(transform, config);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
class AnimatedTransform extends AnimatedNode {
|
|
53
|
-
constructor(transform, config) {
|
|
54
|
-
super(
|
|
55
|
-
{ type: 'transform', transform: config },
|
|
56
|
-
extractAnimatedParentNodes(transform)
|
|
57
|
-
);
|
|
58
|
-
this._config = config;
|
|
59
|
-
this._transform = transform;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
toString() {
|
|
63
|
-
return `AnimatedTransform, id: ${this.__nodeID}`;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
__onEvaluate() {
|
|
67
|
-
return this._transform.map((transform) => {
|
|
68
|
-
const result = {};
|
|
69
|
-
for (const key in transform) {
|
|
70
|
-
const value = transform[key];
|
|
71
|
-
if (value instanceof AnimatedNode) {
|
|
72
|
-
result[key] = value.__getValue();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return result;
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { createAnimatedSet as set } from '../core/AnimatedSet';
|
|
2
|
-
import interpolate from '../derived/interpolate';
|
|
3
|
-
import InternalAnimatedValue from './InternalAnimatedValue';
|
|
4
|
-
import { Platform } from 'react-native';
|
|
5
|
-
import { evaluateOnce } from '../derived/evaluateOnce';
|
|
6
|
-
import ReanimatedModule from '../../ReanimatedModule';
|
|
7
|
-
import { val } from '../val';
|
|
8
|
-
|
|
9
|
-
// Animated value wrapped with extra methods for omit cycle of dependencies
|
|
10
|
-
export default class AnimatedValue extends InternalAnimatedValue {
|
|
11
|
-
setValue(value) {
|
|
12
|
-
this.__detachAnimation(this._animation);
|
|
13
|
-
if (
|
|
14
|
-
Platform.OS === 'web' ||
|
|
15
|
-
Platform.OS === 'windows' ||
|
|
16
|
-
Platform.OS === 'macos'
|
|
17
|
-
) {
|
|
18
|
-
this._updateValue(val(value));
|
|
19
|
-
} else {
|
|
20
|
-
if (ReanimatedModule.setValue && typeof value === 'number') {
|
|
21
|
-
// FIXME Remove it after some time
|
|
22
|
-
// For OTA-safety
|
|
23
|
-
// FIXME handle setting value with a node
|
|
24
|
-
ReanimatedModule.setValue(this.__nodeID, value);
|
|
25
|
-
} else {
|
|
26
|
-
evaluateOnce(set(this, value), this);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
toString() {
|
|
32
|
-
return `AnimatedValue, id: ${this.__nodeID}`;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
interpolate(config) {
|
|
36
|
-
return interpolate(this, config);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Animated from '../../Animated';
|
|
3
|
-
|
|
4
|
-
import renderer from 'react-test-renderer';
|
|
5
|
-
|
|
6
|
-
jest.mock('../../ReanimatedEventEmitter');
|
|
7
|
-
jest.mock('../../ReanimatedModule');
|
|
8
|
-
jest.mock('../../reanimated2/NativeReanimated/NativeReanimated');
|
|
9
|
-
|
|
10
|
-
describe('Core Animated components', () => {
|
|
11
|
-
xit('fails if something other then a node or function that returns a node is passed to Animated.Code exec prop', () => {
|
|
12
|
-
console.error = jest.fn();
|
|
13
|
-
|
|
14
|
-
expect(() =>
|
|
15
|
-
renderer.create(<Animated.Code exec="not a node" />)
|
|
16
|
-
).toThrowError(
|
|
17
|
-
"<Animated.Code /> expects the 'exec' prop or children to be an animated node or a function returning an animated node."
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
xit('fails if something other then a node or function that returns a node is passed to Animated.Code children', () => {
|
|
22
|
-
console.error = jest.fn();
|
|
23
|
-
|
|
24
|
-
expect(() =>
|
|
25
|
-
renderer.create(<Animated.Code>not a node</Animated.Code>)
|
|
26
|
-
).toThrowError(
|
|
27
|
-
"<Animated.Code /> expects the 'exec' prop or children to be an animated node or a function returning an animated node."
|
|
28
|
-
);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import AnimatedNode from './AnimatedNode';
|
|
2
|
-
import { val } from '../val';
|
|
3
|
-
import ReanimatedModule from '../../ReanimatedModule';
|
|
4
|
-
import invariant from 'invariant';
|
|
5
|
-
|
|
6
|
-
function sanitizeValue(value) {
|
|
7
|
-
return value === null || value === undefined || typeof value === 'string'
|
|
8
|
-
? value
|
|
9
|
-
: Number(value);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const CONSTANT_VALUES = new Map();
|
|
13
|
-
|
|
14
|
-
function initializeConstantValues() {
|
|
15
|
-
if (CONSTANT_VALUES.size !== 0) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
[0, -1, 1, -2, 2].forEach((v) =>
|
|
19
|
-
CONSTANT_VALUES.set(v, new InternalAnimatedValue(v, true))
|
|
20
|
-
);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* This class has been made internal in order to omit dependencies' cycles which
|
|
25
|
-
* were caused by imperative setValue and interpolate – they are currently exposed with AnimatedValue.js
|
|
26
|
-
*/
|
|
27
|
-
export default class InternalAnimatedValue extends AnimatedNode {
|
|
28
|
-
static valueForConstant(number) {
|
|
29
|
-
initializeConstantValues();
|
|
30
|
-
return (
|
|
31
|
-
CONSTANT_VALUES.get(number) || new InternalAnimatedValue(number, true)
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
constructor(value, constant = false) {
|
|
36
|
-
invariant(value !== null, 'Animated.Value cannot be set to the null');
|
|
37
|
-
super({ type: 'value', value: sanitizeValue(value) });
|
|
38
|
-
this._startingValue = this._value = value;
|
|
39
|
-
this._animation = null;
|
|
40
|
-
this._constant = constant;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
__detach() {
|
|
44
|
-
if (!this._constant) {
|
|
45
|
-
if (ReanimatedModule.getValue) {
|
|
46
|
-
ReanimatedModule.getValue(
|
|
47
|
-
this.__nodeID,
|
|
48
|
-
(val) => (this.__nodeConfig.value = val)
|
|
49
|
-
);
|
|
50
|
-
} else {
|
|
51
|
-
this.__nodeConfig.value = this.__getValue();
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
this.__detachAnimation(this._animation);
|
|
55
|
-
super.__detach();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
__detachAnimation(animation) {
|
|
59
|
-
animation && animation.__detach();
|
|
60
|
-
if (this._animation === animation) {
|
|
61
|
-
this._animation = null;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
__attachAnimation(animation) {
|
|
66
|
-
this.__detachAnimation(this._animation);
|
|
67
|
-
this._animation = animation;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
__onEvaluate() {
|
|
71
|
-
if (this.__inputNodes && this.__inputNodes.length) {
|
|
72
|
-
this.__inputNodes.forEach(val);
|
|
73
|
-
}
|
|
74
|
-
return this._value;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// AnimatedValue will override this method to modify the value of a native node.
|
|
78
|
-
setValue(value) {
|
|
79
|
-
this.__detachAnimation(this._animation);
|
|
80
|
-
this._updateValue(value);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
_updateValue(value) {
|
|
84
|
-
this._value = value;
|
|
85
|
-
this.__forceUpdateCache(value);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import AnimatedNode from '../AnimatedNode';
|
|
2
|
-
import AnimatedEvent from '../AnimatedEvent';
|
|
3
|
-
import AnimatedStyle, { createOrReuseStyleNode } from '../AnimatedStyle';
|
|
4
|
-
|
|
5
|
-
import deepEqual from 'lodash.isequal';
|
|
6
|
-
|
|
7
|
-
// This file has been mocked as react-native's `findNodeHandle` is returning undefined value;
|
|
8
|
-
// and I became easier to mock whole this file instead of mocking RN
|
|
9
|
-
|
|
10
|
-
function sanitizeProps(inputProps) {
|
|
11
|
-
const props = {};
|
|
12
|
-
for (const key in inputProps) {
|
|
13
|
-
const value = inputProps[key];
|
|
14
|
-
if (value instanceof AnimatedNode && !(value instanceof AnimatedEvent)) {
|
|
15
|
-
props[key] = value.__nodeID;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return props;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function createOrReusePropsNode(props, callback, oldNode) {
|
|
22
|
-
if (props.style) {
|
|
23
|
-
props = {
|
|
24
|
-
...props,
|
|
25
|
-
style: createOrReuseStyleNode(
|
|
26
|
-
props.style,
|
|
27
|
-
oldNode && oldNode._props.style
|
|
28
|
-
),
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
const config = sanitizeProps(props);
|
|
32
|
-
if (oldNode && deepEqual(config, oldNode._config)) {
|
|
33
|
-
return oldNode;
|
|
34
|
-
}
|
|
35
|
-
return new AnimatedProps(props, config, callback);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
class AnimatedProps extends AnimatedNode {
|
|
39
|
-
constructor(props, config, callback) {
|
|
40
|
-
super(
|
|
41
|
-
{ type: 'props', props: config },
|
|
42
|
-
Object.values(props).filter((n) => !(n instanceof AnimatedEvent))
|
|
43
|
-
);
|
|
44
|
-
this._config = config;
|
|
45
|
-
this._props = props;
|
|
46
|
-
this._callback = callback;
|
|
47
|
-
this.__attach();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
__getProps() {
|
|
51
|
-
const props = {};
|
|
52
|
-
for (const key in this._props) {
|
|
53
|
-
const value = this._props[key];
|
|
54
|
-
if (value instanceof AnimatedNode) {
|
|
55
|
-
if (value instanceof AnimatedStyle) {
|
|
56
|
-
props[key] = value.__getProps();
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
props[key] = value;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return props;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
__onEvaluate() {
|
|
66
|
-
const props = {};
|
|
67
|
-
for (const key in this._props) {
|
|
68
|
-
const value = this._props[key];
|
|
69
|
-
if (value instanceof AnimatedNode) {
|
|
70
|
-
props[key] = value.__getValue();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return props;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
update() {
|
|
77
|
-
this._callback();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
setNativeView(animatedView) {
|
|
81
|
-
if (this._animatedView === animatedView) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
this._animatedView = animatedView;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
// JSC on Android and iOS 8 & 9 does not support proxies.
|
|
2
|
-
// The below workaround provides a proxy-like functionality for event data by
|
|
3
|
-
// creating an object which contains predefined fields for the most commonly
|
|
4
|
-
// used event attributes. If your app uses even attribute which is not listed
|
|
5
|
-
// here please submit a PR to add that and we will merge it right away
|
|
6
|
-
export default function createEventObjectProxyPolyfill() {
|
|
7
|
-
const nodesMap = {
|
|
8
|
-
// Gesture handlers-related event
|
|
9
|
-
translationX: {},
|
|
10
|
-
translationY: {},
|
|
11
|
-
state: {},
|
|
12
|
-
oldState: {},
|
|
13
|
-
absoluteX: {},
|
|
14
|
-
absoluteY: {},
|
|
15
|
-
x: {},
|
|
16
|
-
y: {},
|
|
17
|
-
velocityX: {},
|
|
18
|
-
velocityY: {},
|
|
19
|
-
scale: {},
|
|
20
|
-
focalX: {},
|
|
21
|
-
focalY: {},
|
|
22
|
-
rotation: {},
|
|
23
|
-
anchorX: {},
|
|
24
|
-
anchorY: {},
|
|
25
|
-
velocity: {},
|
|
26
|
-
numberOfPointers: {},
|
|
27
|
-
// onLayour-related event
|
|
28
|
-
layout: { x: {}, y: {}, width: {}, height: {} },
|
|
29
|
-
// ScrollView event
|
|
30
|
-
contentOffset: { y: {}, x: {} },
|
|
31
|
-
layoutMeasurement: { width: {}, height: {} },
|
|
32
|
-
contentSize: { width: {}, height: {} },
|
|
33
|
-
zoomScale: {},
|
|
34
|
-
contentInset: { right: {}, top: {}, left: {}, bottom: {} },
|
|
35
|
-
};
|
|
36
|
-
const traverse = (obj) => {
|
|
37
|
-
for (const key in obj) {
|
|
38
|
-
traverse(obj[key]);
|
|
39
|
-
Object.assign(obj[key], { __isProxy: true });
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
traverse(nodesMap);
|
|
43
|
-
return nodesMap;
|
|
44
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { always } from '../../base';
|
|
2
|
-
export function evaluateOnce(node, children = [], callback) {
|
|
3
|
-
if (!Array.isArray(children)) {
|
|
4
|
-
children = [children];
|
|
5
|
-
}
|
|
6
|
-
const alwaysNode = always(node);
|
|
7
|
-
for (let i = 0; i < children.length; i++) {
|
|
8
|
-
alwaysNode.__addChild(children[i]);
|
|
9
|
-
}
|
|
10
|
-
for (let i = 0; i < children.length; i++) {
|
|
11
|
-
alwaysNode.__removeChild(children[i]);
|
|
12
|
-
}
|
|
13
|
-
callback && callback();
|
|
14
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { set, add, proc } from '../base';
|
|
2
|
-
import AnimatedValue from '../core/InternalAnimatedValue';
|
|
3
|
-
|
|
4
|
-
const procAcc = proc(function (v, acc) {
|
|
5
|
-
return set(acc, add(acc, v));
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
export default function acc(v) {
|
|
9
|
-
const acc = new AnimatedValue(0);
|
|
10
|
-
return procAcc(v, acc);
|
|
11
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Platform } from 'react-native';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
add,
|
|
5
|
-
cond,
|
|
6
|
-
concat,
|
|
7
|
-
lessThan,
|
|
8
|
-
multiply,
|
|
9
|
-
round,
|
|
10
|
-
sub,
|
|
11
|
-
proc,
|
|
12
|
-
} from '../base';
|
|
13
|
-
import AnimatedNode from '../core/AnimatedNode';
|
|
14
|
-
|
|
15
|
-
const procColor = proc(function (r, g, b, a) {
|
|
16
|
-
const color = add(
|
|
17
|
-
multiply(a, 1 << 24),
|
|
18
|
-
multiply(round(r), 1 << 16),
|
|
19
|
-
multiply(round(g), 1 << 8),
|
|
20
|
-
round(b)
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
if (Platform.OS === 'android') {
|
|
24
|
-
// on Android color is represented as signed 32 bit int
|
|
25
|
-
return cond(
|
|
26
|
-
lessThan(color, (1 << 31) >>> 0),
|
|
27
|
-
color,
|
|
28
|
-
sub(color, Math.pow(2, 32))
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
return color;
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
export default function color(r, g, b, a = 1) {
|
|
35
|
-
if (Platform.OS === 'web') {
|
|
36
|
-
// doesn't support bit shifting
|
|
37
|
-
return concat('rgba(', r, ',', g, ',', b, ',', a, ')');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (a instanceof AnimatedNode) {
|
|
41
|
-
a = round(multiply(a, 255));
|
|
42
|
-
} else {
|
|
43
|
-
a = Math.round(a * 255);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return procColor(r, g, b, a);
|
|
47
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { cond, block, defined, sub, set, proc } from '../base';
|
|
2
|
-
import AnimatedValue from '../core/InternalAnimatedValue';
|
|
3
|
-
|
|
4
|
-
const procDiff = proc(function (v, stash, prev) {
|
|
5
|
-
return block([
|
|
6
|
-
set(stash, cond(defined(prev), sub(v, prev), 0)),
|
|
7
|
-
set(prev, v),
|
|
8
|
-
stash,
|
|
9
|
-
]);
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
export default function diff(v) {
|
|
13
|
-
const stash = new AnimatedValue(0);
|
|
14
|
-
const prev = new AnimatedValue();
|
|
15
|
-
return procDiff(v, stash, prev);
|
|
16
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { cond, defined, set, add, min, max } from '../base';
|
|
2
|
-
import AnimatedValue from '../core/InternalAnimatedValue';
|
|
3
|
-
import diff from './diff';
|
|
4
|
-
|
|
5
|
-
export default function diffClamp(a, minVal, maxVal) {
|
|
6
|
-
const value = new AnimatedValue();
|
|
7
|
-
return set(
|
|
8
|
-
value,
|
|
9
|
-
min(max(add(cond(defined(value), value, a), diff(a)), minVal), maxVal)
|
|
10
|
-
);
|
|
11
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import AnimatedValue from '../core/InternalAnimatedValue';
|
|
2
|
-
import { createAnimatedSet as set } from '../core/AnimatedSet';
|
|
3
|
-
import { createAnimatedCall as call } from '../core/AnimatedCall';
|
|
4
|
-
import { createAnimatedAlways as always } from '../core/AnimatedAlways';
|
|
5
|
-
import { createAnimatedCond as cond } from '../core/AnimatedCond';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* evaluate given node and notify children
|
|
9
|
-
* @param node - node to be evaluated
|
|
10
|
-
* @param input - nodes (or one node) representing values which states input for node.
|
|
11
|
-
* @param callback - after callback
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
export function evaluateOnce(node, input = [], callback) {
|
|
15
|
-
if (!Array.isArray(input)) {
|
|
16
|
-
input = [input];
|
|
17
|
-
}
|
|
18
|
-
const done = new AnimatedValue(0);
|
|
19
|
-
const evalNode = cond(
|
|
20
|
-
done,
|
|
21
|
-
0,
|
|
22
|
-
call([node, set(done, 1)], () => {
|
|
23
|
-
callback && callback();
|
|
24
|
-
for (let i = 0; i < input.length; i++) {
|
|
25
|
-
input[i].__removeChild(alwaysNode);
|
|
26
|
-
alwaysNode.__detach();
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
);
|
|
30
|
-
const alwaysNode = always(evalNode);
|
|
31
|
-
for (let i = 0; i < input.length; i++) {
|
|
32
|
-
input[i].__addChild(alwaysNode);
|
|
33
|
-
alwaysNode.__attach();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { default as acc } from './acc';
|
|
2
|
-
export { default as color } from './color';
|
|
3
|
-
export { default as diff } from './diff';
|
|
4
|
-
export { default as diffClamp } from './diffClamp';
|
|
5
|
-
export { default as interpolateNode, Extrapolate } from './interpolate';
|
|
6
|
-
export { default as interpolateColors } from './interpolateColors';
|
|
7
|
-
export { default as onChange } from './onChange';
|
|
8
|
-
export { default as useCode } from './useCode';
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
lessThan,
|
|
3
|
-
multiply,
|
|
4
|
-
sub,
|
|
5
|
-
add,
|
|
6
|
-
divide,
|
|
7
|
-
greaterThan,
|
|
8
|
-
lessOrEq,
|
|
9
|
-
eq,
|
|
10
|
-
} from '../operators';
|
|
11
|
-
import invariant from 'invariant';
|
|
12
|
-
|
|
13
|
-
import AnimatedNode from '../core/AnimatedNode';
|
|
14
|
-
import { createAnimatedCond as cond } from '../core/AnimatedCond';
|
|
15
|
-
import { createAnimatedFunction as proc } from '../core/AnimatedFunction';
|
|
16
|
-
|
|
17
|
-
const interpolateInternalSingleProc = proc(function (
|
|
18
|
-
value,
|
|
19
|
-
inS,
|
|
20
|
-
inE,
|
|
21
|
-
outS,
|
|
22
|
-
outE
|
|
23
|
-
) {
|
|
24
|
-
const progress = divide(sub(value, inS), sub(inE, inS));
|
|
25
|
-
// logic below was made in order to provide a compatibility witn an Animated API
|
|
26
|
-
const resultForNonZeroRange = add(outS, multiply(progress, sub(outE, outS)));
|
|
27
|
-
const result = cond(
|
|
28
|
-
eq(inS, inE),
|
|
29
|
-
cond(lessOrEq(value, inS), outS, outE),
|
|
30
|
-
resultForNonZeroRange
|
|
31
|
-
);
|
|
32
|
-
return result;
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
function interpolateInternalSingle(value, inputRange, outputRange, offset) {
|
|
36
|
-
const inS = inputRange[offset];
|
|
37
|
-
const inE = inputRange[offset + 1];
|
|
38
|
-
const outS = outputRange[offset];
|
|
39
|
-
const outE = outputRange[offset + 1];
|
|
40
|
-
return interpolateInternalSingleProc(value, inS, inE, outS, outE);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function interpolateInternal(value, inputRange, outputRange, offset = 0) {
|
|
44
|
-
if (inputRange.length - offset === 2) {
|
|
45
|
-
return interpolateInternalSingle(value, inputRange, outputRange, offset);
|
|
46
|
-
}
|
|
47
|
-
return cond(
|
|
48
|
-
lessThan(value, inputRange[offset + 1]),
|
|
49
|
-
interpolateInternalSingle(value, inputRange, outputRange, offset),
|
|
50
|
-
interpolateInternal(value, inputRange, outputRange, offset + 1)
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export const Extrapolate = {
|
|
55
|
-
EXTEND: 'extend',
|
|
56
|
-
CLAMP: 'clamp',
|
|
57
|
-
IDENTITY: 'identity',
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
function checkNonDecreasing(name, arr) {
|
|
61
|
-
for (let i = 1; i < arr.length; ++i) {
|
|
62
|
-
// We can't validate animated nodes in JS.
|
|
63
|
-
if (arr[i] instanceof AnimatedNode || arr[i - 1] instanceof AnimatedNode)
|
|
64
|
-
continue;
|
|
65
|
-
invariant(
|
|
66
|
-
arr[i] >= arr[i - 1],
|
|
67
|
-
'%s must be monotonically non-decreasing. (%s)',
|
|
68
|
-
name,
|
|
69
|
-
arr
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function checkMinElements(name, arr) {
|
|
75
|
-
invariant(
|
|
76
|
-
arr.length >= 2,
|
|
77
|
-
'%s must have at least 2 elements. (%s)',
|
|
78
|
-
name,
|
|
79
|
-
arr
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function checkValidNumbers(name, arr) {
|
|
84
|
-
for (let i = 0; i < arr.length; i++) {
|
|
85
|
-
// We can't validate animated nodes in JS.
|
|
86
|
-
if (arr[i] instanceof AnimatedNode || typeof arr[i] !== 'number') continue;
|
|
87
|
-
invariant(
|
|
88
|
-
Number.isFinite(arr[i]),
|
|
89
|
-
'%s cannot include %s. (%s)',
|
|
90
|
-
name,
|
|
91
|
-
arr[i],
|
|
92
|
-
arr
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function convertToRadians(outputRange) {
|
|
98
|
-
for (const [i, value] of outputRange.entries()) {
|
|
99
|
-
if (typeof value === 'string' && value.endsWith('deg')) {
|
|
100
|
-
outputRange[i] = parseFloat(value) * (Math.PI / 180);
|
|
101
|
-
} else if (typeof value === 'string' && value.endsWith('rad')) {
|
|
102
|
-
outputRange[i] = parseFloat(value);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export default function interpolate(value, config) {
|
|
108
|
-
const {
|
|
109
|
-
inputRange,
|
|
110
|
-
outputRange,
|
|
111
|
-
extrapolate = Extrapolate.EXTEND,
|
|
112
|
-
extrapolateLeft,
|
|
113
|
-
extrapolateRight,
|
|
114
|
-
} = config;
|
|
115
|
-
|
|
116
|
-
checkMinElements('inputRange', inputRange);
|
|
117
|
-
checkValidNumbers('inputRange', inputRange);
|
|
118
|
-
checkMinElements('outputRange', outputRange);
|
|
119
|
-
checkValidNumbers('outputRange', outputRange);
|
|
120
|
-
checkNonDecreasing('inputRange', inputRange);
|
|
121
|
-
invariant(
|
|
122
|
-
inputRange.length === outputRange.length,
|
|
123
|
-
'inputRange and outputRange must be the same length.'
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
convertToRadians(outputRange);
|
|
127
|
-
const left = extrapolateLeft || extrapolate;
|
|
128
|
-
const right = extrapolateRight || extrapolate;
|
|
129
|
-
let output = interpolateInternal(value, inputRange, outputRange);
|
|
130
|
-
|
|
131
|
-
if (left === Extrapolate.CLAMP) {
|
|
132
|
-
output = cond(lessThan(value, inputRange[0]), outputRange[0], output);
|
|
133
|
-
} else if (left === Extrapolate.IDENTITY) {
|
|
134
|
-
output = cond(lessThan(value, inputRange[0]), value, output);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (right === Extrapolate.CLAMP) {
|
|
138
|
-
output = cond(
|
|
139
|
-
greaterThan(value, inputRange[inputRange.length - 1]),
|
|
140
|
-
outputRange[outputRange.length - 1],
|
|
141
|
-
output
|
|
142
|
-
);
|
|
143
|
-
} else if (right === Extrapolate.IDENTITY) {
|
|
144
|
-
output = cond(
|
|
145
|
-
greaterThan(value, inputRange[inputRange.length - 1]),
|
|
146
|
-
value,
|
|
147
|
-
output
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return output;
|
|
152
|
-
}
|