@burdenoff/fluidgrids-fe-sdk 2026.1108.1 → 2026.1108.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 (56) hide show
  1. package/dist/{ExecutionDetailPage-STW6RPK6.js → ExecutionDetailPage-PY5OE2RJ.js} +15 -14
  2. package/dist/{ExecutionsListPage-753XDOTM.js → ExecutionsListPage-LKNYPXNZ.js} +11 -10
  3. package/dist/{TemplateDetailPanel-ZTYXKWRI.js → TemplateDetailPanel-5WY75DVB.js} +1 -1
  4. package/dist/{WorkflowBuilder-HY3PZZVD.js → WorkflowBuilder-YFPBMOWZ.js} +16 -16
  5. package/dist/{WorkflowsList-YFDT7ZPX.js → WorkflowsList-TETNEMYP.js} +10 -10
  6. package/dist/{agentTools-3UQNOO7V.js → agentTools-BW2XMHRV.js} +6 -6
  7. package/dist/{chunk-KE677WYY.js → chunk-2CXUTQUH.js} +1 -1
  8. package/dist/{chunk-H4ERTSMX.js → chunk-2VSYOGNI.js} +1948 -35
  9. package/dist/{chunk-NZMUKAXG.js → chunk-54NXUOHI.js} +1 -1
  10. package/dist/{chunk-YQOXXM5V.js → chunk-62RJORF7.js} +4 -4
  11. package/dist/{chunk-26GYGAC5.js → chunk-66AKFXP7.js} +15 -15
  12. package/dist/{chunk-47OW3OM5.js → chunk-7SSMRID2.js} +5 -5
  13. package/dist/{chunk-I23KAUR6.js → chunk-7XW6BC4B.js} +1 -1
  14. package/dist/{chunk-5375NUIO.js → chunk-AR22A74Y.js} +11 -0
  15. package/dist/{chunk-QHRRYTOL.js → chunk-D5Y3DHGJ.js} +1 -1
  16. package/dist/{chunk-JXJ2DESW.js → chunk-DG4UO5OY.js} +5 -5
  17. package/dist/{chunk-NMYENCP2.js → chunk-E7KIH3CF.js} +1 -1
  18. package/dist/{chunk-5OVWMFPL.js → chunk-GI6BQIQA.js} +124 -42
  19. package/dist/{chunk-Z3ABLERJ.js → chunk-GOZR72NK.js} +64 -1
  20. package/dist/{chunk-KHS2DZHH.js → chunk-HICQ4J4W.js} +1 -1
  21. package/dist/chunk-HPNZ3PYU.js +1448 -0
  22. package/dist/{chunk-F522K3P5.js → chunk-HQSSW7K3.js} +8 -8
  23. package/dist/{chunk-63X5ORDO.js → chunk-HSOSMPRC.js} +1 -1
  24. package/dist/{chunk-JRSCUUBT.js → chunk-IPJV2IOH.js} +1 -1
  25. package/dist/{chunk-HPYXHIRI.js → chunk-IWLNBDR2.js} +5 -5
  26. package/dist/{chunk-3QV3L3YY.js → chunk-IZOPKR64.js} +3 -3
  27. package/dist/{chunk-2CM26W2I.js → chunk-JRR4VKYD.js} +95 -6
  28. package/dist/{chunk-4OZISYDF.js → chunk-JSJSBB76.js} +2 -2
  29. package/dist/{chunk-PF7XQA2S.js → chunk-KJB3WZVD.js} +2 -2
  30. package/dist/{chunk-OHKSDHNC.js → chunk-L7PHZ7RY.js} +2 -2
  31. package/dist/{chunk-HRZMKJEC.js → chunk-LOMLLWHD.js} +705 -12
  32. package/dist/{chunk-XAXZ4T6H.js → chunk-MYPB2KTJ.js} +13 -6
  33. package/dist/{chunk-TKHW2G7O.js → chunk-N2QXEV5Y.js} +7 -7
  34. package/dist/{chunk-EXJW7EKR.js → chunk-OJHBCOBA.js} +164 -1
  35. package/dist/{chunk-ZKRDO4IG.js → chunk-POYMF7L6.js} +1 -1
  36. package/dist/{chunk-WX5BNZVX.js → chunk-RNYFPG7R.js} +4 -4
  37. package/dist/{chunk-PASKZCII.js → chunk-TN3NGTF7.js} +3 -3
  38. package/dist/{chunk-TYE252O5.js → chunk-VH3EET6H.js} +2 -2
  39. package/dist/{chunk-UZJKX5FN.js → chunk-X3F5IQBP.js} +5 -3
  40. package/dist/chunk-YASVILWQ.js +398 -0
  41. package/dist/{chunk-36TEHKVN.js → chunk-ZHXJYOOG.js} +2115 -25
  42. package/dist/executions.js +16 -15
  43. package/dist/history.js +8 -8
  44. package/dist/index.d.ts +15456 -235
  45. package/dist/index.js +1057 -55
  46. package/dist/{node-detail-view-GFC3UDYD.js → node-detail-view-BGWKE6KW.js} +489 -21
  47. package/dist/nodes.js +2 -2
  48. package/dist/observability.js +8 -8
  49. package/dist/{quick-config-panel-6XUUXIHX.js → quick-config-panel-67BU4I23.js} +8 -8
  50. package/dist/settings.js +10 -8
  51. package/dist/templates.js +15 -15
  52. package/dist/workflow-builder.js +17 -17
  53. package/dist/workflow-preview.js +2 -2
  54. package/dist/workflows-list.js +10 -10
  55. package/package.json +2 -2
  56. package/dist/chunk-ODWKSYMZ.js +0 -529
@@ -1,529 +0,0 @@
1
- import { useRunStatusCounts, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination, runStatusLabels } from './chunk-WX5BNZVX.js';
2
- import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, WORKFLOW_ID_MAX_LENGTH } from './chunk-2CM26W2I.js';
3
- import { useWorkflowDefinitions } from './chunk-PF7XQA2S.js';
4
- import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
5
- import { useDurableParityEnabled } from './chunk-5OVWMFPL.js';
6
- import { useTr } from './chunk-UULVIT25.js';
7
- import { useExecutionsStore } from './chunk-UEG2WC3G.js';
8
- import { useRef, useCallback, useMemo, useState, useEffect } from 'react';
9
- import { useNavigate, useSearchParams } from 'react-router';
10
- import { Icon } from '@iconify/react';
11
- import { toast } from 'sonner';
12
- import { Button } from '@burdenoff/fe-libs/button';
13
- import { Input } from '@burdenoff/fe-libs/ui';
14
- import { cn } from '@burdenoff/fe-libs/utils';
15
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
16
-
17
- var WORKFLOW_ID_FILTER_DEBOUNCE_MS = 350;
18
- var RUN_STATUSES = [
19
- "PENDING",
20
- "RUNNING",
21
- "WAITING",
22
- "COMPLETED",
23
- "FAILED",
24
- "CANCELLED",
25
- "TERMINATED"
26
- ];
27
- function isRunStatus(value) {
28
- return RUN_STATUSES.includes(value);
29
- }
30
- function RunsParityBar({
31
- workflowId,
32
- onWorkflowIdChange,
33
- total,
34
- counts,
35
- countsError,
36
- selectedStatus,
37
- onSelectStatus
38
- }) {
39
- const tr = useTr();
40
- const statusLabels = runStatusLabels(tr);
41
- const [draft, setDraft] = useState(workflowId);
42
- useEffect(() => {
43
- setDraft(workflowId);
44
- }, [workflowId]);
45
- useEffect(() => {
46
- if (draft === workflowId) return;
47
- const timer = setTimeout(
48
- () => onWorkflowIdChange(draft),
49
- WORKFLOW_ID_FILTER_DEBOUNCE_MS
50
- );
51
- return () => clearTimeout(timer);
52
- }, [draft, workflowId, onWorkflowIdChange]);
53
- return /* @__PURE__ */ jsxs(
54
- "div",
55
- {
56
- "data-testid": "runs-parity-bar",
57
- className: "mb-6 flex flex-col gap-3 lg:flex-row lg:items-center",
58
- children: [
59
- /* @__PURE__ */ jsxs("label", { className: "flex min-w-0 items-center gap-2 text-sm text-text-secondary lg:w-80", children: [
60
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:key-outline", width: 16, className: "shrink-0" }),
61
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: tr("fluidgrids.executions.parity.workflowIdFilter", "Workflow ID") }),
62
- /* @__PURE__ */ jsx(
63
- Input,
64
- {
65
- value: draft,
66
- maxLength: WORKFLOW_ID_MAX_LENGTH,
67
- placeholder: tr(
68
- "fluidgrids.executions.parity.workflowIdPlaceholder",
69
- "Filter by workflow ID"
70
- ),
71
- onChange: (event) => setDraft(event.target.value),
72
- "data-testid": "runs-workflow-id-filter"
73
- }
74
- )
75
- ] }),
76
- /* @__PURE__ */ jsx(
77
- "div",
78
- {
79
- className: "flex flex-wrap items-center gap-2",
80
- "data-testid": "runs-status-counts",
81
- children: countsError ? /* @__PURE__ */ jsxs("span", { className: "text-xs text-[var(--color-status-error-text)]", children: [
82
- tr(
83
- "fluidgrids.executions.parity.countsError",
84
- "Could not count the runs:"
85
- ),
86
- " ",
87
- countsError
88
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
89
- total !== null && /* @__PURE__ */ jsx(
90
- "button",
91
- {
92
- type: "button",
93
- onClick: () => onSelectStatus("all"),
94
- className: cn(
95
- "rounded-full border px-2.5 py-1 text-xs",
96
- selectedStatus === "all" ? "border-action-primary-bg bg-action-primary-bg text-action-primary-text" : "border-border-secondary text-text-secondary hover:text-text-primary"
97
- ),
98
- "aria-pressed": selectedStatus === "all",
99
- "data-testid": "runs-count-all",
100
- children: tr("fluidgrids.executions.parity.countAll", "All {{count}}", {
101
- count: total
102
- })
103
- }
104
- ),
105
- counts.map(
106
- ({ status, count }) => isRunStatus(status) ? /* @__PURE__ */ jsx(
107
- "button",
108
- {
109
- type: "button",
110
- onClick: () => onSelectStatus(status),
111
- className: cn(
112
- "rounded-full border px-2.5 py-1 text-xs",
113
- selectedStatus === status ? "border-action-primary-bg bg-action-primary-bg text-action-primary-text" : "border-border-secondary text-text-secondary hover:text-text-primary"
114
- ),
115
- "aria-pressed": selectedStatus === status,
116
- "data-testid": `runs-count-${status}`,
117
- children: tr(
118
- "fluidgrids.executions.parity.countStatus",
119
- "{{status}} {{count}}",
120
- { status: statusLabels[status], count }
121
- )
122
- },
123
- status
124
- ) : null
125
- )
126
- ] })
127
- }
128
- )
129
- ]
130
- }
131
- );
132
- }
133
- function ExecutionsListPage() {
134
- const tr = useTr();
135
- const navigate = useNavigate();
136
- const {
137
- viewMode,
138
- setViewMode,
139
- setSelectedExecution,
140
- selection,
141
- clearSelection,
142
- setStatusFilter,
143
- setWorkflowFilter,
144
- setWorkflowIdFilter,
145
- filter,
146
- autoRefresh,
147
- autoRefreshInterval
148
- } = useExecutionsStore();
149
- const [searchParams] = useSearchParams();
150
- const workflowKeyParam = searchParams.get("workflowKey") ?? "";
151
- const lastWorkflowKeyParam = useRef(null);
152
- if (lastWorkflowKeyParam.current !== workflowKeyParam) {
153
- lastWorkflowKeyParam.current = workflowKeyParam;
154
- if (useExecutionsStore.getState().filter.workflowKey !== workflowKeyParam) {
155
- setWorkflowFilter(workflowKeyParam);
156
- }
157
- }
158
- const parityEnabled = useDurableParityEnabled();
159
- const { executions, total, loading, error, refetch, input } = useExecutionsWithStore({ durableParity: parityEnabled });
160
- const statusCounts = useRunStatusCounts(input, parityEnabled);
161
- const refetchCounts = statusCounts.refetch;
162
- const {
163
- stats,
164
- loading: statsLoading,
165
- refetch: refetchStats
166
- } = useExecutionStats();
167
- const { workflows } = useWorkflowDefinitions({ limit: 100 });
168
- const {
169
- cancelExecution,
170
- pauseExecution,
171
- resumeExecution,
172
- retryExecution,
173
- retryExecutions
174
- } = useExecutionActions();
175
- useAutoRefresh(
176
- useCallback(() => {
177
- refetch();
178
- refetchStats();
179
- void refetchCounts();
180
- }, [refetch, refetchStats, refetchCounts]),
181
- autoRefresh,
182
- autoRefreshInterval
183
- );
184
- const executionStats = useMemo(() => {
185
- if (!stats) return null;
186
- return {
187
- total: stats.runsCountTotal,
188
- running: stats.runsRunningCount,
189
- completed: stats.runsCompletedCount,
190
- failed: stats.runsFailedCount,
191
- cancelled: stats.runsCancelledCount ?? 0,
192
- pending: stats.runsPendingCount,
193
- waiting: stats.runsWaitingCount ?? 0,
194
- successRate: stats.workflowSuccessRate,
195
- avgDuration: stats.avgWorkflowExecutionTimeSeconds
196
- };
197
- }, [stats]);
198
- const workflowOptions = useMemo(
199
- () => workflows.map((w) => ({
200
- workflowKey: w.workflowKey,
201
- name: w.name
202
- })),
203
- [workflows]
204
- );
205
- const workflowNames = useMemo(() => {
206
- const map = {};
207
- for (const w of workflows) map[w.workflowKey] = w.name;
208
- return map;
209
- }, [workflows]);
210
- const handleRowClick = (execution) => {
211
- setSelectedExecution(execution);
212
- navigate(`../runs/${execution.id}`);
213
- };
214
- const handleRetry = async (execution) => {
215
- const result = await retryExecution(execution);
216
- if (!result.ok) {
217
- toast.error(
218
- tr(
219
- "fluidgrids.executions.executionsList.retryFailed",
220
- "Could not start a new run"
221
- ),
222
- { description: result.message }
223
- );
224
- return;
225
- }
226
- toast.success(
227
- tr(
228
- "fluidgrids.executions.executionsList.retryStarted",
229
- "New run started"
230
- )
231
- );
232
- navigate(`../runs/${result.run.runId}`);
233
- };
234
- const handleAction = async (action, execution) => {
235
- switch (action) {
236
- case "cancel":
237
- await cancelExecution(execution.id);
238
- break;
239
- case "pause":
240
- await pauseExecution(execution.id);
241
- break;
242
- case "resume":
243
- await resumeExecution(execution.id);
244
- break;
245
- case "retry":
246
- await handleRetry(execution);
247
- break;
248
- case "view":
249
- navigate(`../runs/${execution.id}`);
250
- break;
251
- }
252
- refetch();
253
- };
254
- const handleFilterByStatus = (status) => {
255
- setStatusFilter(status);
256
- };
257
- const handleBulkRetry = async () => {
258
- if (selection.runIds.length === 0) return;
259
- const retried = await retryExecutions(selection.runIds.slice(0, 10));
260
- if (retried.length === 0) {
261
- toast.error(
262
- tr(
263
- "fluidgrids.executions.executionsList.bulkRetryFailed",
264
- "Could not retry the selected runs"
265
- )
266
- );
267
- return;
268
- }
269
- toast.success(
270
- tr(
271
- "fluidgrids.executions.executionsList.bulkRetryStarted",
272
- `${retried.length} new run${retried.length === 1 ? "" : "s"} started`
273
- )
274
- );
275
- clearSelection();
276
- refetch();
277
- };
278
- const handleBulkAction = async (action) => {
279
- if (selection.runIds.length === 0) return;
280
- const promises = selection.runIds.map((id) => {
281
- switch (action) {
282
- case "cancel":
283
- return cancelExecution(id);
284
- case "pause":
285
- return pauseExecution(id);
286
- case "resume":
287
- return resumeExecution(id);
288
- }
289
- });
290
- const results = await Promise.allSettled(promises);
291
- const failures = results.filter((r) => r.status === "rejected");
292
- if (failures.length > 0) {
293
- console.error(
294
- `Bulk action partially failed: ${failures.length}/${results.length} failed`
295
- );
296
- }
297
- clearSelection();
298
- refetch();
299
- };
300
- return /* @__PURE__ */ jsxs("div", { className: "p-4 sm:p-6 bg-background-primary min-h-screen", children: [
301
- /* @__PURE__ */ jsxs(
302
- "div",
303
- {
304
- className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6",
305
- "data-tour": "fluidgrids-runs-header",
306
- children: [
307
- /* @__PURE__ */ jsxs("div", { children: [
308
- /* @__PURE__ */ jsx("h1", { className: "text-2xl sm:text-3xl font-bold text-text-primary", children: tr("fluidgrids.executions.executionsList.title", "Executions") }),
309
- /* @__PURE__ */ jsx("p", { className: "text-text-secondary mt-1", children: tr(
310
- "fluidgrids.executions.executionsList.subtitle",
311
- "Monitor and manage your workflow runs"
312
- ) }),
313
- /* @__PURE__ */ jsx(FluidGridsDocsLink, { topic: "runs", className: "mt-1" })
314
- ] }),
315
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-3", children: [
316
- /* @__PURE__ */ jsxs("div", { className: "flex items-center bg-background-secondary rounded-lg border border-border-secondary p-1", children: [
317
- /* @__PURE__ */ jsx(
318
- "button",
319
- {
320
- onClick: () => setViewMode("table"),
321
- className: `p-2 rounded ${viewMode === "table" ? "bg-background-tertiary text-text-primary" : "text-text-secondary hover:text-text-primary"}`,
322
- title: tr(
323
- "fluidgrids.executions.executionsList.tableViewTooltip",
324
- "Table View"
325
- ),
326
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:table", width: 18 })
327
- }
328
- ),
329
- /* @__PURE__ */ jsx(
330
- "button",
331
- {
332
- onClick: () => setViewMode("cards"),
333
- className: `p-2 rounded ${viewMode === "cards" ? "bg-background-tertiary text-text-primary" : "text-text-secondary hover:text-text-primary"}`,
334
- title: tr(
335
- "fluidgrids.executions.executionsList.cardViewTooltip",
336
- "Card View"
337
- ),
338
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:view-grid", width: 18 })
339
- }
340
- ),
341
- /* @__PURE__ */ jsx(
342
- "button",
343
- {
344
- onClick: () => setViewMode("timeline"),
345
- className: `p-2 rounded ${viewMode === "timeline" ? "bg-background-tertiary text-text-primary" : "text-text-secondary hover:text-text-primary"}`,
346
- title: tr(
347
- "fluidgrids.executions.executionsList.timelineViewTooltip",
348
- "Timeline View"
349
- ),
350
- children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:timeline", width: 18 })
351
- }
352
- )
353
- ] }),
354
- /* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => navigate("../list"), children: [
355
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-left", className: "mr-2", width: 16 }),
356
- tr(
357
- "fluidgrids.executions.executionsList.backToWorkflows",
358
- "Back to Workflows"
359
- )
360
- ] })
361
- ] })
362
- ]
363
- }
364
- ),
365
- /* @__PURE__ */ jsx("div", { className: "mb-6", "data-tour": "fluidgrids-runs-stats", children: /* @__PURE__ */ jsx(
366
- ExecutionStats,
367
- {
368
- stats: executionStats,
369
- loading: statsLoading,
370
- onFilterByStatus: handleFilterByStatus
371
- }
372
- ) }),
373
- /* @__PURE__ */ jsx("div", { className: "mb-6", "data-tour": "fluidgrids-runs-filters", children: /* @__PURE__ */ jsx(ExecutionFilters, { workflows: workflowOptions, onRefresh: refetch }) }),
374
- parityEnabled && /* @__PURE__ */ jsx(
375
- RunsParityBar,
376
- {
377
- workflowId: filter.workflowId,
378
- onWorkflowIdChange: setWorkflowIdFilter,
379
- total: statusCounts.total,
380
- counts: statusCounts.counts,
381
- countsError: statusCounts.error,
382
- selectedStatus: filter.status,
383
- onSelectStatus: handleFilterByStatus
384
- }
385
- ),
386
- selection.runIds.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-4 p-3 bg-action-primary-bg/10 rounded-lg flex flex-wrap items-center gap-3", children: [
387
- /* @__PURE__ */ jsxs("span", { className: "text-sm text-text-primary", children: [
388
- selection.runIds.length,
389
- " ",
390
- selection.runIds.length > 1 ? tr(
391
- "fluidgrids.executions.executionsList.selectionCountPlural",
392
- "executions selected"
393
- ) : tr(
394
- "fluidgrids.executions.executionsList.selectionCountSingular",
395
- "execution selected"
396
- )
397
- ] }),
398
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
399
- /* @__PURE__ */ jsxs(
400
- Button,
401
- {
402
- "data-agent": "confirm",
403
- variant: "outline",
404
- size: "sm",
405
- onClick: () => void handleBulkRetry(),
406
- children: [
407
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:refresh", className: "mr-1", width: 14 }),
408
- tr(
409
- "fluidgrids.executions.executionsList.bulkRetryButton",
410
- "Retry selected"
411
- )
412
- ]
413
- }
414
- ),
415
- /* @__PURE__ */ jsxs(
416
- Button,
417
- {
418
- "data-agent": "confirm",
419
- variant: "outline",
420
- size: "sm",
421
- onClick: () => handleBulkAction("cancel"),
422
- children: [
423
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:stop", className: "mr-1", width: 14 }),
424
- tr(
425
- "fluidgrids.executions.executionsList.bulkCancelButton",
426
- "Cancel"
427
- )
428
- ]
429
- }
430
- ),
431
- /* @__PURE__ */ jsxs(
432
- Button,
433
- {
434
- "data-agent": "confirm",
435
- variant: "outline",
436
- size: "sm",
437
- onClick: () => handleBulkAction("pause"),
438
- children: [
439
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:pause", className: "mr-1", width: 14 }),
440
- tr(
441
- "fluidgrids.executions.executionsList.bulkPauseButton",
442
- "Pause"
443
- )
444
- ]
445
- }
446
- ),
447
- /* @__PURE__ */ jsxs(
448
- Button,
449
- {
450
- "data-agent": "confirm",
451
- variant: "outline",
452
- size: "sm",
453
- onClick: () => handleBulkAction("resume"),
454
- children: [
455
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:play", className: "mr-1", width: 14 }),
456
- tr(
457
- "fluidgrids.executions.executionsList.bulkResumeButton",
458
- "Resume"
459
- )
460
- ]
461
- }
462
- )
463
- ] }),
464
- /* @__PURE__ */ jsx(
465
- "button",
466
- {
467
- onClick: clearSelection,
468
- className: "ml-auto text-sm text-text-secondary hover:text-text-primary",
469
- children: tr(
470
- "fluidgrids.executions.executionsList.clearSelection",
471
- "Clear selection"
472
- )
473
- }
474
- )
475
- ] }),
476
- error && /* @__PURE__ */ jsxs("div", { className: "mb-6 p-4 bg-[var(--color-status-error-bg-subtle)] border border-[var(--color-status-error-border)] rounded-lg", children: [
477
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-[var(--color-status-error-text)]", children: [
478
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:alert-circle", width: 20 }),
479
- /* @__PURE__ */ jsx("span", { className: "font-medium", children: tr(
480
- "fluidgrids.executions.executionsList.loadErrorTitle",
481
- "Error loading executions"
482
- ) })
483
- ] }),
484
- /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-[var(--color-status-error-text)]", children: error.message }),
485
- /* @__PURE__ */ jsx(
486
- Button,
487
- {
488
- variant: "outline",
489
- size: "sm",
490
- onClick: refetch,
491
- className: "mt-3 border-[var(--color-status-error-border)] text-[var(--color-status-error-text)] hover:bg-[var(--color-status-error-bg-subtle)]",
492
- children: tr("fluidgrids.executions.executionsList.retryButton", "Retry")
493
- }
494
- )
495
- ] }),
496
- viewMode === "table" && /* @__PURE__ */ jsx(
497
- ExecutionTable,
498
- {
499
- workflowNames,
500
- executions,
501
- loading,
502
- onRowClick: handleRowClick,
503
- onAction: handleAction
504
- }
505
- ),
506
- viewMode === "cards" && /* @__PURE__ */ jsx(
507
- ExecutionCards,
508
- {
509
- workflowNames,
510
- executions,
511
- loading,
512
- onCardClick: handleRowClick,
513
- onAction: handleAction
514
- }
515
- ),
516
- viewMode === "timeline" && /* @__PURE__ */ jsx(
517
- ExecutionTimeline,
518
- {
519
- executions,
520
- loading,
521
- onItemClick: handleRowClick,
522
- onAction: handleAction
523
- }
524
- ),
525
- /* @__PURE__ */ jsx(Pagination, { totalItems: total })
526
- ] });
527
- }
528
-
529
- export { ExecutionsListPage };