@react-navigation/native-stack 6.7.0 → 6.8.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 (28) hide show
  1. package/lib/commonjs/utils/useDismissedRouteError.js +29 -0
  2. package/lib/commonjs/utils/useDismissedRouteError.js.map +1 -0
  3. package/lib/commonjs/utils/useInvalidPreventRemoveError.js +33 -0
  4. package/lib/commonjs/utils/useInvalidPreventRemoveError.js.map +1 -0
  5. package/lib/commonjs/views/HeaderConfig.js +1 -1
  6. package/lib/commonjs/views/HeaderConfig.js.map +1 -1
  7. package/lib/commonjs/views/NativeStackView.js +9 -5
  8. package/lib/commonjs/views/NativeStackView.js.map +1 -1
  9. package/lib/commonjs/views/NativeStackView.native.js +50 -17
  10. package/lib/commonjs/views/NativeStackView.native.js.map +1 -1
  11. package/lib/module/utils/useDismissedRouteError.js +17 -0
  12. package/lib/module/utils/useDismissedRouteError.js.map +1 -0
  13. package/lib/module/utils/useInvalidPreventRemoveError.js +20 -0
  14. package/lib/module/utils/useInvalidPreventRemoveError.js.map +1 -0
  15. package/lib/module/views/HeaderConfig.js +1 -1
  16. package/lib/module/views/HeaderConfig.js.map +1 -1
  17. package/lib/module/views/NativeStackView.js +10 -6
  18. package/lib/module/views/NativeStackView.js.map +1 -1
  19. package/lib/module/views/NativeStackView.native.js +50 -19
  20. package/lib/module/views/NativeStackView.native.js.map +1 -1
  21. package/lib/typescript/src/utils/useDismissedRouteError.d.ts +5 -0
  22. package/lib/typescript/src/utils/useInvalidPreventRemoveError.d.ts +2 -0
  23. package/package.json +7 -5
  24. package/src/utils/useDismissedRouteError.tsx +30 -0
  25. package/src/utils/useInvalidPreventRemoveError.tsx +31 -0
  26. package/src/views/HeaderConfig.tsx +1 -1
  27. package/src/views/NativeStackView.native.tsx +59 -27
  28. package/src/views/NativeStackView.tsx +20 -12
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useInvalidPreventRemoveError;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
13
+
14
+ function useInvalidPreventRemoveError(state) {
15
+ var _state$routes$find;
16
+
17
+ const [nextDismissedKey, setNextDismissedKey] = React.useState(null);
18
+ const dismissedRouteName = nextDismissedKey ? (_state$routes$find = state.routes.find(route => route.key === nextDismissedKey)) === null || _state$routes$find === void 0 ? void 0 : _state$routes$find.name : null;
19
+ React.useEffect(() => {
20
+ if (dismissedRouteName) {
21
+ const message = `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` + `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\n\n` + `Consider using a 'usePreventRemove' hook with 'headerBackButtonMenuEnabled: false' to prevent users from natively going back multiple screens.`;
22
+ console.error(message);
23
+ }
24
+ }, [dismissedRouteName]);
25
+ return {
26
+ setNextDismissedKey
27
+ };
28
+ }
29
+ //# sourceMappingURL=useDismissedRouteError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useDismissedRouteError.tsx"],"names":["useInvalidPreventRemoveError","state","nextDismissedKey","setNextDismissedKey","React","useState","dismissedRouteName","routes","find","route","key","name","useEffect","message","console","error"],"mappings":";;;;;;;AAIA;;;;;;AAEe,SAASA,4BAAT,CACbC,KADa,EAEb;AAAA;;AACA,QAAM,CAACC,gBAAD,EAAmBC,mBAAnB,IAA0CC,KAAK,CAACC,QAAN,CAC9C,IAD8C,CAAhD;AAIA,QAAMC,kBAAkB,GAAGJ,gBAAgB,yBACvCD,KAAK,CAACM,MAAN,CAAaC,IAAb,CAAmBC,KAAD,IAAWA,KAAK,CAACC,GAAN,KAAcR,gBAA3C,CADuC,uDACvC,mBAA8DS,IADvB,GAEvC,IAFJ;AAIAP,EAAAA,KAAK,CAACQ,SAAN,CAAgB,MAAM;AACpB,QAAIN,kBAAJ,EAAwB;AACtB,YAAMO,OAAO,GACV,eAAcP,kBAAmB,+DAAlC,GACC,6HADD,GAEC,gJAHH;AAKAQ,MAAAA,OAAO,CAACC,KAAR,CAAcF,OAAd;AACD;AACF,GATD,EASG,CAACP,kBAAD,CATH;AAWA,SAAO;AAAEH,IAAAA;AAAF,GAAP;AACD","sourcesContent":["import type {\n ParamListBase,\n StackNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\n\nexport default function useInvalidPreventRemoveError(\n state: StackNavigationState<ParamListBase>\n) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using a 'usePreventRemove' hook with 'headerBackButtonMenuEnabled: false' to prevent users from natively going back multiple screens.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return { setNextDismissedKey };\n}\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useInvalidPreventRemoveError;
7
+
8
+ var _native = require("@react-navigation/native");
9
+
10
+ var React = _interopRequireWildcard(require("react"));
11
+
12
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
+
14
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
15
+
16
+ function useInvalidPreventRemoveError(descriptors) {
17
+ var _preventedDescriptor$, _preventedDescriptor$2;
18
+
19
+ const {
20
+ preventedRoutes
21
+ } = (0, _native.usePreventRemoveContext)();
22
+ const preventedRouteKey = Object.keys(preventedRoutes)[0];
23
+ const preventedDescriptor = descriptors[preventedRouteKey];
24
+ const isHeaderBackButtonMenuEnabledOnPreventedScreen = preventedDescriptor === null || preventedDescriptor === void 0 ? void 0 : (_preventedDescriptor$ = preventedDescriptor.options) === null || _preventedDescriptor$ === void 0 ? void 0 : _preventedDescriptor$.headerBackButtonMenuEnabled;
25
+ const preventedRouteName = preventedDescriptor === null || preventedDescriptor === void 0 ? void 0 : (_preventedDescriptor$2 = preventedDescriptor.route) === null || _preventedDescriptor$2 === void 0 ? void 0 : _preventedDescriptor$2.name;
26
+ React.useEffect(() => {
27
+ if (preventedRouteKey != null && isHeaderBackButtonMenuEnabledOnPreventedScreen) {
28
+ const message = `The screen ${preventedRouteName} uses 'usePreventRemove' hook alongside 'headerBackButtonMenuEnabled: true', which is not supported. \n\n` + `Consider removing 'headerBackButtonMenuEnabled: true' from ${preventedRouteName} screen to get rid of this error.`;
29
+ console.error(message);
30
+ }
31
+ }, [preventedRouteKey, isHeaderBackButtonMenuEnabledOnPreventedScreen, preventedRouteName]);
32
+ }
33
+ //# sourceMappingURL=useInvalidPreventRemoveError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useInvalidPreventRemoveError.tsx"],"names":["useInvalidPreventRemoveError","descriptors","preventedRoutes","preventedRouteKey","Object","keys","preventedDescriptor","isHeaderBackButtonMenuEnabledOnPreventedScreen","options","headerBackButtonMenuEnabled","preventedRouteName","route","name","React","useEffect","message","console","error"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAIe,SAASA,4BAAT,CACbC,WADa,EAEb;AAAA;;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAsB,sCAA5B;AACA,QAAMC,iBAAiB,GAAGC,MAAM,CAACC,IAAP,CAAYH,eAAZ,EAA6B,CAA7B,CAA1B;AACA,QAAMI,mBAAmB,GAAGL,WAAW,CAACE,iBAAD,CAAvC;AACA,QAAMI,8CAA8C,GAClDD,mBADkD,aAClDA,mBADkD,gDAClDA,mBAAmB,CAAEE,OAD6B,0DAClD,sBAA8BC,2BADhC;AAEA,QAAMC,kBAAkB,GAAGJ,mBAAH,aAAGA,mBAAH,iDAAGA,mBAAmB,CAAEK,KAAxB,2DAAG,uBAA4BC,IAAvD;AAEAC,EAAAA,KAAK,CAACC,SAAN,CAAgB,MAAM;AACpB,QACEX,iBAAiB,IAAI,IAArB,IACAI,8CAFF,EAGE;AACA,YAAMQ,OAAO,GACV,cAAaL,kBAAmB,2GAAjC,GACC,8DAA6DA,kBAAmB,mCAFnF;AAGAM,MAAAA,OAAO,CAACC,KAAR,CAAcF,OAAd;AACD;AACF,GAVD,EAUG,CACDZ,iBADC,EAEDI,8CAFC,EAGDG,kBAHC,CAVH;AAeD","sourcesContent":["import { usePreventRemoveContext } from '@react-navigation/native';\nimport * as React from 'react';\n\nimport type { NativeStackDescriptorMap } from '../types';\n\nexport default function useInvalidPreventRemoveError(\n descriptors: NativeStackDescriptorMap\n) {\n const { preventedRoutes } = usePreventRemoveContext();\n const preventedRouteKey = Object.keys(preventedRoutes)[0];\n const preventedDescriptor = descriptors[preventedRouteKey];\n const isHeaderBackButtonMenuEnabledOnPreventedScreen =\n preventedDescriptor?.options?.headerBackButtonMenuEnabled;\n const preventedRouteName = preventedDescriptor?.route?.name;\n\n React.useEffect(() => {\n if (\n preventedRouteKey != null &&\n isHeaderBackButtonMenuEnabledOnPreventedScreen\n ) {\n const message =\n `The screen ${preventedRouteName} uses 'usePreventRemove' hook alongside 'headerBackButtonMenuEnabled: true', which is not supported. \\n\\n` +\n `Consider removing 'headerBackButtonMenuEnabled: true' from ${preventedRouteName} screen to get rid of this error.`;\n console.error(message);\n }\n }, [\n preventedRouteKey,\n isHeaderBackButtonMenuEnabledOnPreventedScreen,\n preventedRouteName,\n ]);\n}\n"]}
@@ -131,7 +131,7 @@ function HeaderConfig(_ref) {
131
131
  backTitleFontSize: headerBackTitleStyleFlattened.fontSize,
132
132
  blurEffect: headerBlurEffect,
133
133
  color: tintColor,
134
- direction: _reactNative.I18nManager.isRTL ? 'rtl' : 'ltr',
134
+ direction: _reactNative.I18nManager.getConstants().isRTL ? 'rtl' : 'ltr',
135
135
  disableBackButtonMenu: headerBackButtonMenuEnabled === false,
136
136
  hidden: headerShown === false,
137
137
  hideBackButton: headerBackVisible === false,
@@ -1 +1 @@
1
- {"version":3,"sources":["HeaderConfig.tsx"],"names":["HeaderConfig","headerHeight","headerBackImageSource","headerBackButtonMenuEnabled","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerBackVisible","headerShadowVisible","headerLargeStyle","headerLargeTitle","headerLargeTitleShadowVisible","headerLargeTitleStyle","headerBackground","headerLeft","headerRight","headerShown","headerStyle","headerBlurEffect","headerTintColor","headerTitle","headerTitleAlign","headerTitleStyle","headerTransparent","headerSearchBarOptions","route","title","canGoBack","insets","colors","tintColor","Platform","OS","primary","text","headerBackTitleStyleFlattened","StyleSheet","flatten","headerLargeTitleStyleFlattened","headerTitleStyleFlattened","headerStyleFlattened","headerLargeStyleFlattened","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","titleText","name","titleColor","color","titleFontSize","fontSize","titleFontWeight","fontWeight","headerTitleStyleSupported","headerLeftElement","label","headerRightElement","headerTitleElement","children","supportsHeaderSearchBar","isSearchBarAvailableForCurrentPlatform","SearchBar","hasHeaderSearchBar","Error","backButtonInCustomView","translucent","styles","background","height","backgroundColor","card","I18nManager","isRTL","top","row","undefined","create","flexDirection","alignItems","position","left","right","zIndex","overflow"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAOA;;AACA;;AAYA;;;;;;AAQe,SAASA,YAAT,OA4BQ;AAAA;;AAAA,MA5Bc;AACnCC,IAAAA,YADmC;AAEnCC,IAAAA,qBAFmC;AAGnCC,IAAAA,2BAHmC;AAInCC,IAAAA,eAJmC;AAKnCC,IAAAA,oBALmC;AAMnCC,IAAAA,sBAAsB,GAAG,IANU;AAOnCC,IAAAA,iBAPmC;AAQnCC,IAAAA,mBARmC;AASnCC,IAAAA,gBATmC;AAUnCC,IAAAA,gBAVmC;AAWnCC,IAAAA,6BAXmC;AAYnCC,IAAAA,qBAZmC;AAanCC,IAAAA,gBAbmC;AAcnCC,IAAAA,UAdmC;AAenCC,IAAAA,WAfmC;AAgBnCC,IAAAA,WAhBmC;AAiBnCC,IAAAA,WAjBmC;AAkBnCC,IAAAA,gBAlBmC;AAmBnCC,IAAAA,eAnBmC;AAoBnCC,IAAAA,WApBmC;AAqBnCC,IAAAA,gBArBmC;AAsBnCC,IAAAA,gBAtBmC;AAuBnCC,IAAAA,iBAvBmC;AAwBnCC,IAAAA,sBAxBmC;AAyBnCC,IAAAA,KAzBmC;AA0BnCC,IAAAA,KA1BmC;AA2BnCC,IAAAA;AA3BmC,GA4Bd;AACrB,QAAMC,MAAM,GAAG,oDAAf;AAEA,QAAM;AAAEC,IAAAA;AAAF,MAAa,uBAAnB;AACA,QAAMC,SAAS,GACbX,eADa,aACbA,eADa,cACbA,eADa,GACOY,sBAASC,EAAT,KAAgB,KAAhB,GAAwBH,MAAM,CAACI,OAA/B,GAAyCJ,MAAM,CAACK,IADtE;AAGA,QAAMC,6BAA6B,GACjCC,wBAAWC,OAAX,CAAmBhC,oBAAnB,KAA4C,EAD9C;AAEA,QAAMiC,8BAA8B,GAClCF,wBAAWC,OAAX,CAAmBzB,qBAAnB,KAA6C,EAD/C;AAEA,QAAM2B,yBAAyB,GAAGH,wBAAWC,OAAX,CAAmBf,gBAAnB,KAAwC,EAA1E;AACA,QAAMkB,oBAAoB,GAAGJ,wBAAWC,OAAX,CAAmBpB,WAAnB,KAAmC,EAAhE;AACA,QAAMwB,yBAAyB,GAAGL,wBAAWC,OAAX,CAAmB5B,gBAAnB,KAAwC,EAA1E;AAEA,QAAM,CAACiC,mBAAD,EAAsBC,oBAAtB,EAA4CC,eAA5C,IACJ,iCAAa,CACXT,6BAA6B,CAACU,UADnB,EAEXP,8BAA8B,CAACO,UAFpB,EAGXN,yBAAyB,CAACM,UAHf,CAAb,CADF;AAOA,QAAMC,SAAS,GAAG,8BAAe;AAAEpB,IAAAA,KAAF;AAASN,IAAAA;AAAT,GAAf,EAAuCK,KAAK,CAACsB,IAA7C,CAAlB;AACA,QAAMC,UAAU,qCACdT,yBAAyB,CAACU,KADZ,yEACqB9B,eADrB,yCACwCU,MAAM,CAACK,IAD/D;AAEA,QAAMgB,aAAa,GAAGX,yBAAyB,CAACY,QAAhD;AACA,QAAMC,eAAe,GAAGb,yBAAyB,CAACc,UAAlD;AAEA,QAAMC,yBAAoC,GAAG;AAAEL,IAAAA,KAAK,EAAED;AAAT,GAA7C;;AAEA,MAAIT,yBAAyB,CAACM,UAA1B,IAAwC,IAA5C,EAAkD;AAChDS,IAAAA,yBAAyB,CAACT,UAA1B,GAAuCN,yBAAyB,CAACM,UAAjE;AACD;;AAED,MAAIK,aAAa,IAAI,IAArB,EAA2B;AACzBI,IAAAA,yBAAyB,CAACH,QAA1B,GAAqCD,aAArC;AACD;;AAED,MAAIE,eAAe,IAAI,IAAvB,EAA6B;AAC3BE,IAAAA,yBAAyB,CAACD,UAA1B,GAAuCD,eAAvC;AACD;;AAED,QAAMG,iBAAiB,GAAGzC,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAG;AACrCgB,IAAAA,SADqC;AAErCH,IAAAA,SAFqC;AAGrC6B,IAAAA,KAAK,EAAEpD;AAH8B,GAAH,CAApC;AAKA,QAAMqD,kBAAkB,GAAG1C,WAAH,aAAGA,WAAH,uBAAGA,WAAW,CAAG;AACvCe,IAAAA,SADuC;AAEvCH,IAAAA;AAFuC,GAAH,CAAtC;AAIA,QAAM+B,kBAAkB,GACtB,OAAOtC,WAAP,KAAuB,UAAvB,GACIA,WAAW,CAAC;AACVU,IAAAA,SADU;AAEV6B,IAAAA,QAAQ,EAAEb;AAFA,GAAD,CADf,GAKI,IANN;AAQA,QAAMc,uBAAuB,GAC3B,OAAOC,0DAAP,KAAkD,SAAlD,GACIA,0DADJ,GAEI;AACA9B,wBAASC,EAAT,KAAgB,KAAhB,IAAyB8B,iCAAa,IAJ5C;AAMA,QAAMC,kBAAkB,GACtBH,uBAAuB,IAAIpC,sBAAsB,IAAI,IADvD;;AAGA,MAAIA,sBAAsB,IAAI,IAA1B,IAAkC,CAACoC,uBAAvC,EAAgE;AAC9D,UAAM,IAAII,KAAJ,CACH,gJADG,CAAN;AAGD;AAED;AACF;AACA;AACA;AACA;;;AACE,QAAMC,sBAAsB,GAAG1D,iBAAiB,GAC5CgD,iBAAiB,IAAI,IADuB,GAE5CxB,sBAASC,EAAT,KAAgB,SAAhB,IAA6B0B,kBAAkB,IAAI,IAFvD;AAIA,QAAMQ,WAAW,GACfrD,gBAAgB,IAAI,IAApB,IACAU,iBADA,IAEA;AACC,GAACwC,kBAAkB,IAAIrD,gBAAvB,KACCqB,sBAASC,EAAT,KAAgB,KADjB,IAECT,iBAAiB,KAAK,KAN1B;AAQA,sBACE,0CACGV,gBAAgB,IAAI,IAApB,gBACC,oBAAC,iBAAD;AACE,IAAA,KAAK,EAAE,CACLsD,MAAM,CAACC,UADF,EAEL7C,iBAAiB,GAAG4C,MAAM,CAACD,WAAV,GAAwB,IAFpC,EAGL;AAAEG,MAAAA,MAAM,EAAEpE;AAAV,KAHK;AADT,KAOGY,gBAAgB,EAPnB,CADD,GAUG,IAXN,eAYE,oBAAC,2CAAD;AACE,IAAA,sBAAsB,EAAEoD,sBAD1B;AAEE,IAAA,eAAe,2BACbzB,oBAAoB,CAAC8B,eADR,yEAEZzD,gBAAgB,IAAI,IAApB,IAA4BU,iBAA5B,GACG,aADH,GAEGM,MAAM,CAAC0C,IANf;AAQE,IAAA,SAAS,EAAEjE,sBAAsB,GAAGF,eAAH,GAAqB,GARxD;AASE,IAAA,mBAAmB,EAAEsC,mBATvB;AAUE,IAAA,iBAAiB,EAAEP,6BAA6B,CAACgB,QAVnD;AAWE,IAAA,UAAU,EAAEjC,gBAXd;AAYE,IAAA,KAAK,EAAEY,SAZT;AAaE,IAAA,SAAS,EAAE0C,yBAAYC,KAAZ,GAAoB,KAApB,GAA4B,KAbzC;AAcE,IAAA,qBAAqB,EAAEtE,2BAA2B,KAAK,KAdzD;AAeE,IAAA,MAAM,EAAEa,WAAW,KAAK,KAf1B;AAgBE,IAAA,cAAc,EAAET,iBAAiB,KAAK,KAhBxC;AAiBE,IAAA,UAAU,EACRC,mBAAmB,KAAK,KAAxB,IACAK,gBAAgB,IAAI,IADpB,IAEAU,iBApBJ;AAsBE,IAAA,UAAU,EAAEb,gBAtBd;AAuBE,IAAA,yBAAyB,EAAE+B,yBAAyB,CAAC6B,eAvBvD;AAwBE,IAAA,eAAe,EAAEhC,8BAA8B,CAACW,KAxBlD;AAyBE,IAAA,oBAAoB,EAAEN,oBAzBxB;AA0BE,IAAA,kBAAkB,EAAEL,8BAA8B,CAACa,QA1BrD;AA2BE,IAAA,oBAAoB,EAAEb,8BAA8B,CAACe,UA3BvD;AA4BE,IAAA,oBAAoB,EAAE1C,6BAA6B,KAAK,KA5B1D;AA6BE,IAAA,KAAK,EAAEmC,SA7BT;AA8BE,IAAA,UAAU,EAAEE,UA9Bd;AA+BE,IAAA,eAAe,EAAEJ,eA/BnB;AAgCE,IAAA,aAAa,EAAEM,aAhCjB;AAiCE,IAAA,eAAe,EAAEE,eAjCnB;AAkCE,IAAA,eAAe,EAAExB,MAAM,CAAC8C,GAAP,KAAe,CAlClC;AAmCE,IAAA,WAAW,EACT;AACAR,IAAAA,WAAW,KAAK;AArCpB,KAwCGnC,sBAASC,EAAT,KAAgB,KAAhB,gBACC,0CACGuB,iBAAiB,IAAI,IAArB,gBACC,oBAAC,6CAAD,QACGA,iBADH,CADD,GAIG,IALN,EAMGG,kBAAkB,IAAI,IAAtB,gBACC,oBAAC,+CAAD,QACGA,kBADH,CADD,GAIG,IAVN,CADD,gBAcC,0CACGH,iBAAiB,IAAI,IAArB,IAA6B,OAAOnC,WAAP,KAAuB,UAApD,gBACC,oBAAC,6CAAD,qBACE,oBAAC,iBAAD;AAAM,IAAA,KAAK,EAAE+C,MAAM,CAACQ;AAApB,KACGpB,iBADH,EAEGlC,gBAAgB,KAAK,QAArB,GACC,OAAOD,WAAP,KAAuB,UAAvB,GACEsC,kBADF,gBAGE,oBAAC,qBAAD;AACE,IAAA,SAAS,EAAE5B,SADb;AAEE,IAAA,KAAK,EAAEwB;AAFT,KAIGR,SAJH,CAJH,GAWG,IAbN,CADF,CADD,GAkBG,IAnBN,EAoBGzB,gBAAgB,KAAK,QAArB,gBACC,oBAAC,+CAAD,QACG,OAAOD,WAAP,KAAuB,UAAvB,GACCsC,kBADD,gBAGC,oBAAC,qBAAD;AACE,IAAA,SAAS,EAAE5B,SADb;AAEE,IAAA,KAAK,EAAEwB;AAFT,KAIGR,SAJH,CAJJ,CADD,GAaG,IAjCN,CAtDJ,EA0FG5C,qBAAqB,KAAK0E,SAA1B,gBACC,oBAAC,oDAAD;AAAkC,IAAA,MAAM,EAAE1E;AAA1C,IADD,GAEG,IA5FN,EA6FGuD,kBAAkB,IAAI,IAAtB,gBACC,oBAAC,8CAAD,QACGA,kBADH,CADD,GAIG,IAjGN,EAkGGM,kBAAkB,gBACjB,oBAAC,kDAAD,qBACE,oBAAC,6BAAD,EAAevC,sBAAf,CADF,CADiB,GAIf,IAtGN,CAZF,CADF;AAuHD;;AAED,MAAM2C,MAAM,GAAG/B,wBAAWyC,MAAX,CAAkB;AAC/BF,EAAAA,GAAG,EAAE;AACHG,IAAAA,aAAa,EAAE,KADZ;AAEHC,IAAAA,UAAU,EAAE;AAFT,GAD0B;AAK/Bb,EAAAA,WAAW,EAAE;AACXc,IAAAA,QAAQ,EAAE,UADC;AAEXN,IAAAA,GAAG,EAAE,CAFM;AAGXO,IAAAA,IAAI,EAAE,CAHK;AAIXC,IAAAA,KAAK,EAAE,CAJI;AAKXC,IAAAA,MAAM,EAAE;AALG,GALkB;AAY/Bf,EAAAA,UAAU,EAAE;AACVgB,IAAAA,QAAQ,EAAE;AADA;AAZmB,CAAlB,CAAf","sourcesContent":["import { getHeaderTitle, HeaderTitle } from '@react-navigation/elements';\nimport { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n I18nManager,\n Platform,\n StyleSheet,\n TextStyle,\n View,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport type { NativeStackNavigationOptions } from '../types';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n headerHeight: number;\n route: Route<string>;\n canGoBack: boolean;\n};\n\nexport default function HeaderConfig({\n headerHeight,\n headerBackImageSource,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackTitleVisible = true,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n route,\n title,\n canGoBack,\n}: Props): JSX.Element {\n const insets = useSafeAreaInsets();\n\n const { colors } = useTheme();\n const tintColor =\n headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten(headerBackTitleStyle) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten(headerLargeTitleStyle) || {};\n const headerTitleStyleFlattened = StyleSheet.flatten(headerTitleStyle) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] =\n processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n headerTitleStyleFlattened.color ?? headerTintColor ?? colors.text;\n const titleFontSize = headerTitleStyleFlattened.fontSize;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n label: headerBackTitle,\n });\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n });\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar =\n supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n if (headerSearchBarOptions != null && !supportsHeaderSearchBar) {\n throw new Error(\n `The current version of 'react-native-screens' doesn't support SearchBar in the header. Please update to the latest version to use this option.`\n );\n }\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView = headerBackVisible\n ? headerLeftElement != null\n : Platform.OS === 'android' && headerTitleElement != null;\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitle) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n return (\n <>\n {headerBackground != null ? (\n <View\n style={[\n styles.background,\n headerTransparent ? styles.translucent : null,\n { height: headerHeight },\n ]}\n >\n {headerBackground()}\n </View>\n ) : null}\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null || headerTransparent\n ? 'transparent'\n : colors.card)\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyleFlattened.fontSize}\n blurEffect={headerBlurEffect}\n color={tintColor}\n direction={I18nManager.isRTL ? 'rtl' : 'ltr'}\n disableBackButtonMenu={headerBackButtonMenuEnabled === false}\n hidden={headerShown === false}\n hideBackButton={headerBackVisible === false}\n hideShadow={\n headerShadowVisible === false ||\n headerBackground != null ||\n headerTransparent\n }\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyleFlattened.backgroundColor}\n largeTitleColor={headerLargeTitleStyleFlattened.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyleFlattened.fontSize}\n largeTitleFontWeight={headerLargeTitleStyleFlattened.fontWeight}\n largeTitleHideShadow={headerLargeTitleShadowVisible === false}\n title={titleText}\n titleColor={titleColor}\n titleFontFamily={titleFontFamily}\n titleFontSize={titleFontSize}\n titleFontWeight={titleFontWeight}\n topInsetEnabled={insets.top !== 0}\n translucent={\n // This defaults to `true`, so we can't pass `undefined`\n translucent === true\n }\n >\n {Platform.OS === 'ios' ? (\n <>\n {headerLeftElement != null ? (\n <ScreenStackHeaderLeftView>\n {headerLeftElement}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleElement != null ? (\n <ScreenStackHeaderCenterView>\n {headerTitleElement}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n <ScreenStackHeaderLeftView>\n <View style={styles.row}>\n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle\n tintColor={tintColor}\n style={headerTitleStyleSupported}\n >\n {titleText}\n </HeaderTitle>\n )\n ) : null}\n </View>\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleAlign === 'center' ? (\n <ScreenStackHeaderCenterView>\n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle\n tintColor={tintColor}\n style={headerTitleStyleSupported}\n >\n {titleText}\n </HeaderTitle>\n )}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n )}\n {headerBackImageSource !== undefined ? (\n <ScreenStackHeaderBackButtonImage source={headerBackImageSource} />\n ) : null}\n {headerRightElement != null ? (\n <ScreenStackHeaderRightView>\n {headerRightElement}\n </ScreenStackHeaderRightView>\n ) : null}\n {hasHeaderSearchBar ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...headerSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n translucent: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1,\n },\n background: {\n overflow: 'hidden',\n },\n});\n"]}
1
+ {"version":3,"sources":["HeaderConfig.tsx"],"names":["HeaderConfig","headerHeight","headerBackImageSource","headerBackButtonMenuEnabled","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerBackVisible","headerShadowVisible","headerLargeStyle","headerLargeTitle","headerLargeTitleShadowVisible","headerLargeTitleStyle","headerBackground","headerLeft","headerRight","headerShown","headerStyle","headerBlurEffect","headerTintColor","headerTitle","headerTitleAlign","headerTitleStyle","headerTransparent","headerSearchBarOptions","route","title","canGoBack","insets","colors","tintColor","Platform","OS","primary","text","headerBackTitleStyleFlattened","StyleSheet","flatten","headerLargeTitleStyleFlattened","headerTitleStyleFlattened","headerStyleFlattened","headerLargeStyleFlattened","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","titleText","name","titleColor","color","titleFontSize","fontSize","titleFontWeight","fontWeight","headerTitleStyleSupported","headerLeftElement","label","headerRightElement","headerTitleElement","children","supportsHeaderSearchBar","isSearchBarAvailableForCurrentPlatform","SearchBar","hasHeaderSearchBar","Error","backButtonInCustomView","translucent","styles","background","height","backgroundColor","card","I18nManager","getConstants","isRTL","top","row","undefined","create","flexDirection","alignItems","position","left","right","zIndex","overflow"],"mappings":"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","sourcesContent":["import { getHeaderTitle, HeaderTitle } from '@react-navigation/elements';\nimport { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n I18nManager,\n Platform,\n StyleSheet,\n TextStyle,\n View,\n} from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\n\nimport type { NativeStackNavigationOptions } from '../types';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n headerHeight: number;\n route: Route<string>;\n canGoBack: boolean;\n};\n\nexport default function HeaderConfig({\n headerHeight,\n headerBackImageSource,\n headerBackButtonMenuEnabled,\n headerBackTitle,\n headerBackTitleStyle,\n headerBackTitleVisible = true,\n headerBackVisible,\n headerShadowVisible,\n headerLargeStyle,\n headerLargeTitle,\n headerLargeTitleShadowVisible,\n headerLargeTitleStyle,\n headerBackground,\n headerLeft,\n headerRight,\n headerShown,\n headerStyle,\n headerBlurEffect,\n headerTintColor,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerTransparent,\n headerSearchBarOptions,\n route,\n title,\n canGoBack,\n}: Props): JSX.Element {\n const insets = useSafeAreaInsets();\n\n const { colors } = useTheme();\n const tintColor =\n headerTintColor ?? (Platform.OS === 'ios' ? colors.primary : colors.text);\n\n const headerBackTitleStyleFlattened =\n StyleSheet.flatten(headerBackTitleStyle) || {};\n const headerLargeTitleStyleFlattened =\n StyleSheet.flatten(headerLargeTitleStyle) || {};\n const headerTitleStyleFlattened = StyleSheet.flatten(headerTitleStyle) || {};\n const headerStyleFlattened = StyleSheet.flatten(headerStyle) || {};\n const headerLargeStyleFlattened = StyleSheet.flatten(headerLargeStyle) || {};\n\n const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] =\n processFonts([\n headerBackTitleStyleFlattened.fontFamily,\n headerLargeTitleStyleFlattened.fontFamily,\n headerTitleStyleFlattened.fontFamily,\n ]);\n\n const titleText = getHeaderTitle({ title, headerTitle }, route.name);\n const titleColor =\n headerTitleStyleFlattened.color ?? headerTintColor ?? colors.text;\n const titleFontSize = headerTitleStyleFlattened.fontSize;\n const titleFontWeight = headerTitleStyleFlattened.fontWeight;\n\n const headerTitleStyleSupported: TextStyle = { color: titleColor };\n\n if (headerTitleStyleFlattened.fontFamily != null) {\n headerTitleStyleSupported.fontFamily = headerTitleStyleFlattened.fontFamily;\n }\n\n if (titleFontSize != null) {\n headerTitleStyleSupported.fontSize = titleFontSize;\n }\n\n if (titleFontWeight != null) {\n headerTitleStyleSupported.fontWeight = titleFontWeight;\n }\n\n const headerLeftElement = headerLeft?.({\n tintColor,\n canGoBack,\n label: headerBackTitle,\n });\n const headerRightElement = headerRight?.({\n tintColor,\n canGoBack,\n });\n const headerTitleElement =\n typeof headerTitle === 'function'\n ? headerTitle({\n tintColor,\n children: titleText,\n })\n : null;\n\n const supportsHeaderSearchBar =\n typeof isSearchBarAvailableForCurrentPlatform === 'boolean'\n ? isSearchBarAvailableForCurrentPlatform\n : // Fallback for older versions of react-native-screens\n Platform.OS === 'ios' && SearchBar != null;\n\n const hasHeaderSearchBar =\n supportsHeaderSearchBar && headerSearchBarOptions != null;\n\n if (headerSearchBarOptions != null && !supportsHeaderSearchBar) {\n throw new Error(\n `The current version of 'react-native-screens' doesn't support SearchBar in the header. Please update to the latest version to use this option.`\n );\n }\n\n /**\n * We need to set this in if:\n * - Back button should stay visible when `headerLeft` is specified\n * - If `headerTitle` for Android is specified, so we only need to remove the title and keep the back button\n */\n const backButtonInCustomView = headerBackVisible\n ? headerLeftElement != null\n : Platform.OS === 'android' && headerTitleElement != null;\n\n const translucent =\n headerBackground != null ||\n headerTransparent ||\n // When using a SearchBar or large title, the header needs to be translucent for it to work on iOS\n ((hasHeaderSearchBar || headerLargeTitle) &&\n Platform.OS === 'ios' &&\n headerTransparent !== false);\n\n return (\n <>\n {headerBackground != null ? (\n <View\n style={[\n styles.background,\n headerTransparent ? styles.translucent : null,\n { height: headerHeight },\n ]}\n >\n {headerBackground()}\n </View>\n ) : null}\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyleFlattened.backgroundColor ??\n (headerBackground != null || headerTransparent\n ? 'transparent'\n : colors.card)\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyleFlattened.fontSize}\n blurEffect={headerBlurEffect}\n color={tintColor}\n direction={I18nManager.getConstants().isRTL ? 'rtl' : 'ltr'}\n disableBackButtonMenu={headerBackButtonMenuEnabled === false}\n hidden={headerShown === false}\n hideBackButton={headerBackVisible === false}\n hideShadow={\n headerShadowVisible === false ||\n headerBackground != null ||\n headerTransparent\n }\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyleFlattened.backgroundColor}\n largeTitleColor={headerLargeTitleStyleFlattened.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyleFlattened.fontSize}\n largeTitleFontWeight={headerLargeTitleStyleFlattened.fontWeight}\n largeTitleHideShadow={headerLargeTitleShadowVisible === false}\n title={titleText}\n titleColor={titleColor}\n titleFontFamily={titleFontFamily}\n titleFontSize={titleFontSize}\n titleFontWeight={titleFontWeight}\n topInsetEnabled={insets.top !== 0}\n translucent={\n // This defaults to `true`, so we can't pass `undefined`\n translucent === true\n }\n >\n {Platform.OS === 'ios' ? (\n <>\n {headerLeftElement != null ? (\n <ScreenStackHeaderLeftView>\n {headerLeftElement}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleElement != null ? (\n <ScreenStackHeaderCenterView>\n {headerTitleElement}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n ) : (\n <>\n {headerLeftElement != null || typeof headerTitle === 'function' ? (\n <ScreenStackHeaderLeftView>\n <View style={styles.row}>\n {headerLeftElement}\n {headerTitleAlign !== 'center' ? (\n typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle\n tintColor={tintColor}\n style={headerTitleStyleSupported}\n >\n {titleText}\n </HeaderTitle>\n )\n ) : null}\n </View>\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerTitleAlign === 'center' ? (\n <ScreenStackHeaderCenterView>\n {typeof headerTitle === 'function' ? (\n headerTitleElement\n ) : (\n <HeaderTitle\n tintColor={tintColor}\n style={headerTitleStyleSupported}\n >\n {titleText}\n </HeaderTitle>\n )}\n </ScreenStackHeaderCenterView>\n ) : null}\n </>\n )}\n {headerBackImageSource !== undefined ? (\n <ScreenStackHeaderBackButtonImage source={headerBackImageSource} />\n ) : null}\n {headerRightElement != null ? (\n <ScreenStackHeaderRightView>\n {headerRightElement}\n </ScreenStackHeaderRightView>\n ) : null}\n {hasHeaderSearchBar ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...headerSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n translucent: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1,\n },\n background: {\n overflow: 'hidden',\n },\n});\n"]}
@@ -22,13 +22,13 @@ function NativeStackView(_ref) {
22
22
  state,
23
23
  descriptors
24
24
  } = _ref;
25
+ const parentHeaderBack = React.useContext(_elements.HeaderBackContext);
25
26
  return /*#__PURE__*/React.createElement(_elements.SafeAreaProviderCompat, null, /*#__PURE__*/React.createElement(_reactNative.View, {
26
27
  style: styles.container
27
28
  }, state.routes.map((route, i) => {
28
29
  var _state$routes, _state$routes2;
29
30
 
30
31
  const isFocused = state.index === i;
31
- const canGoBack = i !== 0;
32
32
  const previousKey = (_state$routes = state.routes[i - 1]) === null || _state$routes === void 0 ? void 0 : _state$routes.key;
33
33
  const nextKey = (_state$routes2 = state.routes[i + 1]) === null || _state$routes2 === void 0 ? void 0 : _state$routes2.key;
34
34
  const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;
@@ -38,6 +38,10 @@ function NativeStackView(_ref) {
38
38
  navigation,
39
39
  render
40
40
  } = descriptors[route.key];
41
+ const headerBack = previousDescriptor ? {
42
+ title: (0, _elements.getHeaderTitle)(previousDescriptor.options, previousDescriptor.route.name)
43
+ } : parentHeaderBack;
44
+ const canGoBack = headerBack !== undefined;
41
45
  const {
42
46
  header,
43
47
  headerShown,
@@ -65,9 +69,7 @@ function NativeStackView(_ref) {
65
69
  headerShown: headerShown,
66
70
  headerTransparent: headerTransparent,
67
71
  header: header !== undefined ? header({
68
- back: previousDescriptor ? {
69
- title: (0, _elements.getHeaderTitle)(previousDescriptor.options, previousDescriptor.route.name)
70
- } : undefined,
72
+ back: headerBack,
71
73
  options,
72
74
  route,
73
75
  navigation
@@ -130,9 +132,11 @@ function NativeStackView(_ref) {
130
132
  }, presentation != null && TRANSPARENT_PRESENTATIONS.includes(presentation) ? {
131
133
  backgroundColor: 'transparent'
132
134
  } : null]
135
+ }, /*#__PURE__*/React.createElement(_elements.HeaderBackContext.Provider, {
136
+ value: headerBack
133
137
  }, /*#__PURE__*/React.createElement(_reactNative.View, {
134
138
  style: [styles.contentContainer, contentStyle]
135
- }, render()));
139
+ }, render())));
136
140
  })));
137
141
  }
138
142
 
@@ -1 +1 @@
1
- {"version":3,"sources":["NativeStackView.tsx"],"names":["TRANSPARENT_PRESENTATIONS","NativeStackView","state","descriptors","styles","container","routes","map","route","i","isFocused","index","canGoBack","previousKey","key","nextKey","previousDescriptor","undefined","nextDescriptor","options","navigation","render","header","headerShown","headerTintColor","headerBackImageSource","headerLeft","headerRight","headerTitle","headerTitleAlign","headerTitleStyle","headerStyle","headerShadowVisible","headerTransparent","headerBackground","headerBackTitle","presentation","contentStyle","nextPresentation","back","title","name","tintColor","label","backImage","goBack","children","StyleSheet","absoluteFill","display","includes","backgroundColor","contentContainer","create","flex","height","width","margin","resizeMode"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n HeaderBackButton,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n StackNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\n\nimport type {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n} from '../types';\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n // This is used for the native implementation of the stack.\n // eslint-disable-next-line react/no-unused-prop-types\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nconst TRANSPARENT_PRESENTATIONS = [\n 'transparentModal',\n 'containedTransparentModal',\n];\n\nexport default function NativeStackView({ state, descriptors }: Props) {\n return (\n <SafeAreaProviderCompat>\n <View style={styles.container}>\n {state.routes.map((route, i) => {\n const isFocused = state.index === i;\n const canGoBack = i !== 0;\n const previousKey = state.routes[i - 1]?.key;\n const nextKey = state.routes[i + 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n const { options, navigation, render } = descriptors[route.key];\n\n const {\n header,\n headerShown,\n headerTintColor,\n headerBackImageSource,\n headerLeft,\n headerRight,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerStyle,\n headerShadowVisible,\n headerTransparent,\n headerBackground,\n headerBackTitle,\n presentation,\n contentStyle,\n } = options;\n\n const nextPresentation = nextDescriptor?.options.presentation;\n\n return (\n <Screen\n key={route.key}\n focused={isFocused}\n route={route}\n navigation={navigation}\n headerShown={headerShown}\n headerTransparent={headerTransparent}\n header={\n header !== undefined ? (\n header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })\n ) : (\n <Header\n title={getHeaderTitle(options, route.name)}\n headerTintColor={headerTintColor}\n headerLeft={\n typeof headerLeft === 'function'\n ? ({ tintColor }) =>\n headerLeft({\n tintColor,\n canGoBack,\n label: headerBackTitle,\n })\n : headerLeft === undefined && canGoBack\n ? ({ tintColor }) => (\n <HeaderBackButton\n tintColor={tintColor}\n backImage={\n headerBackImageSource !== undefined\n ? () => (\n <Image\n source={headerBackImageSource}\n style={[\n styles.backImage,\n { tintColor },\n ]}\n />\n )\n : undefined\n }\n onPress={navigation.goBack}\n canGoBack={canGoBack}\n />\n )\n : headerLeft\n }\n headerRight={\n typeof headerRight === 'function'\n ? ({ tintColor }) =>\n headerRight({ tintColor, canGoBack })\n : headerRight\n }\n headerTitle={\n typeof headerTitle === 'function'\n ? ({ children, tintColor }) =>\n headerTitle({ children, tintColor })\n : headerTitle\n }\n headerTitleAlign={headerTitleAlign}\n headerTitleStyle={headerTitleStyle}\n headerTransparent={headerTransparent}\n headerShadowVisible={headerShadowVisible}\n headerBackground={headerBackground}\n headerStyle={headerStyle}\n />\n )\n }\n style={[\n StyleSheet.absoluteFill,\n {\n display:\n isFocused ||\n (nextPresentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(nextPresentation))\n ? 'flex'\n : 'none',\n },\n presentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(presentation)\n ? { backgroundColor: 'transparent' }\n : null,\n ]}\n >\n <View style={[styles.contentContainer, contentStyle]}>\n {render()}\n </View>\n </Screen>\n );\n })}\n </View>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n contentContainer: {\n flex: 1,\n },\n backImage: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n },\n});\n"]}
1
+ {"version":3,"sources":["NativeStackView.tsx"],"names":["TRANSPARENT_PRESENTATIONS","NativeStackView","state","descriptors","parentHeaderBack","React","useContext","HeaderBackContext","styles","container","routes","map","route","i","isFocused","index","previousKey","key","nextKey","previousDescriptor","undefined","nextDescriptor","options","navigation","render","headerBack","title","name","canGoBack","header","headerShown","headerTintColor","headerBackImageSource","headerLeft","headerRight","headerTitle","headerTitleAlign","headerTitleStyle","headerStyle","headerShadowVisible","headerTransparent","headerBackground","headerBackTitle","presentation","contentStyle","nextPresentation","back","tintColor","label","backImage","goBack","children","StyleSheet","absoluteFill","display","includes","backgroundColor","contentContainer","create","flex","height","width","margin","resizeMode"],"mappings":"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","sourcesContent":["import {\n getHeaderTitle,\n Header,\n HeaderBackButton,\n HeaderBackContext,\n SafeAreaProviderCompat,\n Screen,\n} from '@react-navigation/elements';\nimport type {\n ParamListBase,\n StackNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Image, StyleSheet, View } from 'react-native';\n\nimport type {\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n} from '../types';\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n // This is used for the native implementation of the stack.\n // eslint-disable-next-line react/no-unused-prop-types\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nconst TRANSPARENT_PRESENTATIONS = [\n 'transparentModal',\n 'containedTransparentModal',\n];\n\nexport default function NativeStackView({ state, descriptors }: Props) {\n const parentHeaderBack = React.useContext(HeaderBackContext);\n\n return (\n <SafeAreaProviderCompat>\n <View style={styles.container}>\n {state.routes.map((route, i) => {\n const isFocused = state.index === i;\n const previousKey = state.routes[i - 1]?.key;\n const nextKey = state.routes[i + 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n const { options, navigation, render } = descriptors[route.key];\n\n const headerBack = previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : parentHeaderBack;\n\n const canGoBack = headerBack !== undefined;\n\n const {\n header,\n headerShown,\n headerTintColor,\n headerBackImageSource,\n headerLeft,\n headerRight,\n headerTitle,\n headerTitleAlign,\n headerTitleStyle,\n headerStyle,\n headerShadowVisible,\n headerTransparent,\n headerBackground,\n headerBackTitle,\n presentation,\n contentStyle,\n } = options;\n\n const nextPresentation = nextDescriptor?.options.presentation;\n\n return (\n <Screen\n key={route.key}\n focused={isFocused}\n route={route}\n navigation={navigation}\n headerShown={headerShown}\n headerTransparent={headerTransparent}\n header={\n header !== undefined ? (\n header({\n back: headerBack,\n options,\n route,\n navigation,\n })\n ) : (\n <Header\n title={getHeaderTitle(options, route.name)}\n headerTintColor={headerTintColor}\n headerLeft={\n typeof headerLeft === 'function'\n ? ({ tintColor }) =>\n headerLeft({\n tintColor,\n canGoBack,\n label: headerBackTitle,\n })\n : headerLeft === undefined && canGoBack\n ? ({ tintColor }) => (\n <HeaderBackButton\n tintColor={tintColor}\n backImage={\n headerBackImageSource !== undefined\n ? () => (\n <Image\n source={headerBackImageSource}\n style={[\n styles.backImage,\n { tintColor },\n ]}\n />\n )\n : undefined\n }\n onPress={navigation.goBack}\n canGoBack={canGoBack}\n />\n )\n : headerLeft\n }\n headerRight={\n typeof headerRight === 'function'\n ? ({ tintColor }) =>\n headerRight({ tintColor, canGoBack })\n : headerRight\n }\n headerTitle={\n typeof headerTitle === 'function'\n ? ({ children, tintColor }) =>\n headerTitle({ children, tintColor })\n : headerTitle\n }\n headerTitleAlign={headerTitleAlign}\n headerTitleStyle={headerTitleStyle}\n headerTransparent={headerTransparent}\n headerShadowVisible={headerShadowVisible}\n headerBackground={headerBackground}\n headerStyle={headerStyle}\n />\n )\n }\n style={[\n StyleSheet.absoluteFill,\n {\n display:\n isFocused ||\n (nextPresentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(nextPresentation))\n ? 'flex'\n : 'none',\n },\n presentation != null &&\n TRANSPARENT_PRESENTATIONS.includes(presentation)\n ? { backgroundColor: 'transparent' }\n : null,\n ]}\n >\n <HeaderBackContext.Provider value={headerBack}>\n <View style={[styles.contentContainer, contentStyle]}>\n {render()}\n </View>\n </HeaderBackContext.Provider>\n </Screen>\n );\n })}\n </View>\n </SafeAreaProviderCompat>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n contentContainer: {\n flex: 1,\n },\n backImage: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n },\n});\n"]}
@@ -19,6 +19,10 @@ var _reactNativeScreens = require("react-native-screens");
19
19
 
20
20
  var _warnOnce = _interopRequireDefault(require("warn-once"));
21
21
 
22
+ var _useDismissedRouteError = _interopRequireDefault(require("../utils/useDismissedRouteError"));
23
+
24
+ var _useInvalidPreventRemoveError = _interopRequireDefault(require("../utils/useInvalidPreventRemoveError"));
25
+
22
26
  var _DebugContainer = _interopRequireDefault(require("./DebugContainer"));
23
27
 
24
28
  var _HeaderConfig = _interopRequireDefault(require("./HeaderConfig"));
@@ -79,6 +83,8 @@ const MaybeNestedStack = _ref => {
79
83
  };
80
84
 
81
85
  const SceneView = _ref2 => {
86
+ var _preventedRoutes$rout;
87
+
82
88
  let {
83
89
  descriptor,
84
90
  previousDescriptor,
@@ -87,7 +93,9 @@ const SceneView = _ref2 => {
87
93
  onWillDisappear,
88
94
  onAppear,
89
95
  onDisappear,
90
- onDismissed
96
+ onDismissed,
97
+ onHeaderBackButtonClicked,
98
+ onNativeDismissCancelled
91
99
  } = _ref2;
92
100
  const {
93
101
  route,
@@ -100,6 +108,7 @@ const SceneView = _ref2 => {
100
108
  animationTypeForReplace = 'push',
101
109
  gestureEnabled,
102
110
  header,
111
+ headerBackButtonMenuEnabled,
103
112
  headerShown,
104
113
  autoHideHomeIndicator,
105
114
  navigationBarColor,
@@ -160,9 +169,17 @@ const SceneView = _ref2 => {
160
169
  const topInset = isModal || isIPhone && isLandscape ? 0 : insets.top;
161
170
  const isParentHeaderShown = React.useContext(_elements.HeaderShownContext);
162
171
  const parentHeaderHeight = React.useContext(_elements.HeaderHeightContext);
172
+ const parentHeaderBack = React.useContext(_elements.HeaderBackContext);
173
+ const {
174
+ preventedRoutes
175
+ } = (0, _native.usePreventRemoveContext)();
163
176
  const defaultHeaderHeight = (0, _elements.getDefaultHeaderHeight)(frame, isModal, topInset);
164
177
  const [customHeaderHeight, setCustomHeaderHeight] = React.useState(defaultHeaderHeight);
165
178
  const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;
179
+ const headerBack = previousDescriptor ? {
180
+ title: (0, _elements.getHeaderTitle)(previousDescriptor.options, previousDescriptor.route.name)
181
+ } : parentHeaderBack;
182
+ const isRemovePrevented = (_preventedRoutes$rout = preventedRoutes[route.key]) === null || _preventedRoutes$rout === void 0 ? void 0 : _preventedRoutes$rout.preventRemove;
166
183
  return /*#__PURE__*/React.createElement(_reactNativeScreens.Screen, {
167
184
  key: route.key,
168
185
  enabled: true,
@@ -190,7 +207,15 @@ const SceneView = _ref2 => {
190
207
  onAppear: onAppear,
191
208
  onDisappear: onDisappear,
192
209
  onDismissed: onDismissed,
193
- isNativeStack: true
210
+ isNativeStack: true // Props for enabling preventing removal in native-stack
211
+ ,
212
+ nativeBackButtonDismissalEnabled: false // on Android
213
+ // @ts-expect-error prop not publicly exported from rn-screens
214
+ ,
215
+ preventNativeDismiss: isRemovePrevented // on iOS
216
+ ,
217
+ onHeaderBackButtonClicked: onHeaderBackButtonClicked,
218
+ onNativeDismissCancelled: onNativeDismissCancelled
194
219
  }, /*#__PURE__*/React.createElement(_native.NavigationContext.Provider, {
195
220
  value: navigation
196
221
  }, /*#__PURE__*/React.createElement(_native.NavigationRouteContext.Provider, {
@@ -204,41 +229,37 @@ const SceneView = _ref2 => {
204
229
  setCustomHeaderHeight(e.nativeEvent.layout.height);
205
230
  }
206
231
  }, header({
207
- back: previousDescriptor ? {
208
- title: (0, _elements.getHeaderTitle)(previousDescriptor.options, previousDescriptor.route.name)
209
- } : undefined,
232
+ back: headerBack,
210
233
  options,
211
234
  route,
212
235
  navigation
213
236
  })) : /*#__PURE__*/React.createElement(_HeaderConfig.default, _extends({}, options, {
214
237
  route: route,
238
+ headerBackButtonMenuEnabled: isRemovePrevented !== undefined ? !isRemovePrevented : headerBackButtonMenuEnabled,
215
239
  headerShown: isHeaderInPush,
216
240
  headerHeight: headerHeight,
217
- canGoBack: index !== 0
241
+ headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : headerBack === null || headerBack === void 0 ? void 0 : headerBack.title,
242
+ canGoBack: headerBack !== undefined
218
243
  })), /*#__PURE__*/React.createElement(MaybeNestedStack, {
219
244
  options: options,
220
245
  route: route,
221
246
  presentation: presentation,
222
247
  headerHeight: headerHeight
223
- }, render()))))));
248
+ }, /*#__PURE__*/React.createElement(_elements.HeaderBackContext.Provider, {
249
+ value: headerBack
250
+ }, render())))))));
224
251
  };
225
252
 
226
253
  function NativeStackViewInner(_ref3) {
227
- var _state$routes$find;
228
-
229
254
  let {
230
255
  state,
231
256
  navigation,
232
257
  descriptors
233
258
  } = _ref3;
234
- const [nextDismissedKey, setNextDismissedKey] = React.useState(null);
235
- const dismissedRouteName = nextDismissedKey ? (_state$routes$find = state.routes.find(route => route.key === nextDismissedKey)) === null || _state$routes$find === void 0 ? void 0 : _state$routes$find.name : null;
236
- React.useEffect(() => {
237
- if (dismissedRouteName) {
238
- const message = `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` + `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\n\n` + `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;
239
- console.error(message);
240
- }
241
- }, [dismissedRouteName]);
259
+ const {
260
+ setNextDismissedKey
261
+ } = (0, _useDismissedRouteError.default)(state);
262
+ (0, _useInvalidPreventRemoveError.default)(descriptors);
242
263
  return /*#__PURE__*/React.createElement(_reactNativeScreens.ScreenStack, {
243
264
  style: styles.container
244
265
  }, state.routes.map((route, index) => {
@@ -288,6 +309,18 @@ function NativeStackViewInner(_ref3) {
288
309
  target: state.key
289
310
  });
290
311
  setNextDismissedKey(route.key);
312
+ },
313
+ onHeaderBackButtonClicked: () => {
314
+ navigation.dispatch({ ..._native.StackActions.pop(),
315
+ source: route.key,
316
+ target: state.key
317
+ });
318
+ },
319
+ onNativeDismissCancelled: event => {
320
+ navigation.dispatch({ ..._native.StackActions.pop(event.nativeEvent.dismissCount),
321
+ source: route.key,
322
+ target: state.key
323
+ });
291
324
  }
292
325
  });
293
326
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["NativeStackView.native.tsx"],"names":["isAndroid","Platform","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","React","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","StyleSheet","absoluteFill","SceneView","descriptor","previousDescriptor","nextDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","navigation","render","animationDuration","animationTypeForReplace","gestureEnabled","autoHideHomeIndicator","navigationBarColor","navigationBarHidden","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","statusBarTranslucent","statusBarColor","animation","customAnimationOnGesture","fullScreenGestureEnabled","gestureDirection","nextGestureDirection","gestureDirectionOverride","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","HeaderShownContext","parentHeaderHeight","HeaderHeightContext","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","key","e","nativeEvent","layout","back","title","NativeStackViewInner","state","descriptors","nextDismissedKey","setNextDismissedKey","dismissedRouteName","routes","find","message","console","error","map","previousKey","nextKey","emit","type","data","closing","target","event","dispatch","StackActions","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":"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","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\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, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n nextDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n nextDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animationDuration,\n animationTypeForReplace = 'push',\n gestureEnabled,\n header,\n headerShown,\n autoHideHomeIndicator,\n navigationBarColor,\n navigationBarHidden,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n statusBarColor,\n } = options;\n\n let {\n animation,\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n presentation = 'card',\n gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical',\n } = options;\n\n if (gestureDirection === 'vertical' && Platform.OS === 'ios') {\n // for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnGesture` needs to be set to `true` so the `animation` 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 (fullScreenGestureEnabled === undefined) {\n fullScreenGestureEnabled = true;\n }\n if (customAnimationOnGesture === undefined) {\n customAnimationOnGesture = true;\n }\n if (animation === undefined) {\n animation = 'slide_from_bottom';\n }\n }\n\n // workaround for rn-screens where gestureDirection has to be set on both\n // current and previous screen - software-mansion/react-native-screens/pull/1509\n const nextGestureDirection = nextDescriptor?.options.gestureDirection;\n const gestureDirectionOverride =\n nextGestureDirection != null ? nextGestureDirection : gestureDirection;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad || Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n homeIndicatorHidden={autoHideHomeIndicator}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarColor={statusBarColor}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={gestureDirectionOverride}\n transitionDuration={animationDuration}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n >\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false\n ? headerHeight\n : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : undefined,\n options,\n route,\n navigation,\n })}\n </View>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n canGoBack={index !== 0}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n {render()}\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using 'gestureEnabled: false' to prevent back gesture and use a custom back button with 'headerLeft' option to override the native behavior.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const nextKey = state.routes[index + 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n nextDescriptor={nextDescriptor}\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: '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={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n />\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.native.tsx"],"names":["isAndroid","Platform","OS","MaybeNestedStack","options","route","presentation","headerHeight","children","colors","header","headerShown","contentStyle","isHeaderInModal","undefined","headerShownPreviousRef","React","useRef","useEffect","current","name","content","styles","container","backgroundColor","background","StyleSheet","absoluteFill","SceneView","descriptor","previousDescriptor","nextDescriptor","index","onWillDisappear","onAppear","onDisappear","onDismissed","onHeaderBackButtonClicked","onNativeDismissCancelled","navigation","render","animationDuration","animationTypeForReplace","gestureEnabled","headerBackButtonMenuEnabled","autoHideHomeIndicator","navigationBarColor","navigationBarHidden","orientation","statusBarAnimation","statusBarHidden","statusBarStyle","statusBarTranslucent","statusBarColor","animation","customAnimationOnGesture","fullScreenGestureEnabled","gestureDirection","nextGestureDirection","gestureDirectionOverride","isHeaderInPush","insets","frame","isModal","isIPhone","isPad","isTVOS","isLandscape","width","height","topInset","top","isParentHeaderShown","useContext","HeaderShownContext","parentHeaderHeight","HeaderHeightContext","parentHeaderBack","HeaderBackContext","preventedRoutes","defaultHeaderHeight","customHeaderHeight","setCustomHeaderHeight","useState","headerBack","title","isRemovePrevented","key","preventRemove","e","nativeEvent","layout","back","headerBackTitle","NativeStackViewInner","state","descriptors","setNextDismissedKey","routes","map","previousKey","nextKey","emit","type","data","closing","target","event","dispatch","StackActions","pop","dismissCount","source","NativeStackView","props","create","flex"],"mappings":";;;;;;;AAAA;;AAQA;;AAUA;;AACA;;AACA;;AAKA;;AAKA;;AAQA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,MAAMA,SAAS,GAAGC,sBAASC,EAAT,KAAgB,SAAlC;;AAEA,MAAMC,gBAAgB,GAAG,QAYnB;AAAA,MAZoB;AACxBC,IAAAA,OADwB;AAExBC,IAAAA,KAFwB;AAGxBC,IAAAA,YAHwB;AAIxBC,IAAAA,YAJwB;AAKxBC,IAAAA;AALwB,GAYpB;AACJ,QAAM;AAAEC,IAAAA;AAAF,MAAa,uBAAnB;AACA,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA,WAAW,GAAG,IAAxB;AAA8BC,IAAAA;AAA9B,MAA+CR,OAArD;AAEA,QAAMS,eAAe,GAAGb,SAAS,GAC7B,KAD6B,GAE7BM,YAAY,KAAK,MAAjB,IAA2BK,WAAW,KAAK,IAA3C,IAAmDD,MAAM,KAAKI,SAFlE;AAIA,QAAMC,sBAAsB,GAAGC,KAAK,CAACC,MAAN,CAAaN,WAAb,CAA/B;AAEAK,EAAAA,KAAK,CAACE,SAAN,CAAgB,MAAM;AACpB,2BACE,CAAClB,SAAD,IACEM,YAAY,KAAK,MADnB,IAEES,sBAAsB,CAACI,OAAvB,KAAmCR,WAHvC,EAIG,6IAA4IN,KAAK,CAACe,IAAK,IAJ1J;AAOAL,IAAAA,sBAAsB,CAACI,OAAvB,GAAiCR,WAAjC;AACD,GATD,EASG,CAACA,WAAD,EAAcL,YAAd,EAA4BD,KAAK,CAACe,IAAlC,CATH;AAWA,QAAMC,OAAO,gBACX,oBAAC,uBAAD;AACE,IAAA,KAAK,EAAE,CACLC,MAAM,CAACC,SADF,EAELjB,YAAY,KAAK,kBAAjB,IACEA,YAAY,KAAK,2BADnB,IACkD;AAC9CkB,MAAAA,eAAe,EAAEf,MAAM,CAACgB;AADsB,KAH7C,EAMLb,YANK,CADT;AASE,IAAA,iBAAiB,EAAEN,YAAY,KAAK,MAAjB,GAA0B,MAA1B,GAAmCA;AATxD,KAWGE,QAXH,CADF;;AAgBA,MAAIK,eAAJ,EAAqB;AACnB,wBACE,oBAAC,+BAAD;AAAa,MAAA,KAAK,EAAES,MAAM,CAACC;AAA3B,oBACE,oBAAC,0BAAD;AAAQ,MAAA,OAAO,MAAf;AAAgB,MAAA,KAAK,EAAEG,wBAAWC;AAAlC,oBACE,oBAAC,qBAAD,eACMvB,OADN;AAEE,MAAA,KAAK,EAAEC,KAFT;AAGE,MAAA,YAAY,EAAEE,YAHhB;AAIE,MAAA,SAAS;AAJX,OADF,EAOGc,OAPH,CADF,CADF;AAaD;;AAED,SAAOA,OAAP;AACD,CAlED;;AAiFA,MAAMO,SAAS,GAAG,SAWI;AAAA;;AAAA,MAXH;AACjBC,IAAAA,UADiB;AAEjBC,IAAAA,kBAFiB;AAGjBC,IAAAA,cAHiB;AAIjBC,IAAAA,KAJiB;AAKjBC,IAAAA,eALiB;AAMjBC,IAAAA,QANiB;AAOjBC,IAAAA,WAPiB;AAQjBC,IAAAA,WARiB;AASjBC,IAAAA,yBATiB;AAUjBC,IAAAA;AAViB,GAWG;AACpB,QAAM;AAAEjC,IAAAA,KAAF;AAASkC,IAAAA,UAAT;AAAqBnC,IAAAA,OAArB;AAA8BoC,IAAAA;AAA9B,MAAyCX,UAA/C;AACA,QAAM;AACJY,IAAAA,iBADI;AAEJC,IAAAA,uBAAuB,GAAG,MAFtB;AAGJC,IAAAA,cAHI;AAIJjC,IAAAA,MAJI;AAKJkC,IAAAA,2BALI;AAMJjC,IAAAA,WANI;AAOJkC,IAAAA,qBAPI;AAQJC,IAAAA,kBARI;AASJC,IAAAA,mBATI;AAUJC,IAAAA,WAVI;AAWJC,IAAAA,kBAXI;AAYJC,IAAAA,eAZI;AAaJC,IAAAA,cAbI;AAcJC,IAAAA,oBAdI;AAeJC,IAAAA;AAfI,MAgBFjD,OAhBJ;AAkBA,MAAI;AACFkD,IAAAA,SADE;AAEFC,IAAAA,wBAFE;AAGFC,IAAAA,wBAHE;AAIFlD,IAAAA,YAAY,GAAG,MAJb;AAKFmD,IAAAA,gBAAgB,GAAGnD,YAAY,KAAK,MAAjB,GAA0B,YAA1B,GAAyC;AAL1D,MAMAF,OANJ;;AAQA,MAAIqD,gBAAgB,KAAK,UAArB,IAAmCxD,sBAASC,EAAT,KAAgB,KAAvD,EAA8D;AAC5D;AACA;AACA;AACA;AACA;AACA,QAAIsD,wBAAwB,KAAK1C,SAAjC,EAA4C;AAC1C0C,MAAAA,wBAAwB,GAAG,IAA3B;AACD;;AACD,QAAID,wBAAwB,KAAKzC,SAAjC,EAA4C;AAC1CyC,MAAAA,wBAAwB,GAAG,IAA3B;AACD;;AACD,QAAID,SAAS,KAAKxC,SAAlB,EAA6B;AAC3BwC,MAAAA,SAAS,GAAG,mBAAZ;AACD;AACF,GA3CmB,CA6CpB;AACA;;;AACA,QAAMI,oBAAoB,GAAG3B,cAAH,aAAGA,cAAH,uBAAGA,cAAc,CAAE3B,OAAhB,CAAwBqD,gBAArD;AACA,QAAME,wBAAwB,GAC5BD,oBAAoB,IAAI,IAAxB,GAA+BA,oBAA/B,GAAsDD,gBADxD;;AAGA,MAAIzB,KAAK,KAAK,CAAd,EAAiB;AACf;AACA;AACA1B,IAAAA,YAAY,GAAG,MAAf;AACD;;AAED,QAAMsD,cAAc,GAAG5D,SAAS,GAC5BW,WAD4B,GAE5BL,YAAY,KAAK,MAAjB,IAA2BK,WAAW,KAAK,KAF/C;AAIA,QAAMkD,MAAM,GAAG,oDAAf;AACA,QAAMC,KAAK,GAAG,mDAAd,CA9DoB,CAgEpB;;AACA,QAAMC,OAAO,GAAGzD,YAAY,KAAK,OAAjB,IAA4BA,YAAY,KAAK,WAA7D,CAjEoB,CAmEpB;;AACA,QAAM0D,QAAQ,GACZ/D,sBAASC,EAAT,KAAgB,KAAhB,IAAyB,EAAED,sBAASgE,KAAT,IAAkBhE,sBAASiE,MAA7B,CAD3B;AAEA,QAAMC,WAAW,GAAGL,KAAK,CAACM,KAAN,GAAcN,KAAK,CAACO,MAAxC;AAEA,QAAMC,QAAQ,GAAGP,OAAO,IAAKC,QAAQ,IAAIG,WAAxB,GAAuC,CAAvC,GAA2CN,MAAM,CAACU,GAAnE;AAEA,QAAMC,mBAAmB,GAAGxD,KAAK,CAACyD,UAAN,CAAiBC,4BAAjB,CAA5B;AACA,QAAMC,kBAAkB,GAAG3D,KAAK,CAACyD,UAAN,CAAiBG,6BAAjB,CAA3B;AACA,QAAMC,gBAAgB,GAAG7D,KAAK,CAACyD,UAAN,CAAiBK,2BAAjB,CAAzB;AAEA,QAAM;AAAEC,IAAAA;AAAF,MAAsB,sCAA5B;AAEA,QAAMC,mBAAmB,GAAG,sCAAuBlB,KAAvB,EAA8BC,OAA9B,EAAuCO,QAAvC,CAA5B;AAEA,QAAM,CAACW,kBAAD,EAAqBC,qBAArB,IACJlE,KAAK,CAACmE,QAAN,CAAeH,mBAAf,CADF;AAGA,QAAMzE,YAAY,GAAGG,MAAM,GAAGuE,kBAAH,GAAwBD,mBAAnD;AACA,QAAMI,UAAU,GAAGtD,kBAAkB,GACjC;AACEuD,IAAAA,KAAK,EAAE,8BACLvD,kBAAkB,CAAC1B,OADd,EAEL0B,kBAAkB,CAACzB,KAAnB,CAAyBe,IAFpB;AADT,GADiC,GAOjCyD,gBAPJ;AASA,QAAMS,iBAAiB,4BAAGP,eAAe,CAAC1E,KAAK,CAACkF,GAAP,CAAlB,0DAAG,sBAA4BC,aAAtD;AAEA,sBACE,oBAAC,0BAAD;AACE,IAAA,GAAG,EAAEnF,KAAK,CAACkF,GADb;AAEE,IAAA,OAAO,MAFT;AAGE,IAAA,KAAK,EAAE7D,wBAAWC,YAHpB;AAIE,IAAA,sBAAsB,EAAE4B,wBAJ1B;AAKE,IAAA,sBAAsB,EAAEC,wBAL1B;AAME,IAAA,cAAc,EACZxD,SAAS,GACL;AACA;AACA,SAHK,GAIL2C,cAXR;AAaE,IAAA,mBAAmB,EAAEE,qBAbvB;AAcE,IAAA,kBAAkB,EAAEC,kBAdtB;AAeE,IAAA,mBAAmB,EAAEC,mBAfvB;AAgBE,IAAA,gBAAgB,EAAEL,uBAhBpB;AAiBE,IAAA,iBAAiB,EAAEpC,YAAY,KAAK,MAAjB,GAA0B,MAA1B,GAAmCA,YAjBxD;AAkBE,IAAA,cAAc,EAAEgD,SAlBlB;AAmBE,IAAA,iBAAiB,EAAEN,WAnBrB;AAoBE,IAAA,kBAAkB,EAAEC,kBApBtB;AAqBE,IAAA,eAAe,EAAEC,eArBnB;AAsBE,IAAA,cAAc,EAAEC,cAtBlB;AAuBE,IAAA,cAAc,EAAEE,cAvBlB;AAwBE,IAAA,oBAAoB,EAAED,oBAxBxB;AAyBE,IAAA,cAAc,EAAEO,wBAzBlB;AA0BE,IAAA,kBAAkB,EAAElB,iBA1BtB;AA2BE,IAAA,eAAe,EAAER,eA3BnB;AA4BE,IAAA,QAAQ,EAAEC,QA5BZ;AA6BE,IAAA,WAAW,EAAEC,WA7Bf;AA8BE,IAAA,WAAW,EAAEC,WA9Bf;AA+BE,IAAA,aAAa,MA/Bf,CAgCE;AAhCF;AAiCE,IAAA,gCAAgC,EAAE,KAjCpC,CAiC2C;AACzC;AAlCF;AAmCE,IAAA,oBAAoB,EAAEkD,iBAnCxB,CAmC2C;AAnC3C;AAoCE,IAAA,yBAAyB,EAAEjD,yBApC7B;AAqCE,IAAA,wBAAwB,EAAEC;AArC5B,kBAuCE,oBAAC,yBAAD,CAAmB,QAAnB;AAA4B,IAAA,KAAK,EAAEC;AAAnC,kBACE,oBAAC,8BAAD,CAAwB,QAAxB;AAAiC,IAAA,KAAK,EAAElC;AAAxC,kBACE,oBAAC,4BAAD,CAAoB,QAApB;AACE,IAAA,KAAK,EAAEmE,mBAAmB,IAAIZ,cAAc,KAAK;AADnD,kBAGE,oBAAC,6BAAD,CAAqB,QAArB;AACE,IAAA,KAAK,EACHA,cAAc,KAAK,KAAnB,GACIrD,YADJ,GAEIoE,kBAFJ,aAEIA,kBAFJ,cAEIA,kBAFJ,GAE0B;AAJ9B,KAOGjE,MAAM,KAAKI,SAAX,IAAwBH,WAAW,KAAK,KAAxC,gBACC,oBAAC,iBAAD;AACE,IAAA,QAAQ,EAAG8E,CAAD,IAAO;AACfP,MAAAA,qBAAqB,CAACO,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBtB,MAAtB,CAArB;AACD;AAHH,KAKG3D,MAAM,CAAC;AACNkF,IAAAA,IAAI,EAAER,UADA;AAENhF,IAAAA,OAFM;AAGNC,IAAAA,KAHM;AAINkC,IAAAA;AAJM,GAAD,CALT,CADD,gBAcC,oBAAC,qBAAD,eACMnC,OADN;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,2BAA2B,EACzBiF,iBAAiB,KAAKxE,SAAtB,GACI,CAACwE,iBADL,GAEI1C,2BANR;AAQE,IAAA,WAAW,EAAEgB,cARf;AASE,IAAA,YAAY,EAAErD,YAThB;AAUE,IAAA,eAAe,EACbH,OAAO,CAACyF,eAAR,KAA4B/E,SAA5B,GACIV,OAAO,CAACyF,eADZ,GAEIT,UAFJ,aAEIA,UAFJ,uBAEIA,UAAU,CAAEC,KAbpB;AAeE,IAAA,SAAS,EAAED,UAAU,KAAKtE;AAf5B,KArBJ,eAuCE,oBAAC,gBAAD;AACE,IAAA,OAAO,EAAEV,OADX;AAEE,IAAA,KAAK,EAAEC,KAFT;AAGE,IAAA,YAAY,EAAEC,YAHhB;AAIE,IAAA,YAAY,EAAEC;AAJhB,kBAME,oBAAC,2BAAD,CAAmB,QAAnB;AAA4B,IAAA,KAAK,EAAE6E;AAAnC,KACG5C,MAAM,EADT,CANF,CAvCF,CAHF,CADF,CADF,CAvCF,CADF;AAoGD,CAhND;;AAwNA,SAASsD,oBAAT,QAAyE;AAAA,MAA3C;AAAEC,IAAAA,KAAF;AAASxD,IAAAA,UAAT;AAAqByD,IAAAA;AAArB,GAA2C;AACvE,QAAM;AAAEC,IAAAA;AAAF,MAA0B,qCAAuBF,KAAvB,CAAhC;AAEA,6CAA6BC,WAA7B;AAEA,sBACE,oBAAC,+BAAD;AAAa,IAAA,KAAK,EAAE1E,MAAM,CAACC;AAA3B,KACGwE,KAAK,CAACG,MAAN,CAAaC,GAAb,CAAiB,CAAC9F,KAAD,EAAQ2B,KAAR,KAAkB;AAAA;;AAClC,UAAMH,UAAU,GAAGmE,WAAW,CAAC3F,KAAK,CAACkF,GAAP,CAA9B;AACA,UAAMa,WAAW,oBAAGL,KAAK,CAACG,MAAN,CAAalE,KAAK,GAAG,CAArB,CAAH,kDAAG,cAAyBuD,GAA7C;AACA,UAAMc,OAAO,qBAAGN,KAAK,CAACG,MAAN,CAAalE,KAAK,GAAG,CAArB,CAAH,mDAAG,eAAyBuD,GAAzC;AACA,UAAMzD,kBAAkB,GAAGsE,WAAW,GAClCJ,WAAW,CAACI,WAAD,CADuB,GAElCtF,SAFJ;AAGA,UAAMiB,cAAc,GAAGsE,OAAO,GAAGL,WAAW,CAACK,OAAD,CAAd,GAA0BvF,SAAxD;AAEA,wBACE,oBAAC,SAAD;AACE,MAAA,GAAG,EAAET,KAAK,CAACkF,GADb;AAEE,MAAA,KAAK,EAAEvD,KAFT;AAGE,MAAA,UAAU,EAAEH,UAHd;AAIE,MAAA,kBAAkB,EAAEC,kBAJtB;AAKE,MAAA,cAAc,EAAEC,cALlB;AAME,MAAA,eAAe,EAAE,MAAM;AACrBQ,QAAAA,UAAU,CAAC+D,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,iBADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAErG,KAAK,CAACkF;AAHA,SAAhB;AAKD,OAZH;AAaE,MAAA,QAAQ,EAAE,MAAM;AACdhD,QAAAA,UAAU,CAAC+D,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAErG,KAAK,CAACkF;AAHA,SAAhB;AAKD,OAnBH;AAoBE,MAAA,WAAW,EAAE,MAAM;AACjBhD,QAAAA,UAAU,CAAC+D,IAAX,CAAgB;AACdC,UAAAA,IAAI,EAAE,eADQ;AAEdC,UAAAA,IAAI,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX,WAFQ;AAGdC,UAAAA,MAAM,EAAErG,KAAK,CAACkF;AAHA,SAAhB;AAKD,OA1BH;AA2BE,MAAA,WAAW,EAAGoB,KAAD,IAAW;AACtBpE,QAAAA,UAAU,CAACqE,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,CAAiBH,KAAK,CAACjB,WAAN,CAAkBqB,YAAnC,CADe;AAElBC,UAAAA,MAAM,EAAE3G,KAAK,CAACkF,GAFI;AAGlBmB,UAAAA,MAAM,EAAEX,KAAK,CAACR;AAHI,SAApB;AAMAU,QAAAA,mBAAmB,CAAC5F,KAAK,CAACkF,GAAP,CAAnB;AACD,OAnCH;AAoCE,MAAA,yBAAyB,EAAE,MAAM;AAC/BhD,QAAAA,UAAU,CAACqE,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,EADe;AAElBE,UAAAA,MAAM,EAAE3G,KAAK,CAACkF,GAFI;AAGlBmB,UAAAA,MAAM,EAAEX,KAAK,CAACR;AAHI,SAApB;AAKD,OA1CH;AA2CE,MAAA,wBAAwB,EAAGoB,KAAD,IAAW;AACnCpE,QAAAA,UAAU,CAACqE,QAAX,CAAoB,EAClB,GAAGC,qBAAaC,GAAb,CAAiBH,KAAK,CAACjB,WAAN,CAAkBqB,YAAnC,CADe;AAElBC,UAAAA,MAAM,EAAE3G,KAAK,CAACkF,GAFI;AAGlBmB,UAAAA,MAAM,EAAEX,KAAK,CAACR;AAHI,SAApB;AAKD;AAjDH,MADF;AAqDD,GA9DA,CADH,CADF;AAmED;;AAEc,SAAS0B,eAAT,CAAyBC,KAAzB,EAAuC;AACpD,sBACE,oBAAC,gCAAD,qBACE,oBAAC,oBAAD,EAA0BA,KAA1B,CADF,CADF;AAKD;;AAED,MAAM5F,MAAM,GAAGI,wBAAWyF,MAAX,CAAkB;AAC/B5F,EAAAA,SAAS,EAAE;AACT6F,IAAAA,IAAI,EAAE;AADG;AADoB,CAAlB,CAAf","sourcesContent":["import {\n getDefaultHeaderHeight,\n getHeaderTitle,\n HeaderBackContext,\n HeaderHeightContext,\n HeaderShownContext,\n SafeAreaProviderCompat,\n} from '@react-navigation/elements';\nimport {\n NavigationContext,\n NavigationRouteContext,\n ParamListBase,\n Route,\n StackActions,\n StackNavigationState,\n usePreventRemoveContext,\n useTheme,\n} from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\nimport type { ScreenProps } from 'react-native-screens';\nimport {\n Screen,\n ScreenStack,\n StackPresentationTypes,\n} from 'react-native-screens';\nimport warnOnce from 'warn-once';\n\nimport type {\n NativeStackDescriptor,\n NativeStackDescriptorMap,\n NativeStackNavigationHelpers,\n NativeStackNavigationOptions,\n} from '../types';\nimport useDismissedRouteError from '../utils/useDismissedRouteError';\nimport useInvalidPreventRemoveError from '../utils/useInvalidPreventRemoveError';\nimport DebugContainer from './DebugContainer';\nimport HeaderConfig from './HeaderConfig';\n\nconst isAndroid = Platform.OS === 'android';\n\nconst MaybeNestedStack = ({\n options,\n route,\n presentation,\n headerHeight,\n children,\n}: {\n options: NativeStackNavigationOptions;\n route: Route<string>;\n presentation: Exclude<StackPresentationTypes, 'push'> | 'card';\n headerHeight: number;\n children: React.ReactNode;\n}) => {\n const { colors } = useTheme();\n const { header, headerShown = true, contentStyle } = options;\n\n const isHeaderInModal = isAndroid\n ? false\n : presentation !== 'card' && headerShown === true && header === undefined;\n\n const headerShownPreviousRef = React.useRef(headerShown);\n\n React.useEffect(() => {\n warnOnce(\n !isAndroid &&\n presentation !== 'card' &&\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, presentation, route.name]);\n\n const content = (\n <DebugContainer\n style={[\n styles.container,\n presentation !== 'transparentModal' &&\n presentation !== 'containedTransparentModal' && {\n backgroundColor: colors.background,\n },\n contentStyle,\n ]}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n >\n {children}\n </DebugContainer>\n );\n\n if (isHeaderInModal) {\n return (\n <ScreenStack style={styles.container}>\n <Screen enabled style={StyleSheet.absoluteFill}>\n <HeaderConfig\n {...options}\n route={route}\n headerHeight={headerHeight}\n canGoBack\n />\n {content}\n </Screen>\n </ScreenStack>\n );\n }\n\n return content;\n};\n\ntype SceneViewProps = {\n index: number;\n descriptor: NativeStackDescriptor;\n previousDescriptor?: NativeStackDescriptor;\n nextDescriptor?: NativeStackDescriptor;\n onWillDisappear: () => void;\n onAppear: () => void;\n onDisappear: () => void;\n onDismissed: ScreenProps['onDismissed'];\n onHeaderBackButtonClicked: () => void;\n onNativeDismissCancelled: ScreenProps['onDismissed'];\n};\n\nconst SceneView = ({\n descriptor,\n previousDescriptor,\n nextDescriptor,\n index,\n onWillDisappear,\n onAppear,\n onDisappear,\n onDismissed,\n onHeaderBackButtonClicked,\n onNativeDismissCancelled,\n}: SceneViewProps) => {\n const { route, navigation, options, render } = descriptor;\n const {\n animationDuration,\n animationTypeForReplace = 'push',\n gestureEnabled,\n header,\n headerBackButtonMenuEnabled,\n headerShown,\n autoHideHomeIndicator,\n navigationBarColor,\n navigationBarHidden,\n orientation,\n statusBarAnimation,\n statusBarHidden,\n statusBarStyle,\n statusBarTranslucent,\n statusBarColor,\n } = options;\n\n let {\n animation,\n customAnimationOnGesture,\n fullScreenGestureEnabled,\n presentation = 'card',\n gestureDirection = presentation === 'card' ? 'horizontal' : 'vertical',\n } = options;\n\n if (gestureDirection === 'vertical' && Platform.OS === 'ios') {\n // for `vertical` direction to work, we need to set `fullScreenGestureEnabled` to `true`\n // so the screen can be dismissed from any point on screen.\n // `customAnimationOnGesture` needs to be set to `true` so the `animation` 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 (fullScreenGestureEnabled === undefined) {\n fullScreenGestureEnabled = true;\n }\n if (customAnimationOnGesture === undefined) {\n customAnimationOnGesture = true;\n }\n if (animation === undefined) {\n animation = 'slide_from_bottom';\n }\n }\n\n // workaround for rn-screens where gestureDirection has to be set on both\n // current and previous screen - software-mansion/react-native-screens/pull/1509\n const nextGestureDirection = nextDescriptor?.options.gestureDirection;\n const gestureDirectionOverride =\n nextGestureDirection != null ? nextGestureDirection : gestureDirection;\n\n if (index === 0) {\n // first screen should always be treated as `card`, it resolves problems with no header animation\n // for navigator with first screen as `modal` and the next as `card`\n presentation = 'card';\n }\n\n const isHeaderInPush = isAndroid\n ? headerShown\n : presentation === 'card' && headerShown !== false;\n\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n const isModal = presentation === 'modal' || presentation === 'formSheet';\n\n // Modals are fullscreen in landscape only on iPhone\n const isIPhone =\n Platform.OS === 'ios' && !(Platform.isPad || Platform.isTVOS);\n const isLandscape = frame.width > frame.height;\n\n const topInset = isModal || (isIPhone && isLandscape) ? 0 : insets.top;\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n const parentHeaderHeight = React.useContext(HeaderHeightContext);\n const parentHeaderBack = React.useContext(HeaderBackContext);\n\n const { preventedRoutes } = usePreventRemoveContext();\n\n const defaultHeaderHeight = getDefaultHeaderHeight(frame, isModal, topInset);\n\n const [customHeaderHeight, setCustomHeaderHeight] =\n React.useState(defaultHeaderHeight);\n\n const headerHeight = header ? customHeaderHeight : defaultHeaderHeight;\n const headerBack = previousDescriptor\n ? {\n title: getHeaderTitle(\n previousDescriptor.options,\n previousDescriptor.route.name\n ),\n }\n : parentHeaderBack;\n\n const isRemovePrevented = preventedRoutes[route.key]?.preventRemove;\n\n return (\n <Screen\n key={route.key}\n enabled\n style={StyleSheet.absoluteFill}\n customAnimationOnSwipe={customAnimationOnGesture}\n fullScreenSwipeEnabled={fullScreenGestureEnabled}\n gestureEnabled={\n isAndroid\n ? // This prop enables handling of system back gestures on Android\n // Since we handle them in JS side, we disable this\n false\n : gestureEnabled\n }\n homeIndicatorHidden={autoHideHomeIndicator}\n navigationBarColor={navigationBarColor}\n navigationBarHidden={navigationBarHidden}\n replaceAnimation={animationTypeForReplace}\n stackPresentation={presentation === 'card' ? 'push' : presentation}\n stackAnimation={animation}\n screenOrientation={orientation}\n statusBarAnimation={statusBarAnimation}\n statusBarHidden={statusBarHidden}\n statusBarStyle={statusBarStyle}\n statusBarColor={statusBarColor}\n statusBarTranslucent={statusBarTranslucent}\n swipeDirection={gestureDirectionOverride}\n transitionDuration={animationDuration}\n onWillDisappear={onWillDisappear}\n onAppear={onAppear}\n onDisappear={onDisappear}\n onDismissed={onDismissed}\n isNativeStack\n // Props for enabling preventing removal in native-stack\n nativeBackButtonDismissalEnabled={false} // on Android\n // @ts-expect-error prop not publicly exported from rn-screens\n preventNativeDismiss={isRemovePrevented} // on iOS\n onHeaderBackButtonClicked={onHeaderBackButtonClicked}\n onNativeDismissCancelled={onNativeDismissCancelled}\n >\n <NavigationContext.Provider value={navigation}>\n <NavigationRouteContext.Provider value={route}>\n <HeaderShownContext.Provider\n value={isParentHeaderShown || isHeaderInPush !== false}\n >\n <HeaderHeightContext.Provider\n value={\n isHeaderInPush !== false\n ? headerHeight\n : parentHeaderHeight ?? 0\n }\n >\n {header !== undefined && headerShown !== false ? (\n <View\n onLayout={(e) => {\n setCustomHeaderHeight(e.nativeEvent.layout.height);\n }}\n >\n {header({\n back: headerBack,\n options,\n route,\n navigation,\n })}\n </View>\n ) : (\n <HeaderConfig\n {...options}\n route={route}\n headerBackButtonMenuEnabled={\n isRemovePrevented !== undefined\n ? !isRemovePrevented\n : headerBackButtonMenuEnabled\n }\n headerShown={isHeaderInPush}\n headerHeight={headerHeight}\n headerBackTitle={\n options.headerBackTitle !== undefined\n ? options.headerBackTitle\n : headerBack?.title\n }\n canGoBack={headerBack !== undefined}\n />\n )}\n <MaybeNestedStack\n options={options}\n route={route}\n presentation={presentation}\n headerHeight={headerHeight}\n >\n <HeaderBackContext.Provider value={headerBack}>\n {render()}\n </HeaderBackContext.Provider>\n </MaybeNestedStack>\n </HeaderHeightContext.Provider>\n </HeaderShownContext.Provider>\n </NavigationRouteContext.Provider>\n </NavigationContext.Provider>\n </Screen>\n );\n};\n\ntype Props = {\n state: StackNavigationState<ParamListBase>;\n navigation: NativeStackNavigationHelpers;\n descriptors: NativeStackDescriptorMap;\n};\n\nfunction NativeStackViewInner({ state, navigation, descriptors }: Props) {\n const { setNextDismissedKey } = useDismissedRouteError(state);\n\n useInvalidPreventRemoveError(descriptors);\n\n return (\n <ScreenStack style={styles.container}>\n {state.routes.map((route, index) => {\n const descriptor = descriptors[route.key];\n const previousKey = state.routes[index - 1]?.key;\n const nextKey = state.routes[index + 1]?.key;\n const previousDescriptor = previousKey\n ? descriptors[previousKey]\n : undefined;\n const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;\n\n return (\n <SceneView\n key={route.key}\n index={index}\n descriptor={descriptor}\n previousDescriptor={previousDescriptor}\n nextDescriptor={nextDescriptor}\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: '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={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n\n setNextDismissedKey(route.key);\n }}\n onHeaderBackButtonClicked={() => {\n navigation.dispatch({\n ...StackActions.pop(),\n source: route.key,\n target: state.key,\n });\n }}\n onNativeDismissCancelled={(event) => {\n navigation.dispatch({\n ...StackActions.pop(event.nativeEvent.dismissCount),\n source: route.key,\n target: state.key,\n });\n }}\n />\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,17 @@
1
+ import * as React from 'react';
2
+ export default function useInvalidPreventRemoveError(state) {
3
+ var _state$routes$find;
4
+
5
+ const [nextDismissedKey, setNextDismissedKey] = React.useState(null);
6
+ const dismissedRouteName = nextDismissedKey ? (_state$routes$find = state.routes.find(route => route.key === nextDismissedKey)) === null || _state$routes$find === void 0 ? void 0 : _state$routes$find.name : null;
7
+ React.useEffect(() => {
8
+ if (dismissedRouteName) {
9
+ const message = `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` + `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\n\n` + `Consider using a 'usePreventRemove' hook with 'headerBackButtonMenuEnabled: false' to prevent users from natively going back multiple screens.`;
10
+ console.error(message);
11
+ }
12
+ }, [dismissedRouteName]);
13
+ return {
14
+ setNextDismissedKey
15
+ };
16
+ }
17
+ //# sourceMappingURL=useDismissedRouteError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useDismissedRouteError.tsx"],"names":["React","useInvalidPreventRemoveError","state","nextDismissedKey","setNextDismissedKey","useState","dismissedRouteName","routes","find","route","key","name","useEffect","message","console","error"],"mappings":"AAIA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,eAAe,SAASC,4BAAT,CACbC,KADa,EAEb;AAAA;;AACA,QAAM,CAACC,gBAAD,EAAmBC,mBAAnB,IAA0CJ,KAAK,CAACK,QAAN,CAC9C,IAD8C,CAAhD;AAIA,QAAMC,kBAAkB,GAAGH,gBAAgB,yBACvCD,KAAK,CAACK,MAAN,CAAaC,IAAb,CAAmBC,KAAD,IAAWA,KAAK,CAACC,GAAN,KAAcP,gBAA3C,CADuC,uDACvC,mBAA8DQ,IADvB,GAEvC,IAFJ;AAIAX,EAAAA,KAAK,CAACY,SAAN,CAAgB,MAAM;AACpB,QAAIN,kBAAJ,EAAwB;AACtB,YAAMO,OAAO,GACV,eAAcP,kBAAmB,+DAAlC,GACC,6HADD,GAEC,gJAHH;AAKAQ,MAAAA,OAAO,CAACC,KAAR,CAAcF,OAAd;AACD;AACF,GATD,EASG,CAACP,kBAAD,CATH;AAWA,SAAO;AAAEF,IAAAA;AAAF,GAAP;AACD","sourcesContent":["import type {\n ParamListBase,\n StackNavigationState,\n} from '@react-navigation/native';\nimport * as React from 'react';\n\nexport default function useInvalidPreventRemoveError(\n state: StackNavigationState<ParamListBase>\n) {\n const [nextDismissedKey, setNextDismissedKey] = React.useState<string | null>(\n null\n );\n\n const dismissedRouteName = nextDismissedKey\n ? state.routes.find((route) => route.key === nextDismissedKey)?.name\n : null;\n\n React.useEffect(() => {\n if (dismissedRouteName) {\n const message =\n `The screen '${dismissedRouteName}' was removed natively but didn't get removed from JS state. ` +\n `This can happen if the action was prevented in a 'beforeRemove' listener, which is not fully supported in native-stack.\\n\\n` +\n `Consider using a 'usePreventRemove' hook with 'headerBackButtonMenuEnabled: false' to prevent users from natively going back multiple screens.`;\n\n console.error(message);\n }\n }, [dismissedRouteName]);\n\n return { setNextDismissedKey };\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { usePreventRemoveContext } from '@react-navigation/native';
2
+ import * as React from 'react';
3
+ export default function useInvalidPreventRemoveError(descriptors) {
4
+ var _preventedDescriptor$, _preventedDescriptor$2;
5
+
6
+ const {
7
+ preventedRoutes
8
+ } = usePreventRemoveContext();
9
+ const preventedRouteKey = Object.keys(preventedRoutes)[0];
10
+ const preventedDescriptor = descriptors[preventedRouteKey];
11
+ const isHeaderBackButtonMenuEnabledOnPreventedScreen = preventedDescriptor === null || preventedDescriptor === void 0 ? void 0 : (_preventedDescriptor$ = preventedDescriptor.options) === null || _preventedDescriptor$ === void 0 ? void 0 : _preventedDescriptor$.headerBackButtonMenuEnabled;
12
+ const preventedRouteName = preventedDescriptor === null || preventedDescriptor === void 0 ? void 0 : (_preventedDescriptor$2 = preventedDescriptor.route) === null || _preventedDescriptor$2 === void 0 ? void 0 : _preventedDescriptor$2.name;
13
+ React.useEffect(() => {
14
+ if (preventedRouteKey != null && isHeaderBackButtonMenuEnabledOnPreventedScreen) {
15
+ const message = `The screen ${preventedRouteName} uses 'usePreventRemove' hook alongside 'headerBackButtonMenuEnabled: true', which is not supported. \n\n` + `Consider removing 'headerBackButtonMenuEnabled: true' from ${preventedRouteName} screen to get rid of this error.`;
16
+ console.error(message);
17
+ }
18
+ }, [preventedRouteKey, isHeaderBackButtonMenuEnabledOnPreventedScreen, preventedRouteName]);
19
+ }
20
+ //# sourceMappingURL=useInvalidPreventRemoveError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useInvalidPreventRemoveError.tsx"],"names":["usePreventRemoveContext","React","useInvalidPreventRemoveError","descriptors","preventedRoutes","preventedRouteKey","Object","keys","preventedDescriptor","isHeaderBackButtonMenuEnabledOnPreventedScreen","options","headerBackButtonMenuEnabled","preventedRouteName","route","name","useEffect","message","console","error"],"mappings":"AAAA,SAASA,uBAAT,QAAwC,0BAAxC;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AAIA,eAAe,SAASC,4BAAT,CACbC,WADa,EAEb;AAAA;;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAsBJ,uBAAuB,EAAnD;AACA,QAAMK,iBAAiB,GAAGC,MAAM,CAACC,IAAP,CAAYH,eAAZ,EAA6B,CAA7B,CAA1B;AACA,QAAMI,mBAAmB,GAAGL,WAAW,CAACE,iBAAD,CAAvC;AACA,QAAMI,8CAA8C,GAClDD,mBADkD,aAClDA,mBADkD,gDAClDA,mBAAmB,CAAEE,OAD6B,0DAClD,sBAA8BC,2BADhC;AAEA,QAAMC,kBAAkB,GAAGJ,mBAAH,aAAGA,mBAAH,iDAAGA,mBAAmB,CAAEK,KAAxB,2DAAG,uBAA4BC,IAAvD;AAEAb,EAAAA,KAAK,CAACc,SAAN,CAAgB,MAAM;AACpB,QACEV,iBAAiB,IAAI,IAArB,IACAI,8CAFF,EAGE;AACA,YAAMO,OAAO,GACV,cAAaJ,kBAAmB,2GAAjC,GACC,8DAA6DA,kBAAmB,mCAFnF;AAGAK,MAAAA,OAAO,CAACC,KAAR,CAAcF,OAAd;AACD;AACF,GAVD,EAUG,CACDX,iBADC,EAEDI,8CAFC,EAGDG,kBAHC,CAVH;AAeD","sourcesContent":["import { usePreventRemoveContext } from '@react-navigation/native';\nimport * as React from 'react';\n\nimport type { NativeStackDescriptorMap } from '../types';\n\nexport default function useInvalidPreventRemoveError(\n descriptors: NativeStackDescriptorMap\n) {\n const { preventedRoutes } = usePreventRemoveContext();\n const preventedRouteKey = Object.keys(preventedRoutes)[0];\n const preventedDescriptor = descriptors[preventedRouteKey];\n const isHeaderBackButtonMenuEnabledOnPreventedScreen =\n preventedDescriptor?.options?.headerBackButtonMenuEnabled;\n const preventedRouteName = preventedDescriptor?.route?.name;\n\n React.useEffect(() => {\n if (\n preventedRouteKey != null &&\n isHeaderBackButtonMenuEnabledOnPreventedScreen\n ) {\n const message =\n `The screen ${preventedRouteName} uses 'usePreventRemove' hook alongside 'headerBackButtonMenuEnabled: true', which is not supported. \\n\\n` +\n `Consider removing 'headerBackButtonMenuEnabled: true' from ${preventedRouteName} screen to get rid of this error.`;\n console.error(message);\n }\n }, [\n preventedRouteKey,\n isHeaderBackButtonMenuEnabledOnPreventedScreen,\n preventedRouteName,\n ]);\n}\n"]}
@@ -113,7 +113,7 @@ export default function HeaderConfig(_ref) {
113
113
  backTitleFontSize: headerBackTitleStyleFlattened.fontSize,
114
114
  blurEffect: headerBlurEffect,
115
115
  color: tintColor,
116
- direction: I18nManager.isRTL ? 'rtl' : 'ltr',
116
+ direction: I18nManager.getConstants().isRTL ? 'rtl' : 'ltr',
117
117
  disableBackButtonMenu: headerBackButtonMenuEnabled === false,
118
118
  hidden: headerShown === false,
119
119
  hideBackButton: headerBackVisible === false,