@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.
Files changed (247) hide show
  1. package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
  2. package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
  3. package/dist/bigconsole/components/DrilldownModal.js +54 -50
  4. package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
  5. package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
  6. package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
  8. package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
  9. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
  10. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
  11. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
  12. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
  13. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
  14. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  15. package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
  16. package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
  17. package/dist/bigconsole/components/common/Section.js +70 -0
  18. package/dist/bigconsole/components/common/Section.js.map +1 -0
  19. package/dist/bigconsole/components/common/index.js +2 -0
  20. package/dist/bigconsole/components/common/sectionStyles.js +42 -0
  21. package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
  22. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
  23. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  24. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
  25. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  26. package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
  27. package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
  28. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
  29. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  30. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
  31. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  32. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
  33. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
  34. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
  35. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  36. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
  37. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  38. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
  39. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  40. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
  41. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  42. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
  43. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  44. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
  45. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
  46. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
  47. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  48. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
  49. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  50. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
  51. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  52. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
  53. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
  54. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
  55. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
  56. package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
  57. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  58. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
  59. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  60. package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
  61. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  62. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
  63. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
  64. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
  65. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  66. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
  67. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  68. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
  69. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  70. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
  71. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
  72. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
  73. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
  74. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
  75. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  76. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
  77. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
  78. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
  79. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
  80. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
  81. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  82. package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
  83. package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
  84. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
  85. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
  86. package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
  87. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  88. package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
  89. package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
  90. package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
  91. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  92. package/dist/bigconsole/components/parser/ParserCard.js +133 -114
  93. package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
  94. package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
  95. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  96. package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
  97. package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
  98. package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
  99. package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
  100. package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
  101. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  102. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
  103. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
  104. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
  105. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
  106. package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
  107. package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
  108. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
  109. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  110. package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
  111. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  112. package/dist/bigconsole/components/preview/previewShared.js +41 -23
  113. package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
  114. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
  115. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  116. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
  117. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  118. package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
  119. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  120. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
  121. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
  122. package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
  123. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  124. package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
  125. package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
  126. package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
  127. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  128. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
  129. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
  130. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
  131. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  132. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
  133. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  134. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
  135. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  136. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
  137. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  138. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
  139. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
  140. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
  141. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  142. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
  143. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
  144. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
  145. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
  146. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
  147. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  148. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
  149. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
  150. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
  151. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  152. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
  153. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
  154. package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
  155. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  156. package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
  157. package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
  158. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
  159. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
  160. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
  161. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  162. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
  163. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
  164. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
  165. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  166. package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
  167. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
  168. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  169. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
  170. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  171. package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
  172. package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
  173. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
  174. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
  175. package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
  176. package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
  177. package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
  178. package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
  179. package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
  180. package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
  181. package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
  182. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  183. package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
  184. package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
  185. package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
  186. package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
  187. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
  188. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
  189. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
  190. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
  191. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
  192. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
  193. package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
  194. package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
  195. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
  196. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  197. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
  198. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  199. package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
  200. package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
  201. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
  202. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
  203. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
  204. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
  205. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
  206. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  207. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
  208. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  209. package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
  210. package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
  211. package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
  212. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  213. package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
  214. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  215. package/dist/bigconsole/pages/DashboardsPage.js +838 -800
  216. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  217. package/dist/bigconsole/pages/DataParsersPage.js +263 -315
  218. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  219. package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
  220. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  221. package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
  222. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  223. package/dist/bigconsole/pages/DataSinksPage.js +356 -458
  224. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  225. package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
  226. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  227. package/dist/bigconsole/pages/HomePage.js +186 -193
  228. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  229. package/dist/bigconsole/pages/InsightsPage.js +887 -740
  230. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  231. package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
  232. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  233. package/dist/bigconsole/pages/ParserViewPage.js +368 -342
  234. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  235. package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
  236. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  237. package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
  238. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  239. package/dist/bigconsole/pages/PipelinesPage.js +248 -298
  240. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  241. package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
  242. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  243. package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
  244. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  245. package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
  246. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  247. 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
- padding: "16px",
9
- backgroundColor: "var(--color-bg-surface)",
10
- borderRadius: "8px"
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
- marginBottom: "16px"
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
- padding: "6px 12px",
31
- fontSize: "13px",
32
- border: "1px solid var(--color-border)",
33
- borderRadius: "6px",
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
- padding: "6px 12px",
38
- fontSize: "13px",
39
- backgroundColor: "var(--color-bg-muted)",
40
- border: "none",
41
- borderRadius: "6px",
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: "13px"
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: "32px",
98
- color: "var(--color-text-muted)"
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
- padding: "10px",
114
+ minHeight: "var(--size-controlHeight-md)",
115
+ padding: "0 10px",
103
116
  marginTop: "12px",
104
- backgroundColor: "var(--color-bg-muted)",
105
- border: "none",
106
- borderRadius: "6px",
107
- fontSize: "13px",
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: "12px",
114
- color: "var(--color-text-muted)"
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: "14px"
152
+ fontSize: "var(--font-size-body-sm)",
153
+ color: "var(--color-text-secondary)"
132
154
  }
133
155
  };
134
- function f(e, t) {
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 p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpand: p }) {
139
- let { t: m } = s(), h = e.status === "FAILED";
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
- onClick: p,
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: o ? "" : "▶"
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-placeholder)"
206
+ color: "var(--color-text-muted)"
172
207
  },
173
- children: m("bigconsole.widget.eventLog.actionLabel", "Action: {{action}}", { action: e.actionName ?? "" })
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: f(e.createdAt, m)
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: new URL(e.webhookUrl).hostname
225
+ children: f(e.webhookUrl)
191
226
  }) : /* @__PURE__ */ l("span", {
192
227
  style: {
193
- fontSize: "12px",
194
- color: "var(--color-text-placeholder)"
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: h && /* @__PURE__ */ l("button", {
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 ? "..." : `🔄 ${m("bigconsole.widget.eventLog.retry", "Retry")}`
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: m("bigconsole.widget.eventLog.payload", "Payload:") }),
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: m("bigconsole.widget.eventLog.error", "Error:")
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: m("bigconsole.widget.eventLog.responseCode", "Response Code:") }),
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: m("bigconsole.widget.eventLog.attempts", "Attempts:") }),
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
- }), m = i(function({ dashboardId: t, widgetId: n, maxHeight: r = "400px", onRetrySuccess: i }) {
243
- let { t: f } = s(), [m, 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({
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: m || void 0
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__ */ u("div", { children: [/* @__PURE__ */ l("h3", {
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
- })] }), /* @__PURE__ */ u("div", {
301
+ }) }), /* @__PURE__ */ u("div", {
268
302
  style: d.headerActions,
269
- children: [/* @__PURE__ */ u("select", {
270
- value: m,
271
- onChange: (e) => h(e.target.value),
272
- style: d.filterSelect,
273
- children: [
274
- /* @__PURE__ */ l("option", {
275
- value: "",
276
- children: f("bigconsole.widget.eventLog.filter.all", "All Status")
277
- }),
278
- /* @__PURE__ */ l("option", {
279
- value: "DELIVERED",
280
- children: f("bigconsole.widget.eventLog.filter.delivered", "Delivered")
281
- }),
282
- /* @__PURE__ */ l("option", {
283
- value: "FAILED",
284
- children: f("bigconsole.widget.eventLog.filter.failed", "Failed")
285
- }),
286
- /* @__PURE__ */ l("option", {
287
- value: "PENDING",
288
- children: f("bigconsole.widget.eventLog.filter.pending", "Pending")
289
- }),
290
- /* @__PURE__ */ l("option", {
291
- value: "PROCESSING",
292
- children: f("bigconsole.widget.eventLog.filter.processing", "Processing")
293
- }),
294
- /* @__PURE__ */ l("option", {
295
- value: "RETRYING",
296
- children: f("bigconsole.widget.eventLog.filter.retrying", "Retrying")
297
- }),
298
- /* @__PURE__ */ l("option", {
299
- value: "IGNORED",
300
- children: f("bigconsole.widget.eventLog.filter.ignored", "Ignored")
301
- })
302
- ]
303
- }), /* @__PURE__ */ u("button", {
304
- onClick: () => E(),
305
- style: d.refreshButton,
306
- children: ["🔄 ", f("bigconsole.widget.eventLog.refresh", "Refresh")]
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
- children: f("bigconsole.widget.eventLog.loading", "Loading...")
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
- children: [/* @__PURE__ */ l("p", { children: f("bigconsole.widget.eventLog.emptyTitle", "No events found") }), /* @__PURE__ */ l("p", {
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: "13px",
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(p, {
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 { m as default };
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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"}