@react-navigation/native-stack 7.0.0-alpha.8 → 7.0.0-rc.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.
Files changed (76) hide show
  1. package/lib/commonjs/index.js.map +1 -1
  2. package/lib/commonjs/navigators/createNativeStackNavigator.js +19 -16
  3. package/lib/commonjs/navigators/createNativeStackNavigator.js.map +1 -1
  4. package/lib/commonjs/types.js.map +1 -1
  5. package/lib/commonjs/utils/debounce.js +16 -0
  6. package/lib/commonjs/utils/debounce.js.map +1 -0
  7. package/lib/commonjs/utils/getModalRoutesKeys.js +17 -0
  8. package/lib/commonjs/utils/getModalRoutesKeys.js.map +1 -0
  9. package/lib/commonjs/utils/useAnimatedHeaderHeight.js +1 -1
  10. package/lib/commonjs/utils/useAnimatedHeaderHeight.js.map +1 -1
  11. package/lib/commonjs/utils/useDismissedRouteError.js +1 -1
  12. package/lib/commonjs/utils/useDismissedRouteError.js.map +1 -1
  13. package/lib/commonjs/utils/useInvalidPreventRemoveError.js +1 -1
  14. package/lib/commonjs/utils/useInvalidPreventRemoveError.js.map +1 -1
  15. package/lib/commonjs/views/DebugContainer.js +1 -1
  16. package/lib/commonjs/views/DebugContainer.js.map +1 -1
  17. package/lib/commonjs/views/DebugContainer.native.js +3 -3
  18. package/lib/commonjs/views/DebugContainer.native.js.map +1 -1
  19. package/lib/commonjs/views/FontProcessor.js.map +1 -1
  20. package/lib/commonjs/views/FontProcessor.native.js +1 -1
  21. package/lib/commonjs/views/FontProcessor.native.js.map +1 -1
  22. package/lib/commonjs/views/HeaderConfig.js +41 -39
  23. package/lib/commonjs/views/HeaderConfig.js.map +1 -1
  24. package/lib/commonjs/views/NativeStackView.js +47 -58
  25. package/lib/commonjs/views/NativeStackView.js.map +1 -1
  26. package/lib/commonjs/views/NativeStackView.native.js +145 -58
  27. package/lib/commonjs/views/NativeStackView.native.js.map +1 -1
  28. package/lib/module/index.js.map +1 -1
  29. package/lib/module/navigators/createNativeStackNavigator.js +17 -14
  30. package/lib/module/navigators/createNativeStackNavigator.js.map +1 -1
  31. package/lib/module/types.js.map +1 -1
  32. package/lib/module/utils/debounce.js +10 -0
  33. package/lib/module/utils/debounce.js.map +1 -0
  34. package/lib/module/utils/getModalRoutesKeys.js +10 -0
  35. package/lib/module/utils/getModalRoutesKeys.js.map +1 -0
  36. package/lib/module/utils/useAnimatedHeaderHeight.js.map +1 -1
  37. package/lib/module/utils/useDismissedRouteError.js.map +1 -1
  38. package/lib/module/utils/useInvalidPreventRemoveError.js.map +1 -1
  39. package/lib/module/views/DebugContainer.js.map +1 -1
  40. package/lib/module/views/DebugContainer.native.js +1 -1
  41. package/lib/module/views/DebugContainer.native.js.map +1 -1
  42. package/lib/module/views/FontProcessor.js.map +1 -1
  43. package/lib/module/views/FontProcessor.native.js.map +1 -1
  44. package/lib/module/views/HeaderConfig.js +40 -38
  45. package/lib/module/views/HeaderConfig.js.map +1 -1
  46. package/lib/module/views/NativeStackView.js +47 -58
  47. package/lib/module/views/NativeStackView.js.map +1 -1
  48. package/lib/module/views/NativeStackView.native.js +144 -57
  49. package/lib/module/views/NativeStackView.native.js.map +1 -1
  50. package/lib/typescript/src/index.d.ts +1 -1
  51. package/lib/typescript/src/index.d.ts.map +1 -1
  52. package/lib/typescript/src/navigators/createNativeStackNavigator.d.ts +13 -8
  53. package/lib/typescript/src/navigators/createNativeStackNavigator.d.ts.map +1 -1
  54. package/lib/typescript/src/types.d.ts +95 -9
  55. package/lib/typescript/src/types.d.ts.map +1 -1
  56. package/lib/typescript/src/utils/debounce.d.ts +2 -0
  57. package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
  58. package/lib/typescript/src/utils/getModalRoutesKeys.d.ts +4 -0
  59. package/lib/typescript/src/utils/getModalRoutesKeys.d.ts.map +1 -0
  60. package/lib/typescript/src/utils/useAnimatedHeaderHeight.d.ts +2 -2
  61. package/lib/typescript/src/utils/useAnimatedHeaderHeight.d.ts.map +1 -1
  62. package/lib/typescript/src/views/HeaderConfig.d.ts +0 -1
  63. package/lib/typescript/src/views/HeaderConfig.d.ts.map +1 -1
  64. package/lib/typescript/src/views/NativeStackView.d.ts.map +1 -1
  65. package/lib/typescript/src/views/NativeStackView.native.d.ts +1 -1
  66. package/lib/typescript/src/views/NativeStackView.native.d.ts.map +1 -1
  67. package/package.json +15 -15
  68. package/src/index.tsx +1 -0
  69. package/src/navigators/createNativeStackNavigator.tsx +30 -6
  70. package/src/types.tsx +100 -6
  71. package/src/utils/debounce.tsx +14 -0
  72. package/src/utils/getModalRoutesKeys.ts +21 -0
  73. package/src/utils/useAnimatedHeaderHeight.tsx +1 -1
  74. package/src/views/HeaderConfig.tsx +12 -5
  75. package/src/views/NativeStackView.native.tsx +207 -98
  76. package/src/views/NativeStackView.tsx +119 -123
@@ -10,6 +10,7 @@ import {
10
10
  type ParamListBase,
11
11
  type StackNavigationState,
12
12
  useLinkBuilder,
13
+ useTheme,
13
14
  } from '@react-navigation/native';
14
15
  import * as React from 'react';
15
16
  import { Image, StyleSheet, View } from 'react-native';
@@ -35,6 +36,7 @@ const TRANSPARENT_PRESENTATIONS = [
35
36
  export function NativeStackView({ state, descriptors }: Props) {
36
37
  const parentHeaderBack = React.useContext(HeaderBackContext);
37
38
  const { buildHref } = useLinkBuilder();
39
+ const { colors } = useTheme();
38
40
 
39
41
  if (state.preloadedRoutes.length !== 0) {
40
42
  throw new Error(
@@ -43,83 +45,83 @@ export function NativeStackView({ state, descriptors }: Props) {
43
45
  }
44
46
 
45
47
  return (
46
- <SafeAreaProviderCompat>
47
- <View style={styles.container}>
48
- {state.routes.map((route, i) => {
49
- const isFocused = state.index === i;
50
- const previousKey = state.routes[i - 1]?.key;
51
- const nextKey = state.routes[i + 1]?.key;
52
- const previousDescriptor = previousKey
53
- ? descriptors[previousKey]
54
- : undefined;
55
- const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
56
- const { options, navigation, render } = descriptors[route.key];
48
+ <SafeAreaProviderCompat style={{ backgroundColor: colors.background }}>
49
+ {state.routes.map((route, i) => {
50
+ const isFocused = state.index === i;
51
+ const previousKey = state.routes[i - 1]?.key;
52
+ const nextKey = state.routes[i + 1]?.key;
53
+ const previousDescriptor = previousKey
54
+ ? descriptors[previousKey]
55
+ : undefined;
56
+ const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
57
+ const { options, navigation, render } = descriptors[route.key];
57
58
 
58
- const headerBack = previousDescriptor
59
- ? {
60
- title: getHeaderTitle(
61
- previousDescriptor.options,
62
- previousDescriptor.route.name
63
- ),
64
- href: buildHref(
65
- previousDescriptor.route.name,
66
- previousDescriptor.route.params
67
- ),
68
- }
69
- : parentHeaderBack;
59
+ const headerBack = previousDescriptor
60
+ ? {
61
+ title: getHeaderTitle(
62
+ previousDescriptor.options,
63
+ previousDescriptor.route.name
64
+ ),
65
+ href: buildHref(
66
+ previousDescriptor.route.name,
67
+ previousDescriptor.route.params
68
+ ),
69
+ }
70
+ : parentHeaderBack;
70
71
 
71
- const canGoBack = headerBack !== undefined;
72
+ const canGoBack = headerBack !== undefined;
72
73
 
73
- const {
74
- header,
75
- headerShown,
76
- headerTintColor,
77
- headerBackImageSource,
78
- headerLeft,
79
- headerRight,
80
- headerTitle,
81
- headerTitleAlign,
82
- headerTitleStyle,
83
- headerStyle,
84
- headerShadowVisible,
85
- headerTransparent,
86
- headerBackground,
87
- headerBackTitle,
88
- presentation,
89
- contentStyle,
90
- } = options;
74
+ const {
75
+ header,
76
+ headerShown,
77
+ headerTintColor,
78
+ headerBackImageSource,
79
+ headerLeft,
80
+ headerRight,
81
+ headerTitle,
82
+ headerTitleAlign,
83
+ headerTitleStyle,
84
+ headerStyle,
85
+ headerShadowVisible,
86
+ headerTransparent,
87
+ headerBackground,
88
+ headerBackTitle,
89
+ presentation,
90
+ contentStyle,
91
+ } = options;
91
92
 
92
- const nextPresentation = nextDescriptor?.options.presentation;
93
+ const nextPresentation = nextDescriptor?.options.presentation;
93
94
 
94
- return (
95
- <Screen
96
- key={route.key}
97
- focused={isFocused}
98
- route={route}
99
- navigation={navigation}
100
- headerShown={headerShown}
101
- headerTransparent={headerTransparent}
102
- header={
103
- header !== undefined ? (
104
- header({
105
- back: headerBack,
106
- options,
107
- route,
108
- navigation,
109
- })
110
- ) : (
111
- <Header
112
- title={getHeaderTitle(options, route.name)}
113
- headerTintColor={headerTintColor}
114
- headerLeft={
115
- typeof headerLeft === 'function'
116
- ? ({ tintColor }) =>
117
- headerLeft({
118
- tintColor,
119
- canGoBack,
120
- label: headerBackTitle,
121
- })
122
- : headerLeft === undefined && canGoBack
95
+ return (
96
+ <Screen
97
+ key={route.key}
98
+ focused={isFocused}
99
+ route={route}
100
+ navigation={navigation}
101
+ headerShown={headerShown}
102
+ headerTransparent={headerTransparent}
103
+ header={
104
+ header !== undefined ? (
105
+ header({
106
+ back: headerBack,
107
+ options,
108
+ route,
109
+ navigation,
110
+ })
111
+ ) : (
112
+ <Header
113
+ title={getHeaderTitle(options, route.name)}
114
+ headerTintColor={headerTintColor}
115
+ headerLeft={
116
+ typeof headerLeft === 'function'
117
+ ? ({ tintColor }) =>
118
+ headerLeft({
119
+ tintColor,
120
+ canGoBack,
121
+ label: headerBackTitle,
122
+ href: headerBack?.href,
123
+ })
124
+ : headerLeft === undefined && canGoBack
123
125
  ? ({ tintColor }) => (
124
126
  <HeaderBackButton
125
127
  tintColor={tintColor}
@@ -137,67 +139,61 @@ export function NativeStackView({ state, descriptors }: Props) {
137
139
  )
138
140
  : undefined
139
141
  }
140
- canGoBack={canGoBack}
141
142
  onPress={navigation.goBack}
142
143
  href={headerBack.href}
143
144
  />
144
145
  )
145
146
  : headerLeft
146
- }
147
- headerRight={
148
- typeof headerRight === 'function'
149
- ? ({ tintColor }) =>
150
- headerRight({ tintColor, canGoBack })
151
- : headerRight
152
- }
153
- headerTitle={
154
- typeof headerTitle === 'function'
155
- ? ({ children, tintColor }) =>
156
- headerTitle({ children, tintColor })
157
- : headerTitle
158
- }
159
- headerTitleAlign={headerTitleAlign}
160
- headerTitleStyle={headerTitleStyle}
161
- headerTransparent={headerTransparent}
162
- headerShadowVisible={headerShadowVisible}
163
- headerBackground={headerBackground}
164
- headerStyle={headerStyle}
165
- />
166
- )
167
- }
168
- style={[
169
- StyleSheet.absoluteFill,
170
- {
171
- display:
172
- isFocused ||
173
- (nextPresentation != null &&
174
- TRANSPARENT_PRESENTATIONS.includes(nextPresentation))
175
- ? 'flex'
176
- : 'none',
177
- },
178
- presentation != null &&
179
- TRANSPARENT_PRESENTATIONS.includes(presentation)
180
- ? { backgroundColor: 'transparent' }
181
- : null,
182
- ]}
183
- >
184
- <HeaderBackContext.Provider value={headerBack}>
185
- <View style={[styles.contentContainer, contentStyle]}>
186
- {render()}
187
- </View>
188
- </HeaderBackContext.Provider>
189
- </Screen>
190
- );
191
- })}
192
- </View>
147
+ }
148
+ headerRight={
149
+ typeof headerRight === 'function'
150
+ ? ({ tintColor }) => headerRight({ tintColor, canGoBack })
151
+ : headerRight
152
+ }
153
+ headerTitle={
154
+ typeof headerTitle === 'function'
155
+ ? ({ children, tintColor }) =>
156
+ headerTitle({ children, tintColor })
157
+ : headerTitle
158
+ }
159
+ headerTitleAlign={headerTitleAlign}
160
+ headerTitleStyle={headerTitleStyle}
161
+ headerTransparent={headerTransparent}
162
+ headerShadowVisible={headerShadowVisible}
163
+ headerBackground={headerBackground}
164
+ headerStyle={headerStyle}
165
+ />
166
+ )
167
+ }
168
+ style={[
169
+ StyleSheet.absoluteFill,
170
+ {
171
+ display:
172
+ isFocused ||
173
+ (nextPresentation != null &&
174
+ TRANSPARENT_PRESENTATIONS.includes(nextPresentation))
175
+ ? 'flex'
176
+ : 'none',
177
+ },
178
+ presentation != null &&
179
+ TRANSPARENT_PRESENTATIONS.includes(presentation)
180
+ ? { backgroundColor: 'transparent' }
181
+ : null,
182
+ ]}
183
+ >
184
+ <HeaderBackContext.Provider value={headerBack}>
185
+ <View style={[styles.contentContainer, contentStyle]}>
186
+ {render()}
187
+ </View>
188
+ </HeaderBackContext.Provider>
189
+ </Screen>
190
+ );
191
+ })}
193
192
  </SafeAreaProviderCompat>
194
193
  );
195
194
  }
196
195
 
197
196
  const styles = StyleSheet.create({
198
- container: {
199
- flex: 1,
200
- },
201
197
  contentContainer: {
202
198
  flex: 1,
203
199
  },