@burdenoff/microfe-bigconsole 2026.1101.1 → 2026.1103.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.
- package/dist/bigconsole/components/datasink/DataSinkCard.js +62 -61
- package/dist/bigconsole/components/pipeline/PipelineRunHistory.d.ts +15 -0
- package/dist/bigconsole/components/pipeline/PipelineRunHistory.js +270 -0
- package/dist/bigconsole/hooks/usePipelineOperations.d.ts +2 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +111 -88
- package/dist/bigconsole/pages/DataSinksPage.js +309 -308
- package/dist/bigconsole/pages/PipelineBuilderPage.js +307 -306
- package/dist/bigconsole/pages/PipelineViewPage.js +201 -310
- package/dist/bigconsole/utils/dataSinkSetup.d.ts +15 -0
- package/dist/bigconsole/utils/dataSinkSetup.js +23 -0
- package/dist/bigconsole/utils/pipelineExecutionTimeline.d.ts +47 -0
- package/dist/bigconsole/utils/pipelineExecutionTimeline.js +87 -0
- package/dist/bigconsole/utils/pipelineStages.d.ts +41 -0
- package/dist/bigconsole/utils/pipelineStages.js +49 -0
- package/package.json +1 -1
|
@@ -2,76 +2,77 @@ import { SECTION_FOCUS_RING as e } from "../common/sectionStyles.js";
|
|
|
2
2
|
import "../common/index.js";
|
|
3
3
|
import { DataSinkStatusBadge as t } from "./DataSinkStatusBadge.js";
|
|
4
4
|
import { formatByteSize as n } from "../../utils/format.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
5
|
+
import { describeSetupGaps as r, getSetupGaps as i } from "../../utils/dataSinkSetup.js";
|
|
6
|
+
import { memo as a, useCallback as o } from "react";
|
|
7
|
+
import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
8
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
9
|
+
import { formatDistanceToNow as u } from "date-fns";
|
|
9
10
|
//#region src/bigconsole/components/datasink/DataSinkCard.tsx
|
|
10
|
-
var
|
|
11
|
-
let
|
|
12
|
-
t.stopPropagation(), u?.(e.id);
|
|
13
|
-
}, [e.id, u]), b = i((t) => {
|
|
14
|
-
t.stopPropagation(), d?.(e.id);
|
|
15
|
-
}, [e.id, d]), x = i((t) => {
|
|
11
|
+
var d = `inline-flex min-h-[var(--size-controlHeight-md)] items-center justify-center rounded-button px-3 py-1.5 text-xs font-medium motion-safe:transition-colors ${e}`, f = a(function({ dataSink: e, setupState: a, onView: f, onEdit: p, onRefresh: m, onExport: h, onDelete: g, onContinueSetup: _, canEdit: v = !0, canRefresh: y = !0, canDelete: b = !0 }) {
|
|
12
|
+
let x = o((t) => {
|
|
16
13
|
t.stopPropagation(), f?.(e.id);
|
|
17
|
-
}, [e.id, f]), S =
|
|
14
|
+
}, [e.id, f]), S = o((t) => {
|
|
18
15
|
t.stopPropagation(), p?.(e.id);
|
|
19
|
-
}, [e.id, p]), C =
|
|
16
|
+
}, [e.id, p]), C = o((t) => {
|
|
20
17
|
t.stopPropagation(), m?.(e.id);
|
|
21
|
-
}, [e.id, m]), w =
|
|
18
|
+
}, [e.id, m]), w = o((t) => {
|
|
22
19
|
t.stopPropagation(), h?.(e.id);
|
|
23
|
-
}, [e.id, h]),
|
|
24
|
-
|
|
20
|
+
}, [e.id, h]), T = o((t) => {
|
|
21
|
+
t.stopPropagation(), g?.(e.id);
|
|
22
|
+
}, [e.id, g]), E = o((t) => {
|
|
23
|
+
t.stopPropagation(), _?.(e.id);
|
|
24
|
+
}, [e.id, _]), { t: D } = s(), O = (a ?? e.setupState) === "completed", k = r(i(e), D), A = e.lastRefreshedAt ? u(new Date(e.lastRefreshedAt), { addSuffix: !0 }) : D("bigconsole.dataSinks.view.never", "Never");
|
|
25
|
+
return /* @__PURE__ */ l("article", {
|
|
25
26
|
className: "\n min-w-0\n cursor-pointer\n rounded-card\n border border-transparent\n bg-bg-sunken\n p-card-padding\n hover:border-[var(--color-action-primary-bg)]\n motion-safe:transition-colors\n ",
|
|
26
|
-
onClick:
|
|
27
|
+
onClick: x,
|
|
27
28
|
children: [
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ l("div", {
|
|
29
30
|
className: "mb-3 flex items-start justify-between gap-icon-gap",
|
|
30
|
-
children: [/* @__PURE__ */
|
|
31
|
+
children: [/* @__PURE__ */ l("div", {
|
|
31
32
|
className: "min-w-0 flex-1",
|
|
32
|
-
children: [/* @__PURE__ */
|
|
33
|
+
children: [/* @__PURE__ */ c("h3", {
|
|
33
34
|
className: "truncate text-sm font-semibold text-text-primary",
|
|
34
35
|
children: e.name || "Untitled data sink"
|
|
35
|
-
}), /* @__PURE__ */
|
|
36
|
+
}), /* @__PURE__ */ c("p", {
|
|
36
37
|
className: "mt-0.5 truncate font-mono text-xs text-text-secondary",
|
|
37
38
|
children: e.key
|
|
38
39
|
})]
|
|
39
|
-
}), /* @__PURE__ */
|
|
40
|
+
}), /* @__PURE__ */ c(t, {
|
|
40
41
|
status: e.status,
|
|
41
42
|
size: "sm"
|
|
42
43
|
})]
|
|
43
44
|
}),
|
|
44
|
-
e.description && /* @__PURE__ */
|
|
45
|
+
e.description && /* @__PURE__ */ c("p", {
|
|
45
46
|
className: "mb-3 line-clamp-2 text-xs text-text-secondary",
|
|
46
47
|
children: e.description
|
|
47
48
|
}),
|
|
48
|
-
/* @__PURE__ */
|
|
49
|
+
/* @__PURE__ */ l("div", {
|
|
49
50
|
className: "mb-3 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary",
|
|
50
51
|
children: [
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
+
/* @__PURE__ */ l("span", {
|
|
52
53
|
className: "flex items-center gap-1",
|
|
53
|
-
children: [/* @__PURE__ */
|
|
54
|
+
children: [/* @__PURE__ */ c("svg", {
|
|
54
55
|
className: "w-3.5 h-3.5",
|
|
55
56
|
fill: "none",
|
|
56
57
|
stroke: "currentColor",
|
|
57
58
|
viewBox: "0 0 24 24",
|
|
58
|
-
children: /* @__PURE__ */
|
|
59
|
+
children: /* @__PURE__ */ c("path", {
|
|
59
60
|
strokeLinecap: "round",
|
|
60
61
|
strokeLinejoin: "round",
|
|
61
62
|
strokeWidth: 2,
|
|
62
63
|
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
63
64
|
})
|
|
64
|
-
}),
|
|
65
|
+
}), A]
|
|
65
66
|
}),
|
|
66
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ l("span", {
|
|
67
68
|
className: "flex items-center gap-1",
|
|
68
69
|
title: "Stored payload size",
|
|
69
|
-
children: [/* @__PURE__ */
|
|
70
|
+
children: [/* @__PURE__ */ c("svg", {
|
|
70
71
|
className: "w-3.5 h-3.5",
|
|
71
72
|
fill: "none",
|
|
72
73
|
stroke: "currentColor",
|
|
73
74
|
viewBox: "0 0 24 24",
|
|
74
|
-
children: /* @__PURE__ */
|
|
75
|
+
children: /* @__PURE__ */ c("path", {
|
|
75
76
|
strokeLinecap: "round",
|
|
76
77
|
strokeLinejoin: "round",
|
|
77
78
|
strokeWidth: 2,
|
|
@@ -79,15 +80,15 @@ var l = `inline-flex min-h-[var(--size-controlHeight-md)] items-center justify-c
|
|
|
79
80
|
})
|
|
80
81
|
}), n(e.sizeBytes)]
|
|
81
82
|
}),
|
|
82
|
-
e.linkedWorkflowCount !== void 0 && e.linkedWorkflowCount > 0 && /* @__PURE__ */
|
|
83
|
+
e.linkedWorkflowCount !== void 0 && e.linkedWorkflowCount > 0 && /* @__PURE__ */ l("span", {
|
|
83
84
|
className: "flex items-center gap-1",
|
|
84
85
|
children: [
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
+
/* @__PURE__ */ c("svg", {
|
|
86
87
|
className: "w-3.5 h-3.5",
|
|
87
88
|
fill: "none",
|
|
88
89
|
stroke: "currentColor",
|
|
89
90
|
viewBox: "0 0 24 24",
|
|
90
|
-
children: /* @__PURE__ */
|
|
91
|
+
children: /* @__PURE__ */ c("path", {
|
|
91
92
|
strokeLinecap: "round",
|
|
92
93
|
strokeLinejoin: "round",
|
|
93
94
|
strokeWidth: 2,
|
|
@@ -101,50 +102,50 @@ var l = `inline-flex min-h-[var(--size-controlHeight-md)] items-center justify-c
|
|
|
101
102
|
})
|
|
102
103
|
]
|
|
103
104
|
}),
|
|
104
|
-
!
|
|
105
|
+
!O && /* @__PURE__ */ l("div", {
|
|
105
106
|
className: "mb-3 flex items-center justify-between gap-icon-gap rounded-input border border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bgSubtle)] p-2",
|
|
106
|
-
children: [/* @__PURE__ */
|
|
107
|
+
children: [/* @__PURE__ */ c("span", {
|
|
107
108
|
className: "text-xs text-[var(--color-status-warning-text)]",
|
|
108
|
-
children:
|
|
109
|
-
}), /* @__PURE__ */
|
|
109
|
+
children: k
|
|
110
|
+
}), v && _ && /* @__PURE__ */ c("button", {
|
|
110
111
|
type: "button",
|
|
111
|
-
onClick:
|
|
112
|
+
onClick: E,
|
|
112
113
|
className: "rounded-button px-1 text-xs font-medium text-text-link hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
113
|
-
children: "Continue"
|
|
114
|
+
children: D("bigconsole.dataSinks.setup.continue", "Continue")
|
|
114
115
|
})]
|
|
115
116
|
}),
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
+
/* @__PURE__ */ l("div", {
|
|
117
118
|
className: "flex flex-wrap items-center gap-2 border-t border-[var(--color-border-subtle)] pt-2",
|
|
118
119
|
children: [
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ c("button", {
|
|
120
121
|
type: "button",
|
|
121
|
-
onClick:
|
|
122
|
-
className: `${
|
|
123
|
-
children:
|
|
122
|
+
onClick: x,
|
|
123
|
+
className: `${d} flex-1 bg-bg-surface text-text-primary hover:bg-bg-elevated`,
|
|
124
|
+
children: D("bigconsole.dataSinks.actions.view", "View")
|
|
124
125
|
}),
|
|
125
|
-
|
|
126
|
+
v && /* @__PURE__ */ c("button", {
|
|
126
127
|
type: "button",
|
|
127
|
-
onClick:
|
|
128
|
-
className: `${
|
|
129
|
-
children:
|
|
128
|
+
onClick: S,
|
|
129
|
+
className: `${d} text-text-secondary hover:bg-bg-surface hover:text-text-primary`,
|
|
130
|
+
children: D("bigconsole.dataSinks.actions.edit", "Edit")
|
|
130
131
|
}),
|
|
131
|
-
|
|
132
|
+
y && /* @__PURE__ */ c("button", {
|
|
132
133
|
type: "button",
|
|
133
|
-
onClick:
|
|
134
|
-
className: `${
|
|
135
|
-
children:
|
|
134
|
+
onClick: C,
|
|
135
|
+
className: `${d} text-text-secondary hover:bg-bg-surface hover:text-text-primary`,
|
|
136
|
+
children: D("bigconsole.dataSinks.actions.refresh", "Refresh")
|
|
136
137
|
}),
|
|
137
|
-
|
|
138
|
+
h && /* @__PURE__ */ c("button", {
|
|
138
139
|
type: "button",
|
|
139
|
-
onClick:
|
|
140
|
-
className: `${
|
|
141
|
-
children:
|
|
140
|
+
onClick: w,
|
|
141
|
+
className: `${d} text-text-secondary hover:bg-bg-surface hover:text-text-primary`,
|
|
142
|
+
children: D("bigconsole.dataSinks.actions.export", "Export")
|
|
142
143
|
}),
|
|
143
|
-
|
|
144
|
+
b && /* @__PURE__ */ c("button", {
|
|
144
145
|
type: "button",
|
|
145
|
-
onClick:
|
|
146
|
-
className: `${
|
|
147
|
-
children:
|
|
146
|
+
onClick: T,
|
|
147
|
+
className: `${d} text-status-error-text hover:bg-[var(--color-status-error-bgSubtle)]`,
|
|
148
|
+
children: D("bigconsole.dataSinks.actions.delete", "Delete")
|
|
148
149
|
})
|
|
149
150
|
]
|
|
150
151
|
})
|
|
@@ -152,4 +153,4 @@ var l = `inline-flex min-h-[var(--size-controlHeight-md)] items-center justify-c
|
|
|
152
153
|
});
|
|
153
154
|
});
|
|
154
155
|
//#endregion
|
|
155
|
-
export {
|
|
156
|
+
export { f as DataSinkCard, f as default };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PipelineExecution, PipelineStage } from '../../types';
|
|
2
|
+
export interface PipelineRunHistoryListProps {
|
|
3
|
+
/** Runs of this pipeline, newest first. */
|
|
4
|
+
executions: readonly PipelineExecution[];
|
|
5
|
+
selectedId: string | null;
|
|
6
|
+
onSelect: (execution: PipelineExecution) => void;
|
|
7
|
+
currentActorId: string | null | undefined;
|
|
8
|
+
}
|
|
9
|
+
export declare const PipelineRunHistoryList: import('react').NamedExoticComponent<PipelineRunHistoryListProps>;
|
|
10
|
+
export interface PipelineStageTimelineProps {
|
|
11
|
+
execution: PipelineExecution;
|
|
12
|
+
stages: readonly PipelineStage[] | null | undefined;
|
|
13
|
+
currentActorId: string | null | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare const PipelineStageTimeline: import('react').NamedExoticComponent<PipelineStageTimelineProps>;
|
|
@@ -0,0 +1,270 @@
|
|
|
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 { buildStageTimeline as n, formatDurationMs as r, runDurationMs as i, runStatusTone as a, triggeredByLabel as o } from "../../utils/pipelineExecutionTimeline.js";
|
|
5
|
+
import { memo as s, useMemo as c } from "react";
|
|
6
|
+
import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
8
|
+
//#region src/bigconsole/components/pipeline/PipelineRunHistory.tsx
|
|
9
|
+
var f = {
|
|
10
|
+
success: "bg-[var(--color-status-success-bgSubtle)] text-[var(--color-status-success-text)] border-[var(--color-status-success-border)]",
|
|
11
|
+
danger: "bg-[var(--color-status-error-bgSubtle)] text-[var(--color-status-error-text)] border-[var(--color-status-error-border)]",
|
|
12
|
+
warning: "bg-[var(--color-status-warning-bgSubtle)] text-[var(--color-status-warning-text)] border-[var(--color-status-warning-border)]",
|
|
13
|
+
info: "bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)] border-[var(--color-status-info-border)]",
|
|
14
|
+
neutral: "bg-bg-surface text-text-secondary border-[var(--color-border-subtle)]"
|
|
15
|
+
}, p = {
|
|
16
|
+
success: "bg-[var(--color-status-success-text)]",
|
|
17
|
+
danger: "bg-[var(--color-status-error-text)]",
|
|
18
|
+
warning: "bg-[var(--color-status-warning-text)]",
|
|
19
|
+
info: "bg-[var(--color-status-info-text)]",
|
|
20
|
+
neutral: "bg-[var(--color-border-strong)]"
|
|
21
|
+
}, m = "rounded-button bg-bg-surface px-1.5 py-0.5 font-mono break-all text-text-primary";
|
|
22
|
+
function h({ tone: e, label: t }) {
|
|
23
|
+
return /* @__PURE__ */ u("span", {
|
|
24
|
+
className: `inline-flex items-center whitespace-nowrap rounded-pill border px-2 py-0.5 text-xs font-medium ${f[e]}`,
|
|
25
|
+
children: t
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function g() {
|
|
29
|
+
let { t: e } = l();
|
|
30
|
+
return (t) => {
|
|
31
|
+
switch (t) {
|
|
32
|
+
case "completed": return e("bigconsole.pipelines.execution.status.completed", "Completed");
|
|
33
|
+
case "failed": return e("bigconsole.pipelines.execution.status.failed", "Failed");
|
|
34
|
+
case "running": return e("bigconsole.pipelines.execution.status.running", "Running");
|
|
35
|
+
case "pending": return e("bigconsole.pipelines.execution.status.pending", "Pending");
|
|
36
|
+
case "success": return e("bigconsole.pipelines.execution.status.success", "Success");
|
|
37
|
+
case "skipped": return e("bigconsole.pipelines.execution.status.skipped", "Skipped");
|
|
38
|
+
default: return t;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function _(e) {
|
|
43
|
+
if (!e) return "—";
|
|
44
|
+
let t = new Date(e);
|
|
45
|
+
return Number.isNaN(t.getTime()) ? "—" : t.toLocaleString();
|
|
46
|
+
}
|
|
47
|
+
var v = s(function({ executions: n, selectedId: s, onSelect: c, currentActorId: f }) {
|
|
48
|
+
let { t: p } = l(), m = g();
|
|
49
|
+
return /* @__PURE__ */ u(t, {
|
|
50
|
+
headingLevel: 2,
|
|
51
|
+
title: p("bigconsole.pipelines.execution.historyHeading", "Previous runs"),
|
|
52
|
+
meta: n.length > 0 ? /* @__PURE__ */ u("span", {
|
|
53
|
+
className: "rounded-pill bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary",
|
|
54
|
+
children: n.length
|
|
55
|
+
}) : null,
|
|
56
|
+
"data-testid": "pipeline-execution-history",
|
|
57
|
+
children: n.length === 0 ? /* @__PURE__ */ u("p", {
|
|
58
|
+
className: "text-sm text-text-secondary",
|
|
59
|
+
children: p("bigconsole.pipelines.execution.noHistory", "No execution history yet. Test this pipeline with sample input to inspect its stages.")
|
|
60
|
+
}) : /* @__PURE__ */ u("ol", {
|
|
61
|
+
className: "flex flex-col gap-control-gap",
|
|
62
|
+
"aria-label": p("bigconsole.pipelines.execution.runList", "Runs"),
|
|
63
|
+
children: n.map((t) => {
|
|
64
|
+
let n = t.id === s, l = o(t.executedBy, f);
|
|
65
|
+
return /* @__PURE__ */ u("li", { children: /* @__PURE__ */ d("button", {
|
|
66
|
+
type: "button",
|
|
67
|
+
"aria-pressed": n,
|
|
68
|
+
onClick: () => c(t),
|
|
69
|
+
"data-testid": "pipeline-execution-run",
|
|
70
|
+
"data-status": t.status,
|
|
71
|
+
className: `flex w-full min-w-0 flex-col gap-1 rounded-button border p-3 text-left ${e} ${n ? "border-[var(--color-border-strong)] bg-bg-sunken" : "border-[var(--color-border-subtle)] bg-bg-surface"}`,
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ d("span", {
|
|
74
|
+
className: "flex flex-wrap items-center justify-between gap-2 text-sm font-medium text-text-primary",
|
|
75
|
+
children: [/* @__PURE__ */ u(h, {
|
|
76
|
+
tone: a(t.status),
|
|
77
|
+
label: m(t.status)
|
|
78
|
+
}), /* @__PURE__ */ u("span", { children: r(i(t)) })]
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ u("span", {
|
|
81
|
+
className: "break-words text-xs text-text-secondary",
|
|
82
|
+
children: _(t.startedAt ?? t.createdAt)
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ d("span", {
|
|
85
|
+
className: "flex flex-wrap justify-between gap-2 text-xs text-text-muted",
|
|
86
|
+
children: [/* @__PURE__ */ d("span", { children: [
|
|
87
|
+
p("bigconsole.pipelines.execution.triggeredBy", "By"),
|
|
88
|
+
" ",
|
|
89
|
+
/* @__PURE__ */ u("span", {
|
|
90
|
+
className: "font-mono",
|
|
91
|
+
title: t.executedBy,
|
|
92
|
+
children: l ?? p("bigconsole.pipelines.execution.triggeredByYou", "you")
|
|
93
|
+
})
|
|
94
|
+
] }), /* @__PURE__ */ u("span", { children: p("bigconsole.pipelines.execution.versionShort", "v{{version}}", { version: t.pipelineVersion }) })]
|
|
95
|
+
})
|
|
96
|
+
]
|
|
97
|
+
}) }, t.id);
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
}), y = s(function({ execution: e, stages: s, currentActorId: f }) {
|
|
102
|
+
let { t: v } = l(), y = g(), b = c(() => n(e, s), [e, s]), x = o(e.executedBy, f);
|
|
103
|
+
return /* @__PURE__ */ u(t, {
|
|
104
|
+
emphasis: "primary",
|
|
105
|
+
headingLevel: 2,
|
|
106
|
+
title: v("bigconsole.pipelines.execution.timelineHeading", "Stage timeline"),
|
|
107
|
+
meta: /* @__PURE__ */ u(h, {
|
|
108
|
+
tone: a(e.status),
|
|
109
|
+
label: y(e.status)
|
|
110
|
+
}),
|
|
111
|
+
"data-testid": "pipeline-stage-timeline",
|
|
112
|
+
children: /* @__PURE__ */ d("div", {
|
|
113
|
+
className: "flex flex-col gap-form-gap",
|
|
114
|
+
children: [
|
|
115
|
+
/* @__PURE__ */ d("dl", {
|
|
116
|
+
className: "grid grid-cols-2 gap-form-gap sm:grid-cols-4",
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ d("div", {
|
|
119
|
+
className: "min-w-0",
|
|
120
|
+
children: [/* @__PURE__ */ u("dt", {
|
|
121
|
+
className: "text-xs text-text-muted",
|
|
122
|
+
children: v("bigconsole.pipelines.execution.totalDuration", "Total duration")
|
|
123
|
+
}), /* @__PURE__ */ u("dd", {
|
|
124
|
+
className: "text-text-primary",
|
|
125
|
+
"data-testid": "pipeline-run-duration",
|
|
126
|
+
children: r(i(e))
|
|
127
|
+
})]
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ d("div", {
|
|
130
|
+
className: "min-w-0",
|
|
131
|
+
children: [/* @__PURE__ */ u("dt", {
|
|
132
|
+
className: "text-xs text-text-muted",
|
|
133
|
+
children: v("bigconsole.pipelines.execution.started", "Started")
|
|
134
|
+
}), /* @__PURE__ */ u("dd", {
|
|
135
|
+
className: "break-words text-text-primary",
|
|
136
|
+
children: _(e.startedAt)
|
|
137
|
+
})]
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ d("div", {
|
|
140
|
+
className: "min-w-0",
|
|
141
|
+
children: [/* @__PURE__ */ u("dt", {
|
|
142
|
+
className: "text-xs text-text-muted",
|
|
143
|
+
children: v("bigconsole.pipelines.execution.finished", "Finished")
|
|
144
|
+
}), /* @__PURE__ */ u("dd", {
|
|
145
|
+
className: "break-words text-text-primary",
|
|
146
|
+
children: _(e.completedAt)
|
|
147
|
+
})]
|
|
148
|
+
}),
|
|
149
|
+
/* @__PURE__ */ d("div", {
|
|
150
|
+
className: "min-w-0",
|
|
151
|
+
children: [/* @__PURE__ */ u("dt", {
|
|
152
|
+
className: "text-xs text-text-muted",
|
|
153
|
+
children: v("bigconsole.pipelines.execution.triggeredByHeading", "Triggered by")
|
|
154
|
+
}), /* @__PURE__ */ u("dd", {
|
|
155
|
+
className: "break-all font-mono text-text-primary",
|
|
156
|
+
title: e.executedBy,
|
|
157
|
+
children: x ?? v("bigconsole.pipelines.execution.triggeredByYou", "you")
|
|
158
|
+
})]
|
|
159
|
+
})
|
|
160
|
+
]
|
|
161
|
+
}),
|
|
162
|
+
/* @__PURE__ */ u("p", {
|
|
163
|
+
className: "text-xs text-text-secondary",
|
|
164
|
+
"data-testid": "pipeline-stage-counts",
|
|
165
|
+
children: v("bigconsole.pipelines.execution.stageCounts", "{{success}} succeeded · {{skipped}} skipped · {{failed}} failed", b.counts)
|
|
166
|
+
}),
|
|
167
|
+
b.rows.length === 0 ? /* @__PURE__ */ u("p", {
|
|
168
|
+
className: "text-sm text-text-secondary",
|
|
169
|
+
children: v("bigconsole.pipelines.execution.noStageResults", "This run recorded no stage results.")
|
|
170
|
+
}) : /* @__PURE__ */ u("ol", {
|
|
171
|
+
className: "flex flex-col gap-control-gap",
|
|
172
|
+
children: b.rows.map((e) => /* @__PURE__ */ d("li", {
|
|
173
|
+
"data-testid": "pipeline-timeline-stage",
|
|
174
|
+
"data-status": e.status,
|
|
175
|
+
className: "min-w-0 rounded-card border border-[var(--color-border-subtle)] bg-bg-sunken p-3",
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ d("div", {
|
|
178
|
+
className: "flex flex-wrap items-center justify-between gap-control-gap",
|
|
179
|
+
children: [/* @__PURE__ */ d("h3", {
|
|
180
|
+
className: "min-w-0 break-words text-sm font-medium text-text-primary",
|
|
181
|
+
children: [
|
|
182
|
+
e.step,
|
|
183
|
+
". ",
|
|
184
|
+
e.name
|
|
185
|
+
]
|
|
186
|
+
}), /* @__PURE__ */ d("span", {
|
|
187
|
+
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
188
|
+
children: [/* @__PURE__ */ u(h, {
|
|
189
|
+
tone: e.tone,
|
|
190
|
+
label: y(e.status)
|
|
191
|
+
}), /* @__PURE__ */ u("span", { children: r(e.durationMs) })]
|
|
192
|
+
})]
|
|
193
|
+
}),
|
|
194
|
+
/* @__PURE__ */ u("div", {
|
|
195
|
+
className: "relative mt-2 h-2 w-full overflow-hidden rounded-pill bg-bg-surface",
|
|
196
|
+
role: "img",
|
|
197
|
+
"aria-label": v("bigconsole.pipelines.execution.barLabel", "{{name}}: {{duration}}, {{share}}% of stage time", {
|
|
198
|
+
name: e.name,
|
|
199
|
+
duration: r(e.durationMs),
|
|
200
|
+
share: Math.round(e.widthPercent)
|
|
201
|
+
}),
|
|
202
|
+
children: /* @__PURE__ */ u("span", {
|
|
203
|
+
className: `absolute inset-y-0 rounded-pill ${p[e.tone]}`,
|
|
204
|
+
style: {
|
|
205
|
+
left: `${e.offsetPercent}%`,
|
|
206
|
+
width: `${e.widthPercent}%`
|
|
207
|
+
}
|
|
208
|
+
})
|
|
209
|
+
}),
|
|
210
|
+
(e.inputKey || e.outputKey) && /* @__PURE__ */ d("div", {
|
|
211
|
+
className: "mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-text-secondary",
|
|
212
|
+
children: [
|
|
213
|
+
/* @__PURE__ */ u("span", {
|
|
214
|
+
className: "text-text-muted",
|
|
215
|
+
children: v("bigconsole.pipelines.execution.reads", "Reads")
|
|
216
|
+
}),
|
|
217
|
+
/* @__PURE__ */ u("code", {
|
|
218
|
+
className: m,
|
|
219
|
+
children: e.inputKey ?? "—"
|
|
220
|
+
}),
|
|
221
|
+
/* @__PURE__ */ u("span", {
|
|
222
|
+
"aria-hidden": "true",
|
|
223
|
+
children: "→"
|
|
224
|
+
}),
|
|
225
|
+
/* @__PURE__ */ u("span", {
|
|
226
|
+
className: "text-text-muted",
|
|
227
|
+
children: v("bigconsole.pipelines.execution.writes", "writes")
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ u("code", {
|
|
230
|
+
className: m,
|
|
231
|
+
children: e.outputKey ?? "—"
|
|
232
|
+
})
|
|
233
|
+
]
|
|
234
|
+
}),
|
|
235
|
+
e.error && /* @__PURE__ */ u("p", {
|
|
236
|
+
className: "mt-2 break-words text-sm text-status-error-text",
|
|
237
|
+
"data-testid": "pipeline-timeline-error",
|
|
238
|
+
children: e.error
|
|
239
|
+
}),
|
|
240
|
+
e.hasOutput && /* @__PURE__ */ d("details", {
|
|
241
|
+
className: "mt-2",
|
|
242
|
+
children: [/* @__PURE__ */ u("summary", {
|
|
243
|
+
className: "cursor-pointer rounded-button text-sm text-text-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
244
|
+
children: v("bigconsole.pipelines.execution.stageOutput", "Stage output")
|
|
245
|
+
}), /* @__PURE__ */ u("pre", {
|
|
246
|
+
className: "mt-2 max-h-48 overflow-auto rounded-input bg-bg-canvas p-3 text-xs text-text-primary",
|
|
247
|
+
children: JSON.stringify(e.output, null, 2)
|
|
248
|
+
})]
|
|
249
|
+
})
|
|
250
|
+
]
|
|
251
|
+
}, e.id))
|
|
252
|
+
}),
|
|
253
|
+
e.error && /* @__PURE__ */ u("p", {
|
|
254
|
+
role: "alert",
|
|
255
|
+
className: "break-words text-sm text-status-error-text",
|
|
256
|
+
children: e.error
|
|
257
|
+
}),
|
|
258
|
+
e.outputData !== null && e.outputData !== void 0 && /* @__PURE__ */ d("details", { children: [/* @__PURE__ */ u("summary", {
|
|
259
|
+
className: "cursor-pointer rounded-button text-sm text-text-secondary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
260
|
+
children: v("bigconsole.pipelines.execution.runOutput", "Run output")
|
|
261
|
+
}), /* @__PURE__ */ u("pre", {
|
|
262
|
+
className: "mt-2 max-h-64 overflow-auto rounded-input bg-bg-canvas p-3 text-xs text-text-primary",
|
|
263
|
+
children: JSON.stringify(e.outputData, null, 2)
|
|
264
|
+
})] })
|
|
265
|
+
]
|
|
266
|
+
})
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
//#endregion
|
|
270
|
+
export { v as PipelineRunHistoryList, y as PipelineStageTimeline };
|
|
@@ -18,7 +18,8 @@ interface UpdatePipelineInput {
|
|
|
18
18
|
name?: string;
|
|
19
19
|
description?: string;
|
|
20
20
|
status?: PipelineStatus;
|
|
21
|
-
|
|
21
|
+
/** Full replacement of the stage list, in order (the service replaces stages wholesale). */
|
|
22
|
+
stages?: UpdatePipelineStageInput[];
|
|
22
23
|
}
|
|
23
24
|
interface CreatePipelineStageInput {
|
|
24
25
|
parserId: string;
|