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,248 @@
|
|
|
1
|
+
// spread and rest parameters can't be used in worklets right now
|
|
2
|
+
/* eslint-disable prefer-rest-params */
|
|
3
|
+
/* eslint-disable prefer-spread */
|
|
4
|
+
/* global _WORKLET */
|
|
5
|
+
// @ts-ignore reanimated1/Easing is JS file
|
|
6
|
+
import EasingNode from '../reanimated1/Easing';
|
|
7
|
+
import { Bezier } from './Bezier';
|
|
8
|
+
/**
|
|
9
|
+
* A linear function, `f(t) = t`. Position correlates to elapsed time one to
|
|
10
|
+
* one.
|
|
11
|
+
*
|
|
12
|
+
* http://cubic-bezier.com/#0,0,1,1
|
|
13
|
+
*/
|
|
14
|
+
function linear(t) {
|
|
15
|
+
'worklet';
|
|
16
|
+
return t;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A simple inertial interaction, similar to an object slowly accelerating to
|
|
20
|
+
* speed.
|
|
21
|
+
*
|
|
22
|
+
* http://cubic-bezier.com/#.42,0,1,1
|
|
23
|
+
*/
|
|
24
|
+
function ease(t) {
|
|
25
|
+
'worklet';
|
|
26
|
+
return Bezier(0.42, 0, 1, 1)(t);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A quadratic function, `f(t) = t * t`. Position equals the square of elapsed
|
|
30
|
+
* time.
|
|
31
|
+
*
|
|
32
|
+
* http://easings.net/#easeInQuad
|
|
33
|
+
*/
|
|
34
|
+
function quad(t) {
|
|
35
|
+
'worklet';
|
|
36
|
+
return t * t;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed
|
|
40
|
+
* time.
|
|
41
|
+
*
|
|
42
|
+
* http://easings.net/#easeInCubic
|
|
43
|
+
*/
|
|
44
|
+
function cubic(t) {
|
|
45
|
+
'worklet';
|
|
46
|
+
return t * t * t;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A power function. Position is equal to the Nth power of elapsed time.
|
|
50
|
+
*
|
|
51
|
+
* n = 4: http://easings.net/#easeInQuart
|
|
52
|
+
* n = 5: http://easings.net/#easeInQuint
|
|
53
|
+
*/
|
|
54
|
+
function poly(n) {
|
|
55
|
+
'worklet';
|
|
56
|
+
return (t) => {
|
|
57
|
+
'worklet';
|
|
58
|
+
return Math.pow(t, n);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A sinusoidal function.
|
|
63
|
+
*
|
|
64
|
+
* http://easings.net/#easeInSine
|
|
65
|
+
*/
|
|
66
|
+
function sin(t) {
|
|
67
|
+
'worklet';
|
|
68
|
+
return 1 - Math.cos((t * Math.PI) / 2);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A circular function.
|
|
72
|
+
*
|
|
73
|
+
* http://easings.net/#easeInCirc
|
|
74
|
+
*/
|
|
75
|
+
function circle(t) {
|
|
76
|
+
'worklet';
|
|
77
|
+
return 1 - Math.sqrt(1 - t * t);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* An exponential function.
|
|
81
|
+
*
|
|
82
|
+
* http://easings.net/#easeInExpo
|
|
83
|
+
*/
|
|
84
|
+
function exp(t) {
|
|
85
|
+
'worklet';
|
|
86
|
+
return Math.pow(2, 10 * (t - 1));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A simple elastic interaction, similar to a spring oscillating back and
|
|
90
|
+
* forth.
|
|
91
|
+
*
|
|
92
|
+
* Default bounciness is 1, which overshoots a little bit once. 0 bounciness
|
|
93
|
+
* doesn't overshoot at all, and bounciness of N > 1 will overshoot about N
|
|
94
|
+
* times.
|
|
95
|
+
*
|
|
96
|
+
* http://easings.net/#easeInElastic
|
|
97
|
+
*/
|
|
98
|
+
function elastic(bounciness = 1) {
|
|
99
|
+
'worklet';
|
|
100
|
+
const p = bounciness * Math.PI;
|
|
101
|
+
return (t) => {
|
|
102
|
+
'worklet';
|
|
103
|
+
return 1 - Math.pow(Math.cos((t * Math.PI) / 2), 3) * Math.cos(t * p);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Use with `Animated.parallel()` to create a simple effect where the object
|
|
108
|
+
* animates back slightly as the animation starts.
|
|
109
|
+
*
|
|
110
|
+
* Wolfram Plot:
|
|
111
|
+
*
|
|
112
|
+
* - http://tiny.cc/back_default (s = 1.70158, default)
|
|
113
|
+
*/
|
|
114
|
+
function back(s = 1.70158) {
|
|
115
|
+
'worklet';
|
|
116
|
+
return (t) => {
|
|
117
|
+
'worklet';
|
|
118
|
+
return t * t * ((s + 1) * t - s);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Provides a simple bouncing effect.
|
|
123
|
+
*
|
|
124
|
+
* http://easings.net/#easeInBounce
|
|
125
|
+
*/
|
|
126
|
+
function bounce(t) {
|
|
127
|
+
'worklet';
|
|
128
|
+
if (t < 1 / 2.75) {
|
|
129
|
+
return 7.5625 * t * t;
|
|
130
|
+
}
|
|
131
|
+
if (t < 2 / 2.75) {
|
|
132
|
+
const t2 = t - 1.5 / 2.75;
|
|
133
|
+
return 7.5625 * t2 * t2 + 0.75;
|
|
134
|
+
}
|
|
135
|
+
if (t < 2.5 / 2.75) {
|
|
136
|
+
const t2 = t - 2.25 / 2.75;
|
|
137
|
+
return 7.5625 * t2 * t2 + 0.9375;
|
|
138
|
+
}
|
|
139
|
+
const t2 = t - 2.625 / 2.75;
|
|
140
|
+
return 7.5625 * t2 * t2 + 0.984375;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Provides a cubic bezier curve, equivalent to CSS Transitions'
|
|
144
|
+
* `transition-timing-function`.
|
|
145
|
+
*
|
|
146
|
+
* A useful tool to visualize cubic bezier curves can be found at
|
|
147
|
+
* http://cubic-bezier.com/
|
|
148
|
+
*/
|
|
149
|
+
function bezier(x1, y1, x2, y2) {
|
|
150
|
+
'worklet';
|
|
151
|
+
return {
|
|
152
|
+
factory: () => {
|
|
153
|
+
'worklet';
|
|
154
|
+
return Bezier(x1, y1, x2, y2);
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function bezierFn(x1, y1, x2, y2) {
|
|
159
|
+
'worklet';
|
|
160
|
+
return Bezier(x1, y1, x2, y2);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Runs an easing function forwards.
|
|
164
|
+
*/
|
|
165
|
+
function in_(easing) {
|
|
166
|
+
'worklet';
|
|
167
|
+
return easing;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Runs an easing function backwards.
|
|
171
|
+
*/
|
|
172
|
+
function out(easing) {
|
|
173
|
+
'worklet';
|
|
174
|
+
return (t) => {
|
|
175
|
+
'worklet';
|
|
176
|
+
return 1 - easing(1 - t);
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Makes any easing function symmetrical. The easing function will run
|
|
181
|
+
* forwards for half of the duration, then backwards for the rest of the
|
|
182
|
+
* duration.
|
|
183
|
+
*/
|
|
184
|
+
function inOut(easing) {
|
|
185
|
+
'worklet';
|
|
186
|
+
return (t) => {
|
|
187
|
+
'worklet';
|
|
188
|
+
if (t < 0.5) {
|
|
189
|
+
return easing(t * 2) / 2;
|
|
190
|
+
}
|
|
191
|
+
return 1 - easing((1 - t) * 2) / 2;
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const EasingObject = {
|
|
195
|
+
linear,
|
|
196
|
+
ease,
|
|
197
|
+
quad,
|
|
198
|
+
cubic,
|
|
199
|
+
poly,
|
|
200
|
+
sin,
|
|
201
|
+
circle,
|
|
202
|
+
exp,
|
|
203
|
+
elastic,
|
|
204
|
+
back,
|
|
205
|
+
bounce,
|
|
206
|
+
bezier,
|
|
207
|
+
bezierFn,
|
|
208
|
+
in: in_,
|
|
209
|
+
out,
|
|
210
|
+
inOut,
|
|
211
|
+
};
|
|
212
|
+
// TODO type worklets
|
|
213
|
+
function createChecker(worklet, workletName, prevArgs) {
|
|
214
|
+
/* should return Animated.Value or worklet */
|
|
215
|
+
function checkIfReaOne() {
|
|
216
|
+
'worklet';
|
|
217
|
+
if (arguments && !_WORKLET) {
|
|
218
|
+
for (let i = 0; i < arguments.length; i++) {
|
|
219
|
+
const arg = arguments[i];
|
|
220
|
+
if (arg && arg.__nodeID) {
|
|
221
|
+
console.warn(`Easing was renamed to EasingNode in Reanimated 2. Please use EasingNode instead`);
|
|
222
|
+
if (prevArgs) {
|
|
223
|
+
return EasingNode[workletName]
|
|
224
|
+
.apply(undefined, prevArgs)
|
|
225
|
+
.apply(undefined, arguments);
|
|
226
|
+
}
|
|
227
|
+
return EasingNode[workletName].apply(undefined, arguments);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// @ts-ignore this is implicitly any - TODO
|
|
232
|
+
const res = worklet.apply(this, arguments);
|
|
233
|
+
if (!_WORKLET && res && typeof res === 'function' && res.__workletHash) {
|
|
234
|
+
return createChecker(res, workletName, arguments);
|
|
235
|
+
}
|
|
236
|
+
return res;
|
|
237
|
+
}
|
|
238
|
+
// use original worklet on UI side
|
|
239
|
+
checkIfReaOne._closure = worklet._closure;
|
|
240
|
+
checkIfReaOne.asString = worklet.asString;
|
|
241
|
+
checkIfReaOne.__workletHash = worklet.__workletHash;
|
|
242
|
+
checkIfReaOne.__location = worklet.__location;
|
|
243
|
+
return checkIfReaOne;
|
|
244
|
+
}
|
|
245
|
+
Object.keys(EasingObject).forEach((key) => {
|
|
246
|
+
EasingObject[key] = createChecker(EasingObject[key], key);
|
|
247
|
+
});
|
|
248
|
+
export const Easing = EasingObject;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { findNodeHandle } from 'react-native';
|
|
2
|
+
import { isChromeDebugger, isWeb, shouldBeUseWeb } from './PlatformChecker';
|
|
3
|
+
export function getTag(view) {
|
|
4
|
+
return findNodeHandle(view);
|
|
5
|
+
}
|
|
6
|
+
const isNative = !shouldBeUseWeb();
|
|
7
|
+
export let measure;
|
|
8
|
+
if (isWeb()) {
|
|
9
|
+
measure = (animatedRef) => {
|
|
10
|
+
const element = animatedRef(); // TODO: fix typing of animated refs on web
|
|
11
|
+
const viewportOffset = element.getBoundingClientRect();
|
|
12
|
+
return {
|
|
13
|
+
width: element.offsetWidth,
|
|
14
|
+
height: element.offsetHeight,
|
|
15
|
+
x: element.offsetLeft,
|
|
16
|
+
y: element.offsetTop,
|
|
17
|
+
pageX: viewportOffset.left,
|
|
18
|
+
pageY: viewportOffset.top,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
else if (isChromeDebugger()) {
|
|
23
|
+
measure = (_animatedRef) => {
|
|
24
|
+
console.warn('[Reanimated] measure() cannot be used with Chrome Debugger.');
|
|
25
|
+
return null;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
measure = (animatedRef) => {
|
|
30
|
+
'worklet';
|
|
31
|
+
if (!_WORKLET) {
|
|
32
|
+
console.warn('[Reanimated] measure() was called from the main JS context. Measure is ' +
|
|
33
|
+
'only available in the UI runtime. This may also happen if measure() ' +
|
|
34
|
+
'was called by a worklet in the useAnimatedStyle hook, because useAnimatedStyle ' +
|
|
35
|
+
'calls the given worklet on the JS runtime during render. If you want to ' +
|
|
36
|
+
'prevent this warning then wrap the call with `if (_WORKLET)`. Then it will ' +
|
|
37
|
+
'only be called on the UI runtime after the render has been completed.');
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const viewTag = animatedRef();
|
|
41
|
+
if (viewTag === -1) {
|
|
42
|
+
console.warn(`[Reanimated] The view with tag ${viewTag} is not a valid argument for measure(). This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const measured = _measure(viewTag);
|
|
46
|
+
if (measured === null) {
|
|
47
|
+
console.warn(`[Reanimated] The view with tag ${viewTag} has some undefined, not-yet-computed or meaningless value of \`LayoutMetrics\` type. This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`);
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
else if (measured.x === -1234567) {
|
|
51
|
+
console.warn(`[Reanimated] The view with tag ${viewTag} returned an invalid measurement response.`);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
else if (isNaN(measured.x)) {
|
|
55
|
+
console.warn(`[Reanimated] The view with tag ${viewTag} gets view-flattened on Android. To disable view-flattening, set \`collapsable={false}\` on this component.`);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return measured;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export let scrollTo;
|
|
64
|
+
if (isWeb()) {
|
|
65
|
+
scrollTo = (animatedRef, x, y, animated) => {
|
|
66
|
+
'worklet';
|
|
67
|
+
const element = animatedRef();
|
|
68
|
+
// @ts-ignore same call as in react-native-web
|
|
69
|
+
element.scrollTo({ x, y, animated });
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
else if (isNative) {
|
|
73
|
+
scrollTo = (animatedRef, x, y, animated) => {
|
|
74
|
+
'worklet';
|
|
75
|
+
if (!_WORKLET) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const viewTag = animatedRef();
|
|
79
|
+
_scrollTo(viewTag, x, y, animated);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
scrollTo = (_animatedRef, _x, _y) => {
|
|
84
|
+
// no-op
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function setGestureState(handlerTag, newState) {
|
|
88
|
+
'worklet';
|
|
89
|
+
if (!_WORKLET || !isNative) {
|
|
90
|
+
console.warn('[Reanimated] You can not use setGestureState in non-worklet function.');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
_setGestureState(handlerTag, newState);
|
|
94
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
import { checkVersion } from '../platform-specific/checkVersion';
|
|
3
|
+
export class NativeReanimated {
|
|
4
|
+
constructor(native = true) {
|
|
5
|
+
if (global.__reanimatedModuleProxy === undefined && native) {
|
|
6
|
+
const { ReanimatedModule } = NativeModules;
|
|
7
|
+
ReanimatedModule === null || ReanimatedModule === void 0 ? void 0 : ReanimatedModule.installTurboModule();
|
|
8
|
+
}
|
|
9
|
+
this.InnerNativeModule = global.__reanimatedModuleProxy;
|
|
10
|
+
this.native = native;
|
|
11
|
+
if (native) {
|
|
12
|
+
checkVersion();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
installCoreFunctions(valueSetter) {
|
|
16
|
+
return this.InnerNativeModule.installCoreFunctions(valueSetter);
|
|
17
|
+
}
|
|
18
|
+
makeShareable(value) {
|
|
19
|
+
return this.InnerNativeModule.makeShareable(value);
|
|
20
|
+
}
|
|
21
|
+
makeMutable(value) {
|
|
22
|
+
return this.InnerNativeModule.makeMutable(value);
|
|
23
|
+
}
|
|
24
|
+
makeRemote(object = {}) {
|
|
25
|
+
return this.InnerNativeModule.makeRemote(object);
|
|
26
|
+
}
|
|
27
|
+
registerSensor(sensorType, interval, sensorData) {
|
|
28
|
+
return this.InnerNativeModule.registerSensor(sensorType, interval, sensorData);
|
|
29
|
+
}
|
|
30
|
+
unregisterSensor(sensorId) {
|
|
31
|
+
return this.InnerNativeModule.unregisterSensor(sensorId);
|
|
32
|
+
}
|
|
33
|
+
startMapper(mapper, inputs = [], outputs = [], updater, viewDescriptors) {
|
|
34
|
+
return this.InnerNativeModule.startMapper(mapper, inputs, outputs, updater, viewDescriptors);
|
|
35
|
+
}
|
|
36
|
+
stopMapper(mapperId) {
|
|
37
|
+
return this.InnerNativeModule.stopMapper(mapperId);
|
|
38
|
+
}
|
|
39
|
+
registerEventHandler(eventHash, eventHandler) {
|
|
40
|
+
return this.InnerNativeModule.registerEventHandler(eventHash, eventHandler);
|
|
41
|
+
}
|
|
42
|
+
unregisterEventHandler(id) {
|
|
43
|
+
return this.InnerNativeModule.unregisterEventHandler(id);
|
|
44
|
+
}
|
|
45
|
+
getViewProp(viewTag, propName, callback) {
|
|
46
|
+
return this.InnerNativeModule.getViewProp(viewTag, propName, callback);
|
|
47
|
+
}
|
|
48
|
+
enableLayoutAnimations(flag) {
|
|
49
|
+
this.InnerNativeModule.enableLayoutAnimations(flag);
|
|
50
|
+
}
|
|
51
|
+
configureProps(uiProps, nativeProps) {
|
|
52
|
+
this.InnerNativeModule.configureProps(uiProps, nativeProps);
|
|
53
|
+
}
|
|
54
|
+
subscribeForKeyboardEvents(keyboardEventData) {
|
|
55
|
+
return this.InnerNativeModule.subscribeForKeyboardEvents(keyboardEventData);
|
|
56
|
+
}
|
|
57
|
+
unsubscribeFromKeyboardEvents(listenerId) {
|
|
58
|
+
this.InnerNativeModule.unsubscribeFromKeyboardEvents(listenerId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import reanimatedJS from '../js-reanimated';
|
|
2
|
+
import { shouldBeUseWeb } from '../PlatformChecker';
|
|
3
|
+
import { NativeReanimated } from './NativeReanimated';
|
|
4
|
+
let exportedModule;
|
|
5
|
+
if (shouldBeUseWeb()) {
|
|
6
|
+
exportedModule = reanimatedJS;
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
exportedModule = new NativeReanimated();
|
|
10
|
+
}
|
|
11
|
+
export default exportedModule;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
export function isJest() {
|
|
3
|
+
return !!process.env.JEST_WORKER_ID;
|
|
4
|
+
}
|
|
5
|
+
export function isChromeDebugger() {
|
|
6
|
+
return !global.nativeCallSyncHook || global.__REMOTEDEV__;
|
|
7
|
+
}
|
|
8
|
+
export function isWeb() {
|
|
9
|
+
return Platform.OS === 'web';
|
|
10
|
+
}
|
|
11
|
+
export function shouldBeUseWeb() {
|
|
12
|
+
return isJest() || isChromeDebugger() || isWeb();
|
|
13
|
+
}
|
|
14
|
+
export function nativeShouldBeMock() {
|
|
15
|
+
return isJest() || isChromeDebugger();
|
|
16
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { addWhitelistedNativeProps } from '../ConfigHelper';
|
|
2
|
+
export function createAnimatedPropAdapter(adapter, nativeProps) {
|
|
3
|
+
const nativePropsToAdd = {};
|
|
4
|
+
// eslint-disable-next-line no-unused-expressions
|
|
5
|
+
nativeProps === null || nativeProps === void 0 ? void 0 : nativeProps.forEach((prop) => {
|
|
6
|
+
nativePropsToAdd[prop] = true;
|
|
7
|
+
});
|
|
8
|
+
addWhitelistedNativeProps(nativePropsToAdd);
|
|
9
|
+
return adapter;
|
|
10
|
+
}
|
|
11
|
+
// ADAPTERS
|
|
12
|
+
export const SVGAdapter = createAnimatedPropAdapter((props) => {
|
|
13
|
+
'worklet';
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const keys = Object.keys(props);
|
|
16
|
+
// transform
|
|
17
|
+
if (keys.includes('transform')) {
|
|
18
|
+
if (Array.isArray(props.transform)) {
|
|
19
|
+
// case of array with 6 values => https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/elements/Shape.tsx#L200
|
|
20
|
+
if (props.transform.length !== 6) {
|
|
21
|
+
throw new Error(`invalid transform length of ${props.transform.length}, should be 6`);
|
|
22
|
+
}
|
|
23
|
+
const transform = props.transform;
|
|
24
|
+
const x = (_a = props.x) !== null && _a !== void 0 ? _a : 0;
|
|
25
|
+
const y = (_b = props.y) !== null && _b !== void 0 ? _b : 0;
|
|
26
|
+
props.transform = [
|
|
27
|
+
{ translateX: transform[0] * x + transform[2] * y + transform[4] },
|
|
28
|
+
{ translateY: transform[1] * x + transform[3] * y + transform[5] },
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
else if (typeof props.transform === 'string') {
|
|
32
|
+
// case of string 'translate(translateX translateY)'
|
|
33
|
+
// todo: handle other cases of transform string like here https://github.com/react-native-svg/react-native-svg/blob/b2e2c355204ff4b10973d3afce1495f7e4167ff7/src/lib/extract/extractTransform.ts#L184
|
|
34
|
+
const transform = props.transform;
|
|
35
|
+
const arr = transform
|
|
36
|
+
.replace('translate(', '')
|
|
37
|
+
.replace(')', '')
|
|
38
|
+
.split(' ');
|
|
39
|
+
props.transform = [
|
|
40
|
+
{ translateX: parseFloat(arr[0]) },
|
|
41
|
+
{ translateY: parseFloat(arr[1]) },
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// todo: other props
|
|
46
|
+
});
|
|
47
|
+
export const TextInputAdapter = createAnimatedPropAdapter((props) => {
|
|
48
|
+
'worklet';
|
|
49
|
+
const keys = Object.keys(props);
|
|
50
|
+
// convert text to value like RN does here: https://github.com/facebook/react-native/blob/f2c6279ca497b34d5a2bfbb6f2d33dc7a7bea02a/Libraries/Components/TextInput/TextInput.js#L878
|
|
51
|
+
if (keys.includes('value')) {
|
|
52
|
+
props.text = props.value;
|
|
53
|
+
delete props.value;
|
|
54
|
+
}
|
|
55
|
+
}, ['text']);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { processColor } from './Colors';
|
|
2
|
+
import { makeShareable, isConfigured } from './core';
|
|
3
|
+
import { _updatePropsJS } from './js-reanimated';
|
|
4
|
+
import { shouldBeUseWeb } from './PlatformChecker';
|
|
5
|
+
// copied from react-native/Libraries/Components/View/ReactNativeStyleAttributes
|
|
6
|
+
export const colorProps = [
|
|
7
|
+
'backgroundColor',
|
|
8
|
+
'borderBottomColor',
|
|
9
|
+
'borderColor',
|
|
10
|
+
'borderLeftColor',
|
|
11
|
+
'borderRightColor',
|
|
12
|
+
'borderTopColor',
|
|
13
|
+
'borderStartColor',
|
|
14
|
+
'borderEndColor',
|
|
15
|
+
'color',
|
|
16
|
+
'shadowColor',
|
|
17
|
+
'textDecorationColor',
|
|
18
|
+
'tintColor',
|
|
19
|
+
'textShadowColor',
|
|
20
|
+
'overlayColor',
|
|
21
|
+
];
|
|
22
|
+
export const ColorProperties = !isConfigured() ? [] : makeShareable(colorProps);
|
|
23
|
+
let updatePropsByPlatform;
|
|
24
|
+
if (shouldBeUseWeb()) {
|
|
25
|
+
updatePropsByPlatform = (_, updates, maybeViewRef) => {
|
|
26
|
+
'worklet';
|
|
27
|
+
if (maybeViewRef) {
|
|
28
|
+
maybeViewRef.items.forEach((item, _) => {
|
|
29
|
+
_updatePropsJS(updates, item);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
updatePropsByPlatform = (viewDescriptors, updates, _) => {
|
|
36
|
+
'worklet';
|
|
37
|
+
for (const key in updates) {
|
|
38
|
+
if (ColorProperties.indexOf(key) !== -1) {
|
|
39
|
+
updates[key] = processColor(updates[key]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
viewDescriptors.value.forEach((viewDescriptor) => {
|
|
43
|
+
_updateProps(viewDescriptor.tag, viewDescriptor.name || 'RCTView', updates);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export const updateProps = updatePropsByPlatform;
|
|
48
|
+
export const updatePropsJestWrapper = (viewDescriptors, updates, maybeViewRef, animatedStyle, adapters) => {
|
|
49
|
+
adapters.forEach((adapter) => {
|
|
50
|
+
adapter(updates);
|
|
51
|
+
});
|
|
52
|
+
animatedStyle.current.value = Object.assign(Object.assign({}, animatedStyle.current.value), updates);
|
|
53
|
+
updateProps(viewDescriptors, updates, maybeViewRef);
|
|
54
|
+
};
|
|
55
|
+
export default updateProps;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { makeMutable } from './core';
|
|
3
|
+
import { shouldBeUseWeb } from './PlatformChecker';
|
|
4
|
+
const scheduleUpdates = shouldBeUseWeb() ? requestAnimationFrame : setImmediate;
|
|
5
|
+
export function makeViewDescriptorsSet() {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
if (ref.current === null) {
|
|
8
|
+
const data = {
|
|
9
|
+
batchToRemove: new Set(),
|
|
10
|
+
tags: new Set(),
|
|
11
|
+
waitForInsertSync: false,
|
|
12
|
+
waitForRemoveSync: false,
|
|
13
|
+
sharableViewDescriptors: makeMutable([]),
|
|
14
|
+
items: [],
|
|
15
|
+
add: (item) => {
|
|
16
|
+
if (data.tags.has(item.tag)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
data.tags.add(item.tag);
|
|
20
|
+
data.items.push(item);
|
|
21
|
+
if (!data.waitForInsertSync) {
|
|
22
|
+
data.waitForInsertSync = true;
|
|
23
|
+
scheduleUpdates(() => {
|
|
24
|
+
data.sharableViewDescriptors.value = data.items;
|
|
25
|
+
data.waitForInsertSync = false;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
remove: (viewTag) => {
|
|
30
|
+
data.batchToRemove.add(viewTag);
|
|
31
|
+
if (!data.waitForRemoveSync) {
|
|
32
|
+
data.waitForRemoveSync = true;
|
|
33
|
+
scheduleUpdates(() => {
|
|
34
|
+
const items = [];
|
|
35
|
+
for (const item of data.items) {
|
|
36
|
+
if (data.batchToRemove.has(item.tag)) {
|
|
37
|
+
data.tags.delete(item.tag);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
items.push(item);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
data.items = items;
|
|
44
|
+
data.sharableViewDescriptors.value = items;
|
|
45
|
+
data.batchToRemove = new Set();
|
|
46
|
+
data.waitForRemoveSync = false;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
rebuildsharableViewDescriptors: (sharableViewDescriptors) => {
|
|
51
|
+
data.sharableViewDescriptors = sharableViewDescriptors;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
ref.current = data;
|
|
55
|
+
}
|
|
56
|
+
return ref.current;
|
|
57
|
+
}
|
|
58
|
+
export function makeViewsRefSet() {
|
|
59
|
+
const ref = useRef(null);
|
|
60
|
+
if (ref.current === null) {
|
|
61
|
+
const data = {
|
|
62
|
+
items: new Set(),
|
|
63
|
+
add: (item) => {
|
|
64
|
+
if (data.items.has(item))
|
|
65
|
+
return;
|
|
66
|
+
data.items.add(item);
|
|
67
|
+
},
|
|
68
|
+
remove: (item) => {
|
|
69
|
+
data.items.delete(item);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
ref.current = data;
|
|
73
|
+
}
|
|
74
|
+
return ref.current;
|
|
75
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import NativeReanimatedModule from './NativeReanimated';
|
|
2
|
+
function jsListener(eventName, handler) {
|
|
3
|
+
return (evt) => {
|
|
4
|
+
handler(Object.assign(Object.assign({}, evt.nativeEvent), { eventName }));
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export default class WorkletEventHandler {
|
|
8
|
+
constructor(worklet, eventNames = []) {
|
|
9
|
+
this.worklet = worklet;
|
|
10
|
+
this.eventNames = eventNames;
|
|
11
|
+
this.reattachNeeded = false;
|
|
12
|
+
this.listeners = {};
|
|
13
|
+
this.viewTag = undefined;
|
|
14
|
+
this.registrations = [];
|
|
15
|
+
if (!NativeReanimatedModule.native) {
|
|
16
|
+
this.listeners = eventNames.reduce((acc, eventName) => {
|
|
17
|
+
acc[eventName] = jsListener(eventName, worklet);
|
|
18
|
+
return acc;
|
|
19
|
+
}, {});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
updateWorklet(newWorklet) {
|
|
23
|
+
this.worklet = newWorklet;
|
|
24
|
+
this.reattachNeeded = true;
|
|
25
|
+
}
|
|
26
|
+
registerForEvents(viewTag, fallbackEventName) {
|
|
27
|
+
this.viewTag = viewTag;
|
|
28
|
+
this.registrations = this.eventNames.map((eventName) => NativeReanimatedModule.registerEventHandler(viewTag + eventName, this.worklet));
|
|
29
|
+
if (this.registrations.length === 0 && fallbackEventName) {
|
|
30
|
+
this.registrations.push(NativeReanimatedModule.registerEventHandler(viewTag + fallbackEventName, this.worklet));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
unregisterFromEvents() {
|
|
34
|
+
this.registrations.forEach((id) => NativeReanimatedModule.unregisterEventHandler(id));
|
|
35
|
+
this.registrations = [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
export default class MutableValue {
|
|
4
|
+
constructor(value) {
|
|
5
|
+
this._value = value;
|
|
6
|
+
}
|
|
7
|
+
get value() {
|
|
8
|
+
return this._value;
|
|
9
|
+
}
|
|
10
|
+
set value(nextValue) {
|
|
11
|
+
this._value = nextValue;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
import MutableValue from './MutableValue';
|
|
4
|
+
global._setGlobalConsole = (_val) => {
|
|
5
|
+
// noop
|
|
6
|
+
};
|
|
7
|
+
const NOOP = () => {
|
|
8
|
+
// noop
|
|
9
|
+
};
|
|
10
|
+
export default {
|
|
11
|
+
installCoreFunctions: NOOP,
|
|
12
|
+
makeShareable: (worklet) => worklet,
|
|
13
|
+
makeMutable: (init) => new MutableValue(init),
|
|
14
|
+
makeRemote: NOOP,
|
|
15
|
+
startMapper: NOOP,
|
|
16
|
+
stopMapper: NOOP,
|
|
17
|
+
registerEventHandler: NOOP,
|
|
18
|
+
unregisterEventHandler: NOOP,
|
|
19
|
+
getViewProp: NOOP,
|
|
20
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|