@marinoscar/platform-web 0.0.0-stage → 0.1.0-next.3
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/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +96 -2
- package/dist/core/api-client.d.ts +112 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/api-client.js +24 -0
- package/dist/core/api-client.js.map +1 -0
- package/dist/core/host.d.ts +74 -0
- package/dist/core/host.d.ts.map +1 -0
- package/dist/core/host.js +84 -0
- package/dist/core/host.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/settings-page.d.ts +47 -0
- package/dist/core/settings-page.d.ts.map +1 -0
- package/dist/core/settings-page.js +5 -0
- package/dist/core/settings-page.js.map +1 -0
- package/dist/core/viewer.d.ts +14 -0
- package/dist/core/viewer.d.ts.map +1 -0
- package/dist/core/viewer.js +4 -0
- package/dist/core/viewer.js.map +1 -0
- package/dist/doctor/headless/categories.d.ts +31 -0
- package/dist/doctor/headless/categories.d.ts.map +1 -0
- package/dist/doctor/headless/categories.js +41 -0
- package/dist/doctor/headless/categories.js.map +1 -0
- package/dist/doctor/headless/client.d.ts +33 -0
- package/dist/doctor/headless/client.d.ts.map +1 -0
- package/dist/doctor/headless/client.js +31 -0
- package/dist/doctor/headless/client.js.map +1 -0
- package/dist/doctor/headless/contract.d.ts +18 -0
- package/dist/doctor/headless/contract.d.ts.map +1 -0
- package/dist/doctor/headless/contract.js +15 -0
- package/dist/doctor/headless/contract.js.map +1 -0
- package/dist/doctor/headless/index.d.ts +12 -0
- package/dist/doctor/headless/index.d.ts.map +1 -0
- package/dist/doctor/headless/index.js +8 -0
- package/dist/doctor/headless/index.js.map +1 -0
- package/dist/doctor/headless/use-doctor.d.ts +36 -0
- package/dist/doctor/headless/use-doctor.d.ts.map +1 -0
- package/dist/doctor/headless/use-doctor.js +80 -0
- package/dist/doctor/headless/use-doctor.js.map +1 -0
- package/dist/doctor/headless/use-support-bundle-download.d.ts +68 -0
- package/dist/doctor/headless/use-support-bundle-download.d.ts.map +1 -0
- package/dist/doctor/headless/use-support-bundle-download.js +135 -0
- package/dist/doctor/headless/use-support-bundle-download.js.map +1 -0
- package/dist/doctor/internal/relative-time.d.ts +2 -0
- package/dist/doctor/internal/relative-time.d.ts.map +1 -0
- package/dist/doctor/internal/relative-time.js +29 -0
- package/dist/doctor/internal/relative-time.js.map +1 -0
- package/dist/doctor/internal/status-colors.d.ts +5 -0
- package/dist/doctor/internal/status-colors.d.ts.map +1 -0
- package/dist/doctor/internal/status-colors.js +29 -0
- package/dist/doctor/internal/status-colors.js.map +1 -0
- package/dist/doctor/internal/use-is-mounted.d.ts +2 -0
- package/dist/doctor/internal/use-is-mounted.d.ts.map +1 -0
- package/dist/doctor/internal/use-is-mounted.js +15 -0
- package/dist/doctor/internal/use-is-mounted.js.map +1 -0
- package/dist/doctor/ui/check-row.d.ts +54 -0
- package/dist/doctor/ui/check-row.d.ts.map +1 -0
- package/dist/doctor/ui/check-row.js +100 -0
- package/dist/doctor/ui/check-row.js.map +1 -0
- package/dist/doctor/ui/copy.d.ts +3 -0
- package/dist/doctor/ui/copy.d.ts.map +1 -0
- package/dist/doctor/ui/copy.js +6 -0
- package/dist/doctor/ui/copy.js.map +1 -0
- package/dist/doctor/ui/doctor-page.d.ts +50 -0
- package/dist/doctor/ui/doctor-page.d.ts.map +1 -0
- package/dist/doctor/ui/doctor-page.js +152 -0
- package/dist/doctor/ui/doctor-page.js.map +1 -0
- package/dist/doctor/ui/index.d.ts +8 -0
- package/dist/doctor/ui/index.d.ts.map +1 -0
- package/dist/doctor/ui/index.js +7 -0
- package/dist/doctor/ui/index.js.map +1 -0
- package/dist/doctor/ui/settings-page.d.ts +20 -0
- package/dist/doctor/ui/settings-page.d.ts.map +1 -0
- package/dist/doctor/ui/settings-page.js +32 -0
- package/dist/doctor/ui/settings-page.js.map +1 -0
- package/dist/doctor/ui/support-bundle-button.d.ts +37 -0
- package/dist/doctor/ui/support-bundle-button.d.ts.map +1 -0
- package/dist/doctor/ui/support-bundle-button.js +39 -0
- package/dist/doctor/ui/support-bundle-button.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts +106 -0
- package/dist/telemetry/headless/adapters/TelemetryWebAdapters.d.ts.map +1 -0
- package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js +58 -0
- package/dist/telemetry/headless/adapters/TelemetryWebAdapters.js.map +1 -0
- package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts +43 -0
- package/dist/telemetry/headless/context/TelemetryConfigProvider.d.ts.map +1 -0
- package/dist/telemetry/headless/context/TelemetryConfigProvider.js +24 -0
- package/dist/telemetry/headless/context/TelemetryConfigProvider.js.map +1 -0
- package/dist/telemetry/headless/context/telemetryConfig.d.ts +68 -0
- package/dist/telemetry/headless/context/telemetryConfig.d.ts.map +1 -0
- package/dist/telemetry/headless/context/telemetryConfig.js +119 -0
- package/dist/telemetry/headless/context/telemetryConfig.js.map +1 -0
- package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts +35 -0
- package/dist/telemetry/headless/guards/RequireTelemetryEnabled.d.ts.map +1 -0
- package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js +44 -0
- package/dist/telemetry/headless/guards/RequireTelemetryEnabled.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts +40 -0
- package/dist/telemetry/headless/hooks/useTelemetryAdmin.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAdmin.js +111 -0
- package/dist/telemetry/headless/hooks/useTelemetryAdmin.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts +120 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistant.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistant.js +185 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistant.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts +12 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js +36 -0
- package/dist/telemetry/headless/hooks/useTelemetryAssistantAvailable.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts +46 -0
- package/dist/telemetry/headless/hooks/useTelemetryConnection.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryConnection.js +133 -0
- package/dist/telemetry/headless/hooks/useTelemetryConnection.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts +147 -0
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.js +231 -0
- package/dist/telemetry/headless/hooks/useTelemetryDashboard.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts +95 -0
- package/dist/telemetry/headless/hooks/useTelemetryExplorer.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryExplorer.js +197 -0
- package/dist/telemetry/headless/hooks/useTelemetryExplorer.js.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts +69 -0
- package/dist/telemetry/headless/hooks/useTelemetryStack.d.ts.map +1 -0
- package/dist/telemetry/headless/hooks/useTelemetryStack.js +129 -0
- package/dist/telemetry/headless/hooks/useTelemetryStack.js.map +1 -0
- package/dist/telemetry/headless/index.d.ts +34 -0
- package/dist/telemetry/headless/index.d.ts.map +1 -0
- package/dist/telemetry/headless/index.js +34 -0
- package/dist/telemetry/headless/index.js.map +1 -0
- package/dist/telemetry/headless/lib/assistantExport.d.ts +12 -0
- package/dist/telemetry/headless/lib/assistantExport.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/assistantExport.js +116 -0
- package/dist/telemetry/headless/lib/assistantExport.js.map +1 -0
- package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts +91 -0
- package/dist/telemetry/headless/lib/dashboard/assistantPrompt.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js +246 -0
- package/dist/telemetry/headless/lib/dashboard/assistantPrompt.js.map +1 -0
- package/dist/telemetry/headless/lib/dashboardState.d.ts +58 -0
- package/dist/telemetry/headless/lib/dashboardState.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/dashboardState.js +153 -0
- package/dist/telemetry/headless/lib/dashboardState.js.map +1 -0
- package/dist/telemetry/headless/lib/explorerHandoff.d.ts +62 -0
- package/dist/telemetry/headless/lib/explorerHandoff.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/explorerHandoff.js +77 -0
- package/dist/telemetry/headless/lib/explorerHandoff.js.map +1 -0
- package/dist/telemetry/headless/lib/format.d.ts +113 -0
- package/dist/telemetry/headless/lib/format.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/format.js +280 -0
- package/dist/telemetry/headless/lib/format.js.map +1 -0
- package/dist/telemetry/headless/lib/metrics/metricSections.d.ts +44 -0
- package/dist/telemetry/headless/lib/metrics/metricSections.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/metrics/metricSections.js +61 -0
- package/dist/telemetry/headless/lib/metrics/metricSections.js.map +1 -0
- package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts +15 -0
- package/dist/telemetry/headless/lib/metrics/topNPreference.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/metrics/topNPreference.js +33 -0
- package/dist/telemetry/headless/lib/metrics/topNPreference.js.map +1 -0
- package/dist/telemetry/headless/lib/queryHistory.d.ts +20 -0
- package/dist/telemetry/headless/lib/queryHistory.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/queryHistory.js +53 -0
- package/dist/telemetry/headless/lib/queryHistory.js.map +1 -0
- package/dist/telemetry/headless/lib/starterQueries.d.ts +48 -0
- package/dist/telemetry/headless/lib/starterQueries.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/starterQueries.js +84 -0
- package/dist/telemetry/headless/lib/starterQueries.js.map +1 -0
- package/dist/telemetry/headless/lib/traceLink.d.ts +26 -0
- package/dist/telemetry/headless/lib/traceLink.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/traceLink.js +32 -0
- package/dist/telemetry/headless/lib/traceLink.js.map +1 -0
- package/dist/telemetry/headless/lib/unknownRoutes.d.ts +23 -0
- package/dist/telemetry/headless/lib/unknownRoutes.d.ts.map +1 -0
- package/dist/telemetry/headless/lib/unknownRoutes.js +35 -0
- package/dist/telemetry/headless/lib/unknownRoutes.js.map +1 -0
- package/dist/telemetry/headless/services/client.d.ts +144 -0
- package/dist/telemetry/headless/services/client.d.ts.map +1 -0
- package/dist/telemetry/headless/services/client.js +144 -0
- package/dist/telemetry/headless/services/client.js.map +1 -0
- package/dist/telemetry/headless/services/telemetry.d.ts +483 -0
- package/dist/telemetry/headless/services/telemetry.d.ts.map +1 -0
- package/dist/telemetry/headless/services/telemetry.js +190 -0
- package/dist/telemetry/headless/services/telemetry.js.map +1 -0
- package/dist/telemetry/headless/services/telemetryDashboard.d.ts +321 -0
- package/dist/telemetry/headless/services/telemetryDashboard.d.ts.map +1 -0
- package/dist/telemetry/headless/services/telemetryDashboard.js +103 -0
- package/dist/telemetry/headless/services/telemetryDashboard.js.map +1 -0
- package/dist/telemetry/internal/useIsMounted.d.ts +9 -0
- package/dist/telemetry/internal/useIsMounted.d.ts.map +1 -0
- package/dist/telemetry/internal/useIsMounted.js +19 -0
- package/dist/telemetry/internal/useIsMounted.js.map +1 -0
- package/dist/telemetry/internal/useVisiblePolling.d.ts +55 -0
- package/dist/telemetry/internal/useVisiblePolling.d.ts.map +1 -0
- package/dist/telemetry/internal/useVisiblePolling.js +96 -0
- package/dist/telemetry/internal/useVisiblePolling.js.map +1 -0
- package/dist/telemetry/internal/visuallyHidden.d.ts +12 -0
- package/dist/telemetry/internal/visuallyHidden.d.ts.map +1 -0
- package/dist/telemetry/internal/visuallyHidden.js +15 -0
- package/dist/telemetry/internal/visuallyHidden.js.map +1 -0
- package/dist/telemetry/theme/augment.d.ts +65 -0
- package/dist/telemetry/theme/augment.d.ts.map +1 -0
- package/dist/telemetry/theme/augment.js +37 -0
- package/dist/telemetry/theme/augment.js.map +1 -0
- package/dist/telemetry/theme/telemetryTokens.d.ts +121 -0
- package/dist/telemetry/theme/telemetryTokens.d.ts.map +1 -0
- package/dist/telemetry/theme/telemetryTokens.js +129 -0
- package/dist/telemetry/theme/telemetryTokens.js.map +1 -0
- package/dist/telemetry/ui/admin.d.ts +35 -0
- package/dist/telemetry/ui/admin.d.ts.map +1 -0
- package/dist/telemetry/ui/admin.js +58 -0
- package/dist/telemetry/ui/admin.js.map +1 -0
- package/dist/telemetry/ui/components/AssistantContainer.d.ts +35 -0
- package/dist/telemetry/ui/components/AssistantContainer.d.ts.map +1 -0
- package/dist/telemetry/ui/components/AssistantContainer.js +83 -0
- package/dist/telemetry/ui/components/AssistantContainer.js.map +1 -0
- package/dist/telemetry/ui/components/AssistantPanel.d.ts +22 -0
- package/dist/telemetry/ui/components/AssistantPanel.d.ts.map +1 -0
- package/dist/telemetry/ui/components/AssistantPanel.js +150 -0
- package/dist/telemetry/ui/components/AssistantPanel.js.map +1 -0
- package/dist/telemetry/ui/components/AssistantReport.d.ts +13 -0
- package/dist/telemetry/ui/components/AssistantReport.d.ts.map +1 -0
- package/dist/telemetry/ui/components/AssistantReport.js +89 -0
- package/dist/telemetry/ui/components/AssistantReport.js.map +1 -0
- package/dist/telemetry/ui/components/AssistantTimeline.d.ts +10 -0
- package/dist/telemetry/ui/components/AssistantTimeline.d.ts.map +1 -0
- package/dist/telemetry/ui/components/AssistantTimeline.js +84 -0
- package/dist/telemetry/ui/components/AssistantTimeline.js.map +1 -0
- package/dist/telemetry/ui/components/ResultsGrid.d.ts +10 -0
- package/dist/telemetry/ui/components/ResultsGrid.d.ts.map +1 -0
- package/dist/telemetry/ui/components/ResultsGrid.js +71 -0
- package/dist/telemetry/ui/components/ResultsGrid.js.map +1 -0
- package/dist/telemetry/ui/components/SchemaPanel.d.ts +9 -0
- package/dist/telemetry/ui/components/SchemaPanel.d.ts.map +1 -0
- package/dist/telemetry/ui/components/SchemaPanel.js +42 -0
- package/dist/telemetry/ui/components/SchemaPanel.js.map +1 -0
- package/dist/telemetry/ui/components/SqlEditor.d.ts +21 -0
- package/dist/telemetry/ui/components/SqlEditor.d.ts.map +1 -0
- package/dist/telemetry/ui/components/SqlEditor.js +60 -0
- package/dist/telemetry/ui/components/SqlEditor.js.map +1 -0
- package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts +14 -0
- package/dist/telemetry/ui/components/TelemetryConnectionSection.d.ts.map +1 -0
- package/dist/telemetry/ui/components/TelemetryConnectionSection.js +243 -0
- package/dist/telemetry/ui/components/TelemetryConnectionSection.js.map +1 -0
- package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts +12 -0
- package/dist/telemetry/ui/components/TelemetryCrossLink.d.ts.map +1 -0
- package/dist/telemetry/ui/components/TelemetryCrossLink.js +21 -0
- package/dist/telemetry/ui/components/TelemetryCrossLink.js.map +1 -0
- package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts +23 -0
- package/dist/telemetry/ui/components/TelemetryServicesSection.d.ts.map +1 -0
- package/dist/telemetry/ui/components/TelemetryServicesSection.js +138 -0
- package/dist/telemetry/ui/components/TelemetryServicesSection.js.map +1 -0
- package/dist/telemetry/ui/components/TelemetrySpinner.d.ts +3 -0
- package/dist/telemetry/ui/components/TelemetrySpinner.d.ts.map +1 -0
- package/dist/telemetry/ui/components/TelemetrySpinner.js +14 -0
- package/dist/telemetry/ui/components/TelemetrySpinner.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts +17 -0
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js +70 -0
- package/dist/telemetry/ui/components/dashboard/ApiTimelineChart.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts +39 -0
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js +143 -0
- package/dist/telemetry/ui/components/dashboard/DashboardFilterBar.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts +58 -0
- package/dist/telemetry/ui/components/dashboard/DashboardPanel.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/DashboardPanel.js +62 -0
- package/dist/telemetry/ui/components/dashboard/DashboardPanel.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts +21 -0
- package/dist/telemetry/ui/components/dashboard/EventsFeed.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/EventsFeed.js +96 -0
- package/dist/telemetry/ui/components/dashboard/EventsFeed.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts +13 -0
- package/dist/telemetry/ui/components/dashboard/KpiTiles.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/KpiTiles.js +82 -0
- package/dist/telemetry/ui/components/dashboard/KpiTiles.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts +8 -0
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js +34 -0
- package/dist/telemetry/ui/components/dashboard/LogSeverityChart.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts +19 -0
- package/dist/telemetry/ui/components/dashboard/TopProblems.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/TopProblems.js +61 -0
- package/dist/telemetry/ui/components/dashboard/TopProblems.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts +12 -0
- package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js +36 -0
- package/dist/telemetry/ui/components/dashboard/UnknownRoutesPanel.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts +35 -0
- package/dist/telemetry/ui/components/dashboard/VerdictBanner.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/VerdictBanner.js +68 -0
- package/dist/telemetry/ui/components/dashboard/VerdictBanner.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts +9 -0
- package/dist/telemetry/ui/components/dashboard/ZoomBrush.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/ZoomBrush.js +96 -0
- package/dist/telemetry/ui/components/dashboard/ZoomBrush.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts +75 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js +247 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSections.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts +19 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js +64 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricSeriesChart.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts +74 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js +126 -0
- package/dist/telemetry/ui/components/dashboard/metrics/MetricTable.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/severity.d.ts +43 -0
- package/dist/telemetry/ui/components/dashboard/severity.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/severity.js +66 -0
- package/dist/telemetry/ui/components/dashboard/severity.js.map +1 -0
- package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts +11 -0
- package/dist/telemetry/ui/components/dashboard/timelineAxis.d.ts.map +1 -0
- package/dist/telemetry/ui/components/dashboard/timelineAxis.js +20 -0
- package/dist/telemetry/ui/components/dashboard/timelineAxis.js.map +1 -0
- package/dist/telemetry/ui/dashboard-page.d.ts +2 -0
- package/dist/telemetry/ui/dashboard-page.d.ts.map +1 -0
- package/dist/telemetry/ui/dashboard-page.js +6 -0
- package/dist/telemetry/ui/dashboard-page.js.map +1 -0
- package/dist/telemetry/ui/explorer-page.d.ts +2 -0
- package/dist/telemetry/ui/explorer-page.d.ts.map +1 -0
- package/dist/telemetry/ui/explorer-page.js +6 -0
- package/dist/telemetry/ui/explorer-page.js.map +1 -0
- package/dist/telemetry/ui/index.d.ts +6 -0
- package/dist/telemetry/ui/index.d.ts.map +1 -0
- package/dist/telemetry/ui/index.js +10 -0
- package/dist/telemetry/ui/index.js.map +1 -0
- package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts +14 -0
- package/dist/telemetry/ui/pages/TelemetryDashboardPage.d.ts.map +1 -0
- package/dist/telemetry/ui/pages/TelemetryDashboardPage.js +286 -0
- package/dist/telemetry/ui/pages/TelemetryDashboardPage.js.map +1 -0
- package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts +15 -0
- package/dist/telemetry/ui/pages/TelemetryExplorerPage.d.ts.map +1 -0
- package/dist/telemetry/ui/pages/TelemetryExplorerPage.js +197 -0
- package/dist/telemetry/ui/pages/TelemetryExplorerPage.js.map +1 -0
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts +28 -0
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.d.ts.map +1 -0
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.js +278 -0
- package/dist/telemetry/ui/pages/TelemetrySettingsPage.js.map +1 -0
- package/dist/telemetry/ui/settings-page.d.ts +2 -0
- package/dist/telemetry/ui/settings-page.d.ts.map +1 -0
- package/dist/telemetry/ui/settings-page.js +6 -0
- package/dist/telemetry/ui/settings-page.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/test-platform-host.d.ts +108 -0
- package/dist/testing/test-platform-host.d.ts.map +1 -0
- package/dist/testing/test-platform-host.js +101 -0
- package/dist/testing/test-platform-host.js.map +1 -0
- package/package.json +132 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// "Is this component still mounted?" as a stable getter, to guard `setState`
|
|
2
|
+
// after an `await`. A private copy of the reference app's `useIsMounted`; not
|
|
3
|
+
// exported.
|
|
4
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
5
|
+
export function useIsMounted() {
|
|
6
|
+
const mounted = useRef(true);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
mounted.current = true;
|
|
9
|
+
return () => {
|
|
10
|
+
mounted.current = false;
|
|
11
|
+
};
|
|
12
|
+
}, []);
|
|
13
|
+
return useCallback(() => mounted.current, []);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=use-is-mounted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-is-mounted.js","sourceRoot":"","sources":["../../../src/doctor/internal/use-is-mounted.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,YAAY;AAEZ,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ChipProps, SxProps, Theme } from '@mui/material';
|
|
2
|
+
import type { ReactElement } from 'react';
|
|
3
|
+
import type { DoctorCheckReport, DoctorStatus } from '@marinoscar/platform-contract/doctor';
|
|
4
|
+
/**
|
|
5
|
+
* The label of each status, as the page shows it.
|
|
6
|
+
*
|
|
7
|
+
* @stability stable
|
|
8
|
+
*/
|
|
9
|
+
export declare const STATUS_LABELS: Readonly<Record<DoctorStatus, string>>;
|
|
10
|
+
/**
|
|
11
|
+
* The MUI palette role of each status: the role its `palette.status` token
|
|
12
|
+
* defaults to (`pass` `success`, `warn` `warning`, `fail` `error`; `skip` the
|
|
13
|
+
* neutral default chip).
|
|
14
|
+
*
|
|
15
|
+
* @stability stable
|
|
16
|
+
*/
|
|
17
|
+
export declare const STATUS_CHIP_COLORS: Readonly<Record<DoctorStatus, ChipProps['color']>>;
|
|
18
|
+
/**
|
|
19
|
+
* The `sx` that colours an outlined status chip from the theme's status token;
|
|
20
|
+
* `skip` keeps the default chip.
|
|
21
|
+
*/
|
|
22
|
+
export declare function statusChipSx(status: DoctorStatus): SxProps<Theme> | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* The small icon of a status, coloured by the theme's `palette.status` token,
|
|
25
|
+
* with the status label as its accessible title.
|
|
26
|
+
*
|
|
27
|
+
* @param props - `status`: the status to draw.
|
|
28
|
+
* @returns the icon.
|
|
29
|
+
*
|
|
30
|
+
* @stability stable
|
|
31
|
+
*/
|
|
32
|
+
export declare function StatusIcon(props: {
|
|
33
|
+
status: DoctorStatus;
|
|
34
|
+
}): ReactElement;
|
|
35
|
+
/**
|
|
36
|
+
* The props of {@link CheckRow}.
|
|
37
|
+
*
|
|
38
|
+
* @stability stable
|
|
39
|
+
*/
|
|
40
|
+
export interface CheckRowProps {
|
|
41
|
+
/** The row to render. */
|
|
42
|
+
check: DoctorCheckReport;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* One check: icon, label, status chip, duration, detail, remedy, verbatim
|
|
46
|
+
* error and a link to the settings page that fixes it. Renders an `<li>`.
|
|
47
|
+
*
|
|
48
|
+
* @param props - see {@link CheckRowProps}.
|
|
49
|
+
* @returns the row.
|
|
50
|
+
*
|
|
51
|
+
* @stability stable
|
|
52
|
+
*/
|
|
53
|
+
export declare function CheckRow({ check }: CheckRowProps): ReactElement;
|
|
54
|
+
//# sourceMappingURL=check-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-row.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/check-row.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAM/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAI5F;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAKhE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAKjF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAM7E;AASD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,YAAY,CASxE;AASD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,GAAG,YAAY,CAkE/D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// One Doctor check, rendered as a row (issue #634; packaged by #696).
|
|
3
|
+
//
|
|
4
|
+
// Status icon, label, a status chip, the detail line, the remedy as its own
|
|
5
|
+
// sentence, and the underlying error VERBATIM in a `<pre>` (wrapping rather
|
|
6
|
+
// than truncating: a provider error's codes and quoted names are the
|
|
7
|
+
// diagnosis). When the check names a `settingsPath`, an "Open settings" link
|
|
8
|
+
// goes straight to the page that fixes it. Colours come from the theme's
|
|
9
|
+
// `palette.status` tokens (see ../internal/status-colors.ts).
|
|
10
|
+
import { Box, Button, Chip, Stack, Typography } from '@mui/material';
|
|
11
|
+
import { alpha } from '@mui/material/styles';
|
|
12
|
+
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
|
|
13
|
+
import WarningAmberIcon from '@mui/icons-material/WarningAmber';
|
|
14
|
+
import ErrorOutlineIcon from '@mui/icons-material/ErrorOutlineOutlined';
|
|
15
|
+
import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutlined';
|
|
16
|
+
import { Link as RouterLink } from 'react-router-dom';
|
|
17
|
+
import { statusColor } from '../internal/status-colors.js';
|
|
18
|
+
/**
|
|
19
|
+
* The label of each status, as the page shows it.
|
|
20
|
+
*
|
|
21
|
+
* @stability stable
|
|
22
|
+
*/
|
|
23
|
+
export const STATUS_LABELS = {
|
|
24
|
+
pass: 'Pass',
|
|
25
|
+
warn: 'Warning',
|
|
26
|
+
fail: 'Fail',
|
|
27
|
+
skip: 'Skipped',
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The MUI palette role of each status: the role its `palette.status` token
|
|
31
|
+
* defaults to (`pass` `success`, `warn` `warning`, `fail` `error`; `skip` the
|
|
32
|
+
* neutral default chip).
|
|
33
|
+
*
|
|
34
|
+
* @stability stable
|
|
35
|
+
*/
|
|
36
|
+
export const STATUS_CHIP_COLORS = {
|
|
37
|
+
pass: 'success',
|
|
38
|
+
warn: 'warning',
|
|
39
|
+
fail: 'error',
|
|
40
|
+
skip: 'default',
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* The `sx` that colours an outlined status chip from the theme's status token;
|
|
44
|
+
* `skip` keeps the default chip.
|
|
45
|
+
*/
|
|
46
|
+
export function statusChipSx(status) {
|
|
47
|
+
if (STATUS_CHIP_COLORS[status] === 'default')
|
|
48
|
+
return undefined;
|
|
49
|
+
return (theme) => {
|
|
50
|
+
const color = statusColor(theme, status);
|
|
51
|
+
return { color, borderColor: alpha(color, 0.7), '& .MuiChip-icon': { color } };
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const ICONS = {
|
|
55
|
+
pass: CheckCircleIcon,
|
|
56
|
+
warn: WarningAmberIcon,
|
|
57
|
+
fail: ErrorOutlineIcon,
|
|
58
|
+
skip: RemoveCircleOutlineIcon,
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* The small icon of a status, coloured by the theme's `palette.status` token,
|
|
62
|
+
* with the status label as its accessible title.
|
|
63
|
+
*
|
|
64
|
+
* @param props - `status`: the status to draw.
|
|
65
|
+
* @returns the icon.
|
|
66
|
+
*
|
|
67
|
+
* @stability stable
|
|
68
|
+
*/
|
|
69
|
+
export function StatusIcon(props) {
|
|
70
|
+
const Icon = ICONS[props.status];
|
|
71
|
+
return (_jsx(Icon, { fontSize: "small", titleAccess: STATUS_LABELS[props.status], sx: (theme) => ({ color: statusColor(theme, props.status) }) }));
|
|
72
|
+
}
|
|
73
|
+
/** Probe timings are milliseconds to a few seconds; a short, readable form is enough. */
|
|
74
|
+
function formatCheckDuration(ms) {
|
|
75
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
76
|
+
return '—';
|
|
77
|
+
if (ms < 1000)
|
|
78
|
+
return `${Math.round(ms)} ms`;
|
|
79
|
+
return `${(ms / 1000).toFixed(1)} s`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* One check: icon, label, status chip, duration, detail, remedy, verbatim
|
|
83
|
+
* error and a link to the settings page that fixes it. Renders an `<li>`.
|
|
84
|
+
*
|
|
85
|
+
* @param props - see {@link CheckRowProps}.
|
|
86
|
+
* @returns the row.
|
|
87
|
+
*
|
|
88
|
+
* @stability stable
|
|
89
|
+
*/
|
|
90
|
+
export function CheckRow({ check }) {
|
|
91
|
+
return (_jsxs(Box, { component: "li", sx: { display: 'flex', gap: 1.5, alignItems: 'flex-start', listStyle: 'none' }, "data-testid": `doctor-check-${check.id}`, children: [_jsx(Box, { sx: { pt: 0.25, display: 'flex' }, children: _jsx(StatusIcon, { status: check.status }) }), _jsxs(Box, { sx: { minWidth: 0, flexGrow: 1 }, children: [_jsxs(Stack, { direction: "row", spacing: 1, useFlexGap: true, sx: { alignItems: 'center', flexWrap: 'wrap', rowGap: 0.5 }, children: [_jsx(Typography, { variant: "subtitle2", component: "h3", children: check.label }), _jsx(Chip, { size: "small", variant: "outlined", label: STATUS_LABELS[check.status], sx: statusChipSx(check.status), "data-testid": `doctor-check-status-${check.id}` }), _jsx(Typography, { variant: "caption", color: "text.secondary", children: formatCheckDuration(check.durationMs) })] }), check.detail && (_jsx(Typography, { variant: "body2", color: "text.secondary", sx: { overflowWrap: 'anywhere' }, children: check.detail })), check.remedy && (_jsx(Typography, { variant: "body2", sx: { mt: 0.5 }, "data-testid": `doctor-check-remedy-${check.id}`, children: check.remedy })), check.error && (_jsx(Box, { component: "pre", "data-testid": `doctor-check-error-${check.id}`, sx: {
|
|
92
|
+
m: 0,
|
|
93
|
+
mt: 1,
|
|
94
|
+
fontFamily: 'monospace',
|
|
95
|
+
fontSize: '0.8125rem',
|
|
96
|
+
whiteSpace: 'pre-wrap',
|
|
97
|
+
wordBreak: 'break-word',
|
|
98
|
+
}, children: check.error })), check.settingsPath && (_jsx(Button, { component: RouterLink, to: check.settingsPath, size: "small", sx: { mt: 0.5, ml: -0.5 }, "aria-label": `Open settings for ${check.label}`, children: "Open settings" }))] })] }));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=check-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-row.js","sourceRoot":"","sources":["../../../src/doctor/ui/check-row.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/copy.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,eAAO,MAAM,uBAAuB,uGACkE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// The Doctor's title and description, ONE source for the registry card
|
|
2
|
+
// (`doctorSettingsPage.card`) and the page heading, so the two stay identical
|
|
3
|
+
// word for word. Not exported from the slice.
|
|
4
|
+
export const DOCTOR_PAGE_TITLE = 'Doctor';
|
|
5
|
+
export const DOCTOR_PAGE_DESCRIPTION = 'Check the configuration, connectivity and health of every capability, including telemetry capture.';
|
|
6
|
+
//# sourceMappingURL=copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/doctor/ui/copy.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,8EAA8E;AAC9E,8CAA8C;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAE1C,MAAM,CAAC,MAAM,uBAAuB,GAClC,oGAAoG,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ComponentType, ReactElement } from 'react';
|
|
2
|
+
import type { SxProps, Theme } from '@mui/material';
|
|
3
|
+
import type { DoctorCategoryLabel } from '../headless/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* The props of {@link DoctorPageProps.slots}'s `Header`.
|
|
6
|
+
*
|
|
7
|
+
* @stability experimental
|
|
8
|
+
*/
|
|
9
|
+
export interface DoctorPageHeaderProps {
|
|
10
|
+
/** The page title (the card's title). */
|
|
11
|
+
title: string;
|
|
12
|
+
/** The page subtitle (the card's description). */
|
|
13
|
+
description: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The props of {@link DoctorPage}. Every prop is optional; the app's route
|
|
17
|
+
* renders `<DoctorPage />` as is.
|
|
18
|
+
*
|
|
19
|
+
* @extensionPoint slot
|
|
20
|
+
* @stability experimental
|
|
21
|
+
*/
|
|
22
|
+
export interface DoctorPageProps {
|
|
23
|
+
/** Category display order and labels. Default `PLATFORM_DOCTOR_CATEGORY_LABELS`; unknown categories render after, title-cased. */
|
|
24
|
+
categories?: readonly DoctorCategoryLabel[];
|
|
25
|
+
/** Styles for the page's outer box. */
|
|
26
|
+
sx?: SxProps<Theme>;
|
|
27
|
+
/** Replaceable parts of the page. */
|
|
28
|
+
slots?: {
|
|
29
|
+
/** Replaces the title and subtitle block. */
|
|
30
|
+
Header?: ComponentType<DoctorPageHeaderProps>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The admin Doctor page: runs the checks, shows the verdict, the counts by
|
|
35
|
+
* status, one accordion per category (problems expanded) and a "Problems only"
|
|
36
|
+
* filter. Reads the app through `usePlatformHost()`; the app's route gates it.
|
|
37
|
+
*
|
|
38
|
+
* @param props - see {@link DoctorPageProps}.
|
|
39
|
+
* @returns the page.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* <Route path={doctorSettingsPage.card.path} element={<DoctorPage />} />
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @extensionPoint component
|
|
47
|
+
* @stability experimental
|
|
48
|
+
*/
|
|
49
|
+
export declare function DoctorPage(props?: DoctorPageProps): ReactElement;
|
|
50
|
+
//# sourceMappingURL=doctor-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-page.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/doctor-page.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAkBzD,OAAO,KAAK,EAAc,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAahE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAMhE;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,kIAAkI;IAClI,UAAU,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC5C,uCAAuC;IACvC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,qCAAqC;IACrC,KAAK,CAAC,EAAE;QACN,6CAA6C;QAC7C,MAAM,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;KAC/C,CAAC;CACH;AAmGD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,KAAK,GAAE,eAAoB,GAAG,YAAY,CAqKpE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// The Doctor page (issue #634; packaged by #696)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// The question it answers: is every capability configured, reachable and
|
|
7
|
+
// healthy? One row per check, grouped by category, with the remedy and a link
|
|
8
|
+
// to the settings page that fixes it.
|
|
9
|
+
//
|
|
10
|
+
// ⚠ A FAILING CHECK IS NOT A PAGE ERROR. The endpoint answers 200 with a
|
|
11
|
+
// `fail` verdict; that renders as the verdict Alert and the rows below it. The
|
|
12
|
+
// page-level error Alert is reserved for a request that actually failed.
|
|
13
|
+
//
|
|
14
|
+
// THE PAGE DOES NOT CHECK PERMISSIONS: the app's route gate does
|
|
15
|
+
// (`doctorSettingsPage.card.permission`). It never imports app context, layout
|
|
16
|
+
// or navigation; everything comes from `usePlatformHost()`, and links use
|
|
17
|
+
// react-router's `Link`.
|
|
18
|
+
//
|
|
19
|
+
// Deliberately NOT feature-gated: the page reports on AI and telemetry while
|
|
20
|
+
// they are switched off (as `skip`), which is precisely when an admin asks
|
|
21
|
+
// why a capability is missing.
|
|
22
|
+
// =============================================================================
|
|
23
|
+
import { useMemo, useState } from 'react';
|
|
24
|
+
import { Accordion, AccordionDetails, AccordionSummary, Alert, AlertTitle, Box, Button, Chip, CircularProgress, Container, FormControlLabel, Skeleton, Stack, Switch, Typography, } from '@mui/material';
|
|
25
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
26
|
+
import RefreshIcon from '@mui/icons-material/Refresh';
|
|
27
|
+
import { DOCTOR_STATUS_RANK } from '@marinoscar/platform-contract/doctor';
|
|
28
|
+
import { useOptionalPlatformHost } from '../../core/index.js';
|
|
29
|
+
import { PLATFORM_DOCTOR_CATEGORY_LABELS, categoryLabel, useDoctor, } from '../headless/index.js';
|
|
30
|
+
import { formatRelativeTime as fallbackRelativeTime } from '../internal/relative-time.js';
|
|
31
|
+
import { CheckRow, STATUS_LABELS, StatusIcon, statusChipSx } from './check-row.js';
|
|
32
|
+
import { DOCTOR_PAGE_DESCRIPTION, DOCTOR_PAGE_TITLE } from './copy.js';
|
|
33
|
+
import { SupportBundleButton } from './support-bundle-button.js';
|
|
34
|
+
function isProblem(status) {
|
|
35
|
+
return status === 'warn' || status === 'fail';
|
|
36
|
+
}
|
|
37
|
+
function worstStatus(checks) {
|
|
38
|
+
let worst = 'pass';
|
|
39
|
+
for (const check of checks) {
|
|
40
|
+
if (DOCTOR_STATUS_RANK[check.status] > DOCTOR_STATUS_RANK[worst]) {
|
|
41
|
+
worst = check.status;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return worst;
|
|
45
|
+
}
|
|
46
|
+
/** Known categories in display order, then unknown ones in the order the API sent them. */
|
|
47
|
+
function groupByCategory(checks, labels) {
|
|
48
|
+
const byKey = new Map();
|
|
49
|
+
for (const check of checks) {
|
|
50
|
+
const list = byKey.get(check.category);
|
|
51
|
+
if (list)
|
|
52
|
+
list.push(check);
|
|
53
|
+
else
|
|
54
|
+
byKey.set(check.category, [check]);
|
|
55
|
+
}
|
|
56
|
+
const knownKeys = labels.map((category) => category.key);
|
|
57
|
+
const ordered = [
|
|
58
|
+
...knownKeys.filter((key) => byKey.has(key)),
|
|
59
|
+
...[...byKey.keys()].filter((key) => !knownKeys.includes(key)),
|
|
60
|
+
];
|
|
61
|
+
return ordered.map((key) => ({ key, label: categoryLabel(key, labels), checks: byKey.get(key) ?? [] }));
|
|
62
|
+
}
|
|
63
|
+
function countByStatus(checks) {
|
|
64
|
+
const counts = { pass: 0, skip: 0, warn: 0, fail: 0 };
|
|
65
|
+
for (const check of checks)
|
|
66
|
+
counts[check.status] += 1;
|
|
67
|
+
return counts;
|
|
68
|
+
}
|
|
69
|
+
function verdictSeverity(verdict) {
|
|
70
|
+
switch (verdict) {
|
|
71
|
+
case 'fail':
|
|
72
|
+
return 'error';
|
|
73
|
+
case 'warn':
|
|
74
|
+
return 'warning';
|
|
75
|
+
case 'skip':
|
|
76
|
+
return 'info';
|
|
77
|
+
default:
|
|
78
|
+
return 'success';
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function verdictTitle(report, counts) {
|
|
82
|
+
const problems = counts.warn + counts.fail;
|
|
83
|
+
if (problems > 0) {
|
|
84
|
+
return problems === 1 ? '1 problem needs attention' : `${problems} problems need attention`;
|
|
85
|
+
}
|
|
86
|
+
if (counts.skip > 0 || report.verdict === 'skip') {
|
|
87
|
+
return 'No problems found; some checks were skipped';
|
|
88
|
+
}
|
|
89
|
+
return 'All checks passed';
|
|
90
|
+
}
|
|
91
|
+
function formatReportDuration(ms) {
|
|
92
|
+
if (!Number.isFinite(ms) || ms < 0)
|
|
93
|
+
return '—';
|
|
94
|
+
if (ms < 1000)
|
|
95
|
+
return `${Math.round(ms)} ms`;
|
|
96
|
+
return `${(ms / 1000).toFixed(1)} s`;
|
|
97
|
+
}
|
|
98
|
+
function DefaultHeader({ title, description }) {
|
|
99
|
+
return (_jsxs(_Fragment, { children: [_jsx(Typography, { variant: "h4", component: "h1", gutterBottom: true, children: title }), _jsx(Typography, { color: "text.secondary", sx: { mb: 3 }, children: description })] }));
|
|
100
|
+
}
|
|
101
|
+
function LoadingSkeleton() {
|
|
102
|
+
return (_jsxs(Stack, { spacing: 2, "data-testid": "doctor-loading", "aria-busy": "true", "aria-label": "Running checks", children: [_jsx(Skeleton, { variant: "rounded", height: 72 }), _jsx(Skeleton, { variant: "rounded", height: 32, width: "60%" }), [0, 1, 2].map((index) => (_jsx(Skeleton, { variant: "rounded", height: 56 }, index)))] }));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The admin Doctor page: runs the checks, shows the verdict, the counts by
|
|
106
|
+
* status, one accordion per category (problems expanded) and a "Problems only"
|
|
107
|
+
* filter. Reads the app through `usePlatformHost()`; the app's route gates it.
|
|
108
|
+
*
|
|
109
|
+
* @param props - see {@link DoctorPageProps}.
|
|
110
|
+
* @returns the page.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```tsx
|
|
114
|
+
* <Route path={doctorSettingsPage.card.path} element={<DoctorPage />} />
|
|
115
|
+
* ```
|
|
116
|
+
*
|
|
117
|
+
* @extensionPoint component
|
|
118
|
+
* @stability experimental
|
|
119
|
+
*/
|
|
120
|
+
export function DoctorPage(props = {}) {
|
|
121
|
+
const { categories = PLATFORM_DOCTOR_CATEGORY_LABELS, sx, slots } = props;
|
|
122
|
+
const host = useOptionalPlatformHost();
|
|
123
|
+
const formatRelativeTime = host?.formatRelativeTime ?? fallbackRelativeTime;
|
|
124
|
+
const Header = slots?.Header ?? DefaultHeader;
|
|
125
|
+
const { report, isLoading, error, rerun } = useDoctor();
|
|
126
|
+
const [problemsOnly, setProblemsOnly] = useState(false);
|
|
127
|
+
// Only the categories the admin has toggled; the rest follow the default
|
|
128
|
+
// (expanded when they contain a problem), which re-derives on each run.
|
|
129
|
+
const [expandedOverrides, setExpandedOverrides] = useState({});
|
|
130
|
+
const checks = useMemo(() => report?.checks ?? [], [report]);
|
|
131
|
+
const counts = useMemo(() => countByStatus(checks), [checks]);
|
|
132
|
+
// Grouped from ALL checks so each category's summary stays truthful; the
|
|
133
|
+
// "Problems only" filter is applied per category below.
|
|
134
|
+
const groups = useMemo(() => groupByCategory(checks, categories)
|
|
135
|
+
.map((group) => ({
|
|
136
|
+
...group,
|
|
137
|
+
visible: problemsOnly ? group.checks.filter((check) => isProblem(check.status)) : group.checks,
|
|
138
|
+
}))
|
|
139
|
+
.filter((group) => group.visible.length > 0), [checks, categories, problemsOnly]);
|
|
140
|
+
const handleRerun = () => {
|
|
141
|
+
setExpandedOverrides({});
|
|
142
|
+
void rerun();
|
|
143
|
+
};
|
|
144
|
+
return (_jsx(Container, { maxWidth: "lg", children: _jsxs(Box, { sx: [{ py: { xs: 2, sm: 4 } }, ...(Array.isArray(sx) ? sx : sx ? [sx] : [])], "data-testid": "doctor-page", children: [_jsx(Header, { title: DOCTOR_PAGE_TITLE, description: DOCTOR_PAGE_DESCRIPTION }), _jsxs(Stack, { direction: { xs: 'column', sm: 'row' }, spacing: { xs: 1, sm: 2 }, sx: { mb: 3, alignItems: { xs: 'stretch', sm: 'flex-start' } }, children: [_jsx(Button, { variant: "contained", onClick: handleRerun, disabled: isLoading, startIcon: isLoading ? _jsx(CircularProgress, { size: 16, color: "inherit" }) : _jsx(RefreshIcon, {}), children: isLoading ? 'Running checks…' : 'Run again' }), _jsx(SupportBundleButton, {}), report && (_jsxs(Typography, { variant: "body2", color: "text.secondary", sx: { pt: { sm: 1 } }, "data-testid": "doctor-generated", children: ["Generated ", formatRelativeTime(report.generatedAt), " \u00B7 took ", formatReportDuration(report.durationMs)] }))] }), error && (_jsx(Alert, { severity: "error", sx: { mb: 3 }, "data-testid": "doctor-request-error", action: _jsx(Button, { color: "inherit", size: "small", onClick: handleRerun, disabled: isLoading, children: "Retry" }), children: error })), isLoading && !report && _jsx(LoadingSkeleton, {}), report && (_jsxs(Stack, { spacing: 3, children: [_jsx(Alert, { severity: verdictSeverity(report.verdict), role: "status", "aria-live": "polite", "data-testid": "doctor-verdict", children: _jsx(AlertTitle, { sx: { mb: 0 }, children: verdictTitle(report, counts) }) }), _jsxs(Stack, { direction: { xs: 'column', sm: 'row' }, spacing: { xs: 1, sm: 2 }, sx: { alignItems: { xs: 'flex-start', sm: 'center' }, justifyContent: 'space-between' }, children: [_jsx(Stack, { direction: "row", spacing: 1, useFlexGap: true, sx: { flexWrap: 'wrap' }, "aria-label": "Checks by status", "data-testid": "doctor-summary", children: ['pass', 'warn', 'fail', 'skip'].map((status) => (_jsx(Chip, { size: "small", variant: "outlined", icon: _jsx(StatusIcon, { status: status }), sx: statusChipSx(status), label: `${STATUS_LABELS[status]}: ${counts[status]}`, "data-testid": `doctor-count-${status}` }, status))) }), _jsx(FormControlLabel, { control: _jsx(Switch, { checked: problemsOnly, onChange: (event) => setProblemsOnly(event.target.checked) }), label: "Problems only" })] }), groups.length === 0 && (_jsx(Typography, { color: "text.secondary", "data-testid": "doctor-empty", children: problemsOnly ? 'No warnings or failures.' : 'No checks were reported.' })), _jsx(Box, { children: groups.map((group) => {
|
|
145
|
+
const worst = worstStatus(group.checks);
|
|
146
|
+
const expanded = expandedOverrides[group.key] ?? isProblem(worst);
|
|
147
|
+
const headingId = `doctor-category-${group.key}-heading`;
|
|
148
|
+
const groupCounts = countByStatus(group.checks);
|
|
149
|
+
return (_jsxs(Accordion, { expanded: expanded, onChange: (_event, isExpanded) => setExpandedOverrides((previous) => ({ ...previous, [group.key]: isExpanded })), disableGutters: true, "data-testid": `doctor-category-${group.key}`, children: [_jsx(AccordionSummary, { expandIcon: _jsx(ExpandMoreIcon, {}), "aria-controls": `doctor-category-${group.key}-content`, id: headingId, children: _jsxs(Stack, { direction: "row", spacing: 1.5, useFlexGap: true, sx: { alignItems: 'center', flexWrap: 'wrap', minWidth: 0 }, children: [_jsx(StatusIcon, { status: worst }), _jsx(Typography, { variant: "subtitle1", component: "h2", children: group.label }), _jsxs(Typography, { variant: "body2", color: "text.secondary", children: [groupCounts.pass, "/", group.checks.length, " passed"] })] }) }), _jsx(AccordionDetails, { id: `doctor-category-${group.key}-content`, children: _jsx(Stack, { component: "ul", spacing: 2, sx: { m: 0, p: 0 }, children: group.visible.map((check) => (_jsx(CheckRow, { check: check }, check.id))) }) })] }, group.key));
|
|
150
|
+
}) })] }))] }) }));
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=doctor-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-page.js","sourceRoot":"","sources":["../../../src/doctor/ui/doctor-page.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { DoctorPage } from './doctor-page.js';
|
|
2
|
+
export type { DoctorPageHeaderProps, DoctorPageProps } from './doctor-page.js';
|
|
3
|
+
export { CheckRow, STATUS_CHIP_COLORS, STATUS_LABELS, StatusIcon } from './check-row.js';
|
|
4
|
+
export type { CheckRowProps } from './check-row.js';
|
|
5
|
+
export { doctorSettingsPage } from './settings-page.js';
|
|
6
|
+
export { SUPPORT_BUNDLE_HELPER_TEXT, SupportBundleButton } from './support-bundle-button.js';
|
|
7
|
+
export type { SupportBundleButtonProps } from './support-bundle-button.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACzF,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC7F,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// `@marinoscar/platform-web/doctor/ui`: the Doctor page, its parts and its
|
|
2
|
+
// settings-page descriptor (issue #696). Documented in ../README.md.
|
|
3
|
+
export { DoctorPage } from './doctor-page.js';
|
|
4
|
+
export { CheckRow, STATUS_CHIP_COLORS, STATUS_LABELS, StatusIcon } from './check-row.js';
|
|
5
|
+
export { doctorSettingsPage } from './settings-page.js';
|
|
6
|
+
export { SUPPORT_BUNDLE_HELPER_TEXT, SupportBundleButton } from './support-bundle-button.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/ui/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qEAAqE;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PlatformSettingsPage } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* The Doctor as a packaged settings page: the app appends
|
|
4
|
+
* `{ ...doctorSettingsPage.card, Icon: doctorSettingsPage.Icon }` to its admin
|
|
5
|
+
* registry and routes `card.path` to `Page` behind its permission gate for
|
|
6
|
+
* `card.permission` (`system_settings:read`, the exact string
|
|
7
|
+
* `@marinoscar/platform-api/doctor` enforces by default). No `feature`: the
|
|
8
|
+
* Doctor reports on AI and telemetry while they are off.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* // apps/web/src/config/adminSections.tsx (Observability, last card)
|
|
13
|
+
* { ...doctorSettingsPage.card, Icon: doctorSettingsPage.Icon },
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @extensionPoint component
|
|
17
|
+
* @stability experimental
|
|
18
|
+
*/
|
|
19
|
+
export declare const doctorSettingsPage: PlatformSettingsPage<never>;
|
|
20
|
+
//# sourceMappingURL=settings-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-page.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/settings-page.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIhE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,EAAE,oBAAoB,CAAC,KAAK,CAU1D,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import HealthAndSafetyOutlinedIcon from '@mui/icons-material/HealthAndSafetyOutlined';
|
|
2
|
+
import { DOCTOR_PAGE_DESCRIPTION, DOCTOR_PAGE_TITLE } from './copy.js';
|
|
3
|
+
import { DoctorPage } from './doctor-page.js';
|
|
4
|
+
/**
|
|
5
|
+
* The Doctor as a packaged settings page: the app appends
|
|
6
|
+
* `{ ...doctorSettingsPage.card, Icon: doctorSettingsPage.Icon }` to its admin
|
|
7
|
+
* registry and routes `card.path` to `Page` behind its permission gate for
|
|
8
|
+
* `card.permission` (`system_settings:read`, the exact string
|
|
9
|
+
* `@marinoscar/platform-api/doctor` enforces by default). No `feature`: the
|
|
10
|
+
* Doctor reports on AI and telemetry while they are off.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // apps/web/src/config/adminSections.tsx (Observability, last card)
|
|
15
|
+
* { ...doctorSettingsPage.card, Icon: doctorSettingsPage.Icon },
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* @extensionPoint component
|
|
19
|
+
* @stability experimental
|
|
20
|
+
*/
|
|
21
|
+
export const doctorSettingsPage = {
|
|
22
|
+
id: 'doctor',
|
|
23
|
+
card: {
|
|
24
|
+
title: DOCTOR_PAGE_TITLE,
|
|
25
|
+
description: DOCTOR_PAGE_DESCRIPTION,
|
|
26
|
+
path: '/admin/settings/doctor',
|
|
27
|
+
permission: 'system_settings:read',
|
|
28
|
+
},
|
|
29
|
+
Icon: HealthAndSafetyOutlinedIcon,
|
|
30
|
+
Page: DoctorPage,
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=settings-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-page.js","sourceRoot":"","sources":["../../../src/doctor/ui/settings-page.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,MAAM,6CAA6C,CAAC;AAGtF,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE;QACJ,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,sBAAsB;KACnC;IACD,IAAI,EAAE,2BAA2B;IACjC,IAAI,EAAE,UAAU;CACjB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SxProps, Theme } from '@mui/material';
|
|
2
|
+
import type { ReactElement } from 'react';
|
|
3
|
+
import type { UseSupportBundleDownloadOptions } from '../headless/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* The helper text under the button.
|
|
6
|
+
*
|
|
7
|
+
* @stability experimental
|
|
8
|
+
*/
|
|
9
|
+
export declare const SUPPORT_BUNDLE_HELPER_TEXT = "Includes the doctor report, versions and a 24-hour telemetry summary. Secrets and personal data are removed.";
|
|
10
|
+
/**
|
|
11
|
+
* The props of {@link SupportBundleButton}.
|
|
12
|
+
*
|
|
13
|
+
* @stability experimental
|
|
14
|
+
*/
|
|
15
|
+
export interface SupportBundleButtonProps {
|
|
16
|
+
/** Passed to `useSupportBundleDownload` (transport, route, save function). */
|
|
17
|
+
options?: UseSupportBundleDownloadOptions;
|
|
18
|
+
/** Styles for the outer stack. */
|
|
19
|
+
sx?: SxProps<Theme>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A "Download support bundle" button with its helper text and, after a
|
|
23
|
+
* failed download, the reason.
|
|
24
|
+
*
|
|
25
|
+
* @param props - see {@link SupportBundleButtonProps}.
|
|
26
|
+
* @returns the button, its helper text and its error line.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <SupportBundleButton />
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @extensionPoint component
|
|
34
|
+
* @stability experimental
|
|
35
|
+
*/
|
|
36
|
+
export declare function SupportBundleButton(props?: SupportBundleButtonProps): ReactElement;
|
|
37
|
+
//# sourceMappingURL=support-bundle-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-bundle-button.d.ts","sourceRoot":"","sources":["../../../src/doctor/ui/support-bundle-button.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,iHACyE,CAAC;AAEjH;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,kCAAkC;IAClC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,wBAA6B,GAAG,YAAY,CAyBtF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// "Download support bundle" (issue #772): the Doctor page's second header
|
|
3
|
+
// action, next to "Run again". Visible to anyone who can see the page (the
|
|
4
|
+
// route needs the Doctor's own permission, `system_settings:read`); a section
|
|
5
|
+
// the viewer may not read (telemetry without `telemetry:query`) is omitted by
|
|
6
|
+
// the API, not hidden here.
|
|
7
|
+
//
|
|
8
|
+
// The download is a file; nothing here parses or renders the bundle.
|
|
9
|
+
import { Button, CircularProgress, Stack, Typography } from '@mui/material';
|
|
10
|
+
import DownloadIcon from '@mui/icons-material/Download';
|
|
11
|
+
import { useId } from 'react';
|
|
12
|
+
import { useSupportBundleDownload } from '../headless/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* The helper text under the button.
|
|
15
|
+
*
|
|
16
|
+
* @stability experimental
|
|
17
|
+
*/
|
|
18
|
+
export const SUPPORT_BUNDLE_HELPER_TEXT = 'Includes the doctor report, versions and a 24-hour telemetry summary. Secrets and personal data are removed.';
|
|
19
|
+
/**
|
|
20
|
+
* A "Download support bundle" button with its helper text and, after a
|
|
21
|
+
* failed download, the reason.
|
|
22
|
+
*
|
|
23
|
+
* @param props - see {@link SupportBundleButtonProps}.
|
|
24
|
+
* @returns the button, its helper text and its error line.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <SupportBundleButton />
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @extensionPoint component
|
|
32
|
+
* @stability experimental
|
|
33
|
+
*/
|
|
34
|
+
export function SupportBundleButton(props = {}) {
|
|
35
|
+
const { download, isDownloading, error } = useSupportBundleDownload(props.options);
|
|
36
|
+
const helperId = useId();
|
|
37
|
+
return (_jsxs(Stack, { spacing: 0.5, sx: props.sx, "data-testid": "doctor-support-bundle", children: [_jsx(Button, { variant: "outlined", onClick: () => void download(), disabled: isDownloading, "aria-describedby": helperId, startIcon: isDownloading ? _jsx(CircularProgress, { size: 16, color: "inherit" }) : _jsx(DownloadIcon, {}), children: isDownloading ? 'Preparing bundle…' : 'Download support bundle' }), _jsx(Typography, { id: helperId, variant: "caption", color: "text.secondary", sx: { maxWidth: 360 }, children: SUPPORT_BUNDLE_HELPER_TEXT }), error && (_jsx(Typography, { variant: "caption", color: "error", role: "alert", "data-testid": "doctor-support-bundle-error", children: error }))] }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=support-bundle-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"support-bundle-button.js","sourceRoot":"","sources":["../../../src/doctor/ui/support-bundle-button.tsx"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,8EAA8E;AAC9E,4BAA4B;AAC5B,EAAE;AACF,qEAAqE;AAErE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAG9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACrC,8GAA8G,CAAC;AAcjH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkC,EAAE;IACtE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IAEzB,OAAO,CACL,MAAC,KAAK,IAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,iBAAc,uBAAuB,aACpE,KAAC,MAAM,IACL,OAAO,EAAC,UAAU,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,EAC9B,QAAQ,EAAE,aAAa,sBACL,QAAQ,EAC1B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAC,YAAY,KAAG,YAE3F,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,GACzD,EACT,KAAC,UAAU,IAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAC,SAAS,EAAC,KAAK,EAAC,gBAAgB,EAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,YACrF,0BAA0B,GAChB,EACZ,KAAK,IAAI,CACR,KAAC,UAAU,IAAC,OAAO,EAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,iBAAa,6BAA6B,YAC/F,KAAK,GACK,CACd,IACK,CACT,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The npm name of this package, which holds React pages, components and hooks of the platform.
|
|
3
|
+
*
|
|
4
|
+
* A placeholder export so the build, the pack check and the smoke imports in
|
|
5
|
+
* CI have something to load end to end. Real slices arrive as subpath
|
|
6
|
+
* exports (`@marinoscar/platform-web/<slice>`).
|
|
7
|
+
*
|
|
8
|
+
* @stability experimental
|
|
9
|
+
*/
|
|
10
|
+
export declare const PLATFORM_PACKAGE: "@marinoscar/platform-web";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|