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