@burdenoff/microfe-bigconsole 2026.805.2 → 2026.805.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +109 -113
  2. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  3. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +115 -113
  4. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  5. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +71 -62
  6. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +90 -89
  8. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  9. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +56 -54
  10. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  11. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +126 -125
  12. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  13. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +151 -150
  14. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  15. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +77 -76
  16. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  17. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +97 -96
  18. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  19. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +172 -191
  20. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  21. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
  22. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
  23. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +151 -154
  24. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  25. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
  26. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  27. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
  28. package/dist/bigconsole/components/dashboard/WidgetPalette.js +110 -108
  29. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  30. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +102 -103
  31. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  32. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +36 -41
  33. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  34. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +38 -37
  35. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  36. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
  37. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  38. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +182 -197
  39. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  40. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +166 -168
  41. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  42. package/dist/bigconsole/components/parser/DataSinkSelector.js +87 -86
  43. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  44. package/dist/bigconsole/components/parser/ImportParserDialog.js +196 -211
  45. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  46. package/dist/bigconsole/components/parser/ParserSelector.js +130 -128
  47. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  48. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +66 -63
  49. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  50. package/dist/bigconsole/components/preview/AiPreviewPanel.js +95 -91
  51. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  52. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +222 -215
  53. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  54. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +149 -145
  55. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  56. package/dist/bigconsole/components/widgets/PropertiesPanel.js +504 -470
  57. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  58. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +44 -47
  59. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  60. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +143 -142
  61. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  62. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +101 -88
  63. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  64. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +135 -134
  65. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  66. package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
  67. package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
  68. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +69 -68
  69. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  70. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +64 -72
  71. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  72. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +60 -59
  73. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  74. package/dist/bigconsole/components/widgets/list/ListConfig.js +57 -56
  75. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  76. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +70 -69
  77. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  78. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
  79. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  80. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
  81. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
  82. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +178 -177
  83. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  84. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +76 -75
  85. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  86. package/dist/bigconsole/components/widgets/table/TableConfig.js +183 -168
  87. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  88. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +187 -180
  89. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  90. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +40 -38
  91. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  92. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +150 -148
  93. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  94. package/dist/bigconsole/pages/DashboardBuilderPage.js +181 -176
  95. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  96. package/dist/bigconsole/pages/DashboardViewPage.js +196 -192
  97. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  98. package/dist/bigconsole/pages/DashboardsPage.js +223 -219
  99. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  100. package/dist/bigconsole/pages/DataParsersPage.js +167 -170
  101. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  102. package/dist/bigconsole/pages/DataSinkBuilderPage.js +204 -189
  103. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  104. package/dist/bigconsole/pages/DataSinkViewPage.js +175 -169
  105. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  106. package/dist/bigconsole/pages/DataSourcesPage.js +8 -7
  107. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  108. package/dist/bigconsole/pages/InsightsPage.js +238 -208
  109. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  110. package/dist/bigconsole/pages/ParserBuilderPage.js +464 -412
  111. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  112. package/dist/bigconsole/pages/ParserViewPage.js +92 -90
  113. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  114. package/dist/bigconsole/pages/PipelineBuilderPage.js +221 -194
  115. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  116. package/dist/bigconsole/pages/PipelineViewPage.js +181 -184
  117. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  118. package/dist/bigconsole/pages/PipelinesPage.js +128 -127
  119. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  120. package/dist/bigconsole/pages/SettingsPage.js +177 -172
  121. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  122. package/dist/bigconsole/pages/WidgetDemoPage.js +121 -83
  123. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  124. package/dist/bigconsole/pages/WorkflowViewPage.js +199 -193
  125. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  126. package/dist/bigconsole/pages/WorkflowsPage.js +129 -128
  127. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  128. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
  129. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
  130. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
  131. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
  132. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
  133. package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
  134. package/package.json +2 -1
@@ -1,8 +1,9 @@
1
1
  import e, { getEventStatusColor as t, getEventStatusIcon as n, getEventStatusLabel as r } from "../../../hooks/useEventLogs.js";
2
2
  import { memo as i, useCallback as a, useState as o } from "react";
3
- import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
3
+ import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
4
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
4
5
  //#region src/bigconsole/components/widgets/event-logs/EventLogViewer.tsx
5
- var u = {
6
+ var d = {
6
7
  container: {
7
8
  padding: "16px",
8
9
  backgroundColor: "var(--color-bg-surface)",
@@ -130,28 +131,28 @@ var u = {
130
131
  fontSize: "14px"
131
132
  }
132
133
  };
133
- function d(e) {
134
- let t = new Date(e), n = (/* @__PURE__ */ new Date()).getTime() - t.getTime(), r = Math.floor(n / 6e4), i = Math.floor(r / 60), a = Math.floor(i / 24);
135
- return r < 1 ? "Just now" : r < 60 ? `${r}m ago` : i < 24 ? `${i}h ago` : a < 7 ? `${a}d ago` : t.toLocaleDateString();
134
+ function f(e, t) {
135
+ 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
+ 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();
136
137
  }
137
- var f = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpand: f }) {
138
- let p = e.status === "FAILED";
139
- return /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ l("tr", { children: [
140
- /* @__PURE__ */ c("td", {
141
- style: u.td,
142
- children: /* @__PURE__ */ c("button", {
143
- onClick: f,
144
- style: u.expandButton,
138
+ var p = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpand: p }) {
139
+ let { t: m } = s(), h = e.status === "FAILED";
140
+ return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ u("tr", { children: [
141
+ /* @__PURE__ */ l("td", {
142
+ style: d.td,
143
+ children: /* @__PURE__ */ l("button", {
144
+ onClick: p,
145
+ style: d.expandButton,
145
146
  children: o ? "▼" : "▶"
146
147
  })
147
148
  }),
148
- /* @__PURE__ */ c("td", {
149
- style: u.td,
150
- children: /* @__PURE__ */ l("div", {
151
- style: u.statusCell,
152
- children: [/* @__PURE__ */ c("span", { children: n(e.status) }), /* @__PURE__ */ c("span", {
149
+ /* @__PURE__ */ l("td", {
150
+ style: d.td,
151
+ children: /* @__PURE__ */ u("div", {
152
+ style: d.statusCell,
153
+ children: [/* @__PURE__ */ l("span", { children: n(e.status) }), /* @__PURE__ */ l("span", {
153
154
  style: {
154
- ...u.statusBadge,
155
+ ...d.statusBadge,
155
156
  backgroundColor: `${t(e.status)}20`,
156
157
  color: t(e.status)
157
158
  },
@@ -159,35 +160,35 @@ var f = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
159
160
  })]
160
161
  })
161
162
  }),
162
- /* @__PURE__ */ l("td", {
163
- style: u.td,
164
- children: [/* @__PURE__ */ c("div", {
165
- style: u.eventName,
163
+ /* @__PURE__ */ u("td", {
164
+ style: d.td,
165
+ children: [/* @__PURE__ */ l("div", {
166
+ style: d.eventName,
166
167
  children: e.eventName
167
168
  }), e.actionName && /* @__PURE__ */ l("div", {
168
169
  style: {
169
170
  fontSize: "11px",
170
171
  color: "var(--color-text-placeholder)"
171
172
  },
172
- children: ["Action: ", e.actionName]
173
+ children: m("bigconsole.widget.eventLog.actionLabel", "Action: {{action}}", { action: e.actionName ?? "" })
173
174
  })]
174
175
  }),
175
- /* @__PURE__ */ c("td", {
176
- style: u.td,
177
- children: /* @__PURE__ */ c("div", {
178
- style: u.timeAgo,
179
- children: d(e.createdAt)
176
+ /* @__PURE__ */ l("td", {
177
+ style: d.td,
178
+ children: /* @__PURE__ */ l("div", {
179
+ style: d.timeAgo,
180
+ children: f(e.createdAt, m)
180
181
  })
181
182
  }),
182
- /* @__PURE__ */ c("td", {
183
- style: u.td,
184
- children: e.webhookUrl ? /* @__PURE__ */ c("span", {
183
+ /* @__PURE__ */ l("td", {
184
+ style: d.td,
185
+ children: e.webhookUrl ? /* @__PURE__ */ l("span", {
185
186
  style: {
186
187
  fontSize: "12px",
187
188
  color: "var(--color-text-muted)"
188
189
  },
189
190
  children: new URL(e.webhookUrl).hostname
190
- }) : /* @__PURE__ */ c("span", {
191
+ }) : /* @__PURE__ */ l("span", {
191
192
  style: {
192
193
  fontSize: "12px",
193
194
  color: "var(--color-text-placeholder)"
@@ -195,183 +196,183 @@ var f = i(function({ log: e, onRetry: i, retrying: a, expanded: o, onToggleExpan
195
196
  children: "—"
196
197
  })
197
198
  }),
198
- /* @__PURE__ */ c("td", {
199
- style: u.td,
200
- children: p && /* @__PURE__ */ c("button", {
199
+ /* @__PURE__ */ l("td", {
200
+ style: d.td,
201
+ children: h && /* @__PURE__ */ l("button", {
201
202
  onClick: i,
202
203
  disabled: a,
203
- style: u.retryButton,
204
- children: a ? "..." : "🔄 Retry"
204
+ style: d.retryButton,
205
+ children: a ? "..." : `🔄 ${m("bigconsole.widget.eventLog.retry", "Retry")}`
205
206
  })
206
207
  })
207
- ] }), o && /* @__PURE__ */ c("tr", {
208
- style: u.detailRow,
209
- children: /* @__PURE__ */ c("td", {
208
+ ] }), o && /* @__PURE__ */ l("tr", {
209
+ style: d.detailRow,
210
+ children: /* @__PURE__ */ l("td", {
210
211
  colSpan: 6,
211
- style: u.td,
212
- children: /* @__PURE__ */ l("div", {
213
- style: u.detailContent,
212
+ style: d.td,
213
+ children: /* @__PURE__ */ u("div", {
214
+ style: d.detailContent,
214
215
  children: [
215
- /* @__PURE__ */ c("strong", { children: "Payload:" }),
216
+ /* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.payload", "Payload:") }),
216
217
  "\n",
217
218
  JSON.stringify(e.payload, null, 2),
218
- e.errorMessage && /* @__PURE__ */ l(s, { children: [
219
+ e.errorMessage && /* @__PURE__ */ u(c, { children: [
219
220
  "\n\n",
220
- /* @__PURE__ */ c("strong", {
221
+ /* @__PURE__ */ l("strong", {
221
222
  style: { color: "var(--color-status-error-text)" },
222
- children: "Error:"
223
+ children: m("bigconsole.widget.eventLog.error", "Error:")
223
224
  }),
224
225
  "\n",
225
226
  e.errorMessage
226
227
  ] }),
227
- e.responseCode && /* @__PURE__ */ l(s, { children: [
228
+ e.responseCode && /* @__PURE__ */ u(c, { children: [
228
229
  "\n\n",
229
- /* @__PURE__ */ c("strong", { children: "Response Code:" }),
230
+ /* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.responseCode", "Response Code:") }),
230
231
  " ",
231
232
  e.responseCode
232
233
  ] }),
233
234
  "\n\n",
234
- /* @__PURE__ */ c("strong", { children: "Attempts:" }),
235
+ /* @__PURE__ */ l("strong", { children: m("bigconsole.widget.eventLog.attempts", "Attempts:") }),
235
236
  " ",
236
237
  e.attempts
237
238
  ]
238
239
  })
239
240
  })
240
241
  })] });
241
- }), p = i(function({ dashboardId: t, widgetId: n, maxHeight: r = "400px", onRetrySuccess: i }) {
242
- let [d, p] = o(""), [m, h] = o(/* @__PURE__ */ new Set()), [g, _] = o(null), { logs: v, loading: y, totalCount: b, hasMore: x, loadMore: S, retryDelivery: C, refetch: w } = e({
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({
243
244
  dashboardId: t,
244
245
  widgetId: n,
245
- status: d || void 0
246
- }), T = a(async (e) => {
247
- _(e.id);
248
- let t = await C(e.id);
249
- _(null), t && i?.(t);
250
- }, [C, i]), E = a((e) => {
251
- h((t) => {
246
+ status: m || void 0
247
+ }), D = a(async (e) => {
248
+ y(e.id);
249
+ let t = await T(e.id);
250
+ y(null), t && i?.(t);
251
+ }, [T, i]), O = a((e) => {
252
+ _((t) => {
252
253
  let n = new Set(t);
253
254
  return n.has(e) ? n.delete(e) : n.add(e), n;
254
255
  });
255
256
  }, []);
256
- return /* @__PURE__ */ l("div", {
257
- style: u.container,
258
- children: [/* @__PURE__ */ l("div", {
259
- style: u.header,
260
- children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("h3", {
261
- style: u.title,
262
- children: "Event History"
257
+ return /* @__PURE__ */ u("div", {
258
+ style: d.container,
259
+ children: [/* @__PURE__ */ u("div", {
260
+ 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")
263
264
  }), /* @__PURE__ */ l("span", {
264
- style: u.totalCount,
265
- children: [b, " events"]
266
- })] }), /* @__PURE__ */ l("div", {
267
- style: u.headerActions,
268
- children: [/* @__PURE__ */ l("select", {
269
- value: d,
270
- onChange: (e) => p(e.target.value),
271
- style: u.filterSelect,
265
+ style: d.totalCount,
266
+ children: f("bigconsole.widget.eventLog.eventCount", "{{count}} events", { count: S })
267
+ })] }), /* @__PURE__ */ u("div", {
268
+ style: d.headerActions,
269
+ children: [/* @__PURE__ */ u("select", {
270
+ value: m,
271
+ onChange: (e) => h(e.target.value),
272
+ style: d.filterSelect,
272
273
  children: [
273
- /* @__PURE__ */ c("option", {
274
+ /* @__PURE__ */ l("option", {
274
275
  value: "",
275
- children: "All Status"
276
+ children: f("bigconsole.widget.eventLog.filter.all", "All Status")
276
277
  }),
277
- /* @__PURE__ */ c("option", {
278
+ /* @__PURE__ */ l("option", {
278
279
  value: "DELIVERED",
279
- children: "Delivered"
280
+ children: f("bigconsole.widget.eventLog.filter.delivered", "Delivered")
280
281
  }),
281
- /* @__PURE__ */ c("option", {
282
+ /* @__PURE__ */ l("option", {
282
283
  value: "FAILED",
283
- children: "Failed"
284
+ children: f("bigconsole.widget.eventLog.filter.failed", "Failed")
284
285
  }),
285
- /* @__PURE__ */ c("option", {
286
+ /* @__PURE__ */ l("option", {
286
287
  value: "PENDING",
287
- children: "Pending"
288
+ children: f("bigconsole.widget.eventLog.filter.pending", "Pending")
288
289
  }),
289
- /* @__PURE__ */ c("option", {
290
+ /* @__PURE__ */ l("option", {
290
291
  value: "PROCESSING",
291
- children: "Processing"
292
+ children: f("bigconsole.widget.eventLog.filter.processing", "Processing")
292
293
  }),
293
- /* @__PURE__ */ c("option", {
294
+ /* @__PURE__ */ l("option", {
294
295
  value: "RETRYING",
295
- children: "Retrying"
296
+ children: f("bigconsole.widget.eventLog.filter.retrying", "Retrying")
296
297
  }),
297
- /* @__PURE__ */ c("option", {
298
+ /* @__PURE__ */ l("option", {
298
299
  value: "IGNORED",
299
- children: "Ignored"
300
+ children: f("bigconsole.widget.eventLog.filter.ignored", "Ignored")
300
301
  })
301
302
  ]
302
- }), /* @__PURE__ */ c("button", {
303
- onClick: () => w(),
304
- style: u.refreshButton,
305
- children: "🔄 Refresh"
303
+ }), /* @__PURE__ */ u("button", {
304
+ onClick: () => E(),
305
+ style: d.refreshButton,
306
+ children: ["🔄 ", f("bigconsole.widget.eventLog.refresh", "Refresh")]
306
307
  })]
307
308
  })]
308
- }), y && v.length === 0 ? /* @__PURE__ */ c("div", {
309
- style: u.emptyState,
310
- children: "Loading..."
311
- }) : v.length === 0 ? /* @__PURE__ */ l("div", {
312
- style: u.emptyState,
313
- children: [/* @__PURE__ */ c("p", { children: "No events found" }), /* @__PURE__ */ c("p", {
309
+ }), x && b.length === 0 ? /* @__PURE__ */ l("div", {
310
+ style: d.emptyState,
311
+ children: f("bigconsole.widget.eventLog.loading", "Loading...")
312
+ }) : b.length === 0 ? /* @__PURE__ */ u("div", {
313
+ style: d.emptyState,
314
+ children: [/* @__PURE__ */ l("p", { children: f("bigconsole.widget.eventLog.emptyTitle", "No events found") }), /* @__PURE__ */ l("p", {
314
315
  style: {
315
316
  fontSize: "13px",
316
317
  marginTop: "8px"
317
318
  },
318
- children: "Events will appear here when actions are triggered."
319
+ children: f("bigconsole.widget.eventLog.emptyHint", "Events will appear here when actions are triggered.")
319
320
  })]
320
- }) : /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
321
+ }) : /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("div", {
321
322
  style: {
322
- ...u.tableContainer,
323
+ ...d.tableContainer,
323
324
  maxHeight: r,
324
325
  overflowY: "auto"
325
326
  },
326
- children: /* @__PURE__ */ l("table", {
327
- style: u.table,
328
- children: [/* @__PURE__ */ c("thead", {
329
- style: u.tableHeader,
330
- children: /* @__PURE__ */ l("tr", { children: [
331
- /* @__PURE__ */ c("th", { style: {
332
- ...u.th,
327
+ children: /* @__PURE__ */ u("table", {
328
+ style: d.table,
329
+ children: [/* @__PURE__ */ l("thead", {
330
+ style: d.tableHeader,
331
+ children: /* @__PURE__ */ u("tr", { children: [
332
+ /* @__PURE__ */ l("th", { style: {
333
+ ...d.th,
333
334
  width: "40px"
334
335
  } }),
335
- /* @__PURE__ */ c("th", {
336
- style: u.th,
337
- children: "Status"
336
+ /* @__PURE__ */ l("th", {
337
+ style: d.th,
338
+ children: f("bigconsole.widget.eventLog.column.status", "Status")
338
339
  }),
339
- /* @__PURE__ */ c("th", {
340
- style: u.th,
341
- children: "Event"
340
+ /* @__PURE__ */ l("th", {
341
+ style: d.th,
342
+ children: f("bigconsole.widget.eventLog.column.event", "Event")
342
343
  }),
343
- /* @__PURE__ */ c("th", {
344
- style: u.th,
345
- children: "Time"
344
+ /* @__PURE__ */ l("th", {
345
+ style: d.th,
346
+ children: f("bigconsole.widget.eventLog.column.time", "Time")
346
347
  }),
347
- /* @__PURE__ */ c("th", {
348
- style: u.th,
349
- children: "Webhook"
348
+ /* @__PURE__ */ l("th", {
349
+ style: d.th,
350
+ children: f("bigconsole.widget.eventLog.column.webhook", "Webhook")
350
351
  }),
351
- /* @__PURE__ */ c("th", {
352
+ /* @__PURE__ */ l("th", {
352
353
  style: {
353
- ...u.th,
354
+ ...d.th,
354
355
  width: "80px"
355
356
  },
356
- children: "Action"
357
+ children: f("bigconsole.widget.eventLog.column.action", "Action")
357
358
  })
358
359
  ] })
359
- }), /* @__PURE__ */ c("tbody", { children: v.map((e) => /* @__PURE__ */ c(f, {
360
+ }), /* @__PURE__ */ l("tbody", { children: b.map((e) => /* @__PURE__ */ l(p, {
360
361
  log: e,
361
- onRetry: () => T(e),
362
- retrying: g === e.id,
363
- expanded: m.has(e.id),
364
- onToggleExpand: () => E(e.id)
362
+ onRetry: () => D(e),
363
+ retrying: v === e.id,
364
+ expanded: g.has(e.id),
365
+ onToggleExpand: () => O(e.id)
365
366
  }, e.id)) })]
366
367
  })
367
- }), x && /* @__PURE__ */ c("button", {
368
- onClick: S,
369
- style: u.loadMoreButton,
370
- children: "Load More"
368
+ }), C && /* @__PURE__ */ l("button", {
369
+ onClick: w,
370
+ style: d.loadMoreButton,
371
+ children: f("bigconsole.widget.eventLog.loadMore", "Load More")
371
372
  })] })]
372
373
  });
373
374
  });
374
375
  //#endregion
375
- export { p as default };
376
+ export { m as default };
376
377
 
377
378
  //# 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 {\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\nfunction formatTimeAgo(dateString: string): 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 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 7) return `${diffDays}d ago`;\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 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)' }}>Action: {log.actionName}</div>\n )}\n </td>\n <td style={styles.td}>\n <div style={styles.timeAgo}>{formatTimeAgo(log.createdAt)}</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 ? '...' : '🔄 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>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)' }}>Error:</strong>\n {'\\n'}\n {log.errorMessage}\n </>\n )}\n {log.responseCode && (\n <>\n {'\\n\\n'}\n <strong>Response Code:</strong> {log.responseCode}\n </>\n )}\n {'\\n\\n'}\n <strong>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 [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}>Event History</h3>\n <span style={styles.totalCount}>{totalCount} events</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=\"\">All Status</option>\n <option value=\"DELIVERED\">Delivered</option>\n <option value=\"FAILED\">Failed</option>\n <option value=\"PENDING\">Pending</option>\n <option value=\"PROCESSING\">Processing</option>\n <option value=\"RETRYING\">Retrying</option>\n <option value=\"IGNORED\">Ignored</option>\n </select>\n <button onClick={() => refetch()} style={styles.refreshButton}>\n 🔄 Refresh\n </button>\n </div>\n </div>\n\n {loading && logs.length === 0 ? (\n <div style={styles.emptyState}>Loading...</div>\n ) : logs.length === 0 ? (\n <div style={styles.emptyState}>\n <p>No events found</p>\n <p style={{ fontSize: '13px', marginTop: '8px' }}>Events will appear here when actions are triggered.</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}>Status</th>\n <th style={styles.th}>Event</th>\n <th style={styles.th}>Time</th>\n <th style={styles.th}>Webhook</th>\n <th style={{ ...styles.th, width: '80px' }}>Action</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 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\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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"}