@buoy-gg/route-events 7.0.33 → 7.0.35
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/components/NavigationStack.js +11 -11
- package/lib/commonjs/components/ReactNavigationRoutes.js +15 -15
- package/lib/commonjs/components/RouteEventDetail.js +1 -1
- package/lib/commonjs/components/RouteEventExpandedContent.js +3 -3
- package/lib/commonjs/components/RouteEventItemCompact.js +2 -2
- package/lib/commonjs/components/RouteEventsModalWithTabs.js +24 -107
- package/lib/commonjs/components/RouteEventsTimeline.js +4 -13
- package/lib/commonjs/components/RoutesSitemap.js +16 -16
- package/lib/commonjs/hooks/useRouteEvents.js +12 -43
- package/lib/commonjs/preset.js +7 -21
- package/lib/module/components/NavigationStack.js +12 -12
- package/lib/module/components/ReactNavigationRoutes.js +16 -16
- package/lib/module/components/RouteEventDetail.js +2 -2
- package/lib/module/components/RouteEventExpandedContent.js +4 -4
- package/lib/module/components/RouteEventItemCompact.js +3 -3
- package/lib/module/components/RouteEventsModalWithTabs.js +26 -109
- package/lib/module/components/RouteEventsTimeline.js +5 -14
- package/lib/module/components/RoutesSitemap.js +17 -17
- package/lib/module/hooks/useRouteEvents.js +12 -43
- package/lib/module/preset.js +6 -19
- 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.map +1 -1
- package/lib/typescript/components/RouteEventsTimeline.d.ts.map +1 -1
- package/lib/typescript/components/RoutesSitemap.d.ts.map +1 -1
- package/lib/typescript/hooks/useRouteEvents.d.ts.map +1 -1
- package/lib/typescript/preset.d.ts +2 -8
- package/lib/typescript/preset.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -416,7 +416,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
416
416
|
loadingText: {
|
|
417
417
|
color: _sharedUi.night.color.textSecondary,
|
|
418
418
|
fontSize: 14,
|
|
419
|
-
fontFamily:
|
|
419
|
+
fontFamily: _sharedUi.monoFont
|
|
420
420
|
},
|
|
421
421
|
errorContainer: {
|
|
422
422
|
flex: 1,
|
|
@@ -428,13 +428,13 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
428
428
|
color: _sharedUi.buoyColors.error,
|
|
429
429
|
fontSize: 16,
|
|
430
430
|
fontWeight: "600",
|
|
431
|
-
fontFamily:
|
|
431
|
+
fontFamily: _sharedUi.monoFont,
|
|
432
432
|
marginBottom: 8
|
|
433
433
|
},
|
|
434
434
|
errorDetail: {
|
|
435
435
|
color: _sharedUi.night.color.textSecondary,
|
|
436
436
|
fontSize: 12,
|
|
437
|
-
fontFamily:
|
|
437
|
+
fontFamily: _sharedUi.monoFont,
|
|
438
438
|
textAlign: "center"
|
|
439
439
|
},
|
|
440
440
|
emptyContainer: {
|
|
@@ -447,13 +447,13 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
447
447
|
color: _sharedUi.night.color.text,
|
|
448
448
|
fontSize: 16,
|
|
449
449
|
fontWeight: "600",
|
|
450
|
-
fontFamily:
|
|
450
|
+
fontFamily: _sharedUi.monoFont,
|
|
451
451
|
marginBottom: 8
|
|
452
452
|
},
|
|
453
453
|
emptySubtext: {
|
|
454
454
|
color: _sharedUi.night.color.textSecondary,
|
|
455
455
|
fontSize: 14,
|
|
456
|
-
fontFamily:
|
|
456
|
+
fontFamily: _sharedUi.monoFont,
|
|
457
457
|
textAlign: "center"
|
|
458
458
|
},
|
|
459
459
|
stackScroll: {
|
|
@@ -491,7 +491,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
491
491
|
fontSize: 13,
|
|
492
492
|
fontWeight: "600",
|
|
493
493
|
color: _sharedUi.night.color.text,
|
|
494
|
-
fontFamily:
|
|
494
|
+
fontFamily: _sharedUi.monoFont,
|
|
495
495
|
flex: 1
|
|
496
496
|
},
|
|
497
497
|
copyRouteButton: {
|
|
@@ -507,7 +507,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
507
507
|
statusBadgeText: {
|
|
508
508
|
fontSize: 10,
|
|
509
509
|
fontWeight: "600",
|
|
510
|
-
fontFamily:
|
|
510
|
+
fontFamily: _sharedUi.monoFont
|
|
511
511
|
},
|
|
512
512
|
expandedContent: {
|
|
513
513
|
paddingHorizontal: 12,
|
|
@@ -522,13 +522,13 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
522
522
|
detailLabel: {
|
|
523
523
|
fontSize: 10,
|
|
524
524
|
color: _sharedUi.night.color.textSecondary,
|
|
525
|
-
fontFamily:
|
|
525
|
+
fontFamily: _sharedUi.monoFont,
|
|
526
526
|
marginBottom: 2
|
|
527
527
|
},
|
|
528
528
|
detailValue: {
|
|
529
529
|
fontSize: 12,
|
|
530
530
|
color: _sharedUi.night.color.text,
|
|
531
|
-
fontFamily:
|
|
531
|
+
fontFamily: _sharedUi.monoFont
|
|
532
532
|
},
|
|
533
533
|
dataViewerContainer: {
|
|
534
534
|
marginTop: 4,
|
|
@@ -557,7 +557,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
557
557
|
fontSize: 12,
|
|
558
558
|
fontWeight: "600",
|
|
559
559
|
color: _sharedUi.night.color.text,
|
|
560
|
-
fontFamily:
|
|
560
|
+
fontFamily: _sharedUi.monoFont
|
|
561
561
|
},
|
|
562
562
|
actionButtonTextDisabled: {
|
|
563
563
|
color: _sharedUi.night.color.textTertiary
|
|
@@ -565,7 +565,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
565
565
|
helpText: {
|
|
566
566
|
fontSize: 9,
|
|
567
567
|
color: _sharedUi.night.color.textSecondary,
|
|
568
|
-
fontFamily:
|
|
568
|
+
fontFamily: _sharedUi.monoFont,
|
|
569
569
|
textAlign: "center",
|
|
570
570
|
marginTop: 4,
|
|
571
571
|
lineHeight: 12
|
|
@@ -550,12 +550,12 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
550
550
|
emptyText: {
|
|
551
551
|
color: _sharedUi.night.color.textSecondary,
|
|
552
552
|
fontSize: 14,
|
|
553
|
-
fontFamily:
|
|
553
|
+
fontFamily: _sharedUi.monoFont
|
|
554
554
|
},
|
|
555
555
|
emptySubtext: {
|
|
556
556
|
color: _sharedUi.night.color.textTertiary,
|
|
557
557
|
fontSize: 12,
|
|
558
|
-
fontFamily:
|
|
558
|
+
fontFamily: _sharedUi.monoFont,
|
|
559
559
|
marginTop: 8
|
|
560
560
|
},
|
|
561
561
|
header: {
|
|
@@ -593,7 +593,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
593
593
|
actionLabel: {
|
|
594
594
|
fontSize: 8,
|
|
595
595
|
color: _sharedUi.night.color.textTertiary,
|
|
596
|
-
fontFamily:
|
|
596
|
+
fontFamily: _sharedUi.monoFont,
|
|
597
597
|
textTransform: "uppercase",
|
|
598
598
|
letterSpacing: 0.5
|
|
599
599
|
},
|
|
@@ -620,13 +620,13 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
620
620
|
fontSize: 18,
|
|
621
621
|
fontWeight: "800",
|
|
622
622
|
color: _sharedUi.night.color.text,
|
|
623
|
-
fontFamily:
|
|
623
|
+
fontFamily: _sharedUi.monoFont
|
|
624
624
|
},
|
|
625
625
|
statLabel: {
|
|
626
626
|
fontSize: 10,
|
|
627
627
|
color: _sharedUi.night.color.textTertiary,
|
|
628
628
|
marginTop: 4,
|
|
629
|
-
fontFamily:
|
|
629
|
+
fontFamily: _sharedUi.monoFont,
|
|
630
630
|
textTransform: "uppercase",
|
|
631
631
|
letterSpacing: 0.5
|
|
632
632
|
},
|
|
@@ -642,7 +642,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
642
642
|
flex: 1,
|
|
643
643
|
color: _sharedUi.night.color.text,
|
|
644
644
|
fontSize: 14,
|
|
645
|
-
fontFamily:
|
|
645
|
+
fontFamily: _sharedUi.monoFont
|
|
646
646
|
},
|
|
647
647
|
clearButton: {
|
|
648
648
|
padding: 4
|
|
@@ -659,7 +659,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
659
659
|
color: _sharedUi.night.color.accent,
|
|
660
660
|
fontSize: 14,
|
|
661
661
|
fontWeight: "600",
|
|
662
|
-
fontFamily:
|
|
662
|
+
fontFamily: _sharedUi.monoFont
|
|
663
663
|
},
|
|
664
664
|
scrollView: {
|
|
665
665
|
flex: 1
|
|
@@ -681,7 +681,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
681
681
|
metaText: {
|
|
682
682
|
fontSize: 12,
|
|
683
683
|
color: _sharedUi.night.color.textSecondary,
|
|
684
|
-
fontFamily:
|
|
684
|
+
fontFamily: _sharedUi.monoFont
|
|
685
685
|
},
|
|
686
686
|
sourceBadge: {
|
|
687
687
|
paddingHorizontal: 8,
|
|
@@ -695,7 +695,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
695
695
|
fontSize: 11,
|
|
696
696
|
color: _sharedUi.night.color.textSecondary,
|
|
697
697
|
textTransform: "capitalize",
|
|
698
|
-
fontFamily:
|
|
698
|
+
fontFamily: _sharedUi.monoFont
|
|
699
699
|
},
|
|
700
700
|
groupContainer: {
|
|
701
701
|
marginVertical: 4
|
|
@@ -720,7 +720,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
720
720
|
fontSize: 12,
|
|
721
721
|
fontWeight: "700",
|
|
722
722
|
color: _sharedUi.night.color.text,
|
|
723
|
-
fontFamily:
|
|
723
|
+
fontFamily: _sharedUi.monoFont,
|
|
724
724
|
textTransform: "uppercase",
|
|
725
725
|
letterSpacing: 0.8
|
|
726
726
|
},
|
|
@@ -739,7 +739,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
739
739
|
fontSize: 11,
|
|
740
740
|
fontWeight: "600",
|
|
741
741
|
color: "#3B82F6",
|
|
742
|
-
fontFamily:
|
|
742
|
+
fontFamily: _sharedUi.monoFont
|
|
743
743
|
},
|
|
744
744
|
screensList: {
|
|
745
745
|
// Transparent so the night sheet's star field shows through.
|
|
@@ -756,7 +756,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
756
756
|
groupDescriptionText: {
|
|
757
757
|
fontSize: 11,
|
|
758
758
|
color: _sharedUi.night.color.textSecondary,
|
|
759
|
-
fontFamily:
|
|
759
|
+
fontFamily: _sharedUi.monoFont,
|
|
760
760
|
lineHeight: 16
|
|
761
761
|
},
|
|
762
762
|
screenItem: {
|
|
@@ -795,7 +795,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
795
795
|
fontSize: 13,
|
|
796
796
|
fontWeight: "600",
|
|
797
797
|
color: _sharedUi.night.color.text,
|
|
798
|
-
fontFamily:
|
|
798
|
+
fontFamily: _sharedUi.monoFont,
|
|
799
799
|
flex: 1
|
|
800
800
|
},
|
|
801
801
|
screenHeaderActions: {
|
|
@@ -812,7 +812,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
812
812
|
statusText: {
|
|
813
813
|
fontSize: 10,
|
|
814
814
|
fontWeight: "600",
|
|
815
|
-
fontFamily:
|
|
815
|
+
fontFamily: _sharedUi.monoFont
|
|
816
816
|
},
|
|
817
817
|
headerActionButton: {
|
|
818
818
|
padding: 6,
|
|
@@ -830,7 +830,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
830
830
|
navigateButtonText: {
|
|
831
831
|
fontSize: 12,
|
|
832
832
|
color: _sharedUi.night.color.accent,
|
|
833
|
-
fontFamily:
|
|
833
|
+
fontFamily: _sharedUi.monoFont,
|
|
834
834
|
fontWeight: "600"
|
|
835
835
|
}
|
|
836
836
|
});
|
|
@@ -90,7 +90,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
90
90
|
fontWeight: "600",
|
|
91
91
|
// Ink on a filled accent surface — the night accent takes dark ink.
|
|
92
92
|
color: _sharedUi.night.color.onAccent,
|
|
93
|
-
fontFamily:
|
|
93
|
+
fontFamily: _sharedUi.monoFont,
|
|
94
94
|
textTransform: "uppercase",
|
|
95
95
|
letterSpacing: 0.5
|
|
96
96
|
}
|
|
@@ -172,14 +172,14 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
172
172
|
detailLabel: {
|
|
173
173
|
fontSize: 10,
|
|
174
174
|
color: _sharedUi.night.color.textSecondary,
|
|
175
|
-
fontFamily:
|
|
175
|
+
fontFamily: _sharedUi.monoFont,
|
|
176
176
|
fontWeight: "600",
|
|
177
177
|
minWidth: 70
|
|
178
178
|
},
|
|
179
179
|
detailValue: {
|
|
180
180
|
fontSize: 11,
|
|
181
181
|
color: _sharedUi.night.color.text,
|
|
182
|
-
fontFamily:
|
|
182
|
+
fontFamily: _sharedUi.monoFont,
|
|
183
183
|
flex: 1
|
|
184
184
|
},
|
|
185
185
|
copyButton: {
|
|
@@ -198,7 +198,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
198
198
|
dataViewerTitle: {
|
|
199
199
|
fontSize: 11,
|
|
200
200
|
color: _sharedUi.night.color.textSecondary,
|
|
201
|
-
fontFamily:
|
|
201
|
+
fontFamily: _sharedUi.monoFont,
|
|
202
202
|
fontWeight: "600"
|
|
203
203
|
}
|
|
204
204
|
});
|
|
@@ -191,7 +191,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
191
191
|
badgeText: {
|
|
192
192
|
fontSize: 11,
|
|
193
193
|
fontWeight: "600",
|
|
194
|
-
fontFamily:
|
|
194
|
+
fontFamily: _sharedUi.monoFont
|
|
195
195
|
},
|
|
196
196
|
goButton: {
|
|
197
197
|
backgroundColor: _sharedUi.night.color.accent,
|
|
@@ -204,6 +204,6 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
204
204
|
fontWeight: "600",
|
|
205
205
|
// Ink on a filled accent surface — the night accent takes dark ink.
|
|
206
206
|
color: _sharedUi.night.color.onAccent,
|
|
207
|
-
fontFamily:
|
|
207
|
+
fontFamily: _sharedUi.monoFont
|
|
208
208
|
}
|
|
209
209
|
});
|
|
@@ -25,6 +25,23 @@ const CommonActions = (0, _safeReactNavigation.getCommonActions)();
|
|
|
25
25
|
|
|
26
26
|
// Free tier limit for route events
|
|
27
27
|
|
|
28
|
+
/** Persistence recipes: the tab is stored as its bare name, the flag as "true"/"false". */
|
|
29
|
+
const TAB_PERSISTENCE = {
|
|
30
|
+
// Every tab the selector offers, including "stack": the save side has
|
|
31
|
+
// always written it, so leaving it off this list meant the Stack tab
|
|
32
|
+
// was persisted and then silently discarded on the next launch.
|
|
33
|
+
parse: raw => raw === "routes" || raw === "events" || raw === "stack" ? raw : undefined,
|
|
34
|
+
serialize: tab => tab
|
|
35
|
+
};
|
|
36
|
+
const BOOLEAN_PERSISTENCE = {
|
|
37
|
+
parse: raw => raw === "true",
|
|
38
|
+
serialize: value => value.toString()
|
|
39
|
+
};
|
|
40
|
+
const STRING_SET_PERSISTENCE = {
|
|
41
|
+
parse: raw => new Set(JSON.parse(raw)),
|
|
42
|
+
serialize: set => JSON.stringify(Array.from(set))
|
|
43
|
+
};
|
|
44
|
+
|
|
28
45
|
/**
|
|
29
46
|
* Find the path from root navigation state to a screen by name.
|
|
30
47
|
* Returns array of route names from root to the target, or null if not found.
|
|
@@ -85,7 +102,7 @@ function RouteEventsModalWithTabs({
|
|
|
85
102
|
const router = (0, _sharedUi.useSafeRouter)();
|
|
86
103
|
const containerRef = (0, _safeReactNavigation.useSafeNavigationContainerRef)();
|
|
87
104
|
const hasExpoRouter = (0, _sharedUi.isExpoRouterAvailable)();
|
|
88
|
-
const [activeTab, setActiveTab] = (0,
|
|
105
|
+
const [activeTab, setActiveTab] = (0, _sharedUi.usePersistedState)(_sharedUi.devToolsStorageKeys.routeEvents.activeTab(), "events", TAB_PERSISTENCE);
|
|
89
106
|
const [showUpgradeModal, setShowUpgradeModal] = (0, _react.useState)(false);
|
|
90
107
|
// Serialized stack reported up by NavigationStack so the copy button can live
|
|
91
108
|
// in the shared navbar.
|
|
@@ -107,7 +124,7 @@ function RouteEventsModalWithTabs({
|
|
|
107
124
|
// See the RouteTracker component export for easy setup.
|
|
108
125
|
|
|
109
126
|
// Local state to control subscription (true = subscribed, false = unsubscribed)
|
|
110
|
-
const [isListeningEnabled, setIsListeningEnabled] = (0,
|
|
127
|
+
const [isListeningEnabled, setIsListeningEnabled] = (0, _sharedUi.usePersistedState)(_sharedUi.devToolsStorageKeys.routeEvents.isMonitoring(), true, BOOLEAN_PERSISTENCE);
|
|
111
128
|
|
|
112
129
|
// Event Listener state - using centralized store via hook
|
|
113
130
|
// Pass enabled option to control subscription
|
|
@@ -127,11 +144,8 @@ function RouteEventsModalWithTabs({
|
|
|
127
144
|
const [selectedEvent, setSelectedEvent] = (0, _react.useState)(null);
|
|
128
145
|
const [selectedVisitNumber, setSelectedVisitNumber] = (0, _react.useState)(1);
|
|
129
146
|
const [searchQuery, setSearchQuery] = (0, _react.useState)("");
|
|
130
|
-
const [ignoredPatterns, setIgnoredPatterns] = (0,
|
|
147
|
+
const [ignoredPatterns, setIgnoredPatterns] = (0, _sharedUi.usePersistedState)(_sharedUi.devToolsStorageKeys.routeEvents.eventFilters(), new Set(["/_sitemap", "/api", "/__dev"]), STRING_SET_PERSISTENCE);
|
|
131
148
|
const lastEventRef = (0, _react.useRef)(null);
|
|
132
|
-
const hasLoadedFilters = (0, _react.useRef)(false);
|
|
133
|
-
const hasLoadedTabState = (0, _react.useRef)(false);
|
|
134
|
-
const hasLoadedMonitoringState = (0, _react.useRef)(false);
|
|
135
149
|
const handleModeChange = (0, _react.useCallback)(_mode => {
|
|
136
150
|
// Mode changes handled by JsModal
|
|
137
151
|
}, []);
|
|
@@ -183,103 +197,6 @@ function RouteEventsModalWithTabs({
|
|
|
183
197
|
}
|
|
184
198
|
}, [router, containerRef, hasExpoRouter, remote, isPro]);
|
|
185
199
|
|
|
186
|
-
// Load persisted tab state on mount
|
|
187
|
-
(0, _react.useEffect)(() => {
|
|
188
|
-
if (!visible || hasLoadedTabState.current) return;
|
|
189
|
-
const loadTabState = async () => {
|
|
190
|
-
try {
|
|
191
|
-
const storedTab = await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.routeEvents.activeTab());
|
|
192
|
-
// Every tab the selector offers, including "stack": the save side has
|
|
193
|
-
// always written it, so leaving it off this list meant the Stack tab
|
|
194
|
-
// was persisted and then silently discarded on the next launch —
|
|
195
|
-
// you came back to Events having chosen otherwise.
|
|
196
|
-
if (storedTab === "routes" || storedTab === "events" || storedTab === "stack") {
|
|
197
|
-
setActiveTab(storedTab);
|
|
198
|
-
}
|
|
199
|
-
hasLoadedTabState.current = true;
|
|
200
|
-
} catch (error) {
|
|
201
|
-
// Failed to load tab state
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
loadTabState();
|
|
205
|
-
}, [visible]);
|
|
206
|
-
|
|
207
|
-
// Load persisted monitoring state on mount
|
|
208
|
-
(0, _react.useEffect)(() => {
|
|
209
|
-
if (!visible || hasLoadedMonitoringState.current) return;
|
|
210
|
-
const loadMonitoringState = async () => {
|
|
211
|
-
try {
|
|
212
|
-
const storedMonitoring = await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.routeEvents.isMonitoring());
|
|
213
|
-
if (storedMonitoring !== null) {
|
|
214
|
-
const shouldMonitor = storedMonitoring === "true";
|
|
215
|
-
setIsListeningEnabled(shouldMonitor);
|
|
216
|
-
}
|
|
217
|
-
hasLoadedMonitoringState.current = true;
|
|
218
|
-
} catch (error) {
|
|
219
|
-
// Failed to load monitoring state
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
loadMonitoringState();
|
|
223
|
-
}, [visible]);
|
|
224
|
-
|
|
225
|
-
// Save tab state when it changes
|
|
226
|
-
(0, _react.useEffect)(() => {
|
|
227
|
-
if (!hasLoadedTabState.current) return;
|
|
228
|
-
const saveTabState = async () => {
|
|
229
|
-
try {
|
|
230
|
-
await _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.routeEvents.activeTab(), activeTab);
|
|
231
|
-
} catch (error) {
|
|
232
|
-
// Failed to save tab state
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
saveTabState();
|
|
236
|
-
}, [activeTab]);
|
|
237
|
-
|
|
238
|
-
// Save monitoring state when it changes
|
|
239
|
-
(0, _react.useEffect)(() => {
|
|
240
|
-
if (!hasLoadedMonitoringState.current) return;
|
|
241
|
-
const saveMonitoringState = async () => {
|
|
242
|
-
try {
|
|
243
|
-
await _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.routeEvents.isMonitoring(), isListening.toString());
|
|
244
|
-
} catch (error) {
|
|
245
|
-
// Failed to save monitoring state
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
saveMonitoringState();
|
|
249
|
-
}, [isListening]);
|
|
250
|
-
|
|
251
|
-
// Load persisted filters on mount
|
|
252
|
-
(0, _react.useEffect)(() => {
|
|
253
|
-
if (!visible || hasLoadedFilters.current) return;
|
|
254
|
-
const loadFilters = async () => {
|
|
255
|
-
try {
|
|
256
|
-
const storedFilters = await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.routeEvents.eventFilters());
|
|
257
|
-
if (storedFilters) {
|
|
258
|
-
const filters = JSON.parse(storedFilters);
|
|
259
|
-
setIgnoredPatterns(new Set(filters));
|
|
260
|
-
}
|
|
261
|
-
hasLoadedFilters.current = true;
|
|
262
|
-
} catch (error) {
|
|
263
|
-
// Failed to load filters
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
loadFilters();
|
|
267
|
-
}, [visible]);
|
|
268
|
-
|
|
269
|
-
// Save filters when they change
|
|
270
|
-
(0, _react.useEffect)(() => {
|
|
271
|
-
if (!hasLoadedFilters.current) return;
|
|
272
|
-
const saveFilters = async () => {
|
|
273
|
-
try {
|
|
274
|
-
const filters = Array.from(ignoredPatterns);
|
|
275
|
-
await _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.routeEvents.eventFilters(), JSON.stringify(filters));
|
|
276
|
-
} catch (error) {
|
|
277
|
-
// Failed to save filters
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
saveFilters();
|
|
281
|
-
}, [ignoredPatterns]);
|
|
282
|
-
|
|
283
200
|
// Event listener is now managed by useRouteEvents hook
|
|
284
201
|
|
|
285
202
|
const handleToggleListening = (0, _react.useCallback)(() => {
|
|
@@ -729,7 +646,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
729
646
|
fontWeight: "600",
|
|
730
647
|
marginTop: 16,
|
|
731
648
|
marginBottom: 8,
|
|
732
|
-
fontFamily:
|
|
649
|
+
fontFamily: _sharedUi.monoFont,
|
|
733
650
|
letterSpacing: 0.5,
|
|
734
651
|
textTransform: "uppercase"
|
|
735
652
|
},
|
|
@@ -737,7 +654,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
737
654
|
color: _sharedUi.night.color.textSecondary,
|
|
738
655
|
fontSize: 14,
|
|
739
656
|
textAlign: "center",
|
|
740
|
-
fontFamily:
|
|
657
|
+
fontFamily: _sharedUi.monoFont
|
|
741
658
|
},
|
|
742
659
|
contentWrapper: {
|
|
743
660
|
flex: 1
|
|
@@ -752,7 +669,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
752
669
|
statsText: {
|
|
753
670
|
fontSize: 11,
|
|
754
671
|
color: _sharedUi.night.color.textSecondary,
|
|
755
|
-
fontFamily:
|
|
672
|
+
fontFamily: _sharedUi.monoFont,
|
|
756
673
|
textAlign: "center"
|
|
757
674
|
},
|
|
758
675
|
statsWarning: {
|
|
@@ -782,7 +699,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
782
699
|
fontSize: 12,
|
|
783
700
|
fontWeight: "600",
|
|
784
701
|
color: _sharedUi.night.color.warning,
|
|
785
|
-
fontFamily:
|
|
702
|
+
fontFamily: _sharedUi.monoFont
|
|
786
703
|
},
|
|
787
704
|
lockedEventsBannerSubtext: {
|
|
788
705
|
fontSize: 11,
|
|
@@ -73,17 +73,8 @@ function RouteEventsTimeline({
|
|
|
73
73
|
onPress: handleItemPress,
|
|
74
74
|
onNavigate: onNavigate
|
|
75
75
|
}),
|
|
76
|
-
showsVerticalScrollIndicator: true
|
|
77
|
-
|
|
78
|
-
// screen, so the e2e bundle keeps every mounted row targetable. The
|
|
79
|
-
// env var is inlined at bundle time; guarded so a non-inlining bundler
|
|
80
|
-
// keeps production behaviour.
|
|
81
|
-
,
|
|
82
|
-
removeClippedSubviews: !(typeof process !== "undefined" && process.env?.EXPO_PUBLIC_E2E),
|
|
83
|
-
initialNumToRender: 12,
|
|
84
|
-
maxToRenderPerBatch: 8,
|
|
85
|
-
windowSize: 5,
|
|
86
|
-
updateCellsBatchingPeriod: 50
|
|
76
|
+
showsVerticalScrollIndicator: true,
|
|
77
|
+
..._sharedUi.EVENT_LIST_PRESET
|
|
87
78
|
})
|
|
88
79
|
);
|
|
89
80
|
}
|
|
@@ -103,7 +94,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
103
94
|
fontWeight: "600",
|
|
104
95
|
marginTop: 16,
|
|
105
96
|
marginBottom: 8,
|
|
106
|
-
fontFamily:
|
|
97
|
+
fontFamily: _sharedUi.monoFont,
|
|
107
98
|
letterSpacing: 0.5,
|
|
108
99
|
textTransform: "uppercase"
|
|
109
100
|
},
|
|
@@ -111,6 +102,6 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
111
102
|
color: _sharedUi.night.color.textSecondary,
|
|
112
103
|
fontSize: 14,
|
|
113
104
|
textAlign: "center",
|
|
114
|
-
fontFamily:
|
|
105
|
+
fontFamily: _sharedUi.monoFont
|
|
115
106
|
}
|
|
116
107
|
});
|
|
@@ -687,7 +687,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
687
687
|
loadingText: {
|
|
688
688
|
color: _sharedUi.night.color.textSecondary,
|
|
689
689
|
fontSize: 14,
|
|
690
|
-
fontFamily:
|
|
690
|
+
fontFamily: _sharedUi.monoFont,
|
|
691
691
|
textAlign: "center",
|
|
692
692
|
lineHeight: 20,
|
|
693
693
|
paddingHorizontal: 32,
|
|
@@ -728,13 +728,13 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
728
728
|
fontSize: 18,
|
|
729
729
|
fontWeight: "800",
|
|
730
730
|
color: _sharedUi.night.color.text,
|
|
731
|
-
fontFamily:
|
|
731
|
+
fontFamily: _sharedUi.monoFont
|
|
732
732
|
},
|
|
733
733
|
statLabel: {
|
|
734
734
|
fontSize: 10,
|
|
735
735
|
color: _sharedUi.night.color.textTertiary,
|
|
736
736
|
marginTop: 4,
|
|
737
|
-
fontFamily:
|
|
737
|
+
fontFamily: _sharedUi.monoFont,
|
|
738
738
|
textTransform: "uppercase",
|
|
739
739
|
letterSpacing: 0.5
|
|
740
740
|
},
|
|
@@ -773,7 +773,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
773
773
|
actionLabel: {
|
|
774
774
|
fontSize: 8,
|
|
775
775
|
color: _sharedUi.night.color.textTertiary,
|
|
776
|
-
fontFamily:
|
|
776
|
+
fontFamily: _sharedUi.monoFont,
|
|
777
777
|
textTransform: "uppercase",
|
|
778
778
|
letterSpacing: 0.5
|
|
779
779
|
},
|
|
@@ -797,7 +797,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
797
797
|
metaText: {
|
|
798
798
|
fontSize: 12,
|
|
799
799
|
color: _sharedUi.night.color.textSecondary,
|
|
800
|
-
fontFamily:
|
|
800
|
+
fontFamily: _sharedUi.monoFont
|
|
801
801
|
},
|
|
802
802
|
sourceBadge: {
|
|
803
803
|
paddingHorizontal: 8,
|
|
@@ -811,7 +811,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
811
811
|
fontSize: 11,
|
|
812
812
|
color: _sharedUi.night.color.textSecondary,
|
|
813
813
|
textTransform: "capitalize",
|
|
814
|
-
fontFamily:
|
|
814
|
+
fontFamily: _sharedUi.monoFont
|
|
815
815
|
},
|
|
816
816
|
searchContainer: {
|
|
817
817
|
flexDirection: "row",
|
|
@@ -825,7 +825,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
825
825
|
flex: 1,
|
|
826
826
|
color: _sharedUi.night.color.text,
|
|
827
827
|
fontSize: 14,
|
|
828
|
-
fontFamily:
|
|
828
|
+
fontFamily: _sharedUi.monoFont
|
|
829
829
|
},
|
|
830
830
|
clearButton: {
|
|
831
831
|
padding: 4
|
|
@@ -842,7 +842,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
842
842
|
color: _sharedUi.night.color.accent,
|
|
843
843
|
fontSize: 14,
|
|
844
844
|
fontWeight: "600",
|
|
845
|
-
fontFamily:
|
|
845
|
+
fontFamily: _sharedUi.monoFont
|
|
846
846
|
},
|
|
847
847
|
scrollView: {
|
|
848
848
|
flex: 1
|
|
@@ -857,7 +857,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
857
857
|
emptyText: {
|
|
858
858
|
color: _sharedUi.night.color.textSecondary,
|
|
859
859
|
fontSize: 14,
|
|
860
|
-
fontFamily:
|
|
860
|
+
fontFamily: _sharedUi.monoFont
|
|
861
861
|
},
|
|
862
862
|
groupContainer: {
|
|
863
863
|
marginVertical: 4
|
|
@@ -882,7 +882,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
882
882
|
fontSize: 12,
|
|
883
883
|
fontWeight: "700",
|
|
884
884
|
color: _sharedUi.night.color.text,
|
|
885
|
-
fontFamily:
|
|
885
|
+
fontFamily: _sharedUi.monoFont,
|
|
886
886
|
textTransform: "uppercase",
|
|
887
887
|
letterSpacing: 0.8
|
|
888
888
|
},
|
|
@@ -901,7 +901,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
901
901
|
fontSize: 11,
|
|
902
902
|
fontWeight: "600",
|
|
903
903
|
color: "#3B82F6",
|
|
904
|
-
fontFamily:
|
|
904
|
+
fontFamily: _sharedUi.monoFont
|
|
905
905
|
},
|
|
906
906
|
routesList: {
|
|
907
907
|
// Transparent so the night sheet's star field shows through.
|
|
@@ -918,7 +918,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
918
918
|
groupDescriptionText: {
|
|
919
919
|
fontSize: 11,
|
|
920
920
|
color: _sharedUi.night.color.textSecondary,
|
|
921
|
-
fontFamily:
|
|
921
|
+
fontFamily: _sharedUi.monoFont,
|
|
922
922
|
lineHeight: 16
|
|
923
923
|
},
|
|
924
924
|
routeItem: {
|
|
@@ -961,7 +961,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
961
961
|
fontSize: 13,
|
|
962
962
|
fontWeight: "600",
|
|
963
963
|
color: _sharedUi.night.color.text,
|
|
964
|
-
fontFamily:
|
|
964
|
+
fontFamily: _sharedUi.monoFont,
|
|
965
965
|
flex: 1
|
|
966
966
|
},
|
|
967
967
|
routeHeaderActions: {
|
|
@@ -984,7 +984,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
984
984
|
fontSize: 11,
|
|
985
985
|
fontWeight: "600",
|
|
986
986
|
color: _sharedUi.night.color.textSecondary,
|
|
987
|
-
fontFamily:
|
|
987
|
+
fontFamily: _sharedUi.monoFont
|
|
988
988
|
},
|
|
989
989
|
typeTag: {
|
|
990
990
|
borderRadius: 4,
|
|
@@ -995,7 +995,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
995
995
|
typeText: {
|
|
996
996
|
fontSize: 10,
|
|
997
997
|
fontWeight: "600",
|
|
998
|
-
fontFamily:
|
|
998
|
+
fontFamily: _sharedUi.monoFont
|
|
999
999
|
},
|
|
1000
1000
|
// Compact icon-sized Copy button in the header action cluster.
|
|
1001
1001
|
iconAction: {
|
|
@@ -1022,7 +1022,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
1022
1022
|
goButtonText: {
|
|
1023
1023
|
fontSize: 12,
|
|
1024
1024
|
color: _sharedUi.night.color.accent,
|
|
1025
|
-
fontFamily:
|
|
1025
|
+
fontFamily: _sharedUi.monoFont,
|
|
1026
1026
|
fontWeight: "600"
|
|
1027
1027
|
},
|
|
1028
1028
|
childrenContainer: {
|