@buoy-gg/route-events 7.0.4 → 7.0.6

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.
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RouteEventsModalWithTabs = RouteEventsModalWithTabs;
7
+ exports.RoutesToolView = RoutesToolView;
7
8
  var _react = require("react");
8
9
  var _reactNative = require("react-native");
9
10
  var _safeReactNavigation = require("../utils/safeReactNavigation");
@@ -77,7 +78,9 @@ function RouteEventsModalWithTabs({
77
78
  onClose,
78
79
  onBack,
79
80
  onMinimize,
80
- enableSharedModalDimensions = false
81
+ enableSharedModalDimensions = false,
82
+ inline = false,
83
+ remote
81
84
  }) {
82
85
  const router = (0, _sharedUi.useSafeRouter)();
83
86
  const containerRef = (0, _react.useContext)(NavigationContainerRefContext);
@@ -401,8 +404,14 @@ function RouteEventsModalWithTabs({
401
404
  });
402
405
  }
403
406
  if (activeTab === "routes") {
404
- return hasExpoRouter ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_RoutesSitemap.RoutesSitemap, {
405
- style: styles.contentWrapper
407
+ // A remote host supplies the tree, so its presence — not this process's
408
+ // router — decides which view can render it.
409
+ return hasExpoRouter || remote?.sitemap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_RoutesSitemap.RoutesSitemap, {
410
+ style: styles.contentWrapper,
411
+ injectedRoutes: remote?.sitemap?.routes,
412
+ injectedSource: remote?.sitemap?.source ?? null,
413
+ injectedLastUpdatedAt: remote?.sitemap?.lastUpdatedAt ?? null,
414
+ onNavigateRoute: remote ? handleRemoteNavigateRoute : undefined
406
415
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ReactNavigationRoutes.ReactNavigationRoutes, {
407
416
  style: styles.contentWrapper
408
417
  });
@@ -410,6 +419,8 @@ function RouteEventsModalWithTabs({
410
419
  if (activeTab === "stack") {
411
420
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationStack.NavigationStack, {
412
421
  style: styles.contentWrapper,
422
+ injectedStack: remote ? remote.stack ?? [] : undefined,
423
+ onAction: remote?.onStackAction,
413
424
  onCopyValueChange: setStackCopyValue
414
425
  });
415
426
  }
@@ -482,6 +493,116 @@ function RouteEventsModalWithTabs({
482
493
  })]
483
494
  });
484
495
  };
496
+ const headerContent = selectedEvent ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
497
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
498
+ onBack: handleBackFromDetail
499
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
500
+ title: selectedEvent.pathname
501
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {
502
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
503
+ value: {
504
+ pathname: selectedEvent.pathname,
505
+ previousPathname: selectedEvent.previousPathname,
506
+ params: selectedEvent.params,
507
+ segments: selectedEvent.segments,
508
+ timestamp: selectedEvent.timestamp,
509
+ timestampISO: new Date(selectedEvent.timestamp).toISOString(),
510
+ timeSincePrevious: selectedEvent.timeSincePrevious,
511
+ visitNumber: selectedVisitNumber
512
+ },
513
+ buttonStyle: styles.iconButton
514
+ })
515
+ })]
516
+ }) : showFilters ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
517
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
518
+ onBack: () => setShowFilters(false)
519
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
520
+ title: "Filters"
521
+ })]
522
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
523
+ children: [onBack && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
524
+ onBack: onBack
525
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
526
+ title: "",
527
+ noMargin: true,
528
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
529
+ tabs: [{
530
+ key: "routes",
531
+ label: hasExpoRouter ? "Routes" : "Screens"
532
+ }, {
533
+ key: "events",
534
+ label: `Events${events.length > 0 && activeTab !== "events" ? ` (${events.length})` : ""}`
535
+ }, {
536
+ key: "stack",
537
+ label: "Stack"
538
+ }],
539
+ activeTab: activeTab,
540
+ onTabChange: tab => handleTabChange(tab)
541
+ })
542
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
543
+ children: [activeTab === "stack" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
544
+ value: stackCopyValue,
545
+ buttonStyle: styles.iconButton
546
+ }), activeTab === "events" && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
547
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
548
+ value: copyAllEventsData,
549
+ buttonStyle: styles.iconButton
550
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
551
+ onPress: handleToggleFilters,
552
+ style: [styles.iconButton, ignoredPatterns.size > 0 && styles.activeFilterButton],
553
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
554
+ size: 14,
555
+ color: ignoredPatterns.size > 0 ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textSecondary
556
+ })
557
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.PowerToggleButton, {
558
+ isEnabled: isListening,
559
+ onToggle: handleToggleListening,
560
+ accessibilityLabel: "Toggle route event monitoring"
561
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
562
+ onPress: handleClearEvents,
563
+ style: styles.iconButton,
564
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Trash2, {
565
+ size: 14,
566
+ color: _sharedUi.buoyColors.error
567
+ })
568
+ })]
569
+ })]
570
+ })]
571
+ });
572
+
573
+ /**
574
+ * Pro gate for remote sitemap navigation. The Home shortcut stays free so a
575
+ * free user can always get the device back to a known screen; layouts and
576
+ * groups are not navigable at all.
577
+ */
578
+ const handleRemoteNavigateRoute = route => {
579
+ if (route.type === "layout" || route.type === "group") return;
580
+ const isHomeRoute = route.type === "index" || route.path === "/";
581
+ if (!isPro && !isHomeRoute) {
582
+ setShowUpgradeModal(true);
583
+ return;
584
+ }
585
+ remote?.onNavigateRoute?.(route);
586
+ };
587
+ const upgradeModal = /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ProUpgradeModal, {
588
+ visible: showUpgradeModal,
589
+ onClose: () => setShowUpgradeModal(false),
590
+ featureName: "Route Event Management"
591
+ });
592
+
593
+ // The ONLY difference between the phone and the desktop dashboard is which
594
+ // shell the header, body and footer go in. Everything above this is shared.
595
+ if (inline) {
596
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.TickProvider, {
597
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
598
+ style: styles.inlineRoot,
599
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
600
+ style: styles.inlineHeader,
601
+ children: headerContent
602
+ }), renderContent(), footerNode]
603
+ }), upgradeModal]
604
+ });
605
+ }
485
606
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TickProvider, {
486
607
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.JsModal, {
487
608
  visible: visible,
@@ -490,82 +611,7 @@ function RouteEventsModalWithTabs({
490
611
  persistenceKey: persistenceKey,
491
612
  header: {
492
613
  showToggleButton: true,
493
- customContent: selectedEvent ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
494
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
495
- onBack: handleBackFromDetail
496
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
497
- title: selectedEvent.pathname
498
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {
499
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
500
- value: {
501
- pathname: selectedEvent.pathname,
502
- previousPathname: selectedEvent.previousPathname,
503
- params: selectedEvent.params,
504
- segments: selectedEvent.segments,
505
- timestamp: selectedEvent.timestamp,
506
- timestampISO: new Date(selectedEvent.timestamp).toISOString(),
507
- timeSincePrevious: selectedEvent.timeSincePrevious,
508
- visitNumber: selectedVisitNumber
509
- },
510
- buttonStyle: styles.iconButton
511
- })
512
- })]
513
- }) : showFilters ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
514
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
515
- onBack: () => setShowFilters(false)
516
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
517
- title: "Filters"
518
- })]
519
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
520
- children: [onBack && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
521
- onBack: onBack
522
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
523
- title: "",
524
- noMargin: true,
525
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
526
- tabs: [{
527
- key: "routes",
528
- label: hasExpoRouter ? "Routes" : "Screens"
529
- }, {
530
- key: "events",
531
- label: `Events${events.length > 0 && activeTab !== "events" ? ` (${events.length})` : ""}`
532
- }, {
533
- key: "stack",
534
- label: "Stack"
535
- }],
536
- activeTab: activeTab,
537
- onTabChange: tab => handleTabChange(tab)
538
- })
539
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
540
- children: [activeTab === "stack" && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
541
- value: stackCopyValue,
542
- buttonStyle: styles.iconButton
543
- }), activeTab === "events" && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
544
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
545
- value: copyAllEventsData,
546
- buttonStyle: styles.iconButton
547
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
548
- onPress: handleToggleFilters,
549
- style: [styles.iconButton, ignoredPatterns.size > 0 && styles.activeFilterButton],
550
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
551
- size: 14,
552
- color: ignoredPatterns.size > 0 ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textSecondary
553
- })
554
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.PowerToggleButton, {
555
- isEnabled: isListening,
556
- onToggle: handleToggleListening,
557
- accessibilityLabel: "Toggle route event monitoring"
558
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
559
- onPress: handleClearEvents,
560
- style: styles.iconButton,
561
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Trash2, {
562
- size: 14,
563
- color: _sharedUi.buoyColors.error
564
- })
565
- })]
566
- })]
567
- })]
568
- })
614
+ customContent: headerContent
569
615
  },
570
616
  onModeChange: handleModeChange,
571
617
  enablePersistence: true,
@@ -574,15 +620,38 @@ function RouteEventsModalWithTabs({
574
620
  styles: {},
575
621
  footer: footerNode,
576
622
  footerHeight: footerNode ? 68 : 0,
577
- children: [renderContent(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ProUpgradeModal, {
578
- visible: showUpgradeModal,
579
- onClose: () => setShowUpgradeModal(false),
580
- featureName: "Route Event Management"
581
- })]
623
+ children: [renderContent(), upgradeModal]
582
624
  })
583
625
  });
584
626
  }
627
+
628
+ /**
629
+ * The same routes tool as `RouteEventsModalWithTabs`, rendered INLINE for hosts
630
+ * that place tools in a panel rather than a modal. Exists so there is exactly
631
+ * one implementation — the desktop dashboard used to ship its own copy of this
632
+ * component's header and tab router.
633
+ */
634
+ function RoutesToolView(props = {}) {
635
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteEventsModalWithTabs, {
636
+ ...props,
637
+ inline: true,
638
+ visible: true,
639
+ onClose: () => {}
640
+ });
641
+ }
585
642
  const styles = _reactNative.StyleSheet.create({
643
+ inlineRoot: {
644
+ flex: 1,
645
+ minHeight: 0,
646
+ backgroundColor: _sharedUi.buoyColors.base
647
+ },
648
+ inlineHeader: {
649
+ paddingHorizontal: 12,
650
+ paddingVertical: 8,
651
+ borderBottomWidth: 1,
652
+ borderBottomColor: _sharedUi.buoyColors.border,
653
+ backgroundColor: _sharedUi.buoyColors.card
654
+ },
586
655
  iconButton: {
587
656
  padding: 6,
588
657
  borderRadius: 6,
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.RoutesSitemap = RoutesSitemap;
7
7
  var _react = require("react");
8
- var _reactNative = require("react-native");
9
8
  var _sharedUi = require("@buoy-gg/shared-ui");
9
+ var _reactNative = require("react-native");
10
10
  var _license = require("@buoy-gg/license");
11
11
  var _useRouteSitemap = require("../useRouteSitemap");
12
12
  var _jsxRuntime = require("react/jsx-runtime");
@@ -917,7 +917,7 @@ const styles = _reactNative.StyleSheet.create({
917
917
  childCountText: {
918
918
  fontSize: 11,
919
919
  fontWeight: "600",
920
- color: "#6B7280",
920
+ color: _sharedUi.macOSColors.text.icon,
921
921
  fontFamily: "monospace"
922
922
  },
923
923
  typeTag: {
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "RoutesSitemap", {
57
57
  return _RoutesSitemap.RoutesSitemap;
58
58
  }
59
59
  });
60
+ Object.defineProperty(exports, "RoutesToolView", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _RouteEventsModalWithTabs.RoutesToolView;
64
+ }
65
+ });
60
66
  Object.defineProperty(exports, "createRouteEventsTool", {
61
67
  enumerable: true,
62
68
  get: function () {
@@ -76,7 +76,9 @@ export function RouteEventsModalWithTabs({
76
76
  onClose,
77
77
  onBack,
78
78
  onMinimize,
79
- enableSharedModalDimensions = false
79
+ enableSharedModalDimensions = false,
80
+ inline = false,
81
+ remote
80
82
  }) {
81
83
  const router = useSafeRouter();
82
84
  const containerRef = useContext(NavigationContainerRefContext);
@@ -400,8 +402,14 @@ export function RouteEventsModalWithTabs({
400
402
  });
401
403
  }
402
404
  if (activeTab === "routes") {
403
- return hasExpoRouter ? /*#__PURE__*/_jsx(RoutesSitemap, {
404
- style: styles.contentWrapper
405
+ // A remote host supplies the tree, so its presence — not this process's
406
+ // router — decides which view can render it.
407
+ return hasExpoRouter || remote?.sitemap ? /*#__PURE__*/_jsx(RoutesSitemap, {
408
+ style: styles.contentWrapper,
409
+ injectedRoutes: remote?.sitemap?.routes,
410
+ injectedSource: remote?.sitemap?.source ?? null,
411
+ injectedLastUpdatedAt: remote?.sitemap?.lastUpdatedAt ?? null,
412
+ onNavigateRoute: remote ? handleRemoteNavigateRoute : undefined
405
413
  }) : /*#__PURE__*/_jsx(ReactNavigationRoutes, {
406
414
  style: styles.contentWrapper
407
415
  });
@@ -409,6 +417,8 @@ export function RouteEventsModalWithTabs({
409
417
  if (activeTab === "stack") {
410
418
  return /*#__PURE__*/_jsx(NavigationStack, {
411
419
  style: styles.contentWrapper,
420
+ injectedStack: remote ? remote.stack ?? [] : undefined,
421
+ onAction: remote?.onStackAction,
412
422
  onCopyValueChange: setStackCopyValue
413
423
  });
414
424
  }
@@ -481,6 +491,116 @@ export function RouteEventsModalWithTabs({
481
491
  })]
482
492
  });
483
493
  };
494
+ const headerContent = selectedEvent ? /*#__PURE__*/_jsxs(ModalHeader, {
495
+ children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
496
+ onBack: handleBackFromDetail
497
+ }), /*#__PURE__*/_jsx(ModalHeader.Content, {
498
+ title: selectedEvent.pathname
499
+ }), /*#__PURE__*/_jsx(ModalHeader.Actions, {
500
+ children: /*#__PURE__*/_jsx(ToolbarCopyButton, {
501
+ value: {
502
+ pathname: selectedEvent.pathname,
503
+ previousPathname: selectedEvent.previousPathname,
504
+ params: selectedEvent.params,
505
+ segments: selectedEvent.segments,
506
+ timestamp: selectedEvent.timestamp,
507
+ timestampISO: new Date(selectedEvent.timestamp).toISOString(),
508
+ timeSincePrevious: selectedEvent.timeSincePrevious,
509
+ visitNumber: selectedVisitNumber
510
+ },
511
+ buttonStyle: styles.iconButton
512
+ })
513
+ })]
514
+ }) : showFilters ? /*#__PURE__*/_jsxs(ModalHeader, {
515
+ children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
516
+ onBack: () => setShowFilters(false)
517
+ }), /*#__PURE__*/_jsx(ModalHeader.Content, {
518
+ title: "Filters"
519
+ })]
520
+ }) : /*#__PURE__*/_jsxs(ModalHeader, {
521
+ children: [onBack && /*#__PURE__*/_jsx(ModalHeader.Navigation, {
522
+ onBack: onBack
523
+ }), /*#__PURE__*/_jsx(ModalHeader.Content, {
524
+ title: "",
525
+ noMargin: true,
526
+ children: /*#__PURE__*/_jsx(TabSelector, {
527
+ tabs: [{
528
+ key: "routes",
529
+ label: hasExpoRouter ? "Routes" : "Screens"
530
+ }, {
531
+ key: "events",
532
+ label: `Events${events.length > 0 && activeTab !== "events" ? ` (${events.length})` : ""}`
533
+ }, {
534
+ key: "stack",
535
+ label: "Stack"
536
+ }],
537
+ activeTab: activeTab,
538
+ onTabChange: tab => handleTabChange(tab)
539
+ })
540
+ }), /*#__PURE__*/_jsxs(ModalHeader.Actions, {
541
+ children: [activeTab === "stack" && /*#__PURE__*/_jsx(ToolbarCopyButton, {
542
+ value: stackCopyValue,
543
+ buttonStyle: styles.iconButton
544
+ }), activeTab === "events" && /*#__PURE__*/_jsxs(_Fragment, {
545
+ children: [/*#__PURE__*/_jsx(ToolbarCopyButton, {
546
+ value: copyAllEventsData,
547
+ buttonStyle: styles.iconButton
548
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
549
+ onPress: handleToggleFilters,
550
+ style: [styles.iconButton, ignoredPatterns.size > 0 && styles.activeFilterButton],
551
+ children: /*#__PURE__*/_jsx(Filter, {
552
+ size: 14,
553
+ color: ignoredPatterns.size > 0 ? buoyColors.primary : buoyColors.textSecondary
554
+ })
555
+ }), /*#__PURE__*/_jsx(PowerToggleButton, {
556
+ isEnabled: isListening,
557
+ onToggle: handleToggleListening,
558
+ accessibilityLabel: "Toggle route event monitoring"
559
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
560
+ onPress: handleClearEvents,
561
+ style: styles.iconButton,
562
+ children: /*#__PURE__*/_jsx(Trash2, {
563
+ size: 14,
564
+ color: buoyColors.error
565
+ })
566
+ })]
567
+ })]
568
+ })]
569
+ });
570
+
571
+ /**
572
+ * Pro gate for remote sitemap navigation. The Home shortcut stays free so a
573
+ * free user can always get the device back to a known screen; layouts and
574
+ * groups are not navigable at all.
575
+ */
576
+ const handleRemoteNavigateRoute = route => {
577
+ if (route.type === "layout" || route.type === "group") return;
578
+ const isHomeRoute = route.type === "index" || route.path === "/";
579
+ if (!isPro && !isHomeRoute) {
580
+ setShowUpgradeModal(true);
581
+ return;
582
+ }
583
+ remote?.onNavigateRoute?.(route);
584
+ };
585
+ const upgradeModal = /*#__PURE__*/_jsx(ProUpgradeModal, {
586
+ visible: showUpgradeModal,
587
+ onClose: () => setShowUpgradeModal(false),
588
+ featureName: "Route Event Management"
589
+ });
590
+
591
+ // The ONLY difference between the phone and the desktop dashboard is which
592
+ // shell the header, body and footer go in. Everything above this is shared.
593
+ if (inline) {
594
+ return /*#__PURE__*/_jsxs(TickProvider, {
595
+ children: [/*#__PURE__*/_jsxs(View, {
596
+ style: styles.inlineRoot,
597
+ children: [/*#__PURE__*/_jsx(View, {
598
+ style: styles.inlineHeader,
599
+ children: headerContent
600
+ }), renderContent(), footerNode]
601
+ }), upgradeModal]
602
+ });
603
+ }
484
604
  return /*#__PURE__*/_jsx(TickProvider, {
485
605
  children: /*#__PURE__*/_jsxs(JsModal, {
486
606
  visible: visible,
@@ -489,82 +609,7 @@ export function RouteEventsModalWithTabs({
489
609
  persistenceKey: persistenceKey,
490
610
  header: {
491
611
  showToggleButton: true,
492
- customContent: selectedEvent ? /*#__PURE__*/_jsxs(ModalHeader, {
493
- children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
494
- onBack: handleBackFromDetail
495
- }), /*#__PURE__*/_jsx(ModalHeader.Content, {
496
- title: selectedEvent.pathname
497
- }), /*#__PURE__*/_jsx(ModalHeader.Actions, {
498
- children: /*#__PURE__*/_jsx(ToolbarCopyButton, {
499
- value: {
500
- pathname: selectedEvent.pathname,
501
- previousPathname: selectedEvent.previousPathname,
502
- params: selectedEvent.params,
503
- segments: selectedEvent.segments,
504
- timestamp: selectedEvent.timestamp,
505
- timestampISO: new Date(selectedEvent.timestamp).toISOString(),
506
- timeSincePrevious: selectedEvent.timeSincePrevious,
507
- visitNumber: selectedVisitNumber
508
- },
509
- buttonStyle: styles.iconButton
510
- })
511
- })]
512
- }) : showFilters ? /*#__PURE__*/_jsxs(ModalHeader, {
513
- children: [/*#__PURE__*/_jsx(ModalHeader.Navigation, {
514
- onBack: () => setShowFilters(false)
515
- }), /*#__PURE__*/_jsx(ModalHeader.Content, {
516
- title: "Filters"
517
- })]
518
- }) : /*#__PURE__*/_jsxs(ModalHeader, {
519
- children: [onBack && /*#__PURE__*/_jsx(ModalHeader.Navigation, {
520
- onBack: onBack
521
- }), /*#__PURE__*/_jsx(ModalHeader.Content, {
522
- title: "",
523
- noMargin: true,
524
- children: /*#__PURE__*/_jsx(TabSelector, {
525
- tabs: [{
526
- key: "routes",
527
- label: hasExpoRouter ? "Routes" : "Screens"
528
- }, {
529
- key: "events",
530
- label: `Events${events.length > 0 && activeTab !== "events" ? ` (${events.length})` : ""}`
531
- }, {
532
- key: "stack",
533
- label: "Stack"
534
- }],
535
- activeTab: activeTab,
536
- onTabChange: tab => handleTabChange(tab)
537
- })
538
- }), /*#__PURE__*/_jsxs(ModalHeader.Actions, {
539
- children: [activeTab === "stack" && /*#__PURE__*/_jsx(ToolbarCopyButton, {
540
- value: stackCopyValue,
541
- buttonStyle: styles.iconButton
542
- }), activeTab === "events" && /*#__PURE__*/_jsxs(_Fragment, {
543
- children: [/*#__PURE__*/_jsx(ToolbarCopyButton, {
544
- value: copyAllEventsData,
545
- buttonStyle: styles.iconButton
546
- }), /*#__PURE__*/_jsx(TouchableOpacity, {
547
- onPress: handleToggleFilters,
548
- style: [styles.iconButton, ignoredPatterns.size > 0 && styles.activeFilterButton],
549
- children: /*#__PURE__*/_jsx(Filter, {
550
- size: 14,
551
- color: ignoredPatterns.size > 0 ? buoyColors.primary : buoyColors.textSecondary
552
- })
553
- }), /*#__PURE__*/_jsx(PowerToggleButton, {
554
- isEnabled: isListening,
555
- onToggle: handleToggleListening,
556
- accessibilityLabel: "Toggle route event monitoring"
557
- }), /*#__PURE__*/_jsx(TouchableOpacity, {
558
- onPress: handleClearEvents,
559
- style: styles.iconButton,
560
- children: /*#__PURE__*/_jsx(Trash2, {
561
- size: 14,
562
- color: buoyColors.error
563
- })
564
- })]
565
- })]
566
- })]
567
- })
612
+ customContent: headerContent
568
613
  },
569
614
  onModeChange: handleModeChange,
570
615
  enablePersistence: true,
@@ -573,15 +618,38 @@ export function RouteEventsModalWithTabs({
573
618
  styles: {},
574
619
  footer: footerNode,
575
620
  footerHeight: footerNode ? 68 : 0,
576
- children: [renderContent(), /*#__PURE__*/_jsx(ProUpgradeModal, {
577
- visible: showUpgradeModal,
578
- onClose: () => setShowUpgradeModal(false),
579
- featureName: "Route Event Management"
580
- })]
621
+ children: [renderContent(), upgradeModal]
581
622
  })
582
623
  });
583
624
  }
625
+
626
+ /**
627
+ * The same routes tool as `RouteEventsModalWithTabs`, rendered INLINE for hosts
628
+ * that place tools in a panel rather than a modal. Exists so there is exactly
629
+ * one implementation — the desktop dashboard used to ship its own copy of this
630
+ * component's header and tab router.
631
+ */
632
+ export function RoutesToolView(props = {}) {
633
+ return /*#__PURE__*/_jsx(RouteEventsModalWithTabs, {
634
+ ...props,
635
+ inline: true,
636
+ visible: true,
637
+ onClose: () => {}
638
+ });
639
+ }
584
640
  const styles = StyleSheet.create({
641
+ inlineRoot: {
642
+ flex: 1,
643
+ minHeight: 0,
644
+ backgroundColor: buoyColors.base
645
+ },
646
+ inlineHeader: {
647
+ paddingHorizontal: 12,
648
+ paddingVertical: 8,
649
+ borderBottomWidth: 1,
650
+ borderBottomColor: buoyColors.border,
651
+ backgroundColor: buoyColors.card
652
+ },
585
653
  iconButton: {
586
654
  padding: 6,
587
655
  borderRadius: 6,
@@ -12,6 +12,7 @@
12
12
  */
13
13
 
14
14
  import { useState, useCallback, useMemo, useEffect } from "react";
15
+ import { macOSColors } from "@buoy-gg/shared-ui";
15
16
  import { View, Text, TextInput, TouchableOpacity, ScrollView, StyleSheet, Alert, Platform } from "react-native";
16
17
  import { useSafeRouter } from "@buoy-gg/shared-ui";
17
18
  import { Search, ChevronDown, ChevronRight, Home, InlineCopyButton, CopyButton, RefreshCw, formatRelativeTime, ProUpgradeModal, buoyColors } from "@buoy-gg/shared-ui";
@@ -914,7 +915,7 @@ const styles = StyleSheet.create({
914
915
  childCountText: {
915
916
  fontSize: 11,
916
917
  fontWeight: "600",
917
- color: "#6B7280",
918
+ color: macOSColors.text.icon,
918
919
  fontFamily: "monospace"
919
920
  },
920
921
  typeTag: {
@@ -17,7 +17,9 @@ export { routeEventsToolPreset, createRouteEventsTool } from "./preset";
17
17
  // =============================================================================
18
18
  // MAIN COMPONENT
19
19
  // =============================================================================
20
- export { RouteEventsModalWithTabs } from "./components/RouteEventsModalWithTabs";
20
+ // `RoutesToolView` is the same tool rendered inline (header bar + body + footer)
21
+ // instead of inside a JsModal — for hosts that show tools in a panel.
22
+ export { RouteEventsModalWithTabs, RoutesToolView } from "./components/RouteEventsModalWithTabs";
21
23
  // =============================================================================
22
24
  // ROUTE TRACKER (Required - place inside your navigation tree)
23
25
  // =============================================================================
@@ -1,9 +1,50 @@
1
+ import type { RouteInfo } from "../RouteParser";
2
+ import type { StackDisplayItem } from "../useNavigationStack";
3
+ import type { NavigationStackActionType } from "./NavigationStack";
1
4
  export interface RouteEventsModalWithTabsProps {
2
5
  visible: boolean;
3
6
  onClose: () => void;
4
7
  onBack?: () => void;
5
8
  onMinimize?: (modalState: any) => void;
6
9
  enableSharedModalDimensions?: boolean;
10
+ /**
11
+ * Render as a header-bar + body (+ footer) stack instead of inside `JsModal`,
12
+ * for hosts that place tools in a panel rather than a modal (Buoy Desktop).
13
+ * Only the shell differs — header, tabs and state are shared. See
14
+ * `RoutesToolView` at the bottom of this file.
15
+ */
16
+ inline?: boolean;
17
+ /**
18
+ * Data and actions supplied by a REMOTE host (Buoy Desktop), where the route
19
+ * tree and navigation stack belong to a synced device rather than to this
20
+ * process. On device every one of these is discovered locally, so the whole
21
+ * object is omitted and the components fall back to their own hooks.
22
+ */
23
+ remote?: {
24
+ sitemap?: {
25
+ routes?: RouteInfo[];
26
+ source?: "build" | "src" | null;
27
+ lastUpdatedAt?: number | null;
28
+ };
29
+ stack?: StackDisplayItem[];
30
+ /**
31
+ * Navigate the device to a route from the sitemap. Pro gating is applied
32
+ * HERE before this is called, because the upgrade modal it needs to open
33
+ * lives in this component — the host only has to perform the navigation.
34
+ */
35
+ onNavigateRoute?: (route: RouteInfo) => void;
36
+ /** Drive the device's navigation stack (pop, goBack, navigateToIndex…). */
37
+ onStackAction?: (action: NavigationStackActionType, payload?: {
38
+ index?: number;
39
+ }) => void;
40
+ };
7
41
  }
8
- export declare function RouteEventsModalWithTabs({ visible, onClose, onBack, onMinimize, enableSharedModalDimensions, }: RouteEventsModalWithTabsProps): import("react").JSX.Element | null;
42
+ export declare function RouteEventsModalWithTabs({ visible, onClose, onBack, onMinimize, enableSharedModalDimensions, inline, remote, }: RouteEventsModalWithTabsProps): import("react").JSX.Element | null;
43
+ /**
44
+ * The same routes tool as `RouteEventsModalWithTabs`, rendered INLINE for hosts
45
+ * that place tools in a panel rather than a modal. Exists so there is exactly
46
+ * one implementation — the desktop dashboard used to ship its own copy of this
47
+ * component's header and tab router.
48
+ */
49
+ export declare function RoutesToolView(props?: Omit<RouteEventsModalWithTabsProps, "visible" | "onClose" | "inline">): import("react").JSX.Element;
9
50
  //# sourceMappingURL=RouteEventsModalWithTabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteEventsModalWithTabs.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsModalWithTabs.tsx"],"names":[],"mappings":"AA0DA,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;CACvC;AA8CD,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,GACpC,EAAE,6BAA6B,sCAwmB/B"}
1
+ {"version":3,"file":"RouteEventsModalWithTabs.d.ts","sourceRoot":"","sources":["../../../src/components/RouteEventsModalWithTabs.tsx"],"names":[],"mappings":"AAsDA,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,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,sCAqpB/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;AA4BH,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,+BA8YpB"}
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,+BA8YpB"}
@@ -7,7 +7,7 @@
7
7
  * PUBLIC API - Only these exports are supported for external use.
8
8
  */
9
9
  export { routeEventsToolPreset, createRouteEventsTool } from "./preset";
10
- export { RouteEventsModalWithTabs } from "./components/RouteEventsModalWithTabs";
10
+ export { RouteEventsModalWithTabs, RoutesToolView, } from "./components/RouteEventsModalWithTabs";
11
11
  export type { RouteEventsModalWithTabsProps } from "./components/RouteEventsModalWithTabs";
12
12
  export { RouteTracker } from "./RouteTracker";
13
13
  export { RoutesSitemap } from "./components/RoutesSitemap";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAK3F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EACV,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAK3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAKvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,qEAAqE;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOxE,OAAO,EACL,wBAAwB,EACxB,cAAc,GACf,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAK3F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EACV,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAK3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AAKvC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,qEAAqE;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/route-events",
3
- "version": "7.0.4",
3
+ "version": "7.0.6",
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/floating-tools-core": "7.0.4",
30
- "@buoy-gg/shared-ui": "7.0.4"
29
+ "@buoy-gg/floating-tools-core": "7.0.6",
30
+ "@buoy-gg/shared-ui": "7.0.6"
31
31
  },
32
32
  "peerDependencies": {
33
- "@buoy-gg/license": "7.0.4",
33
+ "@buoy-gg/license": "7.0.6",
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.4"
55
+ "@buoy-gg/license": "7.0.6"
56
56
  },
57
57
  "react-native-builder-bob": {
58
58
  "source": "src",