@react-navigation/stack 7.0.0-alpha.1 → 7.0.0-alpha.10

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 (160) hide show
  1. package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  2. package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js +19 -12
  3. package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
  4. package/lib/commonjs/TransitionConfigs/TransitionPresets.js +11 -21
  5. package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -1
  6. package/lib/commonjs/TransitionConfigs/TransitionSpecs.js +7 -14
  7. package/lib/commonjs/TransitionConfigs/TransitionSpecs.js.map +1 -1
  8. package/lib/commonjs/index.js +2 -2
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/navigators/createStackNavigator.js +32 -24
  11. package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
  12. package/lib/commonjs/types.js.map +1 -1
  13. package/lib/commonjs/utils/CardAnimationContext.js +3 -4
  14. package/lib/commonjs/utils/CardAnimationContext.js.map +1 -1
  15. package/lib/commonjs/utils/GestureHandlerRefContext.js +3 -4
  16. package/lib/commonjs/utils/GestureHandlerRefContext.js.map +1 -1
  17. package/lib/commonjs/utils/ModalPresentationContext.js +3 -4
  18. package/lib/commonjs/utils/ModalPresentationContext.js.map +1 -1
  19. package/lib/commonjs/utils/conditional.js.map +1 -1
  20. package/lib/commonjs/utils/debounce.js.map +1 -1
  21. package/lib/commonjs/utils/findLastIndex.js +1 -1
  22. package/lib/commonjs/utils/findLastIndex.js.map +1 -1
  23. package/lib/commonjs/utils/getDistanceForDirection.js +2 -2
  24. package/lib/commonjs/utils/getDistanceForDirection.js.map +1 -1
  25. package/lib/commonjs/utils/getInvertedMultiplier.js +3 -4
  26. package/lib/commonjs/utils/getInvertedMultiplier.js.map +1 -1
  27. package/lib/commonjs/utils/memoize.js.map +1 -1
  28. package/lib/commonjs/utils/useCardAnimation.js +2 -2
  29. package/lib/commonjs/utils/useCardAnimation.js.map +1 -1
  30. package/lib/commonjs/utils/useGestureHandlerRef.js +2 -2
  31. package/lib/commonjs/utils/useGestureHandlerRef.js.map +1 -1
  32. package/lib/commonjs/utils/useKeyboardManager.js +6 -6
  33. package/lib/commonjs/utils/useKeyboardManager.js.map +1 -1
  34. package/lib/commonjs/views/GestureHandler.android.js.map +1 -1
  35. package/lib/commonjs/views/GestureHandler.ios.js.map +1 -1
  36. package/lib/commonjs/views/GestureHandler.js +5 -8
  37. package/lib/commonjs/views/GestureHandler.js.map +1 -1
  38. package/lib/commonjs/views/GestureHandlerNative.js +2 -2
  39. package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
  40. package/lib/commonjs/views/Header/Header.js +4 -4
  41. package/lib/commonjs/views/Header/Header.js.map +1 -1
  42. package/lib/commonjs/views/Header/HeaderContainer.js +12 -9
  43. package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
  44. package/lib/commonjs/views/Header/HeaderSegment.js +11 -3
  45. package/lib/commonjs/views/Header/HeaderSegment.js.map +1 -1
  46. package/lib/commonjs/views/Screens.js +2 -2
  47. package/lib/commonjs/views/Screens.js.map +1 -1
  48. package/lib/commonjs/views/Stack/Card.js +48 -41
  49. package/lib/commonjs/views/Stack/Card.js.map +1 -1
  50. package/lib/commonjs/views/Stack/CardContainer.js +25 -21
  51. package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
  52. package/lib/commonjs/views/Stack/CardSheet.js +24 -4
  53. package/lib/commonjs/views/Stack/CardSheet.js.map +1 -1
  54. package/lib/commonjs/views/Stack/CardStack.js +58 -60
  55. package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
  56. package/lib/commonjs/views/Stack/StackView.js +26 -30
  57. package/lib/commonjs/views/Stack/StackView.js.map +1 -1
  58. package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  59. package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js +20 -13
  60. package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
  61. package/lib/module/TransitionConfigs/TransitionPresets.js +1 -1
  62. package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
  63. package/lib/module/TransitionConfigs/TransitionSpecs.js.map +1 -1
  64. package/lib/module/index.js.map +1 -1
  65. package/lib/module/navigators/createStackNavigator.js +30 -21
  66. package/lib/module/navigators/createStackNavigator.js.map +1 -1
  67. package/lib/module/types.js.map +1 -1
  68. package/lib/module/utils/CardAnimationContext.js.map +1 -1
  69. package/lib/module/utils/GestureHandlerRefContext.js.map +1 -1
  70. package/lib/module/utils/ModalPresentationContext.js.map +1 -1
  71. package/lib/module/utils/conditional.js.map +1 -1
  72. package/lib/module/utils/debounce.js.map +1 -1
  73. package/lib/module/utils/findLastIndex.js +1 -1
  74. package/lib/module/utils/findLastIndex.js.map +1 -1
  75. package/lib/module/utils/getDistanceForDirection.js +2 -2
  76. package/lib/module/utils/getDistanceForDirection.js.map +1 -1
  77. package/lib/module/utils/getInvertedMultiplier.js +3 -4
  78. package/lib/module/utils/getInvertedMultiplier.js.map +1 -1
  79. package/lib/module/utils/memoize.js.map +1 -1
  80. package/lib/module/utils/useCardAnimation.js.map +1 -1
  81. package/lib/module/utils/useGestureHandlerRef.js.map +1 -1
  82. package/lib/module/utils/useKeyboardManager.js +4 -4
  83. package/lib/module/utils/useKeyboardManager.js.map +1 -1
  84. package/lib/module/views/GestureHandler.android.js.map +1 -1
  85. package/lib/module/views/GestureHandler.ios.js.map +1 -1
  86. package/lib/module/views/GestureHandler.js.map +1 -1
  87. package/lib/module/views/GestureHandlerNative.js.map +1 -1
  88. package/lib/module/views/Header/Header.js +1 -0
  89. package/lib/module/views/Header/Header.js.map +1 -1
  90. package/lib/module/views/Header/HeaderContainer.js +11 -8
  91. package/lib/module/views/Header/HeaderContainer.js.map +1 -1
  92. package/lib/module/views/Header/HeaderSegment.js +9 -1
  93. package/lib/module/views/Header/HeaderSegment.js.map +1 -1
  94. package/lib/module/views/Screens.js.map +1 -1
  95. package/lib/module/views/Stack/Card.js +45 -37
  96. package/lib/module/views/Stack/Card.js.map +1 -1
  97. package/lib/module/views/Stack/CardContainer.js +23 -18
  98. package/lib/module/views/Stack/CardContainer.js.map +1 -1
  99. package/lib/module/views/Stack/CardSheet.js +21 -0
  100. package/lib/module/views/Stack/CardSheet.js.map +1 -1
  101. package/lib/module/views/Stack/CardStack.js +53 -54
  102. package/lib/module/views/Stack/CardStack.js.map +1 -1
  103. package/lib/module/views/Stack/StackView.js +24 -28
  104. package/lib/module/views/Stack/StackView.js.map +1 -1
  105. package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts +3 -3
  106. package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts.map +1 -1
  107. package/lib/typescript/src/navigators/createStackNavigator.d.ts +4 -4
  108. package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -1
  109. package/lib/typescript/src/types.d.ts +47 -9
  110. package/lib/typescript/src/types.d.ts.map +1 -1
  111. package/lib/typescript/src/utils/getDistanceForDirection.d.ts +1 -1
  112. package/lib/typescript/src/utils/getDistanceForDirection.d.ts.map +1 -1
  113. package/lib/typescript/src/utils/getInvertedMultiplier.d.ts +1 -1
  114. package/lib/typescript/src/utils/getInvertedMultiplier.d.ts.map +1 -1
  115. package/lib/typescript/src/views/GestureHandlerNative.d.ts +3 -3
  116. package/lib/typescript/src/views/GestureHandlerNative.d.ts.map +1 -1
  117. package/lib/typescript/src/views/Header/Header.d.ts.map +1 -1
  118. package/lib/typescript/src/views/Header/HeaderContainer.d.ts +4 -4
  119. package/lib/typescript/src/views/Header/HeaderContainer.d.ts.map +1 -1
  120. package/lib/typescript/src/views/Header/HeaderSegment.d.ts +3 -2
  121. package/lib/typescript/src/views/Header/HeaderSegment.d.ts.map +1 -1
  122. package/lib/typescript/src/views/Screens.d.ts +4 -3
  123. package/lib/typescript/src/views/Screens.d.ts.map +1 -1
  124. package/lib/typescript/src/views/Stack/Card.d.ts +6 -5
  125. package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -1
  126. package/lib/typescript/src/views/Stack/CardContainer.d.ts +3 -6
  127. package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -1
  128. package/lib/typescript/src/views/Stack/CardSheet.d.ts +1 -1
  129. package/lib/typescript/src/views/Stack/CardSheet.d.ts.map +1 -1
  130. package/lib/typescript/src/views/Stack/CardStack.d.ts +4 -5
  131. package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -1
  132. package/lib/typescript/src/views/Stack/StackView.d.ts +9 -80
  133. package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -1
  134. package/package.json +20 -21
  135. package/src/TransitionConfigs/CardStyleInterpolators.tsx +5 -5
  136. package/src/TransitionConfigs/HeaderStyleInterpolators.tsx +32 -22
  137. package/src/TransitionConfigs/TransitionPresets.tsx +4 -4
  138. package/src/navigators/createStackNavigator.tsx +18 -7
  139. package/src/types.tsx +50 -10
  140. package/src/utils/findLastIndex.tsx +1 -1
  141. package/src/utils/getDistanceForDirection.tsx +3 -2
  142. package/src/utils/getInvertedMultiplier.tsx +4 -5
  143. package/src/utils/useKeyboardManager.tsx +1 -1
  144. package/src/views/GestureHandlerNative.tsx +1 -1
  145. package/src/views/Header/Header.tsx +3 -2
  146. package/src/views/Header/HeaderContainer.tsx +17 -6
  147. package/src/views/Header/HeaderSegment.tsx +12 -4
  148. package/src/views/Screens.tsx +2 -1
  149. package/src/views/Stack/Card.tsx +75 -56
  150. package/src/views/Stack/CardContainer.tsx +18 -9
  151. package/src/views/Stack/CardSheet.tsx +25 -1
  152. package/src/views/Stack/CardStack.tsx +216 -186
  153. package/src/views/Stack/StackView.tsx +24 -27
  154. package/lib/commonjs/views/ModalStatusBarManager.js +0 -44
  155. package/lib/commonjs/views/ModalStatusBarManager.js.map +0 -1
  156. package/lib/module/views/ModalStatusBarManager.js +0 -36
  157. package/lib/module/views/ModalStatusBarManager.js.map +0 -1
  158. package/lib/typescript/src/views/ModalStatusBarManager.d.ts +0 -12
  159. package/lib/typescript/src/views/ModalStatusBarManager.d.ts.map +0 -1
  160. package/src/views/ModalStatusBarManager.tsx +0 -45
@@ -4,7 +4,12 @@ import {
4
4
  HeaderHeightContext,
5
5
  HeaderShownContext,
6
6
  } from '@react-navigation/elements';
7
- import { Route, useTheme } from '@react-navigation/native';
7
+ import {
8
+ type Route,
9
+ useLinkBuilder,
10
+ useLocale,
11
+ useTheme,
12
+ } from '@react-navigation/native';
8
13
  import * as React from 'react';
9
14
  import { Animated, StyleSheet, View } from 'react-native';
10
15
 
@@ -23,8 +28,8 @@ type Props = {
23
28
  modal: boolean;
24
29
  layout: Layout;
25
30
  gesture: Animated.Value;
31
+ preloaded: boolean;
26
32
  scene: Scene;
27
- headerDarkContent: boolean | undefined;
28
33
  safeAreaInsetTop: number;
29
34
  safeAreaInsetRight: number;
30
35
  safeAreaInsetBottom: number;
@@ -32,7 +37,6 @@ type Props = {
32
37
  getPreviousScene: (props: { route: Route<string> }) => Scene | undefined;
33
38
  getFocusedRoute: () => Route<string>;
34
39
  renderHeader: (props: HeaderContainerProps) => React.ReactNode;
35
- renderScene: (props: { route: Route<string> }) => React.ReactNode;
36
40
  onOpenRoute: (props: { route: Route<string> }) => void;
37
41
  onCloseRoute: (props: { route: Route<string> }) => void;
38
42
  onTransitionStart: (
@@ -66,7 +70,6 @@ function CardContainerInner({
66
70
  modal,
67
71
  getPreviousScene,
68
72
  getFocusedRoute,
69
- headerDarkContent,
70
73
  hasAbsoluteFloatHeader,
71
74
  headerHeight,
72
75
  onHeaderHeightChange,
@@ -81,14 +84,16 @@ function CardContainerInner({
81
84
  onGestureStart,
82
85
  onTransitionEnd,
83
86
  onTransitionStart,
87
+ preloaded,
84
88
  renderHeader,
85
- renderScene,
86
89
  safeAreaInsetBottom,
87
90
  safeAreaInsetLeft,
88
91
  safeAreaInsetRight,
89
92
  safeAreaInsetTop,
90
93
  scene,
91
94
  }: Props) {
95
+ const { direction } = useLocale();
96
+
92
97
  const parentHeaderHeight = React.useContext(HeaderHeightContext);
93
98
 
94
99
  const { onPageChangeStart, onPageChangeCancel, onPageChangeConfirm } =
@@ -200,19 +205,22 @@ function CardContainerInner({
200
205
  transitionSpec,
201
206
  } = scene.descriptor.options;
202
207
 
208
+ const { buildHref } = useLinkBuilder();
203
209
  const previousScene = getPreviousScene({ route: scene.descriptor.route });
204
210
 
205
211
  let backTitle: string | undefined;
212
+ let href: string | undefined;
206
213
 
207
214
  if (previousScene) {
208
215
  const { options, route } = previousScene.descriptor;
209
216
 
210
217
  backTitle = getHeaderTitle(options, route.name);
218
+ href = buildHref(route.name, route.params);
211
219
  }
212
220
 
213
221
  const headerBack = React.useMemo(
214
- () => (backTitle !== undefined ? { title: backTitle } : undefined),
215
- [backTitle]
222
+ () => ({ title: backTitle, href }),
223
+ [backTitle, href]
216
224
  );
217
225
 
218
226
  return (
@@ -221,6 +229,7 @@ function CardContainerInner({
221
229
  gestureDirection={gestureDirection}
222
230
  layout={layout}
223
231
  insets={insets}
232
+ direction={direction}
224
233
  gesture={gesture}
225
234
  current={scene.progress.current}
226
235
  next={scene.progress.next}
@@ -243,7 +252,7 @@ function CardContainerInner({
243
252
  importantForAccessibility={focused ? 'auto' : 'no-hide-descendants'}
244
253
  pointerEvents={active ? 'box-none' : pointerEvents}
245
254
  pageOverflowEnabled={headerMode !== 'float' && presentation !== 'modal'}
246
- headerDarkContent={headerDarkContent}
255
+ preloaded={preloaded}
247
256
  containerStyle={
248
257
  hasAbsoluteFloatHeader && headerMode !== 'screen'
249
258
  ? { marginTop: headerHeight }
@@ -286,7 +295,7 @@ function CardContainerInner({
286
295
  <HeaderHeightContext.Provider
287
296
  value={headerShown ? headerHeight : parentHeaderHeight ?? 0}
288
297
  >
289
- {renderScene({ route: scene.descriptor.route })}
298
+ {scene.descriptor.render()}
290
299
  </HeaderHeightContext.Provider>
291
300
  </HeaderShownContext.Provider>
292
301
  </HeaderBackContext.Provider>
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { StyleSheet, View, ViewProps } from 'react-native';
2
+ import { StyleSheet, View, type ViewProps } from 'react-native';
3
3
 
4
4
  type Props = ViewProps & {
5
5
  enabled: boolean;
@@ -27,6 +27,7 @@ export const CardSheet = React.forwardRef<CardSheetRef, Props>(
27
27
  return { setPointerEvents };
28
28
  });
29
29
 
30
+ const workaroundApplied = React.useRef(false);
30
31
  React.useEffect(() => {
31
32
  if (typeof document === 'undefined' || !document.body) {
32
33
  // Only run when DOM is available
@@ -36,6 +37,29 @@ export const CardSheet = React.forwardRef<CardSheetRef, Props>(
36
37
  const width = document.body.clientWidth;
37
38
  const height = document.body.clientHeight;
38
39
 
40
+ // Workaround for mobile Chrome, necessary when a navigation happens
41
+ // when the address bar has already collapsed, which resulted in an
42
+ // empty space at the bottom of the page (matching the height of the
43
+ // address bar). To fix this, it's necessary to update the height of
44
+ // the DOM with the current height of the window.
45
+ // See https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
46
+ const fillHeight = height === layout.height;
47
+ if (fillHeight) {
48
+ const vh = window.innerHeight * 0.01;
49
+ document.documentElement.style.setProperty('--vh', `${vh}px`);
50
+ document.body.setAttribute(
51
+ 'style',
52
+ `height: calc(var(--vh, 1vh) * 100);`
53
+ );
54
+ workaroundApplied.current = true;
55
+ } else {
56
+ // Revert the workaround if the stack does not occupy the whole
57
+ // height of the page
58
+ if (workaroundApplied.current) {
59
+ document.documentElement.style.removeProperty('--vh');
60
+ }
61
+ }
62
+
39
63
  setFill(width === layout.width && height === layout.height);
40
64
  }, [layout.height, layout.width]);
41
65