@react-navigation/native-stack 8.0.0-alpha.5 → 8.0.0-alpha.50

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 (43) hide show
  1. package/lib/module/index.js.map +1 -1
  2. package/lib/module/navigators/createNativeStackNavigator.js +4 -8
  3. package/lib/module/navigators/createNativeStackNavigator.js.map +1 -1
  4. package/lib/module/utils/useAnimatedHeaderHeight.js +1 -1
  5. package/lib/module/utils/useAnimatedHeaderHeight.js.map +1 -1
  6. package/lib/module/utils/useInvalidPreventRemoveError.js +1 -1
  7. package/lib/module/utils/useInvalidPreventRemoveError.js.map +1 -1
  8. package/lib/module/views/FooterComponent.js +1 -1
  9. package/lib/module/views/FooterComponent.js.map +1 -1
  10. package/lib/module/views/NativeStackView.js +42 -25
  11. package/lib/module/views/NativeStackView.js.map +1 -1
  12. package/lib/module/views/NativeStackView.native.js +115 -71
  13. package/lib/module/views/NativeStackView.native.js.map +1 -1
  14. package/lib/module/views/useHeaderConfigProps.js +76 -23
  15. package/lib/module/views/useHeaderConfigProps.js.map +1 -1
  16. package/lib/typescript/src/index.d.ts +3 -3
  17. package/lib/typescript/src/index.d.ts.map +1 -1
  18. package/lib/typescript/src/navigators/createNativeStackNavigator.d.ts +10 -15
  19. package/lib/typescript/src/navigators/createNativeStackNavigator.d.ts.map +1 -1
  20. package/lib/typescript/src/types.d.ts +164 -156
  21. package/lib/typescript/src/types.d.ts.map +1 -1
  22. package/lib/typescript/src/utils/getModalRoutesKeys.d.ts +1 -1
  23. package/lib/typescript/src/utils/getModalRoutesKeys.d.ts.map +1 -1
  24. package/lib/typescript/src/utils/useInvalidPreventRemoveError.d.ts +1 -1
  25. package/lib/typescript/src/utils/useInvalidPreventRemoveError.d.ts.map +1 -1
  26. package/lib/typescript/src/views/FooterComponent.d.ts +2 -2
  27. package/lib/typescript/src/views/FooterComponent.d.ts.map +1 -1
  28. package/lib/typescript/src/views/NativeStackView.d.ts +3 -2
  29. package/lib/typescript/src/views/NativeStackView.d.ts.map +1 -1
  30. package/lib/typescript/src/views/NativeStackView.native.d.ts +3 -2
  31. package/lib/typescript/src/views/NativeStackView.native.d.ts.map +1 -1
  32. package/lib/typescript/src/views/useHeaderConfigProps.d.ts +2 -3
  33. package/lib/typescript/src/views/useHeaderConfigProps.d.ts.map +1 -1
  34. package/package.json +22 -19
  35. package/src/index.tsx +1 -2
  36. package/src/navigators/createNativeStackNavigator.tsx +11 -47
  37. package/src/types.tsx +225 -196
  38. package/src/utils/useAnimatedHeaderHeight.tsx +1 -1
  39. package/src/utils/useInvalidPreventRemoveError.tsx +2 -1
  40. package/src/views/FooterComponent.tsx +1 -1
  41. package/src/views/NativeStackView.native.tsx +171 -92
  42. package/src/views/NativeStackView.tsx +70 -41
  43. package/src/views/useHeaderConfigProps.tsx +109 -39
@@ -1 +1 @@
1
- {"version":3,"names":["createNativeStackNavigator","createNativeStackScreen","NativeStackView","useAnimatedHeaderHeight"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA,SACEA,0BAA0B,EAC1BC,uBAAuB,QAClB,4CAAyC;;AAEhD;AACA;AACA;AACA,SAASC,eAAe,QAAQ,yBAAyB;;AAEzD;AACA;AACA;AACA,SAASC,uBAAuB,QAAQ,oCAAiC;;AAEzE;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["createNativeStackNavigator","createNativeStackScreen","NativeStackView","useAnimatedHeaderHeight"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA,SACEA,0BAA0B,EAC1BC,uBAAuB,QAElB,4CAAyC;;AAEhD;AACA;AACA;AACA,SAASC,eAAe,QAAQ,yBAAyB;;AAEzD;AACA;AACA;AACA,SAASC,uBAAuB,QAAQ,oCAAiC;;AAEzE;AACA;AACA","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { createNavigatorFactory, NavigationMetaContext, StackActions, StackRouter, useNavigationBuilder } from '@react-navigation/native';
3
+ import { createNavigatorFactory, createScreenFactory, NavigationMetaContext, StackActions, StackRouter, useNavigationBuilder } from '@react-navigation/native';
4
4
  import * as React from 'react';
5
5
  import { NativeStackView } from '../views/NativeStackView';
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -30,7 +30,7 @@ function NativeStackNavigator({
30
30
  screenLayout,
31
31
  router
32
32
  });
33
- const meta = React.useContext(NavigationMetaContext);
33
+ const meta = React.use(NavigationMetaContext);
34
34
  React.useEffect(() => {
35
35
  if (meta && 'type' in meta && meta.type === 'native-tabs') {
36
36
  // If we're inside native tabs, we don't need to handle popToTop
@@ -65,10 +65,6 @@ function NativeStackNavigator({
65
65
  })
66
66
  });
67
67
  }
68
- export function createNativeStackNavigator(config) {
69
- return createNavigatorFactory(NativeStackNavigator)(config);
70
- }
71
- export function createNativeStackScreen(config) {
72
- return config;
73
- }
68
+ export const createNativeStackNavigator = createNavigatorFactory(NativeStackNavigator);
69
+ export const createNativeStackScreen = createScreenFactory();
74
70
  //# sourceMappingURL=createNativeStackNavigator.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createNavigatorFactory","NavigationMetaContext","StackActions","StackRouter","useNavigationBuilder","React","NativeStackView","jsx","_jsx","NativeStackNavigator","initialRouteName","routeNamesChangeBehavior","children","layout","screenListeners","screenOptions","screenLayout","router","rest","state","descriptors","navigation","NavigationContent","meta","useContext","useEffect","type","addListener","e","isFocused","requestAnimationFrame","index","defaultPrevented","dispatch","popToTop","target","key","createNativeStackNavigator","config","createNativeStackScreen"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAEtBC,qBAAqB,EAGrBC,YAAY,EAEZC,WAAW,EAQXC,oBAAoB,QACf,0BAA0B;AACjC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAQ9B,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,SAASC,oBAAoBA,CAAC;EAC5BC,gBAAgB;EAChBC,wBAAwB;EACxBC,QAAQ;EACRC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC,YAAY;EACZC,MAAM;EACN,GAAGC;AACsB,CAAC,EAAE;EAC5B,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,GACzDlB,oBAAoB,CAMlBD,WAAW,EAAE;IACbO,gBAAgB;IAChBC,wBAAwB;IACxBC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,CAAC;EAEJ,MAAMM,IAAI,GAAGlB,KAAK,CAACmB,UAAU,CAACvB,qBAAqB,CAAC;EAEpDI,KAAK,CAACoB,SAAS,CAAC,MAAM;IACpB,IAAIF,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAIA,IAAI,CAACG,IAAI,KAAK,aAAa,EAAE;MACzD;MACA;MACA;IACF;;IAEA;IACA,OAAOL,UAAU,EAAEM,WAAW,GAAG,UAAU,EAAGC,CAAM,IAAK;MACvD,MAAMC,SAAS,GAAGR,UAAU,CAACQ,SAAS,CAAC,CAAC;;MAExC;MACA;MACAC,qBAAqB,CAAC,MAAM;QAC1B,IACEX,KAAK,CAACY,KAAK,GAAG,CAAC,IACfF,SAAS,IACT,CAAED,CAAC,CAAgCI,gBAAgB,EACnD;UACA;UACA;UACAX,UAAU,CAACY,QAAQ,CAAC;YAClB,GAAG/B,YAAY,CAACgC,QAAQ,CAAC,CAAC;YAC1BC,MAAM,EAAEhB,KAAK,CAACiB;UAChB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACb,IAAI,EAAEF,UAAU,EAAEF,KAAK,CAACY,KAAK,EAAEZ,KAAK,CAACiB,GAAG,CAAC,CAAC;EAE9C,oBACE5B,IAAA,CAACc,iBAAiB;IAAAV,QAAA,eAChBJ,IAAA,CAACF,eAAe;MAAA,GACVY,IAAI;MACRC,KAAK,EAAEA,KAAM;MACbE,UAAU,EAAEA,UAAW;MACvBD,WAAW,EAAEA;IAAY,CAC1B;EAAC,CACe,CAAC;AAExB;AA2BA,OAAO,SAASiB,0BAA0BA,CAACC,MAAgB,EAAE;EAC3D,OAAOtC,sBAAsB,CAACS,oBAAoB,CAAC,CAAC6B,MAAM,CAAC;AAC7D;AAEA,OAAO,SAASC,uBAAuBA,CAIrCD,MAOC,EACD;EACA,OAAOA,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"names":["createNavigatorFactory","createScreenFactory","NavigationMetaContext","StackActions","StackRouter","useNavigationBuilder","React","NativeStackView","jsx","_jsx","NativeStackNavigator","initialRouteName","routeNamesChangeBehavior","children","layout","screenListeners","screenOptions","screenLayout","router","rest","state","descriptors","navigation","NavigationContent","meta","use","useEffect","type","addListener","e","isFocused","requestAnimationFrame","index","defaultPrevented","dispatch","popToTop","target","key","createNativeStackNavigator","createNativeStackScreen"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,mBAAmB,EAEnBC,qBAAqB,EAIrBC,YAAY,EAEZC,WAAW,EAEXC,oBAAoB,QACf,0BAA0B;AACjC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAO9B,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,SAASC,oBAAoBA,CAAC;EAC5BC,gBAAgB;EAChBC,wBAAwB;EACxBC,QAAQ;EACRC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC,YAAY;EACZC,MAAM;EACN,GAAGC;AACsB,CAAC,EAAE;EAC5B,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,GACzDlB,oBAAoB,CAMlBD,WAAW,EAAE;IACbO,gBAAgB;IAChBC,wBAAwB;IACxBC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,CAAC;EAEJ,MAAMM,IAAI,GAAGlB,KAAK,CAACmB,GAAG,CAACvB,qBAAqB,CAAC;EAE7CI,KAAK,CAACoB,SAAS,CAAC,MAAM;IACpB,IAAIF,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAIA,IAAI,CAACG,IAAI,KAAK,aAAa,EAAE;MACzD;MACA;MACA;IACF;;IAEA;IACA,OAAOL,UAAU,EAAEM,WAAW,GAAG,UAAU,EAAGC,CAAM,IAAK;MACvD,MAAMC,SAAS,GAAGR,UAAU,CAACQ,SAAS,CAAC,CAAC;;MAExC;MACA;MACAC,qBAAqB,CAAC,MAAM;QAC1B,IACEX,KAAK,CAACY,KAAK,GAAG,CAAC,IACfF,SAAS,IACT,CAAED,CAAC,CAAgCI,gBAAgB,EACnD;UACA;UACA;UACAX,UAAU,CAACY,QAAQ,CAAC;YAClB,GAAG/B,YAAY,CAACgC,QAAQ,CAAC,CAAC;YAC1BC,MAAM,EAAEhB,KAAK,CAACiB;UAChB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACb,IAAI,EAAEF,UAAU,EAAEF,KAAK,CAACY,KAAK,EAAEZ,KAAK,CAACiB,GAAG,CAAC,CAAC;EAE9C,oBACE5B,IAAA,CAACc,iBAAiB;IAAAV,QAAA,eAChBJ,IAAA,CAACF,eAAe;MAAA,GACVY,IAAI;MACRC,KAAK,EAAEA,KAAM;MACbE,UAAU,EAAEA,UAAW;MACvBD,WAAW,EAAEA;IAAY,CAC1B;EAAC,CACe,CAAC;AAExB;AAUA,OAAO,MAAMiB,0BAA0B,GACrCtC,sBAAsB,CAAqBU,oBAAoB,CAAC;AAElE,OAAO,MAAM6B,uBAAuB,GAClCtC,mBAAmB,CAAqB,CAAC","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  import * as React from 'react';
4
4
  export const AnimatedHeaderHeightContext = /*#__PURE__*/React.createContext(undefined);
5
5
  export function useAnimatedHeaderHeight() {
6
- const animatedValue = React.useContext(AnimatedHeaderHeightContext);
6
+ const animatedValue = React.use(AnimatedHeaderHeightContext);
7
7
  if (animatedValue === undefined) {
8
8
  throw new Error("Couldn't find the header height. Are you inside a screen in a native stack navigator?");
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","AnimatedHeaderHeightContext","createContext","undefined","useAnimatedHeaderHeight","animatedValue","useContext","Error"],"sourceRoot":"../../../src","sources":["utils/useAnimatedHeaderHeight.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,OAAO,MAAMC,2BAA2B,gBAAGD,KAAK,CAACE,aAAa,CAE5DC,SAAS,CAAC;AAEZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;EACxC,MAAMC,aAAa,GAAGL,KAAK,CAACM,UAAU,CAACL,2BAA2B,CAAC;EAEnE,IAAII,aAAa,KAAKF,SAAS,EAAE;IAC/B,MAAM,IAAII,KAAK,CACb,uFACF,CAAC;EACH;EAEA,OAAOF,aAAa;AACtB","ignoreList":[]}
1
+ {"version":3,"names":["React","AnimatedHeaderHeightContext","createContext","undefined","useAnimatedHeaderHeight","animatedValue","use","Error"],"sourceRoot":"../../../src","sources":["utils/useAnimatedHeaderHeight.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAG9B,OAAO,MAAMC,2BAA2B,gBAAGD,KAAK,CAACE,aAAa,CAE5DC,SAAS,CAAC;AAEZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;EACxC,MAAMC,aAAa,GAAGL,KAAK,CAACM,GAAG,CAACL,2BAA2B,CAAC;EAE5D,IAAII,aAAa,KAAKF,SAAS,EAAE;IAC/B,MAAM,IAAII,KAAK,CACb,uFACF,CAAC;EACH;EAEA,OAAOF,aAAa;AACtB","ignoreList":[]}
@@ -7,7 +7,7 @@ export function useInvalidPreventRemoveError(descriptors) {
7
7
  preventedRoutes
8
8
  } = usePreventRemoveContext();
9
9
  const preventedRouteKey = Object.keys(preventedRoutes)[0];
10
- const preventedDescriptor = descriptors[preventedRouteKey];
10
+ const preventedDescriptor = preventedRouteKey == null ? undefined : descriptors[preventedRouteKey];
11
11
  const isHeaderBackButtonMenuEnabledOnPreventedScreen = preventedDescriptor?.options?.headerBackButtonMenuEnabled;
12
12
  const preventedRouteName = preventedDescriptor?.route?.name;
13
13
  React.useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["usePreventRemoveContext","React","useInvalidPreventRemoveError","descriptors","preventedRoutes","preventedRouteKey","Object","keys","preventedDescriptor","isHeaderBackButtonMenuEnabledOnPreventedScreen","options","headerBackButtonMenuEnabled","preventedRouteName","route","name","useEffect","message","console","error"],"sourceRoot":"../../../src","sources":["utils/useInvalidPreventRemoveError.tsx"],"mappings":";;AAAA,SAASA,uBAAuB,QAAQ,0BAA0B;AAClE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAI9B,OAAO,SAASC,4BAA4BA,CAC1CC,WAAqC,EACrC;EACA,MAAM;IAAEC;EAAgB,CAAC,GAAGJ,uBAAuB,CAAC,CAAC;EACrD,MAAMK,iBAAiB,GAAGC,MAAM,CAACC,IAAI,CAACH,eAAe,CAAC,CAAC,CAAC,CAAC;EACzD,MAAMI,mBAAmB,GAAGL,WAAW,CAACE,iBAAiB,CAAC;EAC1D,MAAMI,8CAA8C,GAClDD,mBAAmB,EAAEE,OAAO,EAAEC,2BAA2B;EAC3D,MAAMC,kBAAkB,GAAGJ,mBAAmB,EAAEK,KAAK,EAAEC,IAAI;EAE3Db,KAAK,CAACc,SAAS,CAAC,MAAM;IACpB,IACEV,iBAAiB,IAAI,IAAI,IACzBI,8CAA8C,EAC9C;MACA,MAAMO,OAAO,GACX,cAAcJ,kBAAkB,2GAA2G,GAC3I,8DAA8DA,kBAAkB,mCAAmC;MACrHK,OAAO,CAACC,KAAK,CAACF,OAAO,CAAC;IACxB;EACF,CAAC,EAAE,CACDX,iBAAiB,EACjBI,8CAA8C,EAC9CG,kBAAkB,CACnB,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["usePreventRemoveContext","React","useInvalidPreventRemoveError","descriptors","preventedRoutes","preventedRouteKey","Object","keys","preventedDescriptor","undefined","isHeaderBackButtonMenuEnabledOnPreventedScreen","options","headerBackButtonMenuEnabled","preventedRouteName","route","name","useEffect","message","console","error"],"sourceRoot":"../../../src","sources":["utils/useInvalidPreventRemoveError.tsx"],"mappings":";;AAAA,SAASA,uBAAuB,QAAQ,0BAA0B;AAClE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAI9B,OAAO,SAASC,4BAA4BA,CAC1CC,WAAqC,EACrC;EACA,MAAM;IAAEC;EAAgB,CAAC,GAAGJ,uBAAuB,CAAC,CAAC;EACrD,MAAMK,iBAAiB,GAAGC,MAAM,CAACC,IAAI,CAACH,eAAe,CAAC,CAAC,CAAC,CAAC;EACzD,MAAMI,mBAAmB,GACvBH,iBAAiB,IAAI,IAAI,GAAGI,SAAS,GAAGN,WAAW,CAACE,iBAAiB,CAAC;EACxE,MAAMK,8CAA8C,GAClDF,mBAAmB,EAAEG,OAAO,EAAEC,2BAA2B;EAC3D,MAAMC,kBAAkB,GAAGL,mBAAmB,EAAEM,KAAK,EAAEC,IAAI;EAE3Dd,KAAK,CAACe,SAAS,CAAC,MAAM;IACpB,IACEX,iBAAiB,IAAI,IAAI,IACzBK,8CAA8C,EAC9C;MACA,MAAMO,OAAO,GACX,cAAcJ,kBAAkB,2GAA2G,GAC3I,8DAA8DA,kBAAkB,mCAAmC;MACrHK,OAAO,CAACC,KAAK,CAACF,OAAO,CAAC;IACxB;EACF,CAAC,EAAE,CACDZ,iBAAiB,EACjBK,8CAA8C,EAC9CG,kBAAkB,CACnB,CAAC;AACJ","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import React from 'react';
3
+ import * as React from 'react';
4
4
  import { ScreenFooter } from 'react-native-screens';
5
5
  import { jsx as _jsx } from "react/jsx-runtime";
6
6
  export function FooterComponent({
@@ -1 +1 @@
1
- {"version":3,"names":["React","ScreenFooter","jsx","_jsx","FooterComponent","children","collapsable"],"sourceRoot":"../../../src","sources":["views/FooterComponent.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,QAAQ,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMpD,OAAO,SAASC,eAAeA,CAAC;EAAEC;AAAsB,CAAC,EAAE;EACzD,oBAAOF,IAAA,CAACF,YAAY;IAACK,WAAW,EAAE,KAAM;IAAAD,QAAA,EAAEA;EAAQ,CAAe,CAAC;AACpE","ignoreList":[]}
1
+ {"version":3,"names":["React","ScreenFooter","jsx","_jsx","FooterComponent","children","collapsable"],"sourceRoot":"../../../src","sources":["views/FooterComponent.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,YAAY,QAAQ,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMpD,OAAO,SAASC,eAAeA,CAAC;EAAEC;AAAsB,CAAC,EAAE;EACzD,oBAAOF,IAAA,CAACF,YAAY;IAACK,WAAW,EAAE,KAAM;IAAAD,QAAA,EAAEA;EAAQ,CAAe,CAAC;AACpE","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  import { getHeaderTitle, Header, HeaderBackButton, HeaderBackContext, useHeaderHeight } from '@react-navigation/elements';
4
- import { SafeAreaProviderCompat, Screen } from '@react-navigation/elements/internal';
4
+ import { ActivityView, SafeAreaProviderCompat, Screen } from '@react-navigation/elements/internal';
5
5
  import { useLinkBuilder } from '@react-navigation/native';
6
6
  import * as React from 'react';
7
- import { Animated, Image, StyleSheet, View } from 'react-native';
7
+ import { Animated, StyleSheet, View } from 'react-native';
8
+ import { getModalRouteKeys } from "../utils/getModalRoutesKeys.js";
8
9
  import { AnimatedHeaderHeightContext } from "../utils/useAnimatedHeaderHeight.js";
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
10
11
  const TRANSPARENT_PRESENTATIONS = ['transparentModal', 'containedTransparentModal'];
@@ -12,28 +13,35 @@ export function NativeStackView({
12
13
  state,
13
14
  descriptors
14
15
  }) {
15
- const parentHeaderBack = React.useContext(HeaderBackContext);
16
+ const parentHeaderBack = React.use(HeaderBackContext);
16
17
  const {
17
18
  buildHref
18
19
  } = useLinkBuilder();
20
+ const activeRoutes = state.routes.slice(0, state.index + 1);
21
+ const modalRouteKeys = getModalRouteKeys(activeRoutes, descriptors);
19
22
  return /*#__PURE__*/_jsx(SafeAreaProviderCompat, {
20
- children: state.routes.concat(state.preloadedRoutes).map((route, i) => {
23
+ children: state.routes.map((route, i) => {
21
24
  const isFocused = state.index === i;
22
- const previousKey = state.routes[i - 1]?.key;
23
- const nextKey = state.routes[i + 1]?.key;
25
+ const previousKey = activeRoutes[i - 1]?.key;
26
+ const nextKey = activeRoutes[i + 1]?.key;
24
27
  const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;
25
28
  const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
29
+ const descriptor = descriptors[route.key];
30
+ if (descriptor == null) {
31
+ throw new Error(`Couldn't find a descriptor for route '${route.key}'.`);
32
+ }
26
33
  const {
27
34
  options,
28
35
  navigation,
29
36
  render
30
- } = descriptors[route.key];
37
+ } = descriptor;
31
38
  const headerBack = previousDescriptor ? {
32
39
  title: getHeaderTitle(previousDescriptor.options, previousDescriptor.route.name),
33
40
  href: buildHref(previousDescriptor.route.name, previousDescriptor.route.params)
34
41
  } : parentHeaderBack;
35
42
  const canGoBack = headerBack != null;
36
43
  const {
44
+ inactiveBehavior = 'pause',
37
45
  header,
38
46
  headerShown,
39
47
  headerBackIcon,
@@ -45,8 +53,20 @@ export function NativeStackView({
45
53
  ...rest
46
54
  } = options;
47
55
  const nextPresentation = nextDescriptor?.options.presentation;
48
- const isPreloaded = state.preloadedRoutes.some(r => r.key === route.key);
49
- return /*#__PURE__*/_jsx(Screen, {
56
+ const isNextScreenTransparent = nextPresentation != null && TRANSPARENT_PRESENTATIONS.includes(nextPresentation);
57
+ const isInactive = i > state.index;
58
+ const isBeforeLast = i === activeRoutes.length - 2;
59
+ const isNextScreenModal = nextKey ? modalRouteKeys.includes(nextKey) : false;
60
+ const activityMode =
61
+ // Render focused screens normally
62
+ isFocused ? 'normal' :
63
+ // Unpause preloaded and retained screens so updates are visible
64
+ // This lets effects on those screens run
65
+ inactiveBehavior === 'none' || isInactive || isNextScreenTransparent ? 'inert' : inactiveBehavior === 'unmount' && !isNextScreenModal && !isBeforeLast && !route.state ? 'unmounted' : 'paused';
66
+ if (activityMode === 'unmounted') {
67
+ return null;
68
+ }
69
+ const content = /*#__PURE__*/_jsx(Screen, {
50
70
  focused: isFocused,
51
71
  route: route,
52
72
  navigation: navigation,
@@ -75,21 +95,17 @@ export function NativeStackView({
75
95
  ...rest,
76
96
  label: headerBackTitle ?? label,
77
97
  tintColor: tintColor,
78
- backImage: headerBackIcon !== undefined ? () => /*#__PURE__*/_jsx(Image, {
79
- source: headerBackIcon.source,
80
- resizeMode: "contain",
81
- tintColor: tintColor,
82
- style: styles.backImage
83
- }) : undefined,
98
+ icon: headerBackIcon,
84
99
  onPress: navigation.goBack
85
100
  }) : headerLeft,
86
101
  headerTransparent: headerTransparent
87
102
  }),
88
- style: [StyleSheet.absoluteFill, {
89
- display: (isFocused || nextPresentation != null && TRANSPARENT_PRESENTATIONS.includes(nextPresentation)) && !isPreloaded ? 'flex' : 'none'
90
- }, presentation != null && TRANSPARENT_PRESENTATIONS.includes(presentation) ? {
91
- backgroundColor: 'transparent'
92
- } : null],
103
+ style: {
104
+ ...StyleSheet.absoluteFill,
105
+ ...(presentation != null && TRANSPARENT_PRESENTATIONS.includes(presentation) ? {
106
+ backgroundColor: 'transparent'
107
+ } : null)
108
+ },
93
109
  children: /*#__PURE__*/_jsx(HeaderBackContext.Provider, {
94
110
  value: headerBack,
95
111
  children: /*#__PURE__*/_jsx(AnimatedHeaderHeightProvider, {
@@ -100,6 +116,12 @@ export function NativeStackView({
100
116
  })
101
117
  })
102
118
  }, route.key);
119
+ return /*#__PURE__*/_jsx(ActivityView, {
120
+ mode: activityMode,
121
+ visible: isFocused || isNextScreenTransparent,
122
+ style: StyleSheet.absoluteFill,
123
+ children: content
124
+ }, route.key);
103
125
  })
104
126
  });
105
127
  }
@@ -119,11 +141,6 @@ const AnimatedHeaderHeightProvider = ({
119
141
  const styles = StyleSheet.create({
120
142
  contentContainer: {
121
143
  flex: 1
122
- },
123
- backImage: {
124
- height: 24,
125
- width: 24,
126
- margin: 3
127
144
  }
128
145
  });
129
146
  //# sourceMappingURL=NativeStackView.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getHeaderTitle","Header","HeaderBackButton","HeaderBackContext","useHeaderHeight","SafeAreaProviderCompat","Screen","useLinkBuilder","React","Animated","Image","StyleSheet","View","AnimatedHeaderHeightContext","jsx","_jsx","TRANSPARENT_PRESENTATIONS","NativeStackView","state","descriptors","parentHeaderBack","useContext","buildHref","children","routes","concat","preloadedRoutes","map","route","i","isFocused","index","previousKey","key","nextKey","previousDescriptor","undefined","nextDescriptor","options","navigation","render","headerBack","title","name","href","params","canGoBack","header","headerShown","headerBackIcon","headerLeft","headerTransparent","headerBackTitle","presentation","contentStyle","rest","nextPresentation","isPreloaded","some","r","focused","back","label","tintColor","backImage","source","resizeMode","style","styles","onPress","goBack","absoluteFill","display","includes","backgroundColor","Provider","value","AnimatedHeaderHeightProvider","contentContainer","headerHeight","animatedHeaderHeight","useState","Value","useEffect","setValue","create","flex","height","width","margin"],"sourceRoot":"../../../src","sources":["views/NativeStackView.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getHeaderTitle","Header","HeaderBackButton","HeaderBackContext","useHeaderHeight","ActivityView","SafeAreaProviderCompat","Screen","useLinkBuilder","React","Animated","StyleSheet","View","getModalRouteKeys","AnimatedHeaderHeightContext","jsx","_jsx","TRANSPARENT_PRESENTATIONS","NativeStackView","state","descriptors","parentHeaderBack","use","buildHref","activeRoutes","routes","slice","index","modalRouteKeys","children","map","route","i","isFocused","previousKey","key","nextKey","previousDescriptor","undefined","nextDescriptor","descriptor","Error","options","navigation","render","headerBack","title","name","href","params","canGoBack","inactiveBehavior","header","headerShown","headerBackIcon","headerLeft","headerTransparent","headerBackTitle","presentation","contentStyle","rest","nextPresentation","isNextScreenTransparent","includes","isInactive","isBeforeLast","length","isNextScreenModal","activityMode","content","focused","back","label","tintColor","icon","onPress","goBack","style","absoluteFill","backgroundColor","Provider","value","AnimatedHeaderHeightProvider","styles","contentContainer","mode","visible","headerHeight","animatedHeaderHeight","useState","Value","useEffect","setValue","create","flex"],"sourceRoot":"../../../src","sources":["views/NativeStackView.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { getDefaultHeaderHeight, getHeaderTitle, HeaderBackContext, HeaderHeightContext, HeaderShownContext, useFrameSize } from '@react-navigation/elements';
4
- import { SafeAreaProviderCompat } from '@react-navigation/elements/internal';
4
+ import { ActivityView, SafeAreaProviderCompat } from '@react-navigation/elements/internal';
5
5
  import { NavigationProvider, StackActions, usePreventRemoveContext, useTheme } from '@react-navigation/native';
6
6
  import * as React from 'react';
7
7
  import { Animated, Platform, StyleSheet, useAnimatedValue, View } from 'react-native';
@@ -15,18 +15,20 @@ import { useInvalidPreventRemoveError } from "../utils/useInvalidPreventRemoveEr
15
15
  import { useHeaderConfigProps } from "./useHeaderConfigProps.js";
16
16
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
17
  const ANDROID_DEFAULT_HEADER_HEIGHT = 56;
18
- function isFabric() {
19
- return 'nativeFabricUIManager' in global;
20
- }
21
18
  const useNativeDriver = Platform.OS !== 'web';
19
+ const TRANSPARENT_PRESENTATIONS = ['transparentModal', 'containedTransparentModal'];
20
+ const SHEET_PRESENTATIONS = ['formSheet', 'pageSheet'];
22
21
  const SceneView = ({
23
22
  index,
24
23
  focused,
25
- shouldFreeze,
26
24
  descriptor,
27
25
  previousDescriptor,
28
26
  isPresentationModal,
29
- isPreloaded,
27
+ isNextScreenTransparent,
28
+ isNextScreenSheet,
29
+ isNextScreenModal,
30
+ isInactive,
31
+ isBeforeLast,
30
32
  onWillDisappear,
31
33
  onWillAppear,
32
34
  onAppear,
@@ -44,6 +46,7 @@ const SceneView = ({
44
46
  render
45
47
  } = descriptor;
46
48
  const {
49
+ inactiveBehavior = 'pause',
47
50
  animation,
48
51
  animationDuration,
49
52
  animationMatchesGesture,
@@ -74,9 +77,9 @@ const SceneView = ({
74
77
  statusBarAnimation,
75
78
  statusBarHidden,
76
79
  statusBarStyle,
80
+ unstable_headerInsets,
77
81
  unstable_sheetFooter,
78
82
  scrollEdgeEffects,
79
- freezeOnBlur,
80
83
  contentStyle
81
84
  } = options;
82
85
  let {
@@ -97,11 +100,11 @@ const SceneView = ({
97
100
 
98
101
  // Modals are fullscreen in landscape only on iPhone
99
102
  const isIPhone = Platform.OS === 'ios' && !(Platform.isPad || Platform.isTV);
100
- const isParentHeaderShown = React.useContext(HeaderShownContext);
101
- const parentHeaderHeight = React.useContext(HeaderHeightContext);
102
- const parentHeaderBack = React.useContext(HeaderBackContext);
103
+ const isParentHeaderShown = React.use(HeaderShownContext);
104
+ const parentHeaderHeight = React.use(HeaderHeightContext);
105
+ const parentHeaderBack = React.use(HeaderBackContext);
103
106
  const isLandscape = useFrameSize(frame => frame.width > frame.height);
104
- const topInset = isParentHeaderShown || Platform.OS === 'ios' && isModal || isIPhone && isLandscape ? 0 : insets.top;
107
+ const topInset = isParentHeaderShown || Platform.OS === 'android' && unstable_headerInsets?.top === false || Platform.OS === 'ios' && isModal || isIPhone && isLandscape ? 0 : insets.top;
105
108
  const defaultHeaderHeight = useFrameSize(frame => Platform.select({
106
109
  // FIXME: Currently screens isn't using Material 3
107
110
  // So our `getDefaultHeaderHeight` doesn't return the correct value
@@ -123,7 +126,6 @@ const SceneView = ({
123
126
  // Debounce the header height updates to avoid excessive re-renders
124
127
  debounce(setHeaderHeight, 100), []);
125
128
  const hasCustomHeader = header != null;
126
- const headerTopInsetEnabled = topInset !== 0;
127
129
  const canGoBack = previousDescriptor != null || parentHeaderBack != null;
128
130
  const backTitle = previousDescriptor ? getHeaderTitle(previousDescriptor.options, previousDescriptor.route.name) : parentHeaderBack?.title;
129
131
  const headerBack = React.useMemo(() => {
@@ -145,9 +147,15 @@ const SceneView = ({
145
147
  headerBackTitle: options.headerBackTitle !== undefined ? options.headerBackTitle : undefined,
146
148
  headerHeight,
147
149
  headerShown: header !== undefined ? false : headerShown,
148
- headerTopInsetEnabled,
149
150
  headerBack
150
151
  });
152
+ const headerContainerRef = React.useRef(null);
153
+ React.useLayoutEffect(() => {
154
+ headerContainerRef.current?.measure((_x, _y, _width, height) => {
155
+ animatedHeaderHeight.setValue(height);
156
+ setHeaderHeight(height);
157
+ });
158
+ }, [animatedHeaderHeight]);
151
159
  const onHeaderHeightChange = hasCustomHeader ?
152
160
  // If we have a custom header, don't use native header height
153
161
  undefined :
@@ -171,7 +179,9 @@ const SceneView = ({
171
179
  if (doesHeaderAnimate) {
172
180
  setHeaderHeightDebounced(headerHeight);
173
181
  } else {
174
- if (Platform.OS === 'android' && headerHeight !== 0 && headerHeight <= ANDROID_DEFAULT_HEADER_HEIGHT) {
182
+ if (Platform.OS === 'android' && headerHeight !== 0 &&
183
+ // On some devices, height maybe slightly off (e.g. 56.17 instead of 56)
184
+ Math.round(headerHeight) <= ANDROID_DEFAULT_HEADER_HEIGHT) {
175
185
  // FIXME: On Android, events may get delivered out-of-order
176
186
  // https://github.com/facebook/react-native/issues/54636
177
187
  // We seem to get header height without status bar height first,
@@ -188,18 +198,77 @@ const SceneView = ({
188
198
  }
189
199
  }
190
200
  });
201
+ const activityMode =
202
+ // Render focused screens normally
203
+ // Unpause preloaded and retained screens so updates are visible
204
+ // Unpause previous screen so update isn't delayed for swipe back
205
+ // This lets effects on those screens run
206
+ // We don't need to handle inert as it'll be handled natively
207
+ inactiveBehavior === 'none' || focused || isInactive || isNextScreenTransparent ||
208
+ // Unpause the screen behind a sheet so it stays up to date
209
+ // Sheets don't cover the whole screen, so the screen behind is visible
210
+ isNextScreenSheet ||
211
+ // On iPadOS, the base screen is visible while modal is in a smaller area
212
+ // So also keep the screens unpaused
213
+ isNextScreenModal && !isModal || isBeforeLast ? 'normal' : inactiveBehavior === 'unmount' && !('state' in route && route.state) ? 'unmounted' : 'paused';
214
+ const content = /*#__PURE__*/_jsx(AnimatedHeaderHeightContext.Provider, {
215
+ value: animatedHeaderHeight,
216
+ children: /*#__PURE__*/_jsxs(HeaderHeightContext.Provider, {
217
+ value: headerShown !== false ? headerHeight : parentHeaderHeight ?? 0,
218
+ children: [headerBackground != null ?
219
+ /*#__PURE__*/
220
+ /**
221
+ * To show a custom header background, we render it at the top of the screen below the header
222
+ * The header also needs to be positioned absolutely (with `translucent` style)
223
+ */
224
+ _jsx(View, {
225
+ style: [styles.background, headerTransparent ? styles.translucent : null, {
226
+ height: headerHeight
227
+ }],
228
+ children: headerBackground()
229
+ }) : null, header != null && headerShown !== false ? /*#__PURE__*/_jsx(View, {
230
+ style: [styles.header, headerTransparent ? [styles.absolute,
231
+ // Specify an explicit min height for Android screen readers
232
+ {
233
+ minHeight: headerHeight
234
+ }] : null],
235
+ children: /*#__PURE__*/_jsx(View, {
236
+ ref: headerContainerRef,
237
+ onLayout: e => {
238
+ const headerHeight = e.nativeEvent.layout.height;
239
+ animatedHeaderHeight.setValue(headerHeight);
240
+ setHeaderHeight(headerHeight);
241
+ },
242
+ style: {
243
+ pointerEvents: 'box-none'
244
+ },
245
+ children: header({
246
+ back: headerBack,
247
+ options,
248
+ route,
249
+ navigation
250
+ })
251
+ })
252
+ }) : null, /*#__PURE__*/_jsx(HeaderShownContext.Provider, {
253
+ value: isParentHeaderShown || headerShown !== false,
254
+ children: /*#__PURE__*/_jsx(HeaderBackContext.Provider, {
255
+ value: headerBack,
256
+ children: render()
257
+ })
258
+ })]
259
+ })
260
+ });
191
261
  return /*#__PURE__*/_jsx(NavigationProvider, {
192
262
  navigation: navigation,
193
263
  route: route,
194
264
  children: /*#__PURE__*/_jsx(ScreenStackItem, {
195
265
  screenId: route.key,
196
- activityState: isPreloaded ? 0 : 2,
266
+ activityState: isInactive ? 0 : 2,
197
267
  style: StyleSheet.absoluteFill,
198
268
  "aria-hidden": !focused,
199
269
  customAnimationOnSwipe: animationMatchesGesture,
200
270
  fullScreenSwipeEnabled: fullScreenGestureEnabled,
201
271
  fullScreenSwipeShadowEnabled: fullScreenGestureShadowEnabled,
202
- freezeOnBlur: freezeOnBlur,
203
272
  gestureEnabled: Platform.OS === 'android' ?
204
273
  // This prop enables handling of system back gestures on Android
205
274
  // Since we handle them in JS side, we disable this
@@ -250,48 +319,16 @@ const SceneView = ({
250
319
  backgroundColor: colors.background
251
320
  }, contentStyle],
252
321
  headerConfig: headerConfig,
253
- unstable_sheetFooter: unstable_sheetFooter
254
- // When ts-expect-error is added, it affects all the props below it
255
- // So we keep any props that need it at the end
256
- // Otherwise invalid props may not be caught by TypeScript
257
- ,
258
- shouldFreeze: shouldFreeze,
259
- children: /*#__PURE__*/_jsx(AnimatedHeaderHeightContext.Provider, {
260
- value: animatedHeaderHeight,
261
- children: /*#__PURE__*/_jsxs(HeaderHeightContext.Provider, {
262
- value: headerShown !== false ? headerHeight : parentHeaderHeight ?? 0,
263
- children: [headerBackground != null ?
264
- /*#__PURE__*/
265
- /**
266
- * To show a custom header background, we render it at the top of the screen below the header
267
- * The header also needs to be positioned absolutely (with `translucent` style)
268
- */
269
- _jsx(View, {
270
- style: [styles.background, headerTransparent ? styles.translucent : null, {
271
- height: headerHeight
272
- }],
273
- children: headerBackground()
274
- }) : null, header != null && headerShown !== false ? /*#__PURE__*/_jsx(View, {
275
- onLayout: e => {
276
- const headerHeight = e.nativeEvent.layout.height;
277
- animatedHeaderHeight.setValue(headerHeight);
278
- setHeaderHeight(headerHeight);
279
- },
280
- style: [styles.header, headerTransparent ? styles.absolute : null],
281
- children: header({
282
- back: headerBack,
283
- options,
284
- route,
285
- navigation
286
- })
287
- }) : null, /*#__PURE__*/_jsx(HeaderShownContext.Provider, {
288
- value: isParentHeaderShown || headerShown !== false,
289
- children: /*#__PURE__*/_jsx(HeaderBackContext.Provider, {
290
- value: headerBack,
291
- children: render()
292
- })
293
- })]
294
- })
322
+ unstable_sheetFooter: unstable_sheetFooter,
323
+ children: activityMode === 'unmounted' ? null : /*#__PURE__*/_jsx(ActivityView, {
324
+ mode: activityMode,
325
+ visible:
326
+ // We don't need to hide the content since it's handled natively
327
+ // Hiding may also cause flash due to lag after native tab switch
328
+ // So we leave it always visible
329
+ true,
330
+ style: styles.content,
331
+ children: content
295
332
  })
296
333
  }, route.key)
297
334
  });
@@ -305,34 +342,38 @@ export function NativeStackView({
305
342
  setNextDismissedKey
306
343
  } = useDismissedRouteError(state);
307
344
  useInvalidPreventRemoveError(descriptors);
308
- const modalRouteKeys = getModalRouteKeys(state.routes, descriptors);
345
+ const activeRoutes = state.routes.slice(0, state.index + 1);
346
+ const modalRouteKeys = getModalRouteKeys(activeRoutes, descriptors);
309
347
  return /*#__PURE__*/_jsx(SafeAreaProviderCompat, {
310
348
  children: /*#__PURE__*/_jsx(ScreenStack, {
311
349
  style: styles.container,
312
- children: state.routes.concat(state.preloadedRoutes).map((route, index) => {
350
+ children: state.routes.map((route, index) => {
313
351
  const descriptor = descriptors[route.key];
352
+ if (descriptor == null) {
353
+ throw new Error(`Couldn't find a descriptor for route '${route.key}'.`);
354
+ }
314
355
  const isFocused = state.index === index;
315
- const isBelowFocused = state.index - 1 === index;
316
- const previousKey = state.routes[index - 1]?.key;
317
- const nextKey = state.routes[index + 1]?.key;
356
+ const previousKey = activeRoutes[index - 1]?.key;
357
+ const nextKey = activeRoutes[index + 1]?.key;
318
358
  const previousDescriptor = previousKey ? descriptors[previousKey] : undefined;
319
359
  const nextDescriptor = nextKey ? descriptors[nextKey] : undefined;
360
+ const nextPresentation = nextDescriptor?.options.presentation;
361
+ const isNextScreenTransparent = nextPresentation != null && TRANSPARENT_PRESENTATIONS.includes(nextPresentation);
362
+ const isNextScreenSheet = nextPresentation != null && SHEET_PRESENTATIONS.includes(nextPresentation);
363
+ const isNextScreenModal = nextKey ? modalRouteKeys.includes(nextKey) : false;
320
364
  const isModal = modalRouteKeys.includes(route.key);
321
- const isModalOnIos = isModal && Platform.OS === 'ios';
322
- const isPreloaded = state.preloadedRoutes.some(r => r.key === route.key);
323
-
324
- // On Fabric, when screen is frozen, animated and reanimated values are not updated
325
- // due to component being unmounted. To avoid this, we don't freeze the previous screen there
326
- const shouldFreeze = isFabric() ? !isPreloaded && !isFocused && !isBelowFocused && !isModalOnIos : !isPreloaded && !isFocused && !isModalOnIos;
327
365
  return /*#__PURE__*/_jsx(SceneView, {
328
366
  index: index,
329
367
  focused: isFocused,
330
- shouldFreeze: shouldFreeze,
331
368
  descriptor: descriptor,
332
369
  previousDescriptor: previousDescriptor,
333
370
  nextDescriptor: nextDescriptor,
334
371
  isPresentationModal: isModal,
335
- isPreloaded: isPreloaded,
372
+ isNextScreenTransparent: isNextScreenTransparent,
373
+ isNextScreenSheet: isNextScreenSheet,
374
+ isNextScreenModal: isNextScreenModal,
375
+ isInactive: index > state.index,
376
+ isBeforeLast: index === activeRoutes.length - 2,
336
377
  onWillDisappear: () => {
337
378
  navigation.emit({
338
379
  type: 'transitionStart',
@@ -416,6 +457,9 @@ const styles = StyleSheet.create({
416
457
  container: {
417
458
  flex: 1
418
459
  },
460
+ content: {
461
+ flex: 1
462
+ },
419
463
  header: {
420
464
  zIndex: 1
421
465
  },