@react-navigation/native-stack 7.9.0 → 7.10.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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { createNavigatorFactory, StackActions, StackRouter, useNavigationBuilder } from '@react-navigation/native';
3
+ import { createNavigatorFactory, 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";
@@ -33,24 +33,32 @@ function NativeStackNavigator({
33
33
  screenLayout,
34
34
  UNSTABLE_router
35
35
  });
36
- React.useEffect(() =>
37
- // @ts-expect-error: there may not be a tab navigator in parent
38
- navigation?.addListener?.('tabPress', e => {
39
- const isFocused = navigation.isFocused();
36
+ const meta = React.useContext(NavigationMetaContext);
37
+ React.useEffect(() => {
38
+ if (meta && 'type' in meta && meta.type === 'native-tabs') {
39
+ // If we're inside native tabs, we don't need to handle popToTop
40
+ // It's handled natively by native tabs
41
+ return;
42
+ }
40
43
 
41
- // Run the operation in the next frame so we're sure all listeners have been run
42
- // This is necessary to know if preventDefault() has been called
43
- requestAnimationFrame(() => {
44
- if (state.index > 0 && isFocused && !e.defaultPrevented) {
45
- // When user taps on already focused tab and we're inside the tab,
46
- // reset the stack to replicate native behaviour
47
- navigation.dispatch({
48
- ...StackActions.popToTop(),
49
- target: state.key
50
- });
51
- }
44
+ // @ts-expect-error: there may not be a tab navigator in parent
45
+ return navigation?.addListener?.('tabPress', e => {
46
+ const isFocused = navigation.isFocused();
47
+
48
+ // Run the operation in the next frame so we're sure all listeners have been run
49
+ // This is necessary to know if preventDefault() has been called
50
+ requestAnimationFrame(() => {
51
+ if (state.index > 0 && isFocused && !e.defaultPrevented) {
52
+ // When user taps on already focused tab and we're inside the tab,
53
+ // reset the stack to replicate native behaviour
54
+ navigation.dispatch({
55
+ ...StackActions.popToTop(),
56
+ target: state.key
57
+ });
58
+ }
59
+ });
52
60
  });
53
- }), [navigation, state.index, state.key]);
61
+ }, [meta, navigation, state.index, state.key]);
54
62
  return /*#__PURE__*/_jsx(NavigationContent, {
55
63
  children: /*#__PURE__*/_jsx(NativeStackView, {
56
64
  ...rest,
@@ -1 +1 @@
1
- {"version":3,"names":["createNavigatorFactory","StackActions","StackRouter","useNavigationBuilder","React","NativeStackView","jsx","_jsx","NativeStackNavigator","id","initialRouteName","UNSTABLE_routeNamesChangeBehavior","children","layout","screenListeners","screenOptions","screenLayout","UNSTABLE_router","rest","state","describe","descriptors","navigation","NavigationContent","useEffect","addListener","e","isFocused","requestAnimationFrame","index","defaultPrevented","dispatch","popToTop","target","key","createNativeStackNavigator","config"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAKtBC,YAAY,EAEZC,WAAW,EAIXC,oBAAoB,QACf,0BAA0B;AACjC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAQ9B,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,SAASC,oBAAoBA,CAAC;EAC5BC,EAAE;EACFC,gBAAgB;EAChBC,iCAAiC;EACjCC,QAAQ;EACRC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC,YAAY;EACZC,eAAe;EACf,GAAGC;AACsB,CAAC,EAAE;EAC5B,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,GACnEpB,oBAAoB,CAMlBD,WAAW,EAAE;IACbO,EAAE;IACFC,gBAAgB;IAChBC,iCAAiC;IACjCC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,CAAC;EAEJb,KAAK,CAACoB,SAAS,CACb;EACE;EACAF,UAAU,EAAEG,WAAW,GAAG,UAAU,EAAGC,CAAM,IAAK;IAChD,MAAMC,SAAS,GAAGL,UAAU,CAACK,SAAS,CAAC,CAAC;;IAExC;IACA;IACAC,qBAAqB,CAAC,MAAM;MAC1B,IACET,KAAK,CAACU,KAAK,GAAG,CAAC,IACfF,SAAS,IACT,CAAED,CAAC,CAAgCI,gBAAgB,EACnD;QACA;QACA;QACAR,UAAU,CAACS,QAAQ,CAAC;UAClB,GAAG9B,YAAY,CAAC+B,QAAQ,CAAC,CAAC;UAC1BC,MAAM,EAAEd,KAAK,CAACe;QAChB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,EACJ,CAACZ,UAAU,EAAEH,KAAK,CAACU,KAAK,EAAEV,KAAK,CAACe,GAAG,CACrC,CAAC;EAED,oBACE3B,IAAA,CAACgB,iBAAiB;IAAAX,QAAA,eAChBL,IAAA,CAACF,eAAe;MAAA,GACVa,IAAI;MACRC,KAAK,EAAEA,KAAM;MACbG,UAAU,EAAEA,UAAW;MACvBD,WAAW,EAAEA,WAAY;MACzBD,QAAQ,EAAEA;IAAS,CACpB;EAAC,CACe,CAAC;AAExB;AAEA,OAAO,SAASe,0BAA0BA,CAmBxCC,MAAe,EAAmC;EAClD,OAAOpC,sBAAsB,CAACQ,oBAAoB,CAAC,CAAC4B,MAAM,CAAC;AAC7D","ignoreList":[]}
1
+ {"version":3,"names":["createNavigatorFactory","NavigationMetaContext","StackActions","StackRouter","useNavigationBuilder","React","NativeStackView","jsx","_jsx","NativeStackNavigator","id","initialRouteName","UNSTABLE_routeNamesChangeBehavior","children","layout","screenListeners","screenOptions","screenLayout","UNSTABLE_router","rest","state","describe","descriptors","navigation","NavigationContent","meta","useContext","useEffect","type","addListener","e","isFocused","requestAnimationFrame","index","defaultPrevented","dispatch","popToTop","target","key","createNativeStackNavigator","config"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAEtBC,qBAAqB,EAIrBC,YAAY,EAEZC,WAAW,EAIXC,oBAAoB,QACf,0BAA0B;AACjC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAQ9B,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,SAASC,oBAAoBA,CAAC;EAC5BC,EAAE;EACFC,gBAAgB;EAChBC,iCAAiC;EACjCC,QAAQ;EACRC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC,YAAY;EACZC,eAAe;EACf,GAAGC;AACsB,CAAC,EAAE;EAC5B,MAAM;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,GACnEpB,oBAAoB,CAMlBD,WAAW,EAAE;IACbO,EAAE;IACFC,gBAAgB;IAChBC,iCAAiC;IACjCC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,CAAC;EAEJ,MAAMO,IAAI,GAAGpB,KAAK,CAACqB,UAAU,CAACzB,qBAAqB,CAAC;EAEpDI,KAAK,CAACsB,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,IACEZ,KAAK,CAACa,KAAK,GAAG,CAAC,IACfF,SAAS,IACT,CAAED,CAAC,CAAgCI,gBAAgB,EACnD;UACA;UACA;UACAX,UAAU,CAACY,QAAQ,CAAC;YAClB,GAAGjC,YAAY,CAACkC,QAAQ,CAAC,CAAC;YAC1BC,MAAM,EAAEjB,KAAK,CAACkB;UAChB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACb,IAAI,EAAEF,UAAU,EAAEH,KAAK,CAACa,KAAK,EAAEb,KAAK,CAACkB,GAAG,CAAC,CAAC;EAE9C,oBACE9B,IAAA,CAACgB,iBAAiB;IAAAX,QAAA,eAChBL,IAAA,CAACF,eAAe;MAAA,GACVa,IAAI;MACRC,KAAK,EAAEA,KAAM;MACbG,UAAU,EAAEA,UAAW;MACvBD,WAAW,EAAEA,WAAY;MACzBD,QAAQ,EAAEA;IAAS,CACpB;EAAC,CACe,CAAC;AAExB;AAEA,OAAO,SAASkB,0BAA0BA,CAmBxCC,MAAe,EAAmC;EAClD,OAAOxC,sBAAsB,CAACS,oBAAoB,CAAC,CAAC+B,MAAM,CAAC;AAC7D","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createNativeStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigators/createNativeStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAGzB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAGlB,iBAAS,oBAAoB,CAAC,EAC5B,EAAE,EACF,gBAAgB,EAChB,iCAAiC,EACjC,QAAQ,EACR,MAAM,EACN,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,GAAG,IAAI,EACR,EAAE,yBAAyB,2CAyD3B;AAED,wBAAgB,0BAA0B,CACxC,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,EAAE,6BAA6B,CAAC;IACxC,cAAc,EAAE;SACb,SAAS,IAAI,MAAM,SAAS,GAAG,yBAAyB,CACvD,SAAS,EACT,SAAS,EACT,WAAW,CACZ;KACF,CAAC;IACF,SAAS,EAAE,OAAO,oBAAoB,CAAC;CACxC,EACD,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAClE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD"}
1
+ {"version":3,"file":"createNativeStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigators/createNativeStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAGzB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAGlB,iBAAS,oBAAoB,CAAC,EAC5B,EAAE,EACF,gBAAgB,EAChB,iCAAiC,EACjC,QAAQ,EACR,MAAM,EACN,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,GAAG,IAAI,EACR,EAAE,yBAAyB,2CA+D3B;AAED,wBAAgB,0BAA0B,CACxC,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACjE,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,EAAE,6BAA6B,CAAC;IACxC,cAAc,EAAE;SACb,SAAS,IAAI,MAAM,SAAS,GAAG,yBAAyB,CACvD,SAAS,EACT,SAAS,EACT,WAAW,CACZ;KACF,CAAC;IACF,SAAS,EAAE,OAAO,oBAAoB,CAAC;CACxC,EACD,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAClE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAElD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/native-stack",
3
3
  "description": "Native stack navigator using react-native-screens",
4
- "version": "7.9.0",
4
+ "version": "7.10.0",
5
5
  "keywords": [
6
6
  "react-native-component",
7
7
  "react-component",
@@ -46,14 +46,14 @@
46
46
  "clean": "del lib"
47
47
  },
48
48
  "dependencies": {
49
- "@react-navigation/elements": "^2.9.3",
49
+ "@react-navigation/elements": "^2.9.5",
50
50
  "color": "^4.2.3",
51
51
  "sf-symbols-typescript": "^2.1.0",
52
52
  "warn-once": "^0.1.1"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@jest/globals": "^30.0.0",
56
- "@react-navigation/native": "^7.1.26",
56
+ "@react-navigation/native": "^7.1.28",
57
57
  "@testing-library/react-native": "^13.2.1",
58
58
  "@types/react": "~19.0.10",
59
59
  "del-cli": "^6.0.0",
@@ -65,7 +65,7 @@
65
65
  "typescript": "^5.9.2"
66
66
  },
67
67
  "peerDependencies": {
68
- "@react-navigation/native": "^7.1.26",
68
+ "@react-navigation/native": "^7.1.28",
69
69
  "react": ">= 18.2.0",
70
70
  "react-native": "*",
71
71
  "react-native-safe-area-context": ">= 4.0.0",
@@ -89,5 +89,5 @@
89
89
  ]
90
90
  ]
91
91
  },
92
- "gitHead": "2b7ee0d2d1b1ef0390b690f59c0c1dd8bd57e9eb"
92
+ "gitHead": "e2e5f1e55afe7b135811832487f596c6060def74"
93
93
  }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  createNavigatorFactory,
3
3
  type EventArg,
4
+ NavigationMetaContext,
4
5
  type NavigatorTypeBagBase,
5
6
  type ParamListBase,
6
7
  type StackActionHelpers,
@@ -53,31 +54,37 @@ function NativeStackNavigator({
53
54
  UNSTABLE_router,
54
55
  });
55
56
 
56
- React.useEffect(
57
- () =>
58
- // @ts-expect-error: there may not be a tab navigator in parent
59
- navigation?.addListener?.('tabPress', (e: any) => {
60
- const isFocused = navigation.isFocused();
57
+ const meta = React.useContext(NavigationMetaContext);
61
58
 
62
- // Run the operation in the next frame so we're sure all listeners have been run
63
- // This is necessary to know if preventDefault() has been called
64
- requestAnimationFrame(() => {
65
- if (
66
- state.index > 0 &&
67
- isFocused &&
68
- !(e as EventArg<'tabPress', true>).defaultPrevented
69
- ) {
70
- // When user taps on already focused tab and we're inside the tab,
71
- // reset the stack to replicate native behaviour
72
- navigation.dispatch({
73
- ...StackActions.popToTop(),
74
- target: state.key,
75
- });
76
- }
77
- });
78
- }),
79
- [navigation, state.index, state.key]
80
- );
59
+ React.useEffect(() => {
60
+ if (meta && 'type' in meta && meta.type === 'native-tabs') {
61
+ // If we're inside native tabs, we don't need to handle popToTop
62
+ // It's handled natively by native tabs
63
+ return;
64
+ }
65
+
66
+ // @ts-expect-error: there may not be a tab navigator in parent
67
+ return navigation?.addListener?.('tabPress', (e: any) => {
68
+ const isFocused = navigation.isFocused();
69
+
70
+ // Run the operation in the next frame so we're sure all listeners have been run
71
+ // This is necessary to know if preventDefault() has been called
72
+ requestAnimationFrame(() => {
73
+ if (
74
+ state.index > 0 &&
75
+ isFocused &&
76
+ !(e as EventArg<'tabPress', true>).defaultPrevented
77
+ ) {
78
+ // When user taps on already focused tab and we're inside the tab,
79
+ // reset the stack to replicate native behaviour
80
+ navigation.dispatch({
81
+ ...StackActions.popToTop(),
82
+ target: state.key,
83
+ });
84
+ }
85
+ });
86
+ });
87
+ }, [meta, navigation, state.index, state.key]);
81
88
 
82
89
  return (
83
90
  <NavigationContent>