@react-navigation/stack 6.0.11 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js +72 -64
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js +37 -32
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js +1 -1
- package/lib/commonjs/TransitionConfigs/TransitionSpecs.js +1 -1
- package/lib/commonjs/index.js +13 -11
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/navigators/createStackNavigator.js +26 -21
- package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
- package/lib/commonjs/utils/debounce.js +5 -1
- package/lib/commonjs/utils/debounce.js.map +1 -1
- package/lib/commonjs/utils/memoize.js +5 -1
- package/lib/commonjs/utils/memoize.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.js +7 -4
- package/lib/commonjs/views/GestureHandler.js.map +1 -1
- package/lib/commonjs/views/GestureHandlerNative.js +1 -1
- package/lib/commonjs/views/Header/Header.js +10 -9
- package/lib/commonjs/views/Header/Header.js.map +1 -1
- package/lib/commonjs/views/Header/HeaderContainer.js +10 -9
- package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
- package/lib/commonjs/views/Header/HeaderSegment.js +5 -0
- package/lib/commonjs/views/Header/HeaderSegment.js.map +1 -1
- package/lib/commonjs/views/ModalStatusBarManager.js +11 -9
- package/lib/commonjs/views/ModalStatusBarManager.js.map +1 -1
- package/lib/commonjs/views/Screens.js +14 -10
- package/lib/commonjs/views/Screens.js.map +1 -1
- package/lib/commonjs/views/Stack/Card.js +32 -24
- package/lib/commonjs/views/Stack/Card.js.map +1 -1
- package/lib/commonjs/views/Stack/CardContainer.js +43 -40
- package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
- package/lib/commonjs/views/Stack/CardSheet.js +7 -6
- package/lib/commonjs/views/Stack/CardSheet.js.map +1 -1
- package/lib/commonjs/views/Stack/CardStack.js +26 -17
- package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
- package/lib/commonjs/views/Stack/StackView.js +62 -46
- package/lib/commonjs/views/Stack/StackView.js.map +1 -1
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js +67 -59
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js +35 -30
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createStackNavigator.js +25 -20
- package/lib/module/navigators/createStackNavigator.js.map +1 -1
- package/lib/module/utils/debounce.js +5 -1
- package/lib/module/utils/debounce.js.map +1 -1
- package/lib/module/utils/memoize.js +5 -1
- package/lib/module/utils/memoize.js.map +1 -1
- package/lib/module/views/GestureHandler.js +6 -3
- package/lib/module/views/GestureHandler.js.map +1 -1
- package/lib/module/views/Header/Header.js +10 -9
- package/lib/module/views/Header/Header.js.map +1 -1
- package/lib/module/views/Header/HeaderContainer.js +10 -9
- package/lib/module/views/Header/HeaderContainer.js.map +1 -1
- package/lib/module/views/Header/HeaderSegment.js +5 -0
- package/lib/module/views/Header/HeaderSegment.js.map +1 -1
- package/lib/module/views/ModalStatusBarManager.js +11 -9
- package/lib/module/views/ModalStatusBarManager.js.map +1 -1
- package/lib/module/views/Screens.js +13 -9
- package/lib/module/views/Screens.js.map +1 -1
- package/lib/module/views/Stack/Card.js +32 -24
- package/lib/module/views/Stack/Card.js.map +1 -1
- package/lib/module/views/Stack/CardContainer.js +43 -40
- package/lib/module/views/Stack/CardContainer.js.map +1 -1
- package/lib/module/views/Stack/CardSheet.js +7 -6
- package/lib/module/views/Stack/CardSheet.js.map +1 -1
- package/lib/module/views/Stack/CardStack.js +26 -17
- package/lib/module/views/Stack/CardStack.js.map +1 -1
- package/lib/module/views/Stack/StackView.js +62 -46
- package/lib/module/views/Stack/StackView.js.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/navigators/createStackNavigator.d.ts +1 -1
- package/lib/typescript/src/types.d.ts +9 -5
- package/package.json +9 -9
- package/src/index.tsx +1 -0
- package/src/navigators/createStackNavigator.tsx +4 -1
- package/src/types.tsx +12 -4
- package/src/views/Header/HeaderSegment.tsx +16 -4
- package/src/views/Stack/Card.tsx +1 -1
- package/src/views/Stack/CardContainer.tsx +3 -2
- package/src/views/Stack/CardStack.tsx +19 -7
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/stack",
|
|
3
3
|
"description": "Stack navigator component for iOS and Android with animated transitions and gestures",
|
|
4
|
-
"version": "6.0
|
|
4
|
+
"version": "6.2.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native-component",
|
|
7
7
|
"react-component",
|
|
@@ -40,23 +40,23 @@
|
|
|
40
40
|
"clean": "del lib"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@react-navigation/elements": "^1.2
|
|
43
|
+
"@react-navigation/elements": "^1.3.2",
|
|
44
44
|
"color": "^3.1.3",
|
|
45
45
|
"warn-once": "^0.1.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@react-navigation/native": "^6.0.
|
|
48
|
+
"@react-navigation/native": "^6.0.9",
|
|
49
49
|
"@testing-library/react-native": "^7.2.0",
|
|
50
50
|
"@types/color": "^3.0.1",
|
|
51
51
|
"@types/react": "^17.0.9",
|
|
52
52
|
"@types/react-native": "~0.64.9",
|
|
53
53
|
"del-cli": "^3.0.1",
|
|
54
|
-
"react": "
|
|
55
|
-
"react-native": "~0.
|
|
54
|
+
"react": "17.0.1",
|
|
55
|
+
"react-native": "~0.64.3",
|
|
56
56
|
"react-native-builder-bob": "^0.18.1",
|
|
57
|
-
"react-native-gesture-handler": "~
|
|
58
|
-
"react-native-safe-area-context": "
|
|
59
|
-
"react-native-screens": "~3.
|
|
57
|
+
"react-native-gesture-handler": "~2.2.0",
|
|
58
|
+
"react-native-safe-area-context": "3.3.2",
|
|
59
|
+
"react-native-screens": "~3.10.1",
|
|
60
60
|
"typescript": "^4.3.2"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
]
|
|
82
82
|
]
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "c5ef6b5e88426e658123ea8590da583314b9001e"
|
|
85
85
|
}
|
package/src/index.tsx
CHANGED
|
@@ -31,6 +31,7 @@ type Props = DefaultNavigatorOptions<
|
|
|
31
31
|
StackNavigationConfig;
|
|
32
32
|
|
|
33
33
|
function StackNavigator({
|
|
34
|
+
id,
|
|
34
35
|
initialRouteName,
|
|
35
36
|
children,
|
|
36
37
|
screenListeners,
|
|
@@ -81,6 +82,7 @@ function StackNavigator({
|
|
|
81
82
|
StackNavigationOptions,
|
|
82
83
|
StackNavigationEventMap
|
|
83
84
|
>(StackRouter, {
|
|
85
|
+
id,
|
|
84
86
|
initialRouteName,
|
|
85
87
|
children,
|
|
86
88
|
screenListeners,
|
|
@@ -90,6 +92,7 @@ function StackNavigator({
|
|
|
90
92
|
|
|
91
93
|
React.useEffect(
|
|
92
94
|
() =>
|
|
95
|
+
// @ts-expect-error: there may not be a tab navigator in parent
|
|
93
96
|
navigation.addListener?.('tabPress', (e) => {
|
|
94
97
|
const isFocused = navigation.isFocused();
|
|
95
98
|
|
|
@@ -99,7 +102,7 @@ function StackNavigator({
|
|
|
99
102
|
if (
|
|
100
103
|
state.index > 0 &&
|
|
101
104
|
isFocused &&
|
|
102
|
-
!(e as EventArg<'tabPress', true>).defaultPrevented
|
|
105
|
+
!(e as unknown as EventArg<'tabPress', true>).defaultPrevented
|
|
103
106
|
) {
|
|
104
107
|
// When user taps on already focused tab and we're inside the tab,
|
|
105
108
|
// reset the stack to replicate native behaviour
|
package/src/types.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
HeaderBackButton,
|
|
3
3
|
HeaderBackButtonProps,
|
|
4
|
+
HeaderButtonProps,
|
|
4
5
|
HeaderOptions,
|
|
5
6
|
HeaderTitleProps,
|
|
6
7
|
} from '@react-navigation/elements';
|
|
@@ -48,10 +49,12 @@ export type StackNavigationHelpers = NavigationHelpers<
|
|
|
48
49
|
|
|
49
50
|
export type StackNavigationProp<
|
|
50
51
|
ParamList extends ParamListBase,
|
|
51
|
-
RouteName extends keyof ParamList = keyof ParamList
|
|
52
|
+
RouteName extends keyof ParamList = keyof ParamList,
|
|
53
|
+
NavigatorID extends string | undefined = undefined
|
|
52
54
|
> = NavigationProp<
|
|
53
55
|
ParamList,
|
|
54
56
|
RouteName,
|
|
57
|
+
NavigatorID,
|
|
55
58
|
StackNavigationState<ParamList>,
|
|
56
59
|
StackNavigationOptions,
|
|
57
60
|
StackNavigationEventMap
|
|
@@ -60,9 +63,10 @@ export type StackNavigationProp<
|
|
|
60
63
|
|
|
61
64
|
export type StackScreenProps<
|
|
62
65
|
ParamList extends ParamListBase,
|
|
63
|
-
RouteName extends keyof ParamList = keyof ParamList
|
|
66
|
+
RouteName extends keyof ParamList = keyof ParamList,
|
|
67
|
+
NavigatorID extends string | undefined = undefined
|
|
64
68
|
> = {
|
|
65
|
-
navigation: StackNavigationProp<ParamList, RouteName>;
|
|
69
|
+
navigation: StackNavigationProp<ParamList, RouteName, NavigatorID>;
|
|
66
70
|
route: RouteProp<ParamList, RouteName>;
|
|
67
71
|
};
|
|
68
72
|
|
|
@@ -122,7 +126,7 @@ export type StackPresentationMode = 'card' | 'modal';
|
|
|
122
126
|
|
|
123
127
|
export type StackHeaderOptions = Omit<
|
|
124
128
|
HeaderOptions,
|
|
125
|
-
'headerLeft' | 'headerTitle'
|
|
129
|
+
'headerLeft' | 'headerTitle' | 'headerRight'
|
|
126
130
|
> & {
|
|
127
131
|
/**
|
|
128
132
|
* String or a function that returns a React Element to be used by the header.
|
|
@@ -136,6 +140,10 @@ export type StackHeaderOptions = Omit<
|
|
|
136
140
|
* Function which returns a React Element to display on the left side of the header.
|
|
137
141
|
*/
|
|
138
142
|
headerLeft?: (props: HeaderBackButtonProps) => React.ReactNode;
|
|
143
|
+
/**
|
|
144
|
+
* Function which returns a React Element to display on the right side of the header.
|
|
145
|
+
*/
|
|
146
|
+
headerRight?: (props: HeaderButtonProps) => React.ReactNode;
|
|
139
147
|
/**
|
|
140
148
|
* Whether back button title font should scale to respect Text Size accessibility settings. Defaults to `false`.
|
|
141
149
|
*/
|
|
@@ -33,11 +33,13 @@ type Props = Omit<StackHeaderOptions, 'headerStatusBarHeight'> & {
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
export default function HeaderSegment(props: Props) {
|
|
36
|
-
const [leftLabelLayout, setLeftLabelLayout] =
|
|
37
|
-
|
|
36
|
+
const [leftLabelLayout, setLeftLabelLayout] = React.useState<
|
|
37
|
+
Layout | undefined
|
|
38
|
+
>(undefined);
|
|
38
39
|
|
|
39
|
-
const [titleLayout, setTitleLayout] =
|
|
40
|
-
|
|
40
|
+
const [titleLayout, setTitleLayout] = React.useState<Layout | undefined>(
|
|
41
|
+
undefined
|
|
42
|
+
);
|
|
41
43
|
|
|
42
44
|
const handleTitleLayout = (e: LayoutChangeEvent) => {
|
|
43
45
|
const { height, width } = e.nativeEvent.layout;
|
|
@@ -103,6 +105,7 @@ export default function HeaderSegment(props: Props) {
|
|
|
103
105
|
headerLeft: left = onGoBack
|
|
104
106
|
? (props: HeaderBackButtonProps) => <HeaderBackButton {...props} />
|
|
105
107
|
: undefined,
|
|
108
|
+
headerRight: right,
|
|
106
109
|
headerBackImage,
|
|
107
110
|
headerBackTitle,
|
|
108
111
|
headerBackTitleVisible = Platform.OS === 'ios',
|
|
@@ -166,6 +169,14 @@ export default function HeaderSegment(props: Props) {
|
|
|
166
169
|
})
|
|
167
170
|
: undefined;
|
|
168
171
|
|
|
172
|
+
const headerRight: StackHeaderOptions['headerRight'] = right
|
|
173
|
+
? (props) =>
|
|
174
|
+
right({
|
|
175
|
+
...props,
|
|
176
|
+
canGoBack: Boolean(onGoBack),
|
|
177
|
+
})
|
|
178
|
+
: undefined;
|
|
179
|
+
|
|
169
180
|
const headerTitle: StackHeaderOptions['headerTitle'] =
|
|
170
181
|
typeof title !== 'function'
|
|
171
182
|
? (props) => <HeaderTitle {...props} onLayout={handleTitleLayout} />
|
|
@@ -178,6 +189,7 @@ export default function HeaderSegment(props: Props) {
|
|
|
178
189
|
headerTitle={headerTitle}
|
|
179
190
|
headerLeft={headerLeft}
|
|
180
191
|
headerLeftLabelVisible={headerBackTitleVisible}
|
|
192
|
+
headerRight={headerRight}
|
|
181
193
|
headerTitleContainerStyle={[titleStyle, headerTitleContainerStyle]}
|
|
182
194
|
headerLeftContainerStyle={[leftButtonStyle, headerLeftContainerStyle]}
|
|
183
195
|
headerRightContainerStyle={[rightButtonStyle, headerRightContainerStyle]}
|
package/src/views/Stack/Card.tsx
CHANGED
|
@@ -272,7 +272,7 @@ export default class Card extends React.Component<Props> {
|
|
|
272
272
|
} = this.props;
|
|
273
273
|
|
|
274
274
|
switch (nativeEvent.state) {
|
|
275
|
-
case GestureState.
|
|
275
|
+
case GestureState.ACTIVE:
|
|
276
276
|
this.isSwiping.setValue(TRUE);
|
|
277
277
|
this.handleStartInteraction();
|
|
278
278
|
onGestureBegin?.();
|
|
@@ -165,8 +165,9 @@ function CardContainer({
|
|
|
165
165
|
|
|
166
166
|
const { colors } = useTheme();
|
|
167
167
|
|
|
168
|
-
const [pointerEvents, setPointerEvents] =
|
|
169
|
-
|
|
168
|
+
const [pointerEvents, setPointerEvents] = React.useState<'box-none' | 'none'>(
|
|
169
|
+
'box-none'
|
|
170
|
+
);
|
|
170
171
|
|
|
171
172
|
React.useEffect(() => {
|
|
172
173
|
const listener = scene.progress.next?.addListener?.(
|
|
@@ -142,7 +142,7 @@ const getHeaderHeights = (
|
|
|
142
142
|
const style = StyleSheet.flatten(headerStyle || {});
|
|
143
143
|
|
|
144
144
|
const height =
|
|
145
|
-
typeof style.height === 'number'
|
|
145
|
+
'height' in style && typeof style.height === 'number'
|
|
146
146
|
? style.height
|
|
147
147
|
: previous[curr.route.key];
|
|
148
148
|
|
|
@@ -530,7 +530,12 @@ export default class CardStack extends React.Component<Props, State> {
|
|
|
530
530
|
if (detachPreviousScreen === false) {
|
|
531
531
|
activeScreensLimit++;
|
|
532
532
|
} else {
|
|
533
|
-
|
|
533
|
+
// Check at least last 2 screens before stopping
|
|
534
|
+
// This will make sure that screen isn't detached when another screen is animating on top of the transparent one
|
|
535
|
+
// For example, (Opaque -> Transparent -> Opaque)
|
|
536
|
+
if (i <= scenes.length - 2) {
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
534
539
|
}
|
|
535
540
|
}
|
|
536
541
|
|
|
@@ -609,16 +614,23 @@ export default class CardStack extends React.Component<Props, State> {
|
|
|
609
614
|
const headerHeight =
|
|
610
615
|
headerShown !== false ? headerHeights[route.key] : 0;
|
|
611
616
|
|
|
612
|
-
const { backgroundColor: headerBackgroundColor } =
|
|
613
|
-
StyleSheet.flatten(headerStyle) || {};
|
|
614
|
-
|
|
615
617
|
let headerDarkContent: boolean | undefined;
|
|
616
618
|
|
|
617
619
|
if (headerShown) {
|
|
618
620
|
if (typeof headerTintColor === 'string') {
|
|
619
621
|
headerDarkContent = Color(headerTintColor).isDark();
|
|
620
|
-
} else
|
|
621
|
-
|
|
622
|
+
} else {
|
|
623
|
+
const flattenedHeaderStyle = StyleSheet.flatten(headerStyle);
|
|
624
|
+
|
|
625
|
+
if (
|
|
626
|
+
flattenedHeaderStyle &&
|
|
627
|
+
'backgroundColor' in flattenedHeaderStyle &&
|
|
628
|
+
typeof flattenedHeaderStyle.backgroundColor === 'string'
|
|
629
|
+
) {
|
|
630
|
+
headerDarkContent = !Color(
|
|
631
|
+
flattenedHeaderStyle.backgroundColor
|
|
632
|
+
).isDark();
|
|
633
|
+
}
|
|
622
634
|
}
|
|
623
635
|
}
|
|
624
636
|
|