@sudobility/testomniac_ui 0.0.1
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/README.md +83 -0
- package/dist/components/bundles/AddToBundleButton.d.ts +8 -0
- package/dist/components/bundles/AddToBundleButton.d.ts.map +1 -0
- package/dist/components/bundles/AddToBundleButton.js +64 -0
- package/dist/components/bundles/AddToBundleButton.js.map +1 -0
- package/dist/components/cells/BundleCell.d.ts +10 -0
- package/dist/components/cells/BundleCell.d.ts.map +1 -0
- package/dist/components/cells/BundleCell.js +8 -0
- package/dist/components/cells/BundleCell.js.map +1 -0
- package/dist/components/cells/InteractionCell.d.ts +17 -0
- package/dist/components/cells/InteractionCell.d.ts.map +1 -0
- package/dist/components/cells/InteractionCell.js +13 -0
- package/dist/components/cells/InteractionCell.js.map +1 -0
- package/dist/components/cells/ListCell.d.ts +29 -0
- package/dist/components/cells/ListCell.d.ts.map +1 -0
- package/dist/components/cells/ListCell.js +19 -0
- package/dist/components/cells/ListCell.js.map +1 -0
- package/dist/components/cells/PersonaCell.d.ts +10 -0
- package/dist/components/cells/PersonaCell.d.ts.map +1 -0
- package/dist/components/cells/PersonaCell.js +7 -0
- package/dist/components/cells/PersonaCell.js.map +1 -0
- package/dist/components/cells/ScaffoldCell.d.ts +12 -0
- package/dist/components/cells/ScaffoldCell.d.ts.map +1 -0
- package/dist/components/cells/ScaffoldCell.js +10 -0
- package/dist/components/cells/ScaffoldCell.js.map +1 -0
- package/dist/components/cells/ScenarioCell.d.ts +12 -0
- package/dist/components/cells/ScenarioCell.d.ts.map +1 -0
- package/dist/components/cells/ScenarioCell.js +8 -0
- package/dist/components/cells/ScenarioCell.js.map +1 -0
- package/dist/components/cells/SurfaceCell.d.ts +14 -0
- package/dist/components/cells/SurfaceCell.d.ts.map +1 -0
- package/dist/components/cells/SurfaceCell.js +23 -0
- package/dist/components/cells/SurfaceCell.js.map +1 -0
- package/dist/components/cells/index.d.ts +9 -0
- package/dist/components/cells/index.d.ts.map +1 -0
- package/dist/components/cells/index.js +9 -0
- package/dist/components/cells/index.js.map +1 -0
- package/dist/components/cells/scaffoldMeta.d.ts +6 -0
- package/dist/components/cells/scaffoldMeta.d.ts.map +1 -0
- package/dist/components/cells/scaffoldMeta.js +47 -0
- package/dist/components/cells/scaffoldMeta.js.map +1 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts +6 -0
- package/dist/components/dashboard/DashboardSidebar.d.ts.map +1 -0
- package/dist/components/dashboard/DashboardSidebar.js +163 -0
- package/dist/components/dashboard/DashboardSidebar.js.map +1 -0
- package/dist/components/data/DataTable.d.ts +16 -0
- package/dist/components/data/DataTable.d.ts.map +1 -0
- package/dist/components/data/DataTable.js +54 -0
- package/dist/components/data/DataTable.js.map +1 -0
- package/dist/components/data/JsonViewer.d.ts +6 -0
- package/dist/components/data/JsonViewer.d.ts.map +1 -0
- package/dist/components/data/JsonViewer.js +5 -0
- package/dist/components/data/JsonViewer.js.map +1 -0
- package/dist/components/data/index.d.ts +3 -0
- package/dist/components/data/index.d.ts.map +1 -0
- package/dist/components/data/index.js +3 -0
- package/dist/components/data/index.js.map +1 -0
- package/dist/components/forms/SelectField.d.ts +22 -0
- package/dist/components/forms/SelectField.d.ts.map +1 -0
- package/dist/components/forms/SelectField.js +14 -0
- package/dist/components/forms/SelectField.js.map +1 -0
- package/dist/components/navigation/BackLink.d.ts +7 -0
- package/dist/components/navigation/BackLink.d.ts.map +1 -0
- package/dist/components/navigation/BackLink.js +6 -0
- package/dist/components/navigation/BackLink.js.map +1 -0
- package/dist/components/pages/PagesListView.d.ts +12 -0
- package/dist/components/pages/PagesListView.d.ts.map +1 -0
- package/dist/components/pages/PagesListView.js +19 -0
- package/dist/components/pages/PagesListView.js.map +1 -0
- package/dist/components/pages/PagesMapView.d.ts +15 -0
- package/dist/components/pages/PagesMapView.d.ts.map +1 -0
- package/dist/components/pages/PagesMapView.js +232 -0
- package/dist/components/pages/PagesMapView.js.map +1 -0
- package/dist/components/scanner/EventLog.d.ts +8 -0
- package/dist/components/scanner/EventLog.d.ts.map +1 -0
- package/dist/components/scanner/EventLog.js +18 -0
- package/dist/components/scanner/EventLog.js.map +1 -0
- package/dist/components/scanner/LiveCounters.d.ts +9 -0
- package/dist/components/scanner/LiveCounters.d.ts.map +1 -0
- package/dist/components/scanner/LiveCounters.js +33 -0
- package/dist/components/scanner/LiveCounters.js.map +1 -0
- package/dist/components/scanner/PhaseIndicator.d.ts +6 -0
- package/dist/components/scanner/PhaseIndicator.d.ts.map +1 -0
- package/dist/components/scanner/PhaseIndicator.js +31 -0
- package/dist/components/scanner/PhaseIndicator.js.map +1 -0
- package/dist/components/scanner/RunSummaryCard.d.ts +12 -0
- package/dist/components/scanner/RunSummaryCard.d.ts.map +1 -0
- package/dist/components/scanner/RunSummaryCard.js +7 -0
- package/dist/components/scanner/RunSummaryCard.js.map +1 -0
- package/dist/components/scanner/ScanForm.d.ts +9 -0
- package/dist/components/scanner/ScanForm.d.ts.map +1 -0
- package/dist/components/scanner/ScanForm.js +31 -0
- package/dist/components/scanner/ScanForm.js.map +1 -0
- package/dist/components/scanner/ScanProgressPanel.d.ts +16 -0
- package/dist/components/scanner/ScanProgressPanel.d.ts.map +1 -0
- package/dist/components/scanner/ScanProgressPanel.js +8 -0
- package/dist/components/scanner/ScanProgressPanel.js.map +1 -0
- package/dist/components/scanner/StatusBadge.d.ts +7 -0
- package/dist/components/scanner/StatusBadge.d.ts.map +1 -0
- package/dist/components/scanner/StatusBadge.js +65 -0
- package/dist/components/scanner/StatusBadge.js.map +1 -0
- package/dist/components/scanner/index.d.ts +8 -0
- package/dist/components/scanner/index.d.ts.map +1 -0
- package/dist/components/scanner/index.js +8 -0
- package/dist/components/scanner/index.js.map +1 -0
- package/dist/components/scenarios/AddScenarioForm.d.ts +14 -0
- package/dist/components/scenarios/AddScenarioForm.d.ts.map +1 -0
- package/dist/components/scenarios/AddScenarioForm.js +43 -0
- package/dist/components/scenarios/AddScenarioForm.js.map +1 -0
- package/dist/components/scripts/ScriptPanel.d.ts +17 -0
- package/dist/components/scripts/ScriptPanel.d.ts.map +1 -0
- package/dist/components/scripts/ScriptPanel.js +32 -0
- package/dist/components/scripts/ScriptPanel.js.map +1 -0
- package/dist/components/states/index.d.ts +19 -0
- package/dist/components/states/index.d.ts.map +1 -0
- package/dist/components/states/index.js +16 -0
- package/dist/components/states/index.js.map +1 -0
- package/dist/config/priorityConfig.d.ts +12 -0
- package/dist/config/priorityConfig.d.ts.map +1 -0
- package/dist/config/priorityConfig.js +39 -0
- package/dist/config/priorityConfig.js.map +1 -0
- package/dist/context/config.d.ts +53 -0
- package/dist/context/config.d.ts.map +1 -0
- package/dist/context/config.js +32 -0
- package/dist/context/config.js.map +1 -0
- package/dist/context/routing.d.ts +42 -0
- package/dist/context/routing.d.ts.map +1 -0
- package/dist/context/routing.js +33 -0
- package/dist/context/routing.js.map +1 -0
- package/dist/hooks/useDashboardEnvironmentContext.d.ts +15 -0
- package/dist/hooks/useDashboardEnvironmentContext.d.ts.map +1 -0
- package/dist/hooks/useDashboardEnvironmentContext.js +89 -0
- package/dist/hooks/useDashboardEnvironmentContext.js.map +1 -0
- package/dist/hooks/useEnvBasePath.d.ts +8 -0
- package/dist/hooks/useEnvBasePath.d.ts.map +1 -0
- package/dist/hooks/useEnvBasePath.js +12 -0
- package/dist/hooks/useEnvBasePath.js.map +1 -0
- package/dist/hooks/useLocalizedNavigate.d.ts +12 -0
- package/dist/hooks/useLocalizedNavigate.d.ts.map +1 -0
- package/dist/hooks/useLocalizedNavigate.js +14 -0
- package/dist/hooks/useLocalizedNavigate.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/pages/BundleDetailPage.d.ts +2 -0
- package/dist/pages/BundleDetailPage.d.ts.map +1 -0
- package/dist/pages/BundleDetailPage.js +155 -0
- package/dist/pages/BundleDetailPage.js.map +1 -0
- package/dist/pages/BundlesPage.d.ts +2 -0
- package/dist/pages/BundlesPage.d.ts.map +1 -0
- package/dist/pages/BundlesPage.js +61 -0
- package/dist/pages/BundlesPage.js.map +1 -0
- package/dist/pages/DashboardOverview.d.ts +2 -0
- package/dist/pages/DashboardOverview.d.ts.map +1 -0
- package/dist/pages/DashboardOverview.js +179 -0
- package/dist/pages/DashboardOverview.js.map +1 -0
- package/dist/pages/FindingsListPage.d.ts +2 -0
- package/dist/pages/FindingsListPage.d.ts.map +1 -0
- package/dist/pages/FindingsListPage.js +160 -0
- package/dist/pages/FindingsListPage.js.map +1 -0
- package/dist/pages/PageDetailPage.d.ts +2 -0
- package/dist/pages/PageDetailPage.d.ts.map +1 -0
- package/dist/pages/PageDetailPage.js +120 -0
- package/dist/pages/PageDetailPage.js.map +1 -0
- package/dist/pages/PageGraphPage.d.ts +3 -0
- package/dist/pages/PageGraphPage.d.ts.map +1 -0
- package/dist/pages/PageGraphPage.js +72 -0
- package/dist/pages/PageGraphPage.js.map +1 -0
- package/dist/pages/PageStateDetailPage.d.ts +2 -0
- package/dist/pages/PageStateDetailPage.d.ts.map +1 -0
- package/dist/pages/PageStateDetailPage.js +69 -0
- package/dist/pages/PageStateDetailPage.js.map +1 -0
- package/dist/pages/PagesPage.d.ts +2 -0
- package/dist/pages/PagesPage.d.ts.map +1 -0
- package/dist/pages/PagesPage.js +83 -0
- package/dist/pages/PagesPage.js.map +1 -0
- package/dist/pages/PatternsPage.d.ts +2 -0
- package/dist/pages/PatternsPage.d.ts.map +1 -0
- package/dist/pages/PatternsPage.js +102 -0
- package/dist/pages/PatternsPage.js.map +1 -0
- package/dist/pages/PersonasPage.d.ts +2 -0
- package/dist/pages/PersonasPage.d.ts.map +1 -0
- package/dist/pages/PersonasPage.js +151 -0
- package/dist/pages/PersonasPage.js.map +1 -0
- package/dist/pages/RunRedirect.d.ts +2 -0
- package/dist/pages/RunRedirect.d.ts.map +1 -0
- package/dist/pages/RunRedirect.js +25 -0
- package/dist/pages/RunRedirect.js.map +1 -0
- package/dist/pages/RunSurfaceRunDetailPage.d.ts +2 -0
- package/dist/pages/RunSurfaceRunDetailPage.d.ts.map +1 -0
- package/dist/pages/RunSurfaceRunDetailPage.js +38 -0
- package/dist/pages/RunSurfaceRunDetailPage.js.map +1 -0
- package/dist/pages/RunSurfaceRunsPage.d.ts +2 -0
- package/dist/pages/RunSurfaceRunsPage.d.ts.map +1 -0
- package/dist/pages/RunSurfaceRunsPage.js +35 -0
- package/dist/pages/RunSurfaceRunsPage.js.map +1 -0
- package/dist/pages/RunTestInteractionRunDetailPage.d.ts +2 -0
- package/dist/pages/RunTestInteractionRunDetailPage.d.ts.map +1 -0
- package/dist/pages/RunTestInteractionRunDetailPage.js +55 -0
- package/dist/pages/RunTestInteractionRunDetailPage.js.map +1 -0
- package/dist/pages/RunTestInteractionRunsPage.d.ts +2 -0
- package/dist/pages/RunTestInteractionRunsPage.d.ts.map +1 -0
- package/dist/pages/RunTestInteractionRunsPage.js +38 -0
- package/dist/pages/RunTestInteractionRunsPage.js.map +1 -0
- package/dist/pages/RunnerGraphPage.d.ts +3 -0
- package/dist/pages/RunnerGraphPage.d.ts.map +1 -0
- package/dist/pages/RunnerGraphPage.js +86 -0
- package/dist/pages/RunnerGraphPage.js.map +1 -0
- package/dist/pages/ScaffoldDetailPage.d.ts +2 -0
- package/dist/pages/ScaffoldDetailPage.d.ts.map +1 -0
- package/dist/pages/ScaffoldDetailPage.js +56 -0
- package/dist/pages/ScaffoldDetailPage.js.map +1 -0
- package/dist/pages/ScaffoldsPage.d.ts +2 -0
- package/dist/pages/ScaffoldsPage.d.ts.map +1 -0
- package/dist/pages/ScaffoldsPage.js +35 -0
- package/dist/pages/ScaffoldsPage.js.map +1 -0
- package/dist/pages/ScanProgressPage.d.ts +2 -0
- package/dist/pages/ScanProgressPage.d.ts.map +1 -0
- package/dist/pages/ScanProgressPage.js +30 -0
- package/dist/pages/ScanProgressPage.js.map +1 -0
- package/dist/pages/SchedulesPage.d.ts +2 -0
- package/dist/pages/SchedulesPage.d.ts.map +1 -0
- package/dist/pages/SchedulesPage.js +165 -0
- package/dist/pages/SchedulesPage.js.map +1 -0
- package/dist/pages/StartScanPage.d.ts +2 -0
- package/dist/pages/StartScanPage.d.ts.map +1 -0
- package/dist/pages/StartScanPage.js +97 -0
- package/dist/pages/StartScanPage.js.map +1 -0
- package/dist/pages/TestInteractionDetailPage.d.ts +2 -0
- package/dist/pages/TestInteractionDetailPage.d.ts.map +1 -0
- package/dist/pages/TestInteractionDetailPage.js +60 -0
- package/dist/pages/TestInteractionDetailPage.js.map +1 -0
- package/dist/pages/TestInteractionsPage.d.ts +2 -0
- package/dist/pages/TestInteractionsPage.d.ts.map +1 -0
- package/dist/pages/TestInteractionsPage.js +96 -0
- package/dist/pages/TestInteractionsPage.js.map +1 -0
- package/dist/pages/TestRunDetailPage.d.ts +2 -0
- package/dist/pages/TestRunDetailPage.d.ts.map +1 -0
- package/dist/pages/TestRunDetailPage.js +81 -0
- package/dist/pages/TestRunDetailPage.js.map +1 -0
- package/dist/pages/TestRunsListPage.d.ts +2 -0
- package/dist/pages/TestRunsListPage.d.ts.map +1 -0
- package/dist/pages/TestRunsListPage.js +18 -0
- package/dist/pages/TestRunsListPage.js.map +1 -0
- package/dist/pages/TestScenarioDetailPage.d.ts +2 -0
- package/dist/pages/TestScenarioDetailPage.d.ts.map +1 -0
- package/dist/pages/TestScenarioDetailPage.js +101 -0
- package/dist/pages/TestScenarioDetailPage.js.map +1 -0
- package/dist/pages/TestScenariosPage.d.ts +2 -0
- package/dist/pages/TestScenariosPage.d.ts.map +1 -0
- package/dist/pages/TestScenariosPage.js +73 -0
- package/dist/pages/TestScenariosPage.js.map +1 -0
- package/dist/pages/TestSurfaceDetailPage.d.ts +2 -0
- package/dist/pages/TestSurfaceDetailPage.d.ts.map +1 -0
- package/dist/pages/TestSurfaceDetailPage.js +33 -0
- package/dist/pages/TestSurfaceDetailPage.js.map +1 -0
- package/dist/pages/TestSurfacesListPage.d.ts +2 -0
- package/dist/pages/TestSurfacesListPage.d.ts.map +1 -0
- package/dist/pages/TestSurfacesListPage.js +73 -0
- package/dist/pages/TestSurfacesListPage.js.map +1 -0
- package/dist/utils/formatDateTime.d.ts +13 -0
- package/dist/utils/formatDateTime.d.ts.map +1 -0
- package/dist/utils/formatDateTime.js +27 -0
- package/dist/utils/formatDateTime.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const STATUS_COLORS = {
|
|
3
|
+
pending: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',
|
|
4
|
+
planned: 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300',
|
|
5
|
+
running: 'bg-blue-100 text-blue-800 animate-pulse dark:bg-blue-900/30 dark:text-blue-300',
|
|
6
|
+
completed: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',
|
|
7
|
+
failed: 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300',
|
|
8
|
+
passed: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300',
|
|
9
|
+
error: 'bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300',
|
|
10
|
+
warning: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-300',
|
|
11
|
+
};
|
|
12
|
+
const svgProps = {
|
|
13
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
14
|
+
viewBox: '0 0 16 16',
|
|
15
|
+
className: 'w-3 h-3 shrink-0',
|
|
16
|
+
stroke: 'currentColor',
|
|
17
|
+
strokeWidth: 2,
|
|
18
|
+
fill: 'none',
|
|
19
|
+
};
|
|
20
|
+
const STATUS_ICONS = {
|
|
21
|
+
// --- Run / execution states ---
|
|
22
|
+
pending: (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "8", cy: "8", r: "6" }), _jsx("path", { d: "M8 4v4l2.5 1.5", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
23
|
+
planned: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "3", y: "2", width: "10", height: "12", rx: "1" }), _jsx("path", { d: "M6 1v2M10 1v2M3 6h10", strokeLinecap: "round" })] })),
|
|
24
|
+
running: (_jsx("svg", { ...svgProps, className: "w-3 h-3 shrink-0 animate-spin", children: _jsx("circle", { cx: "8", cy: "8", r: "6", strokeDasharray: "28", strokeDashoffset: "8", strokeLinecap: "round" }) })),
|
|
25
|
+
completed: (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "8", cy: "8", r: "6" }), _jsx("path", { d: "M5.5 8l1.5 2 3.5-4", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
26
|
+
passed: (_jsx("svg", { ...svgProps, children: _jsx("path", { d: "M3 8.5l3 3 7-7.5", strokeLinecap: "round", strokeLinejoin: "round" }) })),
|
|
27
|
+
failed: (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "8", cy: "8", r: "6" }), _jsx("path", { d: "M5.5 5.5l5 5M10.5 5.5l-5 5", strokeLinecap: "round" })] })),
|
|
28
|
+
error: (_jsxs("svg", { ...svgProps, fill: "currentColor", stroke: "none", children: [_jsx("circle", { cx: "8", cy: "8", r: "7" }), _jsx("text", { x: "8", y: "12", textAnchor: "middle", fontSize: "11", fontWeight: "bold", fill: "currentColor", className: "fill-yellow-100 dark:fill-red-950", children: "!" })] })),
|
|
29
|
+
warning: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M8 1.5l6.5 12H1.5L8 1.5z", strokeLinejoin: "round" }), _jsx("path", { d: "M8 6v3", strokeLinecap: "round" }), _jsx("circle", { cx: "8", cy: "11.5", r: "0.5", fill: "currentColor", stroke: "none" })] })),
|
|
30
|
+
skipped: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M4 3l5 5-5 5", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M11 3v10", strokeLinecap: "round" })] })),
|
|
31
|
+
cancelled: (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "8", cy: "8", r: "6" }), _jsx("path", { d: "M12.24 3.76L3.76 12.24", strokeLinecap: "round" })] })),
|
|
32
|
+
// --- Test types ---
|
|
33
|
+
render: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z", strokeLinejoin: "round" }), _jsx("circle", { cx: "8", cy: "8", r: "2" })] })),
|
|
34
|
+
form: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2", y: "2", width: "12", height: "12", rx: "1.5" }), _jsx("path", { d: "M5 5.5h6M5 8h6M5 10.5h4", strokeLinecap: "round" })] })),
|
|
35
|
+
form_negative: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2", y: "2", width: "12", height: "12", rx: "1.5" }), _jsx("path", { d: "M5 5.5h6M5 8h3", strokeLinecap: "round" }), _jsx("path", { d: "M10 10l2.5 2.5M12.5 10L10 12.5", strokeLinecap: "round" })] })),
|
|
36
|
+
form_correction: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2", y: "2", width: "12", height: "12", rx: "1.5" }), _jsx("path", { d: "M5 5.5h6M5 8h3", strokeLinecap: "round" }), _jsx("path", { d: "M9.5 11l1 1.5 2.5-3", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
37
|
+
navigation: (_jsx("svg", { ...svgProps, children: _jsx("path", { d: "M8 1.5l5.5 13-5.5-3.5-5.5 3.5z", strokeLinejoin: "round" }) })),
|
|
38
|
+
interaction: (_jsx("svg", { ...svgProps, children: _jsx("path", { d: "M4 1l0 9.5 2.5-2.5 2 4.5 1.5-.5-2-4.5H11.5L4 1z", strokeLinejoin: "round", fill: "currentColor", strokeWidth: 1 }) })),
|
|
39
|
+
e2e: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M5 5.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM11 5.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5z" }), _jsx("path", { d: "M7.5 8h1", strokeLinecap: "round" })] })),
|
|
40
|
+
dialog: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M2 3h12v8H6l-3 2.5V11H2V3z", strokeLinejoin: "round" }), _jsx("path", { d: "M5 6.5h6M5 8.5h4", strokeLinecap: "round" })] })),
|
|
41
|
+
keyboard: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "1", y: "4", width: "14", height: "9", rx: "1.5" }), _jsx("path", { d: "M4 7h1M7.5 7h1M11 7h1M5 9.5h6", strokeLinecap: "round" })] })),
|
|
42
|
+
variant: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2", y: "5", width: "12", height: "6", rx: "3" }), _jsx("circle", { cx: "11", cy: "8", r: "2", fill: "currentColor" })] })),
|
|
43
|
+
login: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "5", y: "1.5", width: "6", height: "7", rx: "1.5" }), _jsx("path", { d: "M3 14v-1a5 5 0 0 1 4-4.9", strokeLinecap: "round" }), _jsx("circle", { cx: "8", cy: "5", r: "0" }), _jsx("path", { d: "M8 9v2.5M6.5 10.5h3", strokeLinecap: "round" })] })),
|
|
44
|
+
search: (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "7", cy: "7", r: "4.5" }), _jsx("path", { d: "M10.5 10.5L14 14", strokeLinecap: "round" })] })),
|
|
45
|
+
scaffold: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "1.5", y: "1.5", width: "13", height: "13", rx: "1" }), _jsx("path", { d: "M1.5 5.5h13M6 5.5v9" })] })),
|
|
46
|
+
'semantic-journey': (_jsxs("svg", { ...svgProps, children: [_jsx("circle", { cx: "3", cy: "13", r: "1.5", fill: "currentColor" }), _jsx("circle", { cx: "13", cy: "3", r: "1.5", fill: "currentColor" }), _jsx("path", { d: "M4.5 11.5Q8 8 8 8Q8 8 11.5 4.5", strokeLinecap: "round" }), _jsx("circle", { cx: "8", cy: "8", r: "1", fill: "currentColor", stroke: "none" })] })),
|
|
47
|
+
password: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2.5", y: "7", width: "11", height: "7", rx: "1.5" }), _jsx("path", { d: "M5 7V5a3 3 0 0 1 6 0v2" }), _jsx("circle", { cx: "8", cy: "10.5", r: "1", fill: "currentColor", stroke: "none" })] })),
|
|
48
|
+
// --- Size classes ---
|
|
49
|
+
desktop: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "1.5", y: "2", width: "13", height: "9", rx: "1" }), _jsx("path", { d: "M5.5 14h5M8 11v3", strokeLinecap: "round" })] })),
|
|
50
|
+
mobile: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "4", y: "1", width: "8", height: "14", rx: "1.5" }), _jsx("path", { d: "M7 12.5h2", strokeLinecap: "round" })] })),
|
|
51
|
+
// --- Action types ---
|
|
52
|
+
click: (_jsx("svg", { ...svgProps, children: _jsx("path", { d: "M4 1l0 9.5 2.5-2.5 2 4.5 1.5-.5-2-4.5H11.5L4 1z", strokeLinejoin: "round", fill: "currentColor", strokeWidth: 1 }) })),
|
|
53
|
+
hover: (_jsxs("svg", { ...svgProps, children: [_jsx("path", { d: "M4 1l0 9.5 2.5-2.5H11.5L4 1z", strokeLinejoin: "round" }), _jsx("path", { d: "M6 13h6", strokeLinecap: "round", strokeDasharray: "1.5 1.5" })] })),
|
|
54
|
+
type: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "1", y: "4", width: "14", height: "9", rx: "1.5" }), _jsx("path", { d: "M4 7h1M7.5 7h1M11 7h1M5 9.5h6", strokeLinecap: "round" })] })),
|
|
55
|
+
pressKey: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "3", y: "3", width: "10", height: "10", rx: "2" }), _jsx("path", { d: "M8 6v4M6 8h4", strokeLinecap: "round" })] })),
|
|
56
|
+
select: (_jsxs("svg", { ...svgProps, children: [_jsx("rect", { x: "2", y: "3", width: "12", height: "10", rx: "1.5" }), _jsx("path", { d: "M10 7l-2 2.5L6 7", strokeLinecap: "round", strokeLinejoin: "round" })] })),
|
|
57
|
+
navigate: (_jsx("svg", { ...svgProps, children: _jsx("path", { d: "M3 8h10M9.5 4.5L13 8l-3.5 3.5", strokeLinecap: "round", strokeLinejoin: "round" }) })),
|
|
58
|
+
};
|
|
59
|
+
export function StatusBadge({ status, size = 'sm' }) {
|
|
60
|
+
const colors = STATUS_COLORS[status] ?? 'bg-gray-100 text-gray-800 dark:bg-gray-900/30 dark:text-gray-300';
|
|
61
|
+
const sizeClass = size === 'sm' ? 'px-2 py-0.5 text-xs' : 'px-2.5 py-1 text-sm';
|
|
62
|
+
const icon = STATUS_ICONS[status];
|
|
63
|
+
return (_jsxs("span", { className: `inline-flex items-center gap-1 rounded-full font-medium ${colors} ${sizeClass}`, children: [icon, status] }));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=StatusBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/scanner/StatusBadge.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ScanForm } from './ScanForm';
|
|
2
|
+
export { ScanProgressPanel } from './ScanProgressPanel';
|
|
3
|
+
export { PhaseIndicator } from './PhaseIndicator';
|
|
4
|
+
export { LiveCounters } from './LiveCounters';
|
|
5
|
+
export { EventLog } from './EventLog';
|
|
6
|
+
export { StatusBadge } from './StatusBadge';
|
|
7
|
+
export { RunSummaryCard } from './RunSummaryCard';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { ScanForm } from './ScanForm';
|
|
2
|
+
export { ScanProgressPanel } from './ScanProgressPanel';
|
|
3
|
+
export { PhaseIndicator } from './PhaseIndicator';
|
|
4
|
+
export { LiveCounters } from './LiveCounters';
|
|
5
|
+
export { EventLog } from './EventLog';
|
|
6
|
+
export { StatusBadge } from './StatusBadge';
|
|
7
|
+
export { RunSummaryCard } from './RunSummaryCard';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { NetworkClient } from '@sudobility/types';
|
|
2
|
+
import type { PersonaResponse } from '@sudobility/testomniac_types';
|
|
3
|
+
interface AddScenarioFormProps {
|
|
4
|
+
networkClient: NetworkClient;
|
|
5
|
+
token: string;
|
|
6
|
+
runnerId: number;
|
|
7
|
+
personas: PersonaResponse[];
|
|
8
|
+
defaultStartingPath?: string;
|
|
9
|
+
onCreated: () => void;
|
|
10
|
+
onCancel: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function AddScenarioForm({ networkClient, token, runnerId, personas, defaultStartingPath, onCreated, onCancel, }: AddScenarioFormProps): import("react").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=AddScenarioForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddScenarioForm.d.ts","sourceRoot":"","sources":["../../../src/components/scenarios/AddScenarioForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAiBpE,UAAU,oBAAoB;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,mBAAyB,EACzB,SAAS,EACT,QAAQ,GACT,EAAE,oBAAoB,+BAwGtB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useCreateTestScenario } from '@sudobility/testomniac_client';
|
|
4
|
+
import { ActionButton, Button, Card, Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Input, TextArea, } from '@sudobility/components';
|
|
5
|
+
import { useTestomniacApi } from '../../context/config';
|
|
6
|
+
export function AddScenarioForm({ networkClient, token, runnerId, personas, defaultStartingPath = '/', onCreated, onCancel, }) {
|
|
7
|
+
const [title, setTitle] = useState('');
|
|
8
|
+
const [startingPath, setStartingPath] = useState(defaultStartingPath);
|
|
9
|
+
const [prompt, setPrompt] = useState('');
|
|
10
|
+
const [personaId, setPersonaId] = useState(undefined);
|
|
11
|
+
const [error, setError] = useState(null);
|
|
12
|
+
const { baseUrl } = useTestomniacApi();
|
|
13
|
+
const { createTestScenario, isCreating } = useCreateTestScenario({
|
|
14
|
+
networkClient,
|
|
15
|
+
baseUrl,
|
|
16
|
+
runnerId,
|
|
17
|
+
token,
|
|
18
|
+
});
|
|
19
|
+
const handleCreate = async () => {
|
|
20
|
+
if (!title.trim() || !prompt.trim())
|
|
21
|
+
return;
|
|
22
|
+
setError(null);
|
|
23
|
+
try {
|
|
24
|
+
await createTestScenario({
|
|
25
|
+
runnerId,
|
|
26
|
+
title: title.trim(),
|
|
27
|
+
startingPath: startingPath.trim(),
|
|
28
|
+
prompt: prompt.trim(),
|
|
29
|
+
personaId,
|
|
30
|
+
});
|
|
31
|
+
setTitle('');
|
|
32
|
+
setStartingPath(defaultStartingPath);
|
|
33
|
+
setPrompt('');
|
|
34
|
+
setPersonaId(undefined);
|
|
35
|
+
onCreated();
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
setError(err instanceof Error ? err.message : 'Failed to create scenario');
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs(Card, { variant: "bordered", className: "space-y-3", children: [_jsxs("div", { children: [_jsx(Label, { className: "mb-1 block", children: "Title" }), _jsx(Input, { type: "text", value: title, onChange: e => setTitle(e.target.value), placeholder: "e.g., Add dish to cart and checkout", className: "w-full" })] }), _jsxs("div", { children: [_jsx(Label, { className: "mb-1 block", children: "Starting Path" }), _jsx(Input, { type: "text", value: startingPath, onChange: e => setStartingPath(e.target.value), placeholder: "e.g., /store", className: "w-full" })] }), personas.length > 0 && (_jsxs("div", { children: [_jsx(Label, { className: "mb-1 block", children: "Persona" }), _jsxs(Select, { value: personaId !== undefined ? String(personaId) : '', onValueChange: (value) => setPersonaId(value ? Number(value) : undefined), children: [_jsx(SelectTrigger, { children: _jsx(SelectValue, { placeholder: "None (optional)" }) }), _jsx(SelectContent, { children: personas.map(persona => (_jsx(SelectItem, { value: String(persona.id), children: persona.title }, persona.id))) })] })] })), _jsxs("div", { children: [_jsx(Label, { className: "mb-1 block", children: "Prompt" }), _jsx(TextArea, { value: prompt, onChange: setPrompt, placeholder: "Describe the test flow in plain English. e.g., Browse the menu, add a pasta dish to the shopping cart, go to checkout, fill in shipping details, and complete the purchase.", rows: 4 })] }), error && _jsx("p", { className: "text-sm text-red-600 dark:text-red-400", children: error }), _jsxs("div", { className: "flex gap-2", children: [_jsx(ActionButton, { variant: "primary", isLoading: isCreating, loadingText: "Creating...", onClick: handleCreate, disabled: !title.trim() || !prompt.trim(), children: "Create Scenario" }), _jsx(Button, { variant: "outline", type: "button", onClick: onCancel, children: "Cancel" })] })] }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=AddScenarioForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddScenarioForm.js","sourceRoot":"","sources":["../../../src/components/scenarios/AddScenarioForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ScriptKind } from '@sudobility/testomniac_client';
|
|
2
|
+
interface ScriptPanelProps {
|
|
3
|
+
kind: ScriptKind;
|
|
4
|
+
id: number | undefined;
|
|
5
|
+
/** Download filename, e.g. `interaction-3553.spec.ts`. */
|
|
6
|
+
filename: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
/** Only fetch when true (e.g. when an accordion is expanded). */
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Reusable code view for a domain object's complete Playwright script, with a
|
|
13
|
+
* copy button (from the shared CodeBlock) and a "Save Script" download button.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ScriptPanel({ kind, id, filename, title, enabled, }: ScriptPanelProps): import("react").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=ScriptPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptPanel.d.ts","sourceRoot":"","sources":["../../../src/components/scripts/ScriptPanel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGjF,UAAU,gBAAgB;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAcD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,KAA2B,EAC3B,OAAc,GACf,EAAE,gBAAgB,+BAyClB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { CodeBlock, Alert, Button } from '@sudobility/components';
|
|
3
|
+
import { useObjectScript } from '@sudobility/testomniac_client';
|
|
4
|
+
import { useTestomniacApi } from '../../context/config';
|
|
5
|
+
function saveScript(filename, content) {
|
|
6
|
+
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
|
|
7
|
+
const url = URL.createObjectURL(blob);
|
|
8
|
+
const anchor = document.createElement('a');
|
|
9
|
+
anchor.href = url;
|
|
10
|
+
anchor.download = filename;
|
|
11
|
+
document.body.appendChild(anchor);
|
|
12
|
+
anchor.click();
|
|
13
|
+
anchor.remove();
|
|
14
|
+
URL.revokeObjectURL(url);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Reusable code view for a domain object's complete Playwright script, with a
|
|
18
|
+
* copy button (from the shared CodeBlock) and a "Save Script" download button.
|
|
19
|
+
*/
|
|
20
|
+
export function ScriptPanel({ kind, id, filename, title = 'Playwright Script', enabled = true, }) {
|
|
21
|
+
const { networkClient, token, baseUrl } = useTestomniacApi();
|
|
22
|
+
const { script, isLoading, error } = useObjectScript({
|
|
23
|
+
networkClient,
|
|
24
|
+
baseUrl,
|
|
25
|
+
kind,
|
|
26
|
+
id,
|
|
27
|
+
token: token ?? '',
|
|
28
|
+
enabled,
|
|
29
|
+
});
|
|
30
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h2", { className: "text-sm font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400", children: title }), _jsx(Button, { type: "button", variant: "primary", size: "sm", onClick: () => script && saveScript(filename, script), disabled: !script, children: "Save Script" })] }), isLoading && (_jsx("div", { className: "rounded-lg border border-gray-200 bg-gray-50 px-4 py-6 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400", children: "Generating script\u2026" })), !isLoading && error && _jsx(Alert, { variant: "error", description: error }), !isLoading && !error && script && (_jsx(CodeBlock, { code: script, language: "typescript", title: filename, showCopy: true, showHeader: true }))] }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=ScriptPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScriptPanel.js","sourceRoot":"","sources":["../../../src/components/scripts/ScriptPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAmB,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAYxD,SAAS,UAAU,CAAC,QAAgB,EAAE,OAAe;IACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACvE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,EAAE,EACF,QAAQ,EACR,KAAK,GAAG,mBAAmB,EAC3B,OAAO,GAAG,IAAI,GACG;IACjB,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC7D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC;QACnD,aAAa;QACb,OAAO;QACP,IAAI;QACJ,EAAE;QACF,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,OAAO;KACR,CAAC,CAAC;IAEH,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,mCAAmC,aAChD,aAAI,SAAS,EAAC,iFAAiF,YAC5F,KAAK,GACH,EACL,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,EACrD,QAAQ,EAAE,CAAC,MAAM,4BAGV,IACL,EAEL,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,mJAAmJ,wCAE5J,CACP,EAEA,CAAC,SAAS,IAAI,KAAK,IAAI,KAAC,KAAK,IAAC,OAAO,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,GAAI,EAEpE,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,CACjC,KAAC,SAAS,IAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAC,YAAY,EAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,QAAC,UAAU,SAAG,CACvF,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LoadingState, EmptyState } from '@sudobility/components';
|
|
2
|
+
/**
|
|
3
|
+
* Shared list/detail page state components.
|
|
4
|
+
*
|
|
5
|
+
* `LoadingState` and `EmptyState` are re-exported from the shared design system
|
|
6
|
+
* (`@sudobility/components`) so every page renders consistent feedback states
|
|
7
|
+
* instead of hand-rolling the same markup. `ErrorState` is app-local because
|
|
8
|
+
* the design system does not yet ship an equivalent.
|
|
9
|
+
*/
|
|
10
|
+
export { LoadingState, EmptyState };
|
|
11
|
+
interface ErrorStateProps {
|
|
12
|
+
/** The error message to display (rendered after an `Error:` prefix). */
|
|
13
|
+
message: string;
|
|
14
|
+
/** Wrapper padding/className. Defaults to `p-6` for full-page usage. */
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Full-width error banner used by list and detail pages. */
|
|
18
|
+
export declare function ErrorState({ message, className }: ErrorStateProps): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/states/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAEpC,UAAU,eAAe;IACvB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,SAAiB,EAAE,EAAE,eAAe,+BAMzE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { LoadingState, EmptyState } from '@sudobility/components';
|
|
3
|
+
/**
|
|
4
|
+
* Shared list/detail page state components.
|
|
5
|
+
*
|
|
6
|
+
* `LoadingState` and `EmptyState` are re-exported from the shared design system
|
|
7
|
+
* (`@sudobility/components`) so every page renders consistent feedback states
|
|
8
|
+
* instead of hand-rolling the same markup. `ErrorState` is app-local because
|
|
9
|
+
* the design system does not yet ship an equivalent.
|
|
10
|
+
*/
|
|
11
|
+
export { LoadingState, EmptyState };
|
|
12
|
+
/** Full-width error banner used by list and detail pages. */
|
|
13
|
+
export function ErrorState({ message, className = 'p-6' }) {
|
|
14
|
+
return (_jsx("div", { className: className, children: _jsxs("div", { className: "text-center text-red-600 dark:text-red-400 py-8", children: ["Error: ", message] }) }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/states/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AASpC,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,EAAmB;IACxE,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACvB,eAAK,SAAS,EAAC,iDAAiD,wBAAS,OAAO,IAAO,GACnF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface PriorityConfig {
|
|
2
|
+
label: string;
|
|
3
|
+
shortLabel: string;
|
|
4
|
+
className: string;
|
|
5
|
+
chipClassName: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Returns the full presentation config for a priority level, falling back to
|
|
9
|
+
* P3 (Minor) styling for unknown levels — matching the previous inline maps.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getPriorityConfig(priority: number): PriorityConfig;
|
|
12
|
+
//# sourceMappingURL=priorityConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priorityConfig.d.ts","sourceRoot":"","sources":["../../src/config/priorityConfig.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAQlE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { priorityLabel, priorityShortLabel } from '@sudobility/testomniac_lib';
|
|
2
|
+
/**
|
|
3
|
+
* Presentation config for finding/issue priorities.
|
|
4
|
+
*
|
|
5
|
+
* The domain vocabulary (labels, levels, bands) lives in `testomniac_lib`; this
|
|
6
|
+
* module owns only the Tailwind color classes and combines them with the lib
|
|
7
|
+
* labels so list/detail pages share a single source instead of re-declaring the
|
|
8
|
+
* `PRIORITY_CONFIG` map.
|
|
9
|
+
*/
|
|
10
|
+
/** Badge background/text classes per priority level. */
|
|
11
|
+
const PRIORITY_CLASSNAMES = {
|
|
12
|
+
0: 'bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-200',
|
|
13
|
+
1: 'bg-orange-100 text-orange-800 dark:bg-orange-900/50 dark:text-orange-200',
|
|
14
|
+
2: 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-200',
|
|
15
|
+
3: 'bg-blue-100 text-blue-800 dark:bg-blue-900/50 dark:text-blue-200',
|
|
16
|
+
4: 'bg-gray-100 text-gray-700 dark:bg-gray-700/50 dark:text-gray-200',
|
|
17
|
+
};
|
|
18
|
+
/** Outlined "chip" classes (with border) per priority level. */
|
|
19
|
+
const PRIORITY_CHIP_CLASSNAMES = {
|
|
20
|
+
0: 'bg-red-100 text-red-700 border-red-200 dark:bg-red-900/40 dark:text-red-300 dark:border-red-800',
|
|
21
|
+
1: 'bg-orange-100 text-orange-700 border-orange-200 dark:bg-orange-900/40 dark:text-orange-300 dark:border-orange-800',
|
|
22
|
+
2: 'bg-yellow-100 text-yellow-700 border-yellow-200 dark:bg-yellow-900/40 dark:text-yellow-300 dark:border-yellow-800',
|
|
23
|
+
3: 'bg-blue-100 text-blue-700 border-blue-200 dark:bg-blue-900/40 dark:text-blue-300 dark:border-blue-800',
|
|
24
|
+
4: 'bg-gray-100 text-gray-600 border-gray-200 dark:bg-gray-700/40 dark:text-gray-300 dark:border-gray-600',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Returns the full presentation config for a priority level, falling back to
|
|
28
|
+
* P3 (Minor) styling for unknown levels — matching the previous inline maps.
|
|
29
|
+
*/
|
|
30
|
+
export function getPriorityConfig(priority) {
|
|
31
|
+
const level = priority in PRIORITY_CLASSNAMES ? priority : 3;
|
|
32
|
+
return {
|
|
33
|
+
label: priorityLabel(level),
|
|
34
|
+
shortLabel: priorityShortLabel(level),
|
|
35
|
+
className: PRIORITY_CLASSNAMES[level],
|
|
36
|
+
chipClassName: PRIORITY_CHIP_CLASSNAMES[level],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=priorityConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"priorityConfig.js","sourceRoot":"","sources":["../../src/config/priorityConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE/E;;;;;;;GAOG;AAEH,wDAAwD;AACxD,MAAM,mBAAmB,GAA2B;IAClD,CAAC,EAAE,8DAA8D;IACjE,CAAC,EAAE,0EAA0E;IAC7E,CAAC,EAAE,0EAA0E;IAC7E,CAAC,EAAE,kEAAkE;IACrE,CAAC,EAAE,kEAAkE;CACtE,CAAC;AAEF,gEAAgE;AAChE,MAAM,wBAAwB,GAA2B;IACvD,CAAC,EAAE,iGAAiG;IACpG,CAAC,EAAE,mHAAmH;IACtH,CAAC,EAAE,mHAAmH;IACtH,CAAC,EAAE,uGAAuG;IAC1G,CAAC,EAAE,uGAAuG;CAC3G,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,IAAI,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;QAC3B,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC;QACrC,SAAS,EAAE,mBAAmB,CAAC,KAAK,CAAC;QACrC,aAAa,EAAE,wBAAwB,CAAC,KAAK,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ComponentType, type ReactNode } from 'react';
|
|
2
|
+
import type { NetworkClient } from '@sudobility/types';
|
|
3
|
+
/**
|
|
4
|
+
* Props accepted by a host-provided SEO head component. Mirrors the shape the
|
|
5
|
+
* Testomniac pages pass; the host decides how (or whether) to render it.
|
|
6
|
+
*/
|
|
7
|
+
export interface SEOHeadProps {
|
|
8
|
+
title: string;
|
|
9
|
+
description: string;
|
|
10
|
+
keywords?: string[];
|
|
11
|
+
ogType?: 'website' | 'article';
|
|
12
|
+
noIndex?: boolean;
|
|
13
|
+
structuredData?: Record<string, unknown> | Record<string, unknown>[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Host-supplied configuration the dashboard UI needs but does not own:
|
|
17
|
+
* the network client, auth token, API base URL, and an optional SEO component.
|
|
18
|
+
*
|
|
19
|
+
* This decouples the library from any specific app shell (e.g. the web app's
|
|
20
|
+
* `building_blocks` `useApi` + react-helmet, or the extension's own client).
|
|
21
|
+
*/
|
|
22
|
+
export interface TestomniacUiConfig {
|
|
23
|
+
networkClient: NetworkClient;
|
|
24
|
+
/** Firebase ID token; empty string when unauthenticated. */
|
|
25
|
+
token: string;
|
|
26
|
+
/** API base URL, e.g. `https://api.testomniac.com`. */
|
|
27
|
+
apiUrl: string;
|
|
28
|
+
/**
|
|
29
|
+
* Optional host SEO head (e.g. a Helmet-based component in the web app).
|
|
30
|
+
* When omitted (e.g. in the extension), {@link SEOHead} renders nothing.
|
|
31
|
+
*/
|
|
32
|
+
SeoHead?: ComponentType<SEOHeadProps>;
|
|
33
|
+
}
|
|
34
|
+
export declare function TestomniacUiProvider({ children, networkClient, token, apiUrl, SeoHead, }: TestomniacUiConfig & {
|
|
35
|
+
children: ReactNode;
|
|
36
|
+
}): import("react").JSX.Element;
|
|
37
|
+
export declare function useTestomniacUiConfig(): TestomniacUiConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Returns `{ networkClient, token, baseUrl }` ready to pass to
|
|
40
|
+
* `@sudobility/testomniac_client` / `_lib` hooks. Replaces the app's
|
|
41
|
+
* `useApi()` + `CONSTANTS.API_URL`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function useTestomniacApi(): {
|
|
44
|
+
networkClient: NetworkClient;
|
|
45
|
+
token: string;
|
|
46
|
+
baseUrl: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Library SEO component. Delegates to the host-provided `SeoHead`, or renders
|
|
50
|
+
* nothing when the host doesn't supply one (e.g. the extension sidepanel).
|
|
51
|
+
*/
|
|
52
|
+
export declare function SEOHead(props: SEOHeadProps): import("react").JSX.Element | null;
|
|
53
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/context/config.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACtE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;CACvC;AAID,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE,kBAAkB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAU9C;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAGA;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,sCAG1C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useMemo } from 'react';
|
|
3
|
+
const TestomniacUiConfigContext = createContext(null);
|
|
4
|
+
export function TestomniacUiProvider({ children, networkClient, token, apiUrl, SeoHead, }) {
|
|
5
|
+
const value = useMemo(() => ({ networkClient, token, apiUrl, SeoHead }), [networkClient, token, apiUrl, SeoHead]);
|
|
6
|
+
return (_jsx(TestomniacUiConfigContext.Provider, { value: value, children: children }));
|
|
7
|
+
}
|
|
8
|
+
export function useTestomniacUiConfig() {
|
|
9
|
+
const ctx = useContext(TestomniacUiConfigContext);
|
|
10
|
+
if (!ctx) {
|
|
11
|
+
throw new Error('Testomniac UI: components must be rendered inside <TestomniacUiProvider>');
|
|
12
|
+
}
|
|
13
|
+
return ctx;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns `{ networkClient, token, baseUrl }` ready to pass to
|
|
17
|
+
* `@sudobility/testomniac_client` / `_lib` hooks. Replaces the app's
|
|
18
|
+
* `useApi()` + `CONSTANTS.API_URL`.
|
|
19
|
+
*/
|
|
20
|
+
export function useTestomniacApi() {
|
|
21
|
+
const { networkClient, token, apiUrl } = useTestomniacUiConfig();
|
|
22
|
+
return { networkClient, token, baseUrl: apiUrl };
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Library SEO component. Delegates to the host-provided `SeoHead`, or renders
|
|
26
|
+
* nothing when the host doesn't supply one (e.g. the extension sidepanel).
|
|
27
|
+
*/
|
|
28
|
+
export function SEOHead(props) {
|
|
29
|
+
const { SeoHead } = useTestomniacUiConfig();
|
|
30
|
+
return SeoHead ? _jsx(SeoHead, { ...props }) : null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/context/config.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAsC,MAAM,OAAO,CAAC;AAoC/F,MAAM,yBAAyB,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAEjF,MAAM,UAAU,oBAAoB,CAAC,EACnC,QAAQ,EACR,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,GACsC;IAC7C,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EACjD,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CACxC,CAAC;IACF,OAAO,CACL,KAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC7C,QAAQ,GAC0B,CACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,GAAG,GAAG,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAK9B,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAAC;IACjE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,KAAC,OAAO,OAAK,KAAK,GAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface NavigateOptions {
|
|
3
|
+
replace?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Host-supplied routing surface. The library never imports `react-router-dom`;
|
|
7
|
+
* the host (web app via react-router, extension via its own state) provides the
|
|
8
|
+
* current route params and a language-aware `navigate`.
|
|
9
|
+
*/
|
|
10
|
+
export interface TestomniacRouting {
|
|
11
|
+
/** Current route params (entitySlug, envId, runId, …). */
|
|
12
|
+
params: Record<string, string | undefined>;
|
|
13
|
+
/** Current path (used for active-link highlighting). May include the language prefix. */
|
|
14
|
+
pathname: string;
|
|
15
|
+
/**
|
|
16
|
+
* Navigate to an app-relative path (no language prefix). The host is
|
|
17
|
+
* responsible for prepending the active language, e.g. `/en${path}`.
|
|
18
|
+
*/
|
|
19
|
+
navigate: (path: string, options?: NavigateOptions) => void;
|
|
20
|
+
/** Active language code (defaults to `'en'`). */
|
|
21
|
+
currentLanguage: string;
|
|
22
|
+
/** Optional: switch the active language while staying on the page. */
|
|
23
|
+
switchLanguage?: (lang: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function RoutingProvider({ children, params, pathname, navigate, currentLanguage, switchLanguage, }: TestomniacRouting & {
|
|
26
|
+
children: ReactNode;
|
|
27
|
+
}): import("react").JSX.Element;
|
|
28
|
+
export declare function useTestomniacRouting(): TestomniacRouting;
|
|
29
|
+
/**
|
|
30
|
+
* Drop-in replacement for react-router's `useParams`, backed by the host
|
|
31
|
+
* routing context.
|
|
32
|
+
*/
|
|
33
|
+
export declare function useRouteParams<T extends Record<string, string | undefined> = Record<string, string | undefined>>(): T;
|
|
34
|
+
/**
|
|
35
|
+
* Declarative redirect — router-agnostic replacement for react-router's
|
|
36
|
+
* `<Navigate to=… replace />`. Navigates (via the host context) on mount.
|
|
37
|
+
*/
|
|
38
|
+
export declare function Redirect({ to, replace }: {
|
|
39
|
+
to: string;
|
|
40
|
+
replace?: boolean;
|
|
41
|
+
}): null;
|
|
42
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/context/routing.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5D,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAID,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,GACf,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAM7C;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAMxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAC9E,CAAC,CAEL;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAc,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,QAMjF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useMemo } from 'react';
|
|
3
|
+
const RoutingContext = createContext(null);
|
|
4
|
+
export function RoutingProvider({ children, params, pathname, navigate, currentLanguage, switchLanguage, }) {
|
|
5
|
+
const value = useMemo(() => ({ params, pathname, navigate, currentLanguage, switchLanguage }), [params, pathname, navigate, currentLanguage, switchLanguage]);
|
|
6
|
+
return _jsx(RoutingContext.Provider, { value: value, children: children });
|
|
7
|
+
}
|
|
8
|
+
export function useTestomniacRouting() {
|
|
9
|
+
const ctx = useContext(RoutingContext);
|
|
10
|
+
if (!ctx) {
|
|
11
|
+
throw new Error('Testomniac UI: components must be rendered inside <RoutingProvider>');
|
|
12
|
+
}
|
|
13
|
+
return ctx;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Drop-in replacement for react-router's `useParams`, backed by the host
|
|
17
|
+
* routing context.
|
|
18
|
+
*/
|
|
19
|
+
export function useRouteParams() {
|
|
20
|
+
return useTestomniacRouting().params;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Declarative redirect — router-agnostic replacement for react-router's
|
|
24
|
+
* `<Navigate to=… replace />`. Navigates (via the host context) on mount.
|
|
25
|
+
*/
|
|
26
|
+
export function Redirect({ to, replace = true }) {
|
|
27
|
+
const { navigate } = useTestomniacRouting();
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
navigate(to, { replace });
|
|
30
|
+
}, [to, replace, navigate]);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/context/routing.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AA2BtF,MAAM,cAAc,GAAG,aAAa,CAA2B,IAAI,CAAC,CAAC;AAErE,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,cAAc,GAC8B;IAC5C,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EACvE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAC9D,CAAC;IACF,OAAO,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAG5B,OAAO,oBAAoB,EAAE,CAAC,MAAW,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,EAAqC;IAChF,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function useDashboardEnvironmentContext(): {
|
|
2
|
+
entitySlug: string;
|
|
3
|
+
envId: number;
|
|
4
|
+
environment: import("@sudobility/testomniac_types").TestEnvironmentResponse | null;
|
|
5
|
+
product: import("@sudobility/testomniac_types").ProductSummaryResponse | null;
|
|
6
|
+
productId: number;
|
|
7
|
+
latestRun: import("@sudobility/testomniac_types").TestRunResponse;
|
|
8
|
+
environmentRuns: import("@sudobility/testomniac_types").TestRunResponse[];
|
|
9
|
+
primaryRunner: import("@sudobility/testomniac_types").RunnerResponse | null;
|
|
10
|
+
token: string;
|
|
11
|
+
networkClient: import("@sudobility/types").NetworkClient;
|
|
12
|
+
isLoading: boolean;
|
|
13
|
+
error: string | null;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useDashboardEnvironmentContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDashboardEnvironmentContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useDashboardEnvironmentContext.ts"],"names":[],"mappings":"AAWA,wBAAgB,8BAA8B;;;;;;;;;;;;;EAiH7C"}
|