@buoy-gg/route-events 7.0.26 → 7.0.27

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 (35) hide show
  1. package/lib/commonjs/RouteParser.js +8 -4
  2. package/lib/commonjs/components/NavigationStack.js +19 -18
  3. package/lib/commonjs/components/ReactNavigationRoutes.js +108 -106
  4. package/lib/commonjs/components/RouteEventDetail.js +9 -6
  5. package/lib/commonjs/components/RouteEventExpandedContent.js +3 -3
  6. package/lib/commonjs/components/RouteEventItemCompact.js +5 -4
  7. package/lib/commonjs/components/RouteEventsModalWithTabs.js +48 -25
  8. package/lib/commonjs/components/RouteEventsTimeline.js +3 -3
  9. package/lib/commonjs/components/RoutesSitemap.js +129 -129
  10. package/lib/commonjs/useNavigationStack.js +4 -5
  11. package/lib/commonjs/useRouteObserverReactNavigation.js +1 -5
  12. package/lib/commonjs/utils/safeReactNavigation.js +62 -6
  13. package/lib/module/RouteParser.js +8 -4
  14. package/lib/module/components/NavigationStack.js +20 -19
  15. package/lib/module/components/ReactNavigationRoutes.js +111 -109
  16. package/lib/module/components/RouteEventDetail.js +10 -7
  17. package/lib/module/components/RouteEventExpandedContent.js +4 -4
  18. package/lib/module/components/RouteEventItemCompact.js +6 -5
  19. package/lib/module/components/RouteEventsModalWithTabs.js +51 -28
  20. package/lib/module/components/RouteEventsTimeline.js +4 -4
  21. package/lib/module/components/RoutesSitemap.js +131 -131
  22. package/lib/module/useNavigationStack.js +6 -7
  23. package/lib/module/useRouteObserverReactNavigation.js +3 -7
  24. package/lib/module/utils/safeReactNavigation.js +62 -6
  25. package/lib/typescript/RouteParser.d.ts.map +1 -1
  26. package/lib/typescript/components/NavigationStack.d.ts.map +1 -1
  27. package/lib/typescript/components/ReactNavigationRoutes.d.ts.map +1 -1
  28. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts +7 -0
  29. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts.map +1 -1
  30. package/lib/typescript/components/RoutesSitemap.d.ts.map +1 -1
  31. package/lib/typescript/useNavigationStack.d.ts.map +1 -1
  32. package/lib/typescript/useRouteObserverReactNavigation.d.ts.map +1 -1
  33. package/lib/typescript/utils/safeReactNavigation.d.ts +6 -5
  34. package/lib/typescript/utils/safeReactNavigation.d.ts.map +1 -1
  35. package/package.json +5 -5
@@ -150,15 +150,19 @@ class RouteParser {
150
150
  */
151
151
  static organizeRoutes(routes) {
152
152
  const groups = [];
153
- const rootRoutes = routes.filter(r => r.depth === 0 && r.type !== 'dynamic' && r.type !== 'layout');
153
+
154
+ // Flatten before grouping, like every other bucket — static/index screens
155
+ // nested under layouts (e.g. (tabs)/about at depth 2) must still be listed,
156
+ // or the stats header counts routes the list never shows.
157
+ const staticRoutes = this.flattenRoutes(routes).filter(r => r.type === 'static' || r.type === 'index');
154
158
  const dynamicRoutes = this.flattenRoutes(routes).filter(r => r.type === 'dynamic' || r.type === 'catch-all');
155
159
  const layoutRoutes = this.flattenRoutes(routes).filter(r => r.type === 'layout');
156
160
  const groupedRoutes = this.flattenRoutes(routes).filter(r => r.type === 'group');
157
- if (rootRoutes.length > 0) {
161
+ if (staticRoutes.length > 0) {
158
162
  groups.push({
159
- title: 'Root Routes',
163
+ title: 'Static Routes',
160
164
  icon: '',
161
- routes: rootRoutes
165
+ routes: staticRoutes
162
166
  });
163
167
  }
164
168
  if (dynamicRoutes.length > 0) {
@@ -259,10 +259,10 @@ function NavigationStack({
259
259
  style: styles.expandIndicator,
260
260
  children: isExpanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
261
261
  size: 14,
262
- color: _sharedUi.buoyColors.textSecondary
262
+ color: _sharedUi.night.color.textSecondary
263
263
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
264
264
  size: 14,
265
- color: _sharedUi.buoyColors.textSecondary
265
+ color: _sharedUi.night.color.textSecondary
266
266
  })
267
267
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
268
268
  style: styles.stackItemPath,
@@ -375,7 +375,8 @@ function NavigationStack({
375
375
  const styles = _reactNative.StyleSheet.create({
376
376
  container: {
377
377
  flex: 1,
378
- backgroundColor: _sharedUi.buoyColors.base
378
+ // Transparent so JsModal's ToolBackground shows through (the modal paints opaque base beneath it).
379
+ backgroundColor: "transparent"
379
380
  },
380
381
  loadingContainer: {
381
382
  flex: 1,
@@ -384,7 +385,7 @@ const styles = _reactNative.StyleSheet.create({
384
385
  padding: 32
385
386
  },
386
387
  loadingText: {
387
- color: _sharedUi.buoyColors.textSecondary,
388
+ color: _sharedUi.night.color.textSecondary,
388
389
  fontSize: 14,
389
390
  fontFamily: "monospace"
390
391
  },
@@ -402,7 +403,7 @@ const styles = _reactNative.StyleSheet.create({
402
403
  marginBottom: 8
403
404
  },
404
405
  errorDetail: {
405
- color: _sharedUi.buoyColors.textSecondary,
406
+ color: _sharedUi.night.color.textSecondary,
406
407
  fontSize: 12,
407
408
  fontFamily: "monospace",
408
409
  textAlign: "center"
@@ -414,14 +415,14 @@ const styles = _reactNative.StyleSheet.create({
414
415
  padding: 32
415
416
  },
416
417
  emptyText: {
417
- color: _sharedUi.buoyColors.text,
418
+ color: _sharedUi.night.color.text,
418
419
  fontSize: 16,
419
420
  fontWeight: "600",
420
421
  fontFamily: "monospace",
421
422
  marginBottom: 8
422
423
  },
423
424
  emptySubtext: {
424
- color: _sharedUi.buoyColors.textSecondary,
425
+ color: _sharedUi.night.color.textSecondary,
425
426
  fontSize: 14,
426
427
  fontFamily: "monospace",
427
428
  textAlign: "center"
@@ -436,14 +437,14 @@ const styles = _reactNative.StyleSheet.create({
436
437
  marginBottom: 6
437
438
  },
438
439
  stackItem: {
439
- backgroundColor: _sharedUi.buoyColors.card,
440
+ backgroundColor: _sharedUi.night.color.surface,
440
441
  borderRadius: 6,
441
442
  borderWidth: 1,
442
- borderColor: _sharedUi.buoyColors.border,
443
+ borderColor: _sharedUi.night.color.border,
443
444
  overflow: "hidden"
444
445
  },
445
446
  stackItemSelected: {
446
- borderColor: _sharedUi.buoyColors.primary,
447
+ borderColor: _sharedUi.night.color.accent,
447
448
  borderWidth: 2
448
449
  },
449
450
  stackItemHeader: {
@@ -460,7 +461,7 @@ const styles = _reactNative.StyleSheet.create({
460
461
  stackItemPath: {
461
462
  fontSize: 13,
462
463
  fontWeight: "600",
463
- color: _sharedUi.buoyColors.text,
464
+ color: _sharedUi.night.color.text,
464
465
  fontFamily: "monospace",
465
466
  flex: 1
466
467
  },
@@ -484,20 +485,20 @@ const styles = _reactNative.StyleSheet.create({
484
485
  paddingTop: 8,
485
486
  paddingBottom: 12,
486
487
  borderTopWidth: 1,
487
- borderTopColor: _sharedUi.buoyColors.border
488
+ borderTopColor: _sharedUi.night.color.border
488
489
  },
489
490
  detailRow: {
490
491
  marginBottom: 8
491
492
  },
492
493
  detailLabel: {
493
494
  fontSize: 10,
494
- color: _sharedUi.buoyColors.textSecondary,
495
+ color: _sharedUi.night.color.textSecondary,
495
496
  fontFamily: "monospace",
496
497
  marginBottom: 2
497
498
  },
498
499
  detailValue: {
499
500
  fontSize: 12,
500
- color: _sharedUi.buoyColors.text,
501
+ color: _sharedUi.night.color.text,
501
502
  fontFamily: "monospace"
502
503
  },
503
504
  dataViewerContainer: {
@@ -514,7 +515,7 @@ const styles = _reactNative.StyleSheet.create({
514
515
  flex: 1
515
516
  },
516
517
  actionButton: {
517
- backgroundColor: _sharedUi.buoyColors.input,
518
+ backgroundColor: _sharedUi.night.color.surfaceElevated,
518
519
  paddingVertical: 8,
519
520
  paddingHorizontal: 8,
520
521
  borderRadius: 6,
@@ -526,15 +527,15 @@ const styles = _reactNative.StyleSheet.create({
526
527
  actionButtonText: {
527
528
  fontSize: 12,
528
529
  fontWeight: "600",
529
- color: _sharedUi.buoyColors.text,
530
+ color: _sharedUi.night.color.text,
530
531
  fontFamily: "monospace"
531
532
  },
532
533
  actionButtonTextDisabled: {
533
- color: _sharedUi.buoyColors.textMuted
534
+ color: _sharedUi.night.color.textTertiary
534
535
  },
535
536
  helpText: {
536
537
  fontSize: 9,
537
- color: _sharedUi.buoyColors.textSecondary,
538
+ color: _sharedUi.night.color.textSecondary,
538
539
  fontFamily: "monospace",
539
540
  textAlign: "center",
540
541
  marginTop: 4,
@@ -20,11 +20,10 @@ var _jsxRuntime = require("react/jsx-runtime");
20
20
  * Provides navigation to any discovered screen using nested screen/params actions.
21
21
  */
22
22
 
23
- // Resolved once at module load; null when @react-navigation/native is absent
24
- // (the fallback context then yields an undefined containerRef, so the
25
- // dispatch paths below never execute).
23
+ // Resolved once at module load; null when React Navigation is absent
24
+ // (useSafeNavigationContainerRef then yields undefined, so the dispatch
25
+ // paths below never execute).
26
26
  const CommonActions = (0, _safeReactNavigation.getCommonActions)();
27
- const NavigationContainerRefContext = (0, _safeReactNavigation.getNavigationContainerRefContext)();
28
27
 
29
28
  // ============================================================================
30
29
  // Types
@@ -125,7 +124,7 @@ function buildNestedNavigateAction(path) {
125
124
  function ReactNavigationRoutes({
126
125
  style
127
126
  }) {
128
- const containerRef = (0, _react.useContext)(NavigationContainerRefContext);
127
+ const containerRef = (0, _safeReactNavigation.useSafeNavigationContainerRef)();
129
128
  const [navigationState, setNavigationState] = (0, _react.useState)(() => containerRef?.getRootState?.() ?? null);
130
129
  const [searchQuery, setSearchQuery] = (0, _react.useState)("");
131
130
  const [isSearching, setIsSearching] = (0, _react.useState)(false);
@@ -279,72 +278,15 @@ function ReactNavigationRoutes({
279
278
  }
280
279
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
281
280
  style: [styles.container, style],
282
- children: [!isSearching ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
283
- style: styles.header,
284
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
285
- style: styles.actionsRow,
286
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
287
- style: styles.actionWrapper,
288
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
289
- value: copyAllData,
290
- buttonStyle: styles.actionButtonHeader
291
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
292
- style: styles.actionLabel,
293
- children: "Copy"
294
- })]
295
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
296
- style: styles.actionWrapper,
297
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
298
- style: [styles.iconButton, isRefreshing && styles.refreshButtonDisabled],
299
- onPress: handleRefresh,
300
- disabled: isRefreshing,
301
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.RefreshCw, {
302
- size: 16,
303
- color: isRefreshing ? _sharedUi.buoyColors.textMuted : _sharedUi.buoyColors.textSecondary
304
- })
305
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
306
- style: styles.actionLabel,
307
- children: "Refresh"
308
- })]
309
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
310
- style: styles.actionWrapper,
311
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
312
- style: styles.iconButton,
313
- onPress: () => setIsSearching(true),
314
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
315
- size: 16,
316
- color: _sharedUi.buoyColors.textSecondary
317
- })
318
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
319
- style: styles.actionLabel,
320
- children: "Search"
321
- })]
322
- })]
323
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
324
- style: styles.statsGrid,
325
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
326
- value: stats.total,
327
- label: "Screens"
328
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
329
- value: stats.mounted,
330
- label: "Mounted"
331
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
332
- value: stats.available,
333
- label: "Available"
334
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
335
- value: stats.navigators,
336
- label: "Navigators"
337
- })]
338
- })]
339
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
281
+ children: [isSearching && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
340
282
  style: styles.searchContainer,
341
283
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
342
284
  size: 16,
343
- color: _sharedUi.buoyColors.textMuted
285
+ color: _sharedUi.night.color.textTertiary
344
286
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
345
287
  style: styles.searchInput,
346
288
  placeholder: "Search screens...",
347
- placeholderTextColor: _sharedUi.buoyColors.textMuted,
289
+ placeholderTextColor: _sharedUi.night.color.placeholder,
348
290
  value: searchQuery,
349
291
  onChangeText: setSearchQuery,
350
292
  autoCapitalize: "none",
@@ -371,7 +313,64 @@ function ReactNavigationRoutes({
371
313
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
372
314
  style: styles.scrollView,
373
315
  contentContainerStyle: styles.scrollContent,
374
- children: [filteredGroups.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
316
+ children: [!isSearching && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
317
+ style: styles.header,
318
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
319
+ style: styles.actionsRow,
320
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
321
+ style: styles.actionWrapper,
322
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolbarCopyButton, {
323
+ value: copyAllData,
324
+ buttonStyle: styles.actionButtonHeader
325
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
326
+ style: styles.actionLabel,
327
+ children: "Copy"
328
+ })]
329
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
330
+ style: styles.actionWrapper,
331
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
332
+ style: [styles.iconButton, isRefreshing && styles.refreshButtonDisabled],
333
+ onPress: handleRefresh,
334
+ disabled: isRefreshing,
335
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.RefreshCw, {
336
+ size: 16,
337
+ color: isRefreshing ? _sharedUi.night.color.textTertiary : _sharedUi.night.color.textSecondary
338
+ })
339
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
340
+ style: styles.actionLabel,
341
+ children: "Refresh"
342
+ })]
343
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
344
+ style: styles.actionWrapper,
345
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
346
+ style: styles.iconButton,
347
+ onPress: () => setIsSearching(true),
348
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
349
+ size: 16,
350
+ color: _sharedUi.night.color.textSecondary
351
+ })
352
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
353
+ style: styles.actionLabel,
354
+ children: "Search"
355
+ })]
356
+ })]
357
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
358
+ style: styles.statsGrid,
359
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
360
+ value: stats.total,
361
+ label: "Screens"
362
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
363
+ value: stats.mounted,
364
+ label: "Mounted"
365
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
366
+ value: stats.available,
367
+ label: "Available"
368
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(StatItem, {
369
+ value: stats.navigators,
370
+ label: "Navigators"
371
+ })]
372
+ })]
373
+ }), filteredGroups.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
375
374
  style: styles.emptyState,
376
375
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
377
376
  style: styles.emptyText,
@@ -442,10 +441,10 @@ function NavigatorGroupView({
442
441
  style: styles.groupHeaderLeft,
443
442
  children: [isExpanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
444
443
  size: 14,
445
- color: _sharedUi.buoyColors.textSecondary
444
+ color: _sharedUi.night.color.textSecondary
446
445
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
447
446
  size: 14,
448
- color: _sharedUi.buoyColors.textSecondary
447
+ color: _sharedUi.night.color.textSecondary
449
448
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
450
449
  style: styles.groupTitle,
451
450
  numberOfLines: 1,
@@ -481,7 +480,7 @@ function ScreenItemView({
481
480
  onToggleExpand,
482
481
  onNavigate
483
482
  }) {
484
- const statusColor = screen.isFocused ? _sharedUi.buoyColors.success : screen.isMounted ? "#3B82F6" : _sharedUi.buoyColors.textMuted;
483
+ const statusColor = screen.isFocused ? _sharedUi.buoyColors.success : screen.isMounted ? "#3B82F6" : _sharedUi.night.color.textTertiary;
485
484
  const statusLabel = screen.isFocused ? "FOCUSED" : screen.isMounted ? "MOUNTED" : "AVAILABLE";
486
485
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
487
486
  style: styles.screenItem,
@@ -495,10 +494,10 @@ function ScreenItemView({
495
494
  style: styles.expandIndicator,
496
495
  children: isExpanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
497
496
  size: 14,
498
- color: _sharedUi.buoyColors.textSecondary
497
+ color: _sharedUi.night.color.textSecondary
499
498
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
500
499
  size: 14,
501
- color: _sharedUi.buoyColors.textSecondary
500
+ color: _sharedUi.night.color.textSecondary
502
501
  })
503
502
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
504
503
  style: styles.screenName,
@@ -541,19 +540,20 @@ function ScreenItemView({
541
540
  const styles = _reactNative.StyleSheet.create({
542
541
  container: {
543
542
  flex: 1,
544
- backgroundColor: _sharedUi.buoyColors.base
543
+ // Transparent so JsModal's ToolBackground shows through (the modal paints opaque base beneath it).
544
+ backgroundColor: "transparent"
545
545
  },
546
546
  emptyState: {
547
547
  padding: 32,
548
548
  alignItems: "center"
549
549
  },
550
550
  emptyText: {
551
- color: _sharedUi.buoyColors.textSecondary,
551
+ color: _sharedUi.night.color.textSecondary,
552
552
  fontSize: 14,
553
553
  fontFamily: "monospace"
554
554
  },
555
555
  emptySubtext: {
556
- color: _sharedUi.buoyColors.textMuted,
556
+ color: _sharedUi.night.color.textTertiary,
557
557
  fontSize: 12,
558
558
  fontFamily: "monospace",
559
559
  marginTop: 8
@@ -562,8 +562,9 @@ const styles = _reactNative.StyleSheet.create({
562
562
  flexDirection: "column",
563
563
  padding: 8,
564
564
  borderBottomWidth: 1,
565
- borderBottomColor: _sharedUi.buoyColors.border,
566
- gap: 12
565
+ borderBottomColor: _sharedUi.night.color.border,
566
+ gap: 12,
567
+ marginBottom: 8
567
568
  },
568
569
  actionsRow: {
569
570
  flexDirection: "row",
@@ -581,7 +582,7 @@ const styles = _reactNative.StyleSheet.create({
581
582
  actionButtonHeader: {
582
583
  padding: 6,
583
584
  borderRadius: 4,
584
- backgroundColor: _sharedUi.buoyColors.input
585
+ backgroundColor: _sharedUi.night.color.surfaceElevated
585
586
  },
586
587
  iconButton: {
587
588
  padding: 6,
@@ -591,7 +592,7 @@ const styles = _reactNative.StyleSheet.create({
591
592
  },
592
593
  actionLabel: {
593
594
  fontSize: 8,
594
- color: _sharedUi.buoyColors.textMuted,
595
+ color: _sharedUi.night.color.textTertiary,
595
596
  fontFamily: "monospace",
596
597
  textTransform: "uppercase",
597
598
  letterSpacing: 0.5
@@ -609,7 +610,7 @@ const styles = _reactNative.StyleSheet.create({
609
610
  flexShrink: 1,
610
611
  flexBasis: "20%",
611
612
  minWidth: 70,
612
- backgroundColor: _sharedUi.buoyColors.card,
613
+ backgroundColor: _sharedUi.night.color.surface,
613
614
  borderRadius: 8,
614
615
  paddingVertical: 10,
615
616
  paddingHorizontal: 12,
@@ -618,12 +619,12 @@ const styles = _reactNative.StyleSheet.create({
618
619
  statValue: {
619
620
  fontSize: 18,
620
621
  fontWeight: "800",
621
- color: _sharedUi.buoyColors.text,
622
+ color: _sharedUi.night.color.text,
622
623
  fontFamily: "monospace"
623
624
  },
624
625
  statLabel: {
625
626
  fontSize: 10,
626
- color: _sharedUi.buoyColors.textMuted,
627
+ color: _sharedUi.night.color.textTertiary,
627
628
  marginTop: 4,
628
629
  fontFamily: "monospace",
629
630
  textTransform: "uppercase",
@@ -635,11 +636,11 @@ const styles = _reactNative.StyleSheet.create({
635
636
  padding: 8,
636
637
  gap: 8,
637
638
  borderBottomWidth: 1,
638
- borderBottomColor: _sharedUi.buoyColors.border
639
+ borderBottomColor: _sharedUi.night.color.border
639
640
  },
640
641
  searchInput: {
641
642
  flex: 1,
642
- color: _sharedUi.buoyColors.text,
643
+ color: _sharedUi.night.color.text,
643
644
  fontSize: 14,
644
645
  fontFamily: "monospace"
645
646
  },
@@ -647,7 +648,7 @@ const styles = _reactNative.StyleSheet.create({
647
648
  padding: 4
648
649
  },
649
650
  clearButtonText: {
650
- color: _sharedUi.buoyColors.textMuted,
651
+ color: _sharedUi.night.color.textTertiary,
651
652
  fontSize: 18
652
653
  },
653
654
  closeSearchButton: {
@@ -655,7 +656,7 @@ const styles = _reactNative.StyleSheet.create({
655
656
  paddingVertical: 4
656
657
  },
657
658
  closeSearchText: {
658
- color: _sharedUi.buoyColors.primary,
659
+ color: _sharedUi.night.color.accent,
659
660
  fontSize: 14,
660
661
  fontWeight: "600",
661
662
  fontFamily: "monospace"
@@ -664,7 +665,7 @@ const styles = _reactNative.StyleSheet.create({
664
665
  flex: 1
665
666
  },
666
667
  scrollContent: {
667
- paddingVertical: 8
668
+ paddingBottom: 8
668
669
  },
669
670
  metaFooter: {
670
671
  flexDirection: "row",
@@ -675,11 +676,11 @@ const styles = _reactNative.StyleSheet.create({
675
676
  paddingVertical: 16,
676
677
  marginTop: 16,
677
678
  borderTopWidth: 1,
678
- borderTopColor: _sharedUi.buoyColors.border
679
+ borderTopColor: _sharedUi.night.color.border
679
680
  },
680
681
  metaText: {
681
682
  fontSize: 12,
682
- color: _sharedUi.buoyColors.textSecondary,
683
+ color: _sharedUi.night.color.textSecondary,
683
684
  fontFamily: "monospace"
684
685
  },
685
686
  sourceBadge: {
@@ -687,12 +688,12 @@ const styles = _reactNative.StyleSheet.create({
687
688
  paddingVertical: 2,
688
689
  borderRadius: 999,
689
690
  borderWidth: 1,
690
- borderColor: _sharedUi.buoyColors.border,
691
- backgroundColor: _sharedUi.buoyColors.card
691
+ borderColor: _sharedUi.night.color.border,
692
+ backgroundColor: _sharedUi.night.color.surface
692
693
  },
693
694
  sourceText: {
694
695
  fontSize: 11,
695
- color: _sharedUi.buoyColors.textSecondary,
696
+ color: _sharedUi.night.color.textSecondary,
696
697
  textTransform: "capitalize",
697
698
  fontFamily: "monospace"
698
699
  },
@@ -705,9 +706,9 @@ const styles = _reactNative.StyleSheet.create({
705
706
  justifyContent: "space-between",
706
707
  padding: 12,
707
708
  paddingHorizontal: 16,
708
- backgroundColor: _sharedUi.buoyColors.card,
709
+ backgroundColor: _sharedUi.night.color.surface,
709
710
  borderLeftWidth: 3,
710
- borderLeftColor: _sharedUi.buoyColors.textSecondary
711
+ borderLeftColor: _sharedUi.night.color.fillTertiary
711
712
  },
712
713
  groupHeaderLeft: {
713
714
  flexDirection: "row",
@@ -718,7 +719,7 @@ const styles = _reactNative.StyleSheet.create({
718
719
  groupTitle: {
719
720
  fontSize: 12,
720
721
  fontWeight: "700",
721
- color: _sharedUi.buoyColors.text,
722
+ color: _sharedUi.night.color.text,
722
723
  fontFamily: "monospace",
723
724
  textTransform: "uppercase",
724
725
  letterSpacing: 0.8
@@ -741,19 +742,20 @@ const styles = _reactNative.StyleSheet.create({
741
742
  fontFamily: "monospace"
742
743
  },
743
744
  screensList: {
744
- backgroundColor: _sharedUi.buoyColors.base
745
+ // Transparent so the night sheet's star field shows through.
746
+ backgroundColor: "transparent"
745
747
  },
746
748
  groupDescription: {
747
749
  paddingHorizontal: 16,
748
750
  paddingVertical: 8,
749
751
  marginBottom: 8,
750
- backgroundColor: _sharedUi.buoyColors.input,
752
+ backgroundColor: _sharedUi.night.color.surfaceElevated,
751
753
  borderLeftWidth: 3,
752
- borderLeftColor: _sharedUi.buoyColors.textSecondary
754
+ borderLeftColor: _sharedUi.night.color.fillTertiary
753
755
  },
754
756
  groupDescriptionText: {
755
757
  fontSize: 11,
756
- color: _sharedUi.buoyColors.textSecondary,
758
+ color: _sharedUi.night.color.textSecondary,
757
759
  fontFamily: "monospace",
758
760
  lineHeight: 16
759
761
  },
@@ -766,10 +768,10 @@ const styles = _reactNative.StyleSheet.create({
766
768
  justifyContent: "space-between",
767
769
  paddingVertical: 10,
768
770
  paddingHorizontal: 12,
769
- backgroundColor: _sharedUi.buoyColors.card,
771
+ backgroundColor: _sharedUi.night.color.surface,
770
772
  borderRadius: 6,
771
773
  borderWidth: 1,
772
- borderColor: _sharedUi.buoyColors.border,
774
+ borderColor: _sharedUi.night.color.border,
773
775
  shadowColor: "#000",
774
776
  shadowOffset: {
775
777
  width: 0,
@@ -792,7 +794,7 @@ const styles = _reactNative.StyleSheet.create({
792
794
  screenName: {
793
795
  fontSize: 13,
794
796
  fontWeight: "600",
795
- color: _sharedUi.buoyColors.text,
797
+ color: _sharedUi.night.color.text,
796
798
  fontFamily: "monospace",
797
799
  flex: 1
798
800
  },
@@ -815,19 +817,19 @@ const styles = _reactNative.StyleSheet.create({
815
817
  headerActionButton: {
816
818
  padding: 6,
817
819
  borderRadius: 4,
818
- backgroundColor: _sharedUi.buoyColors.input,
820
+ backgroundColor: _sharedUi.night.color.surfaceElevated,
819
821
  borderWidth: 1,
820
- borderColor: _sharedUi.buoyColors.border,
822
+ borderColor: _sharedUi.night.color.border,
821
823
  alignItems: "center",
822
824
  justifyContent: "center"
823
825
  },
824
826
  navigateButton: {
825
- backgroundColor: _sharedUi.buoyColors.primary + "15",
826
- borderColor: _sharedUi.buoyColors.primary + "40"
827
+ backgroundColor: _sharedUi.night.color.accentSoft,
828
+ borderColor: _sharedUi.night.color.accentBorder
827
829
  },
828
830
  navigateButtonText: {
829
831
  fontSize: 12,
830
- color: _sharedUi.buoyColors.primary,
832
+ color: _sharedUi.night.color.accent,
831
833
  fontFamily: "monospace",
832
834
  fontWeight: "600"
833
835
  }
@@ -43,7 +43,7 @@ function RouteEventDetail({
43
43
  activeOpacity: 0.8,
44
44
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Navigation, {
45
45
  size: 16,
46
- color: "#FFFFFF"
46
+ color: _sharedUi.night.color.onAccent
47
47
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
48
48
  style: styles.goButtonText,
49
49
  children: "Go to route"
@@ -55,7 +55,8 @@ function RouteEventDetail({
55
55
  const styles = _reactNative.StyleSheet.create({
56
56
  container: {
57
57
  flex: 1,
58
- backgroundColor: _sharedUi.buoyColors.base
58
+ // Transparent so the night sheet's star field shows through.
59
+ backgroundColor: "transparent"
59
60
  },
60
61
  scroll: {
61
62
  flex: 1
@@ -66,23 +67,25 @@ const styles = _reactNative.StyleSheet.create({
66
67
  footer: {
67
68
  paddingHorizontal: 16,
68
69
  paddingVertical: 12,
69
- backgroundColor: _sharedUi.buoyColors.base,
70
+ // Transparent so the night sheet's star field shows through.
71
+ backgroundColor: "transparent",
70
72
  borderTopWidth: 1,
71
- borderTopColor: _sharedUi.buoyColors.border
73
+ borderTopColor: _sharedUi.night.color.border
72
74
  },
73
75
  goButton: {
74
76
  flexDirection: "row",
75
77
  alignItems: "center",
76
78
  justifyContent: "center",
77
79
  gap: 8,
78
- backgroundColor: _sharedUi.buoyColors.primary,
80
+ backgroundColor: _sharedUi.night.color.accent,
79
81
  paddingVertical: 12,
80
82
  borderRadius: 8
81
83
  },
82
84
  goButtonText: {
83
85
  fontSize: 13,
84
86
  fontWeight: "600",
85
- color: "#FFFFFF",
87
+ // Ink on a filled accent surface — the night accent takes dark ink.
88
+ color: _sharedUi.night.color.onAccent,
86
89
  fontFamily: "monospace",
87
90
  textTransform: "uppercase",
88
91
  letterSpacing: 0.5
@@ -156,14 +156,14 @@ const styles = _reactNative.StyleSheet.create({
156
156
  },
157
157
  detailLabel: {
158
158
  fontSize: 10,
159
- color: _sharedUi.buoyColors.textSecondary,
159
+ color: _sharedUi.night.color.textSecondary,
160
160
  fontFamily: "monospace",
161
161
  fontWeight: "600",
162
162
  minWidth: 70
163
163
  },
164
164
  detailValue: {
165
165
  fontSize: 11,
166
- color: _sharedUi.buoyColors.text,
166
+ color: _sharedUi.night.color.text,
167
167
  fontFamily: "monospace",
168
168
  flex: 1
169
169
  },
@@ -182,7 +182,7 @@ const styles = _reactNative.StyleSheet.create({
182
182
  },
183
183
  dataViewerTitle: {
184
184
  fontSize: 11,
185
- color: _sharedUi.buoyColors.textSecondary,
185
+ color: _sharedUi.night.color.textSecondary,
186
186
  fontFamily: "monospace",
187
187
  fontWeight: "600"
188
188
  }