react-native-screens 3.35.0-rc.0 → 4.0.0-beta.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.
- package/android/build.gradle +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +67 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +101 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapper.kt +38 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContentWrapperManager.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFooter.kt +287 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFooterManager.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +11 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenModalFragment.kt +281 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +62 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +403 -41
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +95 -11
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +39 -28
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt +104 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogScreen.kt +26 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingFragment.kt +488 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +66 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt +24 -0
- package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +127 -0
- package/android/src/main/java/com/swmansion/rnscreens/events/SheetDetentChangedEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/NumericExt.kt +12 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +32 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +45 -8
- package/android/src/main/res/base/drawable/rns_rounder_top_corners_shape.xml +8 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +9 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +5 -2
- package/ios/RNSConvert.h +5 -3
- package/ios/RNSConvert.mm +14 -20
- package/ios/RNSScreen.h +3 -2
- package/ios/RNSScreen.mm +433 -49
- package/ios/RNSScreenContentWrapper.h +44 -0
- package/ios/RNSScreenContentWrapper.mm +61 -0
- package/ios/RNSScreenFooter.h +30 -0
- package/ios/RNSScreenFooter.mm +137 -0
- package/lib/commonjs/components/Screen.js +6 -2
- package/lib/commonjs/components/Screen.js.map +1 -1
- package/lib/commonjs/components/ScreenContentWrapper.js +19 -0
- package/lib/commonjs/components/ScreenContentWrapper.js.map +1 -0
- package/lib/commonjs/components/ScreenFooter.js +23 -0
- package/lib/commonjs/components/ScreenFooter.js.map +1 -0
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js +10 -0
- package/lib/commonjs/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenFooterNativeComponent.js +10 -0
- package/lib/commonjs/fabric/ScreenFooterNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/index.js +30 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/native-stack/views/FooterComponent.js +18 -0
- package/lib/commonjs/native-stack/views/FooterComponent.js.map +1 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js +59 -14
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/Screen.js +6 -2
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/ScreenContentWrapper.js +12 -0
- package/lib/module/components/ScreenContentWrapper.js.map +1 -0
- package/lib/module/components/ScreenFooter.js +17 -0
- package/lib/module/components/ScreenFooter.js.map +1 -0
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenContentWrapperNativeComponent.js +3 -0
- package/lib/module/fabric/ScreenContentWrapperNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenFooterNativeComponent.js +3 -0
- package/lib/module/fabric/ScreenFooterNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/native-stack/views/FooterComponent.js +11 -0
- package/lib/module/native-stack/views/FooterComponent.js.map +1 -0
- package/lib/module/native-stack/views/NativeStackView.js +61 -15
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/components/Screen.d.ts.map +1 -1
- package/lib/typescript/components/ScreenContentWrapper.d.ts +6 -0
- package/lib/typescript/components/ScreenContentWrapper.d.ts.map +1 -0
- package/lib/typescript/components/ScreenFooter.d.ts +12 -0
- package/lib/typescript/components/ScreenFooter.d.ts.map +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +2 -3
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenContentWrapperNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts +7 -0
- package/lib/typescript/fabric/ScreenFooterNativeComponent.d.ts.map +1 -0
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +9 -3
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +63 -23
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/FooterComponent.d.ts +7 -0
- package/lib/typescript/native-stack/views/FooterComponent.d.ts.map +1 -0
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +42 -17
- package/lib/typescript/types.d.ts.map +1 -1
- package/native-stack/README.md +16 -14
- package/package.json +1 -1
- package/react-native.config.js +18 -16
- package/src/components/Screen.tsx +6 -2
- package/src/components/ScreenContentWrapper.tsx +12 -0
- package/src/components/ScreenFooter.tsx +18 -0
- package/src/fabric/ModalScreenNativeComponent.ts +2 -4
- package/src/fabric/ScreenContentWrapperNativeComponent.ts +9 -0
- package/src/fabric/ScreenFooterNativeComponent.ts +6 -0
- package/src/fabric/ScreenNativeComponent.ts +10 -4
- package/src/index.tsx +10 -0
- package/src/native-stack/types.tsx +57 -23
- package/src/native-stack/views/FooterComponent.tsx +10 -0
- package/src/native-stack/views/NativeStackView.tsx +74 -11
- package/src/types.tsx +41 -16
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
1
2
|
import * as React from 'react';
|
|
2
|
-
import { Animated, Platform, StyleSheet,
|
|
3
|
+
import { Animated, Platform, StyleSheet, ViewProps } from 'react-native';
|
|
3
4
|
// @ts-ignore Getting private component
|
|
4
5
|
// eslint-disable-next-line import/no-named-as-default, import/default, import/no-named-as-default-member, import/namespace
|
|
5
6
|
import AppContainer from 'react-native/Libraries/ReactNative/AppContainer';
|
|
@@ -10,6 +11,7 @@ import {
|
|
|
10
11
|
ScreenContext,
|
|
11
12
|
GHContext,
|
|
12
13
|
GestureDetectorBridge,
|
|
14
|
+
ScreenContentWrapper,
|
|
13
15
|
} from 'react-native-screens';
|
|
14
16
|
import {
|
|
15
17
|
ParamListBase,
|
|
@@ -37,24 +39,29 @@ import getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';
|
|
|
37
39
|
import getStatusBarHeight from '../utils/getStatusBarHeight';
|
|
38
40
|
import HeaderHeightContext from '../utils/HeaderHeightContext';
|
|
39
41
|
import AnimatedHeaderHeightContext from '../utils/AnimatedHeaderHeightContext';
|
|
42
|
+
import FooterComponent from './FooterComponent';
|
|
40
43
|
|
|
41
44
|
const isAndroid = Platform.OS === 'android';
|
|
42
45
|
|
|
43
|
-
let Container =
|
|
46
|
+
let Container = ScreenContentWrapper;
|
|
44
47
|
|
|
45
48
|
if (__DEV__) {
|
|
46
49
|
const DebugContainer = (
|
|
47
50
|
props: ViewProps & { stackPresentation: StackPresentationTypes },
|
|
48
51
|
) => {
|
|
49
52
|
const { stackPresentation, ...rest } = props;
|
|
50
|
-
if (
|
|
53
|
+
if (
|
|
54
|
+
Platform.OS === 'ios' &&
|
|
55
|
+
stackPresentation !== 'push' &&
|
|
56
|
+
stackPresentation !== 'formSheet'
|
|
57
|
+
) {
|
|
51
58
|
return (
|
|
52
59
|
<AppContainer>
|
|
53
|
-
<
|
|
60
|
+
<ScreenContentWrapper {...rest} />
|
|
54
61
|
</AppContainer>
|
|
55
62
|
);
|
|
56
63
|
}
|
|
57
|
-
return <
|
|
64
|
+
return <ScreenContentWrapper {...rest} />;
|
|
58
65
|
};
|
|
59
66
|
// @ts-ignore Wrong props
|
|
60
67
|
Container = DebugContainer;
|
|
@@ -72,7 +79,11 @@ const MaybeNestedStack = ({
|
|
|
72
79
|
children: React.ReactNode;
|
|
73
80
|
}) => {
|
|
74
81
|
const { colors } = useTheme();
|
|
75
|
-
const {
|
|
82
|
+
const {
|
|
83
|
+
headerShown = true,
|
|
84
|
+
contentStyle,
|
|
85
|
+
unstable_screenStyle = null,
|
|
86
|
+
} = options;
|
|
76
87
|
|
|
77
88
|
const Screen = React.useContext(ScreenContext);
|
|
78
89
|
|
|
@@ -96,7 +107,11 @@ const MaybeNestedStack = ({
|
|
|
96
107
|
const content = (
|
|
97
108
|
<Container
|
|
98
109
|
style={[
|
|
99
|
-
|
|
110
|
+
stackPresentation === 'formSheet'
|
|
111
|
+
? Platform.OS === 'ios'
|
|
112
|
+
? styles.absoluteFillNoBottom
|
|
113
|
+
: null
|
|
114
|
+
: styles.container,
|
|
100
115
|
stackPresentation !== 'transparentModal' &&
|
|
101
116
|
stackPresentation !== 'containedTransparentModal' && {
|
|
102
117
|
backgroundColor: colors.background,
|
|
@@ -138,7 +153,7 @@ const MaybeNestedStack = ({
|
|
|
138
153
|
enabled
|
|
139
154
|
isNativeStack
|
|
140
155
|
hasLargeHeader={hasLargeHeader}
|
|
141
|
-
style={StyleSheet.absoluteFill}>
|
|
156
|
+
style={[StyleSheet.absoluteFill, unstable_screenStyle]}>
|
|
142
157
|
<HeaderHeightContext.Provider value={headerHeight}>
|
|
143
158
|
<HeaderConfig {...options} route={route} />
|
|
144
159
|
{content}
|
|
@@ -173,17 +188,19 @@ const RouteView = ({
|
|
|
173
188
|
screensRefs: ScreensRefsHolder;
|
|
174
189
|
}) => {
|
|
175
190
|
const { options, render: renderScene } = descriptors[route.key];
|
|
191
|
+
|
|
176
192
|
const {
|
|
177
193
|
fullScreenSwipeShadowEnabled = false,
|
|
178
194
|
gestureEnabled,
|
|
179
195
|
headerShown,
|
|
180
196
|
hideKeyboardOnSwipe,
|
|
181
197
|
homeIndicatorHidden,
|
|
182
|
-
|
|
183
|
-
sheetLargestUndimmedDetent = 'all',
|
|
198
|
+
sheetLargestUndimmedDetent = -1,
|
|
184
199
|
sheetGrabberVisible = false,
|
|
185
200
|
sheetCornerRadius = -1.0,
|
|
201
|
+
sheetElevation = 24,
|
|
186
202
|
sheetExpandsWhenScrolledToEdge = true,
|
|
203
|
+
sheetInitialDetent = 0,
|
|
187
204
|
nativeBackButtonDismissalEnabled = false,
|
|
188
205
|
navigationBarColor,
|
|
189
206
|
navigationBarTranslucent,
|
|
@@ -198,16 +215,28 @@ const RouteView = ({
|
|
|
198
215
|
swipeDirection = 'horizontal',
|
|
199
216
|
transitionDuration,
|
|
200
217
|
freezeOnBlur,
|
|
218
|
+
unstable_footerComponent = null,
|
|
201
219
|
} = options;
|
|
202
220
|
|
|
203
221
|
let {
|
|
222
|
+
sheetAllowedDetents = [1.0],
|
|
204
223
|
customAnimationOnSwipe,
|
|
205
224
|
fullScreenSwipeEnabled,
|
|
206
225
|
gestureResponseDistance,
|
|
207
226
|
stackAnimation,
|
|
208
227
|
stackPresentation = 'push',
|
|
228
|
+
unstable_screenStyle = null,
|
|
209
229
|
} = options;
|
|
210
230
|
|
|
231
|
+
// We only want to allow backgroundColor for now
|
|
232
|
+
unstable_screenStyle = unstable_screenStyle
|
|
233
|
+
? { backgroundColor: unstable_screenStyle.backgroundColor }
|
|
234
|
+
: null;
|
|
235
|
+
|
|
236
|
+
if (sheetAllowedDetents === 'fitToContents') {
|
|
237
|
+
sheetAllowedDetents = [-1];
|
|
238
|
+
}
|
|
239
|
+
|
|
211
240
|
if (swipeDirection === 'vertical') {
|
|
212
241
|
// for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`
|
|
213
242
|
// so the screen can be dismissed from any point on screen.
|
|
@@ -286,11 +315,13 @@ const RouteView = ({
|
|
|
286
315
|
enabled
|
|
287
316
|
isNativeStack
|
|
288
317
|
hasLargeHeader={hasLargeHeader}
|
|
289
|
-
style={StyleSheet.absoluteFill}
|
|
318
|
+
style={[StyleSheet.absoluteFill, unstable_screenStyle]}
|
|
290
319
|
sheetAllowedDetents={sheetAllowedDetents}
|
|
291
320
|
sheetLargestUndimmedDetent={sheetLargestUndimmedDetent}
|
|
292
321
|
sheetGrabberVisible={sheetGrabberVisible}
|
|
322
|
+
sheetInitialDetent={sheetInitialDetent}
|
|
293
323
|
sheetCornerRadius={sheetCornerRadius}
|
|
324
|
+
sheetElevation={sheetElevation}
|
|
294
325
|
sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}
|
|
295
326
|
customAnimationOnSwipe={customAnimationOnSwipe}
|
|
296
327
|
freezeOnBlur={freezeOnBlur}
|
|
@@ -323,6 +354,7 @@ const RouteView = ({
|
|
|
323
354
|
});
|
|
324
355
|
}}
|
|
325
356
|
onWillAppear={() => {
|
|
357
|
+
console.log(`onWillAppear/transitionStart route: ${route.key}`);
|
|
326
358
|
navigation.emit({
|
|
327
359
|
type: 'transitionStart',
|
|
328
360
|
data: { closing: false },
|
|
@@ -330,6 +362,7 @@ const RouteView = ({
|
|
|
330
362
|
});
|
|
331
363
|
}}
|
|
332
364
|
onWillDisappear={() => {
|
|
365
|
+
console.log(`onWillDisappear/transitionStart route: ${route.key}`);
|
|
333
366
|
navigation.emit({
|
|
334
367
|
type: 'transitionStart',
|
|
335
368
|
data: { closing: true },
|
|
@@ -337,10 +370,12 @@ const RouteView = ({
|
|
|
337
370
|
});
|
|
338
371
|
}}
|
|
339
372
|
onAppear={() => {
|
|
373
|
+
console.log(`onAppear/appear route: ${route.key}`);
|
|
340
374
|
navigation.emit({
|
|
341
375
|
type: 'appear',
|
|
342
376
|
target: route.key,
|
|
343
377
|
});
|
|
378
|
+
console.log(`onAppear/transitionEnd route: ${route.key}`);
|
|
344
379
|
navigation.emit({
|
|
345
380
|
type: 'transitionEnd',
|
|
346
381
|
data: { closing: false },
|
|
@@ -348,6 +383,7 @@ const RouteView = ({
|
|
|
348
383
|
});
|
|
349
384
|
}}
|
|
350
385
|
onDisappear={() => {
|
|
386
|
+
console.log(`onDisappear/transitionEnd route: ${route.key}`);
|
|
351
387
|
navigation.emit({
|
|
352
388
|
type: 'transitionEnd',
|
|
353
389
|
data: { closing: true },
|
|
@@ -367,6 +403,7 @@ const RouteView = ({
|
|
|
367
403
|
}
|
|
368
404
|
}}
|
|
369
405
|
onDismissed={e => {
|
|
406
|
+
console.log(`onDismissed/dismiss route: ${route.key}`);
|
|
370
407
|
navigation.emit({
|
|
371
408
|
type: 'dismiss',
|
|
372
409
|
target: route.key,
|
|
@@ -381,6 +418,16 @@ const RouteView = ({
|
|
|
381
418
|
target: stateKey,
|
|
382
419
|
});
|
|
383
420
|
}}
|
|
421
|
+
onSheetDetentChanged={e => {
|
|
422
|
+
navigation.emit({
|
|
423
|
+
type: 'sheetDetentChange',
|
|
424
|
+
target: route.key,
|
|
425
|
+
data: {
|
|
426
|
+
index: e.nativeEvent.index,
|
|
427
|
+
isStable: e.nativeEvent.isStable,
|
|
428
|
+
},
|
|
429
|
+
});
|
|
430
|
+
}}
|
|
384
431
|
onGestureCancel={() => {
|
|
385
432
|
navigation.emit({
|
|
386
433
|
type: 'gestureCancel',
|
|
@@ -403,6 +450,9 @@ const RouteView = ({
|
|
|
403
450
|
route={route}
|
|
404
451
|
headerShown={isHeaderInPush}
|
|
405
452
|
/>
|
|
453
|
+
{unstable_footerComponent && (
|
|
454
|
+
<FooterComponent>{unstable_footerComponent}</FooterComponent>
|
|
455
|
+
)}
|
|
406
456
|
</HeaderHeightContext.Provider>
|
|
407
457
|
</AnimatedHeaderHeightContext.Provider>
|
|
408
458
|
</Screen>
|
|
@@ -487,4 +537,17 @@ const styles = StyleSheet.create({
|
|
|
487
537
|
container: {
|
|
488
538
|
flex: 1,
|
|
489
539
|
},
|
|
540
|
+
absoluteFill: {
|
|
541
|
+
position: 'absolute',
|
|
542
|
+
top: 0,
|
|
543
|
+
left: 0,
|
|
544
|
+
right: 0,
|
|
545
|
+
bottom: 0,
|
|
546
|
+
},
|
|
547
|
+
absoluteFillNoBottom: {
|
|
548
|
+
position: 'absolute',
|
|
549
|
+
top: 0,
|
|
550
|
+
left: 0,
|
|
551
|
+
right: 0,
|
|
552
|
+
},
|
|
490
553
|
});
|
package/src/types.tsx
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
TargetedEvent,
|
|
8
8
|
TextInputFocusEventData,
|
|
9
9
|
ColorValue,
|
|
10
|
+
ViewStyle,
|
|
10
11
|
} from 'react-native';
|
|
11
12
|
import { NativeStackNavigatorProps } from './native-stack/types';
|
|
12
13
|
|
|
@@ -95,13 +96,13 @@ export type GestureResponseDistanceType = {
|
|
|
95
96
|
bottom?: number;
|
|
96
97
|
};
|
|
97
98
|
|
|
98
|
-
export type SheetDetentTypes = 'medium' | 'large' | 'all';
|
|
99
99
|
export type SearchBarPlacement = 'automatic' | 'inline' | 'stacked';
|
|
100
100
|
|
|
101
101
|
export interface ScreenProps extends ViewProps {
|
|
102
102
|
active?: 0 | 1 | Animated.AnimatedInterpolation<number>;
|
|
103
103
|
activityState?: 0 | 1 | 2 | Animated.AnimatedInterpolation<number>;
|
|
104
104
|
children?: React.ReactNode;
|
|
105
|
+
unstable_footer?: React.ReactNode;
|
|
105
106
|
/**
|
|
106
107
|
* Boolean indicating that swipe dismissal should trigger animation provided by `stackAnimation`. Defaults to `false`.
|
|
107
108
|
*
|
|
@@ -231,6 +232,12 @@ export interface ScreenProps extends ViewProps {
|
|
|
231
232
|
onNativeDismissCancelled?: (
|
|
232
233
|
e: NativeSyntheticEvent<{ dismissCount: number }>,
|
|
233
234
|
) => void;
|
|
235
|
+
/**
|
|
236
|
+
* A callback that gets called when the current screen is in `formSheet` presentation and its detent has changed.
|
|
237
|
+
*/
|
|
238
|
+
onSheetDetentChanged?: (
|
|
239
|
+
e: NativeSyntheticEvent<{ index: number; isStable: boolean }>,
|
|
240
|
+
) => void;
|
|
234
241
|
/**
|
|
235
242
|
* An internal callback called every frame during the transition of screens of `native-stack`, used to feed transition context.
|
|
236
243
|
*/
|
|
@@ -273,20 +280,36 @@ export interface ScreenProps extends ViewProps {
|
|
|
273
280
|
* - "landscape_right" – landscape-right orientation is permitted
|
|
274
281
|
*/
|
|
275
282
|
screenOrientation?: ScreenOrientationTypes;
|
|
283
|
+
/**
|
|
284
|
+
* Allows to set background color for the `Screen` component itself.
|
|
285
|
+
* This might come handy when using `formSheet` stack presentation, when the content view is clipped.
|
|
286
|
+
*
|
|
287
|
+
* We plan to get rid of this prop once the workaround is no longer needed.
|
|
288
|
+
*/
|
|
289
|
+
unstable_screenStyle?: Pick<ViewStyle, 'backgroundColor'>;
|
|
276
290
|
/**
|
|
277
291
|
* Describes heights where a sheet can rest.
|
|
278
292
|
* Works only when `stackPresentation` is set to `formSheet`.
|
|
279
|
-
* Defaults to `large`.
|
|
280
293
|
*
|
|
281
|
-
*
|
|
294
|
+
* Heights should be described as fraction (a number from `[0, 1]` interval) of screen height / maximum detent height.
|
|
295
|
+
* There is also possibility to specify `[-1]` literal array with single element, which intets to set the sheet height
|
|
296
|
+
* to the height of its contents.
|
|
282
297
|
*
|
|
283
|
-
*
|
|
284
|
-
* - `medium` - only medium detent level will be allowed
|
|
285
|
-
* - `all` - all detent levels will be allowed
|
|
298
|
+
* Please note that the array **must** be sorted in ascending order.
|
|
286
299
|
*
|
|
287
|
-
*
|
|
300
|
+
* Defaults to `[1.0]` literal.
|
|
288
301
|
*/
|
|
289
|
-
sheetAllowedDetents?:
|
|
302
|
+
sheetAllowedDetents?: number[];
|
|
303
|
+
/**
|
|
304
|
+
* Integer value describing elevation of the sheet, impacting shadow on the top edge of the sheet.
|
|
305
|
+
*
|
|
306
|
+
* Not dynamic - changing it after the component is rendered won't have an effect.
|
|
307
|
+
*
|
|
308
|
+
* Defaults to `24`.
|
|
309
|
+
*
|
|
310
|
+
* @platform Android
|
|
311
|
+
*/
|
|
312
|
+
sheetElevation?: number;
|
|
290
313
|
/**
|
|
291
314
|
* Whether the sheet should expand to larger detent when scrolling.
|
|
292
315
|
* Works only when `stackPresentation` is set to `formSheet`.
|
|
@@ -318,17 +341,19 @@ export interface ScreenProps extends ViewProps {
|
|
|
318
341
|
* The largest sheet detent for which a view underneath won't be dimmed.
|
|
319
342
|
* Works only when `stackPresentation` is set to `formSheet`.
|
|
320
343
|
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
* - `large` - the view underneath won't be dimmed at any detent level
|
|
324
|
-
* - `medium` - the view underneath will be dimmed only when detent level is `large`
|
|
325
|
-
* - `all` - the view underneath will be dimmed for any detent level
|
|
344
|
+
* This prop can be set to an number, which indicates index of detent in `sheetAllowedDetents` array for which
|
|
345
|
+
* there won't be a dimming view beneath the sheet.
|
|
326
346
|
*
|
|
327
|
-
* Defaults to
|
|
347
|
+
* Defaults to `-1`, indicating that the dimming view should be always present.
|
|
348
|
+
*/
|
|
349
|
+
sheetLargestUndimmedDetent?: number;
|
|
350
|
+
/**
|
|
351
|
+
* Index of the detent the sheet should expand to after being opened.
|
|
352
|
+
* Works only when `stackPresentation` is set to `formSheet`.
|
|
328
353
|
*
|
|
329
|
-
*
|
|
354
|
+
* Defaults to `0` - which represents first detent in the detents array.
|
|
330
355
|
*/
|
|
331
|
-
|
|
356
|
+
sheetInitialDetent?: number;
|
|
332
357
|
/**
|
|
333
358
|
* How the screen should appear/disappear when pushed or popped at the top of the stack.
|
|
334
359
|
* The following values are currently supported:
|