@buoy-gg/route-events 7.0.26 → 7.0.28
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/lib/commonjs/RouteParser.js +8 -4
- package/lib/commonjs/components/NavigationStack.js +19 -18
- package/lib/commonjs/components/ReactNavigationRoutes.js +108 -106
- package/lib/commonjs/components/RouteEventDetail.js +9 -6
- package/lib/commonjs/components/RouteEventExpandedContent.js +3 -3
- package/lib/commonjs/components/RouteEventItemCompact.js +5 -4
- package/lib/commonjs/components/RouteEventsModalWithTabs.js +48 -25
- package/lib/commonjs/components/RouteEventsTimeline.js +3 -3
- package/lib/commonjs/components/RoutesSitemap.js +129 -129
- package/lib/commonjs/sync/routeEventsSyncAdapter.js +9 -3
- package/lib/commonjs/useNavigationStack.js +4 -5
- package/lib/commonjs/useRouteObserverReactNavigation.js +1 -5
- package/lib/commonjs/utils/safeReactNavigation.js +62 -6
- package/lib/module/RouteParser.js +8 -4
- package/lib/module/components/NavigationStack.js +20 -19
- package/lib/module/components/ReactNavigationRoutes.js +111 -109
- package/lib/module/components/RouteEventDetail.js +10 -7
- package/lib/module/components/RouteEventExpandedContent.js +4 -4
- package/lib/module/components/RouteEventItemCompact.js +6 -5
- package/lib/module/components/RouteEventsModalWithTabs.js +51 -28
- package/lib/module/components/RouteEventsTimeline.js +4 -4
- package/lib/module/components/RoutesSitemap.js +131 -131
- package/lib/module/sync/routeEventsSyncAdapter.js +9 -3
- package/lib/module/useNavigationStack.js +6 -7
- package/lib/module/useRouteObserverReactNavigation.js +3 -7
- package/lib/module/utils/safeReactNavigation.js +62 -6
- package/lib/typescript/RouteParser.d.ts.map +1 -1
- package/lib/typescript/components/NavigationStack.d.ts.map +1 -1
- package/lib/typescript/components/ReactNavigationRoutes.d.ts.map +1 -1
- package/lib/typescript/components/RouteEventsModalWithTabs.d.ts +7 -0
- package/lib/typescript/components/RouteEventsModalWithTabs.d.ts.map +1 -1
- package/lib/typescript/components/RoutesSitemap.d.ts.map +1 -1
- package/lib/typescript/sync/routeEventsSyncAdapter.d.ts +1 -0
- package/lib/typescript/sync/routeEventsSyncAdapter.d.ts.map +1 -1
- package/lib/typescript/useNavigationStack.d.ts.map +1 -1
- package/lib/typescript/useRouteObserverReactNavigation.d.ts.map +1 -1
- package/lib/typescript/utils/safeReactNavigation.d.ts +6 -5
- package/lib/typescript/utils/safeReactNavigation.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -38,11 +38,11 @@ function getRouteTypeColor(routeType) {
|
|
|
38
38
|
case "home":
|
|
39
39
|
return _sharedUi.buoyColors.success;
|
|
40
40
|
case "dynamic":
|
|
41
|
-
return _sharedUi.
|
|
41
|
+
return _sharedUi.night.color.accent;
|
|
42
42
|
case "with-params":
|
|
43
43
|
return _sharedUi.buoyColors.warning;
|
|
44
44
|
default:
|
|
45
|
-
return _sharedUi.
|
|
45
|
+
return _sharedUi.night.color.textSecondary;
|
|
46
46
|
// More visible than border color
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -180,7 +180,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
180
180
|
fontFamily: "monospace"
|
|
181
181
|
},
|
|
182
182
|
goButton: {
|
|
183
|
-
backgroundColor: _sharedUi.
|
|
183
|
+
backgroundColor: _sharedUi.night.color.accent,
|
|
184
184
|
paddingHorizontal: 8,
|
|
185
185
|
paddingVertical: 4,
|
|
186
186
|
borderRadius: 4
|
|
@@ -188,7 +188,8 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
188
188
|
goButtonText: {
|
|
189
189
|
fontSize: 10,
|
|
190
190
|
fontWeight: "600",
|
|
191
|
-
|
|
191
|
+
// Ink on a filled accent surface — the night accent takes dark ink.
|
|
192
|
+
color: _sharedUi.night.color.onAccent,
|
|
192
193
|
fontFamily: "monospace"
|
|
193
194
|
}
|
|
194
195
|
});
|
|
@@ -18,11 +18,10 @@ var _ReactNavigationRoutes = require("./ReactNavigationRoutes");
|
|
|
18
18
|
var _NavigationStack = require("./NavigationStack");
|
|
19
19
|
var _RouteEventsTimeline = require("./RouteEventsTimeline");
|
|
20
20
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
-
// Resolved once at module load; null when
|
|
22
|
-
// (
|
|
23
|
-
//
|
|
21
|
+
// Resolved once at module load; null when React Navigation is absent
|
|
22
|
+
// (useSafeNavigationContainerRef then yields undefined, so the dispatch
|
|
23
|
+
// paths below never execute).
|
|
24
24
|
const CommonActions = (0, _safeReactNavigation.getCommonActions)();
|
|
25
|
-
const NavigationContainerRefContext = (0, _safeReactNavigation.getNavigationContainerRefContext)();
|
|
26
25
|
|
|
27
26
|
// Free tier limit for route events
|
|
28
27
|
|
|
@@ -84,7 +83,7 @@ function RouteEventsModalWithTabs({
|
|
|
84
83
|
remote
|
|
85
84
|
}) {
|
|
86
85
|
const router = (0, _sharedUi.useSafeRouter)();
|
|
87
|
-
const containerRef = (0,
|
|
86
|
+
const containerRef = (0, _safeReactNavigation.useSafeNavigationContainerRef)();
|
|
88
87
|
const hasExpoRouter = (0, _sharedUi.isExpoRouterAvailable)();
|
|
89
88
|
const [activeTab, setActiveTab] = (0, _react.useState)("events");
|
|
90
89
|
const [showUpgradeModal, setShowUpgradeModal] = (0, _react.useState)(false);
|
|
@@ -138,6 +137,19 @@ function RouteEventsModalWithTabs({
|
|
|
138
137
|
}, []);
|
|
139
138
|
const handleNavigate = (0, _react.useCallback)(pathname => {
|
|
140
139
|
try {
|
|
140
|
+
// A remote host (Buoy Desktop) means the events belong to a synced
|
|
141
|
+
// device — this process has no router, so delegate over the socket.
|
|
142
|
+
// Same Pro gate as remote sitemap navigation: Home stays free so a
|
|
143
|
+
// free user can always get the device back to a known screen.
|
|
144
|
+
if (remote) {
|
|
145
|
+
if (!remote.onNavigatePath) return;
|
|
146
|
+
if (!isPro && pathname !== "/") {
|
|
147
|
+
setShowUpgradeModal(true);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
remote.onNavigatePath(pathname);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
141
153
|
if (hasExpoRouter) {
|
|
142
154
|
router.push(pathname);
|
|
143
155
|
} else if (containerRef) {
|
|
@@ -161,11 +173,15 @@ function RouteEventsModalWithTabs({
|
|
|
161
173
|
containerRef.dispatch(CommonActions.navigate({
|
|
162
174
|
name: screenName
|
|
163
175
|
}));
|
|
176
|
+
} else {
|
|
177
|
+
// Neither Expo Router nor a navigation container — say so instead
|
|
178
|
+
// of swallowing the tap.
|
|
179
|
+
_reactNative.Alert.alert("Navigation Unavailable", "No Expo Router or React Navigation container was found in this app.");
|
|
164
180
|
}
|
|
165
181
|
} catch (error) {
|
|
166
182
|
_reactNative.Alert.alert("Navigation Error", String(error));
|
|
167
183
|
}
|
|
168
|
-
}, [router, containerRef, hasExpoRouter]);
|
|
184
|
+
}, [router, containerRef, hasExpoRouter, remote, isPro]);
|
|
169
185
|
|
|
170
186
|
// Load persisted tab state on mount
|
|
171
187
|
(0, _react.useEffect)(() => {
|
|
@@ -446,7 +462,7 @@ function RouteEventsModalWithTabs({
|
|
|
446
462
|
style: styles.emptyState,
|
|
447
463
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Navigation, {
|
|
448
464
|
size: 48,
|
|
449
|
-
color: _sharedUi.
|
|
465
|
+
color: _sharedUi.night.color.textTertiary
|
|
450
466
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
451
467
|
style: styles.emptyTitle,
|
|
452
468
|
children: searchQuery.trim() ? "No matching events" : isListening ? "No route events yet" : "Event listener is paused"
|
|
@@ -472,7 +488,7 @@ function RouteEventsModalWithTabs({
|
|
|
472
488
|
style: styles.lockedEventsBanner,
|
|
473
489
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Lock, {
|
|
474
490
|
size: 14,
|
|
475
|
-
color: _sharedUi.
|
|
491
|
+
color: _sharedUi.night.color.warning
|
|
476
492
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
477
493
|
style: styles.lockedEventsBannerText,
|
|
478
494
|
children: [lockedEventCount, " older ", lockedEventCount === 1 ? 'event' : 'events', " locked"]
|
|
@@ -547,7 +563,7 @@ function RouteEventsModalWithTabs({
|
|
|
547
563
|
style: [styles.iconButton, ignoredPatterns.size > 0 && styles.activeFilterButton],
|
|
548
564
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
|
|
549
565
|
size: 14,
|
|
550
|
-
color: ignoredPatterns.size > 0 ? _sharedUi.
|
|
566
|
+
color: ignoredPatterns.size > 0 ? _sharedUi.night.color.accent : _sharedUi.night.color.textSecondary
|
|
551
567
|
})
|
|
552
568
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.PowerToggleButton, {
|
|
553
569
|
isEnabled: isListening,
|
|
@@ -558,7 +574,7 @@ function RouteEventsModalWithTabs({
|
|
|
558
574
|
style: styles.iconButton,
|
|
559
575
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Trash2, {
|
|
560
576
|
size: 14,
|
|
561
|
-
color: _sharedUi.
|
|
577
|
+
color: _sharedUi.night.color.danger
|
|
562
578
|
})
|
|
563
579
|
})]
|
|
564
580
|
})]
|
|
@@ -611,7 +627,11 @@ function RouteEventsModalWithTabs({
|
|
|
611
627
|
onModeChange: handleModeChange,
|
|
612
628
|
enablePersistence: true,
|
|
613
629
|
initialMode: "bottomSheet",
|
|
614
|
-
enableGlitchEffects: true
|
|
630
|
+
enableGlitchEffects: true
|
|
631
|
+
// Every screen owns its scrolling (timeline FlatList, sitemap/stack/
|
|
632
|
+
// detail/filter ScrollViews) — the default wrapper would nest them.
|
|
633
|
+
,
|
|
634
|
+
disableScrollWrapper: true,
|
|
615
635
|
styles: {},
|
|
616
636
|
footer: footerNode,
|
|
617
637
|
footerHeight: footerNode ? 68 : 0,
|
|
@@ -638,7 +658,9 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
638
658
|
inlineRoot: {
|
|
639
659
|
flex: 1,
|
|
640
660
|
minHeight: 0,
|
|
641
|
-
|
|
661
|
+
// Transparent so the desktop workbench's hoisted sky (one field spanning
|
|
662
|
+
// sidebar + panel) shows through — the shell paints its base beneath it.
|
|
663
|
+
backgroundColor: "transparent"
|
|
642
664
|
},
|
|
643
665
|
inlineHeader: {
|
|
644
666
|
paddingHorizontal: 12,
|
|
@@ -650,10 +672,10 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
650
672
|
iconButton: {
|
|
651
673
|
padding: 6,
|
|
652
674
|
borderRadius: 6,
|
|
653
|
-
backgroundColor: _sharedUi.
|
|
675
|
+
backgroundColor: _sharedUi.night.color.buttonSurface
|
|
654
676
|
},
|
|
655
677
|
activeFilterButton: {
|
|
656
|
-
backgroundColor: _sharedUi.
|
|
678
|
+
backgroundColor: _sharedUi.night.color.accentSoft
|
|
657
679
|
},
|
|
658
680
|
emptyState: {
|
|
659
681
|
flex: 1,
|
|
@@ -662,7 +684,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
662
684
|
padding: 32
|
|
663
685
|
},
|
|
664
686
|
emptyTitle: {
|
|
665
|
-
color: _sharedUi.
|
|
687
|
+
color: _sharedUi.night.color.text,
|
|
666
688
|
fontSize: 16,
|
|
667
689
|
fontWeight: "600",
|
|
668
690
|
marginTop: 16,
|
|
@@ -672,7 +694,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
672
694
|
textTransform: "uppercase"
|
|
673
695
|
},
|
|
674
696
|
emptySubtitle: {
|
|
675
|
-
color: _sharedUi.
|
|
697
|
+
color: _sharedUi.night.color.textSecondary,
|
|
676
698
|
fontSize: 14,
|
|
677
699
|
textAlign: "center",
|
|
678
700
|
fontFamily: "monospace"
|
|
@@ -683,32 +705,33 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
683
705
|
statsContainer: {
|
|
684
706
|
paddingHorizontal: 16,
|
|
685
707
|
paddingVertical: 8,
|
|
686
|
-
backgroundColor: _sharedUi.
|
|
708
|
+
backgroundColor: _sharedUi.night.color.surface,
|
|
687
709
|
borderBottomWidth: 1,
|
|
688
|
-
borderBottomColor: _sharedUi.
|
|
710
|
+
borderBottomColor: _sharedUi.night.color.border
|
|
689
711
|
},
|
|
690
712
|
statsText: {
|
|
691
713
|
fontSize: 11,
|
|
692
|
-
color: _sharedUi.
|
|
714
|
+
color: _sharedUi.night.color.textSecondary,
|
|
693
715
|
fontFamily: "monospace",
|
|
694
716
|
textAlign: "center"
|
|
695
717
|
},
|
|
696
718
|
statsWarning: {
|
|
697
|
-
color: _sharedUi.
|
|
719
|
+
color: _sharedUi.night.color.warning,
|
|
698
720
|
fontWeight: "600"
|
|
699
721
|
},
|
|
700
722
|
searchContainer: {
|
|
701
723
|
paddingHorizontal: 16,
|
|
702
724
|
paddingVertical: 8,
|
|
703
|
-
|
|
725
|
+
// Transparent so the night sheet's star field shows through.
|
|
726
|
+
backgroundColor: "transparent"
|
|
704
727
|
},
|
|
705
728
|
lockedEventsBanner: {
|
|
706
729
|
flexDirection: "row",
|
|
707
730
|
alignItems: "center",
|
|
708
731
|
gap: 8,
|
|
709
|
-
backgroundColor: _sharedUi.
|
|
732
|
+
backgroundColor: _sharedUi.night.color.warningSoft,
|
|
710
733
|
borderWidth: 1,
|
|
711
|
-
borderColor: _sharedUi.
|
|
734
|
+
borderColor: _sharedUi.night.color.warning + "30",
|
|
712
735
|
borderRadius: 8,
|
|
713
736
|
paddingVertical: 10,
|
|
714
737
|
paddingHorizontal: 14,
|
|
@@ -718,12 +741,12 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
718
741
|
lockedEventsBannerText: {
|
|
719
742
|
fontSize: 12,
|
|
720
743
|
fontWeight: "600",
|
|
721
|
-
color: _sharedUi.
|
|
744
|
+
color: _sharedUi.night.color.warning,
|
|
722
745
|
fontFamily: "monospace"
|
|
723
746
|
},
|
|
724
747
|
lockedEventsBannerSubtext: {
|
|
725
748
|
fontSize: 11,
|
|
726
|
-
color: _sharedUi.
|
|
749
|
+
color: _sharedUi.night.color.textSecondary,
|
|
727
750
|
marginLeft: "auto"
|
|
728
751
|
}
|
|
729
752
|
});
|
|
@@ -35,7 +35,7 @@ function RouteEventsTimeline({
|
|
|
35
35
|
style: styles.emptyState,
|
|
36
36
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Navigation, {
|
|
37
37
|
size: 48,
|
|
38
|
-
color: _sharedUi.
|
|
38
|
+
color: _sharedUi.night.color.textTertiary
|
|
39
39
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
40
40
|
style: styles.emptyTitle,
|
|
41
41
|
children: "No events yet"
|
|
@@ -89,7 +89,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
89
89
|
padding: 32
|
|
90
90
|
},
|
|
91
91
|
emptyTitle: {
|
|
92
|
-
color: _sharedUi.
|
|
92
|
+
color: _sharedUi.night.color.text,
|
|
93
93
|
fontSize: 16,
|
|
94
94
|
fontWeight: "600",
|
|
95
95
|
marginTop: 16,
|
|
@@ -99,7 +99,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
99
99
|
textTransform: "uppercase"
|
|
100
100
|
},
|
|
101
101
|
emptySubtitle: {
|
|
102
|
-
color: _sharedUi.
|
|
102
|
+
color: _sharedUi.night.color.textSecondary,
|
|
103
103
|
fontSize: 14,
|
|
104
104
|
textAlign: "center",
|
|
105
105
|
fontFamily: "monospace"
|