@burdenoff/microfe-bigconsole 2026.1004.7 → 2026.1005.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/bigconsole/BigConsoleRoutes.d.ts +7 -1
  2. package/dist/bigconsole/BigConsoleRoutes.d.ts.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoutes.js +154 -144
  4. package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
  5. package/dist/bigconsole/components/datasink/AlertExecutionHistory.d.ts +11 -0
  6. package/dist/bigconsole/components/datasink/AlertExecutionHistory.d.ts.map +1 -0
  7. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js +248 -0
  8. package/dist/bigconsole/components/datasink/AlertExecutionHistory.js.map +1 -0
  9. package/dist/bigconsole/components/datasink/AlertRuleEditor.d.ts +23 -0
  10. package/dist/bigconsole/components/datasink/AlertRuleEditor.d.ts.map +1 -0
  11. package/dist/bigconsole/components/datasink/AlertRuleEditor.js +357 -0
  12. package/dist/bigconsole/components/datasink/AlertRuleEditor.js.map +1 -0
  13. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.d.ts +25 -0
  14. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.d.ts.map +1 -0
  15. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js +89 -0
  16. package/dist/bigconsole/components/workflow/WorkflowOpenGuard.js.map +1 -0
  17. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts +146 -0
  18. package/dist/bigconsole/hooks/useDataSinkAlerts.d.ts.map +1 -0
  19. package/dist/bigconsole/hooks/useDataSinkAlerts.js +221 -0
  20. package/dist/bigconsole/hooks/useDataSinkAlerts.js.map +1 -0
  21. package/dist/bigconsole/pages/DataSinkAlertsPage.d.ts +2 -0
  22. package/dist/bigconsole/pages/DataSinkAlertsPage.d.ts.map +1 -0
  23. package/dist/bigconsole/pages/DataSinkAlertsPage.js +422 -0
  24. package/dist/bigconsole/pages/DataSinkAlertsPage.js.map +1 -0
  25. package/dist/bigconsole/pages/DataSinkViewPage.d.ts.map +1 -1
  26. package/dist/bigconsole/pages/DataSinkViewPage.js +151 -144
  27. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  28. package/dist/bigconsole/pages/WorkflowViewPage.js +4 -4
  29. package/dist/bigconsole/pages/WorkflowsPage.d.ts.map +1 -1
  30. package/dist/bigconsole/pages/WorkflowsPage.js +61 -60
  31. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  32. package/dist/bigconsole/utils/alertRules.d.ts +40 -0
  33. package/dist/bigconsole/utils/alertRules.d.ts.map +1 -0
  34. package/dist/bigconsole/utils/alertRules.js +83 -0
  35. package/dist/bigconsole/utils/alertRules.js.map +1 -0
  36. package/dist/bigconsole/workflowOpen.d.ts +78 -0
  37. package/dist/bigconsole/workflowOpen.d.ts.map +1 -0
  38. package/dist/bigconsole/workflowOpen.js +33 -0
  39. package/dist/bigconsole/workflowOpen.js.map +1 -0
  40. package/dist/generated/wspace-operations.d.ts +418 -0
  41. package/dist/generated/wspace-operations.d.ts.map +1 -1
  42. package/dist/generated/wspace-operations.js +329 -200
  43. package/dist/generated/wspace-operations.js.map +1 -1
  44. package/dist/generated/wspace-types.d.ts +122 -0
  45. package/dist/generated/wspace-types.d.ts.map +1 -1
  46. package/dist/generated/wspace-types.js +7 -1
  47. package/dist/generated/wspace-types.js.map +1 -1
  48. package/dist/translations/en.d.ts.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ import { AlertExecution, AlertRule } from '../../hooks/useDataSinkAlerts';
2
+
3
+ interface Props {
4
+ owner: string;
5
+ rules: AlertRule[];
6
+ load: (alertId?: string, after?: string) => Promise<AlertExecution[] | null>;
7
+ refreshVersion: number;
8
+ }
9
+ export declare function AlertExecutionHistory({ owner, rules, load, refreshVersion }: Props): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=AlertExecutionHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertExecutionHistory.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/datasink/AlertExecutionHistory.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAEvG,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7E,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,+BA2LlF"}
@@ -0,0 +1,248 @@
1
+ import { SECTION_FOCUS_RING as e } from "../common/sectionStyles.js";
2
+ import { Section as t } from "../common/Section.js";
3
+ import "../common/index.js";
4
+ import { alertErrorMessage as n } from "../../hooks/useDataSinkAlerts.js";
5
+ import { useCallback as r, useEffect as i, useLayoutEffect as a, useRef as o, useState as s } from "react";
6
+ import { Loader2 as c, RefreshCw as l } from "lucide-react";
7
+ import { Button as u } from "@burdenoff/fe-libs/ui";
8
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
+ import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ //#region src/bigconsole/components/datasink/AlertExecutionHistory.tsx
11
+ var m = {
12
+ owner: "",
13
+ rows: [],
14
+ loading: !1,
15
+ hasMore: !1,
16
+ error: null
17
+ };
18
+ function h({ owner: h, rules: g, load: _, refreshVersion: v }) {
19
+ let { t: y } = p(), [b, x] = s(""), [S, C] = s([]), w = S.at(-1), T = `${h}|${b}|${w ?? ""}`, E = o(null), D = o(null);
20
+ a(() => (E.current = T, () => {
21
+ E.current = null, D.current = null;
22
+ }), [T]);
23
+ let [O, k] = s(m), A = r(async () => {
24
+ if (E.current !== T || D.current) return;
25
+ let e = {};
26
+ D.current = e, k((e) => ({
27
+ ...e.owner === T ? e : m,
28
+ owner: T,
29
+ loading: !0,
30
+ error: null
31
+ }));
32
+ try {
33
+ let t = await _(b || void 0, w);
34
+ if (E.current !== T || D.current !== e || !t) return;
35
+ k({
36
+ owner: T,
37
+ rows: t.slice(0, 20),
38
+ loading: !1,
39
+ hasMore: t.length > 20,
40
+ error: null
41
+ });
42
+ } catch (t) {
43
+ E.current === T && D.current === e && k((e) => ({
44
+ ...e,
45
+ owner: T,
46
+ loading: !1,
47
+ error: n(t)
48
+ }));
49
+ } finally {
50
+ D.current === e && (D.current = null);
51
+ }
52
+ }, [
53
+ _,
54
+ b,
55
+ w,
56
+ T
57
+ ]);
58
+ i(() => {
59
+ Promise.resolve().then(() => A());
60
+ let e = window.setInterval(() => {
61
+ document.visibilityState === "visible" && A();
62
+ }, 1e4);
63
+ return () => window.clearInterval(e);
64
+ }, [A, v]);
65
+ let j = O.owner === T ? O : {
66
+ ...m,
67
+ loading: !0
68
+ };
69
+ return /* @__PURE__ */ f(t, {
70
+ title: y("bigconsole.alerts.history.title", "Execution history"),
71
+ headingLevel: 2,
72
+ description: y("bigconsole.alerts.history.description", "Actual evaluations and notification delivery status. Refreshes every 10 seconds while this page is visible."),
73
+ actions: /* @__PURE__ */ f(u, {
74
+ type: "button",
75
+ variant: "secondary",
76
+ size: "sm",
77
+ onClick: () => void A(),
78
+ disabled: j.loading,
79
+ children: [j.loading ? /* @__PURE__ */ d(c, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ d(l, { className: "mr-2 h-4 w-4" }), y("bigconsole.alerts.history.refresh", "Refresh history")]
80
+ }),
81
+ children: [
82
+ /* @__PURE__ */ d("label", {
83
+ htmlFor: "alert-history-filter",
84
+ className: "mb-1 block text-xs font-medium text-text-primary",
85
+ children: y("bigconsole.alerts.history.filter", "Filter by rule")
86
+ }),
87
+ /* @__PURE__ */ f("select", {
88
+ id: "alert-history-filter",
89
+ className: `mb-4 w-full min-w-0 rounded-control border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary ${e}`,
90
+ value: b,
91
+ onChange: (e) => {
92
+ x(e.target.value), C([]);
93
+ },
94
+ children: [
95
+ /* @__PURE__ */ d("option", {
96
+ value: "",
97
+ children: y("bigconsole.alerts.history.all", "All rules")
98
+ }),
99
+ b && !g.some((e) => e.id === b) && /* @__PURE__ */ d("option", {
100
+ value: b,
101
+ children: b
102
+ }),
103
+ g.map((e) => /* @__PURE__ */ d("option", {
104
+ value: e.id,
105
+ children: e.name
106
+ }, e.id))
107
+ ]
108
+ }),
109
+ j.error && /* @__PURE__ */ d("p", {
110
+ role: "alert",
111
+ className: "mb-4 break-words text-sm text-status-error-text",
112
+ children: j.error
113
+ }),
114
+ j.loading && !j.rows.length && /* @__PURE__ */ d("p", {
115
+ role: "status",
116
+ className: "text-sm text-text-secondary",
117
+ children: y("bigconsole.alerts.history.loading", "Loading execution history…")
118
+ }),
119
+ !j.loading && !j.error && !j.rows.length && /* @__PURE__ */ d("p", {
120
+ className: "text-sm text-text-secondary",
121
+ children: y("bigconsole.alerts.history.empty", "No evaluations recorded yet. Enabled rules evaluate when the sink data is updated or refreshed.")
122
+ }),
123
+ /* @__PURE__ */ d("ol", {
124
+ className: "divide-y divide-border-subtle",
125
+ children: j.rows.map((e) => /* @__PURE__ */ f("li", {
126
+ className: "min-w-0 py-4 first:pt-0",
127
+ children: [
128
+ /* @__PURE__ */ f("div", {
129
+ className: "flex flex-wrap items-start justify-between gap-2",
130
+ children: [/* @__PURE__ */ f("div", {
131
+ className: "min-w-0",
132
+ children: [/* @__PURE__ */ d("p", {
133
+ className: "break-words text-sm font-medium text-text-primary",
134
+ children: g.find((t) => t.id === e.alertId)?.name ?? e.alertId
135
+ }), /* @__PURE__ */ d("time", {
136
+ dateTime: e.createdAt,
137
+ className: "text-xs text-text-secondary",
138
+ children: new Date(e.createdAt).toLocaleString()
139
+ })]
140
+ }), /* @__PURE__ */ d("span", {
141
+ className: "rounded-pill border border-border-subtle bg-bg-sunken px-2 py-1 text-xs font-medium text-text-primary",
142
+ children: y(`bigconsole.alerts.history.status.${e.status}`, e.status.replaceAll("_", " "))
143
+ })]
144
+ }),
145
+ /* @__PURE__ */ f("p", {
146
+ className: "mt-2 break-words text-xs text-text-secondary",
147
+ children: [
148
+ y("bigconsole.alerts.history.dataVersion", "Data version"),
149
+ " ",
150
+ e.version,
151
+ " · ",
152
+ e.source,
153
+ " ·",
154
+ " ",
155
+ e.durationMs,
156
+ " ms"
157
+ ]
158
+ }),
159
+ e.error && /* @__PURE__ */ d("p", {
160
+ className: "mt-2 break-words text-sm text-status-error-text",
161
+ children: e.error
162
+ }),
163
+ e.deliveries.length > 0 && /* @__PURE__ */ d("ul", {
164
+ className: "mt-3 space-y-2",
165
+ children: e.deliveries.map((e, t) => /* @__PURE__ */ f("li", {
166
+ className: "min-w-0 rounded-control border border-border-subtle bg-bg-sunken p-3 text-xs",
167
+ children: [
168
+ /* @__PURE__ */ f("div", {
169
+ className: "flex flex-wrap justify-between gap-2",
170
+ children: [/* @__PURE__ */ f("span", {
171
+ className: "break-all text-text-primary",
172
+ children: [
173
+ e.channel,
174
+ " · ",
175
+ e.recipient
176
+ ]
177
+ }), /* @__PURE__ */ d("span", {
178
+ className: "font-medium text-text-primary",
179
+ children: e.status
180
+ })]
181
+ }),
182
+ e.attemptedAt && /* @__PURE__ */ f("p", {
183
+ className: "mt-1 text-text-secondary",
184
+ children: [
185
+ y("bigconsole.alerts.history.attempted", "Attempted"),
186
+ " ",
187
+ /* @__PURE__ */ d("time", {
188
+ dateTime: e.attemptedAt,
189
+ children: new Date(e.attemptedAt).toLocaleString()
190
+ })
191
+ ]
192
+ }),
193
+ e.notificationId && /* @__PURE__ */ f("p", {
194
+ className: "mt-1 break-all text-text-muted",
195
+ children: [
196
+ y("bigconsole.alerts.history.notification", "Notification"),
197
+ " · ",
198
+ e.notificationId
199
+ ]
200
+ }),
201
+ e.error && /* @__PURE__ */ d("p", {
202
+ className: "mt-1 break-words text-status-error-text",
203
+ children: e.error
204
+ })
205
+ ]
206
+ }, `${e.channelId}|${e.recipient}|${t}`))
207
+ })
208
+ ]
209
+ }, e.id))
210
+ }),
211
+ /* @__PURE__ */ f("div", {
212
+ className: "mt-4 flex flex-wrap items-center justify-between gap-control-gap border-t border-border-subtle pt-3",
213
+ children: [/* @__PURE__ */ f("span", {
214
+ className: "text-xs text-text-secondary",
215
+ children: [
216
+ j.rows.length,
217
+ " ",
218
+ y("bigconsole.alerts.history.count", "executions on this page")
219
+ ]
220
+ }), /* @__PURE__ */ f("div", {
221
+ className: "flex gap-control-gap",
222
+ children: [/* @__PURE__ */ d(u, {
223
+ type: "button",
224
+ variant: "secondary",
225
+ size: "sm",
226
+ onClick: () => C((e) => e.slice(0, -1)),
227
+ disabled: !S.length || j.loading,
228
+ children: y("bigconsole.alerts.history.newer", "Newer")
229
+ }), /* @__PURE__ */ d(u, {
230
+ type: "button",
231
+ variant: "secondary",
232
+ size: "sm",
233
+ onClick: () => {
234
+ let e = j.rows.at(-1);
235
+ e && C((t) => [...t, e.id]);
236
+ },
237
+ disabled: !j.hasMore || j.loading,
238
+ children: y("bigconsole.alerts.history.older", "Older")
239
+ })]
240
+ })]
241
+ })
242
+ ]
243
+ });
244
+ }
245
+ //#endregion
246
+ export { h as AlertExecutionHistory };
247
+
248
+ //# sourceMappingURL=AlertExecutionHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertExecutionHistory.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/AlertExecutionHistory.tsx"],"sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Loader2, RefreshCw } from 'lucide-react';\nimport { Section, SECTION_FOCUS_RING } from '../common';\nimport { alertErrorMessage, type AlertExecution, type AlertRule } from '../../hooks/useDataSinkAlerts';\n\ninterface Props {\n owner: string;\n rules: AlertRule[];\n load: (alertId?: string, after?: string) => Promise<AlertExecution[] | null>;\n refreshVersion: number;\n}\ninterface HistoryPage {\n owner: string;\n rows: AlertExecution[];\n loading: boolean;\n hasMore: boolean;\n error: string | null;\n}\nconst EMPTY: HistoryPage = { owner: '', rows: [], loading: false, hasMore: false, error: null };\n\nexport function AlertExecutionHistory({ owner, rules, load, refreshVersion }: Props) {\n const { t } = useI18n();\n const [alertId, setAlertId] = useState('');\n const [cursors, setCursors] = useState<string[]>([]);\n const after = cursors.at(-1);\n const requestOwner = `${owner}|${alertId}|${after ?? ''}`;\n const activeOwner = useRef<string | null>(null);\n const activeRequest = useRef<object | null>(null);\n useLayoutEffect(() => {\n activeOwner.current = requestOwner;\n return () => {\n activeOwner.current = null;\n activeRequest.current = null;\n };\n }, [requestOwner]);\n const [state, setState] = useState<HistoryPage>(EMPTY);\n const reload = useCallback(async () => {\n if (activeOwner.current !== requestOwner || activeRequest.current) return;\n const request = {};\n activeRequest.current = request;\n setState((previous) => ({\n ...(previous.owner === requestOwner ? previous : EMPTY),\n owner: requestOwner,\n loading: true,\n error: null,\n }));\n try {\n const rows = await load(alertId || undefined, after);\n if (activeOwner.current !== requestOwner || activeRequest.current !== request || !rows) return;\n setState({\n owner: requestOwner,\n rows: rows.slice(0, 20),\n loading: false,\n hasMore: rows.length > 20,\n error: null,\n });\n } catch (error) {\n if (activeOwner.current === requestOwner && activeRequest.current === request)\n setState((previous) => ({ ...previous, owner: requestOwner, loading: false, error: alertErrorMessage(error) }));\n } finally {\n if (activeRequest.current === request) activeRequest.current = null;\n }\n }, [load, alertId, after, requestOwner]);\n useEffect(() => {\n void Promise.resolve().then(() => reload());\n const timer = window.setInterval(() => {\n if (document.visibilityState === 'visible') void reload();\n }, 10000);\n return () => window.clearInterval(timer);\n }, [reload, refreshVersion]);\n const current = state.owner === requestOwner ? state : { ...EMPTY, loading: true };\n return (\n <Section\n title={t('bigconsole.alerts.history.title', 'Execution history')}\n headingLevel={2}\n description={t(\n 'bigconsole.alerts.history.description',\n 'Actual evaluations and notification delivery status. Refreshes every 10 seconds while this page is visible.'\n )}\n actions={\n <Button type=\"button\" variant=\"secondary\" size=\"sm\" onClick={() => void reload()} disabled={current.loading}>\n {current.loading ? <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> : <RefreshCw className=\"mr-2 h-4 w-4\" />}\n {t('bigconsole.alerts.history.refresh', 'Refresh history')}\n </Button>\n }\n >\n <label htmlFor=\"alert-history-filter\" className=\"mb-1 block text-xs font-medium text-text-primary\">\n {t('bigconsole.alerts.history.filter', 'Filter by rule')}\n </label>\n <select\n id=\"alert-history-filter\"\n className={`mb-4 w-full min-w-0 rounded-control border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary ${SECTION_FOCUS_RING}`}\n value={alertId}\n onChange={(event) => {\n setAlertId(event.target.value);\n setCursors([]);\n }}\n >\n <option value=\"\">{t('bigconsole.alerts.history.all', 'All rules')}</option>\n {alertId && !rules.some((rule) => rule.id === alertId) && <option value={alertId}>{alertId}</option>}\n {rules.map((rule) => (\n <option key={rule.id} value={rule.id}>\n {rule.name}\n </option>\n ))}\n </select>\n {current.error && (\n <p role=\"alert\" className=\"mb-4 break-words text-sm text-status-error-text\">\n {current.error}\n </p>\n )}\n {current.loading && !current.rows.length && (\n <p role=\"status\" className=\"text-sm text-text-secondary\">\n {t('bigconsole.alerts.history.loading', 'Loading execution history…')}\n </p>\n )}\n {!current.loading && !current.error && !current.rows.length && (\n <p className=\"text-sm text-text-secondary\">\n {t(\n 'bigconsole.alerts.history.empty',\n 'No evaluations recorded yet. Enabled rules evaluate when the sink data is updated or refreshed.'\n )}\n </p>\n )}\n <ol className=\"divide-y divide-border-subtle\">\n {current.rows.map((execution) => (\n <li key={execution.id} className=\"min-w-0 py-4 first:pt-0\">\n <div className=\"flex flex-wrap items-start justify-between gap-2\">\n <div className=\"min-w-0\">\n <p className=\"break-words text-sm font-medium text-text-primary\">\n {rules.find((rule) => rule.id === execution.alertId)?.name ?? execution.alertId}\n </p>\n <time dateTime={execution.createdAt} className=\"text-xs text-text-secondary\">\n {new Date(execution.createdAt).toLocaleString()}\n </time>\n </div>\n <span className=\"rounded-pill border border-border-subtle bg-bg-sunken px-2 py-1 text-xs font-medium text-text-primary\">\n {t(`bigconsole.alerts.history.status.${execution.status}`, execution.status.replaceAll('_', ' '))}\n </span>\n </div>\n <p className=\"mt-2 break-words text-xs text-text-secondary\">\n {t('bigconsole.alerts.history.dataVersion', 'Data version')} {execution.version} · {execution.source} ·{' '}\n {execution.durationMs} ms\n </p>\n {execution.error && <p className=\"mt-2 break-words text-sm text-status-error-text\">{execution.error}</p>}\n {execution.deliveries.length > 0 && (\n <ul className=\"mt-3 space-y-2\">\n {execution.deliveries.map((delivery, index) => (\n <li\n key={`${delivery.channelId}|${delivery.recipient}|${index}`}\n className=\"min-w-0 rounded-control border border-border-subtle bg-bg-sunken p-3 text-xs\"\n >\n <div className=\"flex flex-wrap justify-between gap-2\">\n <span className=\"break-all text-text-primary\">\n {delivery.channel} · {delivery.recipient}\n </span>\n <span className=\"font-medium text-text-primary\">{delivery.status}</span>\n </div>\n {delivery.attemptedAt && (\n <p className=\"mt-1 text-text-secondary\">\n {t('bigconsole.alerts.history.attempted', 'Attempted')}{' '}\n <time dateTime={delivery.attemptedAt}>{new Date(delivery.attemptedAt).toLocaleString()}</time>\n </p>\n )}\n {delivery.notificationId && (\n <p className=\"mt-1 break-all text-text-muted\">\n {t('bigconsole.alerts.history.notification', 'Notification')} · {delivery.notificationId}\n </p>\n )}\n {delivery.error && <p className=\"mt-1 break-words text-status-error-text\">{delivery.error}</p>}\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ol>\n <div className=\"mt-4 flex flex-wrap items-center justify-between gap-control-gap border-t border-border-subtle pt-3\">\n <span className=\"text-xs text-text-secondary\">\n {current.rows.length} {t('bigconsole.alerts.history.count', 'executions on this page')}\n </span>\n <div className=\"flex gap-control-gap\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => setCursors((previous) => previous.slice(0, -1))}\n disabled={!cursors.length || current.loading}\n >\n {t('bigconsole.alerts.history.newer', 'Newer')}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => {\n const last = current.rows.at(-1);\n if (last) setCursors((previous) => [...previous, last.id]);\n }}\n disabled={!current.hasMore || current.loading}\n >\n {t('bigconsole.alerts.history.older', 'Older')}\n </Button>\n </div>\n </div>\n </Section>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { AlertChannel, AlertPreview } from '../../hooks/useDataSinkAlerts';
2
+ import { AlertDraft } from '../../utils/alertRules';
3
+
4
+ interface Props {
5
+ draft: AlertDraft;
6
+ channels: AlertChannel[];
7
+ channelError: string | null;
8
+ canUpdate: boolean;
9
+ pending: boolean;
10
+ previewing: boolean;
11
+ preview: AlertPreview | null;
12
+ previewError: string | null;
13
+ previewStale: boolean;
14
+ error: string | null;
15
+ onChange: (draft: AlertDraft) => void;
16
+ onSave: () => void;
17
+ onCancel: () => void;
18
+ onPreview: () => void;
19
+ onReloadChannels: () => void;
20
+ }
21
+ export declare function AlertRuleEditor(props: Props): import("react").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=AlertRuleEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertRuleEditor.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/datasink/AlertRuleEditor.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,UAAU,KAAK;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,+BAgY3C"}