@react-navigation/native-stack 7.0.0-rc.3 → 7.0.0-rc.30
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/index.js +2 -2
- package/lib/commonjs/navigators/createNativeStackNavigator.js +11 -6
- package/lib/commonjs/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/utils/debounce.js.map +1 -1
- package/lib/commonjs/views/FooterComponent.js +19 -0
- package/lib/commonjs/views/FooterComponent.js.map +1 -0
- package/lib/commonjs/views/NativeStackView.js +106 -106
- package/lib/commonjs/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/views/NativeStackView.native.js +221 -219
- package/lib/commonjs/views/NativeStackView.native.js.map +1 -1
- package/lib/commonjs/views/{HeaderConfig.js → useHeaderConfigProps.js} +84 -43
- package/lib/commonjs/views/useHeaderConfigProps.js.map +1 -0
- package/lib/module/index.js +4 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createNativeStackNavigator.js +13 -6
- package/lib/module/navigators/createNativeStackNavigator.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/utils/debounce.js +2 -0
- package/lib/module/utils/debounce.js.map +1 -1
- package/lib/module/utils/getModalRoutesKeys.js +2 -0
- package/lib/module/utils/getModalRoutesKeys.js.map +1 -1
- package/lib/module/utils/useAnimatedHeaderHeight.js +2 -0
- package/lib/module/utils/useAnimatedHeaderHeight.js.map +1 -1
- package/lib/module/utils/useDismissedRouteError.js +2 -0
- package/lib/module/utils/useDismissedRouteError.js.map +1 -1
- package/lib/module/utils/useInvalidPreventRemoveError.js +2 -0
- package/lib/module/utils/useInvalidPreventRemoveError.js.map +1 -1
- package/lib/module/views/FontProcessor.js +2 -0
- package/lib/module/views/FontProcessor.js.map +1 -1
- package/lib/module/views/FontProcessor.native.js +2 -0
- package/lib/module/views/FontProcessor.native.js.map +1 -1
- package/lib/module/views/FooterComponent.js +14 -0
- package/lib/module/views/FooterComponent.js.map +1 -0
- package/lib/module/views/NativeStackView.js +110 -108
- package/lib/module/views/NativeStackView.js.map +1 -1
- package/lib/module/views/NativeStackView.native.js +224 -219
- package/lib/module/views/NativeStackView.native.js.map +1 -1
- package/lib/module/views/{HeaderConfig.js → useHeaderConfigProps.js} +86 -41
- package/lib/module/views/useHeaderConfigProps.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/{src → commonjs/src}/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/{src → commonjs/src}/navigators/createNativeStackNavigator.d.ts +3 -4
- package/lib/typescript/commonjs/src/navigators/createNativeStackNavigator.d.ts.map +1 -0
- package/lib/typescript/{src → commonjs/src}/types.d.ts +112 -34
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/debounce.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/getModalRoutesKeys.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/useDismissedRouteError.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/useInvalidPreventRemoveError.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/FontProcessor.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/FontProcessor.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/FooterComponent.d.ts +7 -0
- package/lib/typescript/commonjs/src/views/FooterComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/NativeStackView.d.ts +11 -0
- package/lib/typescript/commonjs/src/views/NativeStackView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/NativeStackView.native.d.ts +11 -0
- package/lib/typescript/commonjs/src/views/NativeStackView.native.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/views/useHeaderConfigProps.d.ts +41 -0
- package/lib/typescript/commonjs/src/views/useHeaderConfigProps.d.ts.map +1 -0
- package/lib/typescript/commonjs/tsconfig.build.tsbuildinfo +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/index.d.ts +17 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/navigators/createNativeStackNavigator.d.ts +16 -0
- package/lib/typescript/module/src/navigators/createNativeStackNavigator.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +623 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/debounce.d.ts +2 -0
- package/lib/typescript/module/src/utils/debounce.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/getModalRoutesKeys.d.ts +4 -0
- package/lib/typescript/module/src/utils/getModalRoutesKeys.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/useAnimatedHeaderHeight.d.ts +5 -0
- package/lib/typescript/module/src/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/useDismissedRouteError.d.ts +6 -0
- package/lib/typescript/module/src/utils/useDismissedRouteError.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/useInvalidPreventRemoveError.d.ts +3 -0
- package/lib/typescript/module/src/utils/useInvalidPreventRemoveError.d.ts.map +1 -0
- package/lib/typescript/module/src/views/FontProcessor.d.ts +2 -0
- package/lib/typescript/module/src/views/FontProcessor.d.ts.map +1 -0
- package/lib/typescript/module/src/views/FontProcessor.native.d.ts +2 -0
- package/lib/typescript/module/src/views/FontProcessor.native.d.ts.map +1 -0
- package/lib/typescript/module/src/views/FooterComponent.d.ts +7 -0
- package/lib/typescript/module/src/views/FooterComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/views/NativeStackView.d.ts +11 -0
- package/lib/typescript/module/src/views/NativeStackView.d.ts.map +1 -0
- package/lib/typescript/module/src/views/NativeStackView.native.d.ts +11 -0
- package/lib/typescript/module/src/views/NativeStackView.native.d.ts.map +1 -0
- package/lib/typescript/module/src/views/useHeaderConfigProps.d.ts +41 -0
- package/lib/typescript/module/src/views/useHeaderConfigProps.d.ts.map +1 -0
- package/lib/typescript/module/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +41 -18
- package/src/index.tsx +2 -0
- package/src/navigators/createNativeStackNavigator.tsx +6 -7
- package/src/types.tsx +106 -34
- package/src/utils/debounce.tsx +1 -1
- package/src/views/FooterComponent.tsx +10 -0
- package/src/views/NativeStackView.native.tsx +167 -202
- package/src/views/NativeStackView.tsx +62 -50
- package/src/views/{HeaderConfig.tsx → useHeaderConfigProps.tsx} +80 -68
- package/lib/commonjs/views/DebugContainer.js +0 -19
- package/lib/commonjs/views/DebugContainer.js.map +0 -1
- package/lib/commonjs/views/DebugContainer.native.js +0 -42
- package/lib/commonjs/views/DebugContainer.native.js.map +0 -1
- package/lib/commonjs/views/HeaderConfig.js.map +0 -1
- package/lib/module/views/DebugContainer.js +0 -11
- package/lib/module/views/DebugContainer.js.map +0 -1
- package/lib/module/views/DebugContainer.native.js +0 -33
- package/lib/module/views/DebugContainer.native.js.map +0 -1
- package/lib/module/views/HeaderConfig.js.map +0 -1
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/navigators/createNativeStackNavigator.d.ts.map +0 -1
- package/lib/typescript/src/types.d.ts.map +0 -1
- package/lib/typescript/src/utils/debounce.d.ts.map +0 -1
- package/lib/typescript/src/utils/getModalRoutesKeys.d.ts.map +0 -1
- package/lib/typescript/src/utils/useAnimatedHeaderHeight.d.ts.map +0 -1
- package/lib/typescript/src/utils/useDismissedRouteError.d.ts.map +0 -1
- package/lib/typescript/src/utils/useInvalidPreventRemoveError.d.ts.map +0 -1
- package/lib/typescript/src/views/DebugContainer.d.ts +0 -10
- package/lib/typescript/src/views/DebugContainer.d.ts.map +0 -1
- package/lib/typescript/src/views/DebugContainer.native.d.ts +0 -15
- package/lib/typescript/src/views/DebugContainer.native.d.ts.map +0 -1
- package/lib/typescript/src/views/FontProcessor.d.ts.map +0 -1
- package/lib/typescript/src/views/FontProcessor.native.d.ts.map +0 -1
- package/lib/typescript/src/views/HeaderConfig.d.ts +0 -11
- package/lib/typescript/src/views/HeaderConfig.d.ts.map +0 -1
- package/lib/typescript/src/views/NativeStackView.d.ts +0 -11
- package/lib/typescript/src/views/NativeStackView.d.ts.map +0 -1
- package/lib/typescript/src/views/NativeStackView.native.d.ts +0 -11
- package/lib/typescript/src/views/NativeStackView.native.d.ts.map +0 -1
- package/src/views/DebugContainer.native.tsx +0 -36
- package/src/views/DebugContainer.tsx +0 -14
- /package/lib/typescript/{src → commonjs/src}/utils/debounce.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/getModalRoutesKeys.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/useAnimatedHeaderHeight.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/useDismissedRouteError.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/utils/useInvalidPreventRemoveError.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/views/FontProcessor.d.ts +0 -0
- /package/lib/typescript/{src → commonjs/src}/views/FontProcessor.native.d.ts +0 -0
|
@@ -10,64 +10,17 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
12
12
|
var _reactNativeScreens = require("react-native-screens");
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
var _debounce = require("../utils/debounce.js");
|
|
14
|
+
var _getModalRoutesKeys = require("../utils/getModalRoutesKeys.js");
|
|
15
|
+
var _useAnimatedHeaderHeight = require("../utils/useAnimatedHeaderHeight.js");
|
|
16
|
+
var _useDismissedRouteError = require("../utils/useDismissedRouteError.js");
|
|
17
|
+
var _useInvalidPreventRemoveError = require("../utils/useInvalidPreventRemoveError.js");
|
|
18
|
+
var _FooterComponent = require("./FooterComponent.js");
|
|
19
|
+
var _useHeaderConfigProps = require("./useHeaderConfigProps.js");
|
|
20
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
22
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
23
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
24
|
-
|
|
25
|
-
const isAndroid = _reactNative.Platform.OS === 'android';
|
|
26
|
-
const MaybeNestedStack = ({
|
|
27
|
-
options,
|
|
28
|
-
route,
|
|
29
|
-
presentation,
|
|
30
|
-
headerHeight,
|
|
31
|
-
headerTopInsetEnabled,
|
|
32
|
-
children
|
|
33
|
-
}) => {
|
|
34
|
-
const {
|
|
35
|
-
colors
|
|
36
|
-
} = (0, _native.useTheme)();
|
|
37
|
-
const {
|
|
38
|
-
header,
|
|
39
|
-
headerShown = true,
|
|
40
|
-
contentStyle
|
|
41
|
-
} = options;
|
|
42
|
-
const isHeaderInModal = isAndroid ? false : presentation !== 'card' && headerShown === true && header === undefined;
|
|
43
|
-
const headerShownPreviousRef = React.useRef(headerShown);
|
|
44
|
-
React.useEffect(() => {
|
|
45
|
-
(0, _warnOnce.default)(!isAndroid && presentation !== 'card' && headerShownPreviousRef.current !== headerShown, `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`);
|
|
46
|
-
headerShownPreviousRef.current = headerShown;
|
|
47
|
-
}, [headerShown, presentation, route.name]);
|
|
48
|
-
const content = /*#__PURE__*/React.createElement(_DebugContainer.DebugContainer, {
|
|
49
|
-
style: [styles.container, presentation !== 'transparentModal' && presentation !== 'containedTransparentModal' && {
|
|
50
|
-
backgroundColor: colors.background
|
|
51
|
-
}, contentStyle],
|
|
52
|
-
stackPresentation: presentation === 'card' ? 'push' : presentation
|
|
53
|
-
}, children);
|
|
54
|
-
if (isHeaderInModal) {
|
|
55
|
-
return /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStack, {
|
|
56
|
-
style: styles.container
|
|
57
|
-
}, /*#__PURE__*/React.createElement(_reactNativeScreens.Screen, {
|
|
58
|
-
enabled: true,
|
|
59
|
-
isNativeStack: true,
|
|
60
|
-
hasLargeHeader: options.headerLargeTitle ?? false,
|
|
61
|
-
style: _reactNative.StyleSheet.absoluteFill
|
|
62
|
-
}, content, /*#__PURE__*/React.createElement(_HeaderConfig.HeaderConfig, _extends({}, options, {
|
|
63
|
-
route: route,
|
|
64
|
-
headerHeight: headerHeight,
|
|
65
|
-
headerTopInsetEnabled: headerTopInsetEnabled,
|
|
66
|
-
canGoBack: true
|
|
67
|
-
}))));
|
|
68
|
-
}
|
|
69
|
-
return content;
|
|
70
|
-
};
|
|
23
|
+
const ANDROID_DEFAULT_HEADER_HEIGHT = 56;
|
|
71
24
|
const SceneView = ({
|
|
72
25
|
index,
|
|
73
26
|
focused,
|
|
@@ -75,6 +28,7 @@ const SceneView = ({
|
|
|
75
28
|
previousDescriptor,
|
|
76
29
|
nextDescriptor,
|
|
77
30
|
isPresentationModal,
|
|
31
|
+
isPreloaded,
|
|
78
32
|
onWillDisappear,
|
|
79
33
|
onWillAppear,
|
|
80
34
|
onAppear,
|
|
@@ -82,7 +36,8 @@ const SceneView = ({
|
|
|
82
36
|
onDismissed,
|
|
83
37
|
onHeaderBackButtonClicked,
|
|
84
38
|
onNativeDismissCancelled,
|
|
85
|
-
onGestureCancel
|
|
39
|
+
onGestureCancel,
|
|
40
|
+
onSheetDetentChanged
|
|
86
41
|
}) => {
|
|
87
42
|
const {
|
|
88
43
|
route,
|
|
@@ -99,6 +54,7 @@ const SceneView = ({
|
|
|
99
54
|
const {
|
|
100
55
|
animationDuration,
|
|
101
56
|
animationTypeForReplace = 'push',
|
|
57
|
+
fullScreenGestureShadowEnabled = false,
|
|
102
58
|
gestureEnabled,
|
|
103
59
|
gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical',
|
|
104
60
|
gestureResponseDistance,
|
|
@@ -113,17 +69,21 @@ const SceneView = ({
|
|
|
113
69
|
navigationBarTranslucent,
|
|
114
70
|
navigationBarHidden,
|
|
115
71
|
orientation,
|
|
116
|
-
sheetAllowedDetents =
|
|
117
|
-
|
|
72
|
+
sheetAllowedDetents = [1.0],
|
|
73
|
+
sheetLargestUndimmedDetentIndex = -1,
|
|
118
74
|
sheetGrabberVisible = false,
|
|
119
75
|
sheetCornerRadius = -1.0,
|
|
76
|
+
sheetElevation = 24,
|
|
120
77
|
sheetExpandsWhenScrolledToEdge = true,
|
|
78
|
+
sheetInitialDetentIndex = 0,
|
|
121
79
|
statusBarAnimation,
|
|
122
80
|
statusBarHidden,
|
|
123
81
|
statusBarStyle,
|
|
124
82
|
statusBarTranslucent,
|
|
125
83
|
statusBarBackgroundColor,
|
|
126
|
-
|
|
84
|
+
unstable_sheetFooter = null,
|
|
85
|
+
freezeOnBlur,
|
|
86
|
+
contentStyle
|
|
127
87
|
} = options;
|
|
128
88
|
if (gestureDirection === 'vertical' && _reactNative.Platform.OS === 'ios') {
|
|
129
89
|
// for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`
|
|
@@ -151,6 +111,9 @@ const SceneView = ({
|
|
|
151
111
|
// for navigator with first screen as `modal` and the next as `card`
|
|
152
112
|
presentation = 'card';
|
|
153
113
|
}
|
|
114
|
+
const {
|
|
115
|
+
colors
|
|
116
|
+
} = (0, _native.useTheme)();
|
|
154
117
|
const insets = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
|
|
155
118
|
const frame = (0, _reactNativeSafeAreaContext.useSafeAreaFrame)();
|
|
156
119
|
|
|
@@ -171,7 +134,7 @@ const SceneView = ({
|
|
|
171
134
|
// FIXME: Currently screens isn't using Material 3
|
|
172
135
|
// So our `getDefaultHeaderHeight` doesn't return the correct value
|
|
173
136
|
// So we hardcode the value here for now until screens is updated
|
|
174
|
-
android:
|
|
137
|
+
android: ANDROID_DEFAULT_HEADER_HEIGHT + topInset,
|
|
175
138
|
default: (0, _elements.getDefaultHeaderHeight)(frame, isModal, topInset)
|
|
176
139
|
});
|
|
177
140
|
const [headerHeight, setHeaderHeight] = React.useState(defaultHeaderHeight);
|
|
@@ -182,7 +145,7 @@ const SceneView = ({
|
|
|
182
145
|
(0, _debounce.debounce)(setHeaderHeight, 100), []);
|
|
183
146
|
const hasCustomHeader = header !== undefined;
|
|
184
147
|
let headerHeightCorrectionOffset = 0;
|
|
185
|
-
if (
|
|
148
|
+
if (_reactNative.Platform.OS === 'android' && !hasCustomHeader) {
|
|
186
149
|
const statusBarHeight = _reactNative.StatusBar.currentHeight ?? 0;
|
|
187
150
|
|
|
188
151
|
// FIXME: On Android, the native header height is not correctly calculated
|
|
@@ -201,30 +164,45 @@ const SceneView = ({
|
|
|
201
164
|
// we apply additional padding in header only if its true.
|
|
202
165
|
// For more details see: https://github.com/react-navigation/react-navigation/pull/12014
|
|
203
166
|
const headerTopInsetEnabled = typeof statusBarTranslucent === 'boolean' ? statusBarTranslucent : topInset !== 0;
|
|
167
|
+
const canGoBack = previousDescriptor != null || parentHeaderBack != null;
|
|
204
168
|
const backTitle = previousDescriptor ? (0, _elements.getHeaderTitle)(previousDescriptor.options, previousDescriptor.route.name) : parentHeaderBack?.title;
|
|
205
|
-
const headerBack = React.useMemo(() =>
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
169
|
+
const headerBack = React.useMemo(() => {
|
|
170
|
+
if (canGoBack) {
|
|
171
|
+
return {
|
|
172
|
+
href: undefined,
|
|
173
|
+
// No href needed for native
|
|
174
|
+
title: backTitle
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
return undefined;
|
|
178
|
+
}, [canGoBack, backTitle]);
|
|
210
179
|
const isRemovePrevented = preventedRoutes[route.key]?.preventRemove;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
180
|
+
const headerConfig = (0, _useHeaderConfigProps.useHeaderConfigProps)({
|
|
181
|
+
...options,
|
|
182
|
+
route,
|
|
183
|
+
canGoBack,
|
|
184
|
+
headerBackButtonMenuEnabled: isRemovePrevented !== undefined ? !isRemovePrevented : headerBackButtonMenuEnabled,
|
|
185
|
+
headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : undefined,
|
|
186
|
+
headerHeight,
|
|
187
|
+
headerShown: header !== undefined ? false : headerShown,
|
|
188
|
+
headerTopInsetEnabled
|
|
189
|
+
});
|
|
190
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeScreens.ScreenStackItem, {
|
|
191
|
+
activityState: isPreloaded ? 0 : 2,
|
|
215
192
|
style: _reactNative.StyleSheet.absoluteFill,
|
|
216
|
-
|
|
193
|
+
accessibilityElementsHidden: !focused,
|
|
194
|
+
importantForAccessibility: focused ? 'auto' : 'no-hide-descendants',
|
|
217
195
|
customAnimationOnSwipe: animationMatchesGesture,
|
|
218
196
|
fullScreenSwipeEnabled: fullScreenGestureEnabled,
|
|
219
|
-
|
|
197
|
+
fullScreenSwipeShadowEnabled: fullScreenGestureShadowEnabled,
|
|
198
|
+
freezeOnBlur: freezeOnBlur,
|
|
199
|
+
gestureEnabled: _reactNative.Platform.OS === 'android' ?
|
|
220
200
|
// This prop enables handling of system back gestures on Android
|
|
221
201
|
// Since we handle them in JS side, we disable this
|
|
222
202
|
false : gestureEnabled,
|
|
223
203
|
homeIndicatorHidden: autoHideHomeIndicator,
|
|
224
204
|
hideKeyboardOnSwipe: keyboardHandlingEnabled,
|
|
225
|
-
navigationBarColor: navigationBarColor
|
|
226
|
-
// @ts-expect-error prop supported from react-native-screens 3.32.0 onwards
|
|
227
|
-
,
|
|
205
|
+
navigationBarColor: navigationBarColor,
|
|
228
206
|
navigationBarTranslucent: navigationBarTranslucent,
|
|
229
207
|
navigationBarHidden: navigationBarHidden,
|
|
230
208
|
replaceAnimation: animationTypeForReplace,
|
|
@@ -232,9 +210,11 @@ const SceneView = ({
|
|
|
232
210
|
stackAnimation: animation,
|
|
233
211
|
screenOrientation: orientation,
|
|
234
212
|
sheetAllowedDetents: sheetAllowedDetents,
|
|
235
|
-
|
|
213
|
+
sheetLargestUndimmedDetentIndex: sheetLargestUndimmedDetentIndex,
|
|
236
214
|
sheetGrabberVisible: sheetGrabberVisible,
|
|
215
|
+
sheetInitialDetentIndex: sheetInitialDetentIndex,
|
|
237
216
|
sheetCornerRadius: sheetCornerRadius,
|
|
217
|
+
sheetElevation: sheetElevation,
|
|
238
218
|
sheetExpandsWhenScrolledToEdge: sheetExpandsWhenScrolledToEdge,
|
|
239
219
|
statusBarAnimation: statusBarAnimation,
|
|
240
220
|
statusBarHidden: statusBarHidden,
|
|
@@ -249,6 +229,7 @@ const SceneView = ({
|
|
|
249
229
|
onDisappear: onDisappear,
|
|
250
230
|
onDismissed: onDismissed,
|
|
251
231
|
onGestureCancel: onGestureCancel,
|
|
232
|
+
onSheetDetentChanged: onSheetDetentChanged,
|
|
252
233
|
gestureResponseDistance: gestureResponseDistance,
|
|
253
234
|
nativeBackButtonDismissalEnabled: false // on Android
|
|
254
235
|
,
|
|
@@ -268,6 +249,12 @@ const SceneView = ({
|
|
|
268
249
|
}], {
|
|
269
250
|
useNativeDriver: true,
|
|
270
251
|
listener: e => {
|
|
252
|
+
if (_reactNative.Platform.OS === 'android' && (options.headerBackground != null || options.headerTransparent)) {
|
|
253
|
+
// FIXME: On Android, we get 0 if the header is translucent
|
|
254
|
+
// So we set a default height in that case
|
|
255
|
+
setHeaderHeight(ANDROID_DEFAULT_HEADER_HEIGHT + topInset);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
271
258
|
if (e.nativeEvent && typeof e.nativeEvent === 'object' && 'headerHeight' in e.nativeEvent && typeof e.nativeEvent.headerHeight === 'number') {
|
|
272
259
|
const headerHeight = e.nativeEvent.headerHeight + headerHeightCorrectionOffset;
|
|
273
260
|
|
|
@@ -281,68 +268,67 @@ const SceneView = ({
|
|
|
281
268
|
}
|
|
282
269
|
}
|
|
283
270
|
}
|
|
284
|
-
})
|
|
285
|
-
|
|
271
|
+
}),
|
|
272
|
+
contentStyle: [presentation !== 'transparentModal' && presentation !== 'containedTransparentModal' && {
|
|
273
|
+
backgroundColor: colors.background
|
|
274
|
+
}, contentStyle],
|
|
275
|
+
headerConfig: headerConfig
|
|
276
|
+
// When ts-expect-error is added, it affects all the props below it
|
|
277
|
+
// So we keep any props that need it at the end
|
|
278
|
+
// Otherwise invalid props may not be caught by TypeScript
|
|
286
279
|
,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
}
|
|
333
|
-
route: route,
|
|
334
|
-
headerBackButtonMenuEnabled: isRemovePrevented !== undefined ? !isRemovePrevented : headerBackButtonMenuEnabled,
|
|
335
|
-
headerShown: header !== undefined ? false : headerShown,
|
|
336
|
-
headerHeight: headerHeight,
|
|
337
|
-
headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : undefined,
|
|
338
|
-
headerTopInsetEnabled: headerTopInsetEnabled,
|
|
339
|
-
canGoBack: headerBack !== undefined
|
|
340
|
-
}))))))));
|
|
280
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_native.NavigationContext.Provider, {
|
|
281
|
+
value: navigation,
|
|
282
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_native.NavigationRouteContext.Provider, {
|
|
283
|
+
value: route,
|
|
284
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_useAnimatedHeaderHeight.AnimatedHeaderHeightContext.Provider, {
|
|
285
|
+
value: animatedHeaderHeight,
|
|
286
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_elements.HeaderHeightContext.Provider, {
|
|
287
|
+
value: headerShown !== false ? headerHeight : parentHeaderHeight ?? 0,
|
|
288
|
+
children: [headerBackground != null ?
|
|
289
|
+
/*#__PURE__*/
|
|
290
|
+
/**
|
|
291
|
+
* To show a custom header background, we render it at the top of the screen below the header
|
|
292
|
+
* The header also needs to be positioned absolutely (with `translucent` style)
|
|
293
|
+
*/
|
|
294
|
+
(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
295
|
+
style: [styles.background, headerTransparent ? styles.translucent : null, {
|
|
296
|
+
height: headerHeight
|
|
297
|
+
}],
|
|
298
|
+
children: headerBackground()
|
|
299
|
+
}) : null, header !== undefined && headerShown !== false ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
300
|
+
onLayout: e => {
|
|
301
|
+
const headerHeight = e.nativeEvent.layout.height;
|
|
302
|
+
setHeaderHeight(headerHeight);
|
|
303
|
+
rawAnimatedHeaderHeight.setValue(headerHeight);
|
|
304
|
+
},
|
|
305
|
+
style: [styles.header, headerTransparent ? styles.absolute : null],
|
|
306
|
+
children: header({
|
|
307
|
+
back: headerBack,
|
|
308
|
+
options,
|
|
309
|
+
route,
|
|
310
|
+
navigation
|
|
311
|
+
})
|
|
312
|
+
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_elements.HeaderShownContext.Provider, {
|
|
313
|
+
value: isParentHeaderShown || headerShown !== false,
|
|
314
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_elements.HeaderBackContext.Provider, {
|
|
315
|
+
value: headerBack,
|
|
316
|
+
children: render()
|
|
317
|
+
})
|
|
318
|
+
}), presentation === 'formSheet' && unstable_sheetFooter && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FooterComponent.FooterComponent, {
|
|
319
|
+
children: unstable_sheetFooter()
|
|
320
|
+
})]
|
|
321
|
+
})
|
|
322
|
+
})
|
|
323
|
+
})
|
|
324
|
+
})
|
|
325
|
+
}, route.key);
|
|
341
326
|
};
|
|
342
327
|
function NativeStackView({
|
|
343
328
|
state,
|
|
344
329
|
navigation,
|
|
345
|
-
descriptors
|
|
330
|
+
descriptors,
|
|
331
|
+
describe
|
|
346
332
|
}) {
|
|
347
333
|
const {
|
|
348
334
|
setNextDismissedKey
|
|
@@ -352,102 +338,118 @@ function NativeStackView({
|
|
|
352
338
|
} = (0, _native.useTheme)();
|
|
353
339
|
(0, _useInvalidPreventRemoveError.useInvalidPreventRemoveError)(descriptors);
|
|
354
340
|
const modalRouteKeys = (0, _getModalRoutesKeys.getModalRouteKeys)(state.routes, descriptors);
|
|
355
|
-
|
|
341
|
+
const preloadedDescriptors = state.preloadedRoutes.reduce((acc, route) => {
|
|
342
|
+
acc[route.key] = acc[route.key] || describe(route, true);
|
|
343
|
+
return acc;
|
|
344
|
+
}, {});
|
|
345
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_elements.SafeAreaProviderCompat, {
|
|
356
346
|
style: {
|
|
357
347
|
backgroundColor: colors.background
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
348
|
+
},
|
|
349
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeScreens.ScreenStack, {
|
|
350
|
+
style: styles.container,
|
|
351
|
+
children: state.routes.concat(state.preloadedRoutes).map((route, index) => {
|
|
352
|
+
const descriptor = descriptors[route.key] ?? preloadedDescriptors[route.key];
|
|
353
|
+
const isFocused = state.index === index;
|
|
354
|
+
const previousKey = state.routes[index - 1]?.key;
|
|
355
|
+
const nextKey = state.routes[index + 1]?.key;
|
|
356
|
+
const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;
|
|
357
|
+
const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
|
|
358
|
+
const isModal = modalRouteKeys.includes(route.key);
|
|
359
|
+
const isPreloaded = preloadedDescriptors[route.key] !== undefined && descriptors[route.key] === undefined;
|
|
360
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(SceneView, {
|
|
361
|
+
index: index,
|
|
362
|
+
focused: isFocused,
|
|
363
|
+
descriptor: descriptor,
|
|
364
|
+
previousDescriptor: previousDescriptor,
|
|
365
|
+
nextDescriptor: nextDescriptor,
|
|
366
|
+
isPresentationModal: isModal,
|
|
367
|
+
isPreloaded: isPreloaded,
|
|
368
|
+
onWillDisappear: () => {
|
|
369
|
+
navigation.emit({
|
|
370
|
+
type: 'transitionStart',
|
|
371
|
+
data: {
|
|
372
|
+
closing: true
|
|
373
|
+
},
|
|
374
|
+
target: route.key
|
|
375
|
+
});
|
|
382
376
|
},
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
377
|
+
onWillAppear: () => {
|
|
378
|
+
navigation.emit({
|
|
379
|
+
type: 'transitionStart',
|
|
380
|
+
data: {
|
|
381
|
+
closing: false
|
|
382
|
+
},
|
|
383
|
+
target: route.key
|
|
384
|
+
});
|
|
391
385
|
},
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
386
|
+
onAppear: () => {
|
|
387
|
+
navigation.emit({
|
|
388
|
+
type: 'transitionEnd',
|
|
389
|
+
data: {
|
|
390
|
+
closing: false
|
|
391
|
+
},
|
|
392
|
+
target: route.key
|
|
393
|
+
});
|
|
400
394
|
},
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
395
|
+
onDisappear: () => {
|
|
396
|
+
navigation.emit({
|
|
397
|
+
type: 'transitionEnd',
|
|
398
|
+
data: {
|
|
399
|
+
closing: true
|
|
400
|
+
},
|
|
401
|
+
target: route.key
|
|
402
|
+
});
|
|
409
403
|
},
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
404
|
+
onDismissed: event => {
|
|
405
|
+
navigation.dispatch({
|
|
406
|
+
..._native.StackActions.pop(event.nativeEvent.dismissCount),
|
|
407
|
+
source: route.key,
|
|
408
|
+
target: state.key
|
|
409
|
+
});
|
|
410
|
+
setNextDismissedKey(route.key);
|
|
411
|
+
},
|
|
412
|
+
onHeaderBackButtonClicked: () => {
|
|
413
|
+
navigation.dispatch({
|
|
414
|
+
..._native.StackActions.pop(),
|
|
415
|
+
source: route.key,
|
|
416
|
+
target: state.key
|
|
417
|
+
});
|
|
418
|
+
},
|
|
419
|
+
onNativeDismissCancelled: event => {
|
|
420
|
+
navigation.dispatch({
|
|
421
|
+
..._native.StackActions.pop(event.nativeEvent.dismissCount),
|
|
422
|
+
source: route.key,
|
|
423
|
+
target: state.key
|
|
424
|
+
});
|
|
425
|
+
},
|
|
426
|
+
onGestureCancel: () => {
|
|
427
|
+
navigation.emit({
|
|
428
|
+
type: 'gestureCancel',
|
|
429
|
+
target: route.key
|
|
430
|
+
});
|
|
431
|
+
},
|
|
432
|
+
onSheetDetentChanged: event => {
|
|
433
|
+
navigation.emit({
|
|
434
|
+
type: 'sheetDetentChange',
|
|
435
|
+
target: route.key,
|
|
436
|
+
data: {
|
|
437
|
+
index: event.nativeEvent.index,
|
|
438
|
+
stable: event.nativeEvent.isStable
|
|
439
|
+
}
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}, route.key);
|
|
443
|
+
})
|
|
444
|
+
})
|
|
445
|
+
});
|
|
443
446
|
}
|
|
444
447
|
const styles = _reactNative.StyleSheet.create({
|
|
445
448
|
container: {
|
|
446
449
|
flex: 1
|
|
447
450
|
},
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
flexDirection: 'column-reverse'
|
|
451
|
+
header: {
|
|
452
|
+
zIndex: 1
|
|
451
453
|
},
|
|
452
454
|
absolute: {
|
|
453
455
|
position: 'absolute',
|