@react-navigation/stack 7.0.0-alpha.0 → 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 (207) hide show
  1. package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js +4 -5
  2. package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  3. package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js +19 -12
  4. package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
  5. package/lib/commonjs/TransitionConfigs/TransitionPresets.js +11 -21
  6. package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -1
  7. package/lib/commonjs/TransitionConfigs/TransitionSpecs.js +7 -14
  8. package/lib/commonjs/TransitionConfigs/TransitionSpecs.js.map +1 -1
  9. package/lib/commonjs/index.js +16 -17
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/navigators/createStackNavigator.js +35 -28
  12. package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
  13. package/lib/commonjs/types.js.map +1 -1
  14. package/lib/commonjs/utils/CardAnimationContext.js +4 -5
  15. package/lib/commonjs/utils/CardAnimationContext.js.map +1 -1
  16. package/lib/commonjs/utils/GestureHandlerRefContext.js +4 -5
  17. package/lib/commonjs/utils/GestureHandlerRefContext.js.map +1 -1
  18. package/lib/commonjs/utils/ModalPresentationContext.js +4 -6
  19. package/lib/commonjs/utils/ModalPresentationContext.js.map +1 -1
  20. package/lib/commonjs/utils/conditional.js +1 -1
  21. package/lib/commonjs/utils/conditional.js.map +1 -1
  22. package/lib/commonjs/utils/debounce.js +1 -1
  23. package/lib/commonjs/utils/debounce.js.map +1 -1
  24. package/lib/commonjs/utils/findLastIndex.js +2 -2
  25. package/lib/commonjs/utils/findLastIndex.js.map +1 -1
  26. package/lib/commonjs/utils/getDistanceForDirection.js +4 -5
  27. package/lib/commonjs/utils/getDistanceForDirection.js.map +1 -1
  28. package/lib/commonjs/utils/getInvertedMultiplier.js +4 -5
  29. package/lib/commonjs/utils/getInvertedMultiplier.js.map +1 -1
  30. package/lib/commonjs/utils/memoize.js +1 -1
  31. package/lib/commonjs/utils/memoize.js.map +1 -1
  32. package/lib/commonjs/utils/useCardAnimation.js +5 -6
  33. package/lib/commonjs/utils/useCardAnimation.js.map +1 -1
  34. package/lib/commonjs/utils/useGestureHandlerRef.js +5 -6
  35. package/lib/commonjs/utils/useGestureHandlerRef.js.map +1 -1
  36. package/lib/commonjs/utils/useKeyboardManager.js +7 -7
  37. package/lib/commonjs/utils/useKeyboardManager.js.map +1 -1
  38. package/lib/commonjs/views/GestureHandler.android.js.map +1 -1
  39. package/lib/commonjs/views/GestureHandler.ios.js.map +1 -1
  40. package/lib/commonjs/views/GestureHandler.js +5 -8
  41. package/lib/commonjs/views/GestureHandler.js.map +1 -1
  42. package/lib/commonjs/views/GestureHandlerNative.js +4 -5
  43. package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
  44. package/lib/commonjs/views/Header/Header.js +11 -12
  45. package/lib/commonjs/views/Header/Header.js.map +1 -1
  46. package/lib/commonjs/views/Header/HeaderContainer.js +15 -13
  47. package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
  48. package/lib/commonjs/views/Header/HeaderSegment.js +14 -7
  49. package/lib/commonjs/views/Header/HeaderSegment.js.map +1 -1
  50. package/lib/commonjs/views/Screens.js +2 -2
  51. package/lib/commonjs/views/Screens.js.map +1 -1
  52. package/lib/commonjs/views/Stack/Card.js +236 -234
  53. package/lib/commonjs/views/Stack/Card.js.map +1 -1
  54. package/lib/commonjs/views/Stack/CardContainer.js +33 -30
  55. package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
  56. package/lib/commonjs/views/Stack/CardSheet.js +25 -5
  57. package/lib/commonjs/views/Stack/CardSheet.js.map +1 -1
  58. package/lib/commonjs/views/Stack/CardStack.js +131 -136
  59. package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
  60. package/lib/commonjs/views/Stack/StackView.js +153 -164
  61. package/lib/commonjs/views/Stack/StackView.js.map +1 -1
  62. package/lib/module/TransitionConfigs/CardStyleInterpolators.js +1 -1
  63. package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
  64. package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js +20 -13
  65. package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
  66. package/lib/module/TransitionConfigs/TransitionPresets.js +1 -1
  67. package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
  68. package/lib/module/TransitionConfigs/TransitionSpecs.js.map +1 -1
  69. package/lib/module/index.js +7 -7
  70. package/lib/module/index.js.map +1 -1
  71. package/lib/module/navigators/createStackNavigator.js +32 -23
  72. package/lib/module/navigators/createStackNavigator.js.map +1 -1
  73. package/lib/module/types.js.map +1 -1
  74. package/lib/module/utils/CardAnimationContext.js +1 -1
  75. package/lib/module/utils/CardAnimationContext.js.map +1 -1
  76. package/lib/module/utils/GestureHandlerRefContext.js +1 -1
  77. package/lib/module/utils/GestureHandlerRefContext.js.map +1 -1
  78. package/lib/module/utils/ModalPresentationContext.js +1 -2
  79. package/lib/module/utils/ModalPresentationContext.js.map +1 -1
  80. package/lib/module/utils/conditional.js +1 -1
  81. package/lib/module/utils/conditional.js.map +1 -1
  82. package/lib/module/utils/debounce.js +1 -1
  83. package/lib/module/utils/debounce.js.map +1 -1
  84. package/lib/module/utils/findLastIndex.js +2 -2
  85. package/lib/module/utils/findLastIndex.js.map +1 -1
  86. package/lib/module/utils/getDistanceForDirection.js +3 -3
  87. package/lib/module/utils/getDistanceForDirection.js.map +1 -1
  88. package/lib/module/utils/getInvertedMultiplier.js +3 -4
  89. package/lib/module/utils/getInvertedMultiplier.js.map +1 -1
  90. package/lib/module/utils/memoize.js +1 -1
  91. package/lib/module/utils/memoize.js.map +1 -1
  92. package/lib/module/utils/useCardAnimation.js +2 -2
  93. package/lib/module/utils/useCardAnimation.js.map +1 -1
  94. package/lib/module/utils/useGestureHandlerRef.js +3 -3
  95. package/lib/module/utils/useGestureHandlerRef.js.map +1 -1
  96. package/lib/module/utils/useKeyboardManager.js +5 -5
  97. package/lib/module/utils/useKeyboardManager.js.map +1 -1
  98. package/lib/module/views/GestureHandler.android.js.map +1 -1
  99. package/lib/module/views/GestureHandler.ios.js.map +1 -1
  100. package/lib/module/views/GestureHandler.js.map +1 -1
  101. package/lib/module/views/GestureHandlerNative.js +1 -1
  102. package/lib/module/views/GestureHandlerNative.js.map +1 -1
  103. package/lib/module/views/Header/Header.js +5 -4
  104. package/lib/module/views/Header/Header.js.map +1 -1
  105. package/lib/module/views/Header/HeaderContainer.js +13 -10
  106. package/lib/module/views/Header/HeaderContainer.js.map +1 -1
  107. package/lib/module/views/Header/HeaderSegment.js +11 -3
  108. package/lib/module/views/Header/HeaderSegment.js.map +1 -1
  109. package/lib/module/views/Screens.js.map +1 -1
  110. package/lib/module/views/Stack/Card.js +231 -228
  111. package/lib/module/views/Stack/Card.js.map +1 -1
  112. package/lib/module/views/Stack/CardContainer.js +28 -23
  113. package/lib/module/views/Stack/CardContainer.js.map +1 -1
  114. package/lib/module/views/Stack/CardSheet.js +22 -1
  115. package/lib/module/views/Stack/CardSheet.js.map +1 -1
  116. package/lib/module/views/Stack/CardStack.js +124 -128
  117. package/lib/module/views/Stack/CardStack.js.map +1 -1
  118. package/lib/module/views/Stack/StackView.js +149 -159
  119. package/lib/module/views/Stack/StackView.js.map +1 -1
  120. package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts +3 -3
  121. package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts.map +1 -1
  122. package/lib/typescript/src/index.d.ts +7 -7
  123. package/lib/typescript/src/index.d.ts.map +1 -1
  124. package/lib/typescript/src/navigators/createStackNavigator.d.ts +6 -6
  125. package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -1
  126. package/lib/typescript/src/types.d.ts +47 -9
  127. package/lib/typescript/src/types.d.ts.map +1 -1
  128. package/lib/typescript/src/utils/CardAnimationContext.d.ts +1 -2
  129. package/lib/typescript/src/utils/CardAnimationContext.d.ts.map +1 -1
  130. package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts +1 -2
  131. package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts.map +1 -1
  132. package/lib/typescript/src/utils/ModalPresentationContext.d.ts +1 -2
  133. package/lib/typescript/src/utils/ModalPresentationContext.d.ts.map +1 -1
  134. package/lib/typescript/src/utils/conditional.d.ts +1 -1
  135. package/lib/typescript/src/utils/conditional.d.ts.map +1 -1
  136. package/lib/typescript/src/utils/debounce.d.ts +1 -1
  137. package/lib/typescript/src/utils/debounce.d.ts.map +1 -1
  138. package/lib/typescript/src/utils/findLastIndex.d.ts +1 -1
  139. package/lib/typescript/src/utils/findLastIndex.d.ts.map +1 -1
  140. package/lib/typescript/src/utils/getDistanceForDirection.d.ts +1 -1
  141. package/lib/typescript/src/utils/getDistanceForDirection.d.ts.map +1 -1
  142. package/lib/typescript/src/utils/getInvertedMultiplier.d.ts +1 -1
  143. package/lib/typescript/src/utils/getInvertedMultiplier.d.ts.map +1 -1
  144. package/lib/typescript/src/utils/memoize.d.ts +1 -1
  145. package/lib/typescript/src/utils/memoize.d.ts.map +1 -1
  146. package/lib/typescript/src/utils/useCardAnimation.d.ts +1 -1
  147. package/lib/typescript/src/utils/useCardAnimation.d.ts.map +1 -1
  148. package/lib/typescript/src/utils/useGestureHandlerRef.d.ts +1 -1
  149. package/lib/typescript/src/utils/useGestureHandlerRef.d.ts.map +1 -1
  150. package/lib/typescript/src/utils/useKeyboardManager.d.ts +1 -1
  151. package/lib/typescript/src/utils/useKeyboardManager.d.ts.map +1 -1
  152. package/lib/typescript/src/views/GestureHandlerNative.d.ts +3 -3
  153. package/lib/typescript/src/views/GestureHandlerNative.d.ts.map +1 -1
  154. package/lib/typescript/src/views/Header/Header.d.ts +1 -2
  155. package/lib/typescript/src/views/Header/Header.d.ts.map +1 -1
  156. package/lib/typescript/src/views/Header/HeaderContainer.d.ts +4 -4
  157. package/lib/typescript/src/views/Header/HeaderContainer.d.ts.map +1 -1
  158. package/lib/typescript/src/views/Header/HeaderSegment.d.ts +3 -2
  159. package/lib/typescript/src/views/Header/HeaderSegment.d.ts.map +1 -1
  160. package/lib/typescript/src/views/Screens.d.ts +4 -3
  161. package/lib/typescript/src/views/Screens.d.ts.map +1 -1
  162. package/lib/typescript/src/views/Stack/Card.d.ts +7 -6
  163. package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -1
  164. package/lib/typescript/src/views/Stack/CardContainer.d.ts +5 -8
  165. package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -1
  166. package/lib/typescript/src/views/Stack/CardSheet.d.ts +2 -3
  167. package/lib/typescript/src/views/Stack/CardSheet.d.ts.map +1 -1
  168. package/lib/typescript/src/views/Stack/CardStack.d.ts +5 -6
  169. package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -1
  170. package/lib/typescript/src/views/Stack/StackView.d.ts +10 -81
  171. package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -1
  172. package/package.json +20 -21
  173. package/src/TransitionConfigs/CardStyleInterpolators.tsx +6 -6
  174. package/src/TransitionConfigs/HeaderStyleInterpolators.tsx +32 -22
  175. package/src/TransitionConfigs/TransitionPresets.tsx +4 -4
  176. package/src/index.tsx +7 -7
  177. package/src/navigators/createStackNavigator.tsx +20 -9
  178. package/src/types.tsx +50 -10
  179. package/src/utils/CardAnimationContext.tsx +3 -3
  180. package/src/utils/GestureHandlerRefContext.tsx +1 -1
  181. package/src/utils/ModalPresentationContext.tsx +1 -3
  182. package/src/utils/conditional.tsx +1 -1
  183. package/src/utils/debounce.tsx +1 -1
  184. package/src/utils/findLastIndex.tsx +2 -5
  185. package/src/utils/getDistanceForDirection.tsx +5 -4
  186. package/src/utils/getInvertedMultiplier.tsx +5 -6
  187. package/src/utils/memoize.tsx +1 -1
  188. package/src/utils/useCardAnimation.tsx +2 -2
  189. package/src/utils/useGestureHandlerRef.tsx +3 -3
  190. package/src/utils/useKeyboardManager.tsx +2 -2
  191. package/src/views/GestureHandlerNative.tsx +2 -2
  192. package/src/views/Header/Header.tsx +7 -6
  193. package/src/views/Header/HeaderContainer.tsx +19 -8
  194. package/src/views/Header/HeaderSegment.tsx +14 -6
  195. package/src/views/Screens.tsx +2 -1
  196. package/src/views/Stack/Card.tsx +80 -61
  197. package/src/views/Stack/CardContainer.tsx +23 -14
  198. package/src/views/Stack/CardSheet.tsx +58 -35
  199. package/src/views/Stack/CardStack.tsx +220 -190
  200. package/src/views/Stack/StackView.tsx +29 -31
  201. package/lib/commonjs/views/ModalStatusBarManager.js +0 -44
  202. package/lib/commonjs/views/ModalStatusBarManager.js.map +0 -1
  203. package/lib/module/views/ModalStatusBarManager.js +0 -36
  204. package/lib/module/views/ModalStatusBarManager.js.map +0 -1
  205. package/lib/typescript/src/views/ModalStatusBarManager.d.ts +0 -12
  206. package/lib/typescript/src/views/ModalStatusBarManager.d.ts.map +0 -1
  207. package/src/views/ModalStatusBarManager.tsx +0 -50
@@ -4,15 +4,20 @@ 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
 
11
16
  import type { Layout, Scene } from '../../types';
12
- import ModalPresentationContext from '../../utils/ModalPresentationContext';
13
- import useKeyboardManager from '../../utils/useKeyboardManager';
17
+ import { ModalPresentationContext } from '../../utils/ModalPresentationContext';
18
+ import { useKeyboardManager } from '../../utils/useKeyboardManager';
14
19
  import type { Props as HeaderContainerProps } from '../Header/HeaderContainer';
15
- import Card from './Card';
20
+ import { Card } from './Card';
16
21
 
17
22
  type Props = {
18
23
  interpolationIndex: number;
@@ -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: (
@@ -56,7 +60,7 @@ type Props = {
56
60
 
57
61
  const EPSILON = 0.1;
58
62
 
59
- function CardContainer({
63
+ function CardContainerInner({
60
64
  interpolationIndex,
61
65
  index,
62
66
  active,
@@ -66,7 +70,6 @@ function CardContainer({
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 CardContainer({
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 CardContainer({
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 CardContainer({
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 CardContainer({
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 CardContainer({
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>
@@ -307,7 +316,7 @@ function CardContainer({
307
316
  );
308
317
  }
309
318
 
310
- export default React.memo(CardContainer);
319
+ export const CardContainer = React.memo(CardContainerInner);
311
320
 
312
321
  const styles = StyleSheet.create({
313
322
  container: {
@@ -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;
@@ -15,40 +15,63 @@ export type CardSheetRef = {
15
15
  // if the container fills the body by comparing the size
16
16
  // This lets the document.body handle scrolling of the content
17
17
  // It's necessary for mobile browsers to be able to hide address bar on scroll
18
- export default React.forwardRef<CardSheetRef, Props>(function CardSheet(
19
- { enabled, layout, style, ...rest },
20
- ref
21
- ) {
22
- const [fill, setFill] = React.useState(false);
23
- // To avoid triggering a rerender in Card during animation we had to move
24
- // the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.
25
- const [pointerEvents, setPointerEvents] =
26
- React.useState<ViewProps['pointerEvents']>('auto');
27
-
28
- React.useImperativeHandle(ref, () => {
29
- return { setPointerEvents };
30
- });
31
-
32
- React.useEffect(() => {
33
- if (typeof document === 'undefined' || !document.body) {
34
- // Only run when DOM is available
35
- return;
36
- }
37
-
38
- const width = document.body.clientWidth;
39
- const height = document.body.clientHeight;
40
-
41
- setFill(width === layout.width && height === layout.height);
42
- }, [layout.height, layout.width]);
43
-
44
- return (
45
- <View
46
- {...rest}
47
- pointerEvents={pointerEvents}
48
- style={[enabled && fill ? styles.page : styles.card, style]}
49
- />
50
- );
51
- });
18
+ export const CardSheet = React.forwardRef<CardSheetRef, Props>(
19
+ function CardSheet({ enabled, layout, style, ...rest }, ref) {
20
+ const [fill, setFill] = React.useState(false);
21
+ // To avoid triggering a rerender in Card during animation we had to move
22
+ // the state to CardSheet. The `setPointerEvents` is then hoisted back to the Card.
23
+ const [pointerEvents, setPointerEvents] =
24
+ React.useState<ViewProps['pointerEvents']>('auto');
25
+
26
+ React.useImperativeHandle(ref, () => {
27
+ return { setPointerEvents };
28
+ });
29
+
30
+ const workaroundApplied = React.useRef(false);
31
+ React.useEffect(() => {
32
+ if (typeof document === 'undefined' || !document.body) {
33
+ // Only run when DOM is available
34
+ return;
35
+ }
36
+
37
+ const width = document.body.clientWidth;
38
+ const height = document.body.clientHeight;
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
+
63
+ setFill(width === layout.width && height === layout.height);
64
+ }, [layout.height, layout.width]);
65
+
66
+ return (
67
+ <View
68
+ {...rest}
69
+ pointerEvents={pointerEvents}
70
+ style={[enabled && fill ? styles.page : styles.card, style]}
71
+ />
72
+ );
73
+ }
74
+ );
52
75
 
53
76
  const styles = StyleSheet.create({
54
77
  page: {