@symbiote-native/navigation 5.0.2 → 5.0.4

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.
package/README.md CHANGED
@@ -14,13 +14,28 @@ logic/view/lifecycle split every other SymbioteNative component follows.
14
14
 
15
15
  ## Install
16
16
 
17
+ **New app:**
18
+
19
+ ```bash
20
+ npx @symbiote-native/cli new my-app --navigation
21
+ ```
22
+
23
+ **Existing SymbioteNative app:**
24
+
25
+ ```bash
26
+ npx @symbiote-native/cli add --navigation
27
+ ```
28
+
29
+ Either way: installs and wires this for you — see [`@symbiote-native/cli`](../cli).
30
+
31
+ <details>
32
+ <summary>Manual install</summary>
33
+
17
34
  ```bash
18
35
  npm install @symbiote-native/navigation
19
36
  ```
20
37
 
21
- Scaffolding or extending a SymbioteNative app? `npx @symbiote-native/cli new --navigation` (or
22
- `add --navigation` in an existing app) installs and wires this for you — see
23
- [`@symbiote-native/cli`](../cli).
38
+ </details>
24
39
 
25
40
  Only this package — never `react-native-screens` directly. `@symbiote-native/navigation` depends
26
41
  on it and ships as the sole autolinked native proxy (`react-native.config.cjs` +
@@ -30,23 +30,9 @@ const SHEET_CONTENT_WRAPPER_STYLE = {
30
30
  end: 0,
31
31
  bottom: undefined,
32
32
  };
33
- // Android's native header (react-native-screens' CustomToolbar in a CoordinatorLayout alongside
34
- // an AppBarLayout) auto-offsets screen content below the header via a Material
35
- // `AppBarLayout.ScrollingViewBehavior` (ScreenStackFragment.kt's setToolbarTranslucent: `behavior
36
- // = if (translucent) null else ScrollingViewBehavior()`). A plain (non-translucent) header gets
37
- // this offset for free and needs no JS compensation. `headerTranslucent: true` removes that
38
- // behavior: react-native-screens' contract for translucent is "background goes away AND content
39
- // is no longer auto-pushed below it", meant for a screen painting under a see-through header. An
40
- // app that sets headerTranslucent just for a custom (still opaque) header look, while relying on
41
- // its own SafeAreaView for safe-area content, loses the free offset and gets clipped:
42
- // SafeAreaView's Android inset only reflects WindowInsetsCompat's systemBars() (status
43
- // bar/cutout), with no awareness of the sibling Toolbar, so content paints its first 56dp under
44
- // the header. Verified empirically (2026-07-10) via `adb shell uiautomator dump`: a
45
- // translucent-header screen's content measured starting at y=0 (see the
46
- // navigation-header-content-offset skill for the full incident). iOS's UINavigationController
47
- // already lays out below its real nav bar regardless of translucency, so this compensation is
48
- // Android-only and applies only when translucent (a non-translucent header already gets the
49
- // native offset; padding there would double it).
33
+ // Android's native header auto-offsets content via `AppBarLayout.ScrollingViewBehavior`, removed
34
+ // by `headerTranslucent: true`. An opaque custom header relying on SafeAreaView (blind to the
35
+ // sibling Toolbar) then clips its first 56dp — Android-only, and only when translucent.
50
36
  const ANDROID_HEADER_TOOLBAR_HEIGHT = 56;
51
37
  // react-native-screens' own Screen.tsx picks a different Fabric component for a modally-presented
52
38
  // screen ('RNSModalScreen' instead of plain 'RNSScreen') because "there is a need for different
@@ -149,7 +149,12 @@ const DrawerImpl = forwardRef((props, forwardedRef) => {
149
149
  },
150
150
  })).current;
151
151
  const animated = isDrawerAnimated(options);
152
- const geometry = useMemo(() => resolveDrawerGeometry(options), [options.drawerType, options.drawerPosition, options.drawerWidth]);
152
+ // Narrow on purpose: resolveDrawerGeometry only ever reads these 3 fields off options (see
153
+ // drawer-options/index.ts's resolveDrawerWidth/Type/Position) — depending on the whole
154
+ // `options` object would recompute on every unrelated options field, defeating the memo.
155
+ const geometry = useMemo(() => resolveDrawerGeometry(options),
156
+ // eslint-disable-next-line react-hooks/exhaustive-deps
157
+ [options.drawerType, options.drawerPosition, options.drawerWidth]);
153
158
  const panelSlot = animated
154
159
  ? resolveDrawerSlotInterpolation(geometry, 'panel')
155
160
  : undefined;
@@ -191,7 +196,11 @@ const DrawerImpl = forwardRef((props, forwardedRef) => {
191
196
  // route object, so a jumpTo-with-no-params re-focus of the ALREADY-focused route (a no-op in
192
197
  // drawerRouterReducer) and any future params merge don't spuriously re-fire focus/blur.
193
198
  const focusedRouteKey = focusedRoute?.key;
194
- const routeEmitter = useMemo(() => createNavigationEmitter(), [focusedRouteKey]);
199
+ // focusedRouteKey is a pure invalidation signal — createNavigationEmitter() takes no
200
+ // arguments, the key only forces a fresh emitter per focus change (see comment above).
201
+ const routeEmitter = useMemo(() => createNavigationEmitter(),
202
+ // eslint-disable-next-line react-hooks/exhaustive-deps
203
+ [focusedRouteKey]);
195
204
  // Drawer paints its own panel in pure JS - there is no native onAppear/onDisappear to hook
196
205
  // (unlike Stack's RNSScreen), so focus/blur is synthesized here: mount = focus, cleanup = blur,
197
206
  // exactly what an effect keyed on focusedRouteKey already encodes - no diffFocusedRoute
@@ -106,7 +106,11 @@ const TabImpl = forwardRef((props, forwardedRef) => {
106
106
  // object so a setParams-only change (new route object, same key) doesn't spuriously re-fire
107
107
  // focus/blur.
108
108
  const focusedRouteKey = focusedRoute?.key;
109
- const routeEmitter = useMemo(() => createNavigationEmitter(), [focusedRouteKey]);
109
+ // focusedRouteKey is a pure invalidation signal — createNavigationEmitter() takes no
110
+ // arguments, the key only forces a fresh emitter per focus change (see comment above).
111
+ const routeEmitter = useMemo(() => createNavigationEmitter(),
112
+ // eslint-disable-next-line react-hooks/exhaustive-deps
113
+ [focusedRouteKey]);
110
114
  // Tab paints its own bar in pure JS - there is no native onAppear/onDisappear to hook (unlike
111
115
  // Stack's RNSScreen), so focus/blur is synthesized here: mount = focus, cleanup = blur, exactly
112
116
  // what an effect keyed on focusedRouteKey already encodes - no diffFocusedRoute indirection
@@ -279,6 +279,9 @@
279
279
  // Only the focused route's screen is ever mounted (like Tab, unlike Stack which keeps every
280
280
  // pushed route alive). One emitter per route.key, created lazily and cached for the navigator's
281
281
  // whole lifetime.
282
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
283
+ // state — SvelteMap's tracking would be pure overhead here.
284
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
282
285
  const emitters = new Map<string, INavigationEmitter>();
283
286
  function emitterFor(routeKey: string): INavigationEmitter {
284
287
  let emitter = emitters.get(routeKey);
@@ -132,6 +132,9 @@
132
132
 
133
133
  // One emitter per route.key, created lazily the first time a route is rendered and pruned once
134
134
  // it is popped off the stack (the broadcast effect below).
135
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
136
+ // state — SvelteMap's tracking would be pure overhead here.
137
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
135
138
  const emitters = new Map<string, INavigationEmitter>();
136
139
  function emitterFor(routeKey: string): INavigationEmitter {
137
140
  let emitter = emitters.get(routeKey);
@@ -123,6 +123,9 @@
123
123
  // mirrors Stack's own `emitters` map. This decouples emitter IDENTITY (stable, looked up by
124
124
  // key, read below when a route's NavigationScope is built) from emit TIMING (must wait until
125
125
  // the focused screen has actually mounted and subscribed).
126
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
127
+ // state — SvelteMap's tracking would be pure overhead here.
128
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
126
129
  const emitters = new Map<string, INavigationEmitter>();
127
130
  function emitterFor(routeKey: string): INavigationEmitter {
128
131
  let emitter = emitters.get(routeKey);
@@ -30,23 +30,9 @@ const SHEET_CONTENT_WRAPPER_STYLE = {
30
30
  end: 0,
31
31
  bottom: undefined,
32
32
  };
33
- // Android's native header (react-native-screens' CustomToolbar in a CoordinatorLayout alongside
34
- // an AppBarLayout) auto-offsets screen content below the header via a Material
35
- // `AppBarLayout.ScrollingViewBehavior` (ScreenStackFragment.kt's setToolbarTranslucent: `behavior
36
- // = if (translucent) null else ScrollingViewBehavior()`). A plain (non-translucent) header gets
37
- // this offset for free and needs no JS compensation. `headerTranslucent: true` removes that
38
- // behavior: react-native-screens' contract for translucent is "background goes away AND content
39
- // is no longer auto-pushed below it", meant for a screen painting under a see-through header. An
40
- // app that sets headerTranslucent just for a custom (still opaque) header look, while relying on
41
- // its own SafeAreaView for safe-area content, loses the free offset and gets clipped:
42
- // SafeAreaView's Android inset only reflects WindowInsetsCompat's systemBars() (status
43
- // bar/cutout), with no awareness of the sibling Toolbar, so content paints its first 56dp under
44
- // the header. Verified empirically (2026-07-10) via `adb shell uiautomator dump`: a
45
- // translucent-header screen's content measured starting at y=0 (see the
46
- // navigation-header-content-offset skill for the full incident). iOS's UINavigationController
47
- // already lays out below its real nav bar regardless of translucency, so this compensation is
48
- // Android-only and applies only when translucent (a non-translucent header already gets the
49
- // native offset; padding there would double it).
33
+ // Android's native header auto-offsets content via `AppBarLayout.ScrollingViewBehavior`, removed
34
+ // by `headerTranslucent: true`. An opaque custom header relying on SafeAreaView (blind to the
35
+ // sibling Toolbar) then clips its first 56dp — Android-only, and only when translucent.
50
36
  const ANDROID_HEADER_TOOLBAR_HEIGHT = 56;
51
37
  // react-native-screens' own Screen.tsx picks a different Fabric component for a modally-presented
52
38
  // screen ('RNSModalScreen' instead of plain 'RNSScreen') because "there is a need for different
@@ -1 +1 @@
1
- {"version":3,"file":"render-stack.js","sourceRoot":"","sources":["../../src/core/render-stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-stack.js","sourceRoot":"","sources":["../../src/core/render-stack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symbiote-native/navigation",
3
- "version": "5.0.2",
3
+ "version": "5.0.4",
4
4
  "description": "Native stack navigator for SymbioteNative, built on react-native-screens' native view primitives (RNSScreen/RNSScreenStack) — one framework-agnostic core, reachable from the React, Vue, Svelte, Solid, and Angular adapters.",
5
5
  "keywords": [
6
6
  "react-native",
@@ -160,7 +160,7 @@
160
160
  },
161
161
  "dependencies": {
162
162
  "react-native-screens": "4.26.0",
163
- "@symbiote-native/components": "3.1.0"
163
+ "@symbiote-native/components": "3.1.2"
164
164
  },
165
165
  "peerDependencies": {
166
166
  "@angular/common": ">=20",
@@ -171,12 +171,12 @@
171
171
  "solid-js": ">=1.9.0",
172
172
  "svelte": ">=5.56.0",
173
173
  "vue": ">=3.5.0",
174
- "@symbiote-native/react": "^3.0.2",
175
- "@symbiote-native/engine": "^1.3.0",
176
- "@symbiote-native/svelte": "^3.0.2",
177
- "@symbiote-native/angular": "^3.1.0",
178
- "@symbiote-native/vue": "^3.0.2",
179
- "@symbiote-native/solid": "^3.0.2"
174
+ "@symbiote-native/angular": "^3.1.2",
175
+ "@symbiote-native/engine": "^1.3.1",
176
+ "@symbiote-native/react": "^3.0.4",
177
+ "@symbiote-native/solid": "^3.0.4",
178
+ "@symbiote-native/svelte": "^3.0.4",
179
+ "@symbiote-native/vue": "^3.0.4"
180
180
  },
181
181
  "peerDependenciesMeta": {
182
182
  "@angular/common": {
@@ -228,13 +228,13 @@
228
228
  "solid-js": "^1.9.14",
229
229
  "svelte": "^5.56.0",
230
230
  "typescript": "~6.0.0",
231
- "@symbiote-native/angular": "3.1.0",
232
- "@symbiote-native/engine": "1.3.0",
233
- "@symbiote-native/react": "3.0.2",
234
- "@symbiote-native/solid": "3.0.2",
235
- "@symbiote-native/svelte": "3.0.2",
236
- "@symbiote-native/test-utils": "0.4.2",
237
- "@symbiote-native/vue": "3.0.2"
231
+ "@symbiote-native/angular": "3.1.2",
232
+ "@symbiote-native/engine": "1.3.1",
233
+ "@symbiote-native/react": "3.0.4",
234
+ "@symbiote-native/solid": "3.0.4",
235
+ "@symbiote-native/svelte": "3.0.4",
236
+ "@symbiote-native/test-utils": "0.4.4",
237
+ "@symbiote-native/vue": "3.0.4"
238
238
  },
239
239
  "scripts": {
240
240
  "clean": "rm -rf build-ngc",
@@ -66,23 +66,9 @@ const SHEET_CONTENT_WRAPPER_STYLE = {
66
66
  bottom: undefined,
67
67
  };
68
68
 
69
- // Android's native header (react-native-screens' CustomToolbar in a CoordinatorLayout alongside
70
- // an AppBarLayout) auto-offsets screen content below the header via a Material
71
- // `AppBarLayout.ScrollingViewBehavior` (ScreenStackFragment.kt's setToolbarTranslucent: `behavior
72
- // = if (translucent) null else ScrollingViewBehavior()`). A plain (non-translucent) header gets
73
- // this offset for free and needs no JS compensation. `headerTranslucent: true` removes that
74
- // behavior: react-native-screens' contract for translucent is "background goes away AND content
75
- // is no longer auto-pushed below it", meant for a screen painting under a see-through header. An
76
- // app that sets headerTranslucent just for a custom (still opaque) header look, while relying on
77
- // its own SafeAreaView for safe-area content, loses the free offset and gets clipped:
78
- // SafeAreaView's Android inset only reflects WindowInsetsCompat's systemBars() (status
79
- // bar/cutout), with no awareness of the sibling Toolbar, so content paints its first 56dp under
80
- // the header. Verified empirically (2026-07-10) via `adb shell uiautomator dump`: a
81
- // translucent-header screen's content measured starting at y=0 (see the
82
- // navigation-header-content-offset skill for the full incident). iOS's UINavigationController
83
- // already lays out below its real nav bar regardless of translucency, so this compensation is
84
- // Android-only and applies only when translucent (a non-translucent header already gets the
85
- // native offset; padding there would double it).
69
+ // Android's native header auto-offsets content via `AppBarLayout.ScrollingViewBehavior`, removed
70
+ // by `headerTranslucent: true`. An opaque custom header relying on SafeAreaView (blind to the
71
+ // sibling Toolbar) then clips its first 56dp — Android-only, and only when translucent.
86
72
  const ANDROID_HEADER_TOOLBAR_HEIGHT = 56;
87
73
 
88
74
  // react-native-screens' own Screen.tsx picks a different Fabric component for a modally-presented
@@ -320,8 +320,12 @@ const DrawerImpl = forwardRef<IDrawerNavigatorHandle, IDrawerProps>(
320
320
  ).current;
321
321
 
322
322
  const animated = isDrawerAnimated(options);
323
+ // Narrow on purpose: resolveDrawerGeometry only ever reads these 3 fields off options (see
324
+ // drawer-options/index.ts's resolveDrawerWidth/Type/Position) — depending on the whole
325
+ // `options` object would recompute on every unrelated options field, defeating the memo.
323
326
  const geometry = useMemo(
324
327
  () => resolveDrawerGeometry(options),
328
+ // eslint-disable-next-line react-hooks/exhaustive-deps
325
329
  [options.drawerType, options.drawerPosition, options.drawerWidth],
326
330
  );
327
331
 
@@ -371,8 +375,11 @@ const DrawerImpl = forwardRef<IDrawerNavigatorHandle, IDrawerProps>(
371
375
  // route object, so a jumpTo-with-no-params re-focus of the ALREADY-focused route (a no-op in
372
376
  // drawerRouterReducer) and any future params merge don't spuriously re-fire focus/blur.
373
377
  const focusedRouteKey = focusedRoute?.key;
378
+ // focusedRouteKey is a pure invalidation signal — createNavigationEmitter() takes no
379
+ // arguments, the key only forces a fresh emitter per focus change (see comment above).
374
380
  const routeEmitter = useMemo(
375
381
  () => createNavigationEmitter(),
382
+ // eslint-disable-next-line react-hooks/exhaustive-deps
376
383
  [focusedRouteKey],
377
384
  );
378
385
 
@@ -216,8 +216,11 @@ const TabImpl = forwardRef<ITabNavigatorHandle, ITabProps>(
216
216
  // object so a setParams-only change (new route object, same key) doesn't spuriously re-fire
217
217
  // focus/blur.
218
218
  const focusedRouteKey = focusedRoute?.key;
219
+ // focusedRouteKey is a pure invalidation signal — createNavigationEmitter() takes no
220
+ // arguments, the key only forces a fresh emitter per focus change (see comment above).
219
221
  const routeEmitter = useMemo(
220
222
  () => createNavigationEmitter(),
223
+ // eslint-disable-next-line react-hooks/exhaustive-deps
221
224
  [focusedRouteKey],
222
225
  );
223
226
 
@@ -279,6 +279,9 @@
279
279
  // Only the focused route's screen is ever mounted (like Tab, unlike Stack which keeps every
280
280
  // pushed route alive). One emitter per route.key, created lazily and cached for the navigator's
281
281
  // whole lifetime.
282
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
283
+ // state — SvelteMap's tracking would be pure overhead here.
284
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
282
285
  const emitters = new Map<string, INavigationEmitter>();
283
286
  function emitterFor(routeKey: string): INavigationEmitter {
284
287
  let emitter = emitters.get(routeKey);
@@ -132,6 +132,9 @@
132
132
 
133
133
  // One emitter per route.key, created lazily the first time a route is rendered and pruned once
134
134
  // it is popped off the stack (the broadcast effect below).
135
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
136
+ // state — SvelteMap's tracking would be pure overhead here.
137
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
135
138
  const emitters = new Map<string, INavigationEmitter>();
136
139
  function emitterFor(routeKey: string): INavigationEmitter {
137
140
  let emitter = emitters.get(routeKey);
@@ -123,6 +123,9 @@
123
123
  // mirrors Stack's own `emitters` map. This decouples emitter IDENTITY (stable, looked up by
124
124
  // key, read below when a route's NavigationScope is built) from emit TIMING (must wait until
125
125
  // the focused screen has actually mounted and subscribed).
126
+ // Plain Map: a get/set/delete identity cache never read by the reactive graph, not rendered
127
+ // state — SvelteMap's tracking would be pure overhead here.
128
+ // eslint-disable-next-line svelte/prefer-svelte-reactivity
126
129
  const emitters = new Map<string, INavigationEmitter>();
127
130
  function emitterFor(routeKey: string): INavigationEmitter {
128
131
  let emitter = emitters.get(routeKey);