@buoy-gg/route-events 7.0.32 → 7.0.33

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.
@@ -71,6 +71,7 @@ function NavigationStackCapture() {
71
71
  const {
72
72
  stack,
73
73
  navigateToIndex,
74
+ navigateToRoute,
74
75
  popToIndex,
75
76
  goBack,
76
77
  popToTop
@@ -84,6 +85,7 @@ function NavigationStackCapture() {
84
85
  (0, _react.useEffect)(() => {
85
86
  _navigationStackStore.navigationStackStore.setActions({
86
87
  navigateToIndex,
88
+ navigateToRoute,
87
89
  popToIndex,
88
90
  goBack,
89
91
  popToTop
@@ -140,17 +140,11 @@ function NavigationStack({
140
140
  if (stack.length === 0) {
141
141
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
142
142
  style: [styles.container, style],
143
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
144
- style: styles.emptyContainer,
143
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
145
144
  testID: "buoy-routes-stack-empty",
146
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
147
- style: styles.emptyText,
148
- testID: "buoy-routes-stack-empty-text",
149
- children: "No navigation stack"
150
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
151
- style: styles.emptySubtext,
152
- children: "Navigate to a route to see the stack"
153
- })]
145
+ otto: "walking",
146
+ title: "No navigation stack",
147
+ message: "Navigate to a route to see the stack"
154
148
  })
155
149
  });
156
150
  }
@@ -473,21 +473,23 @@ function RouteEventsModalWithTabs({
473
473
  placeholder: "Search pathname or params...",
474
474
  testID: "buoy-routes-search"
475
475
  })
476
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
477
- style: styles.emptyState,
476
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
478
477
  testID: "buoy-routes-empty",
479
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Navigation, {
480
- size: 48,
481
- color: _sharedUi.night.color.textTertiary
482
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
483
- style: styles.emptyTitle,
484
- testID: "buoy-routes-empty-title",
485
- children: searchQuery.trim() ? "No matching events" : isListening ? "No route events yet" : "Event listener is paused"
486
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
487
- style: styles.emptySubtitle,
488
- testID: "buoy-routes-empty-subtitle",
489
- children: searchQuery.trim() ? "Try a different search term" : isListening ? "Navigation events will appear here" : "Press play to start monitoring"
490
- })]
478
+ ...(0, _sharedUi.resolveListEmptyState)({
479
+ subject: "route events",
480
+ search: searchQuery,
481
+ total: events.length,
482
+ capturing: isListening,
483
+ waiting: {
484
+ otto: "walking",
485
+ title: "No route events yet",
486
+ message: "Navigation events will appear here"
487
+ },
488
+ paused: {
489
+ title: "Event listener is paused",
490
+ message: "Press play to start monitoring"
491
+ }
492
+ })
491
493
  })]
492
494
  });
493
495
  }
@@ -408,14 +408,14 @@ function RoutesSitemap({
408
408
  id: "groups"
409
409
  })]
410
410
  })]
411
- }), displayGroups.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
412
- style: styles.emptyState,
413
- testID: "buoy-routes-sitemap-empty",
414
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
415
- style: styles.emptyText,
416
- testID: "buoy-routes-sitemap-empty-text",
417
- children: "No routes found"
418
- })
411
+ }), displayGroups.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
412
+ testID: "buoy-routes-sitemap-empty"
413
+ // map = "route inspector; where am I in the navigator" — the one
414
+ // OTTO_USES sentence written for this screen.
415
+ ,
416
+ otto: "map",
417
+ title: "No routes found",
418
+ message: "Nothing in the router matches. Clear the search to see the whole tree."
419
419
  }) : displayGroups.map(group => /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteGroupView, {
420
420
  group: group,
421
421
  isExpanded: searchQuery.length > 0 || expandedGroups.has(group.title),
@@ -173,7 +173,25 @@ const routeEventsSyncAdapter = exports.routeEventsSyncAdapter = {
173
173
  }
174
174
  const router = (0, _sharedUi.getSafeRouter)();
175
175
  if (!router) {
176
- throw new Error("expo-router is not available on this device");
176
+ // Bare React Navigation: no paths, but the tracker captured the
177
+ // container ref, so navigate by SCREEN NAME — "/Settings" and
178
+ // "Settings" both resolve, and nested navigators are walked via the
179
+ // root state. This is half the market; "throw off expo-router" made
180
+ // navigate a dead verb for every RN CLI app.
181
+ const actions = _navigationStackStore.navigationStackStore.getActions();
182
+ const name = path.replace(/^\//, "");
183
+ if (!actions?.navigateToRoute || !name) {
184
+ throw new Error("expo-router is not available here and no navigation container was captured — is <RouteTracker /> mounted inside your NavigationContainer?");
185
+ }
186
+ const ok = actions.navigateToRoute(name, p?.params);
187
+ if (!ok) {
188
+ throw new Error(`Could not navigate to "${name}" — no navigation container is live.`);
189
+ }
190
+ return {
191
+ navigated: path,
192
+ replaced: false,
193
+ via: "react-navigation"
194
+ };
177
195
  }
178
196
  // Push by default so navigate-then-back flows keep working. Callers that
179
197
  // mean "leave this screen" (sitemap Go, agents resetting to home) pass
@@ -282,6 +282,32 @@ function useNavigationStack() {
282
282
  console.error("Failed to navigate:", err);
283
283
  }
284
284
  }, [stack, containerRef]);
285
+ const navigateToRoute = (0, _react.useCallback)((name, params) => {
286
+ if (!containerRef) return false;
287
+ try {
288
+ // Deep path first, so screens inside nested navigators resolve even
289
+ // when their navigator isn't mounted yet.
290
+ const rootState = containerRef.getRootState?.();
291
+ if (!params && rootState) {
292
+ const path = findScreenPath(rootState, name);
293
+ if (path) {
294
+ const action = buildNestedNavigateAction(path);
295
+ if (action) {
296
+ containerRef.dispatch(action);
297
+ return true;
298
+ }
299
+ }
300
+ }
301
+ containerRef.dispatch(CommonActions.navigate({
302
+ name,
303
+ params
304
+ }));
305
+ return true;
306
+ } catch (err) {
307
+ console.error("Failed to navigate:", err);
308
+ return false;
309
+ }
310
+ }, [containerRef]);
285
311
  const popToIndex = (0, _react.useCallback)(index => {
286
312
  if (index >= stack.length || index < 0) return;
287
313
  const currentIndex = stack.length - 1;
@@ -336,6 +362,7 @@ function useNavigationStack() {
336
362
  error,
337
363
  refresh,
338
364
  navigateToIndex,
365
+ navigateToRoute,
339
366
  popToIndex,
340
367
  goBack,
341
368
  popToTop
@@ -67,6 +67,7 @@ function NavigationStackCapture() {
67
67
  const {
68
68
  stack,
69
69
  navigateToIndex,
70
+ navigateToRoute,
70
71
  popToIndex,
71
72
  goBack,
72
73
  popToTop
@@ -80,6 +81,7 @@ function NavigationStackCapture() {
80
81
  useEffect(() => {
81
82
  navigationStackStore.setActions({
82
83
  navigateToIndex,
84
+ navigateToRoute,
83
85
  popToIndex,
84
86
  goBack,
85
87
  popToTop
@@ -9,7 +9,7 @@
9
9
 
10
10
  import { useState, useMemo, useEffect } from "react";
11
11
  import { View, Text, ScrollView, TouchableOpacity, StyleSheet, Alert } from "react-native";
12
- import { ChevronDown, ChevronRight, InlineCopyButton, ProUpgradeModal, buoyColors, night, useSafeAreaInsets } from "@buoy-gg/shared-ui";
12
+ import { ChevronDown, ChevronRight, InlineCopyButton, ProUpgradeModal, buoyColors, night, useSafeAreaInsets, ToolEmptyState } from "@buoy-gg/shared-ui";
13
13
  import { useIsPro } from "@buoy-gg/license";
14
14
  import { DataViewer } from "@buoy-gg/shared-ui/dataViewer";
15
15
  import { useNavigationStack } from "../useNavigationStack";
@@ -136,17 +136,11 @@ export function NavigationStack({
136
136
  if (stack.length === 0) {
137
137
  return /*#__PURE__*/_jsx(View, {
138
138
  style: [styles.container, style],
139
- children: /*#__PURE__*/_jsxs(View, {
140
- style: styles.emptyContainer,
139
+ children: /*#__PURE__*/_jsx(ToolEmptyState, {
141
140
  testID: "buoy-routes-stack-empty",
142
- children: [/*#__PURE__*/_jsx(Text, {
143
- style: styles.emptyText,
144
- testID: "buoy-routes-stack-empty-text",
145
- children: "No navigation stack"
146
- }), /*#__PURE__*/_jsx(Text, {
147
- style: styles.emptySubtext,
148
- children: "Navigate to a route to see the stack"
149
- })]
141
+ otto: "walking",
142
+ title: "No navigation stack",
143
+ message: "Navigate to a route to see the stack"
150
144
  })
151
145
  });
152
146
  }
@@ -8,8 +8,8 @@ import { getCommonActions, useSafeNavigationContainerRef } from "../utils/safeRe
8
8
  // (useSafeNavigationContainerRef then yields undefined, so the dispatch
9
9
  // paths below never execute).
10
10
  const CommonActions = getCommonActions();
11
- import { useSafeRouter, isExpoRouterAvailable, windowDragProps } from "@buoy-gg/shared-ui";
12
- import { JsModal, ModalHeader, TabSelector, formatRelativeTime, devToolsStorageKeys, Navigation, Trash2, Filter, SearchBar, persistentStorage, ToolbarCopyButton, Lock, ProUpgradeModal, PowerToggleButton, buoyColors, night, TickProvider, useLimit } from "@buoy-gg/shared-ui";
11
+ import { useSafeRouter, isExpoRouterAvailable, windowDragProps, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
12
+ import { JsModal, ModalHeader, TabSelector, formatRelativeTime, devToolsStorageKeys, Trash2, Filter, SearchBar, persistentStorage, ToolbarCopyButton, Lock, ProUpgradeModal, PowerToggleButton, buoyColors, night, TickProvider, useLimit } from "@buoy-gg/shared-ui";
13
13
  import { useIsPro } from "@buoy-gg/license";
14
14
 
15
15
  // Free tier limit for route events
@@ -470,21 +470,23 @@ export function RouteEventsModalWithTabs({
470
470
  placeholder: "Search pathname or params...",
471
471
  testID: "buoy-routes-search"
472
472
  })
473
- }), /*#__PURE__*/_jsxs(View, {
474
- style: styles.emptyState,
473
+ }), /*#__PURE__*/_jsx(ToolEmptyState, {
475
474
  testID: "buoy-routes-empty",
476
- children: [/*#__PURE__*/_jsx(Navigation, {
477
- size: 48,
478
- color: night.color.textTertiary
479
- }), /*#__PURE__*/_jsx(Text, {
480
- style: styles.emptyTitle,
481
- testID: "buoy-routes-empty-title",
482
- children: searchQuery.trim() ? "No matching events" : isListening ? "No route events yet" : "Event listener is paused"
483
- }), /*#__PURE__*/_jsx(Text, {
484
- style: styles.emptySubtitle,
485
- testID: "buoy-routes-empty-subtitle",
486
- children: searchQuery.trim() ? "Try a different search term" : isListening ? "Navigation events will appear here" : "Press play to start monitoring"
487
- })]
475
+ ...resolveListEmptyState({
476
+ subject: "route events",
477
+ search: searchQuery,
478
+ total: events.length,
479
+ capturing: isListening,
480
+ waiting: {
481
+ otto: "walking",
482
+ title: "No route events yet",
483
+ message: "Navigation events will appear here"
484
+ },
485
+ paused: {
486
+ title: "Event listener is paused",
487
+ message: "Press play to start monitoring"
488
+ }
489
+ })
488
490
  })]
489
491
  });
490
492
  }
@@ -12,7 +12,7 @@
12
12
  */
13
13
 
14
14
  import { useState, useCallback, useMemo, useEffect } from "react";
15
- import { night } from "@buoy-gg/shared-ui";
15
+ import { night, ToolEmptyState } from "@buoy-gg/shared-ui";
16
16
  import { View, Text, TextInput, TouchableOpacity, ScrollView, StyleSheet, Alert, Platform } from "react-native";
17
17
  import { useSafeRouter } from "@buoy-gg/shared-ui";
18
18
  import { Search, ChevronDown, ChevronRight, Home, InlineCopyButton, CopyButton, RefreshCw, formatRelativeTime, ProUpgradeModal } from "@buoy-gg/shared-ui";
@@ -406,14 +406,14 @@ export function RoutesSitemap({
406
406
  id: "groups"
407
407
  })]
408
408
  })]
409
- }), displayGroups.length === 0 ? /*#__PURE__*/_jsx(View, {
410
- style: styles.emptyState,
411
- testID: "buoy-routes-sitemap-empty",
412
- children: /*#__PURE__*/_jsx(Text, {
413
- style: styles.emptyText,
414
- testID: "buoy-routes-sitemap-empty-text",
415
- children: "No routes found"
416
- })
409
+ }), displayGroups.length === 0 ? /*#__PURE__*/_jsx(ToolEmptyState, {
410
+ testID: "buoy-routes-sitemap-empty"
411
+ // map = "route inspector; where am I in the navigator" — the one
412
+ // OTTO_USES sentence written for this screen.
413
+ ,
414
+ otto: "map",
415
+ title: "No routes found",
416
+ message: "Nothing in the router matches. Clear the search to see the whole tree."
417
417
  }) : displayGroups.map(group => /*#__PURE__*/_jsx(RouteGroupView, {
418
418
  group: group,
419
419
  isExpanded: searchQuery.length > 0 || expandedGroups.has(group.title),
@@ -171,7 +171,25 @@ export const routeEventsSyncAdapter = {
171
171
  }
172
172
  const router = getSafeRouter();
173
173
  if (!router) {
174
- throw new Error("expo-router is not available on this device");
174
+ // Bare React Navigation: no paths, but the tracker captured the
175
+ // container ref, so navigate by SCREEN NAME — "/Settings" and
176
+ // "Settings" both resolve, and nested navigators are walked via the
177
+ // root state. This is half the market; "throw off expo-router" made
178
+ // navigate a dead verb for every RN CLI app.
179
+ const actions = navigationStackStore.getActions();
180
+ const name = path.replace(/^\//, "");
181
+ if (!actions?.navigateToRoute || !name) {
182
+ throw new Error("expo-router is not available here and no navigation container was captured — is <RouteTracker /> mounted inside your NavigationContainer?");
183
+ }
184
+ const ok = actions.navigateToRoute(name, p?.params);
185
+ if (!ok) {
186
+ throw new Error(`Could not navigate to "${name}" — no navigation container is live.`);
187
+ }
188
+ return {
189
+ navigated: path,
190
+ replaced: false,
191
+ via: "react-navigation"
192
+ };
175
193
  }
176
194
  // Push by default so navigate-then-back flows keep working. Callers that
177
195
  // mean "leave this screen" (sitemap Go, agents resetting to home) pass
@@ -279,6 +279,32 @@ export function useNavigationStack() {
279
279
  console.error("Failed to navigate:", err);
280
280
  }
281
281
  }, [stack, containerRef]);
282
+ const navigateToRoute = useCallback((name, params) => {
283
+ if (!containerRef) return false;
284
+ try {
285
+ // Deep path first, so screens inside nested navigators resolve even
286
+ // when their navigator isn't mounted yet.
287
+ const rootState = containerRef.getRootState?.();
288
+ if (!params && rootState) {
289
+ const path = findScreenPath(rootState, name);
290
+ if (path) {
291
+ const action = buildNestedNavigateAction(path);
292
+ if (action) {
293
+ containerRef.dispatch(action);
294
+ return true;
295
+ }
296
+ }
297
+ }
298
+ containerRef.dispatch(CommonActions.navigate({
299
+ name,
300
+ params
301
+ }));
302
+ return true;
303
+ } catch (err) {
304
+ console.error("Failed to navigate:", err);
305
+ return false;
306
+ }
307
+ }, [containerRef]);
282
308
  const popToIndex = useCallback(index => {
283
309
  if (index >= stack.length || index < 0) return;
284
310
  const currentIndex = stack.length - 1;
@@ -333,6 +359,7 @@ export function useNavigationStack() {
333
359
  error,
334
360
  refresh,
335
361
  navigateToIndex,
362
+ navigateToRoute,
336
363
  popToIndex,
337
364
  goBack,
338
365
  popToTop
@@ -1 +1 @@
1
- {"version":3,"file":"RouteTracker.d.ts","sourceRoot":"","sources":["../../src/RouteTracker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAgDH,wBAAgB,YAAY,gCAQ3B"}
1
+ {"version":3,"file":"RouteTracker.d.ts","sourceRoot":"","sources":["../../src/RouteTracker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAiDH,wBAAgB,YAAY,gCAQ3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationStack.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationStack.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAO/B,uEAAuE;AACvE,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,YAAY,GACZ,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;;;OAIG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KACzB,IAAI,CAAC;IAEV;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAMD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAa,EACb,QAAQ,EACR,iBAAiB,GAClB,EAAE,oBAAoB,+BA6dtB"}
1
+ {"version":3,"file":"NavigationStack.d.ts","sourceRoot":"","sources":["../../../src/components/NavigationStack.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAO/B,uEAAuE;AACvE,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,YAAY,GACZ,QAAQ,GACR,UAAU,CAAC;AAEf,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;;;OAIG;IACH,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEnC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KACzB,IAAI,CAAC;IAEV;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAMD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAa,EACb,QAAQ,EACR,iBAAiB,GAClB,EAAE,oBAAoB,+BA2dtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"RouteEventsModalWithTabs.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsModalWithTabs.tsx"],"names":[],"mappings":"AAuDA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE;YACR,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;YAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SAC/B,CAAC;QACF,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC3B;;;;WAIG;QACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;QAC7C;;;;;WAKG;QACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,2EAA2E;QAC3E,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KACzB,IAAI,CAAC;KACX,CAAC;CACH;AA8CD,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,EACd,MAAM,GACP,EAAE,6BAA6B,sCAguB/B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,GAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAKlF"}
1
+ {"version":3,"file":"RouteEventsModalWithTabs.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsModalWithTabs.tsx"],"names":[],"mappings":"AAyDA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE;YACR,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;YAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SAC/B,CAAC;QACF,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC3B;;;;WAIG;QACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;QAC7C;;;;;WAKG;QACH,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,2EAA2E;QAC3E,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,KACzB,IAAI,CAAC;KACX,CAAC;CACH;AA8CD,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,MAAc,EACd,MAAM,GACP,EAAE,6BAA6B,sCA8tB/B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,GAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAKlF"}
@@ -1 +1 @@
1
- {"version":3,"file":"RoutesSitemap.d.ts","sourceRoot":"","sources":["../../../src/components/RoutesSitemap.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAM5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAE7B,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAExC,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC9C;AAsCD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,eAAe,GAChB,EAAE,kBAAkB,+BA8apB"}
1
+ {"version":3,"file":"RoutesSitemap.d.ts","sourceRoot":"","sources":["../../../src/components/RoutesSitemap.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,gBAAgB,CAAC;AAM5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;;;OAIG;IACH,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAE7B,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAExC,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC9C;AAsCD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,eAAe,GAChB,EAAE,kBAAkB,+BAibpB"}
@@ -14,6 +14,8 @@
14
14
  import type { StackDisplayItem } from "../useNavigationStack";
15
15
  export interface NavigationStackActions {
16
16
  navigateToIndex: (index: number) => void;
17
+ /** Name-based navigation for bare React Navigation. Optional: older trackers don't capture it. */
18
+ navigateToRoute?: (name: string, params?: object) => boolean;
17
19
  popToIndex: (index: number) => void;
18
20
  goBack: () => void;
19
21
  popToTop: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"navigationStackStore.d.ts","sourceRoot":"","sources":["../../../src/stores/navigationStackStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,cAAM,oBAAoB;IACxB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAyB;IAE1C,QAAQ,IAAI,gBAAgB,EAAE;IAI9B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKzC,UAAU,IAAI,sBAAsB,GAAG,IAAI;IAI3C,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAIxD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CAM5C;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
1
+ {"version":3,"file":"navigationStackStore.d.ts","sourceRoot":"","sources":["../../../src/stores/navigationStackStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,kGAAkG;IAClG,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7D,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,cAAM,oBAAoB;IACxB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAyB;IAE1C,QAAQ,IAAI,gBAAgB,EAAE;IAI9B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKzC,UAAU,IAAI,sBAAsB,GAAG,IAAI;IAI3C,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAIxD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;CAM5C;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
@@ -84,6 +84,11 @@ export declare const routeEventsSyncAdapter: {
84
84
  navigate: (params?: unknown) => {
85
85
  navigated: string;
86
86
  replaced: boolean;
87
+ via: string;
88
+ } | {
89
+ navigated: string;
90
+ replaced: boolean;
91
+ via?: undefined;
87
92
  };
88
93
  stackNavigateToIndex: (params?: unknown) => {
89
94
  navigatedToIndex: number;
@@ -1 +1 @@
1
- {"version":3,"file":"routeEventsSyncAdapter.d.ts","sourceRoot":"","sources":["../../../src/sync/routeEventsSyncAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,QAAY,CAAC;AA4BrD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,mEAAmE;IACnE,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,8EAA8E;IAC9E,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAWD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB;;uBAEhB,sBAAsB;0BAKjB,MAAM,IAAI;;;QAkC9B;;;;;;;;WAQG;;;;;;;;;;;;;;;;;QAgCH;;;WAGG;4BACiB,OAAO;;;;wCAsBK,OAAO;;;mCAUZ,OAAO;;;;;;;;;;CAuBrC,CAAC"}
1
+ {"version":3,"file":"routeEventsSyncAdapter.d.ts","sourceRoot":"","sources":["../../../src/sync/routeEventsSyncAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,QAAY,CAAC;AA4BrD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,mEAAmE;IACnE,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,8EAA8E;IAC9E,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAWD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB;;uBAEhB,sBAAsB;0BAKjB,MAAM,IAAI;;;QAkC9B;;;;;;;;WAQG;;;;;;;;;;;;;;;;;QAgCH;;;WAGG;4BACiB,OAAO;;;;;;;;;wCAsCK,OAAO;;;mCAUZ,OAAO;;;;;;;;;;CAuBrC,CAAC"}
@@ -27,6 +27,13 @@ export interface UseNavigationStackResult {
27
27
  error: Error | null;
28
28
  refresh: () => void;
29
29
  navigateToIndex: (index: number) => void;
30
+ /**
31
+ * Navigate to a screen by NAME on bare React Navigation — the fallback
32
+ * that makes the `navigate` sync action work off expo-router. Resolves
33
+ * nested navigators via the root state when it can; returns false when no
34
+ * container ref was captured.
35
+ */
36
+ navigateToRoute: (name: string, params?: object) => boolean;
30
37
  popToIndex: (index: number) => void;
31
38
  goBack: () => void;
32
39
  popToTop: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationStack.d.ts","sourceRoot":"","sources":["../../src/useNavigationStack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4BH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IAEvC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAGlB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAGpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAuKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAqK7D"}
1
+ {"version":3,"file":"useNavigationStack.d.ts","sourceRoot":"","sources":["../../src/useNavigationStack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4BH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IAEvC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAGlB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAGpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC;;;;;OAKG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5D,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAuKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAiM7D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/route-events",
3
- "version": "7.0.32",
3
+ "version": "7.0.33",
4
4
  "description": "Navigation devtool for React Native — live stack, full sitemap, jump to any screen. Expo Router & React Navigation. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -26,11 +26,11 @@
26
26
  ],
27
27
  "sideEffects": false,
28
28
  "dependencies": {
29
- "@buoy-gg/shared-ui": "^7.0.32",
30
- "@buoy-gg/floating-tools-core": "^7.0.32"
29
+ "@buoy-gg/floating-tools-core": "^7.0.33",
30
+ "@buoy-gg/shared-ui": "^7.0.33"
31
31
  },
32
32
  "peerDependencies": {
33
- "@buoy-gg/license": "7.0.32",
33
+ "@buoy-gg/license": "7.0.33",
34
34
  "@react-native-async-storage/async-storage": "^2.0.0 || ^3.1.0",
35
35
  "@react-navigation/native": "*",
36
36
  "expo-router": "*",
@@ -52,7 +52,7 @@
52
52
  "@types/react-native": "^0.73.0",
53
53
  "expo-router": "~5.0.7",
54
54
  "typescript": "~5.8.3",
55
- "@buoy-gg/license": "^7.0.32"
55
+ "@buoy-gg/license": "^7.0.33"
56
56
  },
57
57
  "react-native-builder-bob": {
58
58
  "source": "src",