@burdenoff/microfe-bigconsole 2026.805.3 → 2026.812.2
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/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +54 -50
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
- package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
- package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
- package/dist/bigconsole/components/common/Section.js +70 -0
- package/dist/bigconsole/components/common/Section.js.map +1 -0
- package/dist/bigconsole/components/common/index.js +2 -0
- package/dist/bigconsole/components/common/sectionStyles.js +42 -0
- package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
- package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
- package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
- package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserCard.js +133 -114
- package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
- package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
- package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
- package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/previewShared.js +41 -23
- package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
- package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
- package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
- package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
- package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
- package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
- package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +838 -800
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +263 -315
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +356 -458
- package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/HomePage.js +186 -193
- package/dist/bigconsole/pages/HomePage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +887 -740
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +368 -342
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +248 -298
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,51 +5,54 @@ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
|
5
5
|
//#region src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx
|
|
6
6
|
var d = {
|
|
7
7
|
container: {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
display: "flex",
|
|
9
|
+
flexDirection: "column",
|
|
10
|
+
gap: "var(--space-controlGap)",
|
|
11
|
+
minWidth: 0
|
|
11
12
|
},
|
|
12
13
|
header: {
|
|
13
14
|
display: "flex",
|
|
15
|
+
flexWrap: "wrap",
|
|
14
16
|
justifyContent: "space-between",
|
|
15
17
|
alignItems: "center",
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
title: {
|
|
19
|
-
fontSize: "16px",
|
|
20
|
-
fontWeight: 600,
|
|
21
|
-
color: "var(--color-text-primary)",
|
|
22
|
-
margin: 0
|
|
18
|
+
gap: "var(--space-controlGap)",
|
|
19
|
+
minWidth: 0
|
|
23
20
|
},
|
|
24
21
|
headerActions: {
|
|
25
22
|
display: "flex",
|
|
23
|
+
flexWrap: "wrap",
|
|
26
24
|
gap: "8px",
|
|
27
25
|
alignItems: "center"
|
|
28
26
|
},
|
|
29
27
|
filterSelect: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
minHeight: "var(--size-controlHeight-md)",
|
|
29
|
+
padding: "0 12px",
|
|
30
|
+
fontSize: "var(--font-size-body-sm)",
|
|
31
|
+
color: "var(--color-text-primary)",
|
|
32
|
+
border: "1px solid var(--color-border-subtle)",
|
|
33
|
+
borderRadius: "var(--radius-input)",
|
|
34
34
|
backgroundColor: "var(--color-bg-surface)"
|
|
35
35
|
},
|
|
36
36
|
refreshButton: {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
minHeight: "var(--size-controlHeight-md)",
|
|
38
|
+
padding: "0 12px",
|
|
39
|
+
fontSize: "var(--font-size-body-sm)",
|
|
40
|
+
color: "var(--color-text-primary)",
|
|
41
|
+
backgroundColor: "var(--color-bg-surface)",
|
|
42
|
+
border: "1px solid var(--color-border-subtle)",
|
|
43
|
+
borderRadius: "var(--radius-button)",
|
|
42
44
|
cursor: "pointer",
|
|
43
45
|
transition: "background-color 0.15s ease"
|
|
44
46
|
},
|
|
45
47
|
table: {
|
|
46
48
|
width: "100%",
|
|
49
|
+
minWidth: "520px",
|
|
47
50
|
borderCollapse: "collapse",
|
|
48
|
-
fontSize: "
|
|
51
|
+
fontSize: "var(--font-size-body-sm)"
|
|
49
52
|
},
|
|
50
53
|
tableHeader: {
|
|
51
54
|
backgroundColor: "var(--color-bg-sunken)",
|
|
52
|
-
borderBottom: "1px solid var(--color-border)"
|
|
55
|
+
borderBottom: "1px solid var(--color-border-subtle)"
|
|
53
56
|
},
|
|
54
57
|
th: {
|
|
55
58
|
padding: "10px 12px",
|
|
@@ -59,7 +62,7 @@ var d = {
|
|
|
59
62
|
},
|
|
60
63
|
td: {
|
|
61
64
|
padding: "10px 12px",
|
|
62
|
-
borderBottom: "1px solid var(--color-border)",
|
|
65
|
+
borderBottom: "1px solid var(--color-border-subtle)",
|
|
63
66
|
color: "var(--color-text-secondary)"
|
|
64
67
|
},
|
|
65
68
|
statusCell: {
|
|
@@ -94,26 +97,42 @@ var d = {
|
|
|
94
97
|
},
|
|
95
98
|
emptyState: {
|
|
96
99
|
textAlign: "center",
|
|
97
|
-
padding: "
|
|
98
|
-
color: "var(--color-text-
|
|
100
|
+
padding: "var(--space-pagePadding) var(--space-formGap)",
|
|
101
|
+
color: "var(--color-text-secondary)",
|
|
102
|
+
backgroundColor: "var(--color-bg-surface)",
|
|
103
|
+
border: "1px solid var(--color-border-subtle)",
|
|
104
|
+
borderRadius: "var(--radius-card)"
|
|
105
|
+
},
|
|
106
|
+
emptyTitle: {
|
|
107
|
+
fontSize: "var(--font-size-body-sm)",
|
|
108
|
+
fontWeight: 600,
|
|
109
|
+
color: "var(--color-text-primary)",
|
|
110
|
+
margin: 0
|
|
99
111
|
},
|
|
100
112
|
loadMoreButton: {
|
|
101
113
|
width: "100%",
|
|
102
|
-
|
|
114
|
+
minHeight: "var(--size-controlHeight-md)",
|
|
115
|
+
padding: "0 10px",
|
|
103
116
|
marginTop: "12px",
|
|
104
|
-
backgroundColor: "var(--color-bg-
|
|
105
|
-
border: "
|
|
106
|
-
borderRadius: "
|
|
107
|
-
fontSize: "
|
|
117
|
+
backgroundColor: "var(--color-bg-surface)",
|
|
118
|
+
border: "1px solid var(--color-border-subtle)",
|
|
119
|
+
borderRadius: "var(--radius-button)",
|
|
120
|
+
fontSize: "var(--font-size-body-sm)",
|
|
108
121
|
color: "var(--color-text-secondary)",
|
|
109
122
|
cursor: "pointer",
|
|
110
123
|
transition: "background-color 0.15s ease"
|
|
111
124
|
},
|
|
112
125
|
totalCount: {
|
|
113
|
-
fontSize: "
|
|
114
|
-
color: "var(--color-text-
|
|
126
|
+
fontSize: "var(--font-size-body-sm)",
|
|
127
|
+
color: "var(--color-text-secondary)"
|
|
128
|
+
},
|
|
129
|
+
tableContainer: {
|
|
130
|
+
overflowX: "auto",
|
|
131
|
+
minWidth: 0,
|
|
132
|
+
border: "1px solid var(--color-border-subtle)",
|
|
133
|
+
borderRadius: "var(--radius-card)",
|
|
134
|
+
backgroundColor: "var(--color-bg-surface)"
|
|
115
135
|
},
|
|
116
|
-
tableContainer: { overflowX: "auto" },
|
|
117
136
|
detailRow: { backgroundColor: "var(--color-bg-sunken)" },
|
|
118
137
|
detailContent: {
|
|
119
138
|
padding: "12px",
|
|
@@ -127,23 +146,39 @@ var d = {
|
|
|
127
146
|
background: "none",
|
|
128
147
|
border: "none",
|
|
129
148
|
cursor: "pointer",
|
|
149
|
+
minHeight: "var(--size-controlHeight-md)",
|
|
150
|
+
minWidth: "var(--size-controlHeight-md)",
|
|
130
151
|
padding: "4px",
|
|
131
|
-
fontSize: "
|
|
152
|
+
fontSize: "var(--font-size-body-sm)",
|
|
153
|
+
color: "var(--color-text-secondary)"
|
|
132
154
|
}
|
|
133
155
|
};
|
|
134
|
-
function f(e
|
|
156
|
+
function f(e) {
|
|
157
|
+
try {
|
|
158
|
+
return new URL(e).hostname;
|
|
159
|
+
} catch {
|
|
160
|
+
return e;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function p(e, t) {
|
|
135
164
|
let n = new Date(e), r = (/* @__PURE__ */ new Date()).getTime() - n.getTime(), i = Math.floor(r / 6e4), a = Math.floor(i / 60), o = Math.floor(a / 24);
|
|
136
165
|
return i < 1 ? t("bigconsole.widget.eventLog.time.justNow", "Just now") : i < 60 ? t("bigconsole.widget.eventLog.time.minutesAgo", "{{count}}m ago", { count: i }) : a < 24 ? t("bigconsole.widget.eventLog.time.hoursAgo", "{{count}}h ago", { count: a }) : o < 7 ? t("bigconsole.widget.eventLog.time.daysAgo", "{{count}}d ago", { count: o }) : n.toLocaleDateString();
|
|
137
166
|
}
|
|
138
|
-
var
|
|
139
|
-
let { t:
|
|
167
|
+
var m = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpand: m }) {
|
|
168
|
+
let { t: h } = s(), g = e.status === "FAILED";
|
|
140
169
|
return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ u("tr", { children: [
|
|
141
170
|
/* @__PURE__ */ l("td", {
|
|
142
171
|
style: d.td,
|
|
143
172
|
children: /* @__PURE__ */ l("button", {
|
|
144
|
-
|
|
173
|
+
type: "button",
|
|
174
|
+
onClick: m,
|
|
175
|
+
"aria-expanded": o,
|
|
176
|
+
"aria-label": o ? "Hide event payload" : "Show event payload",
|
|
145
177
|
style: d.expandButton,
|
|
146
|
-
children:
|
|
178
|
+
children: /* @__PURE__ */ l("span", {
|
|
179
|
+
"aria-hidden": "true",
|
|
180
|
+
children: o ? "▾" : "▸"
|
|
181
|
+
})
|
|
147
182
|
})
|
|
148
183
|
}),
|
|
149
184
|
/* @__PURE__ */ l("td", {
|
|
@@ -168,16 +203,16 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
168
203
|
}), e.actionName && /* @__PURE__ */ l("div", {
|
|
169
204
|
style: {
|
|
170
205
|
fontSize: "11px",
|
|
171
|
-
color: "var(--color-text-
|
|
206
|
+
color: "var(--color-text-muted)"
|
|
172
207
|
},
|
|
173
|
-
children:
|
|
208
|
+
children: h("bigconsole.widget.eventLog.actionLabel", "Action: {{action}}", { action: e.actionName ?? "" })
|
|
174
209
|
})]
|
|
175
210
|
}),
|
|
176
211
|
/* @__PURE__ */ l("td", {
|
|
177
212
|
style: d.td,
|
|
178
213
|
children: /* @__PURE__ */ l("div", {
|
|
179
214
|
style: d.timeAgo,
|
|
180
|
-
children:
|
|
215
|
+
children: p(e.createdAt, h)
|
|
181
216
|
})
|
|
182
217
|
}),
|
|
183
218
|
/* @__PURE__ */ l("td", {
|
|
@@ -187,22 +222,23 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
187
222
|
fontSize: "12px",
|
|
188
223
|
color: "var(--color-text-muted)"
|
|
189
224
|
},
|
|
190
|
-
children:
|
|
225
|
+
children: f(e.webhookUrl)
|
|
191
226
|
}) : /* @__PURE__ */ l("span", {
|
|
192
227
|
style: {
|
|
193
|
-
fontSize: "
|
|
194
|
-
color: "var(--color-text-
|
|
228
|
+
fontSize: "var(--font-size-body-sm)",
|
|
229
|
+
color: "var(--color-text-muted)"
|
|
195
230
|
},
|
|
196
231
|
children: "—"
|
|
197
232
|
})
|
|
198
233
|
}),
|
|
199
234
|
/* @__PURE__ */ l("td", {
|
|
200
235
|
style: d.td,
|
|
201
|
-
children:
|
|
236
|
+
children: g && /* @__PURE__ */ l("button", {
|
|
237
|
+
type: "button",
|
|
202
238
|
onClick: i,
|
|
203
239
|
disabled: a,
|
|
204
240
|
style: d.retryButton,
|
|
205
|
-
children: a ? "
|
|
241
|
+
children: a ? h("bigconsole.widget.eventLog.retrying", "Retrying…") : h("bigconsole.widget.eventLog.retry", "Retry")
|
|
206
242
|
})
|
|
207
243
|
})
|
|
208
244
|
] }), o && /* @__PURE__ */ l("tr", {
|
|
@@ -213,37 +249,37 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
213
249
|
children: /* @__PURE__ */ u("div", {
|
|
214
250
|
style: d.detailContent,
|
|
215
251
|
children: [
|
|
216
|
-
/* @__PURE__ */ l("strong", { children:
|
|
252
|
+
/* @__PURE__ */ l("strong", { children: h("bigconsole.widget.eventLog.payload", "Payload:") }),
|
|
217
253
|
"\n",
|
|
218
254
|
JSON.stringify(e.payload, null, 2),
|
|
219
255
|
e.errorMessage && /* @__PURE__ */ u(c, { children: [
|
|
220
256
|
"\n\n",
|
|
221
257
|
/* @__PURE__ */ l("strong", {
|
|
222
258
|
style: { color: "var(--color-status-error-text)" },
|
|
223
|
-
children:
|
|
259
|
+
children: h("bigconsole.widget.eventLog.error", "Error:")
|
|
224
260
|
}),
|
|
225
261
|
"\n",
|
|
226
262
|
e.errorMessage
|
|
227
263
|
] }),
|
|
228
264
|
e.responseCode && /* @__PURE__ */ u(c, { children: [
|
|
229
265
|
"\n\n",
|
|
230
|
-
/* @__PURE__ */ l("strong", { children:
|
|
266
|
+
/* @__PURE__ */ l("strong", { children: h("bigconsole.widget.eventLog.responseCode", "Response Code:") }),
|
|
231
267
|
" ",
|
|
232
268
|
e.responseCode
|
|
233
269
|
] }),
|
|
234
270
|
"\n\n",
|
|
235
|
-
/* @__PURE__ */ l("strong", { children:
|
|
271
|
+
/* @__PURE__ */ l("strong", { children: h("bigconsole.widget.eventLog.attempts", "Attempts:") }),
|
|
236
272
|
" ",
|
|
237
273
|
e.attempts
|
|
238
274
|
]
|
|
239
275
|
})
|
|
240
276
|
})
|
|
241
277
|
})] });
|
|
242
|
-
}),
|
|
243
|
-
let { t: f } = s(), [
|
|
278
|
+
}), h = i(function({ dashboardId: t, widgetId: n, maxHeight: r = "400px", onRetrySuccess: i }) {
|
|
279
|
+
let { t: f } = s(), [p, h] = o(""), [g, _] = o(/* @__PURE__ */ new Set()), [v, y] = o(null), { logs: b, loading: x, totalCount: S, hasMore: C, loadMore: w, retryDelivery: T, refetch: E } = e({
|
|
244
280
|
dashboardId: t,
|
|
245
281
|
widgetId: n,
|
|
246
|
-
status:
|
|
282
|
+
status: p || void 0
|
|
247
283
|
}), D = a(async (e) => {
|
|
248
284
|
y(e.id);
|
|
249
285
|
let t = await T(e.id);
|
|
@@ -256,64 +292,80 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
256
292
|
}, []);
|
|
257
293
|
return /* @__PURE__ */ u("div", {
|
|
258
294
|
style: d.container,
|
|
295
|
+
"data-testid": "event-log-viewer",
|
|
259
296
|
children: [/* @__PURE__ */ u("div", {
|
|
260
297
|
style: d.header,
|
|
261
|
-
children: [/* @__PURE__ */
|
|
262
|
-
style: d.title,
|
|
263
|
-
children: f("bigconsole.widget.eventLog.title", "Event History")
|
|
264
|
-
}), /* @__PURE__ */ l("span", {
|
|
298
|
+
children: [/* @__PURE__ */ l("div", { children: /* @__PURE__ */ l("span", {
|
|
265
299
|
style: d.totalCount,
|
|
266
300
|
children: f("bigconsole.widget.eventLog.eventCount", "{{count}} events", { count: S })
|
|
267
|
-
})
|
|
301
|
+
}) }), /* @__PURE__ */ u("div", {
|
|
268
302
|
style: d.headerActions,
|
|
269
|
-
children: [
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
303
|
+
children: [
|
|
304
|
+
/* @__PURE__ */ l("label", {
|
|
305
|
+
htmlFor: "event-log-status-filter",
|
|
306
|
+
className: "sr-only",
|
|
307
|
+
children: "Filter events by status"
|
|
308
|
+
}),
|
|
309
|
+
/* @__PURE__ */ u("select", {
|
|
310
|
+
id: "event-log-status-filter",
|
|
311
|
+
value: p,
|
|
312
|
+
onChange: (e) => h(e.target.value),
|
|
313
|
+
style: d.filterSelect,
|
|
314
|
+
children: [
|
|
315
|
+
/* @__PURE__ */ l("option", {
|
|
316
|
+
value: "",
|
|
317
|
+
children: f("bigconsole.widget.eventLog.filter.all", "All Status")
|
|
318
|
+
}),
|
|
319
|
+
/* @__PURE__ */ l("option", {
|
|
320
|
+
value: "DELIVERED",
|
|
321
|
+
children: f("bigconsole.widget.eventLog.filter.delivered", "Delivered")
|
|
322
|
+
}),
|
|
323
|
+
/* @__PURE__ */ l("option", {
|
|
324
|
+
value: "FAILED",
|
|
325
|
+
children: f("bigconsole.widget.eventLog.filter.failed", "Failed")
|
|
326
|
+
}),
|
|
327
|
+
/* @__PURE__ */ l("option", {
|
|
328
|
+
value: "PENDING",
|
|
329
|
+
children: f("bigconsole.widget.eventLog.filter.pending", "Pending")
|
|
330
|
+
}),
|
|
331
|
+
/* @__PURE__ */ l("option", {
|
|
332
|
+
value: "PROCESSING",
|
|
333
|
+
children: f("bigconsole.widget.eventLog.filter.processing", "Processing")
|
|
334
|
+
}),
|
|
335
|
+
/* @__PURE__ */ l("option", {
|
|
336
|
+
value: "RETRYING",
|
|
337
|
+
children: f("bigconsole.widget.eventLog.filter.retrying", "Retrying")
|
|
338
|
+
}),
|
|
339
|
+
/* @__PURE__ */ l("option", {
|
|
340
|
+
value: "IGNORED",
|
|
341
|
+
children: f("bigconsole.widget.eventLog.filter.ignored", "Ignored")
|
|
342
|
+
})
|
|
343
|
+
]
|
|
344
|
+
}),
|
|
345
|
+
/* @__PURE__ */ l("button", {
|
|
346
|
+
type: "button",
|
|
347
|
+
onClick: () => E(),
|
|
348
|
+
style: d.refreshButton,
|
|
349
|
+
children: f("bigconsole.widget.eventLog.refresh", "Refresh")
|
|
350
|
+
})
|
|
351
|
+
]
|
|
308
352
|
})]
|
|
309
353
|
}), x && b.length === 0 ? /* @__PURE__ */ l("div", {
|
|
310
354
|
style: d.emptyState,
|
|
311
|
-
|
|
355
|
+
role: "status",
|
|
356
|
+
children: /* @__PURE__ */ l("p", {
|
|
357
|
+
style: d.emptyTitle,
|
|
358
|
+
children: f("bigconsole.widget.eventLog.loading", "Loading...")
|
|
359
|
+
})
|
|
312
360
|
}) : b.length === 0 ? /* @__PURE__ */ u("div", {
|
|
313
361
|
style: d.emptyState,
|
|
314
|
-
|
|
362
|
+
role: "status",
|
|
363
|
+
children: [/* @__PURE__ */ l("p", {
|
|
364
|
+
style: d.emptyTitle,
|
|
365
|
+
children: f("bigconsole.widget.eventLog.emptyTitle", "No events found")
|
|
366
|
+
}), /* @__PURE__ */ l("p", {
|
|
315
367
|
style: {
|
|
316
|
-
fontSize: "
|
|
368
|
+
fontSize: "var(--font-size-body-sm)",
|
|
317
369
|
marginTop: "8px"
|
|
318
370
|
},
|
|
319
371
|
children: f("bigconsole.widget.eventLog.emptyHint", "Events will appear here when actions are triggered.")
|
|
@@ -357,7 +409,7 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
357
409
|
children: f("bigconsole.widget.eventLog.column.action", "Action")
|
|
358
410
|
})
|
|
359
411
|
] })
|
|
360
|
-
}), /* @__PURE__ */ l("tbody", { children: b.map((e) => /* @__PURE__ */ l(
|
|
412
|
+
}), /* @__PURE__ */ l("tbody", { children: b.map((e) => /* @__PURE__ */ l(m, {
|
|
361
413
|
log: e,
|
|
362
414
|
onRetry: () => D(e),
|
|
363
415
|
retrying: v === e.id,
|
|
@@ -373,6 +425,6 @@ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
|
|
|
373
425
|
});
|
|
374
426
|
});
|
|
375
427
|
//#endregion
|
|
376
|
-
export {
|
|
428
|
+
export { h as default };
|
|
377
429
|
|
|
378
430
|
//# sourceMappingURL=EventLogViewer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventLogViewer.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx"],"sourcesContent":["/**\n * EventLogViewer Component (v2.0)\n *\n * Component for viewing event history and managing failed deliveries.\n * Shows event status, allows filtering, and supports retry functionality.\n */\n\nimport React, { memo, useState, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n useEventLogs,\n getEventStatusColor,\n getEventStatusLabel,\n getEventStatusIcon,\n type EventStatus,\n type EventLog,\n} from '../../../hooks/useEventLogs';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EventLogViewerProps {\n /** Dashboard ID to filter logs */\n dashboardId?: string;\n /** Widget ID to filter logs */\n widgetId?: string;\n /** Maximum height of the viewer */\n maxHeight?: string;\n /** Callback when retry is successful */\n onRetrySuccess?: (eventLog: EventLog) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n padding: '16px',\n backgroundColor: 'var(--color-bg-surface)',\n borderRadius: '8px',\n } as React.CSSProperties,\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '16px',\n } as React.CSSProperties,\n title: {\n fontSize: '16px',\n fontWeight: 600,\n color: 'var(--color-text-primary)',\n margin: 0,\n } as React.CSSProperties,\n headerActions: {\n display: 'flex',\n gap: '8px',\n alignItems: 'center',\n } as React.CSSProperties,\n filterSelect: {\n padding: '6px 12px',\n fontSize: '13px',\n border: '1px solid var(--color-border)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-bg-surface)',\n } as React.CSSProperties,\n refreshButton: {\n padding: '6px 12px',\n fontSize: '13px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '13px',\n } as React.CSSProperties,\n tableHeader: {\n backgroundColor: 'var(--color-bg-sunken)',\n borderBottom: '1px solid var(--color-border)',\n } as React.CSSProperties,\n th: {\n padding: '10px 12px',\n textAlign: 'left',\n fontWeight: 600,\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n td: {\n padding: '10px 12px',\n borderBottom: '1px solid var(--color-border)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n } as React.CSSProperties,\n statusBadge: {\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '11px',\n fontWeight: 500,\n } as React.CSSProperties,\n eventName: {\n fontFamily: 'monospace',\n fontSize: '12px',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n timeAgo: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n retryButton: {\n padding: '4px 8px',\n fontSize: '11px',\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'opacity 0.15s ease',\n } as React.CSSProperties,\n emptyState: {\n textAlign: 'center',\n padding: '32px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n loadMoreButton: {\n width: '100%',\n padding: '10px',\n marginTop: '12px',\n backgroundColor: 'var(--color-bg-muted)',\n border: 'none',\n borderRadius: '6px',\n fontSize: '13px',\n color: 'var(--color-text-secondary)',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n totalCount: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n tableContainer: {\n overflowX: 'auto',\n } as React.CSSProperties,\n detailRow: {\n backgroundColor: 'var(--color-bg-sunken)',\n } as React.CSSProperties,\n detailContent: {\n padding: '12px',\n fontSize: '12px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n expandButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: '4px',\n fontSize: '14px',\n } as React.CSSProperties,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/** Translator function shape from useI18n().t. */\ntype EventLogTFunc = (\n key: string,\n fallbackOrParams?: string | Record<string, string | number>,\n params?: Record<string, string | number>\n) => string;\n\nfunction formatTimeAgo(dateString: string, t: EventLogTFunc): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return t('bigconsole.widget.eventLog.time.justNow', 'Just now');\n if (diffMins < 60) return t('bigconsole.widget.eventLog.time.minutesAgo', '{{count}}m ago', { count: diffMins });\n if (diffHours < 24) return t('bigconsole.widget.eventLog.time.hoursAgo', '{{count}}h ago', { count: diffHours });\n if (diffDays < 7) return t('bigconsole.widget.eventLog.time.daysAgo', '{{count}}d ago', { count: diffDays });\n return date.toLocaleDateString();\n}\n\n// ============================================================================\n// Event Log Row Component\n// ============================================================================\n\ninterface EventLogRowProps {\n log: EventLog;\n onRetry: () => void;\n retrying?: boolean;\n expanded?: boolean;\n onToggleExpand: () => void;\n}\n\nconst EventLogRow: React.FC<EventLogRowProps> = memo(function EventLogRow({\n log,\n onRetry,\n retrying,\n expanded,\n onToggleExpand,\n}) {\n const { t } = useI18n();\n const canRetry = log.status === 'FAILED';\n\n return (\n <>\n <tr>\n <td style={styles.td}>\n <button onClick={onToggleExpand} style={styles.expandButton}>\n {expanded ? '▼' : '▶'}\n </button>\n </td>\n <td style={styles.td}>\n <div style={styles.statusCell}>\n <span>{getEventStatusIcon(log.status)}</span>\n <span\n style={{\n ...styles.statusBadge,\n backgroundColor: `${getEventStatusColor(log.status)}20`,\n color: getEventStatusColor(log.status),\n }}\n >\n {getEventStatusLabel(log.status)}\n </span>\n </div>\n </td>\n <td style={styles.td}>\n <div style={styles.eventName}>{log.eventName}</div>\n {log.actionName && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-placeholder)' }}>\n {t('bigconsole.widget.eventLog.actionLabel', 'Action: {{action}}', { action: log.actionName ?? '' })}\n </div>\n )}\n </td>\n <td style={styles.td}>\n <div style={styles.timeAgo}>{formatTimeAgo(log.createdAt, t)}</div>\n </td>\n <td style={styles.td}>\n {log.webhookUrl ? (\n <span style={{ fontSize: '12px', color: 'var(--color-text-muted)' }}>\n {new URL(log.webhookUrl).hostname}\n </span>\n ) : (\n <span style={{ fontSize: '12px', color: 'var(--color-text-placeholder)' }}>—</span>\n )}\n </td>\n <td style={styles.td}>\n {canRetry && (\n <button onClick={onRetry} disabled={retrying} style={styles.retryButton}>\n {retrying ? '...' : `🔄 ${t('bigconsole.widget.eventLog.retry', 'Retry')}`}\n </button>\n )}\n </td>\n </tr>\n {expanded && (\n <tr style={styles.detailRow}>\n <td colSpan={6} style={styles.td}>\n <div style={styles.detailContent as React.CSSProperties}>\n <strong>{t('bigconsole.widget.eventLog.payload', 'Payload:')}</strong>\n {'\\n'}\n {JSON.stringify(log.payload, null, 2)}\n {log.errorMessage && (\n <>\n {'\\n\\n'}\n <strong style={{ color: 'var(--color-status-error-text)' }}>\n {t('bigconsole.widget.eventLog.error', 'Error:')}\n </strong>\n {'\\n'}\n {log.errorMessage}\n </>\n )}\n {log.responseCode && (\n <>\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.responseCode', 'Response Code:')}</strong> {log.responseCode}\n </>\n )}\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.attempts', 'Attempts:')}</strong> {log.attempts}\n </div>\n </td>\n </tr>\n )}\n </>\n );\n});\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport const EventLogViewer: React.FC<EventLogViewerProps> = memo(function EventLogViewer({\n dashboardId,\n widgetId,\n maxHeight = '400px',\n onRetrySuccess,\n}) {\n const { t } = useI18n();\n const [statusFilter, setStatusFilter] = useState<EventStatus | ''>('');\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [retryingId, setRetryingId] = useState<string | null>(null);\n\n const { logs, loading, totalCount, hasMore, loadMore, retryDelivery, refetch } = useEventLogs({\n dashboardId,\n widgetId,\n status: statusFilter || undefined,\n });\n\n const handleRetry = useCallback(\n async (log: EventLog) => {\n setRetryingId(log.id);\n const result = await retryDelivery(log.id);\n setRetryingId(null);\n if (result) {\n onRetrySuccess?.(result);\n }\n },\n [retryDelivery, onRetrySuccess]\n );\n\n const handleToggleExpand = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n return (\n <div style={styles.container}>\n <div style={styles.header}>\n <div>\n <h3 style={styles.title}>{t('bigconsole.widget.eventLog.title', 'Event History')}</h3>\n <span style={styles.totalCount}>\n {t('bigconsole.widget.eventLog.eventCount', '{{count}} events', { count: totalCount })}\n </span>\n </div>\n <div style={styles.headerActions}>\n <select\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value as EventStatus | '')}\n style={styles.filterSelect}\n >\n <option value=\"\">{t('bigconsole.widget.eventLog.filter.all', 'All Status')}</option>\n <option value=\"DELIVERED\">{t('bigconsole.widget.eventLog.filter.delivered', 'Delivered')}</option>\n <option value=\"FAILED\">{t('bigconsole.widget.eventLog.filter.failed', 'Failed')}</option>\n <option value=\"PENDING\">{t('bigconsole.widget.eventLog.filter.pending', 'Pending')}</option>\n <option value=\"PROCESSING\">{t('bigconsole.widget.eventLog.filter.processing', 'Processing')}</option>\n <option value=\"RETRYING\">{t('bigconsole.widget.eventLog.filter.retrying', 'Retrying')}</option>\n <option value=\"IGNORED\">{t('bigconsole.widget.eventLog.filter.ignored', 'Ignored')}</option>\n </select>\n <button onClick={() => refetch()} style={styles.refreshButton}>\n 🔄 {t('bigconsole.widget.eventLog.refresh', 'Refresh')}\n </button>\n </div>\n </div>\n\n {loading && logs.length === 0 ? (\n <div style={styles.emptyState}>{t('bigconsole.widget.eventLog.loading', 'Loading...')}</div>\n ) : logs.length === 0 ? (\n <div style={styles.emptyState}>\n <p>{t('bigconsole.widget.eventLog.emptyTitle', 'No events found')}</p>\n <p style={{ fontSize: '13px', marginTop: '8px' }}>\n {t('bigconsole.widget.eventLog.emptyHint', 'Events will appear here when actions are triggered.')}\n </p>\n </div>\n ) : (\n <>\n <div style={{ ...styles.tableContainer, maxHeight, overflowY: 'auto' }}>\n <table style={styles.table}>\n <thead style={styles.tableHeader}>\n <tr>\n <th style={{ ...styles.th, width: '40px' }}></th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.status', 'Status')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.event', 'Event')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.time', 'Time')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.webhook', 'Webhook')}</th>\n <th style={{ ...styles.th, width: '80px' }}>\n {t('bigconsole.widget.eventLog.column.action', 'Action')}\n </th>\n </tr>\n </thead>\n <tbody>\n {logs.map((log) => (\n <EventLogRow\n key={log.id}\n log={log}\n onRetry={() => handleRetry(log)}\n retrying={retryingId === log.id}\n expanded={expandedIds.has(log.id)}\n onToggleExpand={() => handleToggleExpand(log.id)}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {hasMore && (\n <button onClick={loadMore} style={styles.loadMoreButton}>\n {t('bigconsole.widget.eventLog.loadMore', 'Load More')}\n </button>\n )}\n </>\n )}\n </div>\n );\n});\n\nexport default EventLogViewer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EventLogViewer.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx"],"sourcesContent":["/**\n * EventLogViewer Component (v2.0)\n *\n * Component for viewing event history and managing failed deliveries.\n * Shows event status, allows filtering, and supports retry functionality.\n */\n\nimport React, { memo, useState, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n useEventLogs,\n getEventStatusColor,\n getEventStatusLabel,\n getEventStatusIcon,\n type EventStatus,\n type EventLog,\n} from '../../../hooks/useEventLogs';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EventLogViewerProps {\n /** Dashboard ID to filter logs */\n dashboardId?: string;\n /** Widget ID to filter logs */\n widgetId?: string;\n /** Maximum height of the viewer */\n maxHeight?: string;\n /** Callback when retry is successful */\n onRetrySuccess?: (eventLog: EventLog) => void;\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\n/**\n * Section emphasis (BOFF-5636). Like the webhook panel, this used to draw its\n * own card and its own 16px `<h3>Event History</h3>` under the inspector's 14px\n * \"Events\" heading. The owning `<Section>` now provides surface, heading and\n * description; this component provides the toolbar and the table.\n */\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--space-controlGap)',\n minWidth: 0,\n } as React.CSSProperties,\n header: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 'var(--space-controlGap)',\n minWidth: 0,\n } as React.CSSProperties,\n headerActions: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n alignItems: 'center',\n } as React.CSSProperties,\n filterSelect: {\n minHeight: 'var(--size-controlHeight-md)',\n padding: '0 12px',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-primary)',\n border: '1px solid var(--color-border-subtle)',\n borderRadius: 'var(--radius-input)',\n backgroundColor: 'var(--color-bg-surface)',\n } as React.CSSProperties,\n refreshButton: {\n minHeight: 'var(--size-controlHeight-md)',\n padding: '0 12px',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-primary)',\n backgroundColor: 'var(--color-bg-surface)',\n border: '1px solid var(--color-border-subtle)',\n borderRadius: 'var(--radius-button)',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n table: {\n // The 6-column table is wider than a 390px sheet; `minWidth` plus the\n // container's `overflowX: auto` scrolls the TABLE instead of the page.\n width: '100%',\n minWidth: '520px',\n borderCollapse: 'collapse',\n fontSize: 'var(--font-size-body-sm)',\n } as React.CSSProperties,\n tableHeader: {\n backgroundColor: 'var(--color-bg-sunken)',\n borderBottom: '1px solid var(--color-border-subtle)',\n } as React.CSSProperties,\n th: {\n padding: '10px 12px',\n textAlign: 'left',\n fontWeight: 600,\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n td: {\n padding: '10px 12px',\n borderBottom: '1px solid var(--color-border-subtle)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n statusCell: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n } as React.CSSProperties,\n statusBadge: {\n padding: '2px 8px',\n borderRadius: '12px',\n fontSize: '11px',\n fontWeight: 500,\n } as React.CSSProperties,\n eventName: {\n fontFamily: 'monospace',\n fontSize: '12px',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n timeAgo: {\n fontSize: '12px',\n color: 'var(--color-text-muted)',\n } as React.CSSProperties,\n retryButton: {\n padding: '4px 8px',\n fontSize: '11px',\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n transition: 'opacity 0.15s ease',\n } as React.CSSProperties,\n emptyState: {\n textAlign: 'center',\n padding: 'var(--space-pagePadding) var(--space-formGap)',\n color: 'var(--color-text-secondary)',\n backgroundColor: 'var(--color-bg-surface)',\n border: '1px solid var(--color-border-subtle)',\n borderRadius: 'var(--radius-card)',\n } as React.CSSProperties,\n emptyTitle: {\n fontSize: 'var(--font-size-body-sm)',\n fontWeight: 600,\n color: 'var(--color-text-primary)',\n margin: 0,\n } as React.CSSProperties,\n loadMoreButton: {\n width: '100%',\n minHeight: 'var(--size-controlHeight-md)',\n padding: '0 10px',\n marginTop: '12px',\n backgroundColor: 'var(--color-bg-surface)',\n border: '1px solid var(--color-border-subtle)',\n borderRadius: 'var(--radius-button)',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-secondary)',\n cursor: 'pointer',\n transition: 'background-color 0.15s ease',\n } as React.CSSProperties,\n totalCount: {\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n tableContainer: {\n overflowX: 'auto',\n minWidth: 0,\n border: '1px solid var(--color-border-subtle)',\n borderRadius: 'var(--radius-card)',\n backgroundColor: 'var(--color-bg-surface)',\n } as React.CSSProperties,\n detailRow: {\n backgroundColor: 'var(--color-bg-sunken)',\n } as React.CSSProperties,\n detailContent: {\n padding: '12px',\n fontSize: '12px',\n fontFamily: 'monospace',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n expandButton: {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n minHeight: 'var(--size-controlHeight-md)',\n minWidth: 'var(--size-controlHeight-md)',\n padding: '4px',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-secondary)',\n } as React.CSSProperties,\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/** Translator function shape from useI18n().t. */\ntype EventLogTFunc = (\n key: string,\n fallbackOrParams?: string | Record<string, string | number>,\n params?: Record<string, string | number>\n) => string;\n\n/**\n * A stored webhook URL is whatever the user typed — a relative path or a typo\n * reaches this table unvalidated, and `new URL()` throws a TypeError on it,\n * which took the whole log viewer down with it. Fall back to showing the raw\n * value; the point of the column is to identify the destination, and the raw\n * string does that fine when it cannot be parsed.\n */\nfunction webhookHost(url: string): string {\n try {\n return new URL(url).hostname;\n } catch {\n return url;\n }\n}\n\nfunction formatTimeAgo(dateString: string, t: EventLogTFunc): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n\n if (diffMins < 1) return t('bigconsole.widget.eventLog.time.justNow', 'Just now');\n if (diffMins < 60) return t('bigconsole.widget.eventLog.time.minutesAgo', '{{count}}m ago', { count: diffMins });\n if (diffHours < 24) return t('bigconsole.widget.eventLog.time.hoursAgo', '{{count}}h ago', { count: diffHours });\n if (diffDays < 7) return t('bigconsole.widget.eventLog.time.daysAgo', '{{count}}d ago', { count: diffDays });\n return date.toLocaleDateString();\n}\n\n// ============================================================================\n// Event Log Row Component\n// ============================================================================\n\ninterface EventLogRowProps {\n log: EventLog;\n onRetry: () => void;\n retrying?: boolean;\n expanded?: boolean;\n onToggleExpand: () => void;\n}\n\nconst EventLogRow: React.FC<EventLogRowProps> = memo(function EventLogRow({\n log,\n onRetry,\n retrying,\n expanded,\n onToggleExpand,\n}) {\n const { t } = useI18n();\n const canRetry = log.status === 'FAILED';\n\n return (\n <>\n <tr>\n <td style={styles.td}>\n <button\n type=\"button\"\n onClick={onToggleExpand}\n aria-expanded={expanded}\n aria-label={expanded ? 'Hide event payload' : 'Show event payload'}\n style={styles.expandButton}\n >\n <span aria-hidden=\"true\">{expanded ? '▾' : '▸'}</span>\n </button>\n </td>\n <td style={styles.td}>\n <div style={styles.statusCell}>\n <span>{getEventStatusIcon(log.status)}</span>\n <span\n style={{\n ...styles.statusBadge,\n backgroundColor: `${getEventStatusColor(log.status)}20`,\n color: getEventStatusColor(log.status),\n }}\n >\n {getEventStatusLabel(log.status)}\n </span>\n </div>\n </td>\n <td style={styles.td}>\n <div style={styles.eventName}>{log.eventName}</div>\n {log.actionName && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-muted)' }}>\n {t('bigconsole.widget.eventLog.actionLabel', 'Action: {{action}}', { action: log.actionName ?? '' })}\n </div>\n )}\n </td>\n <td style={styles.td}>\n <div style={styles.timeAgo}>{formatTimeAgo(log.createdAt, t)}</div>\n </td>\n <td style={styles.td}>\n {log.webhookUrl ? (\n <span style={{ fontSize: '12px', color: 'var(--color-text-muted)' }}>{webhookHost(log.webhookUrl)}</span>\n ) : (\n <span style={{ fontSize: 'var(--font-size-body-sm)', color: 'var(--color-text-muted)' }}>—</span>\n )}\n </td>\n <td style={styles.td}>\n {canRetry && (\n <button type=\"button\" onClick={onRetry} disabled={retrying} style={styles.retryButton}>\n {retrying\n ? t('bigconsole.widget.eventLog.retrying', 'Retrying…')\n : t('bigconsole.widget.eventLog.retry', 'Retry')}\n </button>\n )}\n </td>\n </tr>\n {expanded && (\n <tr style={styles.detailRow}>\n <td colSpan={6} style={styles.td}>\n <div style={styles.detailContent as React.CSSProperties}>\n <strong>{t('bigconsole.widget.eventLog.payload', 'Payload:')}</strong>\n {'\\n'}\n {JSON.stringify(log.payload, null, 2)}\n {log.errorMessage && (\n <>\n {'\\n\\n'}\n <strong style={{ color: 'var(--color-status-error-text)' }}>\n {t('bigconsole.widget.eventLog.error', 'Error:')}\n </strong>\n {'\\n'}\n {log.errorMessage}\n </>\n )}\n {log.responseCode && (\n <>\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.responseCode', 'Response Code:')}</strong> {log.responseCode}\n </>\n )}\n {'\\n\\n'}\n <strong>{t('bigconsole.widget.eventLog.attempts', 'Attempts:')}</strong> {log.attempts}\n </div>\n </td>\n </tr>\n )}\n </>\n );\n});\n\n// ============================================================================\n// Main Component\n// ============================================================================\n\nexport const EventLogViewer: React.FC<EventLogViewerProps> = memo(function EventLogViewer({\n dashboardId,\n widgetId,\n maxHeight = '400px',\n onRetrySuccess,\n}) {\n const { t } = useI18n();\n const [statusFilter, setStatusFilter] = useState<EventStatus | ''>('');\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n const [retryingId, setRetryingId] = useState<string | null>(null);\n\n const { logs, loading, totalCount, hasMore, loadMore, retryDelivery, refetch } = useEventLogs({\n dashboardId,\n widgetId,\n status: statusFilter || undefined,\n });\n\n const handleRetry = useCallback(\n async (log: EventLog) => {\n setRetryingId(log.id);\n const result = await retryDelivery(log.id);\n setRetryingId(null);\n if (result) {\n onRetrySuccess?.(result);\n }\n },\n [retryDelivery, onRetrySuccess]\n );\n\n const handleToggleExpand = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n return (\n <div style={styles.container} data-testid=\"event-log-viewer\">\n <div style={styles.header}>\n <div>\n {/*\n No heading here on purpose: the owning `<Section>` already names this\n block, and a second `<h3>Event History</h3>` under it read as two\n titles for one panel (BOFF-5636). The count stays — it is the part\n that actually tells you something.\n */}\n <span style={styles.totalCount}>\n {t('bigconsole.widget.eventLog.eventCount', '{{count}} events', { count: totalCount })}\n </span>\n </div>\n <div style={styles.headerActions}>\n <label htmlFor=\"event-log-status-filter\" className=\"sr-only\">\n Filter events by status\n </label>\n <select\n id=\"event-log-status-filter\"\n value={statusFilter}\n onChange={(e) => setStatusFilter(e.target.value as EventStatus | '')}\n style={styles.filterSelect}\n >\n <option value=\"\">{t('bigconsole.widget.eventLog.filter.all', 'All Status')}</option>\n <option value=\"DELIVERED\">{t('bigconsole.widget.eventLog.filter.delivered', 'Delivered')}</option>\n <option value=\"FAILED\">{t('bigconsole.widget.eventLog.filter.failed', 'Failed')}</option>\n <option value=\"PENDING\">{t('bigconsole.widget.eventLog.filter.pending', 'Pending')}</option>\n <option value=\"PROCESSING\">{t('bigconsole.widget.eventLog.filter.processing', 'Processing')}</option>\n <option value=\"RETRYING\">{t('bigconsole.widget.eventLog.filter.retrying', 'Retrying')}</option>\n <option value=\"IGNORED\">{t('bigconsole.widget.eventLog.filter.ignored', 'Ignored')}</option>\n </select>\n <button type=\"button\" onClick={() => refetch()} style={styles.refreshButton}>\n {t('bigconsole.widget.eventLog.refresh', 'Refresh')}\n </button>\n </div>\n </div>\n\n {loading && logs.length === 0 ? (\n <div style={styles.emptyState} role=\"status\">\n <p style={styles.emptyTitle}>{t('bigconsole.widget.eventLog.loading', 'Loading...')}</p>\n </div>\n ) : logs.length === 0 ? (\n <div style={styles.emptyState} role=\"status\">\n <p style={styles.emptyTitle}>{t('bigconsole.widget.eventLog.emptyTitle', 'No events found')}</p>\n <p style={{ fontSize: 'var(--font-size-body-sm)', marginTop: '8px' }}>\n {t('bigconsole.widget.eventLog.emptyHint', 'Events will appear here when actions are triggered.')}\n </p>\n </div>\n ) : (\n <>\n <div style={{ ...styles.tableContainer, maxHeight, overflowY: 'auto' }}>\n <table style={styles.table}>\n <thead style={styles.tableHeader}>\n <tr>\n <th style={{ ...styles.th, width: '40px' }}></th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.status', 'Status')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.event', 'Event')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.time', 'Time')}</th>\n <th style={styles.th}>{t('bigconsole.widget.eventLog.column.webhook', 'Webhook')}</th>\n <th style={{ ...styles.th, width: '80px' }}>\n {t('bigconsole.widget.eventLog.column.action', 'Action')}\n </th>\n </tr>\n </thead>\n <tbody>\n {logs.map((log) => (\n <EventLogRow\n key={log.id}\n log={log}\n onRetry={() => handleRetry(log)}\n retrying={retryingId === log.id}\n expanded={expandedIds.has(log.id)}\n onToggleExpand={() => handleToggleExpand(log.id)}\n />\n ))}\n </tbody>\n </table>\n </div>\n\n {hasMore && (\n <button onClick={loadMore} style={styles.loadMoreButton}>\n {t('bigconsole.widget.eventLog.loadMore', 'Load More')}\n </button>\n )}\n </>\n )}\n </div>\n );\n});\n\nexport default EventLogViewer;\n"],"mappings":"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"}
|