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.
Files changed (102) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +47 -7
  3. package/android/build.gradle +1 -2
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
  8. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +35 -52
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +83 -34
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +38 -33
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +77 -42
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +25 -9
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +10 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
  19. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +107 -0
  20. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +155 -0
  21. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +67 -0
  22. package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
  23. package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
  24. package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
  25. package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
  26. package/android/src/main/res/anim/rns_fade_in.xml +7 -0
  27. package/android/src/main/res/anim/rns_fade_out.xml +7 -0
  28. package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
  29. package/createNativeStackNavigator/README.md +12 -0
  30. package/ios/RNSScreen.h +10 -0
  31. package/ios/RNSScreen.m +38 -0
  32. package/ios/RNSScreenContainer.m +5 -0
  33. package/ios/RNSScreenStack.m +29 -13
  34. package/ios/RNSScreenStackAnimator.m +45 -14
  35. package/ios/RNSScreenStackHeaderConfig.m +4 -1
  36. package/ios/RNSScreenWindowTraits.h +1 -0
  37. package/ios/RNSScreenWindowTraits.m +20 -0
  38. package/ios/UIViewController+RNScreens.m +10 -0
  39. package/lib/commonjs/index.js +17 -1
  40. package/lib/commonjs/index.js.map +1 -1
  41. package/lib/commonjs/index.native.js +66 -18
  42. package/lib/commonjs/index.native.js.map +1 -1
  43. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
  44. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  45. package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
  46. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  47. package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
  48. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  49. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
  50. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  51. package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
  52. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  53. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
  54. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  55. package/lib/commonjs/reanimated/index.js +2 -2
  56. package/lib/commonjs/reanimated/index.js.map +1 -1
  57. package/lib/commonjs/utils.js +20 -0
  58. package/lib/commonjs/utils.js.map +1 -0
  59. package/lib/module/index.js +1 -0
  60. package/lib/module/index.js.map +1 -1
  61. package/lib/module/index.native.js +65 -19
  62. package/lib/module/index.native.js.map +1 -1
  63. package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
  64. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  65. package/lib/module/native-stack/views/HeaderConfig.js +46 -5
  66. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  67. package/lib/module/native-stack/views/NativeStackView.js +33 -4
  68. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  69. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
  70. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  71. package/lib/module/reanimated/ReanimatedScreen.js +6 -73
  72. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  73. package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
  74. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  75. package/lib/module/reanimated/index.js +1 -1
  76. package/lib/module/reanimated/index.js.map +1 -1
  77. package/lib/module/utils.js +8 -0
  78. package/lib/module/utils.js.map +1 -0
  79. package/lib/typescript/index.d.ts +1 -0
  80. package/lib/typescript/native-stack/types.d.ts +34 -2
  81. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  82. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  83. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
  84. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  85. package/lib/typescript/reanimated/index.d.ts +1 -1
  86. package/lib/typescript/types.d.ts +101 -1
  87. package/lib/typescript/utils.d.ts +2 -0
  88. package/native-stack/README.md +70 -8
  89. package/package.json +2 -1
  90. package/reanimated/package.json +6 -0
  91. package/src/index.native.tsx +94 -36
  92. package/src/index.tsx +4 -0
  93. package/src/native-stack/types.tsx +34 -2
  94. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  95. package/src/native-stack/views/HeaderConfig.tsx +46 -3
  96. package/src/native-stack/views/NativeStackView.tsx +33 -4
  97. package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
  98. package/src/reanimated/ReanimatedScreen.tsx +6 -84
  99. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  100. package/src/reanimated/index.tsx +1 -1
  101. package/src/types.tsx +101 -1
  102. 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
- const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = (0, _FontProcessor.processFonts)([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]);
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, _reactNative.Platform.OS === 'ios' && searchBar !== undefined ? /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(_reactNativeScreens.SearchBar, searchBar)) : 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":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AAKA;;AASA;;AAUA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;AAEA,IAAIC,SAAS,GAAGC,iBAAhB;;AAEA,IAAIC,OAAJ,EAAa;AACX,QAAMC,cAAc,GAClBC,KADqB,IAElB;AACH,UAAM;AAAEC,MAAAA,iBAAF;AAAqB,SAAGC;AAAxB,QAAiCF,KAAvC;;AACA,QAAIN,sBAASC,EAAT,KAAgB,KAAhB,IAAyBM,iBAAiB,KAAK,MAAnD,EAA2D;AACzD,0BACE,oBAAC,qBAAD,qBACE,oBAAC,iBAAD,EAAUC,IAAV,CADF,CADF;AAKD;;AACD,wBAAO,oBAAC,iBAAD,EAAUA,IAAV,CAAP;AACD,GAZD,CADW,CAcX;;;AACAN,EAAAA,SAAS,GAAGG,cAAZ;AACD;;AAED,MAAMI,gBAAgB,GAAG,CAAC;AACxBC,EAAAA,OADwB;AAExBC,EAAAA,KAFwB;AAGxBJ,EAAAA,iBAHwB;AAIxBK,EAAAA;AAJwB,CAAD,KAUnB;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAa,uBAAnB;AACA,QAAM;AAAEC,IAAAA,WAAW,GAAG,IAAhB;AAAsBC,IAAAA;AAAtB,MAAuCL,OAA7C;AAEA,QAAMM,MAAM,GAAGC,KAAK,CAACC,UAAN,CAAiBC,iCAAjB,CAAf;AAEA,QAAMC,eAAe,GAAGrB,SAAS,GAC7B,KAD6B,GAE7BQ,iBAAiB,KAAK,MAAtB,IAAgCO,WAAW,KAAK,IAFpD;AAIA,QAAMO,sBAAsB,GAAGJ,KAAK,CAACK,MAAN,CAAaR,WAAb,CAA/B;AAEAG,EAAAA,KAAK,CAACM,SAAN,CAAgB,MAAM;AACpB,2BACE,CAACxB,SAAD,IACEQ,iBAAiB,KAAK,MADxB,IAEEc,sBAAsB,CAACG,OAAvB,KAAmCV,WAHvC,EAIG,6IAA4IH,KAAK,CAACc,IAAK,IAJ1J;AAOAJ,IAAAA,sBAAsB,CAACG,OAAvB,GAAiCV,WAAjC;AACD,GATD,EASG,CAACA,WAAD,EAAcP,iBAAd,EAAiCI,KAAK,CAACc,IAAvC,CATH;AAWA,QAAMC,OAAO,gBACX,oBAAC,SAAD;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAELrB,iBAAiB,KAAK,kBAAtB,IACEA,iBAAiB,KAAK,2BADxB,IACuD;AACnDsB,MAAAA,eAAe,EAAEhB,MAAM,CAACiB;AAD2B,KAHlD,EAMLf,YANK,CADT,CASE;AATF;AAUE,IAAA,iBAAiB,EAAER;AAVrB,KAWGK,QAXH,CADF;AAgBA,QAAMmB,QAAQ,GAAG,qDAAoBC,GAArC;AACA,QAAMC,UAAU,GAAG,mDAAnB;AACA,QAAMC,YAAY,GAAG,qCACnBD,UADmB,EAEnBF,QAFmB,EAGnBxB,iBAHmB,CAArB;;AAMA,MAAIa,eAAJ,EAAqB;AACnB,wBACE,oBAAC,+BAAD;AAAa,MAAA,KAAK,EAAEO,MAAM,CAACC;AAA3B,oBACE,oBAAC,MAAD;AAAQ,MAAA,OAAO,MAAf;AAAgB,MAAA,aAAa,MAA7B;AAA8B,MAAA,KAAK,EAAEO,wBAAWC;AAAhD,oBACE,oBAAC,4BAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAEF;AAArC,oBACE,oBAAC,qBAAD,eAAkBxB,OAAlB;AAA2B,MAAA,KAAK,EAAEC;AAAlC,OADF,EAEGe,OAFH,CADF,CADF,CADF;AAUD;;AAED,SAAOA,OAAP;AACD,CAvED;;AAgFA,MAAMW,SAAS,GAAG,CAAC;AACjBC,EAAAA,WADiB;AAEjB3B,EAAAA,KAFiB;AAGjB4B,EAAAA,KAHiB;AAIjBC,EAAAA,UAJiB;AAKjBC,EAAAA;AALiB,CAAD,KAYZ;AACJ,QAAM;AAAE/B,IAAAA,OAAF;AAAWgC,IAAAA,MAAM,EAAEC;AAAnB,MAAmCL,WAAW,CAAC3B,KAAK,CAACiC,GAAP,CAApD;AACA,QAAM;AACJC,IAAAA,sBADI;AAEJC,IAAAA,sBAFI;AAGJC,IAAAA,cAHI;AAIJjC,IAAAA,WAJI;AAKJkC,IAAAA,gCAAgC,GAAG,KAL/B;AAMJC,IAAAA,gBAAgB,GAAG,KANf;AAOJC,IAAAA,iBAPI;AAQJC,IAAAA,cARI;AASJC,IAAAA,kBATI;AAUJC,IAAAA,cAVI;AAWJC,IAAAA,eAXI;AAYJC,IAAAA,cAZI;AAaJC,IAAAA;AAbI,MAcF9C,OAdJ;AAgBA,MAAI;AAAEH,IAAAA,iBAAiB,GAAG;AAAtB,MAAiCG,OAArC;;AAEA,MAAI6B,KAAK,KAAK,CAAd,EAAiB;AACf;AACA;AACAhC,IAAAA,iBAAiB,GAAG,MAApB;AACD;;AAED,QAAMkD,cAAc,GAAG1D,SAAS,GAC5Be,WAD4B,GAE5BP,iBAAiB,KAAK,MAAtB,IAAgCO,WAAW,KAAK,KAFpD;AAIA,QAAMmB,UAAU,GAAG,mDAAnB;AACA,QAAMF,QAAQ,GAAG,qDAAoBC,GAArC;AACA,QAAME,YAAY,GAAG,qCACnBD,UADmB,EAEnBF,QAFmB,EAGnBxB,iBAHmB,CAArB;AAKA,QAAMmD,kBAAkB,GAAGzC,KAAK,CAACC,UAAN,CAAiByC,4BAAjB,CAA3B;AACA,QAAM3C,MAAM,GAAGC,KAAK,CAACC,UAAN,CAAiBC,iCAAjB,CAAf;AAEA,sBACE,oBAAC,MAAD;AACE,IAAA,GAAG,EAAER,KAAK,CAACiC,GADb;AAEE,IAAA,OAAO,MAFT;AAGE,IAAA,aAAa,MAHf;AAIE,IAAA,KAAK,EAAET,wBAAWC,YAJpB;AAKE,IAAA,sBAAsB,EAAES,sBAL1B;AAME,IAAA,sBAAsB,EAAEC,sBAN1B;AAOE,IAAA,cAAc,EAAE/C,SAAS,GAAG,KAAH,GAAWgD,cAPtC;AAQE,IAAA,gCAAgC,EAAEC,gCARpC;AASE,IAAA,gBAAgB,EAAEC,gBATpB;AAUE,IAAA,iBAAiB,EAAEC,iBAVrB;AAWE,IAAA,cAAc,EAAEC,cAXlB;AAYE,IAAA,iBAAiB,EAAE5C,iBAZrB;AAaE,IAAA,kBAAkB,EAAE6C,kBAbtB;AAcE,IAAA,cAAc,EAAEC,cAdlB;AAeE,IAAA,eAAe,EAAEC,eAfnB;AAgBE,IAAA,cAAc,EAAEC,cAhBlB;AAiBE,IAAA,oBAAoB,EAAEC,oBAjBxB;AAkBE,IAAA,yBAAyB,EAAE,MAAM;AAC/BhB,MAAAA,UAAU,CAACoB,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,EADe;AAElBC,QAAAA,MAAM,EAAEpD,KAAK,CAACiC,GAFI;AAGlBoB,QAAAA,MAAM,EAAEvB;AAHU,OAApB;AAKD,KAxBH;AAyBE,IAAA,YAAY,EAAE,MAAM;AAClBD,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,iBADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAHA,OAAhB;AAKD,KA/BH;AAgCE,IAAA,eAAe,EAAE,MAAM;AACrBJ,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,iBADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAtCH;AAuCE,IAAA,QAAQ,EAAE,MAAM;AACdJ,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,QADQ;AAEdF,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAFA,OAAhB;AAIAJ,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,eADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAjDH;AAkDE,IAAA,WAAW,EAAE,MAAM;AACjBJ,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,eADQ;AAEdC,QAAAA,IAAI,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX,SAFQ;AAGdJ,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAHA,OAAhB;AAKD,KAxDH;AAyDE,IAAA,WAAW,EAAGyB,CAAD,IAAO;AAClB7B,MAAAA,UAAU,CAACyB,IAAX,CAAgB;AACdC,QAAAA,IAAI,EAAE,SADQ;AAEdF,QAAAA,MAAM,EAAErD,KAAK,CAACiC;AAFA,OAAhB;AAKA,YAAM0B,YAAY,GAChBD,CAAC,CAACE,WAAF,CAAcD,YAAd,GAA6B,CAA7B,GAAiCD,CAAC,CAACE,WAAF,CAAcD,YAA/C,GAA8D,CADhE;AAGA9B,MAAAA,UAAU,CAACoB,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,CAAiBQ,YAAjB,CADe;AAElBP,QAAAA,MAAM,EAAEpD,KAAK,CAACiC,GAFI;AAGlBoB,QAAAA,MAAM,EAAEvB;AAHU,OAApB;AAKD;AAvEH,kBAwEE,oBAAC,4BAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EACHgB,cAAc,KAAK,KAAnB,GAA2BvB,YAA3B,GAA0CwB,kBAA1C,aAA0CA,kBAA1C,cAA0CA,kBAA1C,GAAgE;AAFpE,kBAIE,oBAAC,qBAAD,eAAkBhD,OAAlB;AAA2B,IAAA,KAAK,EAAEC,KAAlC;AAAyC,IAAA,WAAW,EAAE8C;AAAtD,KAJF,eAKE,oBAAC,gBAAD;AACE,IAAA,OAAO,EAAE/C,OADX;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,iBAAiB,EAAEJ;AAHrB,KAIGoC,WAAW,EAJd,CALF,CAxEF,CADF;AAuFD,CA3ID;;AAmJA,SAAS6B,oBAAT,CAA8B;AAC5BC,EAAAA,KAD4B;AAE5BjC,EAAAA,UAF4B;AAG5BF,EAAAA;AAH4B,CAA9B,EAIuB;AACrB,QAAM;AAAEM,IAAAA,GAAF;AAAO8B,IAAAA;AAAP,MAAkBD,KAAxB;AAEA,sBACE,oBAAC,+BAAD;AAAa,IAAA,KAAK,EAAE9C,MAAM,CAACC;AAA3B,KACG8C,MAAM,CAACC,GAAP,CAAW,CAAChE,KAAD,EAAQ4B,KAAR,kBACV,oBAAC,SAAD;AACE,IAAA,GAAG,EAAE5B,KAAK,CAACiC,GADb;AAEE,IAAA,WAAW,EAAEN,WAFf;AAGE,IAAA,KAAK,EAAE3B,KAHT;AAIE,IAAA,KAAK,EAAE4B,KAJT;AAKE,IAAA,UAAU,EAAEC,UALd;AAME,IAAA,QAAQ,EAAEI;AANZ,IADD,CADH,CADF;AAcD;;AAEc,SAASgC,eAAT,CAAyBtE,KAAzB,EAAuC;AACpD,sBACE,oBAAC,+BAAD,qBACE,oBAAC,oBAAD,EAA0BA,KAA1B,CADF,CADF;AAKD;;AAED,MAAMqB,MAAM,GAAGQ,wBAAW0C,MAAX,CAAkB;AAC/BjD,EAAAA,SAAS,EAAE;AACTkD,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","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 = ReanimatedScreenProvider;
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 = _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; }
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 // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check
70
- ,
71
- onTransitionProgressReanimated: !props.isNativeStack ? undefined : (0, _reactNativeReanimated.useEvent)(event => {
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
- function ReanimatedScreenProvider(props) {
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","ReanimatedScreenWrapper","React","Component","ref","props","onComponentRef","setNativeProps","render","setRef","ReanimatedScreen","forwardRef","children","rest","progress","closing","goingForward","isNativeStack","undefined","event","value","Platform","OS","displayName","ReanimatedScreenProvider"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAQA;;AACA;;;;;;;;;;;;AAEA,MAAMA,cAAc,GAAGC,+BAASC,uBAAT,CACpBC,0BADoB,CAAvB;;AAIA,MAAMC,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,wBACE,6BAAC,gBAAD,eACM,KAAKH,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKI;AAHZ,OADF;AAOD;;AApBgE;;AAuBnE,MAAMC,gBAAgB,gBAAGR,eAAMS,UAAN,CACvB,CAACN,KAAD,EAAQD,GAAR,KAAgB;AACd,QAAM;AAAEQ,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBR,KAA9B;AAEA,QAAMS,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,EAAEZ,GAFP,CAGE;AAHF;AAIE,IAAA,8BAA8B,EAC5B,CAACC,KAAK,CAACY,aAAP,GACIC,SADJ,GAEI,qCACGC,KAAD,IAAwC;AACtC;;AACAL,MAAAA,QAAQ,CAACM,KAAT,GAAiBD,KAAK,CAACL,QAAvB;AACAC,MAAAA,OAAO,CAACK,KAAR,GAAgBD,KAAK,CAACJ,OAAtB;AACAC,MAAAA,YAAY,CAACI,KAAb,GAAqBD,KAAK,CAACH,YAA3B;AACD,KANH,EAOE,CACE;AACA;AACAK,0BAASC,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAPF;AAPR,KAuBMT,IAvBN,GAwBG,CAACR,KAAK,CAACY,aAAP,GAAyB;AACxBL,EAAAA,QADD,gBAGC,6BAAC,4CAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLE,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CA3BJ,CADF;AAuCD,CA/CsB,CAAzB,C,CAkDA;;;AACAF,gBAAgB,CAACa,WAAjB,GAA+B,kBAA/B;;AAEe,SAASC,wBAAT,CACbnB,KADa,EAEb;AACA;AAAA;AACE;AACA,iCAAC,iCAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEJ;AAA/B,OACGI,KAAK,CAACO,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { Platform, View } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n ScreenContext,\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\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 return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, 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 // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check\n onTransitionProgressReanimated={\n !props.isNativeStack\n ? undefined\n : 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 }\n {...rest}>\n {!props.isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n )}\n </AnimatedScreen>\n );\n }\n);\n\n// used to silence error \"Component definition is missing display name\"\nReanimatedScreen.displayName = 'ReanimatedScreen';\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"]}
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"]}