react-native-screens 3.9.0 → 3.11.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/LICENSE +1 -1
- package/README.md +47 -7
- package/android/build.gradle +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +35 -52
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +83 -34
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +38 -33
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +77 -42
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +25 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +10 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +107 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +155 -0
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
- package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
- package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
- package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
- package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
- package/android/src/main/res/anim/rns_fade_in.xml +7 -0
- package/android/src/main/res/anim/rns_fade_out.xml +7 -0
- package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
- package/createNativeStackNavigator/README.md +12 -0
- package/ios/RNSScreen.h +10 -0
- package/ios/RNSScreen.m +38 -0
- package/ios/RNSScreenContainer.m +5 -0
- package/ios/RNSScreenStack.m +29 -13
- package/ios/RNSScreenStackAnimator.m +45 -14
- package/ios/RNSScreenStackHeaderConfig.m +4 -1
- package/ios/RNSScreenWindowTraits.h +1 -0
- package/ios/RNSScreenWindowTraits.m +20 -0
- package/ios/UIViewController+RNScreens.m +10 -0
- package/lib/commonjs/index.js +17 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.native.js +66 -18
- package/lib/commonjs/index.native.js.map +1 -1
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
- package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
- package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
- package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
- package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/commonjs/reanimated/index.js +2 -2
- package/lib/commonjs/reanimated/index.js.map +1 -1
- package/lib/commonjs/utils.js +20 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.native.js +65 -19
- package/lib/module/index.native.js.map +1 -1
- package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
- package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
- package/lib/module/native-stack/views/HeaderConfig.js +46 -5
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +33 -4
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
- package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
- package/lib/module/reanimated/ReanimatedScreen.js +6 -73
- package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
- package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
- package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
- package/lib/module/reanimated/index.js +1 -1
- package/lib/module/reanimated/index.js.map +1 -1
- package/lib/module/utils.js +8 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/native-stack/types.d.ts +34 -2
- package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
- package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
- package/lib/typescript/reanimated/index.d.ts +1 -1
- package/lib/typescript/types.d.ts +101 -1
- package/lib/typescript/utils.d.ts +2 -0
- package/native-stack/README.md +70 -8
- package/package.json +2 -1
- package/reanimated/package.json +6 -0
- package/src/index.native.tsx +94 -36
- package/src/index.tsx +4 -0
- package/src/native-stack/types.tsx +34 -2
- package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
- package/src/native-stack/views/HeaderConfig.tsx +46 -3
- package/src/native-stack/views/NativeStackView.tsx +33 -4
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
- package/src/reanimated/ReanimatedScreen.tsx +6 -84
- package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
- package/src/reanimated/index.tsx +1 -1
- package/src/types.tsx +101 -1
- package/src/utils.ts +12 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useBackPressSubscription = useBackPressSubscription;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This hook is an abstraction for keeping back press subscription
|
|
16
|
+
* logic in one place.
|
|
17
|
+
*/
|
|
18
|
+
function useBackPressSubscription({
|
|
19
|
+
onBackPress,
|
|
20
|
+
isDisabled
|
|
21
|
+
}) {
|
|
22
|
+
const [isActive, setIsActive] = _react.default.useState(false);
|
|
23
|
+
|
|
24
|
+
const subscription = _react.default.useRef();
|
|
25
|
+
|
|
26
|
+
const clearSubscription = _react.default.useCallback((shouldSetActive = true) => {
|
|
27
|
+
var _subscription$current;
|
|
28
|
+
|
|
29
|
+
(_subscription$current = subscription.current) === null || _subscription$current === void 0 ? void 0 : _subscription$current.remove();
|
|
30
|
+
subscription.current = undefined;
|
|
31
|
+
if (shouldSetActive) setIsActive(false);
|
|
32
|
+
}, []);
|
|
33
|
+
|
|
34
|
+
const createSubscription = _react.default.useCallback(() => {
|
|
35
|
+
if (!isDisabled) {
|
|
36
|
+
var _subscription$current2;
|
|
37
|
+
|
|
38
|
+
(_subscription$current2 = subscription.current) === null || _subscription$current2 === void 0 ? void 0 : _subscription$current2.remove();
|
|
39
|
+
subscription.current = _reactNative.BackHandler.addEventListener('hardwareBackPress', onBackPress);
|
|
40
|
+
setIsActive(true);
|
|
41
|
+
}
|
|
42
|
+
}, [isDisabled, onBackPress]);
|
|
43
|
+
|
|
44
|
+
const handleAttached = _react.default.useCallback(() => {
|
|
45
|
+
if (isActive) {
|
|
46
|
+
createSubscription();
|
|
47
|
+
}
|
|
48
|
+
}, [createSubscription, isActive]);
|
|
49
|
+
|
|
50
|
+
const handleDetached = _react.default.useCallback(() => {
|
|
51
|
+
clearSubscription(false);
|
|
52
|
+
}, [clearSubscription]);
|
|
53
|
+
|
|
54
|
+
_react.default.useEffect(() => {
|
|
55
|
+
if (isDisabled) {
|
|
56
|
+
clearSubscription();
|
|
57
|
+
}
|
|
58
|
+
}, [isDisabled, clearSubscription]);
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
handleAttached,
|
|
62
|
+
handleDetached,
|
|
63
|
+
createSubscription,
|
|
64
|
+
clearSubscription
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=useBackPressSubscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["useBackPressSubscription.tsx"],"names":["useBackPressSubscription","onBackPress","isDisabled","isActive","setIsActive","React","useState","subscription","useRef","clearSubscription","useCallback","shouldSetActive","current","remove","undefined","createSubscription","BackHandler","addEventListener","handleAttached","handleDetached","useEffect"],"mappings":";;;;;;;AAAA;;AACA;;;;AAcA;AACA;AACA;AACA;AACO,SAASA,wBAAT,CAAkC;AACvCC,EAAAA,WADuC;AAEvCC,EAAAA;AAFuC,CAAlC,EAG4B;AACjC,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BC,eAAMC,QAAN,CAAe,KAAf,CAAhC;;AACA,QAAMC,YAAY,GAAGF,eAAMG,MAAN,EAArB;;AAEA,QAAMC,iBAAiB,GAAGJ,eAAMK,WAAN,CAAkB,CAACC,eAAe,GAAG,IAAnB,KAA4B;AAAA;;AACtE,6BAAAJ,YAAY,CAACK,OAAb,gFAAsBC,MAAtB;AACAN,IAAAA,YAAY,CAACK,OAAb,GAAuBE,SAAvB;AACA,QAAIH,eAAJ,EAAqBP,WAAW,CAAC,KAAD,CAAX;AACtB,GAJyB,EAIvB,EAJuB,CAA1B;;AAMA,QAAMW,kBAAkB,GAAGV,eAAMK,WAAN,CAAkB,MAAM;AACjD,QAAI,CAACR,UAAL,EAAiB;AAAA;;AACf,gCAAAK,YAAY,CAACK,OAAb,kFAAsBC,MAAtB;AACAN,MAAAA,YAAY,CAACK,OAAb,GAAuBI,yBAAYC,gBAAZ,CACrB,mBADqB,EAErBhB,WAFqB,CAAvB;AAIAG,MAAAA,WAAW,CAAC,IAAD,CAAX;AACD;AACF,GAT0B,EASxB,CAACF,UAAD,EAAaD,WAAb,CATwB,CAA3B;;AAWA,QAAMiB,cAAc,GAAGb,eAAMK,WAAN,CAAkB,MAAM;AAC7C,QAAIP,QAAJ,EAAc;AACZY,MAAAA,kBAAkB;AACnB;AACF,GAJsB,EAIpB,CAACA,kBAAD,EAAqBZ,QAArB,CAJoB,CAAvB;;AAMA,QAAMgB,cAAc,GAAGd,eAAMK,WAAN,CAAkB,MAAM;AAC7CD,IAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,GAFsB,EAEpB,CAACA,iBAAD,CAFoB,CAAvB;;AAIAJ,iBAAMe,SAAN,CAAgB,MAAM;AACpB,QAAIlB,UAAJ,EAAgB;AACdO,MAAAA,iBAAiB;AAClB;AACF,GAJD,EAIG,CAACP,UAAD,EAAaO,iBAAb,CAJH;;AAMA,SAAO;AACLS,IAAAA,cADK;AAELC,IAAAA,cAFK;AAGLJ,IAAAA,kBAHK;AAILN,IAAAA;AAJK,GAAP;AAMD","sourcesContent":["import React from 'react';\nimport { BackHandler, NativeEventSubscription } from 'react-native';\n\ninterface Args {\n onBackPress: () => boolean;\n isDisabled: boolean;\n}\n\ninterface UseBackPressSubscription {\n handleAttached: () => void;\n handleDetached: () => void;\n createSubscription: () => void;\n clearSubscription: () => void;\n}\n\n/**\n * This hook is an abstraction for keeping back press subscription\n * logic in one place.\n */\nexport function useBackPressSubscription({\n onBackPress,\n isDisabled,\n}: Args): UseBackPressSubscription {\n const [isActive, setIsActive] = React.useState(false);\n const subscription = React.useRef<NativeEventSubscription | undefined>();\n\n const clearSubscription = React.useCallback((shouldSetActive = true) => {\n subscription.current?.remove();\n subscription.current = undefined;\n if (shouldSetActive) setIsActive(false);\n }, []);\n\n const createSubscription = React.useCallback(() => {\n if (!isDisabled) {\n subscription.current?.remove();\n subscription.current = BackHandler.addEventListener(\n 'hardwareBackPress',\n onBackPress\n );\n setIsActive(true);\n }\n }, [isDisabled, onBackPress]);\n\n const handleAttached = React.useCallback(() => {\n if (isActive) {\n createSubscription();\n }\n }, [createSubscription, isActive]);\n\n const handleDetached = React.useCallback(() => {\n clearSubscription(false);\n }, [clearSubscription]);\n\n React.useEffect(() => {\n if (isDisabled) {\n clearSubscription();\n }\n }, [isDisabled, clearSubscription]);\n\n return {\n handleAttached,\n handleDetached,\n createSubscription,\n clearSubscription,\n };\n}\n"]}
|
|
@@ -13,6 +13,8 @@ var _reactNative = require("react-native");
|
|
|
13
13
|
|
|
14
14
|
var _reactNativeScreens = require("react-native-screens");
|
|
15
15
|
|
|
16
|
+
var _useBackPressSubscription = require("../utils/useBackPressSubscription");
|
|
17
|
+
|
|
16
18
|
var _FontProcessor = require("./FontProcessor");
|
|
17
19
|
|
|
18
20
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
@@ -50,8 +52,46 @@ function HeaderConfig({
|
|
|
50
52
|
const {
|
|
51
53
|
colors
|
|
52
54
|
} = (0, _native.useTheme)();
|
|
53
|
-
const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary;
|
|
54
|
-
|
|
55
|
+
const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary; // We need to use back press subscription here to override back button behavior on JS side.
|
|
56
|
+
// Because screens are usually used with react-navigation and this library overrides back button
|
|
57
|
+
// we need to handle it first in case when search bar is open
|
|
58
|
+
|
|
59
|
+
const {
|
|
60
|
+
handleAttached,
|
|
61
|
+
handleDetached,
|
|
62
|
+
clearSubscription,
|
|
63
|
+
createSubscription
|
|
64
|
+
} = (0, _useBackPressSubscription.useBackPressSubscription)({
|
|
65
|
+
onBackPress: _reactNativeScreens.executeNativeBackPress,
|
|
66
|
+
isDisabled: !searchBar || !!searchBar.disableBackButtonOverride
|
|
67
|
+
});
|
|
68
|
+
const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = (0, _FontProcessor.processFonts)([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]); // We want to clear clearSubscription only when components unmounts or search bar changes
|
|
69
|
+
|
|
70
|
+
React.useEffect(() => clearSubscription, [searchBar]);
|
|
71
|
+
const processedSearchBarOptions = React.useMemo(() => {
|
|
72
|
+
if (_reactNative.Platform.OS === 'android' && searchBar && !searchBar.disableBackButtonOverride) {
|
|
73
|
+
const onFocus = (...args) => {
|
|
74
|
+
var _searchBar$onFocus;
|
|
75
|
+
|
|
76
|
+
createSubscription();
|
|
77
|
+
(_searchBar$onFocus = searchBar.onFocus) === null || _searchBar$onFocus === void 0 ? void 0 : _searchBar$onFocus.call(searchBar, ...args);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const onClose = (...args) => {
|
|
81
|
+
var _searchBar$onClose;
|
|
82
|
+
|
|
83
|
+
clearSubscription();
|
|
84
|
+
(_searchBar$onClose = searchBar.onClose) === null || _searchBar$onClose === void 0 ? void 0 : _searchBar$onClose.call(searchBar, ...args);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
return { ...searchBar,
|
|
88
|
+
onFocus,
|
|
89
|
+
onClose
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return searchBar;
|
|
94
|
+
}, [searchBar, createSubscription, clearSubscription]);
|
|
55
95
|
return /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderConfig, {
|
|
56
96
|
backButtonInCustomView: backButtonInCustomView,
|
|
57
97
|
backgroundColor: headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card,
|
|
@@ -78,7 +118,9 @@ function HeaderConfig({
|
|
|
78
118
|
titleFontSize: headerTitleStyle.fontSize,
|
|
79
119
|
titleFontWeight: headerTitleStyle.fontWeight,
|
|
80
120
|
topInsetEnabled: headerTopInsetEnabled,
|
|
81
|
-
translucent: headerTranslucent === true
|
|
121
|
+
translucent: headerTranslucent === true,
|
|
122
|
+
onAttached: handleAttached,
|
|
123
|
+
onDetached: handleDetached
|
|
82
124
|
}, headerRight !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderRightView, null, headerRight({
|
|
83
125
|
tintColor
|
|
84
126
|
})) : null, backButtonImage !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderBackButtonImage, {
|
|
@@ -88,6 +130,6 @@ function HeaderConfig({
|
|
|
88
130
|
tintColor
|
|
89
131
|
})) : null, headerCenter !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderCenterView, null, headerCenter({
|
|
90
132
|
tintColor
|
|
91
|
-
})) : null,
|
|
133
|
+
})) : null, _reactNativeScreens.isSearchBarAvailableForCurrentPlatform && processedSearchBarOptions !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(_reactNativeScreens.SearchBar, processedSearchBarOptions)) : null);
|
|
92
134
|
}
|
|
93
135
|
//# sourceMappingURL=HeaderConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HeaderConfig.tsx"],"names":["HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text","Platform","OS"],"mappings":"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","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {Platform.OS === 'ios' && searchBar !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...searchBar} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["HeaderConfig.tsx"],"names":["HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","handleAttached","handleDetached","clearSubscription","createSubscription","onBackPress","executeNativeBackPress","isDisabled","disableBackButtonOverride","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","React","useEffect","processedSearchBarOptions","useMemo","Platform","OS","onFocus","args","onClose","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text","isSearchBarAvailableForCurrentPlatform"],"mappings":"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","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n SearchBarProps,\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { useBackPressSubscription } from '../utils/useBackPressSubscription';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n // We need to use back press subscription here to override back button behavior on JS side.\n // Because screens are usually used with react-navigation and this library overrides back button\n // we need to handle it first in case when search bar is open\n const {\n handleAttached,\n handleDetached,\n clearSubscription,\n createSubscription,\n } = useBackPressSubscription({\n onBackPress: executeNativeBackPress,\n isDisabled: !searchBar || !!searchBar.disableBackButtonOverride,\n });\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n // We want to clear clearSubscription only when components unmounts or search bar changes\n React.useEffect(() => clearSubscription, [searchBar]);\n\n const processedSearchBarOptions = React.useMemo(() => {\n if (\n Platform.OS === 'android' &&\n searchBar &&\n !searchBar.disableBackButtonOverride\n ) {\n const onFocus: SearchBarProps['onFocus'] = (...args) => {\n createSubscription();\n searchBar.onFocus?.(...args);\n };\n const onClose: SearchBarProps['onClose'] = (...args) => {\n clearSubscription();\n searchBar.onClose?.(...args);\n };\n\n return { ...searchBar, onFocus, onClose };\n }\n return searchBar;\n }, [searchBar, createSubscription, clearSubscription]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}\n onAttached={handleAttached}\n onDetached={handleDetached}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {isSearchBarAvailableForCurrentPlatform &&\n processedSearchBarOptions !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...processedSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
|
|
@@ -116,24 +116,48 @@ const RouteView = ({
|
|
|
116
116
|
render: renderScene
|
|
117
117
|
} = descriptors[route.key];
|
|
118
118
|
const {
|
|
119
|
-
customAnimationOnSwipe,
|
|
120
|
-
fullScreenSwipeEnabled,
|
|
121
119
|
gestureEnabled,
|
|
122
120
|
headerShown,
|
|
121
|
+
homeIndicatorHidden,
|
|
123
122
|
nativeBackButtonDismissalEnabled = false,
|
|
123
|
+
navigationBarColor,
|
|
124
|
+
navigationBarHidden,
|
|
124
125
|
replaceAnimation = 'pop',
|
|
125
126
|
screenOrientation,
|
|
126
|
-
stackAnimation,
|
|
127
127
|
statusBarAnimation,
|
|
128
128
|
statusBarColor,
|
|
129
129
|
statusBarHidden,
|
|
130
130
|
statusBarStyle,
|
|
131
|
-
statusBarTranslucent
|
|
131
|
+
statusBarTranslucent,
|
|
132
|
+
swipeDirection = 'horizontal',
|
|
133
|
+
transitionDuration
|
|
132
134
|
} = options;
|
|
133
135
|
let {
|
|
136
|
+
customAnimationOnSwipe,
|
|
137
|
+
fullScreenSwipeEnabled,
|
|
138
|
+
stackAnimation,
|
|
134
139
|
stackPresentation = 'push'
|
|
135
140
|
} = options;
|
|
136
141
|
|
|
142
|
+
if (swipeDirection === 'vertical') {
|
|
143
|
+
// for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`
|
|
144
|
+
// so the screen can be dismissed from any point on screen.
|
|
145
|
+
// `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,
|
|
146
|
+
// otherwise `simple_push` will be used.
|
|
147
|
+
// Also, the default animation for this direction seems to be `slide_from_bottom`.
|
|
148
|
+
if (fullScreenSwipeEnabled === undefined) {
|
|
149
|
+
fullScreenSwipeEnabled = true;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (customAnimationOnSwipe === undefined) {
|
|
153
|
+
customAnimationOnSwipe = true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (stackAnimation === undefined) {
|
|
157
|
+
stackAnimation = 'slide_from_bottom';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
137
161
|
if (index === 0) {
|
|
138
162
|
// first screen should always be treated as `push`, it resolves problems with no header animation
|
|
139
163
|
// for navigator with first screen as `modal` and the next as `push`
|
|
@@ -153,8 +177,11 @@ const RouteView = ({
|
|
|
153
177
|
style: _reactNative.StyleSheet.absoluteFill,
|
|
154
178
|
customAnimationOnSwipe: customAnimationOnSwipe,
|
|
155
179
|
fullScreenSwipeEnabled: fullScreenSwipeEnabled,
|
|
180
|
+
homeIndicatorHidden: homeIndicatorHidden,
|
|
156
181
|
gestureEnabled: isAndroid ? false : gestureEnabled,
|
|
157
182
|
nativeBackButtonDismissalEnabled: nativeBackButtonDismissalEnabled,
|
|
183
|
+
navigationBarColor: navigationBarColor,
|
|
184
|
+
navigationBarHidden: navigationBarHidden,
|
|
158
185
|
replaceAnimation: replaceAnimation,
|
|
159
186
|
screenOrientation: screenOrientation,
|
|
160
187
|
stackAnimation: stackAnimation,
|
|
@@ -164,6 +191,8 @@ const RouteView = ({
|
|
|
164
191
|
statusBarHidden: statusBarHidden,
|
|
165
192
|
statusBarStyle: statusBarStyle,
|
|
166
193
|
statusBarTranslucent: statusBarTranslucent,
|
|
194
|
+
swipeDirection: swipeDirection,
|
|
195
|
+
transitionDuration: transitionDuration,
|
|
167
196
|
onHeaderBackButtonClicked: () => {
|
|
168
197
|
navigation.dispatch({ ..._native.StackActions.pop(),
|
|
169
198
|
source: route.key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NativeStackView.tsx"],"names":["isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","React","useContext","ScreenContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","StyleSheet","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","customAnimationOnSwipe","fullScreenSwipeEnabled","gestureEnabled","nativeBackButtonDismissalEnabled","replaceAnimation","screenOrientation","stackAnimation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","isHeaderInPush","parentHeaderHeight","HeaderHeightContext","dispatch","StackActions","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n gestureEnabled,\n headerShown,\n nativeBackButtonDismissalEnabled = false,\n replaceAnimation = 'pop',\n screenOrientation,\n stackAnimation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n } = options;\n\n let { stackPresentation = 'push' } = options;\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["NativeStackView.tsx"],"names":["isAndroid","Platform","OS","Container","View","__DEV__","DebugContainer","props","stackPresentation","rest","MaybeNestedStack","options","route","children","colors","headerShown","contentStyle","Screen","React","useContext","ScreenContext","isHeaderInModal","headerShownPreviousRef","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","topInset","top","dimensions","headerHeight","StyleSheet","absoluteFill","RouteView","descriptors","index","navigation","stateKey","render","renderScene","key","gestureEnabled","homeIndicatorHidden","nativeBackButtonDismissalEnabled","navigationBarColor","navigationBarHidden","replaceAnimation","screenOrientation","statusBarAnimation","statusBarColor","statusBarHidden","statusBarStyle","statusBarTranslucent","swipeDirection","transitionDuration","customAnimationOnSwipe","fullScreenSwipeEnabled","stackAnimation","undefined","isHeaderInPush","parentHeaderHeight","HeaderHeightContext","dispatch","StackActions","pop","source","target","emit","type","data","closing","e","dismissCount","nativeEvent","NativeStackViewInner","state","routes","map","NativeStackView","create","flex"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Platform, StyleSheet, View, ViewProps } from 'react-native';\n// @ts-ignore Getting private component\nimport AppContainer from 'react-native/Libraries/ReactNative/AppContainer';\nimport warnOnce from 'warn-once';\nimport {\n ScreenStack,\n StackPresentationTypes,\n ScreenContext,\n} from 'react-native-screens';\nimport {\n ParamListBase,\n StackActions,\n StackNavigationState,\n useTheme,\n Route,\n NavigationState,\n PartialState,\n} from '@react-navigation/native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport HeaderConfig from './HeaderConfig';\nimport SafeAreaProviderCompat from '../utils/SafeAreaProviderCompat';\nimport getDefaultHeaderHeight from '../utils/getDefaultHeaderHeight';\nimport HeaderHeightContext from '../utils/HeaderHeightContext';\n\nconst isAndroid = Platform.OS === 'android';\n\nlet Container = View;\n\nif (__DEV__) {\n const DebugContainer = (\n props: ViewProps & { stackPresentation: StackPresentationTypes }\n ) => {\n const { stackPresentation, ...rest } = props;\n if (Platform.OS === 'ios' && stackPresentation !== 'push') {\n return (\n <AppContainer>\n <View {...rest} />\n </AppContainer>\n );\n }\n return <View {...rest} />;\n };\n // @ts-ignore Wrong props\n Container = DebugContainer;\n}\n\nconst MaybeNestedStack = ({\n options,\n route,\n stackPresentation,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n stackPresentation: StackPresentationTypes;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { headerShown = true, contentStyle } = options;\n\n const Screen = React.useContext(ScreenContext);\n\n const isHeaderInModal = isAndroid\n ? false\n : stackPresentation !== 'push' && headerShown === true;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n stackPresentation !== 'push' &&\n headerShownPreviousRef.current !== headerShown,\n `Dynamically changing 'headerShown' in modals will result in remounting the screen and losing all local state. See options for the screen '${route.name}'.`\n );\n\n headerShownPreviousRef.current = headerShown;\n }, [headerShown, stackPresentation, route.name]);\n\n const content = (\n <Container\n style={[\n styles.container,\n stackPresentation !== 'transparentModal' &&\n stackPresentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n // @ts-ignore Wrong props passed to View\n stackPresentation={stackPresentation}>\n {children}\n </Container>\n );\n\n const topInset = useSafeAreaInsets().top;\n const dimensions = useSafeAreaFrame();\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled isNativeStack style={StyleSheet.absoluteFill}>\n <HeaderHeightContext.Provider value={headerHeight}>\n <HeaderConfig {...options} route={route} />\n {content}\n </HeaderHeightContext.Provider>\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype NavigationRoute<\n ParamList extends ParamListBase,\n RouteName extends keyof ParamList\n> = Route<Extract<RouteName, string>, ParamList[RouteName]> & {\n state?: NavigationState | PartialState<NavigationState>;\n};\n\nconst RouteView = ({\n descriptors,\n route,\n index,\n navigation,\n stateKey,\n}: {\n descriptors: NativeStackDescriptorMap;\n route: NavigationRoute<ParamListBase, string>;\n index: number;\n navigation: NativeStackNavigationHelpers;\n stateKey: string;\n}) => {\n const { options, render: renderScene } = descriptors[route.key];\n const {\n gestureEnabled,\n headerShown,\n homeIndicatorHidden,\n nativeBackButtonDismissalEnabled = false,\n navigationBarColor,\n navigationBarHidden,\n replaceAnimation = 'pop',\n screenOrientation,\n statusBarAnimation,\n statusBarColor,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n swipeDirection = 'horizontal',\n transitionDuration,\n } = options;\n\n let {\n customAnimationOnSwipe,\n fullScreenSwipeEnabled,\n stackAnimation,\n stackPresentation = 'push',\n } = options;\n\n if (swipeDirection === 'vertical') {\n // for `vertical` direction to work, we need to set `fullScreenSwipeEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnSwipe` needs to be set to `true` so the `stackAnimation` set by user can be used,\n // otherwise `simple_push` will be used.\n // Also, the default animation for this direction seems to be `slide_from_bottom`.\n if (fullScreenSwipeEnabled === undefined) {\n fullScreenSwipeEnabled = true;\n }\n if (customAnimationOnSwipe === undefined) {\n customAnimationOnSwipe = true;\n }\n if (stackAnimation === undefined) {\n stackAnimation = 'slide_from_bottom';\n }\n }\n\n if (index === 0) {\n // first screen should always be treated as `push`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `push`\n stackPresentation = 'push';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : stackPresentation === 'push' && headerShown !== false;\n\n const dimensions = useSafeAreaFrame();\n const topInset = useSafeAreaInsets().top;\n const headerHeight = getDefaultHeaderHeight(\n dimensions,\n topInset,\n stackPresentation\n );\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const Screen = React.useContext(ScreenContext);\n\n return (\n <Screen\n key={route.key}\n enabled\n isNativeStack\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnSwipe}\n fullScreenSwipeEnabled={fullScreenSwipeEnabled}\n homeIndicatorHidden={homeIndicatorHidden}\n gestureEnabled={isAndroid ? false : gestureEnabled}\n nativeBackButtonDismissalEnabled={nativeBackButtonDismissalEnabled}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={replaceAnimation}\n screenOrientation={screenOrientation}\n stackAnimation={stackAnimation}\n stackPresentation={stackPresentation}\n statusBarAnimation={statusBarAnimation}\n statusBarColor={statusBarColor}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={swipeDirection}\n transitionDuration={transitionDuration}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: stateKey,\n });\n }}\n onWillAppear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: false },\n target: route.key,\n });\n }}\n onWillDisappear={() => {\n navigation.emit({\n type: 'transitionStart',\n data: { closing: true },\n target: route.key,\n });\n }}\n onAppear={() => {\n navigation.emit({\n type: 'appear',\n target: route.key,\n });\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: false },\n target: route.key,\n });\n }}\n onDisappear={() => {\n navigation.emit({\n type: 'transitionEnd',\n data: { closing: true },\n target: route.key,\n });\n }}\n onDismissed={(e) => {\n navigation.emit({\n type: 'dismiss',\n target: route.key,\n });\n\n const dismissCount =\n e.nativeEvent.dismissCount > 0 ? e.nativeEvent.dismissCount : 1;\n\n navigation.dispatch({\n ...StackActions.pop(dismissCount),\n source: route.key,\n target: stateKey,\n });\n }}>\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false ? headerHeight : parentHeaderHeight ?? 0\n }>\n <HeaderConfig {...options} route={route} headerShown={isHeaderInPush} />\n <MaybeNestedStack\n options={options}\n route={route}\n stackPresentation={stackPresentation}>\n {renderScene()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({\n state,\n navigation,\n descriptors,\n}: Props): JSX.Element {\n const { key, routes } = state;\n\n return (\n <ScreenStack style={styles.container}>\n {routes.map((route, index) => (\n <RouteView\n key={route.key}\n descriptors={descriptors}\n route={route}\n index={index}\n navigation={navigation}\n stateKey={key}\n />\n ))}\n </ScreenStack>\n );\n}\n\nexport default function NativeStackView(props: Props) {\n return (\n <SafeAreaProviderCompat>\n <NativeStackViewInner {...props} />\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n});\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
|
|
12
|
+
var _reactNativeScreens = require("react-native-screens");
|
|
13
|
+
|
|
14
|
+
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
15
|
+
|
|
16
|
+
var _ReanimatedTransitionProgressContext = _interopRequireDefault(require("./ReanimatedTransitionProgressContext"));
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
+
|
|
24
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
|
+
|
|
26
|
+
const AnimatedScreen = _reactNativeReanimated.default.createAnimatedComponent(_reactNativeScreens.Screen);
|
|
27
|
+
|
|
28
|
+
const ReanimatedNativeStackScreen = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
29
|
+
const {
|
|
30
|
+
children,
|
|
31
|
+
...rest
|
|
32
|
+
} = props;
|
|
33
|
+
const progress = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
34
|
+
const closing = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
35
|
+
const goingForward = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
|
|
37
|
+
, _extends({
|
|
38
|
+
ref: ref,
|
|
39
|
+
onTransitionProgressReanimated: (0, _reactNativeReanimated.useEvent)(event => {
|
|
40
|
+
'worklet';
|
|
41
|
+
|
|
42
|
+
progress.value = event.progress;
|
|
43
|
+
closing.value = event.closing;
|
|
44
|
+
goingForward.value = event.goingForward;
|
|
45
|
+
}, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
|
|
46
|
+
// @ts-ignore wrong type
|
|
47
|
+
_reactNative.Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
|
|
48
|
+
}, rest), /*#__PURE__*/_react.default.createElement(_ReanimatedTransitionProgressContext.default.Provider, {
|
|
49
|
+
value: {
|
|
50
|
+
progress: progress,
|
|
51
|
+
closing: closing,
|
|
52
|
+
goingForward: goingForward
|
|
53
|
+
}
|
|
54
|
+
}, children));
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
ReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';
|
|
58
|
+
var _default = ReanimatedNativeStackScreen;
|
|
59
|
+
exports.default = _default;
|
|
60
|
+
//# sourceMappingURL=ReanimatedNativeStackScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ReanimatedNativeStackScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","ReanimatedNativeStackScreen","React","forwardRef","props","ref","children","rest","progress","closing","goingForward","event","value","Platform","OS","displayName"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAOA;;AACA;;;;;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,2BAA2B,gBAAGC,eAAMC,UAAN,CAGlC,CAACC,KAAD,EAAQC,GAAR,KAAgB;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBH,KAA9B;AAEA,QAAMI,QAAQ,GAAG,2CAAe,CAAf,CAAjB;AACA,QAAMC,OAAO,GAAG,2CAAe,CAAf,CAAhB;AACA,QAAMC,YAAY,GAAG,2CAAe,CAAf,CAArB;AAEA,sBACE,6BAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEL,GAFP;AAGE,IAAA,8BAA8B,EAAE,qCAC7BM,KAAD,IAAwC;AACtC;;AACAH,MAAAA,QAAQ,CAACI,KAAT,GAAiBD,KAAK,CAACH,QAAvB;AACAC,MAAAA,OAAO,CAACG,KAAR,GAAgBD,KAAK,CAACF,OAAtB;AACAC,MAAAA,YAAY,CAACE,KAAb,GAAqBD,KAAK,CAACD,YAA3B;AACD,KAN6B,EAO9B,CACE;AACA;AACAG,0BAASC,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAP8B;AAHlC,KAkBMP,IAlBN,gBAmBE,6BAAC,4CAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CAnBF,CADF;AA8BD,CAxCmC,CAApC;;AA0CAL,2BAA2B,CAACc,WAA5B,GAA0C,6BAA1C;eAEed,2B","sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedNativeStackScreen = React.forwardRef<\n typeof AnimatedScreen,\n ScreenProps\n>((props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n onTransitionProgressReanimated={useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )}\n {...rest}>\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n </AnimatedScreen>\n );\n});\n\nReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';\n\nexport default ReanimatedNativeStackScreen;\n"]}
|
|
@@ -3,100 +3,28 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default =
|
|
6
|
+
exports.default = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
9
|
|
|
10
|
-
var _reactNative = require("react-native");
|
|
11
|
-
|
|
12
10
|
var _reactNativeScreens = require("react-native-screens");
|
|
13
11
|
|
|
14
|
-
var _reactNativeReanimated =
|
|
15
|
-
|
|
16
|
-
var _ReanimatedTransitionProgressContext = _interopRequireDefault(require("./ReanimatedTransitionProgressContext"));
|
|
17
|
-
|
|
18
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
19
|
-
|
|
20
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
|
+
var _reactNativeReanimated = _interopRequireDefault(require("react-native-reanimated"));
|
|
21
13
|
|
|
22
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
15
|
|
|
24
16
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
17
|
|
|
26
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
27
|
-
|
|
28
18
|
const AnimatedScreen = _reactNativeReanimated.default.createAnimatedComponent(_reactNativeScreens.Screen);
|
|
29
19
|
|
|
30
|
-
class ReanimatedScreenWrapper extends _react.default.Component {
|
|
31
|
-
constructor(...args) {
|
|
32
|
-
super(...args);
|
|
33
|
-
|
|
34
|
-
_defineProperty(this, "ref", null);
|
|
35
|
-
|
|
36
|
-
_defineProperty(this, "setRef", ref => {
|
|
37
|
-
var _this$props$onCompone, _this$props;
|
|
38
|
-
|
|
39
|
-
this.ref = ref;
|
|
40
|
-
(_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
setNativeProps(props) {
|
|
45
|
-
var _this$ref;
|
|
46
|
-
|
|
47
|
-
(_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
render() {
|
|
51
|
-
return /*#__PURE__*/_react.default.createElement(ReanimatedScreen, _extends({}, this.props, {
|
|
52
|
-
// @ts-ignore some problems with ref
|
|
53
|
-
ref: this.setRef
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
20
|
const ReanimatedScreen = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
60
|
-
const {
|
|
61
|
-
children,
|
|
62
|
-
...rest
|
|
63
|
-
} = props;
|
|
64
|
-
const progress = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
65
|
-
const closing = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
66
|
-
const goingForward = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
67
21
|
return /*#__PURE__*/_react.default.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
|
|
68
22
|
, _extends({
|
|
69
|
-
ref: ref
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
'worklet';
|
|
73
|
-
|
|
74
|
-
progress.value = event.progress;
|
|
75
|
-
closing.value = event.closing;
|
|
76
|
-
goingForward.value = event.goingForward;
|
|
77
|
-
}, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
|
|
78
|
-
// @ts-ignore wrong type
|
|
79
|
-
_reactNative.Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
|
|
80
|
-
}, rest), !props.isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
|
|
81
|
-
children : /*#__PURE__*/_react.default.createElement(_ReanimatedTransitionProgressContext.default.Provider, {
|
|
82
|
-
value: {
|
|
83
|
-
progress: progress,
|
|
84
|
-
closing: closing,
|
|
85
|
-
goingForward: goingForward
|
|
86
|
-
}
|
|
87
|
-
}, children));
|
|
88
|
-
}); // used to silence error "Component definition is missing display name"
|
|
89
|
-
|
|
23
|
+
ref: ref
|
|
24
|
+
}, props));
|
|
25
|
+
});
|
|
90
26
|
|
|
91
27
|
ReanimatedScreen.displayName = 'ReanimatedScreen';
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return (
|
|
95
|
-
/*#__PURE__*/
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
-
_react.default.createElement(_reactNativeScreens.ScreenContext.Provider, {
|
|
98
|
-
value: ReanimatedScreenWrapper
|
|
99
|
-
}, props.children)
|
|
100
|
-
);
|
|
101
|
-
}
|
|
28
|
+
var _default = ReanimatedScreen;
|
|
29
|
+
exports.default = _default;
|
|
102
30
|
//# sourceMappingURL=ReanimatedScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["ReanimatedScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","
|
|
1
|
+
{"version":3,"sources":["ReanimatedScreen.tsx"],"names":["AnimatedScreen","Animated","createAnimatedComponent","Screen","ReanimatedScreen","React","forwardRef","props","ref","displayName"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,gBAAgB,gBAAGC,eAAMC,UAAN,CACvB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,sBACE,6BAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEA;AAFP,KAGMD,KAHN,EADF;AAOD,CATsB,CAAzB;;AAYAH,gBAAgB,CAACK,WAAjB,GAA+B,kBAA/B;eAEeL,gB","sourcesContent":["import React from 'react';\nimport { Screen, ScreenProps } from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated from 'react-native-reanimated';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default ReanimatedScreen;\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ReanimatedScreenProvider;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactNativeScreens = require("react-native-screens");
|
|
11
|
+
|
|
12
|
+
var _ReanimatedNativeStackScreen = _interopRequireDefault(require("./ReanimatedNativeStackScreen"));
|
|
13
|
+
|
|
14
|
+
var _ReanimatedScreen = _interopRequireDefault(require("./ReanimatedScreen"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
19
|
+
|
|
20
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
+
|
|
22
|
+
class ReanimatedScreenWrapper extends _react.default.Component {
|
|
23
|
+
constructor(...args) {
|
|
24
|
+
super(...args);
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, "ref", null);
|
|
27
|
+
|
|
28
|
+
_defineProperty(this, "setRef", ref => {
|
|
29
|
+
var _this$props$onCompone, _this$props;
|
|
30
|
+
|
|
31
|
+
this.ref = ref;
|
|
32
|
+
(_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
setNativeProps(props) {
|
|
37
|
+
var _this$ref;
|
|
38
|
+
|
|
39
|
+
(_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
render() {
|
|
43
|
+
const ReanimatedScreen = this.props.isNativeStack ? _ReanimatedNativeStackScreen.default : _ReanimatedScreen.default;
|
|
44
|
+
return /*#__PURE__*/_react.default.createElement(ReanimatedScreen, _extends({}, this.props, {
|
|
45
|
+
// @ts-ignore some problems with ref
|
|
46
|
+
ref: this.setRef
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function ReanimatedScreenProvider(props) {
|
|
53
|
+
return (
|
|
54
|
+
/*#__PURE__*/
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
_react.default.createElement(_reactNativeScreens.ScreenContext.Provider, {
|
|
57
|
+
value: ReanimatedScreenWrapper
|
|
58
|
+
}, props.children)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ReanimatedScreenProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["ReanimatedScreenProvider.tsx"],"names":["ReanimatedScreenWrapper","React","Component","ref","props","onComponentRef","setNativeProps","render","ReanimatedScreen","isNativeStack","ReanimatedNativeStackScreen","AnimatedScreen","setRef","ReanimatedScreenProvider","children"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;;;;;AAEA,MAAMA,uBAAN,SAAsCC,eAAMC,SAA5C,CAAmE;AAAA;AAAA;;AAAA,iCACb,IADa;;AAAA,oCAOvDC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAVgE;AAAA;;AAGjEG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,UAAMC,gBAAgB,GAAG,KAAKJ,KAAL,CAAWK,aAAX,GACrBC,oCADqB,GAErBC,yBAFJ;AAGA,wBACE,6BAAC,gBAAD,eACM,KAAKP,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKQ;AAHZ,OADF;AAOD;;AAvBgE;;AA0BpD,SAASC,wBAAT,CACbT,KADa,EAEb;AACA;AAAA;AACE;AACA,iCAAC,iCAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEJ;AAA/B,OACGI,KAAK,CAACU,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { View } from 'react-native';\nimport { ScreenProps, ScreenContext } from 'react-native-screens';\nimport ReanimatedNativeStackScreen from './ReanimatedNativeStackScreen';\nimport AnimatedScreen from './ReanimatedScreen';\n\nclass ReanimatedScreenWrapper extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const ReanimatedScreen = this.props.isNativeStack\n ? ReanimatedNativeStackScreen\n : AnimatedScreen;\n return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nexport default function ReanimatedScreenProvider(\n props: PropsWithChildren<unknown>\n) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <ScreenContext.Provider value={ReanimatedScreenWrapper as any}>\n {props.children}\n </ScreenContext.Provider>\n );\n}\n"]}
|