@buoy-gg/route-events 7.0.34 → 7.0.36

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.
Files changed (30) hide show
  1. package/lib/commonjs/components/NavigationStack.js +11 -11
  2. package/lib/commonjs/components/ReactNavigationRoutes.js +15 -15
  3. package/lib/commonjs/components/RouteEventDetail.js +1 -1
  4. package/lib/commonjs/components/RouteEventExpandedContent.js +3 -3
  5. package/lib/commonjs/components/RouteEventItemCompact.js +2 -2
  6. package/lib/commonjs/components/RouteEventsModalWithTabs.js +4 -4
  7. package/lib/commonjs/components/RouteEventsTimeline.js +2 -2
  8. package/lib/commonjs/components/RoutesSitemap.js +16 -16
  9. package/lib/commonjs/sync/routeEventsSyncAdapter.js +34 -8
  10. package/lib/commonjs/useNavigationStack.js +52 -14
  11. package/lib/module/components/NavigationStack.js +12 -12
  12. package/lib/module/components/ReactNavigationRoutes.js +16 -16
  13. package/lib/module/components/RouteEventDetail.js +2 -2
  14. package/lib/module/components/RouteEventExpandedContent.js +4 -4
  15. package/lib/module/components/RouteEventItemCompact.js +3 -3
  16. package/lib/module/components/RouteEventsModalWithTabs.js +5 -5
  17. package/lib/module/components/RouteEventsTimeline.js +3 -3
  18. package/lib/module/components/RoutesSitemap.js +17 -17
  19. package/lib/module/sync/routeEventsSyncAdapter.js +34 -8
  20. package/lib/module/useNavigationStack.js +52 -15
  21. package/lib/typescript/components/NavigationStack.d.ts.map +1 -1
  22. package/lib/typescript/components/ReactNavigationRoutes.d.ts.map +1 -1
  23. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts.map +1 -1
  24. package/lib/typescript/components/RouteEventsTimeline.d.ts.map +1 -1
  25. package/lib/typescript/components/RoutesSitemap.d.ts.map +1 -1
  26. package/lib/typescript/sync/routeEventsSyncAdapter.d.ts +9 -0
  27. package/lib/typescript/sync/routeEventsSyncAdapter.d.ts.map +1 -1
  28. package/lib/typescript/useNavigationStack.d.ts +8 -0
  29. package/lib/typescript/useNavigationStack.d.ts.map +1 -1
  30. package/package.json +5 -5
@@ -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, ToolEmptyState } from "@buoy-gg/shared-ui";
12
+ import { ChevronDown, ChevronRight, InlineCopyButton, ProUpgradeModal, buoyColors, night, useSafeAreaInsets, ToolEmptyState, monoFont } 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";
@@ -412,7 +412,7 @@ const styles = StyleSheet.create({
412
412
  loadingText: {
413
413
  color: night.color.textSecondary,
414
414
  fontSize: 14,
415
- fontFamily: "monospace"
415
+ fontFamily: monoFont
416
416
  },
417
417
  errorContainer: {
418
418
  flex: 1,
@@ -424,13 +424,13 @@ const styles = StyleSheet.create({
424
424
  color: buoyColors.error,
425
425
  fontSize: 16,
426
426
  fontWeight: "600",
427
- fontFamily: "monospace",
427
+ fontFamily: monoFont,
428
428
  marginBottom: 8
429
429
  },
430
430
  errorDetail: {
431
431
  color: night.color.textSecondary,
432
432
  fontSize: 12,
433
- fontFamily: "monospace",
433
+ fontFamily: monoFont,
434
434
  textAlign: "center"
435
435
  },
436
436
  emptyContainer: {
@@ -443,13 +443,13 @@ const styles = StyleSheet.create({
443
443
  color: night.color.text,
444
444
  fontSize: 16,
445
445
  fontWeight: "600",
446
- fontFamily: "monospace",
446
+ fontFamily: monoFont,
447
447
  marginBottom: 8
448
448
  },
449
449
  emptySubtext: {
450
450
  color: night.color.textSecondary,
451
451
  fontSize: 14,
452
- fontFamily: "monospace",
452
+ fontFamily: monoFont,
453
453
  textAlign: "center"
454
454
  },
455
455
  stackScroll: {
@@ -487,7 +487,7 @@ const styles = StyleSheet.create({
487
487
  fontSize: 13,
488
488
  fontWeight: "600",
489
489
  color: night.color.text,
490
- fontFamily: "monospace",
490
+ fontFamily: monoFont,
491
491
  flex: 1
492
492
  },
493
493
  copyRouteButton: {
@@ -503,7 +503,7 @@ const styles = StyleSheet.create({
503
503
  statusBadgeText: {
504
504
  fontSize: 10,
505
505
  fontWeight: "600",
506
- fontFamily: "monospace"
506
+ fontFamily: monoFont
507
507
  },
508
508
  expandedContent: {
509
509
  paddingHorizontal: 12,
@@ -518,13 +518,13 @@ const styles = StyleSheet.create({
518
518
  detailLabel: {
519
519
  fontSize: 10,
520
520
  color: night.color.textSecondary,
521
- fontFamily: "monospace",
521
+ fontFamily: monoFont,
522
522
  marginBottom: 2
523
523
  },
524
524
  detailValue: {
525
525
  fontSize: 12,
526
526
  color: night.color.text,
527
- fontFamily: "monospace"
527
+ fontFamily: monoFont
528
528
  },
529
529
  dataViewerContainer: {
530
530
  marginTop: 4,
@@ -553,7 +553,7 @@ const styles = StyleSheet.create({
553
553
  fontSize: 12,
554
554
  fontWeight: "600",
555
555
  color: night.color.text,
556
- fontFamily: "monospace"
556
+ fontFamily: monoFont
557
557
  },
558
558
  actionButtonTextDisabled: {
559
559
  color: night.color.textTertiary
@@ -561,7 +561,7 @@ const styles = StyleSheet.create({
561
561
  helpText: {
562
562
  fontSize: 9,
563
563
  color: night.color.textSecondary,
564
- fontFamily: "monospace",
564
+ fontFamily: monoFont,
565
565
  textAlign: "center",
566
566
  marginTop: 4,
567
567
  lineHeight: 12
@@ -18,7 +18,7 @@ import { getCommonActions, useSafeNavigationContainerRef } from "../utils/safeRe
18
18
  // (useSafeNavigationContainerRef then yields undefined, so the dispatch
19
19
  // paths below never execute).
20
20
  const CommonActions = getCommonActions();
21
- import { Search, ChevronDown, ChevronRight, InlineCopyButton, ToolbarCopyButton, RefreshCw, ProUpgradeModal, buoyColors, night } from "@buoy-gg/shared-ui";
21
+ import { Search, ChevronDown, ChevronRight, InlineCopyButton, ToolbarCopyButton, RefreshCw, ProUpgradeModal, buoyColors, night, monoFont } from "@buoy-gg/shared-ui";
22
22
  import { useIsPro } from "@buoy-gg/license";
23
23
 
24
24
  // ============================================================================
@@ -546,12 +546,12 @@ const styles = StyleSheet.create({
546
546
  emptyText: {
547
547
  color: night.color.textSecondary,
548
548
  fontSize: 14,
549
- fontFamily: "monospace"
549
+ fontFamily: monoFont
550
550
  },
551
551
  emptySubtext: {
552
552
  color: night.color.textTertiary,
553
553
  fontSize: 12,
554
- fontFamily: "monospace",
554
+ fontFamily: monoFont,
555
555
  marginTop: 8
556
556
  },
557
557
  header: {
@@ -589,7 +589,7 @@ const styles = StyleSheet.create({
589
589
  actionLabel: {
590
590
  fontSize: 8,
591
591
  color: night.color.textTertiary,
592
- fontFamily: "monospace",
592
+ fontFamily: monoFont,
593
593
  textTransform: "uppercase",
594
594
  letterSpacing: 0.5
595
595
  },
@@ -616,13 +616,13 @@ const styles = StyleSheet.create({
616
616
  fontSize: 18,
617
617
  fontWeight: "800",
618
618
  color: night.color.text,
619
- fontFamily: "monospace"
619
+ fontFamily: monoFont
620
620
  },
621
621
  statLabel: {
622
622
  fontSize: 10,
623
623
  color: night.color.textTertiary,
624
624
  marginTop: 4,
625
- fontFamily: "monospace",
625
+ fontFamily: monoFont,
626
626
  textTransform: "uppercase",
627
627
  letterSpacing: 0.5
628
628
  },
@@ -638,7 +638,7 @@ const styles = StyleSheet.create({
638
638
  flex: 1,
639
639
  color: night.color.text,
640
640
  fontSize: 14,
641
- fontFamily: "monospace"
641
+ fontFamily: monoFont
642
642
  },
643
643
  clearButton: {
644
644
  padding: 4
@@ -655,7 +655,7 @@ const styles = StyleSheet.create({
655
655
  color: night.color.accent,
656
656
  fontSize: 14,
657
657
  fontWeight: "600",
658
- fontFamily: "monospace"
658
+ fontFamily: monoFont
659
659
  },
660
660
  scrollView: {
661
661
  flex: 1
@@ -677,7 +677,7 @@ const styles = StyleSheet.create({
677
677
  metaText: {
678
678
  fontSize: 12,
679
679
  color: night.color.textSecondary,
680
- fontFamily: "monospace"
680
+ fontFamily: monoFont
681
681
  },
682
682
  sourceBadge: {
683
683
  paddingHorizontal: 8,
@@ -691,7 +691,7 @@ const styles = StyleSheet.create({
691
691
  fontSize: 11,
692
692
  color: night.color.textSecondary,
693
693
  textTransform: "capitalize",
694
- fontFamily: "monospace"
694
+ fontFamily: monoFont
695
695
  },
696
696
  groupContainer: {
697
697
  marginVertical: 4
@@ -716,7 +716,7 @@ const styles = StyleSheet.create({
716
716
  fontSize: 12,
717
717
  fontWeight: "700",
718
718
  color: night.color.text,
719
- fontFamily: "monospace",
719
+ fontFamily: monoFont,
720
720
  textTransform: "uppercase",
721
721
  letterSpacing: 0.8
722
722
  },
@@ -735,7 +735,7 @@ const styles = StyleSheet.create({
735
735
  fontSize: 11,
736
736
  fontWeight: "600",
737
737
  color: "#3B82F6",
738
- fontFamily: "monospace"
738
+ fontFamily: monoFont
739
739
  },
740
740
  screensList: {
741
741
  // Transparent so the night sheet's star field shows through.
@@ -752,7 +752,7 @@ const styles = StyleSheet.create({
752
752
  groupDescriptionText: {
753
753
  fontSize: 11,
754
754
  color: night.color.textSecondary,
755
- fontFamily: "monospace",
755
+ fontFamily: monoFont,
756
756
  lineHeight: 16
757
757
  },
758
758
  screenItem: {
@@ -791,7 +791,7 @@ const styles = StyleSheet.create({
791
791
  fontSize: 13,
792
792
  fontWeight: "600",
793
793
  color: night.color.text,
794
- fontFamily: "monospace",
794
+ fontFamily: monoFont,
795
795
  flex: 1
796
796
  },
797
797
  screenHeaderActions: {
@@ -808,7 +808,7 @@ const styles = StyleSheet.create({
808
808
  statusText: {
809
809
  fontSize: 10,
810
810
  fontWeight: "600",
811
- fontFamily: "monospace"
811
+ fontFamily: monoFont
812
812
  },
813
813
  headerActionButton: {
814
814
  padding: 6,
@@ -826,7 +826,7 @@ const styles = StyleSheet.create({
826
826
  navigateButtonText: {
827
827
  fontSize: 12,
828
828
  color: night.color.accent,
829
- fontFamily: "monospace",
829
+ fontFamily: monoFont,
830
830
  fontWeight: "600"
831
831
  }
832
832
  });
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import { View, Text, StyleSheet, TouchableOpacity, ScrollView } from "react-native";
13
- import { Navigation, night } from "@buoy-gg/shared-ui";
13
+ import { Navigation, night, monoFont } from "@buoy-gg/shared-ui";
14
14
  import { RouteEventExpandedContent } from "./RouteEventExpandedContent";
15
15
  import { getRouteTemplate } from "../utils/routeTemplate";
16
16
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -86,7 +86,7 @@ const styles = StyleSheet.create({
86
86
  fontWeight: "600",
87
87
  // Ink on a filled accent surface — the night accent takes dark ink.
88
88
  color: night.color.onAccent,
89
- fontFamily: "monospace",
89
+ fontFamily: monoFont,
90
90
  textTransform: "uppercase",
91
91
  letterSpacing: 0.5
92
92
  }
@@ -10,7 +10,7 @@
10
10
  */
11
11
 
12
12
  import { View, Text, StyleSheet } from "react-native";
13
- import { InlineCopyButton, night } from "@buoy-gg/shared-ui";
13
+ import { InlineCopyButton, night, monoFont } from "@buoy-gg/shared-ui";
14
14
  import { DataViewer } from "@buoy-gg/shared-ui/dataViewer";
15
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
16
  // Format duration in milliseconds to human-readable string
@@ -168,14 +168,14 @@ const styles = StyleSheet.create({
168
168
  detailLabel: {
169
169
  fontSize: 10,
170
170
  color: night.color.textSecondary,
171
- fontFamily: "monospace",
171
+ fontFamily: monoFont,
172
172
  fontWeight: "600",
173
173
  minWidth: 70
174
174
  },
175
175
  detailValue: {
176
176
  fontSize: 11,
177
177
  color: night.color.text,
178
- fontFamily: "monospace",
178
+ fontFamily: monoFont,
179
179
  flex: 1
180
180
  },
181
181
  copyButton: {
@@ -194,7 +194,7 @@ const styles = StyleSheet.create({
194
194
  dataViewerTitle: {
195
195
  fontSize: 11,
196
196
  color: night.color.textSecondary,
197
- fontFamily: "monospace",
197
+ fontFamily: monoFont,
198
198
  fontWeight: "600"
199
199
  }
200
200
  });
@@ -8,7 +8,7 @@
8
8
 
9
9
  import { memo, useMemo } from "react";
10
10
  import { View, Text, TouchableOpacity, StyleSheet } from "react-native";
11
- import { CompactRow, RelativeTime, buoyColors, night } from "@buoy-gg/shared-ui";
11
+ import { CompactRow, RelativeTime, buoyColors, night, monoFont } from "@buoy-gg/shared-ui";
12
12
  import { RouteEventExpandedContent } from "./RouteEventExpandedContent";
13
13
  import { getRouteTemplate } from "../utils/routeTemplate";
14
14
  import { eventRowTestID } from "../utils/testIDs";
@@ -187,7 +187,7 @@ const styles = StyleSheet.create({
187
187
  badgeText: {
188
188
  fontSize: 11,
189
189
  fontWeight: "600",
190
- fontFamily: "monospace"
190
+ fontFamily: monoFont
191
191
  },
192
192
  goButton: {
193
193
  backgroundColor: night.color.accent,
@@ -200,6 +200,6 @@ const styles = StyleSheet.create({
200
200
  fontWeight: "600",
201
201
  // Ink on a filled accent surface — the night accent takes dark ink.
202
202
  color: night.color.onAccent,
203
- fontFamily: "monospace"
203
+ fontFamily: monoFont
204
204
  }
205
205
  });
@@ -8,7 +8,7 @@ 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, ToolEmptyState, resolveListEmptyState, usePersistedState } from "@buoy-gg/shared-ui";
11
+ import { useSafeRouter, isExpoRouterAvailable, windowDragProps, ToolEmptyState, resolveListEmptyState, usePersistedState, monoFont } from "@buoy-gg/shared-ui";
12
12
  import { JsModal, ModalHeader, TabSelector, formatRelativeTime, devToolsStorageKeys, Trash2, Filter, SearchBar, ToolbarCopyButton, Lock, ProUpgradeModal, PowerToggleButton, buoyColors, night, TickProvider, useLimit } from "@buoy-gg/shared-ui";
13
13
  import { useIsPro } from "@buoy-gg/license";
14
14
 
@@ -643,7 +643,7 @@ const styles = StyleSheet.create({
643
643
  fontWeight: "600",
644
644
  marginTop: 16,
645
645
  marginBottom: 8,
646
- fontFamily: "monospace",
646
+ fontFamily: monoFont,
647
647
  letterSpacing: 0.5,
648
648
  textTransform: "uppercase"
649
649
  },
@@ -651,7 +651,7 @@ const styles = StyleSheet.create({
651
651
  color: night.color.textSecondary,
652
652
  fontSize: 14,
653
653
  textAlign: "center",
654
- fontFamily: "monospace"
654
+ fontFamily: monoFont
655
655
  },
656
656
  contentWrapper: {
657
657
  flex: 1
@@ -666,7 +666,7 @@ const styles = StyleSheet.create({
666
666
  statsText: {
667
667
  fontSize: 11,
668
668
  color: night.color.textSecondary,
669
- fontFamily: "monospace",
669
+ fontFamily: monoFont,
670
670
  textAlign: "center"
671
671
  },
672
672
  statsWarning: {
@@ -696,7 +696,7 @@ const styles = StyleSheet.create({
696
696
  fontSize: 12,
697
697
  fontWeight: "600",
698
698
  color: night.color.warning,
699
- fontFamily: "monospace"
699
+ fontFamily: monoFont
700
700
  },
701
701
  lockedEventsBannerSubtext: {
702
702
  fontSize: 11,
@@ -12,7 +12,7 @@
12
12
 
13
13
  import { useCallback } from "react";
14
14
  import { View, Text, FlatList, StyleSheet } from "react-native";
15
- import { Navigation, night, EVENT_LIST_PRESET } from "@buoy-gg/shared-ui";
15
+ import { Navigation, night, EVENT_LIST_PRESET, monoFont } from "@buoy-gg/shared-ui";
16
16
  import { RouteEventItemCompact } from "./RouteEventItemCompact";
17
17
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
18
  export function RouteEventsTimeline({
@@ -90,7 +90,7 @@ const styles = StyleSheet.create({
90
90
  fontWeight: "600",
91
91
  marginTop: 16,
92
92
  marginBottom: 8,
93
- fontFamily: "monospace",
93
+ fontFamily: monoFont,
94
94
  letterSpacing: 0.5,
95
95
  textTransform: "uppercase"
96
96
  },
@@ -98,6 +98,6 @@ const styles = StyleSheet.create({
98
98
  color: night.color.textSecondary,
99
99
  fontSize: 14,
100
100
  textAlign: "center",
101
- fontFamily: "monospace"
101
+ fontFamily: monoFont
102
102
  }
103
103
  });
@@ -12,7 +12,7 @@
12
12
  */
13
13
 
14
14
  import { useState, useCallback, useMemo, useEffect } from "react";
15
- import { night, ToolEmptyState } from "@buoy-gg/shared-ui";
15
+ import { night, ToolEmptyState, monoFont } 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";
@@ -685,7 +685,7 @@ const styles = StyleSheet.create({
685
685
  loadingText: {
686
686
  color: night.color.textSecondary,
687
687
  fontSize: 14,
688
- fontFamily: "monospace",
688
+ fontFamily: monoFont,
689
689
  textAlign: "center",
690
690
  lineHeight: 20,
691
691
  paddingHorizontal: 32,
@@ -726,13 +726,13 @@ const styles = StyleSheet.create({
726
726
  fontSize: 18,
727
727
  fontWeight: "800",
728
728
  color: night.color.text,
729
- fontFamily: "monospace"
729
+ fontFamily: monoFont
730
730
  },
731
731
  statLabel: {
732
732
  fontSize: 10,
733
733
  color: night.color.textTertiary,
734
734
  marginTop: 4,
735
- fontFamily: "monospace",
735
+ fontFamily: monoFont,
736
736
  textTransform: "uppercase",
737
737
  letterSpacing: 0.5
738
738
  },
@@ -771,7 +771,7 @@ const styles = StyleSheet.create({
771
771
  actionLabel: {
772
772
  fontSize: 8,
773
773
  color: night.color.textTertiary,
774
- fontFamily: "monospace",
774
+ fontFamily: monoFont,
775
775
  textTransform: "uppercase",
776
776
  letterSpacing: 0.5
777
777
  },
@@ -795,7 +795,7 @@ const styles = StyleSheet.create({
795
795
  metaText: {
796
796
  fontSize: 12,
797
797
  color: night.color.textSecondary,
798
- fontFamily: "monospace"
798
+ fontFamily: monoFont
799
799
  },
800
800
  sourceBadge: {
801
801
  paddingHorizontal: 8,
@@ -809,7 +809,7 @@ const styles = StyleSheet.create({
809
809
  fontSize: 11,
810
810
  color: night.color.textSecondary,
811
811
  textTransform: "capitalize",
812
- fontFamily: "monospace"
812
+ fontFamily: monoFont
813
813
  },
814
814
  searchContainer: {
815
815
  flexDirection: "row",
@@ -823,7 +823,7 @@ const styles = StyleSheet.create({
823
823
  flex: 1,
824
824
  color: night.color.text,
825
825
  fontSize: 14,
826
- fontFamily: "monospace"
826
+ fontFamily: monoFont
827
827
  },
828
828
  clearButton: {
829
829
  padding: 4
@@ -840,7 +840,7 @@ const styles = StyleSheet.create({
840
840
  color: night.color.accent,
841
841
  fontSize: 14,
842
842
  fontWeight: "600",
843
- fontFamily: "monospace"
843
+ fontFamily: monoFont
844
844
  },
845
845
  scrollView: {
846
846
  flex: 1
@@ -855,7 +855,7 @@ const styles = StyleSheet.create({
855
855
  emptyText: {
856
856
  color: night.color.textSecondary,
857
857
  fontSize: 14,
858
- fontFamily: "monospace"
858
+ fontFamily: monoFont
859
859
  },
860
860
  groupContainer: {
861
861
  marginVertical: 4
@@ -880,7 +880,7 @@ const styles = StyleSheet.create({
880
880
  fontSize: 12,
881
881
  fontWeight: "700",
882
882
  color: night.color.text,
883
- fontFamily: "monospace",
883
+ fontFamily: monoFont,
884
884
  textTransform: "uppercase",
885
885
  letterSpacing: 0.8
886
886
  },
@@ -899,7 +899,7 @@ const styles = StyleSheet.create({
899
899
  fontSize: 11,
900
900
  fontWeight: "600",
901
901
  color: "#3B82F6",
902
- fontFamily: "monospace"
902
+ fontFamily: monoFont
903
903
  },
904
904
  routesList: {
905
905
  // Transparent so the night sheet's star field shows through.
@@ -916,7 +916,7 @@ const styles = StyleSheet.create({
916
916
  groupDescriptionText: {
917
917
  fontSize: 11,
918
918
  color: night.color.textSecondary,
919
- fontFamily: "monospace",
919
+ fontFamily: monoFont,
920
920
  lineHeight: 16
921
921
  },
922
922
  routeItem: {
@@ -959,7 +959,7 @@ const styles = StyleSheet.create({
959
959
  fontSize: 13,
960
960
  fontWeight: "600",
961
961
  color: night.color.text,
962
- fontFamily: "monospace",
962
+ fontFamily: monoFont,
963
963
  flex: 1
964
964
  },
965
965
  routeHeaderActions: {
@@ -982,7 +982,7 @@ const styles = StyleSheet.create({
982
982
  fontSize: 11,
983
983
  fontWeight: "600",
984
984
  color: night.color.textSecondary,
985
- fontFamily: "monospace"
985
+ fontFamily: monoFont
986
986
  },
987
987
  typeTag: {
988
988
  borderRadius: 4,
@@ -993,7 +993,7 @@ const styles = StyleSheet.create({
993
993
  typeText: {
994
994
  fontSize: 10,
995
995
  fontWeight: "600",
996
- fontFamily: "monospace"
996
+ fontFamily: monoFont
997
997
  },
998
998
  // Compact icon-sized Copy button in the header action cluster.
999
999
  iconAction: {
@@ -1020,7 +1020,7 @@ const styles = StyleSheet.create({
1020
1020
  goButtonText: {
1021
1021
  fontSize: 12,
1022
1022
  color: night.color.accent,
1023
- fontFamily: "monospace",
1023
+ fontFamily: monoFont,
1024
1024
  fontWeight: "600"
1025
1025
  },
1026
1026
  childrenContainer: {
@@ -129,7 +129,21 @@ export const routeEventsSyncAdapter = {
129
129
  // BaseEventStore is newest-FIRST, and the store only captures while
130
130
  // something is subscribed.
131
131
  const latest = routeEventStore.getEvents()[0];
132
- if (latest) {
132
+
133
+ /**
134
+ * A RECORDED event only wins while the recorder is running.
135
+ *
136
+ * The store starts capturing when its first subscriber arrives and stops
137
+ * with the last one, so an app with Ask Buoy on the phone and no
138
+ * dashboard attached has NO route events at all — the stack fallback
139
+ * below is its normal path, not the fresh-launch edge case this code was
140
+ * written for. Worse, events left over from a closed capture window are
141
+ * stale the moment the user navigates again: a live QA session read
142
+ * `/(tabs)/menu` from an event six scenarios after the app had moved to
143
+ * `/cart`. The live stack cannot be stale, so it wins whenever nothing
144
+ * is recording.
145
+ */
146
+ if (latest && routeEventStore.isCapturing()) {
133
147
  return {
134
148
  path: latest.pathname,
135
149
  params: toWireParams(latest.params),
@@ -137,13 +151,12 @@ export const routeEventsSyncAdapter = {
137
151
  source: "event"
138
152
  };
139
153
  }
140
- // Nothing has navigated yet — which is exactly the state a freshly
141
- // launched app is in, and exactly when a macro recorder needs to know
142
- // where it is starting from. The live stack knows even when the history
143
- // is empty, so falling back to it is the difference between a macro that
144
- // can run from anywhere and one that only works if you happen to be on
145
- // the screen it was recorded from.
146
- const focused = navigationStackStore.getStack().find(item => item.isFocused) ?? navigationStackStore.getStack().slice(-1)[0];
154
+
155
+ // The live stack knows even when the history is empty, which is the
156
+ // difference between a macro that can run from anywhere and one that
157
+ // only works if you happen to be on the screen it was recorded from.
158
+ const stack = navigationStackStore.getStack();
159
+ const focused = stack.find(item => item.isFocused) ?? stack[stack.length - 1];
147
160
  if (focused?.pathname) {
148
161
  return {
149
162
  path: focused.pathname,
@@ -152,6 +165,19 @@ export const routeEventsSyncAdapter = {
152
165
  source: "stack"
153
166
  };
154
167
  }
168
+
169
+ // No live stack (no <RouteTracker/>) and the recorder is off: an old
170
+ // event is all there is. Say that it may be stale rather than passing it
171
+ // off as where the app is.
172
+ if (latest) {
173
+ return {
174
+ path: latest.pathname,
175
+ params: toWireParams(latest.params),
176
+ at: latest.timestamp,
177
+ source: "event",
178
+ stale: true
179
+ };
180
+ }
155
181
  return {
156
182
  path: null,
157
183
  params: {},