react-native-reanimated 3.8.0 → 3.9.0-layout-animation-experimental
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/Fabric/ShadowTreeCloner.cpp +5 -2
- package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.cpp +42 -32
- package/Common/cpp/LayoutAnimations/LayoutAnimationsManager.h +5 -7
- package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +565 -0
- package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.h +74 -0
- package/Common/cpp/LayoutAnimations/LayoutAnimationsUtils.h +140 -0
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +216 -58
- package/Common/cpp/NativeModules/NativeReanimatedModule.h +32 -11
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +2 -17
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +6 -8
- package/Common/cpp/ReanimatedRuntime/RNRuntimeDecorator.cpp +3 -0
- package/Common/cpp/ReanimatedRuntime/WorkletRuntime.cpp +3 -4
- package/Common/cpp/ReanimatedRuntime/WorkletRuntimeDecorator.cpp +8 -3
- package/Common/cpp/SharedItems/Shareables.cpp +31 -5
- package/Common/cpp/SharedItems/Shareables.h +18 -2
- package/Common/cpp/Tools/JSScheduler.cpp +29 -5
- package/Common/cpp/Tools/JSScheduler.h +21 -4
- package/Common/cpp/Tools/PlatformDepMethodsHolder.h +6 -2
- package/Common/cpp/Tools/UIRuntimeDecorator.cpp +6 -0
- package/Common/cpp/Tools/UIRuntimeDecorator.h +1 -0
- package/android/CMakeLists.txt +3 -0
- package/android/build.gradle +17 -5
- package/android/src/main/cpp/NativeProxy.cpp +77 -12
- package/android/src/main/cpp/NativeProxy.h +35 -1
- package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +58 -19
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +7 -2
- package/android/src/{reactNativeVersionPatch/ReanimatedUIManager/latest → main/java}/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +5 -5
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +10 -6
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +18 -1
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/SharedTransitionManager.java +105 -17
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +2 -1
- package/android/src/paper/java/com/swmansion/reanimated/NativeReanimatedModuleSpec.java +37 -0
- package/android/src/{main/java/com/swmansion/reanimated → reactNativeVersionPatch/ReanimatedUIManager/73/com/swmansion}/ReanimatedModule.java +4 -3
- package/android/src/reactNativeVersionPatch/ReanimatedUIManager/{70 → 73}/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +1 -22
- package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/ReanimatedModule.java +176 -0
- package/android/src/reactNativeVersionPatch/ReanimatedUIManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +0 -26
- package/android/src/{fabric/java → reactNativeVersionPatch/RuntimeExecutor/73}/com/swmansion/reanimated/NativeProxy.java +16 -4
- package/android/src/reactNativeVersionPatch/RuntimeExecutor/latest/com/swmansion/reanimated/NativeProxy.java +143 -0
- package/apple/LayoutReanimation/REAAnimationsManager.h +3 -0
- package/apple/LayoutReanimation/REAAnimationsManager.m +11 -0
- package/apple/LayoutReanimation/REASharedTransitionManager.m +99 -23
- package/apple/LayoutReanimation/REASnapshot.h +1 -0
- package/apple/LayoutReanimation/REASnapshot.m +78 -37
- package/apple/REAModule.h +22 -2
- package/apple/REAModule.mm +97 -46
- package/apple/REANodesManager.h +3 -3
- package/apple/REANodesManager.mm +46 -22
- package/apple/native/NativeProxy.h +28 -2
- package/apple/native/NativeProxy.mm +65 -195
- package/apple/native/PlatformDepMethodsHolderImpl.h +59 -0
- package/apple/native/PlatformDepMethodsHolderImpl.mm +429 -0
- package/apple/sensor/ReanimatedSensor.m +5 -5
- package/lib/module/Animated.js.map +1 -1
- package/lib/module/ConfigHelper.js +1 -1
- package/lib/module/ConfigHelper.js.map +1 -1
- package/lib/module/animationBuilder.js +1 -0
- package/lib/module/animationBuilder.js.map +1 -1
- package/lib/module/createAnimatedComponent/InlinePropManager.js +4 -4
- package/lib/module/createAnimatedComponent/InlinePropManager.js.map +1 -1
- package/lib/module/createAnimatedComponent/JSPropsUpdater.js +9 -6
- package/lib/module/createAnimatedComponent/JSPropsUpdater.js.map +1 -1
- package/lib/module/createAnimatedComponent/JSPropsUpdater.web.js +11 -0
- package/lib/module/createAnimatedComponent/JSPropsUpdater.web.js.map +1 -0
- package/lib/module/createAnimatedComponent/PropsFilter.js +25 -9
- package/lib/module/createAnimatedComponent/PropsFilter.js.map +1 -1
- package/lib/module/createAnimatedComponent/commonTypes.js.map +1 -1
- package/lib/module/createAnimatedComponent/createAnimatedComponent.js +83 -52
- package/lib/module/createAnimatedComponent/createAnimatedComponent.js.map +1 -1
- package/lib/module/createAnimatedComponent/getViewInfo.js +37 -0
- package/lib/module/createAnimatedComponent/getViewInfo.js.map +1 -0
- package/lib/module/createAnimatedComponent/index.js.map +1 -1
- package/lib/module/createAnimatedComponent/setAndForwardRef.js +4 -5
- package/lib/module/createAnimatedComponent/setAndForwardRef.js.map +1 -1
- package/lib/module/createAnimatedComponent/utils.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -2
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/mock.js +12 -12
- package/lib/module/mock.js.map +1 -1
- package/lib/module/propsAllowlists.js.map +1 -1
- package/lib/module/reanimated2/Bezier.js.map +1 -1
- package/lib/module/reanimated2/Colors.js +4 -11
- package/lib/module/reanimated2/Colors.js.map +1 -1
- package/lib/module/reanimated2/Easing.js +3 -7
- package/lib/module/reanimated2/Easing.js.map +1 -1
- package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +16 -13
- package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
- package/lib/module/reanimated2/NativeReanimated/index.js.map +1 -1
- package/lib/module/reanimated2/NativeReanimated/index.web.js.map +1 -1
- package/lib/module/reanimated2/PlatformChecker.js +2 -1
- package/lib/module/reanimated2/PlatformChecker.js.map +1 -1
- package/lib/module/reanimated2/PropAdapters.js +1 -1
- package/lib/module/reanimated2/PropAdapters.js.map +1 -1
- package/lib/module/reanimated2/PropsRegistry.js +1 -2
- package/lib/module/reanimated2/PropsRegistry.js.map +1 -1
- package/lib/module/reanimated2/Sensor.js +2 -2
- package/lib/module/reanimated2/Sensor.js.map +1 -1
- package/lib/module/reanimated2/SensorContainer.js +2 -2
- package/lib/module/reanimated2/SensorContainer.js.map +1 -1
- package/lib/module/reanimated2/UpdateLayoutAnimations.js +30 -8
- package/lib/module/reanimated2/UpdateLayoutAnimations.js.map +1 -1
- package/lib/module/reanimated2/UpdateProps.js.map +1 -1
- package/lib/module/reanimated2/ViewDescriptorsSet.js.map +1 -1
- package/lib/module/reanimated2/WorkletEventHandler.js +74 -31
- package/lib/module/reanimated2/WorkletEventHandler.js.map +1 -1
- package/lib/module/reanimated2/animation/clamp.js.map +1 -1
- package/lib/module/reanimated2/animation/commonTypes.js.map +1 -1
- package/lib/module/reanimated2/animation/decay/decay.js.map +1 -1
- package/lib/module/reanimated2/animation/decay/index.js.map +1 -1
- package/lib/module/reanimated2/animation/decay/rigidDecay.js.map +1 -1
- package/lib/module/reanimated2/animation/decay/rubberBandDecay.js.map +1 -1
- package/lib/module/reanimated2/animation/decay/utils.js.map +1 -1
- package/lib/module/reanimated2/animation/delay.js.map +1 -1
- package/lib/module/reanimated2/animation/index.js.map +1 -1
- package/lib/module/reanimated2/animation/repeat.js +1 -6
- package/lib/module/reanimated2/animation/repeat.js.map +1 -1
- package/lib/module/reanimated2/animation/sequence.js +1 -5
- package/lib/module/reanimated2/animation/sequence.js.map +1 -1
- package/lib/module/reanimated2/animation/spring.js.map +1 -1
- package/lib/module/reanimated2/animation/springUtils.js +8 -10
- package/lib/module/reanimated2/animation/springUtils.js.map +1 -1
- package/lib/module/reanimated2/animation/styleAnimation.js +5 -4
- package/lib/module/reanimated2/animation/styleAnimation.js.map +1 -1
- package/lib/module/reanimated2/animation/timing.js +4 -1
- package/lib/module/reanimated2/animation/timing.js.map +1 -1
- package/lib/module/reanimated2/animation/transformationMatrix/matrixUtils.js +1 -2
- package/lib/module/reanimated2/animation/transformationMatrix/matrixUtils.js.map +1 -1
- package/lib/module/reanimated2/animation/util.js +22 -2
- package/lib/module/reanimated2/animation/util.js.map +1 -1
- package/lib/module/reanimated2/commonTypes.js +3 -1
- package/lib/module/reanimated2/commonTypes.js.map +1 -1
- package/lib/module/reanimated2/component/FlatList.js +1 -0
- package/lib/module/reanimated2/component/FlatList.js.map +1 -1
- package/lib/module/reanimated2/component/Image.js +1 -0
- package/lib/module/reanimated2/component/Image.js.map +1 -1
- package/lib/module/reanimated2/component/LayoutAnimationConfig.js +1 -0
- package/lib/module/reanimated2/component/LayoutAnimationConfig.js.map +1 -1
- package/lib/module/reanimated2/component/PerformanceMonitor.js +169 -0
- package/lib/module/reanimated2/component/PerformanceMonitor.js.map +1 -0
- package/lib/module/reanimated2/component/ScrollView.js +1 -0
- package/lib/module/reanimated2/component/ScrollView.js.map +1 -1
- package/lib/module/reanimated2/component/Text.js +1 -0
- package/lib/module/reanimated2/component/Text.js.map +1 -1
- package/lib/module/reanimated2/component/View.js +1 -0
- package/lib/module/reanimated2/component/View.js.map +1 -1
- package/lib/module/reanimated2/core.js +6 -15
- package/lib/module/reanimated2/core.js.map +1 -1
- package/lib/module/reanimated2/errors.js +8 -8
- package/lib/module/reanimated2/errors.js.map +1 -1
- package/lib/module/reanimated2/fabricUtils.js +33 -8
- package/lib/module/reanimated2/fabricUtils.js.map +1 -1
- package/lib/module/reanimated2/fabricUtils.web.js.map +1 -1
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryJS.js +2 -2
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryJS.js.map +1 -1
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
- package/lib/module/reanimated2/frameCallback/index.js.map +1 -1
- package/lib/module/reanimated2/globals.d.js.map +1 -1
- package/lib/module/reanimated2/helperTypes.js.map +1 -1
- package/lib/module/reanimated2/hook/commonTypes.js.map +1 -1
- package/lib/module/reanimated2/hook/index.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedGestureHandler.js +1 -0
- package/lib/module/reanimated2/hook/useAnimatedGestureHandler.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedKeyboard.js +3 -4
- package/lib/module/reanimated2/hook/useAnimatedKeyboard.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedProps.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedReaction.js +1 -0
- package/lib/module/reanimated2/hook/useAnimatedReaction.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedRef.js +12 -7
- package/lib/module/reanimated2/hook/useAnimatedRef.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedScrollHandler.js +3 -1
- package/lib/module/reanimated2/hook/useAnimatedScrollHandler.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedSensor.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedStyle.js +3 -6
- package/lib/module/reanimated2/hook/useAnimatedStyle.js.map +1 -1
- package/lib/module/reanimated2/hook/useDerivedValue.js +3 -1
- package/lib/module/reanimated2/hook/useDerivedValue.js.map +1 -1
- package/lib/module/reanimated2/hook/useEvent.js +4 -5
- package/lib/module/reanimated2/hook/useEvent.js.map +1 -1
- package/lib/module/reanimated2/hook/useFrameCallback.js +1 -2
- package/lib/module/reanimated2/hook/useFrameCallback.js.map +1 -1
- package/lib/module/reanimated2/hook/useHandler.js +3 -1
- package/lib/module/reanimated2/hook/useHandler.js.map +1 -1
- package/lib/module/reanimated2/hook/useReducedMotion.js.map +1 -1
- package/lib/module/reanimated2/hook/useScrollViewOffset.js +60 -16
- package/lib/module/reanimated2/hook/useScrollViewOffset.js.map +1 -1
- package/lib/module/reanimated2/hook/useSharedValue.js.map +1 -1
- package/lib/module/reanimated2/hook/useWorkletCallback.js.map +1 -1
- package/lib/module/reanimated2/hook/utils.js.map +1 -1
- package/lib/module/reanimated2/index.js +2 -0
- package/lib/module/reanimated2/index.js.map +1 -1
- package/lib/module/reanimated2/initializers.js +1 -5
- package/lib/module/reanimated2/initializers.js.map +1 -1
- package/lib/module/reanimated2/interpolateColor.js +2 -6
- package/lib/module/reanimated2/interpolateColor.js.map +1 -1
- package/lib/module/reanimated2/interpolation.js +1 -1
- package/lib/module/reanimated2/interpolation.js.map +1 -1
- package/lib/module/reanimated2/isSharedValue.js.map +1 -1
- package/lib/module/reanimated2/jestUtils.js +3 -6
- package/lib/module/reanimated2/jestUtils.js.map +1 -1
- package/lib/module/reanimated2/jestUtils.web.js.map +1 -1
- package/lib/module/reanimated2/js-reanimated/JSReanimated.js +5 -9
- package/lib/module/reanimated2/js-reanimated/JSReanimated.js.map +1 -1
- package/lib/module/reanimated2/js-reanimated/WebSensor.js.map +1 -1
- package/lib/module/reanimated2/js-reanimated/index.js +2 -2
- package/lib/module/reanimated2/js-reanimated/index.js.map +1 -1
- package/lib/module/reanimated2/js-reanimated/react-native-web.d.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js +4 -2
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/BaseAnimationBuilder.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +12 -11
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +12 -10
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/Keyframe.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/commonTypes.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationBuilder/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/animationsManager.js +11 -4
- package/lib/module/reanimated2/layoutReanimation/animationsManager.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +22 -22
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Bounce.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Fade.js +22 -22
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Fade.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Flip.js +26 -26
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Flip.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +10 -10
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -6
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js +10 -10
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Roll.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +18 -18
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Rotate.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js +18 -18
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Slide.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +10 -10
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Stretch.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +34 -34
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Zoom.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultAnimations/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +17 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/defaultTransitions/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/ProgressTransitionManager.js +16 -12
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/ProgressTransitionManager.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.js +13 -7
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/sharedTransitions/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Bounce.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Fade.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Flip.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Lightspeed.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Pinwheel.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Roll.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Rotate.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Slide.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Stretch.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animation/Zoom.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animationParser.js +0 -2
- package/lib/module/reanimated2/layoutReanimation/web/animationParser.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/animationsManager.js +1 -2
- package/lib/module/reanimated2/layoutReanimation/web/animationsManager.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/componentStyle.js +3 -1
- package/lib/module/reanimated2/layoutReanimation/web/componentStyle.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/componentUtils.js +6 -7
- package/lib/module/reanimated2/layoutReanimation/web/componentUtils.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/config.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/createAnimation.js +2 -2
- package/lib/module/reanimated2/layoutReanimation/web/createAnimation.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/domUtils.js +4 -4
- package/lib/module/reanimated2/layoutReanimation/web/domUtils.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/index.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/transition/Fading.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/transition/Linear.web.js.map +1 -1
- package/lib/module/reanimated2/layoutReanimation/web/transition/Sequenced.web.js.map +1 -1
- package/lib/module/reanimated2/mappers.js +2 -4
- package/lib/module/reanimated2/mappers.js.map +1 -1
- package/lib/module/reanimated2/mockedRequestAnimationFrame.js.map +1 -1
- package/lib/module/reanimated2/mutables.js +2 -4
- package/lib/module/reanimated2/mutables.js.map +1 -1
- package/lib/module/reanimated2/platform-specific/RNRenderer.js.map +1 -1
- package/lib/module/reanimated2/platform-specific/RNRenderer.web.js.map +1 -1
- package/lib/module/reanimated2/platform-specific/checkCppVersion.js.map +1 -1
- package/lib/module/reanimated2/platform-specific/jsVersion.js +1 -1
- package/lib/module/reanimated2/platform-specific/jsVersion.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/dispatchCommand.js +2 -4
- package/lib/module/reanimated2/platformFunctions/dispatchCommand.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/dispatchCommand.web.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/getRelativeCoords.js +2 -2
- package/lib/module/reanimated2/platformFunctions/getRelativeCoords.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/index.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/measure.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/measure.web.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/scrollTo.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/scrollTo.web.js +1 -1
- package/lib/module/reanimated2/platformFunctions/scrollTo.web.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/setGestureState.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/setGestureState.web.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/setNativeProps.js.map +1 -1
- package/lib/module/reanimated2/platformFunctions/setNativeProps.web.js.map +1 -1
- package/lib/module/reanimated2/pluginUtils.js.map +1 -1
- package/lib/module/reanimated2/publicGlobals.js.map +1 -1
- package/lib/module/reanimated2/runtimes.js +11 -19
- package/lib/module/reanimated2/runtimes.js.map +1 -1
- package/lib/module/reanimated2/screenTransition/RNScreensTurboModule.js +20 -0
- package/lib/module/reanimated2/screenTransition/RNScreensTurboModule.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/animationManager.js +41 -0
- package/lib/module/reanimated2/screenTransition/animationManager.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/commonTypes.js +4 -0
- package/lib/module/reanimated2/screenTransition/commonTypes.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/index.js +5 -0
- package/lib/module/reanimated2/screenTransition/index.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/presets.js +157 -0
- package/lib/module/reanimated2/screenTransition/presets.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/styleUpdater.js +62 -0
- package/lib/module/reanimated2/screenTransition/styleUpdater.js.map +1 -0
- package/lib/module/reanimated2/screenTransition/swipeSimulator.js +190 -0
- package/lib/module/reanimated2/screenTransition/swipeSimulator.js.map +1 -0
- package/lib/module/reanimated2/shareableMappingCache.js.map +1 -1
- package/lib/module/reanimated2/shareables.js +27 -10
- package/lib/module/reanimated2/shareables.js.map +1 -1
- package/lib/module/reanimated2/threads.js +9 -34
- package/lib/module/reanimated2/threads.js.map +1 -1
- package/lib/module/reanimated2/valueSetter.js +1 -2
- package/lib/module/reanimated2/valueSetter.js.map +1 -1
- package/lib/module/reanimated2/valueUnpacker.js +4 -3
- package/lib/module/reanimated2/valueUnpacker.js.map +1 -1
- package/lib/module/specs/NativeReanimatedModule.js +5 -0
- package/lib/module/specs/NativeReanimatedModule.js.map +1 -0
- package/lib/typescript/ConfigHelper.d.ts +1 -0
- package/lib/typescript/createAnimatedComponent/InlinePropManager.d.ts +1 -1
- package/lib/typescript/createAnimatedComponent/JSPropsUpdater.web.d.ts +6 -0
- package/lib/typescript/createAnimatedComponent/PropsFilter.d.ts +3 -0
- package/lib/typescript/createAnimatedComponent/getViewInfo.d.ts +9 -0
- package/lib/typescript/reanimated2/NativeReanimated/NativeReanimated.d.ts +8 -13
- package/lib/typescript/reanimated2/UpdateLayoutAnimations.d.ts +12 -1
- package/lib/typescript/reanimated2/WorkletEventHandler.d.ts +16 -9
- package/lib/typescript/reanimated2/animation/util.d.ts +2 -0
- package/lib/typescript/reanimated2/component/LayoutAnimationConfig.d.ts +1 -1
- package/lib/typescript/reanimated2/component/PerformanceMonitor.d.ts +2 -0
- package/lib/typescript/reanimated2/core.d.ts +3 -4
- package/lib/typescript/reanimated2/hook/commonTypes.d.ts +6 -0
- package/lib/typescript/reanimated2/hook/useEvent.d.ts +2 -3
- package/lib/typescript/reanimated2/hook/useScrollViewOffset.d.ts +3 -1
- package/lib/typescript/reanimated2/index.d.ts +3 -0
- package/lib/typescript/reanimated2/js-reanimated/JSReanimated.d.ts +2 -2
- package/lib/typescript/reanimated2/layoutReanimation/animationBuilder/commonTypes.d.ts +2 -1
- package/lib/typescript/reanimated2/layoutReanimation/sharedTransitions/ProgressTransitionManager.d.ts +2 -2
- package/lib/typescript/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.d.ts +2 -2
- package/lib/typescript/reanimated2/platform-specific/jsVersion.d.ts +1 -1
- package/lib/typescript/reanimated2/screenTransition/RNScreensTurboModule.d.ts +2 -0
- package/lib/typescript/reanimated2/screenTransition/animationManager.d.ts +3 -0
- package/lib/typescript/reanimated2/screenTransition/commonTypes.d.ts +38 -0
- package/lib/typescript/reanimated2/screenTransition/index.d.ts +3 -0
- package/lib/typescript/reanimated2/screenTransition/presets.d.ts +11 -0
- package/lib/typescript/reanimated2/screenTransition/styleUpdater.d.ts +3 -0
- package/lib/typescript/reanimated2/screenTransition/swipeSimulator.d.ts +2 -0
- package/lib/typescript/specs/NativeReanimatedModule.d.ts +6 -0
- package/package.json +29 -17
- package/plugin/build/plugin.js +7 -2
- package/src/ConfigHelper.ts +1 -1
- package/src/animationBuilder.tsx +2 -0
- package/src/createAnimatedComponent/InlinePropManager.ts +2 -2
- package/src/createAnimatedComponent/JSPropsUpdater.ts +7 -6
- package/src/createAnimatedComponent/JSPropsUpdater.web.ts +26 -0
- package/src/createAnimatedComponent/PropsFilter.tsx +31 -6
- package/src/createAnimatedComponent/createAnimatedComponent.tsx +108 -60
- package/src/createAnimatedComponent/getViewInfo.ts +39 -0
- package/src/mock.ts +13 -1
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +33 -35
- package/src/reanimated2/PlatformChecker.ts +3 -2
- package/src/reanimated2/PropsRegistry.ts +1 -3
- package/src/reanimated2/UpdateLayoutAnimations.ts +53 -13
- package/src/reanimated2/WorkletEventHandler.ts +98 -39
- package/src/reanimated2/animation/styleAnimation.ts +8 -6
- package/src/reanimated2/animation/timing.ts +9 -1
- package/src/reanimated2/animation/util.ts +28 -3
- package/src/reanimated2/commonTypes.ts +4 -1
- package/src/reanimated2/component/PerformanceMonitor.tsx +216 -0
- package/src/reanimated2/core.ts +9 -31
- package/src/reanimated2/errors.ts +1 -0
- package/src/reanimated2/fabricUtils.ts +43 -18
- package/src/reanimated2/globals.d.ts +11 -1
- package/src/reanimated2/hook/commonTypes.ts +10 -0
- package/src/reanimated2/hook/useAnimatedRef.ts +20 -11
- package/src/reanimated2/hook/useEvent.ts +4 -4
- package/src/reanimated2/hook/useScrollViewOffset.ts +94 -23
- package/src/reanimated2/index.ts +11 -0
- package/src/reanimated2/js-reanimated/JSReanimated.ts +7 -7
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +4 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +9 -1
- package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +9 -1
- package/src/reanimated2/layoutReanimation/animationsManager.ts +10 -2
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +13 -0
- package/src/reanimated2/layoutReanimation/sharedTransitions/ProgressTransitionManager.ts +17 -8
- package/src/reanimated2/layoutReanimation/sharedTransitions/SharedTransition.ts +26 -7
- package/src/reanimated2/layoutReanimation/web/animationsManager.ts +1 -1
- package/src/reanimated2/layoutReanimation/web/componentStyle.ts +3 -1
- package/src/reanimated2/layoutReanimation/web/componentUtils.ts +1 -1
- package/src/reanimated2/layoutReanimation/web/createAnimation.ts +2 -2
- package/src/reanimated2/platform-specific/jsVersion.ts +1 -1
- package/src/reanimated2/platformFunctions/getRelativeCoords.ts +2 -2
- package/src/reanimated2/screenTransition/RNScreensTurboModule.ts +29 -0
- package/src/reanimated2/screenTransition/animationManager.ts +45 -0
- package/src/reanimated2/screenTransition/commonTypes.ts +63 -0
- package/src/reanimated2/screenTransition/index.ts +12 -0
- package/src/reanimated2/screenTransition/presets.ts +137 -0
- package/src/reanimated2/screenTransition/styleUpdater.ts +73 -0
- package/src/reanimated2/screenTransition/swipeSimulator.ts +238 -0
- package/src/reanimated2/shareables.ts +29 -6
- package/src/reanimated2/valueUnpacker.ts +10 -3
- package/src/specs/NativeReanimatedModule.ts +9 -0
- package/android/src/reactNativeVersionPatch/ReanimatedUIManager/70/com/swmansion/reanimated/ReanimatedUIManagerFactory.java +0 -16
- package/android/src/reactNativeVersionPatch/messageQueueThread/67/com/swmansion/reanimated/ReanimatedMessageQueueThread.java +0 -12
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
// This type contains all the properties from SpringConfig, which are changed to be required,
|
|
20
20
|
// except for optional 'reduceMotion' and 'clamp'
|
|
21
|
+
|
|
21
22
|
export function checkIfConfigIsValid(config) {
|
|
22
23
|
'worklet';
|
|
23
24
|
|
|
@@ -42,15 +43,14 @@ export function checkIfConfigIsValid(config) {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
// ts-prune-ignore-next This function is exported to be tested
|
|
45
|
-
export function bisectRoot(
|
|
46
|
+
export function bisectRoot({
|
|
47
|
+
min,
|
|
48
|
+
max,
|
|
49
|
+
func,
|
|
50
|
+
maxIterations = 20
|
|
51
|
+
}) {
|
|
46
52
|
'worklet';
|
|
47
53
|
|
|
48
|
-
let {
|
|
49
|
-
min,
|
|
50
|
-
max,
|
|
51
|
-
func,
|
|
52
|
-
maxIterations = 20
|
|
53
|
-
} = _ref;
|
|
54
54
|
const ACCURACY = 0.00005;
|
|
55
55
|
let idx = maxIterations;
|
|
56
56
|
let current = (max + min) / 2;
|
|
@@ -65,11 +65,9 @@ export function bisectRoot(_ref) {
|
|
|
65
65
|
}
|
|
66
66
|
return current;
|
|
67
67
|
}
|
|
68
|
-
export function initialCalculations() {
|
|
68
|
+
export function initialCalculations(mass = 0, config) {
|
|
69
69
|
'worklet';
|
|
70
70
|
|
|
71
|
-
let mass = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
72
|
-
let config = arguments.length > 1 ? arguments[1] : undefined;
|
|
73
71
|
if (config.skipAnimation) {
|
|
74
72
|
return {
|
|
75
73
|
zeta: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["checkIfConfigIsValid","config","_config$clamp","_config$clamp2","errorMessage","forEach","prop","value","duration","clamp","min","max","console","warn","bisectRoot","_ref","func","maxIterations","ACCURACY","idx","current","Math","abs","initialCalculations","mass","arguments","length","undefined","skipAnimation","zeta","omega0","omega1","useDuration","stiffness","k","dampingRatio","sqrt","damping","c","m","scaleZetaToMatchClamps","animation","toValue","startValue","toValueNum","Number","firstBound","secondBound","relativeExtremum1","relativeExtremum2","newZeta1","log","PI","newZeta2","zetaSatisfyingClamp","filter","x","calculateNewMassToMatchDuration","x0","v0","restSpeedThreshold","threshold","durationForMass","amplitude","exp","criticallyDampedSpringCalculations","precalculatedValues","t","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","position","velocity","underDampedSpringCalculations","sin1","sin","cos1","cos","underDampedEnvelope","underDampedFrag1","underDampedPosition","underDampedVelocity","isAnimationTerminatingCalculation","isOvershooting","overshootClamping","isVelocity","isDisplacement","restDisplacementThreshold"],"sources":["springUtils.ts"],"sourcesContent":["'use strict';\nimport type {\n Animation,\n AnimatableValue,\n Timestamp,\n ReduceMotion,\n} from '../commonTypes';\n\n/**\n * Spring animation configuration.\n *\n * @param mass - The weight of the spring. Reducing this value makes the animation faster. Defaults to 1.\n * @param damping - How quickly a spring slows down. Higher damping means the spring will come to rest faster. Defaults to 10.\n * @param duration - Length of the animation (in milliseconds). Defaults to 2000.\n * @param dampingRatio - How damped the spring is. Value 1 means the spring is critically damped, and value \\>1 means the spring is overdamped. Defaults to 0.5.\n * @param stiffness - How bouncy the spring is. Defaults to 100.\n * @param velocity - Initial velocity applied to the spring equation. Defaults to 0.\n * @param overshootClamping - Whether a spring can bounce over the `toValue`. Defaults to false.\n * @param restDisplacementThreshold - The displacement below which the spring will snap to toValue without further oscillations. Defaults to 0.01.\n * @param restSpeedThreshold - The speed in pixels per second from which the spring will snap to toValue without further oscillations. Defaults to 2.\n * @param reduceMotion - Determines how the animation responds to the device's reduced motion accessibility setting. Default to `ReduceMotion.System` - {@link ReduceMotion}.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/animations/withSpring/#config-\n */\nexport type SpringConfig = {\n stiffness?: number;\n overshootClamping?: boolean;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n velocity?: number;\n reduceMotion?: ReduceMotion;\n} & (\n | {\n mass?: number;\n damping?: number;\n duration?: never;\n dampingRatio?: never;\n clamp?: never;\n }\n | {\n mass?: never;\n damping?: never;\n duration?: number;\n dampingRatio?: number;\n clamp?: { min?: number; max?: number };\n }\n);\n\n// This type contains all the properties from SpringConfig, which are changed to be required,\n// except for optional 'reduceMotion' and 'clamp'\nexport type DefaultSpringConfig = {\n [K in keyof Required<SpringConfig>]: K extends 'reduceMotion' | 'clamp'\n ? Required<SpringConfig>[K] | undefined\n : Required<SpringConfig>[K];\n};\nexport type WithSpringConfig = SpringConfig;\n\nexport interface SpringConfigInner {\n useDuration: boolean;\n skipAnimation: boolean;\n}\n\nexport interface SpringAnimation extends Animation<SpringAnimation> {\n current: AnimatableValue;\n toValue: AnimatableValue;\n velocity: number;\n lastTimestamp: Timestamp;\n startTimestamp: Timestamp;\n startValue: number;\n zeta: number;\n omega0: number;\n omega1: number;\n}\n\nexport interface InnerSpringAnimation\n extends Omit<SpringAnimation, 'toValue' | 'current'> {\n toValue: number;\n current: number;\n}\nexport function checkIfConfigIsValid(config: DefaultSpringConfig): boolean {\n 'worklet';\n let errorMessage = '';\n (\n [\n 'stiffness',\n 'damping',\n 'dampingRatio',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'mass',\n ] as const\n ).forEach((prop) => {\n const value = config[prop];\n if (value <= 0) {\n errorMessage += `, ${prop} must be grater than zero but got ${value}`;\n }\n });\n\n if (config.duration < 0) {\n errorMessage += `, duration can't be negative, got ${config.duration}`;\n }\n\n if (\n config.clamp?.min &&\n config.clamp?.max &&\n config.clamp.min > config.clamp.max\n ) {\n errorMessage += `, clamp.min should be lower than clamp.max, got clamp: {min: ${config.clamp.min}, max: ${config.clamp.max}} `;\n }\n\n if (errorMessage !== '') {\n console.warn('[Reanimated] Invalid spring config' + errorMessage);\n }\n\n return errorMessage === '';\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function bisectRoot({\n min,\n max,\n func,\n maxIterations = 20,\n}: {\n min: number;\n max: number;\n func: (x: number) => number;\n maxIterations?: number;\n}) {\n 'worklet';\n const ACCURACY = 0.00005;\n let idx = maxIterations;\n let current = (max + min) / 2;\n while (Math.abs(func(current)) > ACCURACY && idx > 0) {\n idx -= 1;\n\n if (func(current) < 0) {\n min = current;\n } else {\n max = current;\n }\n current = (min + max) / 2;\n }\n return current;\n}\n\nexport function initialCalculations(\n mass = 0,\n config: DefaultSpringConfig & SpringConfigInner\n): {\n zeta: number;\n omega0: number;\n omega1: number;\n} {\n 'worklet';\n\n if (config.skipAnimation) {\n return { zeta: 0, omega0: 0, omega1: 0 };\n }\n\n if (config.useDuration) {\n const { stiffness: k, dampingRatio: zeta } = config;\n\n /** omega0 and omega1 denote angular frequency and natural angular frequency, see this link for formulas:\n * https://courses.lumenlearning.com/suny-osuniversityphysics/chapter/15-5-damped-oscillations/\n */\n const omega0 = Math.sqrt(k / mass);\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\n return { zeta, omega0, omega1 };\n } else {\n const { damping: c, mass: m, stiffness: k } = config;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n return { zeta, omega0, omega1 };\n }\n}\n\n/** We make an assumption that we can manipulate zeta without changing duration of movement.\n * According to theory this change is small and tests shows that we can indeed ignore it.\n */\nexport function scaleZetaToMatchClamps(\n animation: SpringAnimation,\n clamp: { min?: number; max?: number }\n): number {\n 'worklet';\n const { zeta, toValue, startValue } = animation;\n const toValueNum = Number(toValue);\n\n if (toValueNum === startValue) {\n return zeta;\n }\n\n const [firstBound, secondBound] =\n toValueNum - startValue > 0\n ? [clamp.min, clamp.max]\n : [clamp.max, clamp.min];\n\n /** The extrema we get from equation below are relative (we obtain a ratio),\n * To get absolute extrema we convert it as follows:\n *\n * AbsoluteExtremum = startValue ± RelativeExtremum * (toValue - startValue)\n * Where ± denotes:\n * + if extremum is over the target\n * - otherwise\n */\n\n const relativeExtremum1 =\n secondBound !== undefined\n ? Math.abs((secondBound - toValueNum) / (toValueNum - startValue))\n : undefined;\n\n const relativeExtremum2 =\n firstBound !== undefined\n ? Math.abs((firstBound - toValueNum) / (toValueNum - startValue))\n : undefined;\n\n /** Use this formula http://hyperphysics.phy-astr.gsu.edu/hbase/oscda.html to calculate\n * first two extrema. These extrema are located where cos = +- 1\n *\n * Therefore the first two extrema are:\n *\n * Math.exp(-zeta * Math.PI); (over the target)\n * Math.exp(-zeta * 2 * Math.PI); (before the target)\n */\n\n const newZeta1 =\n relativeExtremum1 !== undefined\n ? Math.abs(Math.log(relativeExtremum1) / Math.PI)\n : undefined;\n\n const newZeta2 =\n relativeExtremum2 !== undefined\n ? Math.abs(Math.log(relativeExtremum2) / (2 * Math.PI))\n : undefined;\n\n const zetaSatisfyingClamp = [newZeta1, newZeta2].filter(\n (x: number | undefined): x is number => x !== undefined\n );\n // The bigger is zeta the smaller are bounces, we return the biggest one\n // because it should satisfy all conditions\n return Math.max(...zetaSatisfyingClamp, zeta);\n}\n\n/** Runs before initial */\nexport function calculateNewMassToMatchDuration(\n x0: number,\n config: DefaultSpringConfig & SpringConfigInner,\n v0: number\n) {\n 'worklet';\n if (config.skipAnimation) {\n return 0;\n }\n\n /** Use this formula: https://phys.libretexts.org/Bookshelves/University_Physics/Book%3A_University_Physics_(OpenStax)/Book%3A_University_Physics_I_-_Mechanics_Sound_Oscillations_and_Waves_(OpenStax)/15%3A_Oscillations/15.06%3A_Damped_Oscillations\n * to find the asymptote and estimate the damping that gives us the expected duration \n\n ⎛ ⎛ c⎞ ⎞ \n ⎜-⎜──⎟ ⋅ duration⎟ \n ⎝ ⎝2m⎠ ⎠ \n A ⋅ e = threshold\n\n \n Amplitude calculated using \"Conservation of energy\"\n _________________\n ╱ 2 2\n ╱ m ⋅ v0 + k ⋅ x0 \n amplitude = ╱ ─────────────────\n ╲╱ k \n\n And replace mass with damping ratio which is provided: m = (c^2)/(4 * k * zeta^2) \n */\n const {\n stiffness: k,\n dampingRatio: zeta,\n restSpeedThreshold: threshold,\n duration,\n } = config;\n\n const durationForMass = (mass: number) => {\n 'worklet';\n const amplitude =\n (mass * v0 * v0 + k * x0 * x0) / (Math.exp(1 - 0.5 * zeta) * k);\n const c = zeta * 2 * Math.sqrt(k * mass);\n return (\n 1000 * ((-2 * mass) / c) * Math.log((threshold * 0.01) / amplitude) -\n duration\n );\n };\n\n // Bisection turns out to be much faster than Newton's method in our case\n return bisectRoot({ min: 0, max: 100, func: durationForMass });\n}\n\nexport function criticallyDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n v0: number;\n x0: number;\n omega0: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue } = animation;\n\n const { v0, x0, omega0, t } = precalculatedValues;\n\n const criticallyDampedEnvelope = Math.exp(-omega0 * t);\n const criticallyDampedPosition =\n toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n const criticallyDampedVelocity =\n criticallyDampedEnvelope *\n (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n return {\n position: criticallyDampedPosition,\n velocity: criticallyDampedVelocity,\n };\n}\n\nexport function underDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n zeta: number;\n v0: number;\n x0: number;\n omega0: number;\n omega1: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue, current, velocity } = animation;\n\n const { zeta, t, omega0, omega1 } = precalculatedValues;\n\n const v0 = -velocity;\n const x0 = toValue - current;\n\n const sin1 = Math.sin(omega1 * t);\n const cos1 = Math.cos(omega1 * t);\n\n // under damped\n const underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n const underDampedFrag1 =\n underDampedEnvelope *\n (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n const underDampedPosition = toValue - underDampedFrag1;\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity =\n zeta * omega0 * underDampedFrag1 -\n underDampedEnvelope *\n (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n return { position: underDampedPosition, velocity: underDampedVelocity };\n}\n\nexport function isAnimationTerminatingCalculation(\n animation: InnerSpringAnimation,\n config: DefaultSpringConfig\n): {\n isOvershooting: boolean;\n isVelocity: boolean;\n isDisplacement: boolean;\n} {\n 'worklet';\n const { toValue, velocity, startValue, current } = animation;\n\n const isOvershooting = config.overshootClamping\n ? (current > toValue && startValue < toValue) ||\n (current < toValue && startValue > toValue)\n : false;\n\n const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;\n const isDisplacement =\n Math.abs(toValue - current) < config.restDisplacementThreshold;\n\n return { isOvershooting, isVelocity, isDisplacement };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["checkIfConfigIsValid","config","_config$clamp","_config$clamp2","errorMessage","forEach","prop","value","duration","clamp","min","max","console","warn","bisectRoot","func","maxIterations","ACCURACY","idx","current","Math","abs","initialCalculations","mass","skipAnimation","zeta","omega0","omega1","useDuration","stiffness","k","dampingRatio","sqrt","damping","c","m","scaleZetaToMatchClamps","animation","toValue","startValue","toValueNum","Number","firstBound","secondBound","relativeExtremum1","undefined","relativeExtremum2","newZeta1","log","PI","newZeta2","zetaSatisfyingClamp","filter","x","calculateNewMassToMatchDuration","x0","v0","restSpeedThreshold","threshold","durationForMass","amplitude","exp","criticallyDampedSpringCalculations","precalculatedValues","t","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","position","velocity","underDampedSpringCalculations","sin1","sin","cos1","cos","underDampedEnvelope","underDampedFrag1","underDampedPosition","underDampedVelocity","isAnimationTerminatingCalculation","isOvershooting","overshootClamping","isVelocity","isDisplacement","restDisplacementThreshold"],"sources":["springUtils.ts"],"sourcesContent":["'use strict';\nimport type {\n Animation,\n AnimatableValue,\n Timestamp,\n ReduceMotion,\n} from '../commonTypes';\n\n/**\n * Spring animation configuration.\n *\n * @param mass - The weight of the spring. Reducing this value makes the animation faster. Defaults to 1.\n * @param damping - How quickly a spring slows down. Higher damping means the spring will come to rest faster. Defaults to 10.\n * @param duration - Length of the animation (in milliseconds). Defaults to 2000.\n * @param dampingRatio - How damped the spring is. Value 1 means the spring is critically damped, and value \\>1 means the spring is overdamped. Defaults to 0.5.\n * @param stiffness - How bouncy the spring is. Defaults to 100.\n * @param velocity - Initial velocity applied to the spring equation. Defaults to 0.\n * @param overshootClamping - Whether a spring can bounce over the `toValue`. Defaults to false.\n * @param restDisplacementThreshold - The displacement below which the spring will snap to toValue without further oscillations. Defaults to 0.01.\n * @param restSpeedThreshold - The speed in pixels per second from which the spring will snap to toValue without further oscillations. Defaults to 2.\n * @param reduceMotion - Determines how the animation responds to the device's reduced motion accessibility setting. Default to `ReduceMotion.System` - {@link ReduceMotion}.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/animations/withSpring/#config-\n */\nexport type SpringConfig = {\n stiffness?: number;\n overshootClamping?: boolean;\n restDisplacementThreshold?: number;\n restSpeedThreshold?: number;\n velocity?: number;\n reduceMotion?: ReduceMotion;\n} & (\n | {\n mass?: number;\n damping?: number;\n duration?: never;\n dampingRatio?: never;\n clamp?: never;\n }\n | {\n mass?: never;\n damping?: never;\n duration?: number;\n dampingRatio?: number;\n clamp?: { min?: number; max?: number };\n }\n);\n\n// This type contains all the properties from SpringConfig, which are changed to be required,\n// except for optional 'reduceMotion' and 'clamp'\nexport type DefaultSpringConfig = {\n [K in keyof Required<SpringConfig>]: K extends 'reduceMotion' | 'clamp'\n ? Required<SpringConfig>[K] | undefined\n : Required<SpringConfig>[K];\n};\nexport type WithSpringConfig = SpringConfig;\n\nexport interface SpringConfigInner {\n useDuration: boolean;\n skipAnimation: boolean;\n}\n\nexport interface SpringAnimation extends Animation<SpringAnimation> {\n current: AnimatableValue;\n toValue: AnimatableValue;\n velocity: number;\n lastTimestamp: Timestamp;\n startTimestamp: Timestamp;\n startValue: number;\n zeta: number;\n omega0: number;\n omega1: number;\n}\n\nexport interface InnerSpringAnimation\n extends Omit<SpringAnimation, 'toValue' | 'current'> {\n toValue: number;\n current: number;\n}\nexport function checkIfConfigIsValid(config: DefaultSpringConfig): boolean {\n 'worklet';\n let errorMessage = '';\n (\n [\n 'stiffness',\n 'damping',\n 'dampingRatio',\n 'restDisplacementThreshold',\n 'restSpeedThreshold',\n 'mass',\n ] as const\n ).forEach((prop) => {\n const value = config[prop];\n if (value <= 0) {\n errorMessage += `, ${prop} must be grater than zero but got ${value}`;\n }\n });\n\n if (config.duration < 0) {\n errorMessage += `, duration can't be negative, got ${config.duration}`;\n }\n\n if (\n config.clamp?.min &&\n config.clamp?.max &&\n config.clamp.min > config.clamp.max\n ) {\n errorMessage += `, clamp.min should be lower than clamp.max, got clamp: {min: ${config.clamp.min}, max: ${config.clamp.max}} `;\n }\n\n if (errorMessage !== '') {\n console.warn('[Reanimated] Invalid spring config' + errorMessage);\n }\n\n return errorMessage === '';\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function bisectRoot({\n min,\n max,\n func,\n maxIterations = 20,\n}: {\n min: number;\n max: number;\n func: (x: number) => number;\n maxIterations?: number;\n}) {\n 'worklet';\n const ACCURACY = 0.00005;\n let idx = maxIterations;\n let current = (max + min) / 2;\n while (Math.abs(func(current)) > ACCURACY && idx > 0) {\n idx -= 1;\n\n if (func(current) < 0) {\n min = current;\n } else {\n max = current;\n }\n current = (min + max) / 2;\n }\n return current;\n}\n\nexport function initialCalculations(\n mass = 0,\n config: DefaultSpringConfig & SpringConfigInner\n): {\n zeta: number;\n omega0: number;\n omega1: number;\n} {\n 'worklet';\n\n if (config.skipAnimation) {\n return { zeta: 0, omega0: 0, omega1: 0 };\n }\n\n if (config.useDuration) {\n const { stiffness: k, dampingRatio: zeta } = config;\n\n /** omega0 and omega1 denote angular frequency and natural angular frequency, see this link for formulas:\n * https://courses.lumenlearning.com/suny-osuniversityphysics/chapter/15-5-damped-oscillations/\n */\n const omega0 = Math.sqrt(k / mass);\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);\n\n return { zeta, omega0, omega1 };\n } else {\n const { damping: c, mass: m, stiffness: k } = config;\n\n const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay\n\n return { zeta, omega0, omega1 };\n }\n}\n\n/** We make an assumption that we can manipulate zeta without changing duration of movement.\n * According to theory this change is small and tests shows that we can indeed ignore it.\n */\nexport function scaleZetaToMatchClamps(\n animation: SpringAnimation,\n clamp: { min?: number; max?: number }\n): number {\n 'worklet';\n const { zeta, toValue, startValue } = animation;\n const toValueNum = Number(toValue);\n\n if (toValueNum === startValue) {\n return zeta;\n }\n\n const [firstBound, secondBound] =\n toValueNum - startValue > 0\n ? [clamp.min, clamp.max]\n : [clamp.max, clamp.min];\n\n /** The extrema we get from equation below are relative (we obtain a ratio),\n * To get absolute extrema we convert it as follows:\n *\n * AbsoluteExtremum = startValue ± RelativeExtremum * (toValue - startValue)\n * Where ± denotes:\n * + if extremum is over the target\n * - otherwise\n */\n\n const relativeExtremum1 =\n secondBound !== undefined\n ? Math.abs((secondBound - toValueNum) / (toValueNum - startValue))\n : undefined;\n\n const relativeExtremum2 =\n firstBound !== undefined\n ? Math.abs((firstBound - toValueNum) / (toValueNum - startValue))\n : undefined;\n\n /** Use this formula http://hyperphysics.phy-astr.gsu.edu/hbase/oscda.html to calculate\n * first two extrema. These extrema are located where cos = +- 1\n *\n * Therefore the first two extrema are:\n *\n * Math.exp(-zeta * Math.PI); (over the target)\n * Math.exp(-zeta * 2 * Math.PI); (before the target)\n */\n\n const newZeta1 =\n relativeExtremum1 !== undefined\n ? Math.abs(Math.log(relativeExtremum1) / Math.PI)\n : undefined;\n\n const newZeta2 =\n relativeExtremum2 !== undefined\n ? Math.abs(Math.log(relativeExtremum2) / (2 * Math.PI))\n : undefined;\n\n const zetaSatisfyingClamp = [newZeta1, newZeta2].filter(\n (x: number | undefined): x is number => x !== undefined\n );\n // The bigger is zeta the smaller are bounces, we return the biggest one\n // because it should satisfy all conditions\n return Math.max(...zetaSatisfyingClamp, zeta);\n}\n\n/** Runs before initial */\nexport function calculateNewMassToMatchDuration(\n x0: number,\n config: DefaultSpringConfig & SpringConfigInner,\n v0: number\n) {\n 'worklet';\n if (config.skipAnimation) {\n return 0;\n }\n\n /** Use this formula: https://phys.libretexts.org/Bookshelves/University_Physics/Book%3A_University_Physics_(OpenStax)/Book%3A_University_Physics_I_-_Mechanics_Sound_Oscillations_and_Waves_(OpenStax)/15%3A_Oscillations/15.06%3A_Damped_Oscillations\n * to find the asymptote and estimate the damping that gives us the expected duration \n\n ⎛ ⎛ c⎞ ⎞ \n ⎜-⎜──⎟ ⋅ duration⎟ \n ⎝ ⎝2m⎠ ⎠ \n A ⋅ e = threshold\n\n \n Amplitude calculated using \"Conservation of energy\"\n _________________\n ╱ 2 2\n ╱ m ⋅ v0 + k ⋅ x0 \n amplitude = ╱ ─────────────────\n ╲╱ k \n\n And replace mass with damping ratio which is provided: m = (c^2)/(4 * k * zeta^2) \n */\n const {\n stiffness: k,\n dampingRatio: zeta,\n restSpeedThreshold: threshold,\n duration,\n } = config;\n\n const durationForMass = (mass: number) => {\n 'worklet';\n const amplitude =\n (mass * v0 * v0 + k * x0 * x0) / (Math.exp(1 - 0.5 * zeta) * k);\n const c = zeta * 2 * Math.sqrt(k * mass);\n return (\n 1000 * ((-2 * mass) / c) * Math.log((threshold * 0.01) / amplitude) -\n duration\n );\n };\n\n // Bisection turns out to be much faster than Newton's method in our case\n return bisectRoot({ min: 0, max: 100, func: durationForMass });\n}\n\nexport function criticallyDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n v0: number;\n x0: number;\n omega0: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue } = animation;\n\n const { v0, x0, omega0, t } = precalculatedValues;\n\n const criticallyDampedEnvelope = Math.exp(-omega0 * t);\n const criticallyDampedPosition =\n toValue - criticallyDampedEnvelope * (x0 + (v0 + omega0 * x0) * t);\n\n const criticallyDampedVelocity =\n criticallyDampedEnvelope *\n (v0 * (t * omega0 - 1) + t * x0 * omega0 * omega0);\n\n return {\n position: criticallyDampedPosition,\n velocity: criticallyDampedVelocity,\n };\n}\n\nexport function underDampedSpringCalculations(\n animation: InnerSpringAnimation,\n precalculatedValues: {\n zeta: number;\n v0: number;\n x0: number;\n omega0: number;\n omega1: number;\n t: number;\n }\n): { position: number; velocity: number } {\n 'worklet';\n const { toValue, current, velocity } = animation;\n\n const { zeta, t, omega0, omega1 } = precalculatedValues;\n\n const v0 = -velocity;\n const x0 = toValue - current;\n\n const sin1 = Math.sin(omega1 * t);\n const cos1 = Math.cos(omega1 * t);\n\n // under damped\n const underDampedEnvelope = Math.exp(-zeta * omega0 * t);\n const underDampedFrag1 =\n underDampedEnvelope *\n (sin1 * ((v0 + zeta * omega0 * x0) / omega1) + x0 * cos1);\n\n const underDampedPosition = toValue - underDampedFrag1;\n // This looks crazy -- it's actually just the derivative of the oscillation function\n const underDampedVelocity =\n zeta * omega0 * underDampedFrag1 -\n underDampedEnvelope *\n (cos1 * (v0 + zeta * omega0 * x0) - omega1 * x0 * sin1);\n\n return { position: underDampedPosition, velocity: underDampedVelocity };\n}\n\nexport function isAnimationTerminatingCalculation(\n animation: InnerSpringAnimation,\n config: DefaultSpringConfig\n): {\n isOvershooting: boolean;\n isVelocity: boolean;\n isDisplacement: boolean;\n} {\n 'worklet';\n const { toValue, velocity, startValue, current } = animation;\n\n const isOvershooting = config.overshootClamping\n ? (current > toValue && startValue < toValue) ||\n (current < toValue && startValue > toValue)\n : false;\n\n const isVelocity = Math.abs(velocity) < config.restSpeedThreshold;\n const isDisplacement =\n Math.abs(toValue - current) < config.restDisplacementThreshold;\n\n return { isOvershooting, isVelocity, isDisplacement };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -85,10 +85,11 @@ export function withStyleAnimation(styleAnimations) {
|
|
|
85
85
|
} else {
|
|
86
86
|
stillGoing = true;
|
|
87
87
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
|
|
89
|
+
// When working with animations changing colors, we need to make sure that each one of them begins with a rgba, not a processed number.
|
|
90
|
+
// Thus, we only set the path to a processed color, but currentStyleAnimation.current stays as rgba.
|
|
91
|
+
const isAnimatingColorProp = ColorProperties.includes(currentEntry.path[0]);
|
|
92
|
+
setPath(animation.current, currentEntry.path, isAnimatingColorProp ? processColor(currentStyleAnimation.current) : currentStyleAnimation.current);
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
95
|
return !stillGoing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["defineAnimation","withTiming","ColorProperties","processColor","resolvePath","obj","path","keys","Array","isArray","reduce","acc","current","undefined","setPath","value","currObj","i","length","withStyleAnimation","styleAnimations","onFrame","animation","now","stillGoing","entriesToCheck","currentEntry","pop","index","push","concat","key","Object","currentStyleAnimation","finished","callback","includes","onStart","previousAnimation","prevAnimation","prevVal","console","warn","join","currentAnimation","duration","animationsToCheck","element","values","isHigherOrder"],"sources":["styleAnimation.ts"],"sourcesContent":["'use strict';\nimport { defineAnimation } from './util';\nimport type {\n Timestamp,\n AnimatableValue,\n AnimationObject,\n Animation,\n NestedObject,\n NestedObjectValues,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\nimport type { StyleLayoutAnimation } from './commonTypes';\nimport { withTiming } from './timing';\nimport { ColorProperties, processColor } from '../Colors';\n\n// resolves path to value for nested objects\n// if path cannot be resolved returns undefined\nfunction resolvePath<T>(\n obj: NestedObject<T>,\n path: AnimatableValue[] | AnimatableValue\n): NestedObjectValues<T> | undefined {\n 'worklet';\n const keys: AnimatableValue[] = Array.isArray(path) ? path : [path];\n return keys.reduce<NestedObjectValues<T> | undefined>((acc, current) => {\n if (Array.isArray(acc) && typeof current === 'number') {\n return acc[current];\n } else if (\n acc !== null &&\n typeof acc === 'object' &&\n (current as number | string) in acc\n ) {\n return (acc as { [key: string]: NestedObjectValues<T> })[\n current as number | string\n ];\n }\n return undefined;\n }, obj);\n}\n\n// set value at given path\ntype Path = Array<string | number> | string | number;\nfunction setPath<T>(\n obj: NestedObject<T>,\n path: Path,\n value: NestedObjectValues<T>\n): void {\n 'worklet';\n const keys: Path = Array.isArray(path) ? path : [path];\n let currObj: NestedObjectValues<T> = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n // creates entry if there isn't one\n currObj = currObj as { [key: string]: NestedObjectValues<T> };\n if (!(keys[i] in currObj)) {\n // if next key is a number create an array\n if (typeof keys[i + 1] === 'number') {\n currObj[keys[i]] = [];\n } else {\n currObj[keys[i]] = {};\n }\n }\n currObj = currObj[keys[i]];\n }\n\n (currObj as { [key: string]: NestedObjectValues<T> })[keys[keys.length - 1]] =\n value;\n}\n\ninterface NestedObjectEntry<T> {\n value: NestedObjectValues<T>;\n path: (string | number)[];\n}\n\nexport function withStyleAnimation(\n styleAnimations: AnimatedStyle<any>\n): StyleLayoutAnimation {\n 'worklet';\n return defineAnimation<StyleLayoutAnimation>({}, () => {\n 'worklet';\n\n const onFrame = (\n animation: StyleLayoutAnimation,\n now: Timestamp\n ): boolean => {\n let stillGoing = false;\n const entriesToCheck: NestedObjectEntry<AnimationObject>[] = [\n { value: animation.styleAnimations, path: [] },\n ];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<AnimationObject> =\n entriesToCheck.pop() as NestedObjectEntry<AnimationObject>;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onFrame === undefined\n ) {\n // nested object\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentEntry.value as AnimationObject;\n if (currentStyleAnimation.finished) {\n continue;\n }\n const finished = currentStyleAnimation.onFrame(\n currentStyleAnimation,\n now\n );\n if (finished) {\n currentStyleAnimation.finished = true;\n if (currentStyleAnimation.callback) {\n currentStyleAnimation.callback(true);\n }\n } else {\n stillGoing = true;\n }\n\n if (ColorProperties.includes(currentEntry.path[0] as string)) {\n currentStyleAnimation.current = processColor(\n currentStyleAnimation.current\n ) as number;\n }\n\n setPath(\n animation.current,\n currentEntry.path,\n currentStyleAnimation.current\n );\n }\n }\n return !stillGoing;\n };\n\n const onStart = (\n animation: StyleLayoutAnimation,\n value: AnimatedStyle<any>,\n now: Timestamp,\n previousAnimation: StyleLayoutAnimation\n ): void => {\n const entriesToCheck: NestedObjectEntry<\n AnimationObject | AnimatableValue\n >[] = [{ value: styleAnimations, path: [] }];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<\n AnimationObject | AnimatableValue\n > = entriesToCheck.pop() as NestedObjectEntry<\n AnimationObject | AnimatableValue\n >;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onStart === undefined\n ) {\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const prevAnimation = resolvePath(\n previousAnimation?.styleAnimations,\n currentEntry.path\n );\n let prevVal = resolvePath(value, currentEntry.path);\n if (prevAnimation && !prevVal) {\n prevVal = (prevAnimation as any).current;\n }\n if (prevVal === undefined) {\n console.warn(\n `Initial values for animation are missing for property ${currentEntry.path.join(\n '.'\n )}`\n );\n }\n setPath(animation.current, currentEntry.path, prevVal);\n let currentAnimation: AnimationObject;\n if (\n typeof currentEntry.value !== 'object' ||\n !currentEntry.value.onStart\n ) {\n currentAnimation = withTiming(\n currentEntry.value as AnimatableValue,\n { duration: 0 }\n ) as AnimationObject; // TODO TYPESCRIPT this temporary cast is to get rid of .d.ts file.\n setPath(\n animation.styleAnimations,\n currentEntry.path,\n currentAnimation\n );\n } else {\n currentAnimation = currentEntry.value as Animation<AnimationObject>;\n }\n currentAnimation.onStart(\n currentAnimation,\n prevVal,\n now,\n prevAnimation\n );\n }\n }\n };\n\n const callback = (finished: boolean): void => {\n if (!finished) {\n const animationsToCheck: NestedObjectValues<AnimationObject>[] = [\n styleAnimations,\n ];\n while (animationsToCheck.length > 0) {\n const currentAnimation: NestedObjectValues<AnimationObject> =\n animationsToCheck.pop() as NestedObjectValues<AnimationObject>;\n if (Array.isArray(currentAnimation)) {\n for (const element of currentAnimation) {\n animationsToCheck.push(element);\n }\n } else if (\n typeof currentAnimation === 'object' &&\n currentAnimation.onStart === undefined\n ) {\n for (const value of Object.values(currentAnimation)) {\n animationsToCheck.push(value);\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentAnimation as AnimationObject;\n if (\n !currentStyleAnimation.finished &&\n currentStyleAnimation.callback\n ) {\n currentStyleAnimation.callback(false);\n }\n }\n }\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame,\n onStart,\n current: {},\n styleAnimations,\n callback,\n } as StyleLayoutAnimation;\n });\n}\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,eAAe,QAAQ,QAAQ;AAWxC,SAASC,UAAU,QAAQ,UAAU;AACrC,SAASC,eAAe,EAAEC,YAAY,QAAQ,WAAW;;AAEzD;AACA;AACA,SAASC,WAAWA,CAClBC,GAAoB,EACpBC,IAAyC,EACN;EACnC,SAAS;;EACT,MAAMC,IAAuB,GAAGC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,GAAGA,IAAI,GAAG,CAACA,IAAI,CAAC;EACnE,OAAOC,IAAI,CAACG,MAAM,CAAoC,CAACC,GAAG,EAAEC,OAAO,KAAK;IACtE,IAAIJ,KAAK,CAACC,OAAO,CAACE,GAAG,CAAC,IAAI,OAAOC,OAAO,KAAK,QAAQ,EAAE;MACrD,OAAOD,GAAG,CAACC,OAAO,CAAC;IACrB,CAAC,MAAM,IACLD,GAAG,KAAK,IAAI,IACZ,OAAOA,GAAG,KAAK,QAAQ,IACtBC,OAAO,IAAwBD,GAAG,EACnC;MACA,OAAQA,GAAG,CACTC,OAAO,CACR;IACH;IACA,OAAOC,SAAS;EAClB,CAAC,EAAER,GAAG,CAAC;AACT;;AAEA;;AAEA,SAASS,OAAOA,CACdT,GAAoB,EACpBC,IAAU,EACVS,KAA4B,EACtB;EACN,SAAS;;EACT,MAAMR,IAAU,GAAGC,KAAK,CAACC,OAAO,CAACH,IAAI,CAAC,GAAGA,IAAI,GAAG,CAACA,IAAI,CAAC;EACtD,IAAIU,OAA8B,GAAGX,GAAG;EACxC,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,IAAI,CAACW,MAAM,GAAG,CAAC,EAAED,CAAC,EAAE,EAAE;IACxC;IACAD,OAAO,GAAGA,OAAmD;IAC7D,IAAI,EAAET,IAAI,CAACU,CAAC,CAAC,IAAID,OAAO,CAAC,EAAE;MACzB;MACA,IAAI,OAAOT,IAAI,CAACU,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,EAAE;QACnCD,OAAO,CAACT,IAAI,CAACU,CAAC,CAAC,CAAC,GAAG,EAAE;MACvB,CAAC,MAAM;QACLD,OAAO,CAACT,IAAI,CAACU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACvB;IACF;IACAD,OAAO,GAAGA,OAAO,CAACT,IAAI,CAACU,CAAC,CAAC,CAAC;EAC5B;EAECD,OAAO,CAA8CT,IAAI,CAACA,IAAI,CAACW,MAAM,GAAG,CAAC,CAAC,CAAC,GAC1EH,KAAK;AACT;AAOA,OAAO,SAASI,kBAAkBA,CAChCC,eAAmC,EACb;EACtB,SAAS;;EACT,OAAOpB,eAAe,CAAuB,CAAC,CAAC,EAAE,MAAM;IACrD,SAAS;;IAET,MAAMqB,OAAO,GAAGA,CACdC,SAA+B,EAC/BC,GAAc,KACF;MACZ,IAAIC,UAAU,GAAG,KAAK;MACtB,MAAMC,cAAoD,GAAG,CAC3D;QAAEV,KAAK,EAAEO,SAAS,CAACF,eAAe;QAAEd,IAAI,EAAE;MAAG,CAAC,CAC/C;MACD,OAAOmB,cAAc,CAACP,MAAM,GAAG,CAAC,EAAE;QAChC,MAAMQ,YAAgD,GACpDD,cAAc,CAACE,GAAG,EAAwC;QAC5D,IAAInB,KAAK,CAACC,OAAO,CAACiB,YAAY,CAACX,KAAK,CAAC,EAAE;UACrC,KAAK,IAAIa,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,YAAY,CAACX,KAAK,CAACG,MAAM,EAAEU,KAAK,EAAE,EAAE;YAC9DH,cAAc,CAACI,IAAI,CAAC;cAClBd,KAAK,EAAEW,YAAY,CAACX,KAAK,CAACa,KAAK,CAAC;cAChCtB,IAAI,EAAEoB,YAAY,CAACpB,IAAI,CAACwB,MAAM,CAACF,KAAK;YACtC,CAAC,CAAC;UACJ;QACF,CAAC,MAAM,IACL,OAAOF,YAAY,CAACX,KAAK,KAAK,QAAQ,IACtCW,YAAY,CAACX,KAAK,CAACM,OAAO,KAAKR,SAAS,EACxC;UACA;UACA,KAAK,MAAMkB,GAAG,IAAIC,MAAM,CAACzB,IAAI,CAACmB,YAAY,CAACX,KAAK,CAAC,EAAE;YACjDU,cAAc,CAACI,IAAI,CAAC;cAClBd,KAAK,EAAEW,YAAY,CAACX,KAAK,CAACgB,GAAG,CAAC;cAC9BzB,IAAI,EAAEoB,YAAY,CAACpB,IAAI,CAACwB,MAAM,CAACC,GAAG;YACpC,CAAC,CAAC;UACJ;QACF,CAAC,MAAM;UACL,MAAME,qBAAsC,GAC1CP,YAAY,CAACX,KAAwB;UACvC,IAAIkB,qBAAqB,CAACC,QAAQ,EAAE;YAClC;UACF;UACA,MAAMA,QAAQ,GAAGD,qBAAqB,CAACZ,OAAO,CAC5CY,qBAAqB,EACrBV,GAAG,CACJ;UACD,IAAIW,QAAQ,EAAE;YACZD,qBAAqB,CAACC,QAAQ,GAAG,IAAI;YACrC,IAAID,qBAAqB,CAACE,QAAQ,EAAE;cAClCF,qBAAqB,CAACE,QAAQ,CAAC,IAAI,CAAC;YACtC;UACF,CAAC,MAAM;YACLX,UAAU,GAAG,IAAI;UACnB;UAEA,IAAItB,eAAe,CAACkC,QAAQ,CAACV,YAAY,CAACpB,IAAI,CAAC,CAAC,CAAC,CAAW,EAAE;YAC5D2B,qBAAqB,CAACrB,OAAO,GAAGT,YAAY,CAC1C8B,qBAAqB,CAACrB,OAAO,CACpB;UACb;UAEAE,OAAO,CACLQ,SAAS,CAACV,OAAO,EACjBc,YAAY,CAACpB,IAAI,EACjB2B,qBAAqB,CAACrB,OAAO,CAC9B;QACH;MACF;MACA,OAAO,CAACY,UAAU;IACpB,CAAC;IAED,MAAMa,OAAO,GAAGA,CACdf,SAA+B,EAC/BP,KAAyB,EACzBQ,GAAc,EACde,iBAAuC,KAC9B;MACT,MAAMb,cAEH,GAAG,CAAC;QAAEV,KAAK,EAAEK,eAAe;QAAEd,IAAI,EAAE;MAAG,CAAC,CAAC;MAC5C,OAAOmB,cAAc,CAACP,MAAM,GAAG,CAAC,EAAE;QAChC,MAAMQ,YAEL,GAAGD,cAAc,CAACE,GAAG,EAErB;QACD,IAAInB,KAAK,CAACC,OAAO,CAACiB,YAAY,CAACX,KAAK,CAAC,EAAE;UACrC,KAAK,IAAIa,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,YAAY,CAACX,KAAK,CAACG,MAAM,EAAEU,KAAK,EAAE,EAAE;YAC9DH,cAAc,CAACI,IAAI,CAAC;cAClBd,KAAK,EAAEW,YAAY,CAACX,KAAK,CAACa,KAAK,CAAC;cAChCtB,IAAI,EAAEoB,YAAY,CAACpB,IAAI,CAACwB,MAAM,CAACF,KAAK;YACtC,CAAC,CAAC;UACJ;QACF,CAAC,MAAM,IACL,OAAOF,YAAY,CAACX,KAAK,KAAK,QAAQ,IACtCW,YAAY,CAACX,KAAK,CAACsB,OAAO,KAAKxB,SAAS,EACxC;UACA,KAAK,MAAMkB,GAAG,IAAIC,MAAM,CAACzB,IAAI,CAACmB,YAAY,CAACX,KAAK,CAAC,EAAE;YACjDU,cAAc,CAACI,IAAI,CAAC;cAClBd,KAAK,EAAEW,YAAY,CAACX,KAAK,CAACgB,GAAG,CAAC;cAC9BzB,IAAI,EAAEoB,YAAY,CAACpB,IAAI,CAACwB,MAAM,CAACC,GAAG;YACpC,CAAC,CAAC;UACJ;QACF,CAAC,MAAM;UACL,MAAMQ,aAAa,GAAGnC,WAAW,CAC/BkC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAElB,eAAe,EAClCM,YAAY,CAACpB,IAAI,CAClB;UACD,IAAIkC,OAAO,GAAGpC,WAAW,CAACW,KAAK,EAAEW,YAAY,CAACpB,IAAI,CAAC;UACnD,IAAIiC,aAAa,IAAI,CAACC,OAAO,EAAE;YAC7BA,OAAO,GAAID,aAAa,CAAS3B,OAAO;UAC1C;UACA,IAAI4B,OAAO,KAAK3B,SAAS,EAAE;YACzB4B,OAAO,CAACC,IAAI,CACT,yDAAwDhB,YAAY,CAACpB,IAAI,CAACqC,IAAI,CAC7E,GAAG,CACH,EAAC,CACJ;UACH;UACA7B,OAAO,CAACQ,SAAS,CAACV,OAAO,EAAEc,YAAY,CAACpB,IAAI,EAAEkC,OAAO,CAAC;UACtD,IAAII,gBAAiC;UACrC,IACE,OAAOlB,YAAY,CAACX,KAAK,KAAK,QAAQ,IACtC,CAACW,YAAY,CAACX,KAAK,CAACsB,OAAO,EAC3B;YACAO,gBAAgB,GAAG3C,UAAU,CAC3ByB,YAAY,CAACX,KAAK,EAClB;cAAE8B,QAAQ,EAAE;YAAE,CAAC,CACG,CAAC,CAAC;YACtB/B,OAAO,CACLQ,SAAS,CAACF,eAAe,EACzBM,YAAY,CAACpB,IAAI,EACjBsC,gBAAgB,CACjB;UACH,CAAC,MAAM;YACLA,gBAAgB,GAAGlB,YAAY,CAACX,KAAmC;UACrE;UACA6B,gBAAgB,CAACP,OAAO,CACtBO,gBAAgB,EAChBJ,OAAO,EACPjB,GAAG,EACHgB,aAAa,CACd;QACH;MACF;IACF,CAAC;IAED,MAAMJ,QAAQ,GAAID,QAAiB,IAAW;MAC5C,IAAI,CAACA,QAAQ,EAAE;QACb,MAAMY,iBAAwD,GAAG,CAC/D1B,eAAe,CAChB;QACD,OAAO0B,iBAAiB,CAAC5B,MAAM,GAAG,CAAC,EAAE;UACnC,MAAM0B,gBAAqD,GACzDE,iBAAiB,CAACnB,GAAG,EAAyC;UAChE,IAAInB,KAAK,CAACC,OAAO,CAACmC,gBAAgB,CAAC,EAAE;YACnC,KAAK,MAAMG,OAAO,IAAIH,gBAAgB,EAAE;cACtCE,iBAAiB,CAACjB,IAAI,CAACkB,OAAO,CAAC;YACjC;UACF,CAAC,MAAM,IACL,OAAOH,gBAAgB,KAAK,QAAQ,IACpCA,gBAAgB,CAACP,OAAO,KAAKxB,SAAS,EACtC;YACA,KAAK,MAAME,KAAK,IAAIiB,MAAM,CAACgB,MAAM,CAACJ,gBAAgB,CAAC,EAAE;cACnDE,iBAAiB,CAACjB,IAAI,CAACd,KAAK,CAAC;YAC/B;UACF,CAAC,MAAM;YACL,MAAMkB,qBAAsC,GAC1CW,gBAAmC;YACrC,IACE,CAACX,qBAAqB,CAACC,QAAQ,IAC/BD,qBAAqB,CAACE,QAAQ,EAC9B;cACAF,qBAAqB,CAACE,QAAQ,CAAC,KAAK,CAAC;YACvC;UACF;QACF;MACF;IACF,CAAC;IAED,OAAO;MACLc,aAAa,EAAE,IAAI;MACnB5B,OAAO;MACPgB,OAAO;MACPzB,OAAO,EAAE,CAAC,CAAC;MACXQ,eAAe;MACfe;IACF,CAAC;EACH,CAAC,CAAC;AACJ"}
|
|
1
|
+
{"version":3,"names":["defineAnimation","withTiming","ColorProperties","processColor","resolvePath","obj","path","keys","Array","isArray","reduce","acc","current","undefined","setPath","value","currObj","i","length","withStyleAnimation","styleAnimations","onFrame","animation","now","stillGoing","entriesToCheck","currentEntry","pop","index","push","concat","key","Object","currentStyleAnimation","finished","callback","isAnimatingColorProp","includes","onStart","previousAnimation","prevAnimation","prevVal","console","warn","join","currentAnimation","duration","animationsToCheck","element","values","isHigherOrder"],"sources":["styleAnimation.ts"],"sourcesContent":["'use strict';\nimport { defineAnimation } from './util';\nimport type {\n Timestamp,\n AnimatableValue,\n AnimationObject,\n Animation,\n NestedObject,\n NestedObjectValues,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\nimport type { StyleLayoutAnimation } from './commonTypes';\nimport { withTiming } from './timing';\nimport { ColorProperties, processColor } from '../Colors';\n\n// resolves path to value for nested objects\n// if path cannot be resolved returns undefined\nfunction resolvePath<T>(\n obj: NestedObject<T>,\n path: AnimatableValue[] | AnimatableValue\n): NestedObjectValues<T> | undefined {\n 'worklet';\n const keys: AnimatableValue[] = Array.isArray(path) ? path : [path];\n return keys.reduce<NestedObjectValues<T> | undefined>((acc, current) => {\n if (Array.isArray(acc) && typeof current === 'number') {\n return acc[current];\n } else if (\n acc !== null &&\n typeof acc === 'object' &&\n (current as number | string) in acc\n ) {\n return (acc as { [key: string]: NestedObjectValues<T> })[\n current as number | string\n ];\n }\n return undefined;\n }, obj);\n}\n\n// set value at given path\ntype Path = Array<string | number> | string | number;\nfunction setPath<T>(\n obj: NestedObject<T>,\n path: Path,\n value: NestedObjectValues<T>\n): void {\n 'worklet';\n const keys: Path = Array.isArray(path) ? path : [path];\n let currObj: NestedObjectValues<T> = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n // creates entry if there isn't one\n currObj = currObj as { [key: string]: NestedObjectValues<T> };\n if (!(keys[i] in currObj)) {\n // if next key is a number create an array\n if (typeof keys[i + 1] === 'number') {\n currObj[keys[i]] = [];\n } else {\n currObj[keys[i]] = {};\n }\n }\n currObj = currObj[keys[i]];\n }\n\n (currObj as { [key: string]: NestedObjectValues<T> })[keys[keys.length - 1]] =\n value;\n}\n\ninterface NestedObjectEntry<T> {\n value: NestedObjectValues<T>;\n path: (string | number)[];\n}\n\nexport function withStyleAnimation(\n styleAnimations: AnimatedStyle<any>\n): StyleLayoutAnimation {\n 'worklet';\n return defineAnimation<StyleLayoutAnimation>({}, () => {\n 'worklet';\n\n const onFrame = (\n animation: StyleLayoutAnimation,\n now: Timestamp\n ): boolean => {\n let stillGoing = false;\n const entriesToCheck: NestedObjectEntry<AnimationObject>[] = [\n { value: animation.styleAnimations, path: [] },\n ];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<AnimationObject> =\n entriesToCheck.pop() as NestedObjectEntry<AnimationObject>;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onFrame === undefined\n ) {\n // nested object\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentEntry.value as AnimationObject;\n if (currentStyleAnimation.finished) {\n continue;\n }\n const finished = currentStyleAnimation.onFrame(\n currentStyleAnimation,\n now\n );\n if (finished) {\n currentStyleAnimation.finished = true;\n if (currentStyleAnimation.callback) {\n currentStyleAnimation.callback(true);\n }\n } else {\n stillGoing = true;\n }\n\n // When working with animations changing colors, we need to make sure that each one of them begins with a rgba, not a processed number.\n // Thus, we only set the path to a processed color, but currentStyleAnimation.current stays as rgba.\n const isAnimatingColorProp = ColorProperties.includes(\n currentEntry.path[0] as string\n );\n\n setPath(\n animation.current,\n currentEntry.path,\n isAnimatingColorProp\n ? processColor(currentStyleAnimation.current)\n : currentStyleAnimation.current\n );\n }\n }\n return !stillGoing;\n };\n\n const onStart = (\n animation: StyleLayoutAnimation,\n value: AnimatedStyle<any>,\n now: Timestamp,\n previousAnimation: StyleLayoutAnimation\n ): void => {\n const entriesToCheck: NestedObjectEntry<\n AnimationObject | AnimatableValue\n >[] = [{ value: styleAnimations, path: [] }];\n while (entriesToCheck.length > 0) {\n const currentEntry: NestedObjectEntry<\n AnimationObject | AnimatableValue\n > = entriesToCheck.pop() as NestedObjectEntry<\n AnimationObject | AnimatableValue\n >;\n if (Array.isArray(currentEntry.value)) {\n for (let index = 0; index < currentEntry.value.length; index++) {\n entriesToCheck.push({\n value: currentEntry.value[index],\n path: currentEntry.path.concat(index),\n });\n }\n } else if (\n typeof currentEntry.value === 'object' &&\n currentEntry.value.onStart === undefined\n ) {\n for (const key of Object.keys(currentEntry.value)) {\n entriesToCheck.push({\n value: currentEntry.value[key],\n path: currentEntry.path.concat(key),\n });\n }\n } else {\n const prevAnimation = resolvePath(\n previousAnimation?.styleAnimations,\n currentEntry.path\n );\n let prevVal = resolvePath(value, currentEntry.path);\n if (prevAnimation && !prevVal) {\n prevVal = (prevAnimation as any).current;\n }\n if (prevVal === undefined) {\n console.warn(\n `Initial values for animation are missing for property ${currentEntry.path.join(\n '.'\n )}`\n );\n }\n setPath(animation.current, currentEntry.path, prevVal);\n let currentAnimation: AnimationObject;\n if (\n typeof currentEntry.value !== 'object' ||\n !currentEntry.value.onStart\n ) {\n currentAnimation = withTiming(\n currentEntry.value as AnimatableValue,\n { duration: 0 }\n ) as AnimationObject; // TODO TYPESCRIPT this temporary cast is to get rid of .d.ts file.\n setPath(\n animation.styleAnimations,\n currentEntry.path,\n currentAnimation\n );\n } else {\n currentAnimation = currentEntry.value as Animation<AnimationObject>;\n }\n currentAnimation.onStart(\n currentAnimation,\n prevVal,\n now,\n prevAnimation\n );\n }\n }\n };\n\n const callback = (finished: boolean): void => {\n if (!finished) {\n const animationsToCheck: NestedObjectValues<AnimationObject>[] = [\n styleAnimations,\n ];\n while (animationsToCheck.length > 0) {\n const currentAnimation: NestedObjectValues<AnimationObject> =\n animationsToCheck.pop() as NestedObjectValues<AnimationObject>;\n if (Array.isArray(currentAnimation)) {\n for (const element of currentAnimation) {\n animationsToCheck.push(element);\n }\n } else if (\n typeof currentAnimation === 'object' &&\n currentAnimation.onStart === undefined\n ) {\n for (const value of Object.values(currentAnimation)) {\n animationsToCheck.push(value);\n }\n } else {\n const currentStyleAnimation: AnimationObject =\n currentAnimation as AnimationObject;\n if (\n !currentStyleAnimation.finished &&\n currentStyleAnimation.callback\n ) {\n currentStyleAnimation.callback(false);\n }\n }\n }\n }\n };\n\n return {\n isHigherOrder: true,\n onFrame,\n onStart,\n current: {},\n styleAnimations,\n callback,\n } as StyleLayoutAnimation;\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import { Easing } from '../Easing';
|
|
4
|
-
import { defineAnimation, getReduceMotionForAnimation } from './util';
|
|
4
|
+
import { assertEasingIsWorklet, defineAnimation, getReduceMotionForAnimation } from './util';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* The timing animation configuration.
|
|
@@ -26,6 +26,9 @@ import { defineAnimation, getReduceMotionForAnimation } from './util';
|
|
|
26
26
|
export const withTiming = function (toValue, userConfig, callback) {
|
|
27
27
|
'worklet';
|
|
28
28
|
|
|
29
|
+
if (__DEV__ && userConfig !== null && userConfig !== void 0 && userConfig.easing) {
|
|
30
|
+
assertEasingIsWorklet(userConfig.easing);
|
|
31
|
+
}
|
|
29
32
|
return defineAnimation(toValue, () => {
|
|
30
33
|
'worklet';
|
|
31
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Easing","defineAnimation","getReduceMotionForAnimation","withTiming","toValue","userConfig","callback","
|
|
1
|
+
{"version":3,"names":["Easing","assertEasingIsWorklet","defineAnimation","getReduceMotionForAnimation","withTiming","toValue","userConfig","callback","__DEV__","easing","config","duration","inOut","quad","Object","keys","forEach","key","timing","animation","now","startTime","startValue","runtime","current","progress","onStart","value","previousAnimation","type","factory","onFrame","reduceMotion"],"sources":["timing.ts"],"sourcesContent":["'use strict';\nimport type { EasingFunction, EasingFunctionFactory } from '../Easing';\nimport { Easing } from '../Easing';\nimport {\n assertEasingIsWorklet,\n defineAnimation,\n getReduceMotionForAnimation,\n} from './util';\nimport type {\n Animation,\n AnimationCallback,\n Timestamp,\n AnimatableValue,\n ReduceMotion,\n} from '../commonTypes';\n\n/**\n * The timing animation configuration.\n *\n * @param duration - Length of the animation (in milliseconds). Defaults to 300.\n * @param easing - An easing function which defines the animation curve. Defaults to `Easing.inOut(Easing.quad)`.\n * @param reduceMotion - Determines how the animation responds to the device's reduced motion accessibility setting. Default to `ReduceMotion.System` - {@link ReduceMotion}.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/animations/withTiming#config-\n */\ninterface TimingConfig {\n duration?: number;\n reduceMotion?: ReduceMotion;\n easing?: EasingFunction | EasingFunctionFactory;\n}\n\nexport type WithTimingConfig = TimingConfig;\n\nexport interface TimingAnimation extends Animation<TimingAnimation> {\n type: string;\n easing: EasingFunction;\n startValue: AnimatableValue;\n startTime: Timestamp;\n progress: number;\n toValue: AnimatableValue;\n current: AnimatableValue;\n}\n\ninterface InnerTimingAnimation\n extends Omit<TimingAnimation, 'toValue' | 'current'> {\n toValue: number;\n current: number;\n}\n\n// TODO TYPESCRIPT This is temporary type put in here to get rid of our .d.ts file\ntype withTimingType = <T extends AnimatableValue>(\n toValue: T,\n userConfig?: TimingConfig,\n callback?: AnimationCallback\n) => T;\n\n/**\n * Lets you create an animation based on duration and easing.\n *\n * @param toValue - The value on which the animation will come at rest - {@link AnimatableValue}.\n * @param config - The timing animation configuration - {@link TimingConfig}.\n * @param callback - A function called on animation complete - {@link AnimationCallback}.\n * @returns An [animation object](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#animation-object) which holds the current state of the animation.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/animations/withTiming\n */\nexport const withTiming = function (\n toValue: AnimatableValue,\n userConfig?: TimingConfig,\n callback?: AnimationCallback\n): Animation<TimingAnimation> {\n 'worklet';\n\n if (__DEV__ && userConfig?.easing) {\n assertEasingIsWorklet(userConfig.easing);\n }\n\n return defineAnimation<TimingAnimation>(toValue, () => {\n 'worklet';\n const config: Required<Omit<TimingConfig, 'reduceMotion'>> = {\n duration: 300,\n easing: Easing.inOut(Easing.quad),\n };\n if (userConfig) {\n Object.keys(userConfig).forEach(\n (key) =>\n ((config as any)[key] = userConfig[key as keyof typeof userConfig])\n );\n }\n\n function timing(animation: InnerTimingAnimation, now: Timestamp): boolean {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { toValue, startTime, startValue } = animation;\n const runtime = now - startTime;\n\n if (runtime >= config.duration) {\n // reset startTime to avoid reusing finished animation config in `start` method\n animation.startTime = 0;\n animation.current = toValue;\n return true;\n }\n const progress = animation.easing(runtime / config.duration);\n animation.current =\n (startValue as number) + (toValue - (startValue as number)) * progress;\n return false;\n }\n\n function onStart(\n animation: TimingAnimation,\n value: number,\n now: Timestamp,\n previousAnimation: Animation<TimingAnimation>\n ): void {\n if (\n previousAnimation &&\n (previousAnimation as TimingAnimation).type === 'timing' &&\n (previousAnimation as TimingAnimation).toValue === toValue &&\n (previousAnimation as TimingAnimation).startTime\n ) {\n // to maintain continuity of timing animations we check if we are starting\n // new timing over the old one with the same parameters. If so, we want\n // to copy animation timeline properties\n animation.startTime = (previousAnimation as TimingAnimation).startTime;\n animation.startValue = (\n previousAnimation as TimingAnimation\n ).startValue;\n } else {\n animation.startTime = now;\n animation.startValue = value;\n }\n animation.current = value;\n if (typeof config.easing === 'object') {\n animation.easing = config.easing.factory();\n } else {\n animation.easing = config.easing;\n }\n }\n\n return {\n type: 'timing',\n onFrame: timing,\n onStart: onStart as (animation: TimingAnimation, now: number) => boolean,\n progress: 0,\n toValue,\n startValue: 0,\n startTime: 0,\n easing: () => 0,\n current: toValue,\n callback,\n reduceMotion: getReduceMotionForAnimation(userConfig?.reduceMotion),\n } as TimingAnimation;\n });\n} as withTimingType;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -60,10 +60,9 @@ export function scaleMatrix(maybeFlatA, scalar) {
|
|
|
60
60
|
const b = a.map(x => x * scalar);
|
|
61
61
|
return isFlatOnStart ? b : unflatten(b);
|
|
62
62
|
}
|
|
63
|
-
export function getRotationMatrix(angle) {
|
|
63
|
+
export function getRotationMatrix(angle, axis = 'z') {
|
|
64
64
|
'worklet';
|
|
65
65
|
|
|
66
|
-
let axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'z';
|
|
67
66
|
const cos = Math.cos(angle);
|
|
68
67
|
const sin = Math.sin(angle);
|
|
69
68
|
switch (axis) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isAffineMatrixFlat","x","Array","isArray","length","every","element","isNaN","isAffineMatrix","row","flatten","matrix","flat","unflatten","m","maybeFlattenMatrix","multiplyMatrices","a","b","subtractMatrices","maybeFlatA","maybeFlatB","isFlatOnStart","c","map","_","i","addMatrices","scaleMatrix","scalar","getRotationMatrix","angle","axis","arguments","undefined","cos","Math","sin","norm3d","y","z","sqrt","transposeMatrix","assertVectorsHaveEqualLengths","__DEV__","Error","toString","innerProduct","reduce","acc","projection","u","s","e","subtractVectors","scaleVector","gramSchmidtAlgorithm","a0","a1","a2","a3","u0","u1","u2","u3","e0","e1","e2","e3","rotationMatrix","skewMatrix","decomposeMatrix","unknownTypeMatrix","forEach","translationMatrix","sx","sy","sz","rotationAndSkewMatrix","decomposeMatrixIntoMatricesAndAngles","sinRy","ry","asin","rx","rz","atan2"],"sources":["matrixUtils.tsx"],"sourcesContent":["'use strict';\ntype FixedLengthArray<\n T,\n L extends number,\n PassedObject = [T, ...Array<T>]\n> = PassedObject & {\n readonly length: L;\n [I: number]: T;\n};\n\nexport type AffineMatrix = FixedLengthArray<FixedLengthArray<number, 4>, 4>;\n\nexport type AffineMatrixFlat = FixedLengthArray<number, 16>;\n\ntype TransformMatrixDecomposition = Record<\n 'translationMatrix' | 'scaleMatrix' | 'rotationMatrix' | 'skewMatrix',\n AffineMatrix\n>;\n\ntype Axis = 'x' | 'y' | 'z';\n\ninterface TansformMatrixDecompositionWithAngles\n extends TransformMatrixDecomposition {\n rx: number;\n ry: number;\n rz: number;\n}\n\nexport function isAffineMatrixFlat(x: unknown): x is AffineMatrixFlat {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 16 &&\n x.every((element) => typeof element === 'number' && !isNaN(element))\n );\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function isAffineMatrix(x: unknown): x is AffineMatrix {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 4 &&\n x.every(\n (row) =>\n Array.isArray(row) &&\n row.length === 4 &&\n row.every((element) => typeof element === 'number' && !isNaN(element))\n )\n );\n}\n\nexport function flatten(matrix: AffineMatrix): AffineMatrixFlat {\n 'worklet';\n return matrix.flat() as AffineMatrixFlat;\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function unflatten(m: AffineMatrixFlat): AffineMatrix {\n 'worklet';\n return [\n [m[0], m[1], m[2], m[3]],\n [m[4], m[5], m[6], m[7]],\n [m[8], m[9], m[10], m[11]],\n [m[12], m[13], m[14], m[15]],\n ] as AffineMatrix;\n}\n\nfunction maybeFlattenMatrix(\n matrix: AffineMatrix | AffineMatrixFlat\n): AffineMatrixFlat {\n 'worklet';\n return isAffineMatrix(matrix) ? flatten(matrix) : matrix;\n}\n\nexport function multiplyMatrices(\n a: AffineMatrix,\n b: AffineMatrix\n): AffineMatrix {\n 'worklet';\n return [\n [\n a[0][0] * b[0][0] +\n a[0][1] * b[1][0] +\n a[0][2] * b[2][0] +\n a[0][3] * b[3][0],\n\n a[0][0] * b[0][1] +\n a[0][1] * b[1][1] +\n a[0][2] * b[2][1] +\n a[0][3] * b[3][1],\n\n a[0][0] * b[0][2] +\n a[0][1] * b[1][2] +\n a[0][2] * b[2][2] +\n a[0][3] * b[3][2],\n\n a[0][0] * b[0][3] +\n a[0][1] * b[1][3] +\n a[0][2] * b[2][3] +\n a[0][3] * b[3][3],\n ],\n [\n a[1][0] * b[0][0] +\n a[1][1] * b[1][0] +\n a[1][2] * b[2][0] +\n a[1][3] * b[3][0],\n\n a[1][0] * b[0][1] +\n a[1][1] * b[1][1] +\n a[1][2] * b[2][1] +\n a[1][3] * b[3][1],\n\n a[1][0] * b[0][2] +\n a[1][1] * b[1][2] +\n a[1][2] * b[2][2] +\n a[1][3] * b[3][2],\n\n a[1][0] * b[0][3] +\n a[1][1] * b[1][3] +\n a[1][2] * b[2][3] +\n a[1][3] * b[3][3],\n ],\n [\n a[2][0] * b[0][0] +\n a[2][1] * b[1][0] +\n a[2][2] * b[2][0] +\n a[2][3] * b[3][0],\n\n a[2][0] * b[0][1] +\n a[2][1] * b[1][1] +\n a[2][2] * b[2][1] +\n a[2][3] * b[3][1],\n\n a[2][0] * b[0][2] +\n a[2][1] * b[1][2] +\n a[2][2] * b[2][2] +\n a[2][3] * b[3][2],\n\n a[2][0] * b[0][3] +\n a[2][1] * b[1][3] +\n a[2][2] * b[2][3] +\n a[2][3] * b[3][3],\n ],\n [\n a[3][0] * b[0][0] +\n a[3][1] * b[1][0] +\n a[3][2] * b[2][0] +\n a[3][3] * b[3][0],\n\n a[3][0] * b[0][1] +\n a[3][1] * b[1][1] +\n a[3][2] * b[2][1] +\n a[3][3] * b[3][1],\n\n a[3][0] * b[0][2] +\n a[3][1] * b[1][2] +\n a[3][2] * b[2][2] +\n a[3][3] * b[3][2],\n\n a[3][0] * b[0][3] +\n a[3][1] * b[1][3] +\n a[3][2] * b[2][3] +\n a[3][3] * b[3][3],\n ],\n ];\n}\n\nexport function subtractMatrices<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatA);\n const b: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] - b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function addMatrices<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n const b = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] + b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function scaleMatrix<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n scalar: number\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n\n const b = a.map((x) => x * scalar) as AffineMatrixFlat;\n return isFlatOnStart ? (b as T) : (unflatten(b) as T);\n}\n\nexport function getRotationMatrix(\n angle: number,\n axis: Axis = 'z'\n): AffineMatrix {\n 'worklet';\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n switch (axis) {\n case 'z':\n return [\n [cos, sin, 0, 0],\n [-sin, cos, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n case 'y':\n return [\n [cos, 0, -sin, 0],\n [0, 1, 0, 0],\n [sin, 0, cos, 0],\n [0, 0, 0, 1],\n ];\n case 'x':\n return [\n [1, 0, 0, 0],\n [0, cos, sin, 0],\n [0, -sin, cos, 0],\n [0, 0, 0, 1],\n ];\n }\n}\n\nfunction norm3d(x: number, y: number, z: number) {\n 'worklet';\n return Math.sqrt(x * x + y * y + z * z);\n}\n\nfunction transposeMatrix(matrix: AffineMatrix): AffineMatrix {\n 'worklet';\n const m = flatten(matrix);\n return [\n [m[0], m[4], m[8], m[12]],\n [m[1], m[5], m[9], m[13]],\n [m[2], m[6], m[10], m[14]],\n [m[3], m[7], m[11], m[15]],\n ];\n}\n\nfunction assertVectorsHaveEqualLengths(a: number[], b: number[]) {\n 'worklet';\n if (__DEV__ && a.length !== b.length) {\n throw new Error(\n `[Reanimated] Cannot calculate inner product of two vectors of different lengths. Length of ${a.toString()} is ${\n a.length\n } and length of ${b.toString()} is ${b.length}.`\n );\n }\n}\n\nfunction innerProduct(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.reduce((acc, _, i) => acc + a[i] * b[i], 0);\n}\n\nfunction projection(u: number[], a: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(u, a);\n const s = innerProduct(u, a) / innerProduct(u, u);\n return u.map((e) => e * s);\n}\n\nfunction subtractVectors(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.map((_, i) => a[i] - b[i]);\n}\n\nfunction scaleVector(u: number[], a: number) {\n 'worklet';\n return u.map((e) => e * a);\n}\n\nfunction gramSchmidtAlgorithm(matrix: AffineMatrix): {\n rotationMatrix: AffineMatrix;\n skewMatrix: AffineMatrix;\n} {\n // Gram-Schmidt orthogonalization decomposes any matrix with non-zero determinant into an orthogonal and a triangular matrix\n // These matrices are equal to rotation and skew matrices respectively, because we apply it to transformation matrix\n // That is expected to already have extracted the remaining transforms (scale & translation)\n 'worklet';\n const [a0, a1, a2, a3] = matrix;\n\n const u0 = a0;\n const u1 = subtractVectors(a1, projection(u0, a1));\n const u2 = subtractVectors(\n subtractVectors(a2, projection(u0, a2)),\n projection(u1, a2)\n );\n const u3 = subtractVectors(\n subtractVectors(\n subtractVectors(a3, projection(u0, a3)),\n projection(u1, a3)\n ),\n projection(u2, a3)\n );\n\n const [e0, e1, e2, e3] = [u0, u1, u2, u3].map((u) =>\n scaleVector(u, 1 / Math.sqrt(innerProduct(u, u)))\n );\n\n const rotationMatrix: AffineMatrix = [\n [e0[0], e1[0], e2[0], e3[0]],\n [e0[1], e1[1], e2[1], e3[1]],\n [e0[2], e1[2], e2[2], e3[2]],\n [e0[3], e1[3], e2[3], e3[3]],\n ];\n\n const skewMatrix: AffineMatrix = [\n [\n innerProduct(e0, a0),\n innerProduct(e0, a1),\n innerProduct(e0, a2),\n innerProduct(e0, a3),\n ],\n [0, innerProduct(e1, a1), innerProduct(e1, a2), innerProduct(e1, a3)],\n [0, 0, innerProduct(e2, a2), innerProduct(e2, a3)],\n [0, 0, 0, innerProduct(e3, a3)],\n ];\n return {\n rotationMatrix: transposeMatrix(rotationMatrix),\n skewMatrix: transposeMatrix(skewMatrix),\n };\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function decomposeMatrix(\n unknownTypeMatrix: AffineMatrixFlat | AffineMatrix\n): TransformMatrixDecomposition {\n 'worklet';\n const matrix = maybeFlattenMatrix(unknownTypeMatrix);\n\n // normalize matrix\n if (matrix[15] === 0) {\n throw new Error('[Reanimated] Invalid transform matrix.');\n }\n matrix.forEach((_, i) => (matrix[i] /= matrix[15]));\n\n const translationMatrix: AffineMatrix = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [matrix[12], matrix[13], matrix[14], 1],\n ];\n const sx = matrix[15] * norm3d(matrix[0], matrix[4], matrix[8]);\n const sy = matrix[15] * norm3d(matrix[1], matrix[5], matrix[9]);\n const sz = matrix[15] * norm3d(matrix[2], matrix[6], matrix[10]);\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const scaleMatrix: AffineMatrix = [\n [sx, 0, 0, 0],\n [0, sy, 0, 0],\n [0, 0, sz, 0],\n [0, 0, 0, 1],\n ];\n\n const rotationAndSkewMatrix: AffineMatrix = [\n [matrix[0] / sx, matrix[1] / sx, matrix[2] / sx, 0],\n [matrix[4] / sy, matrix[5] / sy, matrix[6] / sy, 0],\n [matrix[8] / sz, matrix[9] / sz, matrix[10] / sz, 0],\n [0, 0, 0, 1],\n ];\n\n const { rotationMatrix, skewMatrix } = gramSchmidtAlgorithm(\n rotationAndSkewMatrix\n );\n\n return {\n translationMatrix,\n scaleMatrix,\n rotationMatrix,\n skewMatrix,\n };\n}\n\nexport function decomposeMatrixIntoMatricesAndAngles(\n matrix: AffineMatrixFlat | AffineMatrix\n): TansformMatrixDecompositionWithAngles {\n 'worklet';\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { scaleMatrix, rotationMatrix, translationMatrix, skewMatrix } =\n decomposeMatrix(matrix);\n\n const sinRy = -rotationMatrix[0][2];\n\n const ry = Math.asin(sinRy);\n let rx;\n let rz;\n if (sinRy === 1 || sinRy === -1) {\n rz = 0;\n rx = Math.atan2(sinRy * rotationMatrix[0][1], sinRy * rotationMatrix[0][2]);\n } else {\n rz = Math.atan2(rotationMatrix[0][1], rotationMatrix[0][0]);\n rx = Math.atan2(rotationMatrix[1][2], rotationMatrix[2][2]);\n }\n\n return {\n scaleMatrix,\n rotationMatrix,\n translationMatrix,\n skewMatrix,\n rx: rx || 0,\n ry: ry || 0,\n rz: rz || 0,\n };\n}\n"],"mappings":"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C,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,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"}
|
|
1
|
+
{"version":3,"names":["isAffineMatrixFlat","x","Array","isArray","length","every","element","isNaN","isAffineMatrix","row","flatten","matrix","flat","unflatten","m","maybeFlattenMatrix","multiplyMatrices","a","b","subtractMatrices","maybeFlatA","maybeFlatB","isFlatOnStart","c","map","_","i","addMatrices","scaleMatrix","scalar","getRotationMatrix","angle","axis","cos","Math","sin","norm3d","y","z","sqrt","transposeMatrix","assertVectorsHaveEqualLengths","__DEV__","Error","toString","innerProduct","reduce","acc","projection","u","s","e","subtractVectors","scaleVector","gramSchmidtAlgorithm","a0","a1","a2","a3","u0","u1","u2","u3","e0","e1","e2","e3","rotationMatrix","skewMatrix","decomposeMatrix","unknownTypeMatrix","forEach","translationMatrix","sx","sy","sz","rotationAndSkewMatrix","decomposeMatrixIntoMatricesAndAngles","sinRy","ry","asin","rx","rz","atan2"],"sources":["matrixUtils.tsx"],"sourcesContent":["'use strict';\ntype FixedLengthArray<\n T,\n L extends number,\n PassedObject = [T, ...Array<T>]\n> = PassedObject & {\n readonly length: L;\n [I: number]: T;\n};\n\nexport type AffineMatrix = FixedLengthArray<FixedLengthArray<number, 4>, 4>;\n\nexport type AffineMatrixFlat = FixedLengthArray<number, 16>;\n\ntype TransformMatrixDecomposition = Record<\n 'translationMatrix' | 'scaleMatrix' | 'rotationMatrix' | 'skewMatrix',\n AffineMatrix\n>;\n\ntype Axis = 'x' | 'y' | 'z';\n\ninterface TansformMatrixDecompositionWithAngles\n extends TransformMatrixDecomposition {\n rx: number;\n ry: number;\n rz: number;\n}\n\nexport function isAffineMatrixFlat(x: unknown): x is AffineMatrixFlat {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 16 &&\n x.every((element) => typeof element === 'number' && !isNaN(element))\n );\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function isAffineMatrix(x: unknown): x is AffineMatrix {\n 'worklet';\n return (\n Array.isArray(x) &&\n x.length === 4 &&\n x.every(\n (row) =>\n Array.isArray(row) &&\n row.length === 4 &&\n row.every((element) => typeof element === 'number' && !isNaN(element))\n )\n );\n}\n\nexport function flatten(matrix: AffineMatrix): AffineMatrixFlat {\n 'worklet';\n return matrix.flat() as AffineMatrixFlat;\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function unflatten(m: AffineMatrixFlat): AffineMatrix {\n 'worklet';\n return [\n [m[0], m[1], m[2], m[3]],\n [m[4], m[5], m[6], m[7]],\n [m[8], m[9], m[10], m[11]],\n [m[12], m[13], m[14], m[15]],\n ] as AffineMatrix;\n}\n\nfunction maybeFlattenMatrix(\n matrix: AffineMatrix | AffineMatrixFlat\n): AffineMatrixFlat {\n 'worklet';\n return isAffineMatrix(matrix) ? flatten(matrix) : matrix;\n}\n\nexport function multiplyMatrices(\n a: AffineMatrix,\n b: AffineMatrix\n): AffineMatrix {\n 'worklet';\n return [\n [\n a[0][0] * b[0][0] +\n a[0][1] * b[1][0] +\n a[0][2] * b[2][0] +\n a[0][3] * b[3][0],\n\n a[0][0] * b[0][1] +\n a[0][1] * b[1][1] +\n a[0][2] * b[2][1] +\n a[0][3] * b[3][1],\n\n a[0][0] * b[0][2] +\n a[0][1] * b[1][2] +\n a[0][2] * b[2][2] +\n a[0][3] * b[3][2],\n\n a[0][0] * b[0][3] +\n a[0][1] * b[1][3] +\n a[0][2] * b[2][3] +\n a[0][3] * b[3][3],\n ],\n [\n a[1][0] * b[0][0] +\n a[1][1] * b[1][0] +\n a[1][2] * b[2][0] +\n a[1][3] * b[3][0],\n\n a[1][0] * b[0][1] +\n a[1][1] * b[1][1] +\n a[1][2] * b[2][1] +\n a[1][3] * b[3][1],\n\n a[1][0] * b[0][2] +\n a[1][1] * b[1][2] +\n a[1][2] * b[2][2] +\n a[1][3] * b[3][2],\n\n a[1][0] * b[0][3] +\n a[1][1] * b[1][3] +\n a[1][2] * b[2][3] +\n a[1][3] * b[3][3],\n ],\n [\n a[2][0] * b[0][0] +\n a[2][1] * b[1][0] +\n a[2][2] * b[2][0] +\n a[2][3] * b[3][0],\n\n a[2][0] * b[0][1] +\n a[2][1] * b[1][1] +\n a[2][2] * b[2][1] +\n a[2][3] * b[3][1],\n\n a[2][0] * b[0][2] +\n a[2][1] * b[1][2] +\n a[2][2] * b[2][2] +\n a[2][3] * b[3][2],\n\n a[2][0] * b[0][3] +\n a[2][1] * b[1][3] +\n a[2][2] * b[2][3] +\n a[2][3] * b[3][3],\n ],\n [\n a[3][0] * b[0][0] +\n a[3][1] * b[1][0] +\n a[3][2] * b[2][0] +\n a[3][3] * b[3][0],\n\n a[3][0] * b[0][1] +\n a[3][1] * b[1][1] +\n a[3][2] * b[2][1] +\n a[3][3] * b[3][1],\n\n a[3][0] * b[0][2] +\n a[3][1] * b[1][2] +\n a[3][2] * b[2][2] +\n a[3][3] * b[3][2],\n\n a[3][0] * b[0][3] +\n a[3][1] * b[1][3] +\n a[3][2] * b[2][3] +\n a[3][3] * b[3][3],\n ],\n ];\n}\n\nexport function subtractMatrices<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatA);\n const b: AffineMatrixFlat = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] - b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function addMatrices<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n maybeFlatB: T\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n const b = maybeFlattenMatrix(maybeFlatB);\n\n const c = a.map((_, i) => a[i] + b[i]) as AffineMatrixFlat;\n return isFlatOnStart ? (c as T) : (unflatten(c) as T);\n}\n\nexport function scaleMatrix<T extends AffineMatrixFlat | AffineMatrix>(\n maybeFlatA: T,\n scalar: number\n): T {\n 'worklet';\n const isFlatOnStart = isAffineMatrixFlat(maybeFlatA);\n const a = maybeFlattenMatrix(maybeFlatA);\n\n const b = a.map((x) => x * scalar) as AffineMatrixFlat;\n return isFlatOnStart ? (b as T) : (unflatten(b) as T);\n}\n\nexport function getRotationMatrix(\n angle: number,\n axis: Axis = 'z'\n): AffineMatrix {\n 'worklet';\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n switch (axis) {\n case 'z':\n return [\n [cos, sin, 0, 0],\n [-sin, cos, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n case 'y':\n return [\n [cos, 0, -sin, 0],\n [0, 1, 0, 0],\n [sin, 0, cos, 0],\n [0, 0, 0, 1],\n ];\n case 'x':\n return [\n [1, 0, 0, 0],\n [0, cos, sin, 0],\n [0, -sin, cos, 0],\n [0, 0, 0, 1],\n ];\n }\n}\n\nfunction norm3d(x: number, y: number, z: number) {\n 'worklet';\n return Math.sqrt(x * x + y * y + z * z);\n}\n\nfunction transposeMatrix(matrix: AffineMatrix): AffineMatrix {\n 'worklet';\n const m = flatten(matrix);\n return [\n [m[0], m[4], m[8], m[12]],\n [m[1], m[5], m[9], m[13]],\n [m[2], m[6], m[10], m[14]],\n [m[3], m[7], m[11], m[15]],\n ];\n}\n\nfunction assertVectorsHaveEqualLengths(a: number[], b: number[]) {\n 'worklet';\n if (__DEV__ && a.length !== b.length) {\n throw new Error(\n `[Reanimated] Cannot calculate inner product of two vectors of different lengths. Length of ${a.toString()} is ${\n a.length\n } and length of ${b.toString()} is ${b.length}.`\n );\n }\n}\n\nfunction innerProduct(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.reduce((acc, _, i) => acc + a[i] * b[i], 0);\n}\n\nfunction projection(u: number[], a: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(u, a);\n const s = innerProduct(u, a) / innerProduct(u, u);\n return u.map((e) => e * s);\n}\n\nfunction subtractVectors(a: number[], b: number[]) {\n 'worklet';\n assertVectorsHaveEqualLengths(a, b);\n return a.map((_, i) => a[i] - b[i]);\n}\n\nfunction scaleVector(u: number[], a: number) {\n 'worklet';\n return u.map((e) => e * a);\n}\n\nfunction gramSchmidtAlgorithm(matrix: AffineMatrix): {\n rotationMatrix: AffineMatrix;\n skewMatrix: AffineMatrix;\n} {\n // Gram-Schmidt orthogonalization decomposes any matrix with non-zero determinant into an orthogonal and a triangular matrix\n // These matrices are equal to rotation and skew matrices respectively, because we apply it to transformation matrix\n // That is expected to already have extracted the remaining transforms (scale & translation)\n 'worklet';\n const [a0, a1, a2, a3] = matrix;\n\n const u0 = a0;\n const u1 = subtractVectors(a1, projection(u0, a1));\n const u2 = subtractVectors(\n subtractVectors(a2, projection(u0, a2)),\n projection(u1, a2)\n );\n const u3 = subtractVectors(\n subtractVectors(\n subtractVectors(a3, projection(u0, a3)),\n projection(u1, a3)\n ),\n projection(u2, a3)\n );\n\n const [e0, e1, e2, e3] = [u0, u1, u2, u3].map((u) =>\n scaleVector(u, 1 / Math.sqrt(innerProduct(u, u)))\n );\n\n const rotationMatrix: AffineMatrix = [\n [e0[0], e1[0], e2[0], e3[0]],\n [e0[1], e1[1], e2[1], e3[1]],\n [e0[2], e1[2], e2[2], e3[2]],\n [e0[3], e1[3], e2[3], e3[3]],\n ];\n\n const skewMatrix: AffineMatrix = [\n [\n innerProduct(e0, a0),\n innerProduct(e0, a1),\n innerProduct(e0, a2),\n innerProduct(e0, a3),\n ],\n [0, innerProduct(e1, a1), innerProduct(e1, a2), innerProduct(e1, a3)],\n [0, 0, innerProduct(e2, a2), innerProduct(e2, a3)],\n [0, 0, 0, innerProduct(e3, a3)],\n ];\n return {\n rotationMatrix: transposeMatrix(rotationMatrix),\n skewMatrix: transposeMatrix(skewMatrix),\n };\n}\n\n// ts-prune-ignore-next This function is exported to be tested\nexport function decomposeMatrix(\n unknownTypeMatrix: AffineMatrixFlat | AffineMatrix\n): TransformMatrixDecomposition {\n 'worklet';\n const matrix = maybeFlattenMatrix(unknownTypeMatrix);\n\n // normalize matrix\n if (matrix[15] === 0) {\n throw new Error('[Reanimated] Invalid transform matrix.');\n }\n matrix.forEach((_, i) => (matrix[i] /= matrix[15]));\n\n const translationMatrix: AffineMatrix = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [matrix[12], matrix[13], matrix[14], 1],\n ];\n const sx = matrix[15] * norm3d(matrix[0], matrix[4], matrix[8]);\n const sy = matrix[15] * norm3d(matrix[1], matrix[5], matrix[9]);\n const sz = matrix[15] * norm3d(matrix[2], matrix[6], matrix[10]);\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const scaleMatrix: AffineMatrix = [\n [sx, 0, 0, 0],\n [0, sy, 0, 0],\n [0, 0, sz, 0],\n [0, 0, 0, 1],\n ];\n\n const rotationAndSkewMatrix: AffineMatrix = [\n [matrix[0] / sx, matrix[1] / sx, matrix[2] / sx, 0],\n [matrix[4] / sy, matrix[5] / sy, matrix[6] / sy, 0],\n [matrix[8] / sz, matrix[9] / sz, matrix[10] / sz, 0],\n [0, 0, 0, 1],\n ];\n\n const { rotationMatrix, skewMatrix } = gramSchmidtAlgorithm(\n rotationAndSkewMatrix\n );\n\n return {\n translationMatrix,\n scaleMatrix,\n rotationMatrix,\n skewMatrix,\n };\n}\n\nexport function decomposeMatrixIntoMatricesAndAngles(\n matrix: AffineMatrixFlat | AffineMatrix\n): TansformMatrixDecompositionWithAngles {\n 'worklet';\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { scaleMatrix, rotationMatrix, translationMatrix, skewMatrix } =\n decomposeMatrix(matrix);\n\n const sinRy = -rotationMatrix[0][2];\n\n const ry = Math.asin(sinRy);\n let rx;\n let rz;\n if (sinRy === 1 || sinRy === -1) {\n rz = 0;\n rx = Math.atan2(sinRy * rotationMatrix[0][1], sinRy * rotationMatrix[0][2]);\n } else {\n rz = Math.atan2(rotationMatrix[0][1], rotationMatrix[0][0]);\n rx = Math.atan2(rotationMatrix[1][2], rotationMatrix[2][2]);\n }\n\n return {\n scaleMatrix,\n rotationMatrix,\n translationMatrix,\n skewMatrix,\n rx: rx || 0,\n ry: ry || 0,\n rz: rz || 0,\n };\n}\n"],"mappings":"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C,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,EACD,CACED,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAEnBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACfD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACjBD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,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","ignoreList":[]}
|
|
@@ -2,14 +2,35 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
import { isColor, convertToRGBA, rgbaArrayToRGBAColor, toGammaSpace, toLinearSpace } from '../Colors';
|
|
5
|
-
import { ReduceMotion } from '../commonTypes';
|
|
5
|
+
import { ReduceMotion, isWorkletFunction } from '../commonTypes';
|
|
6
6
|
import { flatten, multiplyMatrices, scaleMatrix, addMatrices, decomposeMatrixIntoMatricesAndAngles, isAffineMatrixFlat, subtractMatrices, getRotationMatrix } from './transformationMatrix/matrixUtils';
|
|
7
7
|
import { isReducedMotion, shouldBeUseWeb } from '../PlatformChecker';
|
|
8
8
|
let IN_STYLE_UPDATER = false;
|
|
9
9
|
const IS_REDUCED_MOTION = isReducedMotion();
|
|
10
|
+
const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
10
11
|
if (__DEV__ && IS_REDUCED_MOTION) {
|
|
11
12
|
console.warn(`[Reanimated] Reduced motion setting is enabled on this device. This warning is visible only in the development mode. Some animations will be disabled by default. You can override the behavior for individual animations, see https://docs.swmansion.com/react-native-reanimated/docs/guides/troubleshooting#reduced-motion-setting-is-enabled-on-this-device.`);
|
|
12
13
|
}
|
|
14
|
+
export function assertEasingIsWorklet(easing) {
|
|
15
|
+
'worklet';
|
|
16
|
+
|
|
17
|
+
if (_WORKLET) {
|
|
18
|
+
// If this is called on UI (for example from gesture handler with worklets), we don't get easing,
|
|
19
|
+
// but its bound copy, which is not a worklet. We don't want to throw any error then.
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (SHOULD_BE_USE_WEB) {
|
|
23
|
+
// It is possible to run reanimated on web without plugin, so let's skip this check on web
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// @ts-ignore typescript wants us to use `in` instead, which doesn't work with host objects
|
|
27
|
+
if (easing !== null && easing !== void 0 && easing.factory) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (!isWorkletFunction(easing)) {
|
|
31
|
+
throw new Error('[Reanimated] The easing function is not a worklet. Please make sure you import `Easing` from react-native-reanimated.');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
13
34
|
export function initialUpdaterRun(updater) {
|
|
14
35
|
IN_STYLE_UPDATER = true;
|
|
15
36
|
const result = updater();
|
|
@@ -285,7 +306,6 @@ function decorateAnimation(animation) {
|
|
|
285
306
|
baseOnStart(animation, value, timestamp, previousAnimation);
|
|
286
307
|
};
|
|
287
308
|
}
|
|
288
|
-
const SHOULD_BE_USE_WEB = shouldBeUseWeb();
|
|
289
309
|
export function defineAnimation(starting, factory) {
|
|
290
310
|
'worklet';
|
|
291
311
|
|