@amazon-devices/react-navigation__stack 2.0.1758683737
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/LICENSE +7 -0
- package/README.md +5 -0
- package/SystemBundles/ed2637c0b74cd42ce066fca701acc5cb0850978c5296fae5bd715d5e4c67b128.bundle +29321 -0
- package/SystemBundles/ed2637c0b74cd42ce066fca701acc5cb0850978c5296fae5bd715d5e4c67b128.map +1 -0
- package/SystemModules/amzn__react-navigation__stack-2.modules.txt +95 -0
- package/SystemModules/amzn__react-navigation__stack-2.private.modules.txt +258 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/THIRD_PARTY_NOTICES.txt +24 -0
- package/kepler-compatibility.json +8 -0
- package/kepler-transformed-package-info.json +3 -0
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js +353 -0
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -0
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js +259 -0
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -0
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js +134 -0
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -0
- package/lib/commonjs/TransitionConfigs/TransitionSpecs.js +100 -0
- package/lib/commonjs/TransitionConfigs/TransitionSpecs.js.map +1 -0
- package/lib/commonjs/index.js +69 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/navigators/createStackNavigator.js +82 -0
- package/lib/commonjs/navigators/createStackNavigator.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/CardAnimationContext.js +11 -0
- package/lib/commonjs/utils/CardAnimationContext.js.map +1 -0
- package/lib/commonjs/utils/GestureHandlerRefContext.js +11 -0
- package/lib/commonjs/utils/GestureHandlerRefContext.js.map +1 -0
- package/lib/commonjs/utils/ModalPresentationContext.js +12 -0
- package/lib/commonjs/utils/ModalPresentationContext.js.map +1 -0
- package/lib/commonjs/utils/conditional.js +32 -0
- package/lib/commonjs/utils/conditional.js.map +1 -0
- package/lib/commonjs/utils/debounce.js +19 -0
- package/lib/commonjs/utils/debounce.js.map +1 -0
- package/lib/commonjs/utils/findLastIndex.js +15 -0
- package/lib/commonjs/utils/findLastIndex.js.map +1 -0
- package/lib/commonjs/utils/getDistanceForDirection.js +20 -0
- package/lib/commonjs/utils/getDistanceForDirection.js.map +1 -0
- package/lib/commonjs/utils/getInvertedMultiplier.js +20 -0
- package/lib/commonjs/utils/getInvertedMultiplier.js.map +1 -0
- package/lib/commonjs/utils/memoize.js +33 -0
- package/lib/commonjs/utils/memoize.js.map +1 -0
- package/lib/commonjs/utils/useCardAnimation.js +19 -0
- package/lib/commonjs/utils/useCardAnimation.js.map +1 -0
- package/lib/commonjs/utils/useGestureHandlerRef.js +19 -0
- package/lib/commonjs/utils/useGestureHandlerRef.js.map +1 -0
- package/lib/commonjs/utils/useKeyboardManager.js +96 -0
- package/lib/commonjs/utils/useKeyboardManager.js.map +1 -0
- package/lib/commonjs/views/GestureHandler.android.js +17 -0
- package/lib/commonjs/views/GestureHandler.android.js.map +1 -0
- package/lib/commonjs/views/GestureHandler.ios.js +17 -0
- package/lib/commonjs/views/GestureHandler.ios.js.map +1 -0
- package/lib/commonjs/views/GestureHandler.js +24 -0
- package/lib/commonjs/views/GestureHandler.js.map +1 -0
- package/lib/commonjs/views/GestureHandlerNative.js +34 -0
- package/lib/commonjs/views/GestureHandlerNative.js.map +1 -0
- package/lib/commonjs/views/Header/Header.js +61 -0
- package/lib/commonjs/views/Header/Header.js.map +1 -0
- package/lib/commonjs/views/Header/HeaderContainer.js +127 -0
- package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -0
- package/lib/commonjs/views/Header/HeaderSegment.js +139 -0
- package/lib/commonjs/views/Header/HeaderSegment.js.map +1 -0
- package/lib/commonjs/views/ModalStatusBarManager.js +42 -0
- package/lib/commonjs/views/ModalStatusBarManager.js.map +1 -0
- package/lib/commonjs/views/Screens.js +44 -0
- package/lib/commonjs/views/Screens.js.map +1 -0
- package/lib/commonjs/views/Stack/Card.js +469 -0
- package/lib/commonjs/views/Stack/Card.js.map +1 -0
- package/lib/commonjs/views/Stack/CardContainer.js +259 -0
- package/lib/commonjs/views/Stack/CardContainer.js.map +1 -0
- package/lib/commonjs/views/Stack/CardSheet.js +54 -0
- package/lib/commonjs/views/Stack/CardSheet.js.map +1 -0
- package/lib/commonjs/views/Stack/CardStack.js +442 -0
- package/lib/commonjs/views/Stack/CardStack.js.map +1 -0
- package/lib/commonjs/views/Stack/StackView.js +333 -0
- package/lib/commonjs/views/Stack/StackView.js.map +1 -0
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js +338 -0
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -0
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js +248 -0
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -0
- package/lib/module/TransitionConfigs/TransitionPresets.js +128 -0
- package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -0
- package/lib/module/TransitionConfigs/TransitionSpecs.js +94 -0
- package/lib/module/TransitionConfigs/TransitionSpecs.js.map +1 -0
- package/lib/module/index.js +33 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/navigators/createStackNavigator.js +73 -0
- package/lib/module/navigators/createStackNavigator.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/CardAnimationContext.js +3 -0
- package/lib/module/utils/CardAnimationContext.js.map +1 -0
- package/lib/module/utils/GestureHandlerRefContext.js +3 -0
- package/lib/module/utils/GestureHandlerRefContext.js.map +1 -0
- package/lib/module/utils/ModalPresentationContext.js +4 -0
- package/lib/module/utils/ModalPresentationContext.js.map +1 -0
- package/lib/module/utils/conditional.js +26 -0
- package/lib/module/utils/conditional.js.map +1 -0
- package/lib/module/utils/debounce.js +13 -0
- package/lib/module/utils/debounce.js.map +1 -0
- package/lib/module/utils/findLastIndex.js +9 -0
- package/lib/module/utils/findLastIndex.js.map +1 -0
- package/lib/module/utils/getDistanceForDirection.js +13 -0
- package/lib/module/utils/getDistanceForDirection.js.map +1 -0
- package/lib/module/utils/getInvertedMultiplier.js +14 -0
- package/lib/module/utils/getInvertedMultiplier.js.map +1 -0
- package/lib/module/utils/memoize.js +27 -0
- package/lib/module/utils/memoize.js.map +1 -0
- package/lib/module/utils/useCardAnimation.js +10 -0
- package/lib/module/utils/useCardAnimation.js.map +1 -0
- package/lib/module/utils/useGestureHandlerRef.js +10 -0
- package/lib/module/utils/useGestureHandlerRef.js.map +1 -0
- package/lib/module/utils/useKeyboardManager.js +88 -0
- package/lib/module/utils/useKeyboardManager.js.map +1 -0
- package/lib/module/views/GestureHandler.android.js +2 -0
- package/lib/module/views/GestureHandler.android.js.map +1 -0
- package/lib/module/views/GestureHandler.ios.js +2 -0
- package/lib/module/views/GestureHandler.ios.js.map +1 -0
- package/lib/module/views/GestureHandler.js +16 -0
- package/lib/module/views/GestureHandler.js.map +1 -0
- package/lib/module/views/GestureHandlerNative.js +14 -0
- package/lib/module/views/GestureHandlerNative.js.map +1 -0
- package/lib/module/views/Header/Header.js +52 -0
- package/lib/module/views/Header/Header.js.map +1 -0
- package/lib/module/views/Header/HeaderContainer.js +118 -0
- package/lib/module/views/Header/HeaderContainer.js.map +1 -0
- package/lib/module/views/Header/HeaderSegment.js +130 -0
- package/lib/module/views/Header/HeaderSegment.js.map +1 -0
- package/lib/module/views/ModalStatusBarManager.js +34 -0
- package/lib/module/views/ModalStatusBarManager.js.map +1 -0
- package/lib/module/views/Screens.js +34 -0
- package/lib/module/views/Screens.js.map +1 -0
- package/lib/module/views/Stack/Card.js +458 -0
- package/lib/module/views/Stack/Card.js.map +1 -0
- package/lib/module/views/Stack/CardContainer.js +250 -0
- package/lib/module/views/Stack/CardContainer.js.map +1 -0
- package/lib/module/views/Stack/CardSheet.js +46 -0
- package/lib/module/views/Stack/CardSheet.js.map +1 -0
- package/lib/module/views/Stack/CardStack.js +432 -0
- package/lib/module/views/Stack/CardStack.js.map +1 -0
- package/lib/module/views/Stack/StackView.js +323 -0
- package/lib/module/views/Stack/StackView.js.map +1 -0
- package/lib/typescript/src/TransitionConfigs/CardStyleInterpolators.d.ts +35 -0
- package/lib/typescript/src/TransitionConfigs/CardStyleInterpolators.d.ts.map +1 -0
- package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts +23 -0
- package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts.map +1 -0
- package/lib/typescript/src/TransitionConfigs/TransitionPresets.d.ts +42 -0
- package/lib/typescript/src/TransitionConfigs/TransitionPresets.d.ts.map +1 -0
- package/lib/typescript/src/TransitionConfigs/TransitionSpecs.d.ts +36 -0
- package/lib/typescript/src/TransitionConfigs/TransitionSpecs.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +29 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/navigators/createStackNavigator.d.ts +8 -0
- package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +481 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/CardAnimationContext.d.ts +5 -0
- package/lib/typescript/src/utils/CardAnimationContext.d.ts.map +1 -0
- package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts +4 -0
- package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts.map +1 -0
- package/lib/typescript/src/utils/ModalPresentationContext.d.ts +4 -0
- package/lib/typescript/src/utils/ModalPresentationContext.d.ts.map +1 -0
- package/lib/typescript/src/utils/conditional.d.ts +10 -0
- package/lib/typescript/src/utils/conditional.d.ts.map +1 -0
- package/lib/typescript/src/utils/debounce.d.ts +2 -0
- package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
- package/lib/typescript/src/utils/findLastIndex.d.ts +2 -0
- package/lib/typescript/src/utils/findLastIndex.d.ts.map +1 -0
- package/lib/typescript/src/utils/getDistanceForDirection.d.ts +3 -0
- package/lib/typescript/src/utils/getDistanceForDirection.d.ts.map +1 -0
- package/lib/typescript/src/utils/getInvertedMultiplier.d.ts +3 -0
- package/lib/typescript/src/utils/getInvertedMultiplier.d.ts.map +1 -0
- package/lib/typescript/src/utils/memoize.d.ts +2 -0
- package/lib/typescript/src/utils/memoize.d.ts.map +1 -0
- package/lib/typescript/src/utils/useCardAnimation.d.ts +2 -0
- package/lib/typescript/src/utils/useCardAnimation.d.ts.map +1 -0
- package/lib/typescript/src/utils/useGestureHandlerRef.d.ts +3 -0
- package/lib/typescript/src/utils/useGestureHandlerRef.d.ts.map +1 -0
- package/lib/typescript/src/utils/useKeyboardManager.d.ts +6 -0
- package/lib/typescript/src/utils/useKeyboardManager.d.ts.map +1 -0
- package/lib/typescript/src/views/GestureHandler.android.d.ts +2 -0
- package/lib/typescript/src/views/GestureHandler.android.d.ts.map +1 -0
- package/lib/typescript/src/views/GestureHandler.d.ts +14 -0
- package/lib/typescript/src/views/GestureHandler.d.ts.map +1 -0
- package/lib/typescript/src/views/GestureHandler.ios.d.ts +2 -0
- package/lib/typescript/src/views/GestureHandler.ios.d.ts.map +1 -0
- package/lib/typescript/src/views/GestureHandlerNative.d.ts +6 -0
- package/lib/typescript/src/views/GestureHandlerNative.d.ts.map +1 -0
- package/lib/typescript/src/views/Header/Header.d.ts +5 -0
- package/lib/typescript/src/views/Header/Header.d.ts.map +1 -0
- package/lib/typescript/src/views/Header/HeaderContainer.d.ts +20 -0
- package/lib/typescript/src/views/Header/HeaderContainer.d.ts.map +1 -0
- package/lib/typescript/src/views/Header/HeaderSegment.d.ts +14 -0
- package/lib/typescript/src/views/Header/HeaderSegment.d.ts.map +1 -0
- package/lib/typescript/src/views/ModalStatusBarManager.d.ts +12 -0
- package/lib/typescript/src/views/ModalStatusBarManager.d.ts.map +1 -0
- package/lib/typescript/src/views/Screens.d.ts +13 -0
- package/lib/typescript/src/views/Screens.d.ts.map +1 -0
- package/lib/typescript/src/views/Stack/Card.d.ts +76 -0
- package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -0
- package/lib/typescript/src/views/Stack/CardContainer.d.ts +63 -0
- package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -0
- package/lib/typescript/src/views/Stack/CardSheet.d.ts +15 -0
- package/lib/typescript/src/views/Stack/CardSheet.d.ts.map +1 -0
- package/lib/typescript/src/views/Stack/CardStack.d.ts +67 -0
- package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -0
- package/lib/typescript/src/views/Stack/StackView.d.ts +122 -0
- package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -0
- package/package.json +1 -0
- package/src/TransitionConfigs/CardStyleInterpolators.tsx +394 -0
- package/src/TransitionConfigs/HeaderStyleInterpolators.tsx +268 -0
- package/src/TransitionConfigs/TransitionPresets.tsx +152 -0
- package/src/TransitionConfigs/TransitionSpecs.tsx +96 -0
- package/src/index.tsx +51 -0
- package/src/navigators/createStackNavigator.tsx +136 -0
- package/src/types.tsx +547 -0
- package/src/utils/CardAnimationContext.tsx +7 -0
- package/src/utils/GestureHandlerRefContext.tsx +5 -0
- package/src/utils/ModalPresentationContext.tsx +5 -0
- package/src/utils/conditional.tsx +33 -0
- package/src/utils/debounce.tsx +17 -0
- package/src/utils/findLastIndex.tsx +12 -0
- package/src/utils/getDistanceForDirection.tsx +18 -0
- package/src/utils/getInvertedMultiplier.tsx +18 -0
- package/src/utils/memoize.tsx +33 -0
- package/src/utils/useCardAnimation.tsx +15 -0
- package/src/utils/useGestureHandlerRef.tsx +15 -0
- package/src/utils/useKeyboardManager.tsx +105 -0
- package/src/views/GestureHandler.android.tsx +1 -0
- package/src/views/GestureHandler.ios.tsx +1 -0
- package/src/views/GestureHandler.tsx +23 -0
- package/src/views/GestureHandlerNative.tsx +23 -0
- package/src/views/Header/Header.tsx +72 -0
- package/src/views/Header/HeaderContainer.tsx +186 -0
- package/src/views/Header/HeaderSegment.tsx +205 -0
- package/src/views/ModalStatusBarManager.tsx +50 -0
- package/src/views/Screens.tsx +43 -0
- package/src/views/Stack/Card.tsx +628 -0
- package/src/views/Stack/CardContainer.tsx +320 -0
- package/src/views/Stack/CardSheet.tsx +61 -0
- package/src/views/Stack/CardStack.tsx +717 -0
- package/src/views/Stack/StackView.tsx +474 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import type { TransitionPreset } from '../types';
|
|
4
|
+
import {
|
|
5
|
+
forBottomSheetAndroid,
|
|
6
|
+
forFadeFromBottomAndroid,
|
|
7
|
+
forFadeFromCenter as forFadeCard,
|
|
8
|
+
forHorizontalIOS,
|
|
9
|
+
forModalPresentationIOS,
|
|
10
|
+
forRevealFromBottomAndroid,
|
|
11
|
+
forScaleFromCenterAndroid,
|
|
12
|
+
forVerticalIOS,
|
|
13
|
+
} from './CardStyleInterpolators';
|
|
14
|
+
import { forFade } from './HeaderStyleInterpolators';
|
|
15
|
+
import {
|
|
16
|
+
BottomSheetSlideInSpec,
|
|
17
|
+
BottomSheetSlideOutSpec,
|
|
18
|
+
FadeInFromBottomAndroidSpec,
|
|
19
|
+
FadeOutToBottomAndroidSpec,
|
|
20
|
+
RevealFromBottomAndroidSpec,
|
|
21
|
+
ScaleFromCenterAndroidSpec,
|
|
22
|
+
TransitionIOSSpec,
|
|
23
|
+
} from './TransitionSpecs';
|
|
24
|
+
|
|
25
|
+
const ANDROID_VERSION_PIE = 28;
|
|
26
|
+
const ANDROID_VERSION_10 = 29;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Standard iOS navigation transition.
|
|
30
|
+
*/
|
|
31
|
+
export const SlideFromRightIOS: TransitionPreset = {
|
|
32
|
+
gestureDirection: 'horizontal',
|
|
33
|
+
transitionSpec: {
|
|
34
|
+
open: TransitionIOSSpec,
|
|
35
|
+
close: TransitionIOSSpec,
|
|
36
|
+
},
|
|
37
|
+
cardStyleInterpolator: forHorizontalIOS,
|
|
38
|
+
headerStyleInterpolator: forFade,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Standard iOS navigation transition for modals.
|
|
43
|
+
*/
|
|
44
|
+
export const ModalSlideFromBottomIOS: TransitionPreset = {
|
|
45
|
+
gestureDirection: 'vertical',
|
|
46
|
+
transitionSpec: {
|
|
47
|
+
open: TransitionIOSSpec,
|
|
48
|
+
close: TransitionIOSSpec,
|
|
49
|
+
},
|
|
50
|
+
cardStyleInterpolator: forVerticalIOS,
|
|
51
|
+
headerStyleInterpolator: forFade,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Standard iOS modal presentation style (introduced in iOS 13).
|
|
56
|
+
*/
|
|
57
|
+
export const ModalPresentationIOS: TransitionPreset = {
|
|
58
|
+
gestureDirection: 'vertical',
|
|
59
|
+
transitionSpec: {
|
|
60
|
+
open: TransitionIOSSpec,
|
|
61
|
+
close: TransitionIOSSpec,
|
|
62
|
+
},
|
|
63
|
+
cardStyleInterpolator: forModalPresentationIOS,
|
|
64
|
+
headerStyleInterpolator: forFade,
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Standard Android navigation transition when opening or closing an Activity on Android < 9 (Oreo).
|
|
69
|
+
*/
|
|
70
|
+
export const FadeFromBottomAndroid: TransitionPreset = {
|
|
71
|
+
gestureDirection: 'vertical',
|
|
72
|
+
transitionSpec: {
|
|
73
|
+
open: FadeInFromBottomAndroidSpec,
|
|
74
|
+
close: FadeOutToBottomAndroidSpec,
|
|
75
|
+
},
|
|
76
|
+
cardStyleInterpolator: forFadeFromBottomAndroid,
|
|
77
|
+
headerStyleInterpolator: forFade,
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Standard Android navigation transition when opening or closing an Activity on Android 9 (Pie).
|
|
82
|
+
*/
|
|
83
|
+
export const RevealFromBottomAndroid: TransitionPreset = {
|
|
84
|
+
gestureDirection: 'vertical',
|
|
85
|
+
transitionSpec: {
|
|
86
|
+
open: RevealFromBottomAndroidSpec,
|
|
87
|
+
close: RevealFromBottomAndroidSpec,
|
|
88
|
+
},
|
|
89
|
+
cardStyleInterpolator: forRevealFromBottomAndroid,
|
|
90
|
+
headerStyleInterpolator: forFade,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Standard Android navigation transition when opening or closing an Activity on Android 10 (Q).
|
|
95
|
+
*/
|
|
96
|
+
export const ScaleFromCenterAndroid: TransitionPreset = {
|
|
97
|
+
gestureDirection: 'horizontal',
|
|
98
|
+
transitionSpec: {
|
|
99
|
+
open: ScaleFromCenterAndroidSpec,
|
|
100
|
+
close: ScaleFromCenterAndroidSpec,
|
|
101
|
+
},
|
|
102
|
+
cardStyleInterpolator: forScaleFromCenterAndroid,
|
|
103
|
+
headerStyleInterpolator: forFade,
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Standard bottom sheet slide transition for Android 10.
|
|
108
|
+
*/
|
|
109
|
+
export const BottomSheetAndroid: TransitionPreset = {
|
|
110
|
+
gestureDirection: 'vertical',
|
|
111
|
+
transitionSpec: {
|
|
112
|
+
open: BottomSheetSlideInSpec,
|
|
113
|
+
close: BottomSheetSlideOutSpec,
|
|
114
|
+
},
|
|
115
|
+
cardStyleInterpolator: forBottomSheetAndroid,
|
|
116
|
+
headerStyleInterpolator: forFade,
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Fade transition for transparent modals.
|
|
121
|
+
*/
|
|
122
|
+
export const ModalFadeTransition: TransitionPreset = {
|
|
123
|
+
gestureDirection: 'vertical',
|
|
124
|
+
transitionSpec: {
|
|
125
|
+
open: BottomSheetSlideInSpec,
|
|
126
|
+
close: BottomSheetSlideOutSpec,
|
|
127
|
+
},
|
|
128
|
+
cardStyleInterpolator: forFadeCard,
|
|
129
|
+
headerStyleInterpolator: forFade,
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Default navigation transition for the current platform.
|
|
134
|
+
*/
|
|
135
|
+
export const DefaultTransition = Platform.select({
|
|
136
|
+
ios: SlideFromRightIOS,
|
|
137
|
+
android:
|
|
138
|
+
Platform.Version >= ANDROID_VERSION_10
|
|
139
|
+
? ScaleFromCenterAndroid
|
|
140
|
+
: Platform.Version >= ANDROID_VERSION_PIE
|
|
141
|
+
? RevealFromBottomAndroid
|
|
142
|
+
: FadeFromBottomAndroid,
|
|
143
|
+
default: ScaleFromCenterAndroid,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Default modal transition for the current platform.
|
|
148
|
+
*/
|
|
149
|
+
export const ModalTransition = Platform.select({
|
|
150
|
+
ios: ModalPresentationIOS,
|
|
151
|
+
default: BottomSheetAndroid,
|
|
152
|
+
});
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Easing } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import type { TransitionSpec } from '../types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Exact values from UINavigationController's animation configuration.
|
|
7
|
+
*/
|
|
8
|
+
export const TransitionIOSSpec: TransitionSpec = {
|
|
9
|
+
animation: 'spring',
|
|
10
|
+
config: {
|
|
11
|
+
stiffness: 1000,
|
|
12
|
+
damping: 500,
|
|
13
|
+
mass: 3,
|
|
14
|
+
overshootClamping: true,
|
|
15
|
+
restDisplacementThreshold: 10,
|
|
16
|
+
restSpeedThreshold: 10,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for activity open animation from Android Nougat.
|
|
22
|
+
* See http://aosp.opersys.com/xref/android-7.1.2_r37/xref/frameworks/base/core/res/res/anim/activity_open_enter.xml
|
|
23
|
+
*/
|
|
24
|
+
export const FadeInFromBottomAndroidSpec: TransitionSpec = {
|
|
25
|
+
animation: 'timing',
|
|
26
|
+
config: {
|
|
27
|
+
duration: 350,
|
|
28
|
+
easing: Easing.out(Easing.poly(5)),
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Configuration for activity close animation from Android Nougat.
|
|
34
|
+
* See http://aosp.opersys.com/xref/android-7.1.2_r37/xref/frameworks/base/core/res/res/anim/activity_close_exit.xml
|
|
35
|
+
*/
|
|
36
|
+
export const FadeOutToBottomAndroidSpec: TransitionSpec = {
|
|
37
|
+
animation: 'timing',
|
|
38
|
+
config: {
|
|
39
|
+
duration: 150,
|
|
40
|
+
easing: Easing.in(Easing.linear),
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Approximate configuration for activity open animation from Android Pie.
|
|
46
|
+
* See http://aosp.opersys.com/xref/android-9.0.0_r47/xref/frameworks/base/core/res/res/anim/activity_open_enter.xml
|
|
47
|
+
*/
|
|
48
|
+
export const RevealFromBottomAndroidSpec: TransitionSpec = {
|
|
49
|
+
animation: 'timing',
|
|
50
|
+
config: {
|
|
51
|
+
duration: 425,
|
|
52
|
+
// This is super rough approximation of the path used for the curve by android
|
|
53
|
+
// See http://aosp.opersys.com/xref/android-9.0.0_r47/xref/frameworks/base/core/res/res/interpolator/fast_out_extra_slow_in.xml
|
|
54
|
+
easing: Easing.bezier(0.35, 0.45, 0, 1),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Approximate configuration for activity open animation from Android Q.
|
|
60
|
+
* See http://aosp.opersys.com/xref/android-10.0.0_r2/xref/frameworks/base/core/res/res/anim/activity_open_enter.xml
|
|
61
|
+
*/
|
|
62
|
+
export const ScaleFromCenterAndroidSpec: TransitionSpec = {
|
|
63
|
+
animation: 'timing',
|
|
64
|
+
config: {
|
|
65
|
+
duration: 400,
|
|
66
|
+
// This is super rough approximation of the path used for the curve by android
|
|
67
|
+
// See http://aosp.opersys.com/xref/android-10.0.0_r2/xref/frameworks/base/core/res/res/interpolator/fast_out_extra_slow_in.xml
|
|
68
|
+
easing: Easing.bezier(0.35, 0.45, 0, 1),
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Configuration for bottom sheet slide in animation from Material Design.
|
|
74
|
+
* See https://github.com/material-components/material-components-android/blob/fd3639092e1ffef9dc11bcedf79f32801d85e898/lib/java/com/google/android/material/bottomsheet/res/anim/mtrl_bottom_sheet_slide_in.xml
|
|
75
|
+
*/
|
|
76
|
+
export const BottomSheetSlideInSpec: TransitionSpec = {
|
|
77
|
+
animation: 'timing',
|
|
78
|
+
config: {
|
|
79
|
+
duration: 250,
|
|
80
|
+
// See https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/animation/AccelerateDecelerateInterpolator.java
|
|
81
|
+
easing: (t) => Math.cos((t + 1) * Math.PI) / 2.0 + 0.5,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Configuration for bottom sheet slide out animation from Material Design.
|
|
87
|
+
* See https://github.com/material-components/material-components-android/blob/fd3639092e1ffef9dc11bcedf79f32801d85e898/lib/java/com/google/android/material/bottomsheet/res/anim/mtrl_bottom_sheet_slide_in.xml
|
|
88
|
+
*/
|
|
89
|
+
export const BottomSheetSlideOutSpec: TransitionSpec = {
|
|
90
|
+
animation: 'timing',
|
|
91
|
+
config: {
|
|
92
|
+
duration: 200,
|
|
93
|
+
// See https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/view/animation/AccelerateInterpolator.java
|
|
94
|
+
easing: (t) => (t === 1.0 ? 1 : Math.pow(t, 2)),
|
|
95
|
+
},
|
|
96
|
+
};
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as CardStyleInterpolators from './TransitionConfigs/CardStyleInterpolators';
|
|
2
|
+
import * as HeaderStyleInterpolators from './TransitionConfigs/HeaderStyleInterpolators';
|
|
3
|
+
import * as TransitionPresets from './TransitionConfigs/TransitionPresets';
|
|
4
|
+
import * as TransitionSpecs from './TransitionConfigs/TransitionSpecs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Navigators
|
|
8
|
+
*/
|
|
9
|
+
export { default as createStackNavigator } from './navigators/createStackNavigator';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Views
|
|
13
|
+
*/
|
|
14
|
+
export { default as Header } from './views/Header/Header';
|
|
15
|
+
export { default as StackView } from './views/Stack/StackView';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Transition presets
|
|
19
|
+
*/
|
|
20
|
+
export {
|
|
21
|
+
CardStyleInterpolators,
|
|
22
|
+
HeaderStyleInterpolators,
|
|
23
|
+
TransitionPresets,
|
|
24
|
+
TransitionSpecs,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Utilities
|
|
29
|
+
*/
|
|
30
|
+
export { default as CardAnimationContext } from './utils/CardAnimationContext';
|
|
31
|
+
export { default as GestureHandlerRefContext } from './utils/GestureHandlerRefContext';
|
|
32
|
+
export { default as useCardAnimation } from './utils/useCardAnimation';
|
|
33
|
+
export { default as useGestureHandlerRef } from './utils/useGestureHandlerRef';
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Types
|
|
37
|
+
*/
|
|
38
|
+
export type {
|
|
39
|
+
StackCardInterpolatedStyle,
|
|
40
|
+
StackCardInterpolationProps,
|
|
41
|
+
StackCardStyleInterpolator,
|
|
42
|
+
StackHeaderInterpolatedStyle,
|
|
43
|
+
StackHeaderInterpolationProps,
|
|
44
|
+
StackHeaderProps,
|
|
45
|
+
StackHeaderStyleInterpolator,
|
|
46
|
+
StackNavigationEventMap,
|
|
47
|
+
StackNavigationOptions,
|
|
48
|
+
StackNavigationProp,
|
|
49
|
+
StackScreenProps,
|
|
50
|
+
TransitionPreset,
|
|
51
|
+
} from './types';
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createNavigatorFactory,
|
|
3
|
+
DefaultNavigatorOptions,
|
|
4
|
+
EventArg,
|
|
5
|
+
ParamListBase,
|
|
6
|
+
StackActionHelpers,
|
|
7
|
+
StackActions,
|
|
8
|
+
StackNavigationState,
|
|
9
|
+
StackRouter,
|
|
10
|
+
StackRouterOptions,
|
|
11
|
+
useNavigationBuilder,
|
|
12
|
+
} from '@amazon-devices/react-navigation__native';
|
|
13
|
+
import * as React from 'react';
|
|
14
|
+
import warnOnce from 'warn-once';
|
|
15
|
+
|
|
16
|
+
import type {
|
|
17
|
+
StackHeaderMode,
|
|
18
|
+
StackNavigationConfig,
|
|
19
|
+
StackNavigationEventMap,
|
|
20
|
+
StackNavigationOptions,
|
|
21
|
+
} from '../types';
|
|
22
|
+
import StackView from '../views/Stack/StackView';
|
|
23
|
+
|
|
24
|
+
type Props = DefaultNavigatorOptions<
|
|
25
|
+
ParamListBase,
|
|
26
|
+
StackNavigationState<ParamListBase>,
|
|
27
|
+
StackNavigationOptions,
|
|
28
|
+
StackNavigationEventMap
|
|
29
|
+
> &
|
|
30
|
+
StackRouterOptions &
|
|
31
|
+
StackNavigationConfig;
|
|
32
|
+
|
|
33
|
+
function StackNavigator({
|
|
34
|
+
id,
|
|
35
|
+
initialRouteName,
|
|
36
|
+
children,
|
|
37
|
+
screenListeners,
|
|
38
|
+
screenOptions,
|
|
39
|
+
...rest
|
|
40
|
+
}: Props) {
|
|
41
|
+
// @ts-expect-error: mode is deprecated
|
|
42
|
+
const mode = rest.mode as 'card' | 'modal' | undefined;
|
|
43
|
+
|
|
44
|
+
warnOnce(
|
|
45
|
+
mode != null,
|
|
46
|
+
`Stack Navigator: 'mode="${mode}"' is deprecated. Use 'presentation: "${mode}"' in 'screenOptions' instead.\n\nSee https://reactnavigation.org/docs/stack-navigator#presentation for more details.`
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
// @ts-expect-error: headerMode='none' is deprecated
|
|
50
|
+
const headerMode = rest.headerMode as StackHeaderMode | 'none' | undefined;
|
|
51
|
+
|
|
52
|
+
warnOnce(
|
|
53
|
+
headerMode === 'none',
|
|
54
|
+
`Stack Navigator: 'headerMode="none"' is deprecated. Use 'headerShown: false' in 'screenOptions' instead.\n\nSee https://reactnavigation.org/docs/stack-navigator/#headershown for more details.`
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
warnOnce(
|
|
58
|
+
headerMode != null && headerMode !== 'none',
|
|
59
|
+
`Stack Navigator: 'headerMode' is moved to 'options'. Moved it to 'screenOptions' to keep current behavior.\n\nSee https://reactnavigation.org/docs/stack-navigator/#headermode for more details.`
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// @ts-expect-error: headerMode='none' is deprecated
|
|
63
|
+
const keyboardHandlingEnabled = rest.keyboardHandlingEnabled;
|
|
64
|
+
|
|
65
|
+
warnOnce(
|
|
66
|
+
keyboardHandlingEnabled !== undefined,
|
|
67
|
+
`Stack Navigator: 'keyboardHandlingEnabled' is moved to 'options'. Moved it to 'screenOptions' to keep current behavior.\n\nSee https://reactnavigation.org/docs/stack-navigator/#keyboardhandlingenabled for more details.`
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const defaultScreenOptions: StackNavigationOptions = {
|
|
71
|
+
presentation: mode,
|
|
72
|
+
headerShown: headerMode ? headerMode !== 'none' : true,
|
|
73
|
+
headerMode: headerMode && headerMode !== 'none' ? headerMode : undefined,
|
|
74
|
+
keyboardHandlingEnabled,
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const { state, descriptors, navigation, NavigationContent } =
|
|
78
|
+
useNavigationBuilder<
|
|
79
|
+
StackNavigationState<ParamListBase>,
|
|
80
|
+
StackRouterOptions,
|
|
81
|
+
StackActionHelpers<ParamListBase>,
|
|
82
|
+
StackNavigationOptions,
|
|
83
|
+
StackNavigationEventMap
|
|
84
|
+
>(StackRouter, {
|
|
85
|
+
id,
|
|
86
|
+
initialRouteName,
|
|
87
|
+
children,
|
|
88
|
+
screenListeners,
|
|
89
|
+
screenOptions,
|
|
90
|
+
defaultScreenOptions,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
React.useEffect(
|
|
94
|
+
() =>
|
|
95
|
+
// @ts-expect-error: there may not be a tab navigator in parent
|
|
96
|
+
navigation.addListener?.('tabPress', (e) => {
|
|
97
|
+
const isFocused = navigation.isFocused();
|
|
98
|
+
|
|
99
|
+
// Run the operation in the next frame so we're sure all listeners have been run
|
|
100
|
+
// This is necessary to know if preventDefault() has been called
|
|
101
|
+
requestAnimationFrame(() => {
|
|
102
|
+
if (
|
|
103
|
+
state.index > 0 &&
|
|
104
|
+
isFocused &&
|
|
105
|
+
!(e as unknown as EventArg<'tabPress', true>).defaultPrevented
|
|
106
|
+
) {
|
|
107
|
+
// When user taps on already focused tab and we're inside the tab,
|
|
108
|
+
// reset the stack to replicate native behaviour
|
|
109
|
+
navigation.dispatch({
|
|
110
|
+
...StackActions.popToTop(),
|
|
111
|
+
target: state.key,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}),
|
|
116
|
+
[navigation, state.index, state.key]
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<NavigationContent>
|
|
121
|
+
<StackView
|
|
122
|
+
{...rest}
|
|
123
|
+
state={state}
|
|
124
|
+
descriptors={descriptors}
|
|
125
|
+
navigation={navigation}
|
|
126
|
+
/>
|
|
127
|
+
</NavigationContent>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export default createNavigatorFactory<
|
|
132
|
+
StackNavigationState<ParamListBase>,
|
|
133
|
+
StackNavigationOptions,
|
|
134
|
+
StackNavigationEventMap,
|
|
135
|
+
typeof StackNavigator
|
|
136
|
+
>(StackNavigator);
|