@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.
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js +4 -5
- package/lib/commonjs/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js +19 -12
- package/lib/commonjs/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js +11 -21
- package/lib/commonjs/TransitionConfigs/TransitionPresets.js.map +1 -1
- package/lib/commonjs/TransitionConfigs/TransitionSpecs.js +7 -14
- package/lib/commonjs/TransitionConfigs/TransitionSpecs.js.map +1 -1
- package/lib/commonjs/index.js +16 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/navigators/createStackNavigator.js +35 -28
- package/lib/commonjs/navigators/createStackNavigator.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/CardAnimationContext.js +4 -5
- package/lib/commonjs/utils/CardAnimationContext.js.map +1 -1
- package/lib/commonjs/utils/GestureHandlerRefContext.js +4 -5
- package/lib/commonjs/utils/GestureHandlerRefContext.js.map +1 -1
- package/lib/commonjs/utils/ModalPresentationContext.js +4 -6
- package/lib/commonjs/utils/ModalPresentationContext.js.map +1 -1
- package/lib/commonjs/utils/conditional.js +1 -1
- package/lib/commonjs/utils/conditional.js.map +1 -1
- package/lib/commonjs/utils/debounce.js +1 -1
- package/lib/commonjs/utils/debounce.js.map +1 -1
- package/lib/commonjs/utils/findLastIndex.js +2 -2
- package/lib/commonjs/utils/findLastIndex.js.map +1 -1
- package/lib/commonjs/utils/getDistanceForDirection.js +4 -5
- package/lib/commonjs/utils/getDistanceForDirection.js.map +1 -1
- package/lib/commonjs/utils/getInvertedMultiplier.js +4 -5
- package/lib/commonjs/utils/getInvertedMultiplier.js.map +1 -1
- package/lib/commonjs/utils/memoize.js +1 -1
- package/lib/commonjs/utils/memoize.js.map +1 -1
- package/lib/commonjs/utils/useCardAnimation.js +5 -6
- package/lib/commonjs/utils/useCardAnimation.js.map +1 -1
- package/lib/commonjs/utils/useGestureHandlerRef.js +5 -6
- package/lib/commonjs/utils/useGestureHandlerRef.js.map +1 -1
- package/lib/commonjs/utils/useKeyboardManager.js +7 -7
- package/lib/commonjs/utils/useKeyboardManager.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.android.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.ios.js.map +1 -1
- package/lib/commonjs/views/GestureHandler.js +5 -8
- package/lib/commonjs/views/GestureHandler.js.map +1 -1
- package/lib/commonjs/views/GestureHandlerNative.js +4 -5
- package/lib/commonjs/views/GestureHandlerNative.js.map +1 -1
- package/lib/commonjs/views/Header/Header.js +11 -12
- package/lib/commonjs/views/Header/Header.js.map +1 -1
- package/lib/commonjs/views/Header/HeaderContainer.js +15 -13
- package/lib/commonjs/views/Header/HeaderContainer.js.map +1 -1
- package/lib/commonjs/views/Header/HeaderSegment.js +14 -7
- package/lib/commonjs/views/Header/HeaderSegment.js.map +1 -1
- package/lib/commonjs/views/Screens.js +2 -2
- package/lib/commonjs/views/Screens.js.map +1 -1
- package/lib/commonjs/views/Stack/Card.js +236 -234
- package/lib/commonjs/views/Stack/Card.js.map +1 -1
- package/lib/commonjs/views/Stack/CardContainer.js +33 -30
- package/lib/commonjs/views/Stack/CardContainer.js.map +1 -1
- package/lib/commonjs/views/Stack/CardSheet.js +25 -5
- package/lib/commonjs/views/Stack/CardSheet.js.map +1 -1
- package/lib/commonjs/views/Stack/CardStack.js +131 -136
- package/lib/commonjs/views/Stack/CardStack.js.map +1 -1
- package/lib/commonjs/views/Stack/StackView.js +153 -164
- package/lib/commonjs/views/Stack/StackView.js.map +1 -1
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js +1 -1
- package/lib/module/TransitionConfigs/CardStyleInterpolators.js.map +1 -1
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js +20 -13
- package/lib/module/TransitionConfigs/HeaderStyleInterpolators.js.map +1 -1
- package/lib/module/TransitionConfigs/TransitionPresets.js +1 -1
- package/lib/module/TransitionConfigs/TransitionPresets.js.map +1 -1
- package/lib/module/TransitionConfigs/TransitionSpecs.js.map +1 -1
- package/lib/module/index.js +7 -7
- package/lib/module/index.js.map +1 -1
- package/lib/module/navigators/createStackNavigator.js +32 -23
- package/lib/module/navigators/createStackNavigator.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/CardAnimationContext.js +1 -1
- package/lib/module/utils/CardAnimationContext.js.map +1 -1
- package/lib/module/utils/GestureHandlerRefContext.js +1 -1
- package/lib/module/utils/GestureHandlerRefContext.js.map +1 -1
- package/lib/module/utils/ModalPresentationContext.js +1 -2
- package/lib/module/utils/ModalPresentationContext.js.map +1 -1
- package/lib/module/utils/conditional.js +1 -1
- package/lib/module/utils/conditional.js.map +1 -1
- package/lib/module/utils/debounce.js +1 -1
- package/lib/module/utils/debounce.js.map +1 -1
- package/lib/module/utils/findLastIndex.js +2 -2
- package/lib/module/utils/findLastIndex.js.map +1 -1
- package/lib/module/utils/getDistanceForDirection.js +3 -3
- package/lib/module/utils/getDistanceForDirection.js.map +1 -1
- package/lib/module/utils/getInvertedMultiplier.js +3 -4
- package/lib/module/utils/getInvertedMultiplier.js.map +1 -1
- package/lib/module/utils/memoize.js +1 -1
- package/lib/module/utils/memoize.js.map +1 -1
- package/lib/module/utils/useCardAnimation.js +2 -2
- package/lib/module/utils/useCardAnimation.js.map +1 -1
- package/lib/module/utils/useGestureHandlerRef.js +3 -3
- package/lib/module/utils/useGestureHandlerRef.js.map +1 -1
- package/lib/module/utils/useKeyboardManager.js +5 -5
- package/lib/module/utils/useKeyboardManager.js.map +1 -1
- package/lib/module/views/GestureHandler.android.js.map +1 -1
- package/lib/module/views/GestureHandler.ios.js.map +1 -1
- package/lib/module/views/GestureHandler.js.map +1 -1
- package/lib/module/views/GestureHandlerNative.js +1 -1
- package/lib/module/views/GestureHandlerNative.js.map +1 -1
- package/lib/module/views/Header/Header.js +5 -4
- package/lib/module/views/Header/Header.js.map +1 -1
- package/lib/module/views/Header/HeaderContainer.js +13 -10
- package/lib/module/views/Header/HeaderContainer.js.map +1 -1
- package/lib/module/views/Header/HeaderSegment.js +11 -3
- package/lib/module/views/Header/HeaderSegment.js.map +1 -1
- package/lib/module/views/Screens.js.map +1 -1
- package/lib/module/views/Stack/Card.js +231 -228
- package/lib/module/views/Stack/Card.js.map +1 -1
- package/lib/module/views/Stack/CardContainer.js +28 -23
- package/lib/module/views/Stack/CardContainer.js.map +1 -1
- package/lib/module/views/Stack/CardSheet.js +22 -1
- package/lib/module/views/Stack/CardSheet.js.map +1 -1
- package/lib/module/views/Stack/CardStack.js +124 -128
- package/lib/module/views/Stack/CardStack.js.map +1 -1
- package/lib/module/views/Stack/StackView.js +149 -159
- package/lib/module/views/Stack/StackView.js.map +1 -1
- package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts +3 -3
- package/lib/typescript/src/TransitionConfigs/HeaderStyleInterpolators.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +7 -7
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/navigators/createStackNavigator.d.ts +6 -6
- package/lib/typescript/src/navigators/createStackNavigator.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +47 -9
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/CardAnimationContext.d.ts +1 -2
- package/lib/typescript/src/utils/CardAnimationContext.d.ts.map +1 -1
- package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts +1 -2
- package/lib/typescript/src/utils/GestureHandlerRefContext.d.ts.map +1 -1
- package/lib/typescript/src/utils/ModalPresentationContext.d.ts +1 -2
- package/lib/typescript/src/utils/ModalPresentationContext.d.ts.map +1 -1
- package/lib/typescript/src/utils/conditional.d.ts +1 -1
- package/lib/typescript/src/utils/conditional.d.ts.map +1 -1
- package/lib/typescript/src/utils/debounce.d.ts +1 -1
- package/lib/typescript/src/utils/debounce.d.ts.map +1 -1
- package/lib/typescript/src/utils/findLastIndex.d.ts +1 -1
- package/lib/typescript/src/utils/findLastIndex.d.ts.map +1 -1
- package/lib/typescript/src/utils/getDistanceForDirection.d.ts +1 -1
- package/lib/typescript/src/utils/getDistanceForDirection.d.ts.map +1 -1
- package/lib/typescript/src/utils/getInvertedMultiplier.d.ts +1 -1
- package/lib/typescript/src/utils/getInvertedMultiplier.d.ts.map +1 -1
- package/lib/typescript/src/utils/memoize.d.ts +1 -1
- package/lib/typescript/src/utils/memoize.d.ts.map +1 -1
- package/lib/typescript/src/utils/useCardAnimation.d.ts +1 -1
- package/lib/typescript/src/utils/useCardAnimation.d.ts.map +1 -1
- package/lib/typescript/src/utils/useGestureHandlerRef.d.ts +1 -1
- package/lib/typescript/src/utils/useGestureHandlerRef.d.ts.map +1 -1
- package/lib/typescript/src/utils/useKeyboardManager.d.ts +1 -1
- package/lib/typescript/src/utils/useKeyboardManager.d.ts.map +1 -1
- package/lib/typescript/src/views/GestureHandlerNative.d.ts +3 -3
- package/lib/typescript/src/views/GestureHandlerNative.d.ts.map +1 -1
- package/lib/typescript/src/views/Header/Header.d.ts +1 -2
- package/lib/typescript/src/views/Header/Header.d.ts.map +1 -1
- package/lib/typescript/src/views/Header/HeaderContainer.d.ts +4 -4
- package/lib/typescript/src/views/Header/HeaderContainer.d.ts.map +1 -1
- package/lib/typescript/src/views/Header/HeaderSegment.d.ts +3 -2
- package/lib/typescript/src/views/Header/HeaderSegment.d.ts.map +1 -1
- package/lib/typescript/src/views/Screens.d.ts +4 -3
- package/lib/typescript/src/views/Screens.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/Card.d.ts +7 -6
- package/lib/typescript/src/views/Stack/Card.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/CardContainer.d.ts +5 -8
- package/lib/typescript/src/views/Stack/CardContainer.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/CardSheet.d.ts +2 -3
- package/lib/typescript/src/views/Stack/CardSheet.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/CardStack.d.ts +5 -6
- package/lib/typescript/src/views/Stack/CardStack.d.ts.map +1 -1
- package/lib/typescript/src/views/Stack/StackView.d.ts +10 -81
- package/lib/typescript/src/views/Stack/StackView.d.ts.map +1 -1
- package/package.json +20 -21
- package/src/TransitionConfigs/CardStyleInterpolators.tsx +6 -6
- package/src/TransitionConfigs/HeaderStyleInterpolators.tsx +32 -22
- package/src/TransitionConfigs/TransitionPresets.tsx +4 -4
- package/src/index.tsx +7 -7
- package/src/navigators/createStackNavigator.tsx +20 -9
- package/src/types.tsx +50 -10
- package/src/utils/CardAnimationContext.tsx +3 -3
- package/src/utils/GestureHandlerRefContext.tsx +1 -1
- package/src/utils/ModalPresentationContext.tsx +1 -3
- package/src/utils/conditional.tsx +1 -1
- package/src/utils/debounce.tsx +1 -1
- package/src/utils/findLastIndex.tsx +2 -5
- package/src/utils/getDistanceForDirection.tsx +5 -4
- package/src/utils/getInvertedMultiplier.tsx +5 -6
- package/src/utils/memoize.tsx +1 -1
- package/src/utils/useCardAnimation.tsx +2 -2
- package/src/utils/useGestureHandlerRef.tsx +3 -3
- package/src/utils/useKeyboardManager.tsx +2 -2
- package/src/views/GestureHandlerNative.tsx +2 -2
- package/src/views/Header/Header.tsx +7 -6
- package/src/views/Header/HeaderContainer.tsx +19 -8
- package/src/views/Header/HeaderSegment.tsx +14 -6
- package/src/views/Screens.tsx +2 -1
- package/src/views/Stack/Card.tsx +80 -61
- package/src/views/Stack/CardContainer.tsx +23 -14
- package/src/views/Stack/CardSheet.tsx +58 -35
- package/src/views/Stack/CardStack.tsx +220 -190
- package/src/views/Stack/StackView.tsx +29 -31
- package/lib/commonjs/views/ModalStatusBarManager.js +0 -44
- package/lib/commonjs/views/ModalStatusBarManager.js.map +0 -1
- package/lib/module/views/ModalStatusBarManager.js +0 -36
- package/lib/module/views/ModalStatusBarManager.js.map +0 -1
- package/lib/typescript/src/views/ModalStatusBarManager.d.ts +0 -12
- package/lib/typescript/src/views/ModalStatusBarManager.d.ts.map +0 -1
- 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 {
|
|
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
|
|
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
|
-
() => (
|
|
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
|
-
|
|
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
|
-
{
|
|
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
|
|
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
|
|
19
|
-
{ enabled, layout, style, ...rest },
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
React.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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: {
|