@react-navigation/native-stack 7.19.1 → 7.20.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, createScreenFactory, NavigationMetaContext, StackActions, StackRouter, useNavigationBuilder } from '@react-navigation/native';
3
+ import { createNavigatorFactory, createScreenFactory, 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,13 +33,7 @@ function NativeStackNavigator({
33
33
  screenLayout,
34
34
  UNSTABLE_router
35
35
  });
36
- const meta = React.useContext(NavigationMetaContext);
37
36
  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
- }
43
37
  let handle;
44
38
 
45
39
  // @ts-expect-error: there may not be a tab navigator in parent
@@ -51,7 +45,10 @@ function NativeStackNavigator({
51
45
  // This is necessary to know if preventDefault() has been called
52
46
  handle = requestAnimationFrame(() => {
53
47
  const currentState = navigation.getState();
54
- if (isFocused && currentState.index > 0 && !e.defaultPrevented) {
48
+ const event = e;
49
+ if (isFocused && event.data?.behavior?.popToTop !== false &&
50
+ // Native tabs handle popToTop natively.
51
+ event.data?.origin !== 'native' && currentState.index > 0 && !event.defaultPrevented) {
55
52
  // When user taps on already focused tab and we're inside the tab,
56
53
  // reset the stack to replicate native behaviour
57
54
  navigation.dispatch({
@@ -65,7 +62,7 @@ function NativeStackNavigator({
65
62
  cancelAnimationFrame(handle);
66
63
  unsubscribe?.();
67
64
  };
68
- }, [meta, navigation]);
65
+ }, [navigation]);
69
66
  return render(/*#__PURE__*/_jsx(NativeStackView, {
70
67
  ...rest,
71
68
  state: state,
@@ -1 +1 @@
1
- {"version":3,"names":["createNavigatorFactory","createScreenFactory","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","render","meta","useContext","useEffect","type","handle","unsubscribe","addListener","e","isFocused","cancelAnimationFrame","requestAnimationFrame","currentState","getState","index","defaultPrevented","dispatch","popToTop","target","key","createNativeStackNavigator","config","createNativeStackScreen"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,mBAAmB,EAEnBC,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;EAAO,CAAC,GACxDpB,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,IAAIC,MAA4D;;IAEhE;IACA,MAAMC,WAAW,GAAGP,UAAU,CAACQ,WAAW,GAAG,UAAU,EAAGC,CAAC,IAAK;MAC9D,MAAMC,SAAS,GAAGV,UAAU,CAACU,SAAS,CAAC,CAAC;MAExCC,oBAAoB,CAACL,MAAM,CAAC;;MAE5B;MACA;MACAA,MAAM,GAAGM,qBAAqB,CAAC,MAAM;QACnC,MAAMC,YAAY,GAAGb,UAAU,CAACc,QAAQ,CAAC,CAAC;QAE1C,IACEJ,SAAS,IACTG,YAAY,CAACE,KAAK,GAAG,CAAC,IACtB,CAAEN,CAAC,CAAgCO,gBAAgB,EACnD;UACA;UACA;UACAhB,UAAU,CAACiB,QAAQ,CAAC;YAClB,GAAGtC,YAAY,CAACuC,QAAQ,CAAC,CAAC;YAC1BC,MAAM,EAAEN,YAAY,CAACO;UACvB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,MAAM;MACXT,oBAAoB,CAACL,MAAM,CAAC;MAC5BC,WAAW,GAAG,CAAC;IACjB,CAAC;EACH,CAAC,EAAE,CAACL,IAAI,EAAEF,UAAU,CAAC,CAAC;EAEtB,OAAOC,MAAM,cACXhB,IAAA,CAACF,eAAe;IAAA,GACVa,IAAI;IACRC,KAAK,EAAEA,KAAM;IACbG,UAAU,EAAEA,UAAW;IACvBD,WAAW,EAAEA,WAAY;IACzBD,QAAQ,EAAEA;EAAS,CACpB,CACH,CAAC;AACH;AAqBA,OAAO,SAASuB,0BAA0BA,CAQxCC,MAAe,EAAmC;EAClD,OAAO9C,sBAAsB,CAACU,oBAAoB,CAAC,CAACoC,MAAM,CAAC;AAC7D;AAEA,OAAO,MAAMC,uBAAuB,GAClC9C,mBAAmB,CAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createNavigatorFactory","createScreenFactory","StackActions","StackRouter","useNavigationBuilder","React","NativeStackView","jsx","_jsx","NativeStackNavigator","id","initialRouteName","UNSTABLE_routeNamesChangeBehavior","children","layout","screenListeners","screenOptions","screenLayout","UNSTABLE_router","rest","state","describe","descriptors","navigation","render","useEffect","handle","unsubscribe","addListener","e","isFocused","cancelAnimationFrame","requestAnimationFrame","currentState","getState","event","data","behavior","popToTop","origin","index","defaultPrevented","dispatch","target","key","createNativeStackNavigator","config","createNativeStackScreen"],"sourceRoot":"../../../src","sources":["navigators/createNativeStackNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,mBAAmB,EAKnBC,YAAY,EAEZC,WAAW,EAIXC,oBAAoB,QACf,0BAA0B;AACjC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAQ9B,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ3D,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;EAAO,CAAC,GACxDpB,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,CAAC,MAAM;IACpB,IAAIC,MAA4D;;IAEhE;IACA,MAAMC,WAAW,GAAGJ,UAAU,CAACK,WAAW,GAAG,UAAU,EAAGC,CAAC,IAAK;MAC9D,MAAMC,SAAS,GAAGP,UAAU,CAACO,SAAS,CAAC,CAAC;MAExCC,oBAAoB,CAACL,MAAM,CAAC;;MAE5B;MACA;MACAA,MAAM,GAAGM,qBAAqB,CAAC,MAAM;QACnC,MAAMC,YAAY,GAAGV,UAAU,CAACW,QAAQ,CAAC,CAAC;QAC1C,MAAMC,KAAK,GAAGN,CAAqB;QAEnC,IACEC,SAAS,IACTK,KAAK,CAACC,IAAI,EAAEC,QAAQ,EAAEC,QAAQ,KAAK,KAAK;QACxC;QACAH,KAAK,CAACC,IAAI,EAAEG,MAAM,KAAK,QAAQ,IAC/BN,YAAY,CAACO,KAAK,GAAG,CAAC,IACtB,CAACL,KAAK,CAACM,gBAAgB,EACvB;UACA;UACA;UACAlB,UAAU,CAACmB,QAAQ,CAAC;YAClB,GAAGxC,YAAY,CAACoC,QAAQ,CAAC,CAAC;YAC1BK,MAAM,EAAEV,YAAY,CAACW;UACvB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,MAAM;MACXb,oBAAoB,CAACL,MAAM,CAAC;MAC5BC,WAAW,GAAG,CAAC;IACjB,CAAC;EACH,CAAC,EAAE,CAACJ,UAAU,CAAC,CAAC;EAEhB,OAAOC,MAAM,cACXhB,IAAA,CAACF,eAAe;IAAA,GACVa,IAAI;IACRC,KAAK,EAAEA,KAAM;IACbG,UAAU,EAAEA,UAAW;IACvBD,WAAW,EAAEA,WAAY;IACzBD,QAAQ,EAAEA;EAAS,CACpB,CACH,CAAC;AACH;AAqBA,OAAO,SAASwB,0BAA0BA,CAQxCC,MAAe,EAAmC;EAClD,OAAO9C,sBAAsB,CAACS,oBAAoB,CAAC,CAACqC,MAAM,CAAC;AAC7D;AAEA,OAAO,MAAMC,uBAAuB,GAClC9C,mBAAmB,CAAqB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"createNativeStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigators/createNativeStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAGlB,KAAK,oBAAoB,EAGzB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,aAAU,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,qBAwE3B;AAED,MAAM,MAAM,kBAAkB,CAC5B,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACzD;IACF,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,CAAC;AAEF,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,kBAAkB,CAC7D,SAAS,EACT,WAAW,CACZ,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;AAED,eAAO,MAAM,uBAAuB,6GACO,CAAC"}
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;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,aAAU,CAAC;AASlB,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,qBAoE3B;AAED,MAAM,MAAM,kBAAkB,CAC5B,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACzD;IACF,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,CAAC;AAEF,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,kBAAkB,CAC7D,SAAS,EACT,WAAW,CACZ,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;AAED,eAAO,MAAM,uBAAuB,6GACO,CAAC"}
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.19.1",
4
+ "version": "7.20.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.42",
49
+ "@react-navigation/elements": "^2.9.44",
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.4.1",
56
+ "@react-navigation/native": "^7.5.0",
57
57
  "@testing-library/react-native": "^13.2.1",
58
58
  "@types/react": "~19.2.4",
59
59
  "del-cli": "^6.0.0",
@@ -65,7 +65,7 @@
65
65
  "typescript": "~6.0.3"
66
66
  },
67
67
  "peerDependencies": {
68
- "@react-navigation/native": "^7.4.1",
68
+ "@react-navigation/native": "^7.5.0",
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": "90950419c0ee5dec77cd40cee0687add80dcf625"
92
+ "gitHead": "47f787dc7580c092238e17af8a86cad32573bd32"
93
93
  }
@@ -2,7 +2,6 @@ import {
2
2
  createNavigatorFactory,
3
3
  createScreenFactory,
4
4
  type EventArg,
5
- NavigationMetaContext,
6
5
  type NavigatorTypeBagBase,
7
6
  type ParamListBase,
8
7
  type StackActionHelpers,
@@ -24,6 +23,12 @@ import type {
24
23
  } from '../types';
25
24
  import { NativeStackView } from '../views/NativeStackView';
26
25
 
26
+ type TabPressEventArg = EventArg<
27
+ 'tabPress',
28
+ true,
29
+ { origin?: string; behavior?: { popToTop?: boolean } } | undefined
30
+ >;
31
+
27
32
  function NativeStackNavigator({
28
33
  id,
29
34
  initialRouteName,
@@ -55,15 +60,7 @@ function NativeStackNavigator({
55
60
  UNSTABLE_router,
56
61
  });
57
62
 
58
- const meta = React.useContext(NavigationMetaContext);
59
-
60
63
  React.useEffect(() => {
61
- if (meta && 'type' in meta && meta.type === 'native-tabs') {
62
- // If we're inside native tabs, we don't need to handle popToTop
63
- // It's handled natively by native tabs
64
- return;
65
- }
66
-
67
64
  let handle: ReturnType<typeof requestAnimationFrame> | undefined;
68
65
 
69
66
  // @ts-expect-error: there may not be a tab navigator in parent
@@ -76,11 +73,15 @@ function NativeStackNavigator({
76
73
  // This is necessary to know if preventDefault() has been called
77
74
  handle = requestAnimationFrame(() => {
78
75
  const currentState = navigation.getState();
76
+ const event = e as TabPressEventArg;
79
77
 
80
78
  if (
81
79
  isFocused &&
80
+ event.data?.behavior?.popToTop !== false &&
81
+ // Native tabs handle popToTop natively.
82
+ event.data?.origin !== 'native' &&
82
83
  currentState.index > 0 &&
83
- !(e as EventArg<'tabPress', true>).defaultPrevented
84
+ !event.defaultPrevented
84
85
  ) {
85
86
  // When user taps on already focused tab and we're inside the tab,
86
87
  // reset the stack to replicate native behaviour
@@ -96,7 +97,7 @@ function NativeStackNavigator({
96
97
  cancelAnimationFrame(handle);
97
98
  unsubscribe?.();
98
99
  };
99
- }, [meta, navigation]);
100
+ }, [navigation]);
100
101
 
101
102
  return render(
102
103
  <NativeStackView