@burdenoff/microfe-bigconsole 2026.1031.3 → 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.
@@ -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 { memo as o, useCallback as s, useEffect as ie, useId as ae, useMemo as oe, useState as c } from "react";
13
- import { useParams as se, useSearchParams as ce } from "react-router";
14
- import { AccessDenied as le } from "@burdenoff/fe-libs/shared/components";
15
- import { usePermissions as ue } from "@burdenoff/fe-libs/shared/providers/shell";
16
- import { Button as l, IllustratedEmptyState as de, PagePurpose as fe, Spinner as pe } from "@burdenoff/fe-libs/ui";
17
- import { useUnsavedChanges as me } from "@burdenoff/fe-libs/shared/hooks";
18
- import { useI18n as he } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
19
- import { Fragment as ge, jsx as u, jsxs as d } from "react/jsx-runtime";
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 f = "min-h-[var(--size-controlHeight-md)]", p = "mb-1 block text-sm font-medium text-text-primary", m = "mt-1 text-xs text-text-secondary", h = "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`, _e = `${v} hover:bg-[var(--color-status-error-bgSubtle)] hover:text-status-error-text`, ve = ({ className: e }) => /* @__PURE__ */ u("svg", {
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__ */ u("path", {
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__ */ u("svg", {
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__ */ u("path", {
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
- }), ye = ({ className: e }) => /* @__PURE__ */ u("svg", {
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__ */ u("path", {
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
- }), be = ({ className: e }) => /* @__PURE__ */ u("svg", {
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__ */ u("path", {
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
- }), xe = ({ className: e }) => /* @__PURE__ */ u("svg", {
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__ */ u("path", {
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__ */ u("svg", {
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__ */ u("path", {
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
- }), Se = [
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
- ], Ce = {
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
- }, C = o(function() {
127
- let { t: o } = he(), { pipelineId: v } = se(), C = e(), w = !!v && v !== "new", [T, we] = ce(), [E, Te] = c(null), D = w ? E ?? "default" : T.get("consoleId") || "default", O = ae(), { hasPermission: k, isLoading: Ee } = ue(), De = k(a.PIPELINE_READ), Oe = k(a.PIPELINE_CREATE), ke = k(a.PIPELINE_UPDATE), A = w ? ke : Oe, [j, M] = c(""), [N, P] = c(""), [F, I] = c("draft"), [L, R] = c([]), [z, Ae] = c(1), [B, V] = c(!1), [H, U] = c(null), [je, W] = c(w ? null : [
128
- "",
129
- "",
130
- "draft",
131
- [],
132
- 1
133
- ]);
134
- me({
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: o("bigconsole.assistant.unsaved.pipelineEditor", "the pipeline editor"),
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
- ], je)
148
+ ], G)
144
149
  });
145
- let { loading: Me, error: G, fetchPipeline: K, createPipeline: q, updatePipeline: J } = ee({
150
+ let { loading: Fe, error: K, fetchPipeline: q, createPipeline: J, updatePipeline: Y } = ee({
146
151
  consoleId: D,
147
152
  skipFetch: !0
148
- }), { parsers: Y } = i({
153
+ }), { parsers: X } = i({
149
154
  consoleId: D,
150
155
  skipFetch: w && !E
151
156
  });
152
- ie(() => {
153
- w && v && K(v).then((e) => {
154
- if (e) {
155
- Te(e.consoleId), M(e.name), P(e.description || ""), I(e.status), Ae(e.version);
156
- let t = (e.stages || []).map((e) => ({
157
- id: e.id,
158
- parserId: e.parserId,
159
- parserName: e.parserName || "",
160
- parserType: e.parserType,
161
- inputKey: e.inputKey,
162
- outputKey: e.outputKey,
163
- enabled: e.enabled,
164
- onError: e.onError,
165
- fallbackValue: e.fallbackValue ? JSON.stringify(e.fallbackValue) : "",
166
- description: e.description || ""
167
- }));
168
- R(t), W([
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
- K
181
+ q
181
182
  ]);
182
- let Ne = {
183
- draft: o("bigconsole.pipelines.builder.status.draft", "Draft"),
184
- active: o("bigconsole.pipelines.builder.status.active", "Active"),
185
- inactive: o("bigconsole.pipelines.builder.status.inactive", "Inactive"),
186
- error: o("bigconsole.pipelines.builder.status.error", "Error")
187
- }, Pe = {
188
- fail: o("bigconsole.pipelines.builder.onError.fail", "Fail"),
189
- skip: o("bigconsole.pipelines.builder.onError.skip", "Skip"),
190
- fallback: o("bigconsole.pipelines.builder.onError.fallback", "Fallback")
191
- }, X = oe(() => !j.trim() || L.length === 0 ? !1 : L.every((e) => e.parserId && e.inputKey && e.outputKey), [j, L]), Z = oe(() => j.trim() ? L.length === 0 ? "Add at least one stage to save this pipeline." : L.every((e) => e.parserId && e.inputKey && e.outputKey) ? null : "Every stage needs a parser, an input key and an output key." : "Give the pipeline a name to save it.", [j, L]), Q = s(() => {
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]), Fe = s(() => {
194
- R((e) => [...e, { ...Ce }]);
195
- }, []), Ie = s((e) => {
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
- }, []), Le = s((e, t) => {
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
- }, []), $ = s((e, t) => {
203
+ }, []), $ = c((e, t) => {
203
204
  R((n) => n.map((n, r) => r === e ? {
204
205
  ...n,
205
206
  ...t
206
207
  } : n));
207
- }, []), Re = s((e, t) => {
208
- let n = Y.find((e) => e.id === t);
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
- }, [Y, $]), ze = s(async () => {
215
- if (!(!X || !D || !A)) {
216
- V(!0), U(null);
215
+ }, [X, $]), Ue = c(async () => {
216
+ if (!(!Z || !D || !A)) {
217
+ V(!0), H(null);
217
218
  try {
218
- let e = L.map((e) => ({
219
- parserId: e.parserId,
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
- }, z) && (W([
234
- j,
235
- N,
236
- F,
237
- L,
238
- z
239
- ]), C(`/pipelines/${v}`));
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 q({
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
- j,
250
- N,
251
- F,
252
- L,
253
- z
254
- ]), C(`/pipelines/${t.id}`));
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
- U(e instanceof Error ? e.message : o("bigconsole.pipelines.builder.errors.saveFailed", "Failed to save pipeline"));
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
- X,
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
- o
274
+ s
277
275
  ]);
278
- return Me && w ? /* @__PURE__ */ u("div", {
276
+ if (Fe && w && G === null) return /* @__PURE__ */ f("div", {
279
277
  className: "p-card-padding",
280
- children: /* @__PURE__ */ d("div", {
278
+ children: /* @__PURE__ */ p("div", {
281
279
  className: "flex flex-col items-center justify-center py-16",
282
280
  role: "status",
283
- children: [/* @__PURE__ */ u(pe, { style: {
281
+ children: [/* @__PURE__ */ f(me, { style: {
284
282
  height: "var(--size-icon-xl)",
285
283
  width: "var(--size-icon-xl)"
286
- } }), /* @__PURE__ */ u("p", {
284
+ } }), /* @__PURE__ */ f("p", {
287
285
  className: "mt-form-gap text-sm text-text-secondary",
288
- children: o("bigconsole.pipelines.builder.loading", "Loading Pipeline...")
286
+ children: s("bigconsole.pipelines.builder.loading", "Loading Pipeline...")
289
287
  })]
290
288
  })
291
- }) : w && !Ee && !De ? /* @__PURE__ */ u(le, {
292
- title: o("bigconsole.pipelines.builder.accessDenied.title", "Access Denied"),
293
- description: o("bigconsole.pipelines.builder.accessDenied.description", "You don't have permission to view this pipeline.")
294
- }) : G ? /* @__PURE__ */ u("div", {
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__ */ u(n, {
297
+ children: /* @__PURE__ */ f(n, {
297
298
  tone: "danger",
298
299
  headingLevel: 2,
299
- title: o("bigconsole.pipelines.builder.errors.loadFailed", "Failed to load Pipeline"),
300
- description: G.message,
301
- icon: /* @__PURE__ */ u(x, { className: "h-icon-sm w-icon-sm" }),
302
- actions: /* @__PURE__ */ u(l, {
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: f,
305
- children: o("bigconsole.pipelines.builder.actions.backToPipelines", "Back to Pipelines")
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__ */ u("p", {
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__ */ u("div", {
314
+ }) : /* @__PURE__ */ f("div", {
314
315
  className: "p-card-padding",
315
- children: /* @__PURE__ */ d(r, { children: [
316
- /* @__PURE__ */ d("header", {
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__ */ d("div", {
319
+ children: [/* @__PURE__ */ p("div", {
319
320
  className: "flex min-w-0 flex-col gap-control-gap",
320
- children: [/* @__PURE__ */ d(l, {
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__ */ u(ve, { className: "h-icon-sm w-icon-sm" }), o("bigconsole.pipelines.builder.actions.backToPipelines", "Back to Pipelines")]
326
- }), /* @__PURE__ */ d("div", {
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__ */ u("h1", {
329
+ children: [/* @__PURE__ */ f("h1", {
329
330
  className: "text-2xl font-bold leading-tight text-text-primary",
330
- children: w ? o("bigconsole.pipelines.builder.header.editTitle", "Edit Pipeline") : o("bigconsole.pipelines.builder.header.createTitle", "Create Pipeline")
331
- }), /* @__PURE__ */ u("p", {
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 ? o("bigconsole.pipelines.builder.header.editSubtitle", "Update pipeline settings and stages") : o("bigconsole.pipelines.builder.header.createSubtitle", "Create a new data transformation pipeline")
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__ */ d("div", {
337
+ }), /* @__PURE__ */ p("div", {
337
338
  className: "flex flex-col gap-1 sm:items-end",
338
- children: [/* @__PURE__ */ d("div", {
339
+ children: [/* @__PURE__ */ p("div", {
339
340
  className: "flex flex-wrap items-center gap-control-gap",
340
- children: [/* @__PURE__ */ u(l, {
341
+ children: [/* @__PURE__ */ f(d, {
341
342
  variant: "secondary",
342
343
  onClick: Q,
343
- className: f,
344
- children: o("bigconsole.pipelines.builder.actions.cancel", "Cancel")
345
- }), /* @__PURE__ */ u(l, {
346
- onClick: ze,
347
- disabled: !X || B || !A,
348
- title: A ? void 0 : w ? o("bigconsole.pipelines.builder.actions.noUpdatePermission", "You don't have permission to update pipelines.") : o("bigconsole.pipelines.builder.actions.noCreatePermission", "You don't have permission to create pipelines."),
349
- className: f,
350
- children: B ? o("bigconsole.pipelines.builder.actions.saving", "Saving...") : w ? o("bigconsole.pipelines.builder.actions.saveChanges", "Save Changes") : o("bigconsole.pipelines.builder.actions.createPipeline", "Create Pipeline")
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
- }), Z && /* @__PURE__ */ u("p", {
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: Z
356
+ children: Re
356
357
  })]
357
358
  })]
358
359
  }),
359
- /* @__PURE__ */ u(fe, {
360
+ /* @__PURE__ */ f(pe, {
360
361
  className: "max-w-[75ch]",
361
- children: o("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
+ 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
- H && /* @__PURE__ */ u(n, {
364
+ Ge && /* @__PURE__ */ f(n, {
364
365
  tone: "danger",
365
366
  headingLevel: 2,
366
- title: o("bigconsole.pipelines.builder.errors.saveFailed", "Failed to save pipeline"),
367
- description: H,
368
- icon: /* @__PURE__ */ u(x, { className: "h-icon-sm w-icon-sm" }),
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__ */ d("div", {
372
+ /* @__PURE__ */ p("div", {
372
373
  className: "grid grid-cols-1 gap-section-gap lg:grid-cols-3",
373
- children: [/* @__PURE__ */ u("div", {
374
+ children: [/* @__PURE__ */ f("div", {
374
375
  className: "min-w-0 lg:col-span-2",
375
- children: /* @__PURE__ */ d(r, { children: [/* @__PURE__ */ u(n, {
376
+ children: /* @__PURE__ */ p(r, { children: [/* @__PURE__ */ f(n, {
376
377
  headingLevel: 2,
377
- title: o("bigconsole.pipelines.builder.basicInfo.heading", "Basic Information"),
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__ */ d("div", {
381
+ children: /* @__PURE__ */ p("div", {
381
382
  className: "flex flex-col gap-form-gap",
382
383
  children: [
383
- /* @__PURE__ */ u(ne, {
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), we(t), R([]);
389
+ t.set("consoleId", e), De(t), R([]);
389
390
  }
390
391
  }),
391
- /* @__PURE__ */ d("div", {
392
+ /* @__PURE__ */ p("div", {
392
393
  className: "min-w-0",
393
- children: [/* @__PURE__ */ d("label", {
394
+ children: [/* @__PURE__ */ p("label", {
394
395
  htmlFor: `${O}-name`,
395
- className: p,
396
+ className: h,
396
397
  children: [
397
- o("bigconsole.pipelines.builder.basicInfo.nameLabel", "Name"),
398
+ s("bigconsole.pipelines.builder.basicInfo.nameLabel", "Name"),
398
399
  " ",
399
- /* @__PURE__ */ u("span", {
400
+ /* @__PURE__ */ f("span", {
400
401
  className: "text-status-error-text",
401
402
  children: "*"
402
403
  })
403
404
  ]
404
- }), /* @__PURE__ */ u("input", {
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: o("bigconsole.pipelines.builder.basicInfo.namePlaceholder", "My Pipeline"),
410
+ placeholder: s("bigconsole.pipelines.builder.basicInfo.namePlaceholder", "My Pipeline"),
410
411
  className: g
411
412
  })]
412
413
  }),
413
- /* @__PURE__ */ d("div", {
414
+ /* @__PURE__ */ p("div", {
414
415
  className: "min-w-0",
415
- children: [/* @__PURE__ */ u("label", {
416
+ children: [/* @__PURE__ */ f("label", {
416
417
  htmlFor: `${O}-description`,
417
- className: p,
418
- children: o("bigconsole.pipelines.builder.basicInfo.descriptionLabel", "Description")
419
- }), /* @__PURE__ */ u("textarea", {
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: o("bigconsole.pipelines.builder.basicInfo.descriptionPlaceholder", "What does this pipeline do?"),
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__ */ d("div", {
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__ */ u("label", {
432
+ /* @__PURE__ */ f("label", {
432
433
  htmlFor: `${O}-status`,
433
- className: p,
434
- children: o("bigconsole.pipelines.builder.basicInfo.statusLabel", "Status")
434
+ className: h,
435
+ children: s("bigconsole.pipelines.builder.basicInfo.statusLabel", "Status")
435
436
  }),
436
- /* @__PURE__ */ u("select", {
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: Se.map((e) => /* @__PURE__ */ u("option", {
442
+ children: Te.map((e) => /* @__PURE__ */ f("option", {
442
443
  value: e.value,
443
- children: Ne[e.value]
444
+ children: Ie[e.value]
444
445
  }, e.value))
445
446
  }),
446
- /* @__PURE__ */ u("p", {
447
- className: m,
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__ */ u(n, {
455
+ }), /* @__PURE__ */ f(n, {
455
456
  emphasis: "primary",
456
457
  headingLevel: 2,
457
- title: o("bigconsole.pipelines.builder.stages.heading", "Stages ({{count}})", { count: L.length }),
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(l, {
460
+ actions: /* @__PURE__ */ p(d, {
460
461
  size: "sm",
461
- onClick: Fe,
462
- className: f,
463
- children: [/* @__PURE__ */ u(b, { className: "h-icon-sm w-icon-sm" }), o("bigconsole.pipelines.builder.stages.addStage", "Add Stage")]
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__ */ u(de, {
467
+ children: L.length === 0 ? /* @__PURE__ */ f(fe, {
467
468
  illustration: "empty-generic",
468
- title: o("bigconsole.pipelines.builder.stages.emptyTitle", "No stages yet"),
469
- description: o("bigconsole.pipelines.builder.stages.emptyDescription", "Add a stage to start building your pipeline."),
470
- action: /* @__PURE__ */ d(l, {
471
- onClick: Fe,
472
- className: f,
473
- children: [/* @__PURE__ */ u(b, { className: "h-icon-sm w-icon-sm" }), o("bigconsole.pipelines.builder.stages.addFirstStage", "Add First Stage")]
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__ */ u("ol", {
476
+ }) : /* @__PURE__ */ f("ol", {
476
477
  className: "flex flex-col gap-form-gap",
477
- children: L.map((e, r) => /* @__PURE__ */ u("li", {
478
+ children: L.map((e, r) => /* @__PURE__ */ f("li", {
478
479
  className: "min-w-0",
479
- children: /* @__PURE__ */ u(n, {
480
+ children: /* @__PURE__ */ f(n, {
480
481
  emphasis: "muted",
481
482
  padding: "compact",
482
483
  headingLevel: 3,
483
- title: /* @__PURE__ */ d("span", {
484
+ title: /* @__PURE__ */ p("span", {
484
485
  className: "flex min-w-0 items-center gap-icon-gap",
485
- children: [/* @__PURE__ */ u("span", {
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__ */ u("span", {
490
+ }), /* @__PURE__ */ f("span", {
490
491
  className: "min-w-0 truncate",
491
- children: e.parserName || o("bigconsole.pipelines.builder.stages.defaultStageName", "Stage {{number}}", { number: r + 1 })
492
+ children: e.parserName || s("bigconsole.pipelines.builder.stages.defaultStageName", "Stage {{number}}", { number: r + 1 })
492
493
  })]
493
494
  }),
494
- actions: /* @__PURE__ */ d(ge, { children: [
495
- /* @__PURE__ */ u("button", {
495
+ actions: /* @__PURE__ */ p(_e, { children: [
496
+ /* @__PURE__ */ f("button", {
496
497
  type: "button",
497
- onClick: () => Le(r, "up"),
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__ */ u(be, { className: "h-icon-sm w-icon-sm" })
502
+ children: /* @__PURE__ */ f(Ce, { className: "h-icon-sm w-icon-sm" })
502
503
  }),
503
- /* @__PURE__ */ u("button", {
504
+ /* @__PURE__ */ f("button", {
504
505
  type: "button",
505
- onClick: () => Le(r, "down"),
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__ */ u(xe, { className: "h-icon-sm w-icon-sm" })
510
+ children: /* @__PURE__ */ f(we, { className: "h-icon-sm w-icon-sm" })
510
511
  }),
511
- /* @__PURE__ */ u("button", {
512
+ /* @__PURE__ */ f("button", {
512
513
  type: "button",
513
- onClick: () => Ie(r),
514
- className: _e,
514
+ onClick: () => Be(r),
515
+ className: be,
515
516
  "aria-label": `Remove stage ${r + 1}`,
516
- children: /* @__PURE__ */ u(ye, { className: "h-icon-sm w-icon-sm" })
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__ */ d("div", {
521
+ children: /* @__PURE__ */ p("div", {
521
522
  className: "flex flex-col gap-form-gap",
522
523
  children: [
523
- /* @__PURE__ */ d("div", {
524
+ /* @__PURE__ */ p("div", {
524
525
  className: "min-w-0",
525
- children: [/* @__PURE__ */ d("label", {
526
+ children: [/* @__PURE__ */ p("label", {
526
527
  htmlFor: `${O}-parser-${r}`,
527
- className: p,
528
+ className: h,
528
529
  children: [
529
- o("bigconsole.pipelines.builder.stages.parserLabel", "Parser"),
530
+ s("bigconsole.pipelines.builder.stages.parserLabel", "Parser"),
530
531
  " ",
531
- /* @__PURE__ */ u("span", {
532
+ /* @__PURE__ */ f("span", {
532
533
  className: "text-status-error-text",
533
534
  children: "*"
534
535
  })
535
536
  ]
536
- }), /* @__PURE__ */ d("select", {
537
+ }), /* @__PURE__ */ p("select", {
537
538
  id: `${O}-parser-${r}`,
538
539
  value: e.parserId,
539
- onChange: (e) => Re(r, e.target.value),
540
+ onChange: (e) => He(r, e.target.value),
540
541
  className: g,
541
- children: [/* @__PURE__ */ u("option", {
542
+ children: [/* @__PURE__ */ f("option", {
542
543
  value: "",
543
- children: o("bigconsole.pipelines.builder.stages.parserPlaceholder", "Select a parser...")
544
- }), Y.map((e) => /* @__PURE__ */ d("option", {
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__ */ d("fieldset", {
556
+ /* @__PURE__ */ p("fieldset", {
556
557
  className: "min-w-0",
557
- children: [/* @__PURE__ */ u("legend", {
558
- className: h,
558
+ children: [/* @__PURE__ */ f("legend", {
559
+ className: ye,
559
560
  children: "Data contract"
560
- }), /* @__PURE__ */ d("div", {
561
+ }), /* @__PURE__ */ p("div", {
561
562
  className: "grid grid-cols-1 gap-form-gap sm:grid-cols-2",
562
- children: [/* @__PURE__ */ d("div", {
563
+ children: [/* @__PURE__ */ p("div", {
563
564
  className: "min-w-0",
564
- children: [/* @__PURE__ */ d("label", {
565
+ children: [/* @__PURE__ */ p("label", {
565
566
  htmlFor: `${O}-input-${r}`,
566
- className: p,
567
+ className: h,
567
568
  children: [
568
- o("bigconsole.pipelines.builder.stages.inputKeyLabel", "Input Key"),
569
+ s("bigconsole.pipelines.builder.stages.inputKeyLabel", "Input Key"),
569
570
  " ",
570
- /* @__PURE__ */ u("span", {
571
+ /* @__PURE__ */ f("span", {
571
572
  className: "text-status-error-text",
572
573
  children: "*"
573
574
  })
574
575
  ]
575
- }), /* @__PURE__ */ u("input", {
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: o("bigconsole.pipelines.builder.stages.inputKeyPlaceholder", "data"),
581
+ placeholder: s("bigconsole.pipelines.builder.stages.inputKeyPlaceholder", "data"),
581
582
  className: _
582
583
  })]
583
- }), /* @__PURE__ */ d("div", {
584
+ }), /* @__PURE__ */ p("div", {
584
585
  className: "min-w-0",
585
- children: [/* @__PURE__ */ d("label", {
586
+ children: [/* @__PURE__ */ p("label", {
586
587
  htmlFor: `${O}-output-${r}`,
587
- className: p,
588
+ className: h,
588
589
  children: [
589
- o("bigconsole.pipelines.builder.stages.outputKeyLabel", "Output Key"),
590
+ s("bigconsole.pipelines.builder.stages.outputKeyLabel", "Output Key"),
590
591
  " ",
591
- /* @__PURE__ */ u("span", {
592
+ /* @__PURE__ */ f("span", {
592
593
  className: "text-status-error-text",
593
594
  children: "*"
594
595
  })
595
596
  ]
596
- }), /* @__PURE__ */ u("input", {
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: o("bigconsole.pipelines.builder.stages.outputKeyPlaceholder", "result"),
602
+ placeholder: s("bigconsole.pipelines.builder.stages.outputKeyPlaceholder", "result"),
602
603
  className: _
603
604
  })]
604
605
  })]
605
606
  })]
606
607
  }),
607
- /* @__PURE__ */ d("fieldset", {
608
+ /* @__PURE__ */ p("fieldset", {
608
609
  className: "min-w-0",
609
- children: [/* @__PURE__ */ u("legend", {
610
- className: h,
610
+ children: [/* @__PURE__ */ f("legend", {
611
+ className: ye,
611
612
  children: "Failure policy"
612
- }), /* @__PURE__ */ d("div", {
613
+ }), /* @__PURE__ */ p("div", {
613
614
  className: "grid grid-cols-1 gap-form-gap sm:grid-cols-2",
614
615
  children: [
615
- /* @__PURE__ */ d("div", {
616
+ /* @__PURE__ */ p("div", {
616
617
  className: "min-w-0",
617
618
  children: [
618
- /* @__PURE__ */ u("label", {
619
+ /* @__PURE__ */ f("label", {
619
620
  htmlFor: `${O}-onerror-${r}`,
620
- className: p,
621
- children: o("bigconsole.pipelines.builder.stages.onErrorLabel", "On Error")
621
+ className: h,
622
+ children: s("bigconsole.pipelines.builder.stages.onErrorLabel", "On Error")
622
623
  }),
623
- /* @__PURE__ */ u("select", {
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__ */ u("option", {
629
+ children: S.map((e) => /* @__PURE__ */ f("option", {
629
630
  value: e.value,
630
- children: Pe[e.value]
631
+ children: Le[e.value]
631
632
  }, e.value))
632
633
  }),
633
- /* @__PURE__ */ u("p", {
634
- className: m,
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__ */ u("div", {
640
+ /* @__PURE__ */ f("div", {
640
641
  className: "flex min-w-0 items-start",
641
- children: /* @__PURE__ */ d("label", {
642
+ children: /* @__PURE__ */ p("label", {
642
643
  htmlFor: `${O}-enabled-${r}`,
643
- className: `flex cursor-pointer items-center gap-2 ${f}`,
644
- children: [/* @__PURE__ */ u("input", {
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__ */ u("span", {
651
+ }), /* @__PURE__ */ f("span", {
651
652
  className: "text-sm text-text-primary",
652
- children: o("bigconsole.pipelines.builder.stages.enabledLabel", "Enabled")
653
+ children: s("bigconsole.pipelines.builder.stages.enabledLabel", "Enabled")
653
654
  })]
654
655
  })
655
656
  }),
656
- e.onError === "fallback" && /* @__PURE__ */ d("div", {
657
+ e.onError === "fallback" && /* @__PURE__ */ p("div", {
657
658
  className: "min-w-0 sm:col-span-2",
658
- children: [/* @__PURE__ */ u("label", {
659
+ children: [/* @__PURE__ */ f("label", {
659
660
  htmlFor: `${O}-fallback-${r}`,
660
- className: p,
661
- children: o("bigconsole.pipelines.builder.stages.fallbackValueLabel", "Fallback Value (JSON)")
662
- }), /* @__PURE__ */ u("input", {
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__ */ u("div", {
681
+ }), /* @__PURE__ */ f("div", {
681
682
  className: "min-w-0",
682
- children: /* @__PURE__ */ d(r, { children: [/* @__PURE__ */ u(n, {
683
+ children: /* @__PURE__ */ p(r, { children: [/* @__PURE__ */ f(n, {
683
684
  emphasis: "muted",
684
685
  headingLevel: 2,
685
- title: o("bigconsole.pipelines.builder.preview.heading", "Preview"),
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__ */ d("dl", {
689
+ children: /* @__PURE__ */ p("dl", {
689
690
  className: "flex flex-col gap-3 text-sm",
690
691
  children: [
691
- /* @__PURE__ */ d("div", {
692
+ /* @__PURE__ */ p("div", {
692
693
  className: "min-w-0",
693
- children: [/* @__PURE__ */ u("dt", {
694
+ children: [/* @__PURE__ */ f("dt", {
694
695
  className: "text-xs text-text-muted",
695
- children: o("bigconsole.pipelines.builder.preview.nameLabel", "Name")
696
- }), /* @__PURE__ */ u("dd", {
696
+ children: s("bigconsole.pipelines.builder.preview.nameLabel", "Name")
697
+ }), /* @__PURE__ */ f("dd", {
697
698
  className: "break-words text-text-primary",
698
- children: j || o("bigconsole.pipelines.builder.preview.untitled", "Untitled")
699
+ children: j || s("bigconsole.pipelines.builder.preview.untitled", "Untitled")
699
700
  })]
700
701
  }),
701
- /* @__PURE__ */ d("div", {
702
+ /* @__PURE__ */ p("div", {
702
703
  className: "min-w-0",
703
- children: [/* @__PURE__ */ u("dt", {
704
+ children: [/* @__PURE__ */ f("dt", {
704
705
  className: "text-xs text-text-muted",
705
- children: o("bigconsole.pipelines.builder.preview.statusLabel", "Status")
706
- }), /* @__PURE__ */ u("dd", {
706
+ children: s("bigconsole.pipelines.builder.preview.statusLabel", "Status")
707
+ }), /* @__PURE__ */ f("dd", {
707
708
  className: "mt-1",
708
- children: /* @__PURE__ */ u(re, {
709
+ children: /* @__PURE__ */ f(re, {
709
710
  status: F,
710
711
  size: "sm"
711
712
  })
712
713
  })]
713
714
  }),
714
- /* @__PURE__ */ d("div", {
715
+ /* @__PURE__ */ p("div", {
715
716
  className: "min-w-0",
716
- children: [/* @__PURE__ */ u("dt", {
717
+ children: [/* @__PURE__ */ f("dt", {
717
718
  className: "text-xs text-text-muted",
718
- children: o("bigconsole.pipelines.builder.preview.stagesLabel", "Stages")
719
- }), /* @__PURE__ */ u("dd", {
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__ */ d("div", {
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__ */ u("dt", {
727
+ children: [/* @__PURE__ */ f("dt", {
727
728
  className: "text-xs text-text-muted",
728
- children: o("bigconsole.pipelines.builder.preview.dataFlowLabel", "Data Flow")
729
- }), /* @__PURE__ */ d("dd", {
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__ */ d("span", {
732
+ children: [L.map((e, t) => /* @__PURE__ */ p("span", {
732
733
  className: "flex items-center gap-1",
733
- children: [/* @__PURE__ */ u("code", {
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__ */ u("span", {
737
+ }), /* @__PURE__ */ f("span", {
737
738
  "aria-hidden": "true",
738
739
  className: "text-text-muted",
739
740
  children: "→"
740
741
  })]
741
- }, t)), /* @__PURE__ */ u("code", {
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__ */ u(n, {
750
+ }), /* @__PURE__ */ f(n, {
750
751
  emphasis: "muted",
751
752
  padding: "compact",
752
753
  headingLevel: 2,
753
- title: o("bigconsole.pipelines.builder.tips.heading", "Tips"),
754
+ title: s("bigconsole.pipelines.builder.tips.heading", "Tips"),
754
755
  "data-testid": "pipeline-builder-tips",
755
- children: /* @__PURE__ */ d("ul", {
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__ */ u("li", { children: o("bigconsole.pipelines.builder.tips.item1", "Each stage processes the output of the previous stage") }),
759
- /* @__PURE__ */ u("li", { children: o("bigconsole.pipelines.builder.tips.item2", "Use consistent input/output keys to chain data") }),
760
- /* @__PURE__ */ u("li", { children: o("bigconsole.pipelines.builder.tips.item3", "Set error handling per stage for robustness") }),
761
- /* @__PURE__ */ u("li", { children: o("bigconsole.pipelines.builder.tips.item4", "Disable stages to skip them during execution") })
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
  })] })