react-native-screens 4.0.0-beta.1 → 4.0.0-beta.11
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/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +61 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +14 -0
- package/android/src/main/java/com/swmansion/rnscreens/InsetsObserverProxy.kt +2 -4
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +46 -7
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +24 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +37 -17
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigShadowNode.kt +25 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +18 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/ext/ViewExt.kt +24 -0
- package/android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt +8 -0
- package/android/src/main/jni/rnscreens.h +2 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +39 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +44 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +8 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +32 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +23 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +50 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +27 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +8 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +32 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +15 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +40 -0
- package/ios/RNSConvert.mm +0 -1
- package/ios/RNSScreen.h +15 -0
- package/ios/RNSScreen.mm +55 -8
- package/ios/RNSScreenStack.mm +81 -2
- package/ios/RNSScreenStackHeaderConfig.h +63 -0
- package/ios/RNSScreenStackHeaderConfig.mm +135 -13
- package/ios/RNSScreenStackHeaderSubview.mm +26 -0
- package/ios/utils/UINavigationBar+RNSUtility.h +37 -0
- package/ios/utils/UINavigationBar+RNSUtility.mm +44 -0
- package/ios/utils/UIView+RNSUtility.mm +0 -1
- package/lib/commonjs/components/Screen.js +58 -7
- package/lib/commonjs/components/Screen.js.map +1 -1
- package/lib/commonjs/components/ScreenContentWrapper.web.js +11 -0
- package/lib/commonjs/components/ScreenContentWrapper.web.js.map +1 -0
- package/lib/commonjs/components/ScreenFooter.web.js +11 -0
- package/lib/commonjs/components/ScreenFooter.web.js.map +1 -0
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +53 -17
- package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/components/helpers/usePrevious.js +15 -0
- package/lib/commonjs/components/helpers/usePrevious.js.map +1 -0
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +3 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +3 -1
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +4 -10
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/Screen.js +58 -7
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/ScreenContentWrapper.web.js +5 -0
- package/lib/module/components/ScreenContentWrapper.web.js.map +1 -0
- package/lib/module/components/ScreenFooter.web.js +5 -0
- package/lib/module/components/ScreenFooter.web.js.map +1 -0
- package/lib/module/components/ScreenStackHeaderConfig.js +50 -16
- package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/components/helpers/usePrevious.js +9 -0
- package/lib/module/components/helpers/usePrevious.js.map +1 -0
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +3 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +3 -1
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +4 -10
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/components/Screen.d.ts +5 -1
- package/lib/typescript/components/Screen.d.ts.map +1 -1
- package/lib/typescript/components/ScreenContentWrapper.web.d.ts +5 -0
- package/lib/typescript/components/ScreenContentWrapper.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenFooter.web.d.ts +5 -0
- package/lib/typescript/components/ScreenFooter.web.d.ts.map +1 -0
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts +1 -1
- package/lib/typescript/components/ScreenStackHeaderConfig.d.ts.map +1 -1
- package/lib/typescript/components/helpers/usePrevious.d.ts +2 -0
- package/lib/typescript/components/helpers/usePrevious.d.ts.map +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +2 -3
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +26 -9
- package/lib/typescript/types.d.ts.map +1 -1
- package/native-stack/README.md +3 -2
- package/package.json +1 -1
- package/src/components/Screen.tsx +97 -12
- package/src/components/ScreenContentWrapper.web.tsx +6 -0
- package/src/components/ScreenFooter.web.tsx +6 -0
- package/src/components/ScreenStackHeaderConfig.tsx +59 -26
- package/src/components/helpers/usePrevious.tsx +11 -0
- package/src/fabric/ModalScreenNativeComponent.ts +1 -0
- package/src/fabric/ScreenNativeComponent.ts +0 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +3 -1
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +3 -1
- package/src/native-stack/types.tsx +2 -3
- package/src/native-stack/views/NativeStackView.tsx +4 -10
- package/src/types.tsx +29 -13
- package/windows/RNScreens/Screen.h +0 -1
|
@@ -11,7 +11,7 @@ export type SearchBarCommands = {
|
|
|
11
11
|
};
|
|
12
12
|
export type BackButtonDisplayMode = 'default' | 'generic' | 'minimal';
|
|
13
13
|
export type StackPresentationTypes = 'push' | 'modal' | 'transparentModal' | 'containedModal' | 'containedTransparentModal' | 'fullScreenModal' | 'formSheet';
|
|
14
|
-
export type StackAnimationTypes = 'default' | 'fade' | 'fade_from_bottom' | 'flip' | 'none' | 'simple_push' | 'slide_from_bottom' | 'slide_from_right' | 'slide_from_left' | '
|
|
14
|
+
export type StackAnimationTypes = 'default' | 'fade' | 'fade_from_bottom' | 'flip' | 'none' | 'simple_push' | 'slide_from_bottom' | 'slide_from_right' | 'slide_from_left' | 'ios_from_right' | 'ios_from_left';
|
|
15
15
|
export type BlurEffectTypes = 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent' | 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial' | 'systemUltraThinMaterialLight' | 'systemThinMaterialLight' | 'systemMaterialLight' | 'systemThickMaterialLight' | 'systemChromeMaterialLight' | 'systemUltraThinMaterialDark' | 'systemThinMaterialDark' | 'systemMaterialDark' | 'systemThickMaterialDark' | 'systemChromeMaterialDark';
|
|
16
16
|
export type ScreenReplaceTypes = 'push' | 'pop';
|
|
17
17
|
export type SwipeDirectionTypes = 'vertical' | 'horizontal';
|
|
@@ -221,13 +221,19 @@ export interface ScreenProps extends ViewProps {
|
|
|
221
221
|
unstable_screenStyle?: Pick<ViewStyle, 'backgroundColor'>;
|
|
222
222
|
/**
|
|
223
223
|
* Describes heights where a sheet can rest.
|
|
224
|
-
* Works only when `
|
|
224
|
+
* Works only when `presentation` is set to `formSheet`.
|
|
225
225
|
*
|
|
226
226
|
* Heights should be described as fraction (a number from `[0, 1]` interval) of screen height / maximum detent height.
|
|
227
|
-
*
|
|
227
|
+
* You can pass an array of ascending values each defining allowed sheet detent. iOS accepts any number of detents,
|
|
228
|
+
* while **Android is limited to three**.
|
|
229
|
+
*
|
|
230
|
+
* There is also possibility to specify `fitToContents` literal, which intents to set the sheet height
|
|
228
231
|
* to the height of its contents.
|
|
229
232
|
*
|
|
230
|
-
* Please note that the array **must** be sorted in ascending order.
|
|
233
|
+
* Please note that the array **must** be sorted in ascending order. This invariant is verified only in developement mode,
|
|
234
|
+
* where violation results in error.
|
|
235
|
+
*
|
|
236
|
+
* **Android is limited to up 3 values in the array** -- any surplus values, beside first three are ignored.
|
|
231
237
|
*
|
|
232
238
|
* There are also legacy & **deprecated** options available:
|
|
233
239
|
*
|
|
@@ -235,7 +241,9 @@ export interface ScreenProps extends ViewProps {
|
|
|
235
241
|
* * 'large' - corresponds to `[1.0]` detent value, maximum height,
|
|
236
242
|
* * 'all' - corresponds to `[0.5, 1.0]` value, the name is deceiving due to compatibility reasons.
|
|
237
243
|
*
|
|
238
|
-
*
|
|
244
|
+
* These are provided solely for **temporary** backward compatibility and are destined for removal in future versions.
|
|
245
|
+
*
|
|
246
|
+
* Defaults to `[1.0]`.
|
|
239
247
|
*/
|
|
240
248
|
sheetAllowedDetents?: number[] | 'fitToContents' | 'medium' | 'large' | 'all';
|
|
241
249
|
/**
|
|
@@ -282,24 +290,34 @@ export interface ScreenProps extends ViewProps {
|
|
|
282
290
|
* This prop can be set to an number, which indicates index of detent in `sheetAllowedDetents` array for which
|
|
283
291
|
* there won't be a dimming view beneath the sheet.
|
|
284
292
|
*
|
|
293
|
+
* If the specified index is out of bounds of `sheetAllowedDetents` array, in dev environment mode error will be thrown,
|
|
294
|
+
* in production the value will be reset to default value.
|
|
295
|
+
*
|
|
285
296
|
* Additionaly there are following options available:
|
|
286
297
|
*
|
|
287
298
|
* * `none` - there will be dimming view for all detents levels,
|
|
288
|
-
* * `
|
|
299
|
+
* * `last` - there won't be a dimming view for any detent level.
|
|
289
300
|
*
|
|
290
301
|
* There also legacy & **deprecated** prop values available: `medium`, `large` (don't confuse with `largest`), `all`, which work in tandem with
|
|
291
302
|
* corresponding legacy prop values for `sheetAllowedDetents` prop.
|
|
292
303
|
*
|
|
304
|
+
* These are provided solely for **temporary** backward compatibility and are destined for removal in future versions.
|
|
305
|
+
*
|
|
293
306
|
* Defaults to `none`, indicating that the dimming view should be always present.
|
|
294
307
|
*/
|
|
295
|
-
|
|
308
|
+
sheetLargestUndimmedDetentIndex?: number | 'none' | 'last' | 'medium' | 'large' | 'all';
|
|
296
309
|
/**
|
|
297
310
|
* Index of the detent the sheet should expand to after being opened.
|
|
298
311
|
* Works only when `stackPresentation` is set to `formSheet`.
|
|
299
312
|
*
|
|
313
|
+
* If the specified index is out of bounds of `sheetAllowedDetents` array, in dev environment more error will be thrown,
|
|
314
|
+
* in production the value will be reset to default value.
|
|
315
|
+
*
|
|
316
|
+
* Additionaly there is `last` value available, when set the sheet will expand initially to last (largest) detent.
|
|
317
|
+
*
|
|
300
318
|
* Defaults to `0` - which represents first detent in the detents array.
|
|
301
319
|
*/
|
|
302
|
-
|
|
320
|
+
sheetInitialDetentIndex?: number | 'last';
|
|
303
321
|
/**
|
|
304
322
|
* How the screen should appear/disappear when pushed or popped at the top of the stack.
|
|
305
323
|
* The following values are currently supported:
|
|
@@ -311,7 +329,6 @@ export interface ScreenProps extends ViewProps {
|
|
|
311
329
|
* - `slide_from_bottom` – performs a slide from bottom animation
|
|
312
330
|
* - "slide_from_right" - slide in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
313
331
|
* - "slide_from_left" - slide in the new screen from left to right
|
|
314
|
-
* - "ios" - @deprecated iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS) (will be removed in v4.0.0 in favor of `ios_from_right`)
|
|
315
332
|
* - "ios_from_right" - iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
316
333
|
* - "ios_from_left" - iOS like slide in animation. pushes in the new screen from left to right (Android only, resolves to default transition on iOS)
|
|
317
334
|
* - "none" – the screen appears/dissapears without an animation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,IAAI,EACJ,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,OAAO,GACP,kBAAkB,GAClB,gBAAgB,GAChB,2BAA2B,GAC3B,iBAAiB,GACjB,WAAW,CAAC;AAChB,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,MAAM,GACN,kBAAkB,GAClB,MAAM,GACN,MAAM,GACN,aAAa,GACb,mBAAmB,GACnB,kBAAkB,GAClB,iBAAiB,GACjB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.tsx"],"names":[],"mappings":"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"}
|
package/native-stack/README.md
CHANGED
|
@@ -287,9 +287,11 @@ Defaults to system default.
|
|
|
287
287
|
|
|
288
288
|
#### `sheetInitialDetent`
|
|
289
289
|
|
|
290
|
-
|
|
290
|
+
Index of the detent the sheet should expand to after being opened.
|
|
291
291
|
Works only when `presentation` is set to `formSheet`.
|
|
292
292
|
|
|
293
|
+
Defaults to `0` - which represents first detent in the detents array.
|
|
294
|
+
|
|
293
295
|
#### `sheetGrabberVisible` (iOS only)
|
|
294
296
|
|
|
295
297
|
Boolean indicating whether the sheet shows a grabber at the top.
|
|
@@ -326,7 +328,6 @@ How the given screen should appear/disappear when pushed or popped at the top of
|
|
|
326
328
|
- `slide_from_bottom` – performs a slide from bottom animation
|
|
327
329
|
- `slide_from_right` - slide in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
328
330
|
- `slide_from_left` - slide in the new screen from left to right
|
|
329
|
-
- `"ios"` - @deprecated iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS) (will be removed in v4.0.0 in favor of `ios_from_right`)
|
|
330
331
|
- `"ios_from_right"` - iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
331
332
|
- `"ios_from_left"` - iOS like slide in animation. pushes in the new screen from left to right (Android only, resolves to default transition on iOS)
|
|
332
333
|
- `none` - the screen appears/disappears without an animation.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-screens",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.11",
|
|
4
4
|
"description": "Native navigation primitives for your React Native app.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"submodules": "git submodule update --init --recursive && (cd react-navigation && yarn)",
|
|
@@ -16,12 +16,21 @@ import {
|
|
|
16
16
|
// Native components
|
|
17
17
|
import ScreenNativeComponent from '../fabric/ScreenNativeComponent';
|
|
18
18
|
import ModalScreenNativeComponent from '../fabric/ModalScreenNativeComponent';
|
|
19
|
+
import { usePrevious } from './helpers/usePrevious';
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
type NativeScreenProps = Omit<
|
|
22
|
+
ScreenProps,
|
|
23
|
+
'sheetInitialDetentIndex' | 'sheetLargestUndimmedDetentIndex'
|
|
24
|
+
> & {
|
|
25
|
+
sheetInitialDetent: number;
|
|
26
|
+
sheetLargestUndimmedDetent: number;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const NativeScreen: React.ComponentType<NativeScreenProps> =
|
|
30
|
+
ScreenNativeComponent as React.ComponentType<NativeScreenProps>;
|
|
22
31
|
const AnimatedNativeScreen = Animated.createAnimatedComponent(NativeScreen);
|
|
23
32
|
const AnimatedNativeModalScreen = Animated.createAnimatedComponent(
|
|
24
|
-
ModalScreenNativeComponent as React.ComponentType<
|
|
33
|
+
ModalScreenNativeComponent as React.ComponentType<NativeScreenProps>,
|
|
25
34
|
);
|
|
26
35
|
|
|
27
36
|
// Incomplete type, all accessible properties available at:
|
|
@@ -52,12 +61,33 @@ const SHEET_COMPAT_ALL = [0.5, 1.0];
|
|
|
52
61
|
const SHEET_DIMMED_ALWAYS = -1;
|
|
53
62
|
// const SHEET_DIMMED_NEVER = 9999;
|
|
54
63
|
|
|
64
|
+
function assertDetentsArrayIsSorted(array: number[]) {
|
|
65
|
+
for (let i = 1; i < array.length; i++) {
|
|
66
|
+
if (array[i - 1] > array[i]) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
'[RNScreens] The detent array is not sorted in ascending order!',
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
55
74
|
// These exist to transform old 'legacy' values used by the formsheet API to the new API shape.
|
|
56
75
|
// We can get rid of it, once we get rid of support for legacy values: 'large', 'medium', 'all'.
|
|
57
76
|
function resolveSheetAllowedDetents(
|
|
58
77
|
allowedDetentsCompat: ScreenProps['sheetAllowedDetents'],
|
|
59
78
|
): number[] {
|
|
60
79
|
if (Array.isArray(allowedDetentsCompat)) {
|
|
80
|
+
if (Platform.OS === 'android' && allowedDetentsCompat.length > 3) {
|
|
81
|
+
if (__DEV__) {
|
|
82
|
+
console.warn(
|
|
83
|
+
'[RNScreens] Sheets API on Android do accept only up to 3 values. Any surplus value are ignored.',
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
allowedDetentsCompat = allowedDetentsCompat.slice(0, 3);
|
|
87
|
+
}
|
|
88
|
+
if (__DEV__) {
|
|
89
|
+
assertDetentsArrayIsSorted(allowedDetentsCompat);
|
|
90
|
+
}
|
|
61
91
|
return allowedDetentsCompat;
|
|
62
92
|
} else if (allowedDetentsCompat === 'fitToContents') {
|
|
63
93
|
return SHEET_FIT_TO_CONTENTS;
|
|
@@ -74,13 +104,22 @@ function resolveSheetAllowedDetents(
|
|
|
74
104
|
}
|
|
75
105
|
|
|
76
106
|
function resolveSheetLargestUndimmedDetent(
|
|
77
|
-
lud: ScreenProps['
|
|
78
|
-
|
|
107
|
+
lud: ScreenProps['sheetLargestUndimmedDetentIndex'],
|
|
108
|
+
lastDetentIndex: number,
|
|
79
109
|
): number {
|
|
80
110
|
if (typeof lud === 'number') {
|
|
111
|
+
if (!isIndexInClosedRange(lud, SHEET_DIMMED_ALWAYS, lastDetentIndex)) {
|
|
112
|
+
if (__DEV__) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
"[RNScreens] Provided value of 'sheetLargestUndimmedDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.",
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
// Return default in production
|
|
118
|
+
return SHEET_DIMMED_ALWAYS;
|
|
119
|
+
}
|
|
81
120
|
return lud;
|
|
82
|
-
} else if (lud === '
|
|
83
|
-
return
|
|
121
|
+
} else if (lud === 'last') {
|
|
122
|
+
return lastDetentIndex;
|
|
84
123
|
} else if (lud === 'none' || lud === 'all') {
|
|
85
124
|
return SHEET_DIMMED_ALWAYS;
|
|
86
125
|
} else if (lud === 'large') {
|
|
@@ -93,10 +132,41 @@ function resolveSheetLargestUndimmedDetent(
|
|
|
93
132
|
}
|
|
94
133
|
}
|
|
95
134
|
|
|
135
|
+
function resolveSheetInitialDetentIndex(
|
|
136
|
+
index: ScreenProps['sheetInitialDetentIndex'],
|
|
137
|
+
lastDetentIndex: number,
|
|
138
|
+
): number {
|
|
139
|
+
if (index === 'last') {
|
|
140
|
+
index = lastDetentIndex;
|
|
141
|
+
} else if (index == null) {
|
|
142
|
+
// Intentional check for undefined & null ^
|
|
143
|
+
index = 0;
|
|
144
|
+
}
|
|
145
|
+
if (!isIndexInClosedRange(index, 0, lastDetentIndex)) {
|
|
146
|
+
if (__DEV__) {
|
|
147
|
+
throw new Error(
|
|
148
|
+
"[RNScreens] Provided value of 'sheetInitialDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.",
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
// Return default in production
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
return index;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function isIndexInClosedRange(
|
|
158
|
+
value: number,
|
|
159
|
+
lowerBound: number,
|
|
160
|
+
upperBound: number,
|
|
161
|
+
): boolean {
|
|
162
|
+
return Number.isInteger(value) && value >= lowerBound && value <= upperBound;
|
|
163
|
+
}
|
|
164
|
+
|
|
96
165
|
export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
97
166
|
function InnerScreen(props, ref) {
|
|
98
167
|
const innerRef = React.useRef<ViewConfig | null>(null);
|
|
99
168
|
React.useImperativeHandle(ref, () => innerRef.current!, []);
|
|
169
|
+
const prevActivityState = usePrevious(props.activityState);
|
|
100
170
|
|
|
101
171
|
const setRef = (ref: ViewConfig) => {
|
|
102
172
|
innerRef.current = ref;
|
|
@@ -118,13 +188,12 @@ export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
|
118
188
|
const {
|
|
119
189
|
// formSheet presentation related props
|
|
120
190
|
sheetAllowedDetents = [1.0],
|
|
121
|
-
|
|
191
|
+
sheetLargestUndimmedDetentIndex = SHEET_DIMMED_ALWAYS,
|
|
122
192
|
sheetGrabberVisible = false,
|
|
123
193
|
sheetCornerRadius = -1.0,
|
|
124
194
|
sheetExpandsWhenScrolledToEdge = true,
|
|
125
195
|
sheetElevation = 24,
|
|
126
|
-
|
|
127
|
-
|
|
196
|
+
sheetInitialDetentIndex = 0,
|
|
128
197
|
// Other
|
|
129
198
|
stackPresentation,
|
|
130
199
|
} = rest;
|
|
@@ -134,9 +203,13 @@ export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
|
134
203
|
resolveSheetAllowedDetents(sheetAllowedDetents);
|
|
135
204
|
const resolvedSheetLargestUndimmedDetent =
|
|
136
205
|
resolveSheetLargestUndimmedDetent(
|
|
137
|
-
|
|
206
|
+
sheetLargestUndimmedDetentIndex,
|
|
138
207
|
resolvedSheetAllowedDetents.length - 1,
|
|
139
208
|
);
|
|
209
|
+
const resolvedSheetInitialDetentIndex = resolveSheetInitialDetentIndex(
|
|
210
|
+
sheetInitialDetentIndex,
|
|
211
|
+
resolvedSheetAllowedDetents.length - 1,
|
|
212
|
+
);
|
|
140
213
|
// Due to how Yoga resolves layout, we need to have different components for modal nad non-modal screens
|
|
141
214
|
const AnimatedScreen =
|
|
142
215
|
Platform.OS === 'android' ||
|
|
@@ -168,6 +241,18 @@ export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
|
168
241
|
activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition
|
|
169
242
|
}
|
|
170
243
|
|
|
244
|
+
if (
|
|
245
|
+
isNativeStack &&
|
|
246
|
+
prevActivityState !== undefined &&
|
|
247
|
+
activityState !== undefined
|
|
248
|
+
) {
|
|
249
|
+
if (prevActivityState > activityState) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
'[RNScreens] activityState cannot be decreased in NativeStack',
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
171
256
|
const handleRef = (ref: ViewConfig) => {
|
|
172
257
|
if (ref?.viewConfig?.validAttributes?.style) {
|
|
173
258
|
ref.viewConfig.validAttributes.style = {
|
|
@@ -200,7 +285,7 @@ export const InnerScreen = React.forwardRef<View, ScreenProps>(
|
|
|
200
285
|
sheetGrabberVisible={sheetGrabberVisible}
|
|
201
286
|
sheetCornerRadius={sheetCornerRadius}
|
|
202
287
|
sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}
|
|
203
|
-
sheetInitialDetent={
|
|
288
|
+
sheetInitialDetent={resolvedSheetInitialDetentIndex}
|
|
204
289
|
gestureResponseDistance={{
|
|
205
290
|
start: gestureResponseDistance?.start ?? -1,
|
|
206
291
|
end: gestureResponseDistance?.end ?? -1,
|
|
@@ -12,12 +12,22 @@ import { Image, ImageProps, StyleSheet, ViewProps } from 'react-native';
|
|
|
12
12
|
import ScreenStackHeaderConfigNativeComponent from '../fabric/ScreenStackHeaderConfigNativeComponent';
|
|
13
13
|
import ScreenStackHeaderSubviewNativeComponent from '../fabric/ScreenStackHeaderSubviewNativeComponent';
|
|
14
14
|
|
|
15
|
-
export const ScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps> =
|
|
16
|
-
ScreenStackHeaderConfigNativeComponent as any;
|
|
17
15
|
export const ScreenStackHeaderSubview: React.ComponentType<
|
|
18
16
|
React.PropsWithChildren<ViewProps & { type?: HeaderSubviewTypes }>
|
|
19
17
|
> = ScreenStackHeaderSubviewNativeComponent as any;
|
|
20
18
|
|
|
19
|
+
export function ScreenStackHeaderConfig(
|
|
20
|
+
props: ScreenStackHeaderConfigProps,
|
|
21
|
+
): React.JSX.Element {
|
|
22
|
+
return (
|
|
23
|
+
<ScreenStackHeaderConfigNativeComponent
|
|
24
|
+
{...props}
|
|
25
|
+
style={styles.headerConfig}
|
|
26
|
+
pointerEvents="box-none"
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
21
31
|
export const ScreenStackHeaderBackButtonImage = (
|
|
22
32
|
props: ImageProps,
|
|
23
33
|
): JSX.Element => (
|
|
@@ -28,33 +38,45 @@ export const ScreenStackHeaderBackButtonImage = (
|
|
|
28
38
|
|
|
29
39
|
export const ScreenStackHeaderRightView = (
|
|
30
40
|
props: React.PropsWithChildren<ViewProps>,
|
|
31
|
-
): JSX.Element =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
): JSX.Element => {
|
|
42
|
+
const { style, ...rest } = props;
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<ScreenStackHeaderSubview
|
|
46
|
+
{...rest}
|
|
47
|
+
type="right"
|
|
48
|
+
style={[styles.headerSubview, style]}
|
|
49
|
+
/>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
38
52
|
|
|
39
53
|
export const ScreenStackHeaderLeftView = (
|
|
40
54
|
props: React.PropsWithChildren<ViewProps>,
|
|
41
|
-
): JSX.Element =>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
55
|
+
): JSX.Element => {
|
|
56
|
+
const { style, ...rest } = props;
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<ScreenStackHeaderSubview
|
|
60
|
+
{...rest}
|
|
61
|
+
type="left"
|
|
62
|
+
style={[styles.headerSubview, style]}
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
48
66
|
|
|
49
67
|
export const ScreenStackHeaderCenterView = (
|
|
50
68
|
props: React.PropsWithChildren<ViewProps>,
|
|
51
|
-
): JSX.Element =>
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
69
|
+
): JSX.Element => {
|
|
70
|
+
const { style, ...rest } = props;
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<ScreenStackHeaderSubview
|
|
74
|
+
{...rest}
|
|
75
|
+
type="center"
|
|
76
|
+
style={[styles.headerSubviewCenter, style]}
|
|
77
|
+
/>
|
|
78
|
+
);
|
|
79
|
+
};
|
|
58
80
|
|
|
59
81
|
export const ScreenStackHeaderSearchBarView = (
|
|
60
82
|
props: React.PropsWithChildren<SearchBarProps>,
|
|
@@ -68,11 +90,22 @@ export const ScreenStackHeaderSearchBarView = (
|
|
|
68
90
|
|
|
69
91
|
const styles = StyleSheet.create({
|
|
70
92
|
headerSubview: {
|
|
71
|
-
position: 'absolute',
|
|
72
|
-
top: 0,
|
|
73
|
-
right: 0,
|
|
74
93
|
flexDirection: 'row',
|
|
75
94
|
alignItems: 'center',
|
|
76
95
|
justifyContent: 'center',
|
|
77
96
|
},
|
|
97
|
+
headerSubviewCenter: {
|
|
98
|
+
flexDirection: 'row',
|
|
99
|
+
alignItems: 'center',
|
|
100
|
+
justifyContent: 'center',
|
|
101
|
+
flexShrink: 1,
|
|
102
|
+
},
|
|
103
|
+
headerConfig: {
|
|
104
|
+
position: 'absolute',
|
|
105
|
+
top: '-100%',
|
|
106
|
+
width: '100%',
|
|
107
|
+
flexDirection: 'row',
|
|
108
|
+
justifyContent: 'space-between',
|
|
109
|
+
alignItems: 'center',
|
|
110
|
+
},
|
|
78
111
|
});
|
|
@@ -75,6 +75,7 @@ export interface NativeProps extends ViewProps {
|
|
|
75
75
|
sheetGrabberVisible?: WithDefault<boolean, false>;
|
|
76
76
|
sheetCornerRadius?: WithDefault<Float, -1.0>;
|
|
77
77
|
sheetExpandsWhenScrolledToEdge?: WithDefault<boolean, false>;
|
|
78
|
+
sheetInitialDetent?: WithDefault<Int32, 0>;
|
|
78
79
|
customAnimationOnSwipe?: boolean;
|
|
79
80
|
fullScreenSwipeEnabled?: boolean;
|
|
80
81
|
fullScreenSwipeShadowEnabled?: boolean;
|
|
@@ -418,7 +418,7 @@ export type NativeStackNavigationOptions = {
|
|
|
418
418
|
*
|
|
419
419
|
* Defaults to `0` - which represents first detent in the detents array.
|
|
420
420
|
*/
|
|
421
|
-
|
|
421
|
+
sheetInitialDetentIndex?: ScreenProps['sheetInitialDetentIndex'];
|
|
422
422
|
/**
|
|
423
423
|
* The largest sheet detent for which a view underneath won't be dimmed.
|
|
424
424
|
* Works only when `stackPresentation` is set to `formSheet`.
|
|
@@ -436,7 +436,7 @@ export type NativeStackNavigationOptions = {
|
|
|
436
436
|
*
|
|
437
437
|
* Defaults to `none`, indicating that the dimming view should be always present.
|
|
438
438
|
*/
|
|
439
|
-
|
|
439
|
+
sheetLargestUndimmedDetentIndex?: ScreenProps['sheetLargestUndimmedDetentIndex'];
|
|
440
440
|
/**
|
|
441
441
|
* How the screen should appear/disappear when pushed or popped at the top of the stack.
|
|
442
442
|
* The following values are currently supported:
|
|
@@ -448,7 +448,6 @@ export type NativeStackNavigationOptions = {
|
|
|
448
448
|
* - "slide_from_bottom" – performs a slide from bottom animation
|
|
449
449
|
* - "slide_from_right" - slide in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
450
450
|
* - "slide_from_left" - slide in the new screen from left to right
|
|
451
|
-
* - "ios" - @deprecated iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS) (will be removed in v4.0.0 in favor of `ios_from_right`)
|
|
452
451
|
* - "ios_from_right" - iOS like slide in animation. pushes in the new screen from right to left (Android only, resolves to default transition on iOS)
|
|
453
452
|
* - "ios_from_left" - iOS like slide in animation. pushes in the new screen from left to right (Android only, resolves to default transition on iOS)
|
|
454
453
|
* - "none" – the screen appears/dissapears without an animation
|
|
@@ -195,12 +195,12 @@ const RouteView = ({
|
|
|
195
195
|
headerShown,
|
|
196
196
|
hideKeyboardOnSwipe,
|
|
197
197
|
homeIndicatorHidden,
|
|
198
|
-
|
|
198
|
+
sheetLargestUndimmedDetentIndex = 'none',
|
|
199
199
|
sheetGrabberVisible = false,
|
|
200
200
|
sheetCornerRadius = -1.0,
|
|
201
201
|
sheetElevation = 24,
|
|
202
202
|
sheetExpandsWhenScrolledToEdge = true,
|
|
203
|
-
|
|
203
|
+
sheetInitialDetentIndex = 0,
|
|
204
204
|
nativeBackButtonDismissalEnabled = false,
|
|
205
205
|
navigationBarColor,
|
|
206
206
|
navigationBarTranslucent,
|
|
@@ -318,9 +318,9 @@ const RouteView = ({
|
|
|
318
318
|
hasLargeHeader={hasLargeHeader}
|
|
319
319
|
style={[StyleSheet.absoluteFill, unstable_screenStyle]}
|
|
320
320
|
sheetAllowedDetents={sheetAllowedDetents}
|
|
321
|
-
|
|
321
|
+
sheetLargestUndimmedDetentIndex={sheetLargestUndimmedDetentIndex}
|
|
322
322
|
sheetGrabberVisible={sheetGrabberVisible}
|
|
323
|
-
|
|
323
|
+
sheetInitialDetentIndex={sheetInitialDetentIndex}
|
|
324
324
|
sheetCornerRadius={sheetCornerRadius}
|
|
325
325
|
sheetElevation={sheetElevation}
|
|
326
326
|
sheetExpandsWhenScrolledToEdge={sheetExpandsWhenScrolledToEdge}
|
|
@@ -355,7 +355,6 @@ const RouteView = ({
|
|
|
355
355
|
});
|
|
356
356
|
}}
|
|
357
357
|
onWillAppear={() => {
|
|
358
|
-
console.log(`onWillAppear/transitionStart route: ${route.key}`);
|
|
359
358
|
navigation.emit({
|
|
360
359
|
type: 'transitionStart',
|
|
361
360
|
data: { closing: false },
|
|
@@ -363,7 +362,6 @@ const RouteView = ({
|
|
|
363
362
|
});
|
|
364
363
|
}}
|
|
365
364
|
onWillDisappear={() => {
|
|
366
|
-
console.log(`onWillDisappear/transitionStart route: ${route.key}`);
|
|
367
365
|
navigation.emit({
|
|
368
366
|
type: 'transitionStart',
|
|
369
367
|
data: { closing: true },
|
|
@@ -371,12 +369,10 @@ const RouteView = ({
|
|
|
371
369
|
});
|
|
372
370
|
}}
|
|
373
371
|
onAppear={() => {
|
|
374
|
-
console.log(`onAppear/appear route: ${route.key}`);
|
|
375
372
|
navigation.emit({
|
|
376
373
|
type: 'appear',
|
|
377
374
|
target: route.key,
|
|
378
375
|
});
|
|
379
|
-
console.log(`onAppear/transitionEnd route: ${route.key}`);
|
|
380
376
|
navigation.emit({
|
|
381
377
|
type: 'transitionEnd',
|
|
382
378
|
data: { closing: false },
|
|
@@ -384,7 +380,6 @@ const RouteView = ({
|
|
|
384
380
|
});
|
|
385
381
|
}}
|
|
386
382
|
onDisappear={() => {
|
|
387
|
-
console.log(`onDisappear/transitionEnd route: ${route.key}`);
|
|
388
383
|
navigation.emit({
|
|
389
384
|
type: 'transitionEnd',
|
|
390
385
|
data: { closing: true },
|
|
@@ -404,7 +399,6 @@ const RouteView = ({
|
|
|
404
399
|
}
|
|
405
400
|
}}
|
|
406
401
|
onDismissed={e => {
|
|
407
|
-
console.log(`onDismissed/dismiss route: ${route.key}`);
|
|
408
402
|
navigation.emit({
|
|
409
403
|
type: 'dismiss',
|
|
410
404
|
target: route.key,
|