@burdenoff/microfe-bigconsole 2026.1101.1 → 2026.1102.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/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/PipelineBuilderPage.js +307 -306
- package/dist/bigconsole/pages/PipelineViewPage.js +201 -310
- 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
|
@@ -9,82 +9,83 @@ import { BIGCONSOLE_PERMISSIONS as a } from "../../constants/permissions.js";
|
|
|
9
9
|
import { isDirty as te } from "../utils/formDirty.js";
|
|
10
10
|
import { PipelineScopePicker as ne } from "../components/pipeline/PipelineScopePicker.js";
|
|
11
11
|
import { PipelineStatusBadge as re } from "../components/pipeline/PipelineStatusBadge.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
12
|
+
import { formToStageInputs as ie, isStageFormComplete as o, stagesToForm as ae } from "../utils/pipelineStages.js";
|
|
13
|
+
import { memo as s, useCallback as c, useEffect as oe, useId as se, useMemo as l, useState as u } from "react";
|
|
14
|
+
import { useParams as ce, useSearchParams as le } from "react-router";
|
|
15
|
+
import { AccessDenied as ue } from "@burdenoff/fe-libs/shared/components";
|
|
16
|
+
import { usePermissions as de } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
17
|
+
import { Button as d, IllustratedEmptyState as fe, PagePurpose as pe, Spinner as me } from "@burdenoff/fe-libs/ui";
|
|
18
|
+
import { useUnsavedChanges as he } from "@burdenoff/fe-libs/shared/hooks";
|
|
19
|
+
import { useI18n as ge } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
20
|
+
import { Fragment as _e, jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
20
21
|
//#region src/bigconsole/pages/PipelineBuilderPage.tsx
|
|
21
|
-
var
|
|
22
|
+
var m = "min-h-[var(--size-controlHeight-md)]", h = "mb-1 block text-sm font-medium text-text-primary", ve = "mt-1 text-xs text-text-secondary", ye = "mb-1 text-xs font-semibold uppercase tracking-wide text-text-muted", g = `w-full min-w-0 rounded-input border border-[var(--color-border-subtle)] bg-bg-canvas px-3 py-2 text-sm text-text-primary ${t}`, _ = `${g} font-mono`, v = `inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors disabled:opacity-30 ${t}`, y = `${v} hover:bg-bg-surface hover:text-text-primary`, be = `${v} hover:bg-[var(--color-status-error-bgSubtle)] hover:text-status-error-text`, xe = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
22
23
|
className: e,
|
|
23
24
|
fill: "none",
|
|
24
25
|
stroke: "currentColor",
|
|
25
26
|
viewBox: "0 0 24 24",
|
|
26
|
-
children: /* @__PURE__ */
|
|
27
|
+
children: /* @__PURE__ */ f("path", {
|
|
27
28
|
strokeLinecap: "round",
|
|
28
29
|
strokeLinejoin: "round",
|
|
29
30
|
strokeWidth: 2,
|
|
30
31
|
d: "M10 19l-7-7m0 0l7-7m-7 7h18"
|
|
31
32
|
})
|
|
32
|
-
}), b = ({ className: e }) => /* @__PURE__ */
|
|
33
|
+
}), b = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
33
34
|
className: e,
|
|
34
35
|
fill: "none",
|
|
35
36
|
stroke: "currentColor",
|
|
36
37
|
viewBox: "0 0 24 24",
|
|
37
|
-
children: /* @__PURE__ */
|
|
38
|
+
children: /* @__PURE__ */ f("path", {
|
|
38
39
|
strokeLinecap: "round",
|
|
39
40
|
strokeLinejoin: "round",
|
|
40
41
|
strokeWidth: 2,
|
|
41
42
|
d: "M12 4v16m8-8H4"
|
|
42
43
|
})
|
|
43
|
-
}),
|
|
44
|
+
}), Se = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
44
45
|
className: e,
|
|
45
46
|
fill: "none",
|
|
46
47
|
stroke: "currentColor",
|
|
47
48
|
viewBox: "0 0 24 24",
|
|
48
|
-
children: /* @__PURE__ */
|
|
49
|
+
children: /* @__PURE__ */ f("path", {
|
|
49
50
|
strokeLinecap: "round",
|
|
50
51
|
strokeLinejoin: "round",
|
|
51
52
|
strokeWidth: 2,
|
|
52
53
|
d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
|
|
53
54
|
})
|
|
54
|
-
}),
|
|
55
|
+
}), Ce = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
55
56
|
className: e,
|
|
56
57
|
fill: "none",
|
|
57
58
|
stroke: "currentColor",
|
|
58
59
|
viewBox: "0 0 24 24",
|
|
59
|
-
children: /* @__PURE__ */
|
|
60
|
+
children: /* @__PURE__ */ f("path", {
|
|
60
61
|
strokeLinecap: "round",
|
|
61
62
|
strokeLinejoin: "round",
|
|
62
63
|
strokeWidth: 2,
|
|
63
64
|
d: "M5 15l7-7 7 7"
|
|
64
65
|
})
|
|
65
|
-
}),
|
|
66
|
+
}), we = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
66
67
|
className: e,
|
|
67
68
|
fill: "none",
|
|
68
69
|
stroke: "currentColor",
|
|
69
70
|
viewBox: "0 0 24 24",
|
|
70
|
-
children: /* @__PURE__ */
|
|
71
|
+
children: /* @__PURE__ */ f("path", {
|
|
71
72
|
strokeLinecap: "round",
|
|
72
73
|
strokeLinejoin: "round",
|
|
73
74
|
strokeWidth: 2,
|
|
74
75
|
d: "M19 9l-7 7-7-7"
|
|
75
76
|
})
|
|
76
|
-
}), x = ({ className: e }) => /* @__PURE__ */
|
|
77
|
+
}), x = ({ className: e }) => /* @__PURE__ */ f("svg", {
|
|
77
78
|
className: e,
|
|
78
79
|
fill: "none",
|
|
79
80
|
stroke: "currentColor",
|
|
80
81
|
viewBox: "0 0 24 24",
|
|
81
|
-
children: /* @__PURE__ */
|
|
82
|
+
children: /* @__PURE__ */ f("path", {
|
|
82
83
|
strokeLinecap: "round",
|
|
83
84
|
strokeLinejoin: "round",
|
|
84
85
|
strokeWidth: 2,
|
|
85
86
|
d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
86
87
|
})
|
|
87
|
-
}),
|
|
88
|
+
}), Te = [
|
|
88
89
|
{
|
|
89
90
|
value: "draft",
|
|
90
91
|
label: "Draft"
|
|
@@ -113,7 +114,7 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
113
114
|
label: "Fallback",
|
|
114
115
|
description: "Use fallback value on error"
|
|
115
116
|
}
|
|
116
|
-
],
|
|
117
|
+
], Ee = {
|
|
117
118
|
parserId: "",
|
|
118
119
|
parserName: "",
|
|
119
120
|
parserType: null,
|
|
@@ -122,145 +123,142 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
122
123
|
enabled: !0,
|
|
123
124
|
onError: "fail",
|
|
124
125
|
fallbackValue: "",
|
|
125
|
-
description: ""
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
126
|
+
description: "",
|
|
127
|
+
expression: ""
|
|
128
|
+
}, C = s(function() {
|
|
129
|
+
let { t: s } = ge(), { pipelineId: v } = ce(), C = e(), w = !!v && v !== "new", [T, De] = le(), [E, Oe] = u(null), D = w ? E ?? "default" : T.get("consoleId") || "default", O = se(), { hasPermission: k, isLoading: ke } = de(), Ae = k(a.PIPELINE_READ), je = k(a.PIPELINE_CREATE), Me = k(a.PIPELINE_UPDATE), A = w ? Me : je, [j, M] = u(""), [N, P] = u(""), [F, I] = u("draft"), [L, R] = u([]), [z, Ne] = u(1), [B, V] = u(!1), [Pe, H] = u(null), [U, W] = u(w ? null : {
|
|
130
|
+
owner: null,
|
|
131
|
+
values: [
|
|
132
|
+
"",
|
|
133
|
+
"",
|
|
134
|
+
"draft",
|
|
135
|
+
[],
|
|
136
|
+
1
|
|
137
|
+
]
|
|
138
|
+
}), G = U && (!w || U.owner === v) ? U.values : null;
|
|
139
|
+
he({
|
|
135
140
|
id: "pipeline-editor",
|
|
136
|
-
label:
|
|
141
|
+
label: s("bigconsole.assistant.unsaved.pipelineEditor", "the pipeline editor"),
|
|
137
142
|
dirty: te([
|
|
138
143
|
j,
|
|
139
144
|
N,
|
|
140
145
|
F,
|
|
141
146
|
L,
|
|
142
147
|
z
|
|
143
|
-
],
|
|
148
|
+
], G)
|
|
144
149
|
});
|
|
145
|
-
let { loading:
|
|
150
|
+
let { loading: Fe, error: K, fetchPipeline: q, createPipeline: J, updatePipeline: Y } = ee({
|
|
146
151
|
consoleId: D,
|
|
147
152
|
skipFetch: !0
|
|
148
|
-
}), { parsers:
|
|
153
|
+
}), { parsers: X } = i({
|
|
149
154
|
consoleId: D,
|
|
150
155
|
skipFetch: w && !E
|
|
151
156
|
});
|
|
152
|
-
|
|
153
|
-
w
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
e.name,
|
|
170
|
-
e.description || "",
|
|
171
|
-
e.status,
|
|
172
|
-
t,
|
|
173
|
-
e.version
|
|
174
|
-
]);
|
|
157
|
+
oe(() => {
|
|
158
|
+
if (!w || !v) return;
|
|
159
|
+
let e = !0;
|
|
160
|
+
return q(v).then((t) => {
|
|
161
|
+
if (e && t) {
|
|
162
|
+
Oe(t.consoleId), M(t.name), P(t.description || ""), I(t.status), Ne(t.version);
|
|
163
|
+
let e = ae(t.stages);
|
|
164
|
+
R(e), W({
|
|
165
|
+
owner: v,
|
|
166
|
+
values: [
|
|
167
|
+
t.name,
|
|
168
|
+
t.description || "",
|
|
169
|
+
t.status,
|
|
170
|
+
e,
|
|
171
|
+
t.version
|
|
172
|
+
]
|
|
173
|
+
});
|
|
175
174
|
}
|
|
176
|
-
})
|
|
175
|
+
}), () => {
|
|
176
|
+
e = !1;
|
|
177
|
+
};
|
|
177
178
|
}, [
|
|
178
179
|
w,
|
|
179
180
|
v,
|
|
180
|
-
|
|
181
|
+
q
|
|
181
182
|
]);
|
|
182
|
-
let
|
|
183
|
-
draft:
|
|
184
|
-
active:
|
|
185
|
-
inactive:
|
|
186
|
-
error:
|
|
187
|
-
},
|
|
188
|
-
fail:
|
|
189
|
-
skip:
|
|
190
|
-
fallback:
|
|
191
|
-
},
|
|
183
|
+
let Ie = {
|
|
184
|
+
draft: s("bigconsole.pipelines.builder.status.draft", "Draft"),
|
|
185
|
+
active: s("bigconsole.pipelines.builder.status.active", "Active"),
|
|
186
|
+
inactive: s("bigconsole.pipelines.builder.status.inactive", "Inactive"),
|
|
187
|
+
error: s("bigconsole.pipelines.builder.status.error", "Error")
|
|
188
|
+
}, Le = {
|
|
189
|
+
fail: s("bigconsole.pipelines.builder.onError.fail", "Fail"),
|
|
190
|
+
skip: s("bigconsole.pipelines.builder.onError.skip", "Skip"),
|
|
191
|
+
fallback: s("bigconsole.pipelines.builder.onError.fallback", "Fallback")
|
|
192
|
+
}, Z = l(() => !j.trim() || L.length === 0 ? !1 : L.every(o), [j, L]), Re = l(() => j.trim() ? L.length === 0 ? "Add at least one stage to save this pipeline." : L.every(o) ? null : "Every stage needs a parser, an input key and an output key." : "Give the pipeline a name to save it.", [j, L]), Q = c(() => {
|
|
192
193
|
C(`/pipelines?consoleId=${encodeURIComponent(D)}`);
|
|
193
|
-
}, [C, D]),
|
|
194
|
-
R((e) => [...e, { ...
|
|
195
|
-
}, []),
|
|
194
|
+
}, [C, D]), ze = c(() => {
|
|
195
|
+
R((e) => [...e, { ...Ee }]);
|
|
196
|
+
}, []), Be = c((e) => {
|
|
196
197
|
R((t) => t.filter((t, n) => n !== e));
|
|
197
|
-
}, []),
|
|
198
|
+
}, []), Ve = c((e, t) => {
|
|
198
199
|
R((n) => {
|
|
199
200
|
let r = [...n], i = t === "up" ? e - 1 : e + 1;
|
|
200
201
|
return i < 0 || i >= r.length ? n : ([r[e], r[i]] = [r[i], r[e]], r);
|
|
201
202
|
});
|
|
202
|
-
}, []), $ =
|
|
203
|
+
}, []), $ = c((e, t) => {
|
|
203
204
|
R((n) => n.map((n, r) => r === e ? {
|
|
204
205
|
...n,
|
|
205
206
|
...t
|
|
206
207
|
} : n));
|
|
207
|
-
}, []),
|
|
208
|
-
let n =
|
|
208
|
+
}, []), He = c((e, t) => {
|
|
209
|
+
let n = X.find((e) => e.id === t);
|
|
209
210
|
n && $(e, {
|
|
210
211
|
parserId: n.id,
|
|
211
212
|
parserName: n.name,
|
|
212
213
|
parserType: n.type
|
|
213
214
|
});
|
|
214
|
-
}, [
|
|
215
|
-
if (!(!
|
|
216
|
-
V(!0),
|
|
215
|
+
}, [X, $]), Ue = c(async () => {
|
|
216
|
+
if (!(!Z || !D || !A)) {
|
|
217
|
+
V(!0), H(null);
|
|
217
218
|
try {
|
|
218
|
-
let e = L
|
|
219
|
-
|
|
220
|
-
parserName: e.parserName,
|
|
221
|
-
parserType: e.parserType || void 0,
|
|
222
|
-
inputKey: e.inputKey,
|
|
223
|
-
outputKey: e.outputKey,
|
|
224
|
-
enabled: e.enabled,
|
|
225
|
-
onError: e.onError,
|
|
226
|
-
fallbackValue: e.fallbackValue ? JSON.parse(e.fallbackValue) : void 0,
|
|
227
|
-
description: e.description || void 0
|
|
228
|
-
}));
|
|
229
|
-
if (w && v) await J(v, {
|
|
219
|
+
let e = ie(L);
|
|
220
|
+
if (w && v) await Y(v, {
|
|
230
221
|
name: j,
|
|
231
222
|
description: N || void 0,
|
|
232
|
-
status: F
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
223
|
+
status: F,
|
|
224
|
+
stages: e
|
|
225
|
+
}, z) && (W({
|
|
226
|
+
owner: v,
|
|
227
|
+
values: [
|
|
228
|
+
j,
|
|
229
|
+
N,
|
|
230
|
+
F,
|
|
231
|
+
L,
|
|
232
|
+
z
|
|
233
|
+
]
|
|
234
|
+
}), C(`/pipelines/${v}`));
|
|
240
235
|
else {
|
|
241
|
-
let t = await
|
|
236
|
+
let t = await J({
|
|
242
237
|
consoleId: D,
|
|
243
238
|
name: j,
|
|
244
239
|
description: N || void 0,
|
|
245
240
|
status: F,
|
|
246
241
|
stages: e
|
|
247
242
|
});
|
|
248
|
-
t && (W(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
243
|
+
t && (W({
|
|
244
|
+
owner: null,
|
|
245
|
+
values: [
|
|
246
|
+
j,
|
|
247
|
+
N,
|
|
248
|
+
F,
|
|
249
|
+
L,
|
|
250
|
+
z
|
|
251
|
+
]
|
|
252
|
+
}), C(`/pipelines/${t.id}`));
|
|
255
253
|
}
|
|
256
254
|
} catch (e) {
|
|
257
|
-
|
|
255
|
+
H(e instanceof Error ? e.message : s("bigconsole.pipelines.builder.errors.saveFailed", "Failed to save pipeline"));
|
|
258
256
|
} finally {
|
|
259
257
|
V(!1);
|
|
260
258
|
}
|
|
261
259
|
}
|
|
262
260
|
}, [
|
|
263
|
-
|
|
261
|
+
Z,
|
|
264
262
|
D,
|
|
265
263
|
A,
|
|
266
264
|
w,
|
|
@@ -270,278 +268,281 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
270
268
|
F,
|
|
271
269
|
L,
|
|
272
270
|
z,
|
|
273
|
-
q,
|
|
274
271
|
J,
|
|
272
|
+
Y,
|
|
275
273
|
C,
|
|
276
|
-
|
|
274
|
+
s
|
|
277
275
|
]);
|
|
278
|
-
|
|
276
|
+
if (Fe && w && G === null) return /* @__PURE__ */ f("div", {
|
|
279
277
|
className: "p-card-padding",
|
|
280
|
-
children: /* @__PURE__ */
|
|
278
|
+
children: /* @__PURE__ */ p("div", {
|
|
281
279
|
className: "flex flex-col items-center justify-center py-16",
|
|
282
280
|
role: "status",
|
|
283
|
-
children: [/* @__PURE__ */
|
|
281
|
+
children: [/* @__PURE__ */ f(me, { style: {
|
|
284
282
|
height: "var(--size-icon-xl)",
|
|
285
283
|
width: "var(--size-icon-xl)"
|
|
286
|
-
} }), /* @__PURE__ */
|
|
284
|
+
} }), /* @__PURE__ */ f("p", {
|
|
287
285
|
className: "mt-form-gap text-sm text-text-secondary",
|
|
288
|
-
children:
|
|
286
|
+
children: s("bigconsole.pipelines.builder.loading", "Loading Pipeline...")
|
|
289
287
|
})]
|
|
290
288
|
})
|
|
291
|
-
})
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
289
|
+
});
|
|
290
|
+
if (w && !ke && !Ae) return /* @__PURE__ */ f(ue, {
|
|
291
|
+
title: s("bigconsole.pipelines.builder.accessDenied.title", "Access Denied"),
|
|
292
|
+
description: s("bigconsole.pipelines.builder.accessDenied.description", "You don't have permission to view this pipeline.")
|
|
293
|
+
});
|
|
294
|
+
let We = !!K && w && G === null, Ge = Pe ?? (K && !We ? K.message : null);
|
|
295
|
+
return K && We ? /* @__PURE__ */ f("div", {
|
|
295
296
|
className: "p-card-padding",
|
|
296
|
-
children: /* @__PURE__ */
|
|
297
|
+
children: /* @__PURE__ */ f(n, {
|
|
297
298
|
tone: "danger",
|
|
298
299
|
headingLevel: 2,
|
|
299
|
-
title:
|
|
300
|
-
description:
|
|
301
|
-
icon: /* @__PURE__ */
|
|
302
|
-
actions: /* @__PURE__ */
|
|
300
|
+
title: s("bigconsole.pipelines.builder.errors.loadFailed", "Failed to load Pipeline"),
|
|
301
|
+
description: K.message,
|
|
302
|
+
icon: /* @__PURE__ */ f(x, { className: "h-icon-sm w-icon-sm" }),
|
|
303
|
+
actions: /* @__PURE__ */ f(d, {
|
|
303
304
|
onClick: Q,
|
|
304
|
-
className:
|
|
305
|
-
children:
|
|
305
|
+
className: m,
|
|
306
|
+
children: s("bigconsole.pipelines.builder.actions.backToPipelines", "Back to Pipelines")
|
|
306
307
|
}),
|
|
307
308
|
"data-testid": "pipeline-builder-error",
|
|
308
|
-
children: /* @__PURE__ */
|
|
309
|
+
children: /* @__PURE__ */ f("p", {
|
|
309
310
|
className: "text-sm text-text-secondary",
|
|
310
311
|
children: "The pipeline could not be read from the console service. Nothing was changed."
|
|
311
312
|
})
|
|
312
313
|
})
|
|
313
|
-
}) : /* @__PURE__ */
|
|
314
|
+
}) : /* @__PURE__ */ f("div", {
|
|
314
315
|
className: "p-card-padding",
|
|
315
|
-
children: /* @__PURE__ */
|
|
316
|
-
/* @__PURE__ */
|
|
316
|
+
children: /* @__PURE__ */ p(r, { children: [
|
|
317
|
+
/* @__PURE__ */ p("header", {
|
|
317
318
|
className: "flex flex-col gap-form-gap sm:flex-row sm:items-start sm:justify-between",
|
|
318
|
-
children: [/* @__PURE__ */
|
|
319
|
+
children: [/* @__PURE__ */ p("div", {
|
|
319
320
|
className: "flex min-w-0 flex-col gap-control-gap",
|
|
320
|
-
children: [/* @__PURE__ */ d
|
|
321
|
+
children: [/* @__PURE__ */ p(d, {
|
|
321
322
|
variant: "ghost",
|
|
322
323
|
size: "sm",
|
|
323
324
|
onClick: Q,
|
|
324
325
|
className: "w-fit",
|
|
325
|
-
children: [/* @__PURE__ */
|
|
326
|
-
}), /* @__PURE__ */
|
|
326
|
+
children: [/* @__PURE__ */ f(xe, { className: "h-icon-sm w-icon-sm" }), s("bigconsole.pipelines.builder.actions.backToPipelines", "Back to Pipelines")]
|
|
327
|
+
}), /* @__PURE__ */ p("div", {
|
|
327
328
|
className: "min-w-0",
|
|
328
|
-
children: [/* @__PURE__ */
|
|
329
|
+
children: [/* @__PURE__ */ f("h1", {
|
|
329
330
|
className: "text-2xl font-bold leading-tight text-text-primary",
|
|
330
|
-
children: w ?
|
|
331
|
-
}), /* @__PURE__ */
|
|
331
|
+
children: w ? s("bigconsole.pipelines.builder.header.editTitle", "Edit Pipeline") : s("bigconsole.pipelines.builder.header.createTitle", "Create Pipeline")
|
|
332
|
+
}), /* @__PURE__ */ f("p", {
|
|
332
333
|
className: "mt-1 text-sm text-text-secondary",
|
|
333
|
-
children: w ?
|
|
334
|
+
children: w ? s("bigconsole.pipelines.builder.header.editSubtitle", "Update pipeline settings and stages") : s("bigconsole.pipelines.builder.header.createSubtitle", "Create a new data transformation pipeline")
|
|
334
335
|
})]
|
|
335
336
|
})]
|
|
336
|
-
}), /* @__PURE__ */
|
|
337
|
+
}), /* @__PURE__ */ p("div", {
|
|
337
338
|
className: "flex flex-col gap-1 sm:items-end",
|
|
338
|
-
children: [/* @__PURE__ */
|
|
339
|
+
children: [/* @__PURE__ */ p("div", {
|
|
339
340
|
className: "flex flex-wrap items-center gap-control-gap",
|
|
340
|
-
children: [/* @__PURE__ */
|
|
341
|
+
children: [/* @__PURE__ */ f(d, {
|
|
341
342
|
variant: "secondary",
|
|
342
343
|
onClick: Q,
|
|
343
|
-
className:
|
|
344
|
-
children:
|
|
345
|
-
}), /* @__PURE__ */
|
|
346
|
-
onClick:
|
|
347
|
-
disabled: !
|
|
348
|
-
title: A ? void 0 : w ?
|
|
349
|
-
className:
|
|
350
|
-
children: B ?
|
|
344
|
+
className: m,
|
|
345
|
+
children: s("bigconsole.pipelines.builder.actions.cancel", "Cancel")
|
|
346
|
+
}), /* @__PURE__ */ f(d, {
|
|
347
|
+
onClick: Ue,
|
|
348
|
+
disabled: !Z || B || !A,
|
|
349
|
+
title: A ? void 0 : w ? s("bigconsole.pipelines.builder.actions.noUpdatePermission", "You don't have permission to update pipelines.") : s("bigconsole.pipelines.builder.actions.noCreatePermission", "You don't have permission to create pipelines."),
|
|
350
|
+
className: m,
|
|
351
|
+
children: B ? s("bigconsole.pipelines.builder.actions.saving", "Saving...") : w ? s("bigconsole.pipelines.builder.actions.saveChanges", "Save Changes") : s("bigconsole.pipelines.builder.actions.createPipeline", "Create Pipeline")
|
|
351
352
|
})]
|
|
352
|
-
}),
|
|
353
|
+
}), Re && /* @__PURE__ */ f("p", {
|
|
353
354
|
className: "text-xs text-text-secondary sm:text-right",
|
|
354
355
|
"data-testid": "pipeline-save-blocked-reason",
|
|
355
|
-
children:
|
|
356
|
+
children: Re
|
|
356
357
|
})]
|
|
357
358
|
})]
|
|
358
359
|
}),
|
|
359
|
-
/* @__PURE__ */
|
|
360
|
+
/* @__PURE__ */ f(pe, {
|
|
360
361
|
className: "max-w-[75ch]",
|
|
361
|
-
children:
|
|
362
|
+
children: s("bigconsole.pipelines.builder.header.purpose", "Build a pipeline by chaining parser stages — each stage reads an input key, runs a parser, and writes a structured output key that the next stage (or a data sink) can use. Name it, add your stages in order, then test it before saving so your data flows end to end.")
|
|
362
363
|
}),
|
|
363
|
-
|
|
364
|
+
Ge && /* @__PURE__ */ f(n, {
|
|
364
365
|
tone: "danger",
|
|
365
366
|
headingLevel: 2,
|
|
366
|
-
title:
|
|
367
|
-
description:
|
|
368
|
-
icon: /* @__PURE__ */
|
|
367
|
+
title: s("bigconsole.pipelines.builder.errors.saveFailed", "Failed to save pipeline"),
|
|
368
|
+
description: Ge,
|
|
369
|
+
icon: /* @__PURE__ */ f(x, { className: "h-icon-sm w-icon-sm" }),
|
|
369
370
|
"data-testid": "pipeline-save-error"
|
|
370
371
|
}),
|
|
371
|
-
/* @__PURE__ */
|
|
372
|
+
/* @__PURE__ */ p("div", {
|
|
372
373
|
className: "grid grid-cols-1 gap-section-gap lg:grid-cols-3",
|
|
373
|
-
children: [/* @__PURE__ */
|
|
374
|
+
children: [/* @__PURE__ */ f("div", {
|
|
374
375
|
className: "min-w-0 lg:col-span-2",
|
|
375
|
-
children: /* @__PURE__ */
|
|
376
|
+
children: /* @__PURE__ */ p(r, { children: [/* @__PURE__ */ f(n, {
|
|
376
377
|
headingLevel: 2,
|
|
377
|
-
title:
|
|
378
|
+
title: s("bigconsole.pipelines.builder.basicInfo.heading", "Basic Information"),
|
|
378
379
|
description: "How this pipeline is identified, and whether it runs.",
|
|
379
380
|
"data-testid": "pipeline-basic-info",
|
|
380
|
-
children: /* @__PURE__ */
|
|
381
|
+
children: /* @__PURE__ */ p("div", {
|
|
381
382
|
className: "flex flex-col gap-form-gap",
|
|
382
383
|
children: [
|
|
383
|
-
/* @__PURE__ */
|
|
384
|
+
/* @__PURE__ */ f(ne, {
|
|
384
385
|
value: D,
|
|
385
386
|
disabled: w,
|
|
386
387
|
onChange: (e) => {
|
|
387
388
|
let t = new URLSearchParams(T);
|
|
388
|
-
t.set("consoleId", e),
|
|
389
|
+
t.set("consoleId", e), De(t), R([]);
|
|
389
390
|
}
|
|
390
391
|
}),
|
|
391
|
-
/* @__PURE__ */
|
|
392
|
+
/* @__PURE__ */ p("div", {
|
|
392
393
|
className: "min-w-0",
|
|
393
|
-
children: [/* @__PURE__ */
|
|
394
|
+
children: [/* @__PURE__ */ p("label", {
|
|
394
395
|
htmlFor: `${O}-name`,
|
|
395
|
-
className:
|
|
396
|
+
className: h,
|
|
396
397
|
children: [
|
|
397
|
-
|
|
398
|
+
s("bigconsole.pipelines.builder.basicInfo.nameLabel", "Name"),
|
|
398
399
|
" ",
|
|
399
|
-
/* @__PURE__ */
|
|
400
|
+
/* @__PURE__ */ f("span", {
|
|
400
401
|
className: "text-status-error-text",
|
|
401
402
|
children: "*"
|
|
402
403
|
})
|
|
403
404
|
]
|
|
404
|
-
}), /* @__PURE__ */
|
|
405
|
+
}), /* @__PURE__ */ f("input", {
|
|
405
406
|
id: `${O}-name`,
|
|
406
407
|
type: "text",
|
|
407
408
|
value: j,
|
|
408
409
|
onChange: (e) => M(e.target.value),
|
|
409
|
-
placeholder:
|
|
410
|
+
placeholder: s("bigconsole.pipelines.builder.basicInfo.namePlaceholder", "My Pipeline"),
|
|
410
411
|
className: g
|
|
411
412
|
})]
|
|
412
413
|
}),
|
|
413
|
-
/* @__PURE__ */
|
|
414
|
+
/* @__PURE__ */ p("div", {
|
|
414
415
|
className: "min-w-0",
|
|
415
|
-
children: [/* @__PURE__ */
|
|
416
|
+
children: [/* @__PURE__ */ f("label", {
|
|
416
417
|
htmlFor: `${O}-description`,
|
|
417
|
-
className:
|
|
418
|
-
children:
|
|
419
|
-
}), /* @__PURE__ */
|
|
418
|
+
className: h,
|
|
419
|
+
children: s("bigconsole.pipelines.builder.basicInfo.descriptionLabel", "Description")
|
|
420
|
+
}), /* @__PURE__ */ f("textarea", {
|
|
420
421
|
id: `${O}-description`,
|
|
421
422
|
value: N,
|
|
422
423
|
onChange: (e) => P(e.target.value),
|
|
423
|
-
placeholder:
|
|
424
|
+
placeholder: s("bigconsole.pipelines.builder.basicInfo.descriptionPlaceholder", "What does this pipeline do?"),
|
|
424
425
|
rows: 3,
|
|
425
426
|
className: `${g} resize-y`
|
|
426
427
|
})]
|
|
427
428
|
}),
|
|
428
|
-
/* @__PURE__ */
|
|
429
|
+
/* @__PURE__ */ p("div", {
|
|
429
430
|
className: "min-w-0 border-t border-[var(--color-border-subtle)] pt-form-gap",
|
|
430
431
|
children: [
|
|
431
|
-
/* @__PURE__ */
|
|
432
|
+
/* @__PURE__ */ f("label", {
|
|
432
433
|
htmlFor: `${O}-status`,
|
|
433
|
-
className:
|
|
434
|
-
children:
|
|
434
|
+
className: h,
|
|
435
|
+
children: s("bigconsole.pipelines.builder.basicInfo.statusLabel", "Status")
|
|
435
436
|
}),
|
|
436
|
-
/* @__PURE__ */
|
|
437
|
+
/* @__PURE__ */ f("select", {
|
|
437
438
|
id: `${O}-status`,
|
|
438
439
|
value: F,
|
|
439
440
|
onChange: (e) => I(e.target.value),
|
|
440
441
|
className: g,
|
|
441
|
-
children:
|
|
442
|
+
children: Te.map((e) => /* @__PURE__ */ f("option", {
|
|
442
443
|
value: e.value,
|
|
443
|
-
children:
|
|
444
|
+
children: Ie[e.value]
|
|
444
445
|
}, e.value))
|
|
445
446
|
}),
|
|
446
|
-
/* @__PURE__ */
|
|
447
|
-
className:
|
|
447
|
+
/* @__PURE__ */ f("p", {
|
|
448
|
+
className: ve,
|
|
448
449
|
children: "Only active pipelines process incoming data."
|
|
449
450
|
})
|
|
450
451
|
]
|
|
451
452
|
})
|
|
452
453
|
]
|
|
453
454
|
})
|
|
454
|
-
}), /* @__PURE__ */
|
|
455
|
+
}), /* @__PURE__ */ f(n, {
|
|
455
456
|
emphasis: "primary",
|
|
456
457
|
headingLevel: 2,
|
|
457
|
-
title:
|
|
458
|
+
title: s("bigconsole.pipelines.builder.stages.heading", "Stages ({{count}})", { count: L.length }),
|
|
458
459
|
description: "Each stage reads an input key, runs a parser, and writes an output key for the next stage.",
|
|
459
|
-
actions: /* @__PURE__ */ d
|
|
460
|
+
actions: /* @__PURE__ */ p(d, {
|
|
460
461
|
size: "sm",
|
|
461
|
-
onClick:
|
|
462
|
-
className:
|
|
463
|
-
children: [/* @__PURE__ */
|
|
462
|
+
onClick: ze,
|
|
463
|
+
className: m,
|
|
464
|
+
children: [/* @__PURE__ */ f(b, { className: "h-icon-sm w-icon-sm" }), s("bigconsole.pipelines.builder.stages.addStage", "Add Stage")]
|
|
464
465
|
}),
|
|
465
466
|
"data-testid": "pipeline-stages-editor",
|
|
466
|
-
children: L.length === 0 ? /* @__PURE__ */
|
|
467
|
+
children: L.length === 0 ? /* @__PURE__ */ f(fe, {
|
|
467
468
|
illustration: "empty-generic",
|
|
468
|
-
title:
|
|
469
|
-
description:
|
|
470
|
-
action: /* @__PURE__ */ d
|
|
471
|
-
onClick:
|
|
472
|
-
className:
|
|
473
|
-
children: [/* @__PURE__ */
|
|
469
|
+
title: s("bigconsole.pipelines.builder.stages.emptyTitle", "No stages yet"),
|
|
470
|
+
description: s("bigconsole.pipelines.builder.stages.emptyDescription", "Add a stage to start building your pipeline."),
|
|
471
|
+
action: /* @__PURE__ */ p(d, {
|
|
472
|
+
onClick: ze,
|
|
473
|
+
className: m,
|
|
474
|
+
children: [/* @__PURE__ */ f(b, { className: "h-icon-sm w-icon-sm" }), s("bigconsole.pipelines.builder.stages.addFirstStage", "Add First Stage")]
|
|
474
475
|
})
|
|
475
|
-
}) : /* @__PURE__ */
|
|
476
|
+
}) : /* @__PURE__ */ f("ol", {
|
|
476
477
|
className: "flex flex-col gap-form-gap",
|
|
477
|
-
children: L.map((e, r) => /* @__PURE__ */
|
|
478
|
+
children: L.map((e, r) => /* @__PURE__ */ f("li", {
|
|
478
479
|
className: "min-w-0",
|
|
479
|
-
children: /* @__PURE__ */
|
|
480
|
+
children: /* @__PURE__ */ f(n, {
|
|
480
481
|
emphasis: "muted",
|
|
481
482
|
padding: "compact",
|
|
482
483
|
headingLevel: 3,
|
|
483
|
-
title: /* @__PURE__ */
|
|
484
|
+
title: /* @__PURE__ */ p("span", {
|
|
484
485
|
className: "flex min-w-0 items-center gap-icon-gap",
|
|
485
|
-
children: [/* @__PURE__ */
|
|
486
|
+
children: [/* @__PURE__ */ f("span", {
|
|
486
487
|
"aria-hidden": "true",
|
|
487
488
|
className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-pill bg-bg-surface text-xs font-semibold text-text-secondary",
|
|
488
489
|
children: r + 1
|
|
489
|
-
}), /* @__PURE__ */
|
|
490
|
+
}), /* @__PURE__ */ f("span", {
|
|
490
491
|
className: "min-w-0 truncate",
|
|
491
|
-
children: e.parserName ||
|
|
492
|
+
children: e.parserName || s("bigconsole.pipelines.builder.stages.defaultStageName", "Stage {{number}}", { number: r + 1 })
|
|
492
493
|
})]
|
|
493
494
|
}),
|
|
494
|
-
actions: /* @__PURE__ */
|
|
495
|
-
/* @__PURE__ */
|
|
495
|
+
actions: /* @__PURE__ */ p(_e, { children: [
|
|
496
|
+
/* @__PURE__ */ f("button", {
|
|
496
497
|
type: "button",
|
|
497
|
-
onClick: () =>
|
|
498
|
+
onClick: () => Ve(r, "up"),
|
|
498
499
|
disabled: r === 0,
|
|
499
500
|
className: y,
|
|
500
501
|
"aria-label": `Move stage ${r + 1} up`,
|
|
501
|
-
children: /* @__PURE__ */
|
|
502
|
+
children: /* @__PURE__ */ f(Ce, { className: "h-icon-sm w-icon-sm" })
|
|
502
503
|
}),
|
|
503
|
-
/* @__PURE__ */
|
|
504
|
+
/* @__PURE__ */ f("button", {
|
|
504
505
|
type: "button",
|
|
505
|
-
onClick: () =>
|
|
506
|
+
onClick: () => Ve(r, "down"),
|
|
506
507
|
disabled: r === L.length - 1,
|
|
507
508
|
className: y,
|
|
508
509
|
"aria-label": `Move stage ${r + 1} down`,
|
|
509
|
-
children: /* @__PURE__ */
|
|
510
|
+
children: /* @__PURE__ */ f(we, { className: "h-icon-sm w-icon-sm" })
|
|
510
511
|
}),
|
|
511
|
-
/* @__PURE__ */
|
|
512
|
+
/* @__PURE__ */ f("button", {
|
|
512
513
|
type: "button",
|
|
513
|
-
onClick: () =>
|
|
514
|
-
className:
|
|
514
|
+
onClick: () => Be(r),
|
|
515
|
+
className: be,
|
|
515
516
|
"aria-label": `Remove stage ${r + 1}`,
|
|
516
|
-
children: /* @__PURE__ */
|
|
517
|
+
children: /* @__PURE__ */ f(Se, { className: "h-icon-sm w-icon-sm" })
|
|
517
518
|
})
|
|
518
519
|
] }),
|
|
519
520
|
"data-testid": "pipeline-stage-editor",
|
|
520
|
-
children: /* @__PURE__ */
|
|
521
|
+
children: /* @__PURE__ */ p("div", {
|
|
521
522
|
className: "flex flex-col gap-form-gap",
|
|
522
523
|
children: [
|
|
523
|
-
/* @__PURE__ */
|
|
524
|
+
/* @__PURE__ */ p("div", {
|
|
524
525
|
className: "min-w-0",
|
|
525
|
-
children: [/* @__PURE__ */
|
|
526
|
+
children: [/* @__PURE__ */ p("label", {
|
|
526
527
|
htmlFor: `${O}-parser-${r}`,
|
|
527
|
-
className:
|
|
528
|
+
className: h,
|
|
528
529
|
children: [
|
|
529
|
-
|
|
530
|
+
s("bigconsole.pipelines.builder.stages.parserLabel", "Parser"),
|
|
530
531
|
" ",
|
|
531
|
-
/* @__PURE__ */
|
|
532
|
+
/* @__PURE__ */ f("span", {
|
|
532
533
|
className: "text-status-error-text",
|
|
533
534
|
children: "*"
|
|
534
535
|
})
|
|
535
536
|
]
|
|
536
|
-
}), /* @__PURE__ */
|
|
537
|
+
}), /* @__PURE__ */ p("select", {
|
|
537
538
|
id: `${O}-parser-${r}`,
|
|
538
539
|
value: e.parserId,
|
|
539
|
-
onChange: (e) =>
|
|
540
|
+
onChange: (e) => He(r, e.target.value),
|
|
540
541
|
className: g,
|
|
541
|
-
children: [/* @__PURE__ */
|
|
542
|
+
children: [/* @__PURE__ */ f("option", {
|
|
542
543
|
value: "",
|
|
543
|
-
children:
|
|
544
|
-
}),
|
|
544
|
+
children: s("bigconsole.pipelines.builder.stages.parserPlaceholder", "Select a parser...")
|
|
545
|
+
}), X.map((e) => /* @__PURE__ */ p("option", {
|
|
545
546
|
value: e.id,
|
|
546
547
|
children: [
|
|
547
548
|
e.name,
|
|
@@ -552,114 +553,114 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
552
553
|
}, e.id))]
|
|
553
554
|
})]
|
|
554
555
|
}),
|
|
555
|
-
/* @__PURE__ */
|
|
556
|
+
/* @__PURE__ */ p("fieldset", {
|
|
556
557
|
className: "min-w-0",
|
|
557
|
-
children: [/* @__PURE__ */
|
|
558
|
-
className:
|
|
558
|
+
children: [/* @__PURE__ */ f("legend", {
|
|
559
|
+
className: ye,
|
|
559
560
|
children: "Data contract"
|
|
560
|
-
}), /* @__PURE__ */
|
|
561
|
+
}), /* @__PURE__ */ p("div", {
|
|
561
562
|
className: "grid grid-cols-1 gap-form-gap sm:grid-cols-2",
|
|
562
|
-
children: [/* @__PURE__ */
|
|
563
|
+
children: [/* @__PURE__ */ p("div", {
|
|
563
564
|
className: "min-w-0",
|
|
564
|
-
children: [/* @__PURE__ */
|
|
565
|
+
children: [/* @__PURE__ */ p("label", {
|
|
565
566
|
htmlFor: `${O}-input-${r}`,
|
|
566
|
-
className:
|
|
567
|
+
className: h,
|
|
567
568
|
children: [
|
|
568
|
-
|
|
569
|
+
s("bigconsole.pipelines.builder.stages.inputKeyLabel", "Input Key"),
|
|
569
570
|
" ",
|
|
570
|
-
/* @__PURE__ */
|
|
571
|
+
/* @__PURE__ */ f("span", {
|
|
571
572
|
className: "text-status-error-text",
|
|
572
573
|
children: "*"
|
|
573
574
|
})
|
|
574
575
|
]
|
|
575
|
-
}), /* @__PURE__ */
|
|
576
|
+
}), /* @__PURE__ */ f("input", {
|
|
576
577
|
id: `${O}-input-${r}`,
|
|
577
578
|
type: "text",
|
|
578
579
|
value: e.inputKey,
|
|
579
580
|
onChange: (e) => $(r, { inputKey: e.target.value }),
|
|
580
|
-
placeholder:
|
|
581
|
+
placeholder: s("bigconsole.pipelines.builder.stages.inputKeyPlaceholder", "data"),
|
|
581
582
|
className: _
|
|
582
583
|
})]
|
|
583
|
-
}), /* @__PURE__ */
|
|
584
|
+
}), /* @__PURE__ */ p("div", {
|
|
584
585
|
className: "min-w-0",
|
|
585
|
-
children: [/* @__PURE__ */
|
|
586
|
+
children: [/* @__PURE__ */ p("label", {
|
|
586
587
|
htmlFor: `${O}-output-${r}`,
|
|
587
|
-
className:
|
|
588
|
+
className: h,
|
|
588
589
|
children: [
|
|
589
|
-
|
|
590
|
+
s("bigconsole.pipelines.builder.stages.outputKeyLabel", "Output Key"),
|
|
590
591
|
" ",
|
|
591
|
-
/* @__PURE__ */
|
|
592
|
+
/* @__PURE__ */ f("span", {
|
|
592
593
|
className: "text-status-error-text",
|
|
593
594
|
children: "*"
|
|
594
595
|
})
|
|
595
596
|
]
|
|
596
|
-
}), /* @__PURE__ */
|
|
597
|
+
}), /* @__PURE__ */ f("input", {
|
|
597
598
|
id: `${O}-output-${r}`,
|
|
598
599
|
type: "text",
|
|
599
600
|
value: e.outputKey,
|
|
600
601
|
onChange: (e) => $(r, { outputKey: e.target.value }),
|
|
601
|
-
placeholder:
|
|
602
|
+
placeholder: s("bigconsole.pipelines.builder.stages.outputKeyPlaceholder", "result"),
|
|
602
603
|
className: _
|
|
603
604
|
})]
|
|
604
605
|
})]
|
|
605
606
|
})]
|
|
606
607
|
}),
|
|
607
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ p("fieldset", {
|
|
608
609
|
className: "min-w-0",
|
|
609
|
-
children: [/* @__PURE__ */
|
|
610
|
-
className:
|
|
610
|
+
children: [/* @__PURE__ */ f("legend", {
|
|
611
|
+
className: ye,
|
|
611
612
|
children: "Failure policy"
|
|
612
|
-
}), /* @__PURE__ */
|
|
613
|
+
}), /* @__PURE__ */ p("div", {
|
|
613
614
|
className: "grid grid-cols-1 gap-form-gap sm:grid-cols-2",
|
|
614
615
|
children: [
|
|
615
|
-
/* @__PURE__ */
|
|
616
|
+
/* @__PURE__ */ p("div", {
|
|
616
617
|
className: "min-w-0",
|
|
617
618
|
children: [
|
|
618
|
-
/* @__PURE__ */
|
|
619
|
+
/* @__PURE__ */ f("label", {
|
|
619
620
|
htmlFor: `${O}-onerror-${r}`,
|
|
620
|
-
className:
|
|
621
|
-
children:
|
|
621
|
+
className: h,
|
|
622
|
+
children: s("bigconsole.pipelines.builder.stages.onErrorLabel", "On Error")
|
|
622
623
|
}),
|
|
623
|
-
/* @__PURE__ */
|
|
624
|
+
/* @__PURE__ */ f("select", {
|
|
624
625
|
id: `${O}-onerror-${r}`,
|
|
625
626
|
value: e.onError,
|
|
626
627
|
onChange: (e) => $(r, { onError: e.target.value }),
|
|
627
628
|
className: g,
|
|
628
|
-
children: S.map((e) => /* @__PURE__ */
|
|
629
|
+
children: S.map((e) => /* @__PURE__ */ f("option", {
|
|
629
630
|
value: e.value,
|
|
630
|
-
children:
|
|
631
|
+
children: Le[e.value]
|
|
631
632
|
}, e.value))
|
|
632
633
|
}),
|
|
633
|
-
/* @__PURE__ */
|
|
634
|
-
className:
|
|
634
|
+
/* @__PURE__ */ f("p", {
|
|
635
|
+
className: ve,
|
|
635
636
|
children: S.find((t) => t.value === e.onError)?.description
|
|
636
637
|
})
|
|
637
638
|
]
|
|
638
639
|
}),
|
|
639
|
-
/* @__PURE__ */
|
|
640
|
+
/* @__PURE__ */ f("div", {
|
|
640
641
|
className: "flex min-w-0 items-start",
|
|
641
|
-
children: /* @__PURE__ */
|
|
642
|
+
children: /* @__PURE__ */ p("label", {
|
|
642
643
|
htmlFor: `${O}-enabled-${r}`,
|
|
643
|
-
className: `flex cursor-pointer items-center gap-2 ${
|
|
644
|
-
children: [/* @__PURE__ */
|
|
644
|
+
className: `flex cursor-pointer items-center gap-2 ${m}`,
|
|
645
|
+
children: [/* @__PURE__ */ f("input", {
|
|
645
646
|
id: `${O}-enabled-${r}`,
|
|
646
647
|
type: "checkbox",
|
|
647
648
|
checked: e.enabled,
|
|
648
649
|
onChange: (e) => $(r, { enabled: e.target.checked }),
|
|
649
650
|
className: `h-4 w-4 rounded border-[var(--color-border-subtle)] text-action-primary-bg ${t}`
|
|
650
|
-
}), /* @__PURE__ */
|
|
651
|
+
}), /* @__PURE__ */ f("span", {
|
|
651
652
|
className: "text-sm text-text-primary",
|
|
652
|
-
children:
|
|
653
|
+
children: s("bigconsole.pipelines.builder.stages.enabledLabel", "Enabled")
|
|
653
654
|
})]
|
|
654
655
|
})
|
|
655
656
|
}),
|
|
656
|
-
e.onError === "fallback" && /* @__PURE__ */
|
|
657
|
+
e.onError === "fallback" && /* @__PURE__ */ p("div", {
|
|
657
658
|
className: "min-w-0 sm:col-span-2",
|
|
658
|
-
children: [/* @__PURE__ */
|
|
659
|
+
children: [/* @__PURE__ */ f("label", {
|
|
659
660
|
htmlFor: `${O}-fallback-${r}`,
|
|
660
|
-
className:
|
|
661
|
-
children:
|
|
662
|
-
}), /* @__PURE__ */
|
|
661
|
+
className: h,
|
|
662
|
+
children: s("bigconsole.pipelines.builder.stages.fallbackValueLabel", "Fallback Value (JSON)")
|
|
663
|
+
}), /* @__PURE__ */ f("input", {
|
|
663
664
|
id: `${O}-fallback-${r}`,
|
|
664
665
|
type: "text",
|
|
665
666
|
value: e.fallbackValue,
|
|
@@ -677,68 +678,68 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
677
678
|
}, r))
|
|
678
679
|
})
|
|
679
680
|
})] })
|
|
680
|
-
}), /* @__PURE__ */
|
|
681
|
+
}), /* @__PURE__ */ f("div", {
|
|
681
682
|
className: "min-w-0",
|
|
682
|
-
children: /* @__PURE__ */
|
|
683
|
+
children: /* @__PURE__ */ p(r, { children: [/* @__PURE__ */ f(n, {
|
|
683
684
|
emphasis: "muted",
|
|
684
685
|
headingLevel: 2,
|
|
685
|
-
title:
|
|
686
|
+
title: s("bigconsole.pipelines.builder.preview.heading", "Preview"),
|
|
686
687
|
description: "What will be saved.",
|
|
687
688
|
"data-testid": "pipeline-preview",
|
|
688
|
-
children: /* @__PURE__ */
|
|
689
|
+
children: /* @__PURE__ */ p("dl", {
|
|
689
690
|
className: "flex flex-col gap-3 text-sm",
|
|
690
691
|
children: [
|
|
691
|
-
/* @__PURE__ */
|
|
692
|
+
/* @__PURE__ */ p("div", {
|
|
692
693
|
className: "min-w-0",
|
|
693
|
-
children: [/* @__PURE__ */
|
|
694
|
+
children: [/* @__PURE__ */ f("dt", {
|
|
694
695
|
className: "text-xs text-text-muted",
|
|
695
|
-
children:
|
|
696
|
-
}), /* @__PURE__ */
|
|
696
|
+
children: s("bigconsole.pipelines.builder.preview.nameLabel", "Name")
|
|
697
|
+
}), /* @__PURE__ */ f("dd", {
|
|
697
698
|
className: "break-words text-text-primary",
|
|
698
|
-
children: j ||
|
|
699
|
+
children: j || s("bigconsole.pipelines.builder.preview.untitled", "Untitled")
|
|
699
700
|
})]
|
|
700
701
|
}),
|
|
701
|
-
/* @__PURE__ */
|
|
702
|
+
/* @__PURE__ */ p("div", {
|
|
702
703
|
className: "min-w-0",
|
|
703
|
-
children: [/* @__PURE__ */
|
|
704
|
+
children: [/* @__PURE__ */ f("dt", {
|
|
704
705
|
className: "text-xs text-text-muted",
|
|
705
|
-
children:
|
|
706
|
-
}), /* @__PURE__ */
|
|
706
|
+
children: s("bigconsole.pipelines.builder.preview.statusLabel", "Status")
|
|
707
|
+
}), /* @__PURE__ */ f("dd", {
|
|
707
708
|
className: "mt-1",
|
|
708
|
-
children: /* @__PURE__ */
|
|
709
|
+
children: /* @__PURE__ */ f(re, {
|
|
709
710
|
status: F,
|
|
710
711
|
size: "sm"
|
|
711
712
|
})
|
|
712
713
|
})]
|
|
713
714
|
}),
|
|
714
|
-
/* @__PURE__ */
|
|
715
|
+
/* @__PURE__ */ p("div", {
|
|
715
716
|
className: "min-w-0",
|
|
716
|
-
children: [/* @__PURE__ */
|
|
717
|
+
children: [/* @__PURE__ */ f("dt", {
|
|
717
718
|
className: "text-xs text-text-muted",
|
|
718
|
-
children:
|
|
719
|
-
}), /* @__PURE__ */
|
|
719
|
+
children: s("bigconsole.pipelines.builder.preview.stagesLabel", "Stages")
|
|
720
|
+
}), /* @__PURE__ */ f("dd", {
|
|
720
721
|
className: "text-text-primary",
|
|
721
722
|
children: L.length
|
|
722
723
|
})]
|
|
723
724
|
}),
|
|
724
|
-
L.length > 0 && /* @__PURE__ */
|
|
725
|
+
L.length > 0 && /* @__PURE__ */ p("div", {
|
|
725
726
|
className: "min-w-0 border-t border-[var(--color-border-subtle)] pt-3",
|
|
726
|
-
children: [/* @__PURE__ */
|
|
727
|
+
children: [/* @__PURE__ */ f("dt", {
|
|
727
728
|
className: "text-xs text-text-muted",
|
|
728
|
-
children:
|
|
729
|
-
}), /* @__PURE__ */
|
|
729
|
+
children: s("bigconsole.pipelines.builder.preview.dataFlowLabel", "Data Flow")
|
|
730
|
+
}), /* @__PURE__ */ p("dd", {
|
|
730
731
|
className: "mt-1 flex flex-wrap items-center gap-1 text-xs",
|
|
731
|
-
children: [L.map((e, t) => /* @__PURE__ */
|
|
732
|
+
children: [L.map((e, t) => /* @__PURE__ */ p("span", {
|
|
732
733
|
className: "flex items-center gap-1",
|
|
733
|
-
children: [/* @__PURE__ */
|
|
734
|
+
children: [/* @__PURE__ */ f("code", {
|
|
734
735
|
className: "rounded-button bg-bg-surface px-1.5 py-0.5 font-mono break-all text-text-primary",
|
|
735
736
|
children: e.inputKey
|
|
736
|
-
}), /* @__PURE__ */
|
|
737
|
+
}), /* @__PURE__ */ f("span", {
|
|
737
738
|
"aria-hidden": "true",
|
|
738
739
|
className: "text-text-muted",
|
|
739
740
|
children: "→"
|
|
740
741
|
})]
|
|
741
|
-
}, t)), /* @__PURE__ */
|
|
742
|
+
}, t)), /* @__PURE__ */ f("code", {
|
|
742
743
|
className: "rounded-button bg-bg-surface px-1.5 py-0.5 font-mono break-all text-text-primary",
|
|
743
744
|
children: L[L.length - 1].outputKey
|
|
744
745
|
})]
|
|
@@ -746,19 +747,19 @@ var f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-med
|
|
|
746
747
|
})
|
|
747
748
|
]
|
|
748
749
|
})
|
|
749
|
-
}), /* @__PURE__ */
|
|
750
|
+
}), /* @__PURE__ */ f(n, {
|
|
750
751
|
emphasis: "muted",
|
|
751
752
|
padding: "compact",
|
|
752
753
|
headingLevel: 2,
|
|
753
|
-
title:
|
|
754
|
+
title: s("bigconsole.pipelines.builder.tips.heading", "Tips"),
|
|
754
755
|
"data-testid": "pipeline-builder-tips",
|
|
755
|
-
children: /* @__PURE__ */
|
|
756
|
+
children: /* @__PURE__ */ p("ul", {
|
|
756
757
|
className: "list-disc space-y-1 pl-4 text-sm text-text-secondary",
|
|
757
758
|
children: [
|
|
758
|
-
/* @__PURE__ */
|
|
759
|
-
/* @__PURE__ */
|
|
760
|
-
/* @__PURE__ */
|
|
761
|
-
/* @__PURE__ */
|
|
759
|
+
/* @__PURE__ */ f("li", { children: s("bigconsole.pipelines.builder.tips.item1", "Each stage processes the output of the previous stage") }),
|
|
760
|
+
/* @__PURE__ */ f("li", { children: s("bigconsole.pipelines.builder.tips.item2", "Use consistent input/output keys to chain data") }),
|
|
761
|
+
/* @__PURE__ */ f("li", { children: s("bigconsole.pipelines.builder.tips.item3", "Set error handling per stage for robustness") }),
|
|
762
|
+
/* @__PURE__ */ f("li", { children: s("bigconsole.pipelines.builder.tips.item4", "Disable stages to skip them during execution") })
|
|
762
763
|
]
|
|
763
764
|
})
|
|
764
765
|
})] })
|