@react-navigation/native 7.3.7 → 7.3.9

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.
@@ -11,7 +11,7 @@ import { useLinkProps } from "./useLinkProps.js";
11
11
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
12
12
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
13
13
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
14
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
14
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
15
15
  * @param props.children Child elements to render the content.
16
16
  */
17
17
  export function Link({
@@ -20,12 +20,9 @@ export function Link({
20
20
  action,
21
21
  href,
22
22
  style,
23
+ target,
23
24
  ...rest
24
25
  }) {
25
- const {
26
- colors,
27
- fonts
28
- } = useTheme();
29
26
  // @ts-expect-error: This is already type-checked by the prop types
30
27
  const props = useLinkProps({
31
28
  screen,
@@ -33,7 +30,19 @@ export function Link({
33
30
  action,
34
31
  href
35
32
  });
33
+
34
+ // Keep usage of `useTheme` after `useLinkProps`
35
+ // This ensures proper error when used outside of navigation container
36
+ const {
37
+ colors,
38
+ fonts
39
+ } = useTheme();
36
40
  const onPress = e => {
41
+ if (rest.disabled) {
42
+ e.preventDefault();
43
+ e.stopPropagation();
44
+ return;
45
+ }
37
46
  if ('onPress' in rest) {
38
47
  rest.onPress?.(e);
39
48
  }
@@ -48,7 +57,15 @@ export function Link({
48
57
  ...rest,
49
58
  ...Platform.select({
50
59
  web: {
51
- onClick: onPress
60
+ 'aria-disabled': rest.disabled,
61
+ 'onAuxClick': rest.disabled ? e => {
62
+ e.preventDefault();
63
+ e.stopPropagation();
64
+ } : undefined,
65
+ 'onClick': onPress,
66
+ 'hrefAttrs': {
67
+ target
68
+ }
52
69
  },
53
70
  default: {
54
71
  onPress
@@ -1 +1 @@
1
- {"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","rest","colors","fonts","props","onPress","e","defaultPrevented","createElement","select","web","onClick","default","color","primary","regular"],"sourceRoot":"../../src","sources":["Link.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,wBAAwB;AACjD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAEEC,QAAQ,EACRC,IAAI,QAEC,cAAc;AAErB,SAAyBC,YAAY,QAAQ,mBAAgB;AAe7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAAkD;EACpEC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,KAAK;EACL,GAAGC;AACa,CAAC,EAAE;EACnB,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;EACpC;EACA,MAAMc,KAAK,GAAGV,YAAY,CAAY;IAAEE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,CAAC;EAEvE,MAAMM,OAAO,GACXC,CAA0E,IACvE;IACH,IAAI,SAAS,IAAIL,IAAI,EAAE;MACrBA,IAAI,CAACI,OAAO,GAAGC,CAAC,CAAC;IACnB;;IAEA;IACA,IAAI,CAACA,CAAC,CAACC,gBAAgB,EAAE;MACvBH,KAAK,CAACC,OAAO,CAACC,CAAC,CAAC;IAClB;EACF,CAAC;EAED,oBAAOf,KAAK,CAACiB,aAAa,CAACf,IAAI,EAAE;IAC/B,GAAGW,KAAK;IACR,GAAGH,IAAI;IACP,GAAGT,QAAQ,CAACiB,MAAM,CAAC;MACjBC,GAAG,EAAE;QAAEC,OAAO,EAAEN;MAAQ,CAAQ;MAChCO,OAAO,EAAE;QAAEP;MAAQ;IACrB,CAAC,CAAC;IACFL,KAAK,EAAE,CAAC;MAAEa,KAAK,EAAEX,MAAM,CAACY;IAAQ,CAAC,EAAEX,KAAK,CAACY,OAAO,EAAEf,KAAK;EACzD,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["useTheme","React","Platform","Text","useLinkProps","Link","screen","params","action","href","style","target","rest","props","colors","fonts","onPress","e","disabled","preventDefault","stopPropagation","defaultPrevented","createElement","select","web","undefined","default","color","primary","regular"],"sourceRoot":"../../src","sources":["Link.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,wBAAwB;AACjD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SAEEC,QAAQ,EACRC,IAAI,QAEC,cAAc;AAErB,SAAyBC,YAAY,QAAQ,mBAAgB;AAe7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAAkD;EACpEC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,IAAI;EACJC,KAAK;EACLC,MAAM;EACN,GAAGC;AACa,CAAC,EAAE;EACnB;EACA,MAAMC,KAAK,GAAGT,YAAY,CAAY;IAAEE,MAAM;IAAEC,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,CAAC;;EAEvE;EACA;EACA,MAAM;IAAEK,MAAM;IAAEC;EAAM,CAAC,GAAGf,QAAQ,CAAC,CAAC;EAEpC,MAAMgB,OAAO,GAAIC,CAAa,IAAK;IACjC,IAAIL,IAAI,CAACM,QAAQ,EAAE;MACjBD,CAAC,CAACE,cAAc,CAAC,CAAC;MAClBF,CAAC,CAACG,eAAe,CAAC,CAAC;MACnB;IACF;IAEA,IAAI,SAAS,IAAIR,IAAI,EAAE;MACrBA,IAAI,CAACI,OAAO,GAAGC,CAAC,CAAC;IACnB;;IAEA;IACA,IAAI,CAACA,CAAC,CAACI,gBAAgB,EAAE;MACvBR,KAAK,CAACG,OAAO,CAACC,CAAC,CAAC;IAClB;EACF,CAAC;EAED,oBAAOhB,KAAK,CAACqB,aAAa,CAACnB,IAAI,EAAE;IAC/B,GAAGU,KAAK;IACR,GAAGD,IAAI;IACP,GAAGV,QAAQ,CAACqB,MAAM,CAAC;MACjBC,GAAG,EAAE;QACH,eAAe,EAAEZ,IAAI,CAACM,QAAQ;QAC9B,YAAY,EAAEN,IAAI,CAACM,QAAQ,GACtBD,CAAkD,IAAK;UACtDA,CAAC,CAACE,cAAc,CAAC,CAAC;UAClBF,CAAC,CAACG,eAAe,CAAC,CAAC;QACrB,CAAC,GACDK,SAAS;QACb,SAAS,EAAET,OAAO;QAClB,WAAW,EAAE;UAAEL;QAAO;MACxB,CAAC;MACDe,OAAO,EAAE;QAAEV;MAAQ;IACrB,CAAC,CAAC;IACFN,KAAK,EAAE,CAAC;MAAEiB,KAAK,EAAEb,MAAM,CAACc;IAAQ,CAAC,EAAEb,KAAK,CAACc,OAAO,EAAEnB,KAAK;EACzD,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import { nanoid } from 'nanoid/non-secure';
4
- const getPathWithoutHash = path => path.split('#')[0];
4
+ const getPathWithoutHash = path => path.split('#')[0] ?? '';
5
5
  export function createMemoryHistory() {
6
6
  let index = 0;
7
7
  let items = [];
@@ -40,6 +40,9 @@ export function createMemoryHistory() {
40
40
  // We need to find the index from the element before current to get closest path to go back to
41
41
  for (let i = index - 1; i >= 0; i--) {
42
42
  const item = items[i];
43
+ if (item == null) {
44
+ continue;
45
+ }
43
46
  if (item.path === pathWithoutHash) {
44
47
  return i;
45
48
  }
@@ -100,7 +103,8 @@ export function createMemoryHistory() {
100
103
  }];
101
104
  index = 0;
102
105
  } else {
103
- if (items[index].path === pathWithoutHash) {
106
+ const item = items[index];
107
+ if (item?.path === pathWithoutHash) {
104
108
  pathWithHash = pathWithHash + hash;
105
109
  }
106
110
  items[index] = {
@@ -139,6 +143,7 @@ export function createMemoryHistory() {
139
143
  if (n === 0) {
140
144
  return;
141
145
  }
146
+ const targetId = items[index]?.id;
142
147
 
143
148
  // When we call `history.go`, `popstate` will fire when there's history to go back to
144
149
  // So we need to somehow handle following cases:
@@ -148,7 +153,12 @@ export function createMemoryHistory() {
148
153
  return new Promise((resolve, reject) => {
149
154
  const done = interrupted => {
150
155
  clearTimeout(timer);
151
- if (interrupted) {
156
+
157
+ // The current entry may not be the one we intended to land on:
158
+ // - The traversal didn't happen yet, e.g. it took longer than the timeout
159
+ // - The user navigated in the browser while our traversal was in-flight
160
+ // So we treat it the same as the operation being interrupted
161
+ if (interrupted || window.history.state?.id !== targetId) {
152
162
  reject(new Error('History was changed during navigation.'));
153
163
  return;
154
164
  }
@@ -179,9 +189,10 @@ export function createMemoryHistory() {
179
189
  // But on Firefox, it seems to take much longer, around 50ms from our testing
180
190
  // We're using a hacky timeout since there doesn't seem to be way to know for sure
181
191
  const timer = setTimeout(() => {
192
+ window.removeEventListener('popstate', onPopState);
182
193
  const foundIndex = pending.findIndex(it => it.ref === done);
183
194
  if (foundIndex > -1) {
184
- pending[foundIndex].cb();
195
+ pending[foundIndex]?.cb();
185
196
  pending.splice(foundIndex, 1);
186
197
  }
187
198
  index = this.index;
@@ -1 +1 @@
1
- {"version":3,"names":["nanoid","getPathWithoutHash","path","split","createMemoryHistory","index","items","pending","interrupt","forEach","it","cb","history","id","window","state","findIndex","item","get","backIndex","pathWithoutHash","i","push","slice","length","pushState","replace","pathWithHash","hash","includes","location","replaceState","go","n","nextIndex","lastItemIndex","Promise","resolve","reject","done","interrupted","clearTimeout","timer","Error","title","document","ref","setTimeout","foundIndex","splice","onPopState","last","pop","removeEventListener","addEventListener","listen","listener"],"sourceRoot":"../../src","sources":["createMemoryHistory.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["nanoid","getPathWithoutHash","path","split","createMemoryHistory","index","items","pending","interrupt","forEach","it","cb","history","id","window","state","findIndex","item","get","backIndex","pathWithoutHash","i","push","slice","length","pushState","replace","pathWithHash","hash","includes","location","replaceState","go","n","nextIndex","lastItemIndex","targetId","Promise","resolve","reject","done","interrupted","clearTimeout","timer","Error","title","document","ref","setTimeout","removeEventListener","onPopState","foundIndex","splice","last","pop","addEventListener","listen","listener"],"sourceRoot":"../../src","sources":["createMemoryHistory.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ import isEqual from 'fast-deep-equal';
4
+ import * as React from 'react';
5
+ export function useDeepStableValue(value) {
6
+ const valueRef = React.useRef(value);
7
+ if (!isEqual(valueRef.current, value)) {
8
+ valueRef.current = value;
9
+ }
10
+ return valueRef.current;
11
+ }
12
+ //# sourceMappingURL=useDeepStableValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isEqual","React","useDeepStableValue","value","valueRef","useRef","current"],"sourceRoot":"../../src","sources":["useDeepStableValue.tsx"],"mappings":";;AAAA,OAAOA,OAAO,MAAM,iBAAiB;AACrC,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,OAAO,SAASC,kBAAkBA,CAAIC,KAAQ,EAAK;EACjD,MAAMC,QAAQ,GAAGH,KAAK,CAACI,MAAM,CAACF,KAAK,CAAC;EAEpC,IAAI,CAACH,OAAO,CAACI,QAAQ,CAACE,OAAO,EAAEH,KAAK,CAAC,EAAE;IACrCC,QAAQ,CAACE,OAAO,GAAGH,KAAK;EAC1B;EAEA,OAAOC,QAAQ,CAACE,OAAO;AACzB","ignoreList":[]}
@@ -1,24 +1,69 @@
1
1
  "use strict";
2
2
 
3
- import { getPathFromState, NavigationContainerRefContext, NavigationHelpersContext } from '@react-navigation/core';
3
+ import { CommonActions, getPathFromState, NavigationContainerRefContext, NavigationHelpersContext } from '@react-navigation/core';
4
4
  import * as React from 'react';
5
5
  import { Platform } from 'react-native';
6
+ import useLatestCallback from 'use-latest-callback';
6
7
  import { LinkingContext } from "./LinkingContext.js";
7
- const getStateFromParams = params => {
8
- if (params?.state) {
9
- return params.state;
8
+ import { useDeepStableValue } from "./useDeepStableValue.js";
9
+ const NESTED_KEYS = ['payload', 'params', 'state', 'routes'];
10
+ const NESTED_PARAMS_KEYS = ['params', 'state'];
11
+ const NAVIGATE_ACTION_TYPES = ['NAVIGATE', 'PUSH', 'REPLACE', 'POP_TO', 'JUMP_TO'];
12
+
13
+ /**
14
+ * Nested params are tracked as consumed after handling
15
+ * So navigating with same params again won't work
16
+ * This can happen if the action or params are memoized
17
+ * Or component hasn't re-renderd to re-create inline objects
18
+ * So we clone the action and params when necessary before dispatch
19
+ */
20
+
21
+ function clone(value, keys = NESTED_KEYS, clones) {
22
+ if (typeof value !== 'object' || value == null) {
23
+ return value;
10
24
  }
11
- if (params?.screen) {
12
- return {
13
- routes: [{
14
- name: params.screen,
15
- params: params.params,
16
- // @ts-expect-error this is fine 🔥
17
- state: params.screen ? getStateFromParams(params.params) : undefined
18
- }]
19
- };
25
+ const existing = clones?.get(value);
26
+ if (existing) {
27
+ return existing;
28
+ }
29
+ const isArray = Array.isArray(value);
30
+ if (keys === NESTED_PARAMS_KEYS && 'screen' in value && typeof value.screen !== 'string' && !('state' in value && typeof value.state === 'object' && value.state != null && 'routes' in value.state && Array.isArray(value.state.routes))) {
31
+ return value;
32
+ }
33
+ let copy = keys === NESTED_PARAMS_KEYS ? {
34
+ ...value
35
+ } : undefined;
36
+ clones ??= new WeakMap();
37
+ clones.set(value, copy ?? value);
38
+ for (const key of isArray ? value.keys() : keys) {
39
+ const nested = Reflect.get(value, key);
40
+ const cloned = clone(nested, key === 'params' ? NESTED_PARAMS_KEYS : NESTED_KEYS, clones);
41
+ if (cloned !== nested) {
42
+ copy ??= isArray ? [...value] : {
43
+ ...value
44
+ };
45
+ clones.set(value, copy);
46
+ Object.assign(copy, {
47
+ [key]: cloned
48
+ });
49
+ }
50
+ }
51
+ return copy ?? value;
52
+ }
53
+ const getTargetFromAction = (action, screens) => {
54
+ if (action === undefined || screens === undefined) {
55
+ return undefined;
56
+ }
57
+ const {
58
+ payload
59
+ } = action;
60
+ if (!NAVIGATE_ACTION_TYPES.includes(action.type) || payload === undefined || !('name' in payload) || typeof payload.name !== 'string' || !(payload.name in screens)) {
61
+ return undefined;
20
62
  }
21
- return undefined;
63
+ return {
64
+ screen: payload.name,
65
+ params: 'params' in payload && typeof payload.params === 'object' && payload.params != null ? payload.params : undefined
66
+ };
22
67
  };
23
68
 
24
69
  /**
@@ -27,65 +72,63 @@ const getStateFromParams = params => {
27
72
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
28
73
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
29
74
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
30
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
75
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
31
76
  */
32
77
  export function useLinkProps({
33
78
  screen,
34
79
  params,
35
- href,
36
- action
80
+ action,
81
+ ...rest
37
82
  }) {
38
83
  const root = React.useContext(NavigationContainerRefContext);
39
- const navigation = React.useContext(NavigationHelpersContext);
84
+ const navigation = React.useContext(NavigationHelpersContext) ?? root;
85
+ if (navigation == null) {
86
+ throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
87
+ }
40
88
  const {
41
89
  options
42
90
  } = React.useContext(LinkingContext);
43
- const onPress = e => {
44
- let shouldHandle = false;
45
- if (Platform.OS !== 'web' || !e) {
46
- e?.preventDefault?.();
47
- shouldHandle = true;
48
- } else {
49
- // ignore clicks with modifier keys
91
+ const onPress = useLatestCallback(e => {
92
+ if (Platform.OS === 'web' && e) {
50
93
  const hasModifierKey = 'metaKey' in e && e.metaKey || 'altKey' in e && e.altKey || 'ctrlKey' in e && e.ctrlKey || 'shiftKey' in e && e.shiftKey;
51
-
52
- // only handle left clicks
53
94
  const isLeftClick = 'button' in e ? e.button == null || e.button === 0 : true;
54
-
55
- // let browser handle "target=_blank" etc.
56
- const isSelfTarget = e.currentTarget && 'target' in e.currentTarget ? [undefined, null, '', 'self'].includes(e.currentTarget.target) : true;
57
- if (!hasModifierKey && isLeftClick && isSelfTarget) {
58
- e.preventDefault?.();
59
- shouldHandle = true;
95
+ const isSelfTarget = e.currentTarget && 'target' in e.currentTarget ? [undefined, null, '', '_self'].includes(e.currentTarget.target) : true;
96
+ if (hasModifierKey || !isLeftClick || !isSelfTarget) {
97
+ return;
60
98
  }
61
99
  }
62
- if (shouldHandle) {
63
- if (action) {
64
- if (navigation) {
65
- navigation.dispatch(action);
66
- } else if (root) {
67
- root.dispatch(action);
68
- } else {
69
- throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");
70
- }
71
- } else {
72
- // @ts-expect-error This is already type-checked by the prop types
73
- navigation?.navigate(screen, params);
100
+ e?.preventDefault();
101
+ let cloned;
102
+ if (action != null) {
103
+ cloned = clone(action);
104
+ } else {
105
+ if (screen == null) {
106
+ throw new Error("Couldn't find a screen to navigate to. Make sure to provide a screen name.");
74
107
  }
108
+ cloned = clone(
109
+ // @ts-expect-error This is already type-checked by the prop types
110
+ CommonActions.navigate(screen, params));
75
111
  }
76
- };
77
- const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
78
- return {
79
- href: href ?? (Platform.OS === 'web' && screen != null ? getPathFromStateHelper({
112
+ navigation.dispatch(cloned);
113
+ });
114
+ const target = useDeepStableValue(Platform.OS === 'web' ? typeof screen === 'string' ? {
115
+ screen,
116
+ params: typeof params === 'object' && params != null ? params : undefined
117
+ } : getTargetFromAction(action, options?.config?.screens) : undefined);
118
+ const href = React.useMemo(() => {
119
+ if (Platform.OS !== 'web' || rest.href != null || target == null) {
120
+ return rest.href;
121
+ }
122
+ const getPath = options?.getPathFromState ?? getPathFromState;
123
+ return getPath({
80
124
  routes: [{
81
- // @ts-expect-error this is fine 🔥
82
- name: screen,
83
- // @ts-expect-error this is fine 🔥
84
- params: params,
85
- // @ts-expect-error this is fine 🔥
86
- state: getStateFromParams(params)
125
+ name: target.screen,
126
+ params: target.params
87
127
  }]
88
- }, options?.config) : undefined),
128
+ }, options?.config);
129
+ }, [rest.href, target, options?.getPathFromState, options?.config]);
130
+ return {
131
+ href,
89
132
  role: 'link',
90
133
  onPress
91
134
  };
@@ -1 +1 @@
1
- {"version":3,"names":["getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","LinkingContext","getStateFromParams","params","state","screen","routes","name","undefined","useLinkProps","href","action","root","useContext","navigation","options","onPress","e","shouldHandle","OS","preventDefault","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","includes","target","dispatch","Error","navigate","getPathFromStateHelper","config","role"],"sourceRoot":"../../src","sources":["useLinkProps.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CommonActions","getPathFromState","NavigationContainerRefContext","NavigationHelpersContext","React","Platform","useLatestCallback","LinkingContext","useDeepStableValue","NESTED_KEYS","NESTED_PARAMS_KEYS","NAVIGATE_ACTION_TYPES","clone","value","keys","clones","existing","get","isArray","Array","screen","state","routes","copy","undefined","WeakMap","set","key","nested","Reflect","cloned","Object","assign","getTargetFromAction","action","screens","payload","includes","type","name","params","useLinkProps","rest","root","useContext","navigation","Error","options","onPress","e","OS","hasModifierKey","metaKey","altKey","ctrlKey","shiftKey","isLeftClick","button","isSelfTarget","currentTarget","target","preventDefault","navigate","dispatch","config","href","useMemo","getPath","role"],"sourceRoot":"../../src","sources":["useLinkProps.tsx"],"mappings":"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","ignoreList":[]}
@@ -51,6 +51,11 @@ const findMatchingState = (a, b) => {
51
51
  * Check if the state change is popping the last route or history entry.
52
52
  */
53
53
  const isPoppingLastEntry = (current, record) => {
54
+ const currentRoute = current.routes[current.index];
55
+ const recordRoute = record.routes[record.index];
56
+ if (currentRoute == null || recordRoute == null) {
57
+ return false;
58
+ }
54
59
  if (current.history && record.history) {
55
60
  return current.history.length === record.history.length + 1;
56
61
  }
@@ -352,8 +357,6 @@ export function useLinking(ref, {
352
357
  }
353
358
 
354
359
  // Skip if the state hasn't changed since we last synced it
355
- // This avoids redundant work when the committed `state` event fires
356
- // after we already synced from `__unsafe_action__`
357
360
  if (previousState === state) {
358
361
  return;
359
362
  }
@@ -1 +1 @@
1
- {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoutes","recordRoutes","every","route","i","currentRoute","series","cb","queue","Promise","resolve","callback","then","catch","e","console","error","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","thenable","onfulfilled","previousIndexRef","previousStateRef","pendingPopStateDeltaRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","pendingDelta","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","pending","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPopStateDelta","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CommonActions","findFocusedRoute","getActionFromState","getActionFromStateDefault","getPathFromState","getPathFromStateDefault","getStateFromPath","getStateFromPathDefault","useNavigationIndependentTree","isEqual","React","createMemoryHistory","ServerContext","getRoutesUntilIndex","state","routes","slice","index","getHistoryLength","history","length","findMatchingState","a","b","undefined","key","aHistoryLength","bHistoryLength","aRoute","bRoute","aChildState","bChildState","isPoppingLastEntry","current","record","currentRoute","recordRoute","currentRoutes","recordRoutes","every","route","i","series","cb","queue","Promise","resolve","callback","then","catch","e","console","error","linkingHandlers","useLinking","ref","enabled","config","independent","useEffect","process","env","NODE_ENV","join","trim","handler","Symbol","push","indexOf","splice","useState","enabledRef","useRef","configRef","getStateFromPathRef","getPathFromStateRef","getActionFromStateRef","validateRoutesNotExistInRootState","useCallback","navigation","rootState","getRootState","some","r","routeNames","includes","name","server","useContext","getInitialState","value","location","window","path","pathname","search","thenable","onfulfilled","previousIndexRef","previousStateRef","pendingPopStateDeltaRef","listen","previousIndex","rollbackHistory","delta","go","rollbackHistoryIfPrevented","pendingDelta","removePrevented","actionChangedState","unsubscribeEvent","addListener","data","type","defaultPrevented","unsubscribeAction","noop","dispatch","action","resetRoot","get","currentState","currentFocused","recordFocused","pending","goBack","warn","message","getPathForRoute","stateForPath","focusedRoute","params","previousRoute","hash","replace","onStateChange","previousState","pendingPopStateDelta","previousFocusedState","focusedState","historyDelta","nextIndex","backIndex","currentIndex"],"sourceRoot":"../../src","sources":["useLinking.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { type GestureResponderEvent, Text, type TextProps } from 'react-native';
3
3
  import { type LinkProps } from './useLinkProps.js';
4
+ type PressEvent = React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent;
4
5
  type Props<ParamList extends ReactNavigation.RootParamList> = LinkProps<ParamList> & Omit<TextProps, 'disabled'> & {
5
6
  target?: string;
6
- onPress?: (e: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent) => void;
7
- disabled?: boolean | null;
7
+ onPress?: (e: PressEvent) => void;
8
+ disabled?: boolean | undefined;
8
9
  children: React.ReactNode;
9
10
  };
10
11
  /**
@@ -14,9 +15,9 @@ type Props<ParamList extends ReactNavigation.RootParamList> = LinkProps<ParamLis
14
15
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
15
16
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
16
17
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
17
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
18
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
18
19
  * @param props.children Child elements to render the content.
19
20
  */
20
- export declare function Link<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, href, style, ...rest }: Props<ParamList>): React.CElement<TextProps, Text>;
21
+ export declare function Link<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, href, style, target, ...rest }: Props<ParamList>): React.CElement<TextProps, Text>;
21
22
  export {};
22
23
  //# sourceMappingURL=Link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAE1B,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,mBAAgB,CAAC;AAE9D,KAAK,KAAK,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,IACxD,SAAS,CAAC,SAAS,CAAC,GAClB,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CACR,CAAC,EACG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAC/C,qBAAqB,KACtB,IAAI,CAAC;IACV,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEN;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EACpE,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,GAAG,IAAI,EACR,EAAE,KAAK,CAAC,SAAS,CAAC,mCA2BlB"}
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/Link.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAE1B,IAAI,EACJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,mBAAgB,CAAC;AAE9D,KAAK,UAAU,GACX,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAC/C,qBAAqB,CAAC;AAE1B,KAAK,KAAK,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,IACxD,SAAS,CAAC,SAAS,CAAC,GAClB,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEN;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EACpE,MAAM,EACN,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,IAAI,EACR,EAAE,KAAK,CAAC,SAAS,CAAC,mCA4ClB"}
@@ -1,5 +1,5 @@
1
1
  import { type DefaultNavigatorOptions, type NavigationListBase, type ParamListBase, type StackNavigationState, type TypedNavigator } from '@react-navigation/core';
2
- declare const StackNavigator: (props: DefaultNavigatorOptions<ParamListBase, string | undefined, StackNavigationState<ParamListBase>, {}, {}, unknown>) => import("react/jsx-runtime").JSX.Element;
2
+ declare const StackNavigator: (props: DefaultNavigatorOptions<ParamListBase, string | undefined, StackNavigationState<ParamListBase>, {}, {}, unknown>) => import("react").JSX.Element;
3
3
  export declare function createStackNavigator<ParamList extends ParamListBase>(): TypedNavigator<{
4
4
  ParamList: ParamList;
5
5
  NavigatorID: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"createStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/__stubs__/createStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,cAAc,GAClB,OAAO,uBAAuB,CAC5B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,EAAE,EACF,EAAE,EACF,OAAO,CACR,4CAYF,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,aAAa,KAC5B,cAAc,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,EAAE,CAAC;IAClB,QAAQ,EAAE,EAAE,CAAC;IACb,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,EAAE,OAAO,cAAc,CAAC;CAClC,CAAC,CAED"}
1
+ {"version":3,"file":"createStackNavigator.d.ts","sourceRoot":"","sources":["../../../../src/__stubs__/createStackNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAEhC,QAAA,MAAM,cAAc,GAClB,OAAO,uBAAuB,CAC5B,aAAa,EACb,MAAM,GAAG,SAAS,EAClB,oBAAoB,CAAC,aAAa,CAAC,EACnC,EAAE,EACF,EAAE,EACF,OAAO,CACR,gCAYF,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,aAAa,KAC5B,cAAc,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,EAAE,EAAE,CAAC;IAClB,QAAQ,EAAE,EAAE,CAAC;IACb,cAAc,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9C,SAAS,EAAE,OAAO,cAAc,CAAC;CAClC,CAAC,CAED"}
@@ -1 +1 @@
1
- {"version":3,"file":"createMemoryHistory.d.ts","sourceRoot":"","sources":["../../../src/createMemoryHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,KAAK,aAAa,GAAG;IAEnB,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,eAAe,CAAC;IAEvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,wBAAgB,mBAAmB;oBAmBlB,MAAM;eAcR,MAAM;wBAIG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;0BAed;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;6BAoBrC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;UAqC3D,MAAM;qBA0FK,MAAM,IAAI;EAqB9B"}
1
+ {"version":3,"file":"createMemoryHistory.d.ts","sourceRoot":"","sources":["../../../src/createMemoryHistory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,KAAK,aAAa,GAAG;IAEnB,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,eAAe,CAAC;IAEvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAIF,wBAAgB,mBAAmB;oBAmBlB,MAAM;eAcR,MAAM;wBAIG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;0BAmBd;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;6BAoBrC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE;UAwC3D,MAAM;qBAkGK,MAAM,IAAI;EAqB9B"}
@@ -0,0 +1,2 @@
1
+ export declare function useDeepStableValue<T>(value: T): T;
2
+ //# sourceMappingURL=useDeepStableValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDeepStableValue.d.ts","sourceRoot":"","sources":["../../../src/useDeepStableValue.tsx"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQjD"}
@@ -22,10 +22,19 @@ export type LinkProps<ParamList extends ReactNavigation.RootParamList, RouteName
22
22
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
23
23
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
24
24
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
25
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
25
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
26
26
  */
27
- export declare function useLinkProps<ParamList extends ReactNavigation.RootParamList>({ screen, params, href, action, }: LinkProps<ParamList>): {
28
- href: string | undefined;
27
+ export declare function useLinkProps<ParamList extends ReactNavigation.RootParamList>({ screen, params, action, ...rest }: LinkProps<ParamList>): {
28
+ href: string | ({
29
+ href?: string;
30
+ action?: NavigationAction;
31
+ } & (keyof ParamList extends infer T ? T extends keyof ParamList ? T extends unknown ? undefined extends ParamList[T] ? {
32
+ screen: T;
33
+ params?: ParamList[T] | undefined;
34
+ } : {
35
+ screen: T;
36
+ params: ParamList[T];
37
+ } : never : never : never))["href"] | undefined;
29
38
  role: "link";
30
39
  onPress: (e?: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent) => void;
31
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useLinkProps.d.ts","sourceRoot":"","sources":["../../../src/useLinkProps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,gBAAgB,EAKtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,qBAAqB,EAAY,MAAM,cAAc,CAAC;AAIpE,MAAM,MAAM,SAAS,CACnB,SAAS,SAAS,eAAe,CAAC,aAAa,EAC/C,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,IAEjD,CAAC;IACC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,CAAC,SAAS,SAAS,OAAO,GAC1B,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACrD,KAAK,CAAC,CAAC,GACX;IACE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AA+BN;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EAC5E,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,GACP,EAAE,SAAS,CAAC,SAAS,CAAC;;;kBAMf,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,qBAAqB;EA0E9E"}
1
+ {"version":3,"file":"useLinkProps.d.ts","sourceRoot":"","sources":["../../../src/useLinkProps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAGtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,qBAAqB,EAAY,MAAM,cAAc,CAAC;AAMpE,MAAM,MAAM,SAAS,CACnB,SAAS,SAAS,eAAe,CAAC,aAAa,EAC/C,SAAS,SAAS,MAAM,SAAS,GAAG,MAAM,SAAS,IAEjD,CAAC;IACC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,GAAG,CAAC,SAAS,SAAS,OAAO,GAC1B,SAAS,SAAS,SAAS,CAAC,SAAS,CAAC,GACpC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAA;CAAE,GACrD,KAAK,CAAC,CAAC,GACX;IACE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAkHN;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAS,eAAe,CAAC,aAAa,EAAE,EAC5E,MAAM,EACN,MAAM,EACN,MAAM,EACN,GAAG,IAAI,EACR,EAAE,SAAS,CAAC,SAAS,CAAC;;eA3IV,MAAM;iBACJ,gBAAgB;;;;;;;;;kBAyJrB,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAC/C,qBAAqB;EAkF9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAqF9D;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,eAS7C,CAAC;AAIF,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE7C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAClE,EACE,OAAc,EACd,MAAM,EACN,gBAA0C,EAC1C,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO;2BAsGW,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;EAsY1D"}
1
+ {"version":3,"file":"useLinking.d.ts","sourceRoot":"","sources":["../../../src/useLinking.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,gBAAgB,IAAI,uBAAuB,EAC3C,KAAK,sBAAsB,EAE3B,KAAK,aAAa,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAS,CAAC;AAE9C,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AA4F9D;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,eAW7C,CAAC;AAIF,KAAK,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE7C,wBAAgB,UAAU,CACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAClE,EACE,OAAc,EACd,MAAM,EACN,gBAA0C,EAC1C,gBAA0C,EAC1C,kBAA8C,GAC/C,EAAE,OAAO;2BAsGW,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;EAoY1D"}
@@ -11,7 +11,7 @@ export declare function useLinking(ref: React.RefObject<NavigationContainerRef<P
11
11
  routes: import("@react-navigation/routers").NavigationRoute<ParamListBase, string>[];
12
12
  type: string;
13
13
  stale: false;
14
- }>, "stale" | "routes">> & Readonly<{
14
+ }>, "routes" | "stale">> & Readonly<{
15
15
  stale?: true;
16
16
  routes: import("@react-navigation/routers").PartialRoute<import("@react-navigation/routers").Route<string, object | undefined>>[];
17
17
  }> & {
@@ -23,7 +23,7 @@ export declare function useLinking(ref: React.RefObject<NavigationContainerRef<P
23
23
  routes: import("@react-navigation/routers").NavigationRoute<ParamListBase, string>[];
24
24
  type: string;
25
25
  stale: false;
26
- }>, "stale" | "routes">> & Readonly<{
26
+ }>, "routes" | "stale">> & Readonly<{
27
27
  stale?: true;
28
28
  routes: import("@react-navigation/routers").PartialRoute<import("@react-navigation/routers").Route<string, object | undefined>>[];
29
29
  }> & /*elided*/ any;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-navigation/native",
3
3
  "description": "React Native integration for React Navigation",
4
- "version": "7.3.7",
4
+ "version": "7.3.9",
5
5
  "keywords": [
6
6
  "react-native",
7
7
  "react-navigation",
@@ -42,25 +42,25 @@
42
42
  "clean": "del lib"
43
43
  },
44
44
  "dependencies": {
45
- "@react-navigation/core": "^7.21.5",
45
+ "@react-navigation/core": "^7.21.6",
46
46
  "escape-string-regexp": "^4.0.0",
47
47
  "fast-deep-equal": "^3.1.3",
48
48
  "nanoid": "^3.3.11",
49
- "standard-navigation": "^0.0.7",
49
+ "standard-navigation": "^0.0.8",
50
50
  "use-latest-callback": "^0.2.4"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@jest/globals": "^30.0.0",
54
54
  "@testing-library/react-native": "^13.2.1",
55
- "@types/react": "~19.0.10",
56
- "@types/react-dom": "~19.1.7",
55
+ "@types/react": "~19.2.4",
56
+ "@types/react-dom": "~19.2.3",
57
57
  "del-cli": "^6.0.0",
58
- "react": "19.1.0",
59
- "react-dom": "19.1.0",
60
- "react-native": "0.81.5",
58
+ "react": "19.2.3",
59
+ "react-dom": "19.2.3",
60
+ "react-native": "0.85.3",
61
61
  "react-native-builder-bob": "^0.42.1",
62
- "react-test-renderer": "19.1.0",
63
- "typescript": "^5.9.2"
62
+ "react-test-renderer": "19.2.3",
63
+ "typescript": "~6.0.3"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "react": ">= 18.2.0",
@@ -84,5 +84,5 @@
84
84
  ]
85
85
  ]
86
86
  },
87
- "gitHead": "8a863290c256c426a03b0298d8b1568420d7a400"
87
+ "gitHead": "d9dafe23ab092e3e76fab1e35dbb1973f45107ca"
88
88
  }
package/src/Link.tsx CHANGED
@@ -9,16 +9,16 @@ import {
9
9
 
10
10
  import { type LinkProps, useLinkProps } from './useLinkProps';
11
11
 
12
+ type PressEvent =
13
+ | React.MouseEvent<HTMLAnchorElement, MouseEvent>
14
+ | GestureResponderEvent;
15
+
12
16
  type Props<ParamList extends ReactNavigation.RootParamList> =
13
17
  LinkProps<ParamList> &
14
18
  Omit<TextProps, 'disabled'> & {
15
19
  target?: string;
16
- onPress?: (
17
- e:
18
- | React.MouseEvent<HTMLAnchorElement, MouseEvent>
19
- | GestureResponderEvent
20
- ) => void;
21
- disabled?: boolean | null;
20
+ onPress?: (e: PressEvent) => void;
21
+ disabled?: boolean | undefined;
22
22
  children: React.ReactNode;
23
23
  };
24
24
 
@@ -29,7 +29,7 @@ type Props<ParamList extends ReactNavigation.RootParamList> =
29
29
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
30
30
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
31
31
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
32
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
32
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
33
33
  * @param props.children Child elements to render the content.
34
34
  */
35
35
  export function Link<ParamList extends ReactNavigation.RootParamList>({
@@ -38,15 +38,23 @@ export function Link<ParamList extends ReactNavigation.RootParamList>({
38
38
  action,
39
39
  href,
40
40
  style,
41
+ target,
41
42
  ...rest
42
43
  }: Props<ParamList>) {
43
- const { colors, fonts } = useTheme();
44
44
  // @ts-expect-error: This is already type-checked by the prop types
45
45
  const props = useLinkProps<ParamList>({ screen, params, action, href });
46
46
 
47
- const onPress = (
48
- e: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent
49
- ) => {
47
+ // Keep usage of `useTheme` after `useLinkProps`
48
+ // This ensures proper error when used outside of navigation container
49
+ const { colors, fonts } = useTheme();
50
+
51
+ const onPress = (e: PressEvent) => {
52
+ if (rest.disabled) {
53
+ e.preventDefault();
54
+ e.stopPropagation();
55
+ return;
56
+ }
57
+
50
58
  if ('onPress' in rest) {
51
59
  rest.onPress?.(e);
52
60
  }
@@ -61,7 +69,17 @@ export function Link<ParamList extends ReactNavigation.RootParamList>({
61
69
  ...props,
62
70
  ...rest,
63
71
  ...Platform.select({
64
- web: { onClick: onPress } as any,
72
+ web: {
73
+ 'aria-disabled': rest.disabled,
74
+ 'onAuxClick': rest.disabled
75
+ ? (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {
76
+ e.preventDefault();
77
+ e.stopPropagation();
78
+ }
79
+ : undefined,
80
+ 'onClick': onPress,
81
+ 'hrefAttrs': { target },
82
+ },
65
83
  default: { onPress },
66
84
  }),
67
85
  style: [{ color: colors.primary }, fonts.regular, style],
@@ -10,7 +10,7 @@ type HistoryRecord = {
10
10
  path: string;
11
11
  };
12
12
 
13
- const getPathWithoutHash = (path: string) => path.split('#')[0];
13
+ const getPathWithoutHash = (path: string) => path.split('#')[0] ?? '';
14
14
 
15
15
  export function createMemoryHistory() {
16
16
  let index = 0;
@@ -56,6 +56,10 @@ export function createMemoryHistory() {
56
56
  for (let i = index - 1; i >= 0; i--) {
57
57
  const item = items[i];
58
58
 
59
+ if (item == null) {
60
+ continue;
61
+ }
62
+
59
63
  if (item.path === pathWithoutHash) {
60
64
  return i;
61
65
  }
@@ -107,9 +111,12 @@ export function createMemoryHistory() {
107
111
  items = [{ path: pathWithoutHash, state, id }];
108
112
  index = 0;
109
113
  } else {
110
- if (items[index].path === pathWithoutHash) {
114
+ const item = items[index];
115
+
116
+ if (item?.path === pathWithoutHash) {
111
117
  pathWithHash = pathWithHash + hash;
112
118
  }
119
+
113
120
  items[index] = { path: pathWithoutHash, state, id };
114
121
  }
115
122
 
@@ -144,6 +151,8 @@ export function createMemoryHistory() {
144
151
  return;
145
152
  }
146
153
 
154
+ const targetId = items[index]?.id;
155
+
147
156
  // When we call `history.go`, `popstate` will fire when there's history to go back to
148
157
  // So we need to somehow handle following cases:
149
158
  // - There's history to go back, `history.go` is called, and `popstate` fires
@@ -153,7 +162,11 @@ export function createMemoryHistory() {
153
162
  const done = (interrupted?: boolean) => {
154
163
  clearTimeout(timer);
155
164
 
156
- if (interrupted) {
165
+ // The current entry may not be the one we intended to land on:
166
+ // - The traversal didn't happen yet, e.g. it took longer than the timeout
167
+ // - The user navigated in the browser while our traversal was in-flight
168
+ // So we treat it the same as the operation being interrupted
169
+ if (interrupted || window.history.state?.id !== targetId) {
157
170
  reject(new Error('History was changed during navigation.'));
158
171
  return;
159
172
  }
@@ -182,10 +195,12 @@ export function createMemoryHistory() {
182
195
  // But on Firefox, it seems to take much longer, around 50ms from our testing
183
196
  // We're using a hacky timeout since there doesn't seem to be way to know for sure
184
197
  const timer = setTimeout(() => {
198
+ window.removeEventListener('popstate', onPopState);
199
+
185
200
  const foundIndex = pending.findIndex((it) => it.ref === done);
186
201
 
187
202
  if (foundIndex > -1) {
188
- pending[foundIndex].cb();
203
+ pending[foundIndex]?.cb();
189
204
  pending.splice(foundIndex, 1);
190
205
  }
191
206
 
@@ -0,0 +1,12 @@
1
+ import isEqual from 'fast-deep-equal';
2
+ import * as React from 'react';
3
+
4
+ export function useDeepStableValue<T>(value: T): T {
5
+ const valueRef = React.useRef(value);
6
+
7
+ if (!isEqual(valueRef.current, value)) {
8
+ valueRef.current = value;
9
+ }
10
+
11
+ return valueRef.current;
12
+ }
@@ -1,16 +1,16 @@
1
1
  import {
2
+ CommonActions,
2
3
  getPathFromState,
3
4
  type NavigationAction,
4
5
  NavigationContainerRefContext,
5
6
  NavigationHelpersContext,
6
- type NavigatorScreenParams,
7
- type ParamListBase,
8
7
  } from '@react-navigation/core';
9
- import type { NavigationState, PartialState } from '@react-navigation/routers';
10
8
  import * as React from 'react';
11
9
  import { type GestureResponderEvent, Platform } from 'react-native';
10
+ import useLatestCallback from 'use-latest-callback';
12
11
 
13
12
  import { LinkingContext } from './LinkingContext';
13
+ import { useDeepStableValue } from './useDeepStableValue';
14
14
 
15
15
  export type LinkProps<
16
16
  ParamList extends ReactNavigation.RootParamList,
@@ -31,33 +31,116 @@ export type LinkProps<
31
31
  params?: undefined;
32
32
  };
33
33
 
34
- const getStateFromParams = (
35
- params: NavigatorScreenParams<ParamListBase> | undefined
36
- ): PartialState<NavigationState> | NavigationState | undefined => {
37
- if (params?.state) {
38
- return params.state;
34
+ const NESTED_KEYS = ['payload', 'params', 'state', 'routes'] as const;
35
+ const NESTED_PARAMS_KEYS = ['params', 'state'] as const;
36
+ const NAVIGATE_ACTION_TYPES = [
37
+ 'NAVIGATE',
38
+ 'PUSH',
39
+ 'REPLACE',
40
+ 'POP_TO',
41
+ 'JUMP_TO',
42
+ ];
43
+
44
+ /**
45
+ * Nested params are tracked as consumed after handling
46
+ * So navigating with same params again won't work
47
+ * This can happen if the action or params are memoized
48
+ * Or component hasn't re-renderd to re-create inline objects
49
+ * So we clone the action and params when necessary before dispatch
50
+ */
51
+ function clone<T>(value: T): T;
52
+ function clone(
53
+ value: unknown,
54
+ keys: typeof NESTED_KEYS | typeof NESTED_PARAMS_KEYS,
55
+ clones: WeakMap<object, object>
56
+ ): unknown;
57
+ function clone(
58
+ value: unknown,
59
+ keys: typeof NESTED_KEYS | typeof NESTED_PARAMS_KEYS = NESTED_KEYS,
60
+ clones?: WeakMap<object, object>
61
+ ): unknown {
62
+ if (typeof value !== 'object' || value == null) {
63
+ return value;
39
64
  }
40
65
 
41
- if (params?.screen) {
42
- return {
43
- routes: [
44
- {
45
- name: params.screen,
46
- params: params.params,
47
- // @ts-expect-error this is fine 🔥
48
- state: params.screen
49
- ? getStateFromParams(
50
- params.params as
51
- | NavigatorScreenParams<ParamListBase>
52
- | undefined
53
- )
54
- : undefined,
55
- },
56
- ],
57
- };
66
+ const existing = clones?.get(value);
67
+
68
+ if (existing) {
69
+ return existing;
70
+ }
71
+
72
+ const isArray = Array.isArray(value);
73
+
74
+ if (
75
+ keys === NESTED_PARAMS_KEYS &&
76
+ 'screen' in value &&
77
+ typeof value.screen !== 'string' &&
78
+ !(
79
+ 'state' in value &&
80
+ typeof value.state === 'object' &&
81
+ value.state != null &&
82
+ 'routes' in value.state &&
83
+ Array.isArray(value.state.routes)
84
+ )
85
+ ) {
86
+ return value;
87
+ }
88
+
89
+ let copy: object | undefined =
90
+ keys === NESTED_PARAMS_KEYS ? { ...value } : undefined;
91
+
92
+ clones ??= new WeakMap();
93
+ clones.set(value, copy ?? value);
94
+
95
+ for (const key of isArray ? value.keys() : keys) {
96
+ const nested: unknown = Reflect.get(value, key);
97
+
98
+ const cloned = clone(
99
+ nested,
100
+ key === 'params' ? NESTED_PARAMS_KEYS : NESTED_KEYS,
101
+ clones
102
+ );
103
+
104
+ if (cloned !== nested) {
105
+ copy ??= isArray ? [...value] : { ...value };
106
+ clones.set(value, copy);
107
+
108
+ Object.assign(copy, { [key]: cloned });
109
+ }
110
+ }
111
+
112
+ return copy ?? value;
113
+ }
114
+
115
+ const getTargetFromAction = (
116
+ action: NavigationAction | undefined,
117
+ screens: Record<string, unknown> | undefined
118
+ ) => {
119
+ if (action === undefined || screens === undefined) {
120
+ return undefined;
121
+ }
122
+
123
+ const { payload } = action;
124
+
125
+ if (
126
+ !NAVIGATE_ACTION_TYPES.includes(action.type) ||
127
+ payload === undefined ||
128
+ !('name' in payload) ||
129
+ typeof payload.name !== 'string' ||
130
+ !(payload.name in screens)
131
+ ) {
132
+ return undefined;
58
133
  }
59
134
 
60
- return undefined;
135
+ return {
136
+ screen: payload.name,
137
+ params:
138
+ 'params' in payload &&
139
+ typeof payload.params === 'object' &&
140
+ payload.params != null
141
+ ? payload.params
142
+ : undefined,
143
+ };
61
144
  };
62
145
 
63
146
  /**
@@ -66,90 +149,108 @@ const getStateFromParams = (
66
149
  * @param props.screen Name of the screen to navigate to (e.g. `'Feeds'`).
67
150
  * @param props.params Params to pass to the screen to navigate to (e.g. `{ sort: 'hot' }`).
68
151
  * @param props.href Optional absolute path to use for the href (e.g. `/feeds/hot`).
69
- * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.
152
+ * @param props.action Optional action to override the in-page navigation. The `href` is still derived from `screen`, so this can be used to render a link while dispatching a different action (e.g. a `replace`).
70
153
  */
71
154
  export function useLinkProps<ParamList extends ReactNavigation.RootParamList>({
72
155
  screen,
73
156
  params,
74
- href,
75
157
  action,
158
+ ...rest
76
159
  }: LinkProps<ParamList>) {
77
160
  const root = React.useContext(NavigationContainerRefContext);
78
- const navigation = React.useContext(NavigationHelpersContext);
161
+ const navigation = React.useContext(NavigationHelpersContext) ?? root;
162
+
163
+ if (navigation == null) {
164
+ throw new Error(
165
+ "Couldn't find a navigation object. Is your component inside NavigationContainer?"
166
+ );
167
+ }
168
+
79
169
  const { options } = React.useContext(LinkingContext);
80
170
 
81
- const onPress = (
82
- e?: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent
83
- ) => {
84
- let shouldHandle = false;
85
-
86
- if (Platform.OS !== 'web' || !e) {
87
- e?.preventDefault?.();
88
- shouldHandle = true;
89
- } else {
90
- // ignore clicks with modifier keys
91
- const hasModifierKey =
92
- ('metaKey' in e && e.metaKey) ||
93
- ('altKey' in e && e.altKey) ||
94
- ('ctrlKey' in e && e.ctrlKey) ||
95
- ('shiftKey' in e && e.shiftKey);
96
-
97
- // only handle left clicks
98
- const isLeftClick =
99
- 'button' in e ? e.button == null || e.button === 0 : true;
100
-
101
- // let browser handle "target=_blank" etc.
102
- const isSelfTarget =
103
- e.currentTarget && 'target' in e.currentTarget
104
- ? [undefined, null, '', 'self'].includes(e.currentTarget.target)
105
- : true;
106
-
107
- if (!hasModifierKey && isLeftClick && isSelfTarget) {
108
- e.preventDefault?.();
109
- shouldHandle = true;
171
+ const onPress = useLatestCallback(
172
+ (
173
+ e?:
174
+ | React.MouseEvent<HTMLAnchorElement, MouseEvent>
175
+ | GestureResponderEvent
176
+ ) => {
177
+ if (Platform.OS === 'web' && e) {
178
+ const hasModifierKey =
179
+ ('metaKey' in e && e.metaKey) ||
180
+ ('altKey' in e && e.altKey) ||
181
+ ('ctrlKey' in e && e.ctrlKey) ||
182
+ ('shiftKey' in e && e.shiftKey);
183
+
184
+ const isLeftClick =
185
+ 'button' in e ? e.button == null || e.button === 0 : true;
186
+
187
+ const isSelfTarget =
188
+ e.currentTarget && 'target' in e.currentTarget
189
+ ? [undefined, null, '', '_self'].includes(e.currentTarget.target)
190
+ : true;
191
+
192
+ if (hasModifierKey || !isLeftClick || !isSelfTarget) {
193
+ return;
194
+ }
110
195
  }
111
- }
112
196
 
113
- if (shouldHandle) {
114
- if (action) {
115
- if (navigation) {
116
- navigation.dispatch(action);
117
- } else if (root) {
118
- root.dispatch(action);
119
- } else {
197
+ e?.preventDefault();
198
+
199
+ let cloned: NavigationAction;
200
+
201
+ if (action != null) {
202
+ cloned = clone(action);
203
+ } else {
204
+ if (screen == null) {
120
205
  throw new Error(
121
- "Couldn't find a navigation object. Is your component inside NavigationContainer?"
206
+ "Couldn't find a screen to navigate to. Make sure to provide a screen name."
122
207
  );
123
208
  }
124
- } else {
125
- // @ts-expect-error This is already type-checked by the prop types
126
- navigation?.navigate(screen, params);
209
+
210
+ cloned = clone(
211
+ // @ts-expect-error This is already type-checked by the prop types
212
+ CommonActions.navigate(screen, params)
213
+ );
127
214
  }
215
+
216
+ navigation.dispatch(cloned);
128
217
  }
129
- };
218
+ );
219
+
220
+ const target = useDeepStableValue(
221
+ Platform.OS === 'web'
222
+ ? typeof screen === 'string'
223
+ ? {
224
+ screen,
225
+ params:
226
+ typeof params === 'object' && params != null ? params : undefined,
227
+ }
228
+ : getTargetFromAction(action, options?.config?.screens)
229
+ : undefined
230
+ );
231
+
232
+ const href = React.useMemo(() => {
233
+ if (Platform.OS !== 'web' || rest.href != null || target == null) {
234
+ return rest.href;
235
+ }
236
+
237
+ const getPath = options?.getPathFromState ?? getPathFromState;
130
238
 
131
- const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;
239
+ return getPath(
240
+ {
241
+ routes: [
242
+ {
243
+ name: target.screen,
244
+ params: target.params,
245
+ },
246
+ ],
247
+ },
248
+ options?.config
249
+ );
250
+ }, [rest.href, target, options?.getPathFromState, options?.config]);
132
251
 
133
252
  return {
134
- href:
135
- href ??
136
- (Platform.OS === 'web' && screen != null
137
- ? getPathFromStateHelper(
138
- {
139
- routes: [
140
- {
141
- // @ts-expect-error this is fine 🔥
142
- name: screen,
143
- // @ts-expect-error this is fine 🔥
144
- params: params,
145
- // @ts-expect-error this is fine 🔥
146
- state: getStateFromParams(params),
147
- },
148
- ],
149
- },
150
- options?.config
151
- )
152
- : undefined),
253
+ href,
153
254
  role: 'link' as const,
154
255
  onPress,
155
256
  };
@@ -83,6 +83,13 @@ const isPoppingLastEntry = (
83
83
  current: NavigationState,
84
84
  record: NavigationState
85
85
  ): boolean => {
86
+ const currentRoute = current.routes[current.index];
87
+ const recordRoute = record.routes[record.index];
88
+
89
+ if (currentRoute == null || recordRoute == null) {
90
+ return false;
91
+ }
92
+
86
93
  if (current.history && record.history) {
87
94
  return current.history.length === record.history.length + 1;
88
95
  }
@@ -106,12 +113,14 @@ const isPoppingLastEntry = (
106
113
  */
107
114
  export const series = (cb: () => Promise<void>) => {
108
115
  let queue = Promise.resolve();
116
+
109
117
  const callback = () => {
110
118
  // eslint-disable-next-line promise/no-callback-in-promise
111
119
  queue = queue.then(cb).catch((e) => {
112
120
  console.error(e);
113
121
  });
114
122
  };
123
+
115
124
  return callback;
116
125
  };
117
126
 
@@ -531,8 +540,6 @@ export function useLinking(
531
540
  }
532
541
 
533
542
  // Skip if the state hasn't changed since we last synced it
534
- // This avoids redundant work when the committed `state` event fires
535
- // after we already synced from `__unsafe_action__`
536
543
  if (previousState === state) {
537
544
  return;
538
545
  }