@burdenoff/microfe-bigconsole 2026.804.2 → 2026.805.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/bigconsole/AdminRoot.js +21 -16
  2. package/dist/bigconsole/AdminRoot.js.map +1 -1
  3. package/dist/bigconsole/BigConsoleRoot.js +44 -39
  4. package/dist/bigconsole/BigConsoleRoot.js.map +1 -1
  5. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +115 -100
  6. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  7. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +100 -98
  8. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  9. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +164 -161
  10. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  11. package/dist/bigconsole/components/datasink/DataSinkCard.js +20 -20
  12. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  13. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +216 -49
  14. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  15. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +96 -90
  16. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  17. package/dist/bigconsole/components/widgets/WidgetMenu.js +87 -76
  18. package/dist/bigconsole/components/widgets/WidgetMenu.js.map +1 -1
  19. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +120 -118
  20. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  21. package/dist/bigconsole/pages/DashboardBuilderPage.js +113 -104
  22. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  23. package/dist/bigconsole/pages/DashboardViewPage.js +208 -199
  24. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  25. package/dist/bigconsole/pages/DashboardsPage.js +376 -325
  26. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  27. package/dist/bigconsole/pages/DataParsersPage.js +135 -125
  28. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  29. package/dist/bigconsole/pages/DataSinkBuilderPage.js +182 -172
  30. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  31. package/dist/bigconsole/pages/DataSinkViewPage.js +233 -198
  32. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  33. package/dist/bigconsole/pages/DataSinksPage.js +281 -268
  34. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  35. package/dist/bigconsole/pages/ParserBuilderPage.js +238 -223
  36. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  37. package/dist/bigconsole/pages/ParserViewPage.js +162 -144
  38. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  39. package/dist/bigconsole/pages/PipelineBuilderPage.js +212 -204
  40. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  41. package/dist/bigconsole/pages/PipelineViewPage.js +191 -183
  42. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  43. package/dist/bigconsole/pages/PipelinesPage.js +128 -103
  44. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  45. package/dist/bigconsole/pages/WorkflowViewPage.js +238 -217
  46. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  47. package/dist/bigconsole/pages/WorkflowsPage.js +116 -102
  48. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  49. package/dist/bigconsole/utils/csv.js +91 -0
  50. package/dist/bigconsole/utils/csv.js.map +1 -0
  51. package/dist/constants/permissions.js +83 -0
  52. package/dist/constants/permissions.js.map +1 -0
  53. package/package.json +2 -2
@@ -2,79 +2,82 @@ import { useAppNavigate as e } from "../contexts/NavigationContext.js";
2
2
  import "../contexts/index.js";
3
3
  import t from "../hooks/useParserOperations.js";
4
4
  import n from "../hooks/usePipelineOperations.js";
5
- import r from "../components/pipeline/PipelineStatusBadge.js";
6
- import { memo as i, useCallback as a, useEffect as o, useMemo as s, useState as c } from "react";
5
+ import { BIGCONSOLE_PERMISSIONS as r } from "../../constants/permissions.js";
6
+ import i from "../components/pipeline/PipelineStatusBadge.js";
7
+ import { memo as a, useCallback as o, useEffect as s, useMemo as ee, useState as c } from "react";
7
8
  import { useParams as l } from "react-router";
8
- import { GlassCard as u, IllustratedEmptyState as d, PagePurpose as f } from "@burdenoff/fe-libs/ui";
9
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
9
+ import { AccessDenied as te } from "@burdenoff/fe-libs/shared/components";
10
+ import { usePermissions as u } from "@burdenoff/fe-libs/shared/providers/shell";
11
+ import { GlassCard as d, IllustratedEmptyState as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
12
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
10
13
  //#region src/bigconsole/pages/PipelineBuilderPage.tsx
11
- var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
14
+ var g = ({ className: e }) => /* @__PURE__ */ m("svg", {
12
15
  className: e,
13
16
  fill: "none",
14
17
  stroke: "currentColor",
15
18
  viewBox: "0 0 24 24",
16
- children: /* @__PURE__ */ p("path", {
19
+ children: /* @__PURE__ */ m("path", {
17
20
  strokeLinecap: "round",
18
21
  strokeLinejoin: "round",
19
22
  strokeWidth: 2,
20
23
  d: "M10 19l-7-7m0 0l7-7m-7 7h18"
21
24
  })
22
- }), g = ({ className: e }) => /* @__PURE__ */ p("svg", {
25
+ }), _ = ({ className: e }) => /* @__PURE__ */ m("svg", {
23
26
  className: e,
24
27
  fill: "none",
25
28
  stroke: "currentColor",
26
29
  viewBox: "0 0 24 24",
27
- children: /* @__PURE__ */ p("path", {
30
+ children: /* @__PURE__ */ m("path", {
28
31
  strokeLinecap: "round",
29
32
  strokeLinejoin: "round",
30
33
  strokeWidth: 2,
31
34
  d: "M12 4v16m8-8H4"
32
35
  })
33
- }), _ = ({ className: e }) => /* @__PURE__ */ p("svg", {
36
+ }), ne = ({ className: e }) => /* @__PURE__ */ m("svg", {
34
37
  className: e,
35
38
  fill: "none",
36
39
  stroke: "currentColor",
37
40
  viewBox: "0 0 24 24",
38
- children: /* @__PURE__ */ p("path", {
41
+ children: /* @__PURE__ */ m("path", {
39
42
  strokeLinecap: "round",
40
43
  strokeLinejoin: "round",
41
44
  strokeWidth: 2,
42
45
  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"
43
46
  })
44
- }), v = ({ className: e }) => /* @__PURE__ */ p("svg", {
47
+ }), re = ({ className: e }) => /* @__PURE__ */ m("svg", {
45
48
  className: e,
46
49
  fill: "none",
47
50
  stroke: "currentColor",
48
51
  viewBox: "0 0 24 24",
49
- children: /* @__PURE__ */ p("path", {
52
+ children: /* @__PURE__ */ m("path", {
50
53
  strokeLinecap: "round",
51
54
  strokeLinejoin: "round",
52
55
  strokeWidth: 2,
53
56
  d: "M5 15l7-7 7 7"
54
57
  })
55
- }), y = ({ className: e }) => /* @__PURE__ */ p("svg", {
58
+ }), ie = ({ className: e }) => /* @__PURE__ */ m("svg", {
56
59
  className: e,
57
60
  fill: "none",
58
61
  stroke: "currentColor",
59
62
  viewBox: "0 0 24 24",
60
- children: /* @__PURE__ */ p("path", {
63
+ children: /* @__PURE__ */ m("path", {
61
64
  strokeLinecap: "round",
62
65
  strokeLinejoin: "round",
63
66
  strokeWidth: 2,
64
67
  d: "M19 9l-7 7-7-7"
65
68
  })
66
- }), b = ({ className: e }) => /* @__PURE__ */ p("svg", {
69
+ }), ae = ({ className: e }) => /* @__PURE__ */ m("svg", {
67
70
  className: e,
68
71
  fill: "none",
69
72
  stroke: "currentColor",
70
73
  viewBox: "0 0 24 24",
71
- children: /* @__PURE__ */ p("path", {
74
+ children: /* @__PURE__ */ m("path", {
72
75
  strokeLinecap: "round",
73
76
  strokeLinejoin: "round",
74
77
  strokeWidth: 2,
75
78
  d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
76
79
  })
77
- }), x = [
80
+ }), oe = [
78
81
  {
79
82
  value: "draft",
80
83
  label: "Draft"
@@ -87,7 +90,7 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
87
90
  value: "inactive",
88
91
  label: "Inactive"
89
92
  }
90
- ], S = [
93
+ ], v = [
91
94
  {
92
95
  value: "fail",
93
96
  label: "Fail",
@@ -103,7 +106,7 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
103
106
  label: "Fallback",
104
107
  description: "Use fallback value on error"
105
108
  }
106
- ], C = {
109
+ ], y = {
107
110
  parserId: "",
108
111
  parserName: "",
109
112
  parserType: null,
@@ -113,14 +116,14 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
113
116
  onError: "fail",
114
117
  fallbackValue: "",
115
118
  description: ""
116
- }, w = i(function() {
117
- let { pipelineId: i } = l(), w = e(), T = !!i && i !== "new", E = "default", [D, O] = c(""), [k, A] = c(""), [j, M] = c("draft"), [N, P] = c([]), [F, I] = c(1), [L, R] = c(!1), [z, B] = c(null), { loading: V, error: H, fetchPipeline: U, createPipeline: W, updatePipeline: G } = n({
118
- consoleId: E,
119
+ }, b = a(function() {
120
+ let { pipelineId: a } = l(), b = e(), x = !!a && a !== "new", S = "default", { hasPermission: C, isLoading: w } = u(), T = C(r.PIPELINE_READ), E = C(r.PIPELINE_CREATE), D = C(r.PIPELINE_UPDATE), O = x ? D : E, [k, A] = c(""), [j, M] = c(""), [N, P] = c("draft"), [F, I] = c([]), [L, R] = c(1), [z, B] = c(!1), [V, H] = c(null), { loading: U, error: W, fetchPipeline: G, createPipeline: K, updatePipeline: q } = n({
121
+ consoleId: S,
119
122
  skipFetch: !0
120
- }), { parsers: K } = t({ consoleId: E });
121
- o(() => {
122
- T && i && U(i).then((e) => {
123
- e && (O(e.name), A(e.description || ""), M(e.status), I(e.version), P((e.stages || []).map((e) => ({
123
+ }), { parsers: J } = t({ consoleId: S });
124
+ s(() => {
125
+ x && a && G(a).then((e) => {
126
+ e && (A(e.name), M(e.description || ""), P(e.status), R(e.version), I((e.stages || []).map((e) => ({
124
127
  id: e.id,
125
128
  parserId: e.parserId,
126
129
  parserName: e.parserName || "",
@@ -134,38 +137,38 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
134
137
  }))));
135
138
  });
136
139
  }, [
137
- T,
138
- i,
139
- U
140
+ x,
141
+ a,
142
+ G
140
143
  ]);
141
- let q = s(() => !D.trim() || N.length === 0 ? !1 : N.every((e) => e.parserId && e.inputKey && e.outputKey), [D, N]), J = a(() => {
142
- w("/pipelines");
143
- }, [w]), Y = a(() => {
144
- P((e) => [...e, { ...C }]);
145
- }, []), X = a((e) => {
146
- P((t) => t.filter((t, n) => n !== e));
147
- }, []), Z = a((e, t) => {
148
- P((n) => {
144
+ let Y = ee(() => !k.trim() || F.length === 0 ? !1 : F.every((e) => e.parserId && e.inputKey && e.outputKey), [k, F]), X = o(() => {
145
+ b("/pipelines");
146
+ }, [b]), Z = o(() => {
147
+ I((e) => [...e, { ...y }]);
148
+ }, []), se = o((e) => {
149
+ I((t) => t.filter((t, n) => n !== e));
150
+ }, []), Q = o((e, t) => {
151
+ I((n) => {
149
152
  let r = [...n], i = t === "up" ? e - 1 : e + 1;
150
153
  return i < 0 || i >= r.length ? n : ([r[e], r[i]] = [r[i], r[e]], r);
151
154
  });
152
- }, []), Q = a((e, t) => {
153
- P((n) => n.map((n, r) => r === e ? {
155
+ }, []), $ = o((e, t) => {
156
+ I((n) => n.map((n, r) => r === e ? {
154
157
  ...n,
155
158
  ...t
156
159
  } : n));
157
- }, []), $ = a((e, t) => {
158
- let n = K.find((e) => e.id === t);
159
- n && Q(e, {
160
+ }, []), ce = o((e, t) => {
161
+ let n = J.find((e) => e.id === t);
162
+ n && $(e, {
160
163
  parserId: n.id,
161
164
  parserName: n.name,
162
165
  parserType: n.type
163
166
  });
164
- }, [K, Q]), ee = a(async () => {
165
- if (q) {
166
- R(!0), B(null);
167
+ }, [J, $]), le = o(async () => {
168
+ if (!(!Y || !O)) {
169
+ B(!0), H(null);
167
170
  try {
168
- let e = N.map((e) => ({
171
+ let e = F.map((e) => ({
169
172
  parserId: e.parserId,
170
173
  parserName: e.parserName,
171
174
  parserType: e.parserType || void 0,
@@ -176,274 +179,279 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
176
179
  fallbackValue: e.fallbackValue ? JSON.parse(e.fallbackValue) : void 0,
177
180
  description: e.description || void 0
178
181
  }));
179
- if (T && i) await G(i, {
180
- name: D,
181
- description: k || void 0,
182
- status: j
183
- }, F) && w(`/pipelines/${i}`);
182
+ if (x && a) await q(a, {
183
+ name: k,
184
+ description: j || void 0,
185
+ status: N
186
+ }, L) && b(`/pipelines/${a}`);
184
187
  else {
185
- let t = await W({
186
- consoleId: E,
187
- name: D,
188
- description: k || void 0,
189
- status: j,
188
+ let t = await K({
189
+ consoleId: S,
190
+ name: k,
191
+ description: j || void 0,
192
+ status: N,
190
193
  stages: e
191
194
  });
192
- t && w(`/pipelines/${t.id}`);
195
+ t && b(`/pipelines/${t.id}`);
193
196
  }
194
197
  } catch (e) {
195
- B(e instanceof Error ? e.message : "Failed to save pipeline");
198
+ H(e instanceof Error ? e.message : "Failed to save pipeline");
196
199
  } finally {
197
- R(!1);
200
+ B(!1);
198
201
  }
199
202
  }
200
203
  }, [
201
- q,
202
- E,
203
- T,
204
- i,
205
- D,
204
+ Y,
205
+ S,
206
+ O,
207
+ x,
208
+ a,
206
209
  k,
207
210
  j,
208
211
  N,
209
212
  F,
210
- W,
211
- G,
212
- w
213
+ L,
214
+ K,
215
+ q,
216
+ b
213
217
  ]);
214
- return V && T ? /* @__PURE__ */ p("div", {
218
+ return U && x ? /* @__PURE__ */ m("div", {
215
219
  className: "p-6",
216
- children: /* @__PURE__ */ m("div", {
220
+ children: /* @__PURE__ */ h("div", {
217
221
  className: "flex flex-col items-center justify-center py-16",
218
- children: [/* @__PURE__ */ m("svg", {
222
+ children: [/* @__PURE__ */ h("svg", {
219
223
  className: "w-8 h-8 text-action-primary-bg animate-spin mb-4",
220
224
  fill: "none",
221
225
  viewBox: "0 0 24 24",
222
- children: [/* @__PURE__ */ p("circle", {
226
+ children: [/* @__PURE__ */ m("circle", {
223
227
  className: "opacity-25",
224
228
  cx: "12",
225
229
  cy: "12",
226
230
  r: "10",
227
231
  stroke: "currentColor",
228
232
  strokeWidth: "4"
229
- }), /* @__PURE__ */ p("path", {
233
+ }), /* @__PURE__ */ m("path", {
230
234
  className: "opacity-75",
231
235
  fill: "currentColor",
232
236
  d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
233
237
  })]
234
- }), /* @__PURE__ */ p("p", {
238
+ }), /* @__PURE__ */ m("p", {
235
239
  className: "text-sm text-text-secondary",
236
240
  children: "Loading Pipeline..."
237
241
  })]
238
242
  })
239
- }) : H ? /* @__PURE__ */ p("div", {
243
+ }) : x && !w && !T ? /* @__PURE__ */ m(te, {
244
+ title: "Access Denied",
245
+ description: "You don't have permission to view this pipeline."
246
+ }) : W ? /* @__PURE__ */ m("div", {
240
247
  className: "p-6",
241
- children: /* @__PURE__ */ m("div", {
248
+ children: /* @__PURE__ */ h("div", {
242
249
  className: "flex flex-col items-center justify-center py-16 text-center",
243
250
  children: [
244
- /* @__PURE__ */ p("div", {
251
+ /* @__PURE__ */ m("div", {
245
252
  className: "p-3 rounded-full bg-status-error-bg/10 mb-4",
246
- children: /* @__PURE__ */ p(b, { className: "w-8 h-8 text-status-error-text" })
253
+ children: /* @__PURE__ */ m(ae, { className: "w-8 h-8 text-status-error-text" })
247
254
  }),
248
- /* @__PURE__ */ p("h3", {
255
+ /* @__PURE__ */ m("h3", {
249
256
  className: "text-lg font-medium text-text-primary mb-2",
250
257
  children: "Failed to load Pipeline"
251
258
  }),
252
- /* @__PURE__ */ p("p", {
259
+ /* @__PURE__ */ m("p", {
253
260
  className: "text-sm text-text-secondary mb-4",
254
- children: H.message
261
+ children: W.message
255
262
  }),
256
- /* @__PURE__ */ p("button", {
263
+ /* @__PURE__ */ m("button", {
257
264
  type: "button",
258
- onClick: J,
265
+ onClick: X,
259
266
  className: "px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors",
260
267
  children: "Back to Pipelines"
261
268
  })
262
269
  ]
263
270
  })
264
- }) : /* @__PURE__ */ m("div", {
271
+ }) : /* @__PURE__ */ h("div", {
265
272
  className: "p-6",
266
273
  children: [
267
- /* @__PURE__ */ m("div", {
274
+ /* @__PURE__ */ h("div", {
268
275
  className: "flex items-center justify-between mb-6",
269
- children: [/* @__PURE__ */ m("div", {
276
+ children: [/* @__PURE__ */ h("div", {
270
277
  className: "flex items-center gap-4",
271
- children: [/* @__PURE__ */ p("button", {
278
+ children: [/* @__PURE__ */ m("button", {
272
279
  type: "button",
273
- onClick: J,
280
+ onClick: X,
274
281
  className: "p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-md transition-colors",
275
- children: /* @__PURE__ */ p(h, { className: "w-5 h-5" })
276
- }), /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
282
+ children: /* @__PURE__ */ m(g, { className: "w-5 h-5" })
283
+ }), /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("h1", {
277
284
  className: "text-2xl font-bold text-text-primary",
278
- children: T ? "Edit Pipeline" : "Create Pipeline"
279
- }), /* @__PURE__ */ p("p", {
285
+ children: x ? "Edit Pipeline" : "Create Pipeline"
286
+ }), /* @__PURE__ */ m("p", {
280
287
  className: "text-sm text-text-secondary mt-1",
281
- children: T ? "Update pipeline settings and stages" : "Create a new data transformation pipeline"
288
+ children: x ? "Update pipeline settings and stages" : "Create a new data transformation pipeline"
282
289
  })] })]
283
- }), /* @__PURE__ */ m("div", {
290
+ }), /* @__PURE__ */ h("div", {
284
291
  className: "flex items-center gap-2",
285
- children: [/* @__PURE__ */ p("button", {
292
+ children: [/* @__PURE__ */ m("button", {
286
293
  type: "button",
287
- onClick: J,
294
+ onClick: X,
288
295
  className: "px-4 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors",
289
296
  children: "Cancel"
290
- }), /* @__PURE__ */ p("button", {
297
+ }), /* @__PURE__ */ m("button", {
291
298
  type: "button",
292
- onClick: ee,
293
- disabled: !q || L,
294
- className: "px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors disabled:opacity-50",
295
- children: L ? "Saving..." : T ? "Save Changes" : "Create Pipeline"
299
+ onClick: le,
300
+ disabled: !Y || z || !O,
301
+ title: O ? void 0 : `You don't have permission to ${x ? "update" : "create"} pipelines.`,
302
+ className: "px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
303
+ children: z ? "Saving..." : x ? "Save Changes" : "Create Pipeline"
296
304
  })]
297
305
  })]
298
306
  }),
299
- /* @__PURE__ */ p(f, {
307
+ /* @__PURE__ */ m(p, {
300
308
  className: "mb-6",
301
309
  children: "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."
302
310
  }),
303
- z && /* @__PURE__ */ p("div", {
311
+ V && /* @__PURE__ */ m("div", {
304
312
  className: "mb-6 p-4 bg-status-error-bg/10 border border-status-error-border/20 rounded-md",
305
- children: /* @__PURE__ */ p("p", {
313
+ children: /* @__PURE__ */ m("p", {
306
314
  className: "text-sm text-status-error-text",
307
- children: z
315
+ children: V
308
316
  })
309
317
  }),
310
- /* @__PURE__ */ m("div", {
318
+ /* @__PURE__ */ h("div", {
311
319
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
312
- children: [/* @__PURE__ */ m("div", {
320
+ children: [/* @__PURE__ */ h("div", {
313
321
  className: "lg:col-span-2 space-y-6",
314
- children: [/* @__PURE__ */ m("div", {
322
+ children: [/* @__PURE__ */ h("div", {
315
323
  className: "bg-bg-surface border border-border-default rounded-lg p-6",
316
- children: [/* @__PURE__ */ p("h2", {
324
+ children: [/* @__PURE__ */ m("h2", {
317
325
  className: "text-lg font-semibold text-text-primary mb-4",
318
326
  children: "Basic Information"
319
- }), /* @__PURE__ */ m("div", {
327
+ }), /* @__PURE__ */ h("div", {
320
328
  className: "space-y-4",
321
329
  children: [
322
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("label", {
330
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("label", {
323
331
  className: "block text-sm font-medium text-text-primary mb-2",
324
- children: ["Name ", /* @__PURE__ */ p("span", {
332
+ children: ["Name ", /* @__PURE__ */ m("span", {
325
333
  className: "text-status-error-text",
326
334
  children: "*"
327
335
  })]
328
- }), /* @__PURE__ */ p("input", {
336
+ }), /* @__PURE__ */ m("input", {
329
337
  type: "text",
330
- value: D,
331
- onChange: (e) => O(e.target.value),
338
+ value: k,
339
+ onChange: (e) => A(e.target.value),
332
340
  placeholder: "My Pipeline",
333
341
  className: "w-full px-3 py-2 text-sm text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
334
342
  })] }),
335
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
343
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
336
344
  className: "block text-sm font-medium text-text-primary mb-2",
337
345
  children: "Description"
338
- }), /* @__PURE__ */ p("textarea", {
339
- value: k,
340
- onChange: (e) => A(e.target.value),
346
+ }), /* @__PURE__ */ m("textarea", {
347
+ value: j,
348
+ onChange: (e) => M(e.target.value),
341
349
  placeholder: "What does this pipeline do?",
342
350
  rows: 3,
343
351
  className: "w-full px-3 py-2 text-sm text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none"
344
352
  })] }),
345
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
353
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
346
354
  className: "block text-sm font-medium text-text-primary mb-2",
347
355
  children: "Status"
348
- }), /* @__PURE__ */ p("select", {
349
- value: j,
350
- onChange: (e) => M(e.target.value),
356
+ }), /* @__PURE__ */ m("select", {
357
+ value: N,
358
+ onChange: (e) => P(e.target.value),
351
359
  className: "w-full px-3 py-2 text-sm text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
352
- children: x.map((e) => /* @__PURE__ */ p("option", {
360
+ children: oe.map((e) => /* @__PURE__ */ m("option", {
353
361
  value: e.value,
354
362
  children: e.label
355
363
  }, e.value))
356
364
  })] })
357
365
  ]
358
366
  })]
359
- }), /* @__PURE__ */ m(u, {
367
+ }), /* @__PURE__ */ h(d, {
360
368
  treatment: "glass",
361
369
  glow: !0,
362
370
  className: "p-6",
363
- children: [/* @__PURE__ */ m("div", {
371
+ children: [/* @__PURE__ */ h("div", {
364
372
  className: "flex items-center justify-between mb-4",
365
- children: [/* @__PURE__ */ m("h2", {
373
+ children: [/* @__PURE__ */ h("h2", {
366
374
  className: "text-lg font-semibold text-text-primary",
367
375
  children: [
368
376
  "Stages (",
369
- N.length,
377
+ F.length,
370
378
  ")"
371
379
  ]
372
- }), /* @__PURE__ */ m("button", {
380
+ }), /* @__PURE__ */ h("button", {
373
381
  type: "button",
374
- onClick: Y,
382
+ onClick: Z,
375
383
  className: "inline-flex items-center gap-2 px-3 py-1.5 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors",
376
- children: [/* @__PURE__ */ p(g, { className: "w-4 h-4" }), "Add Stage"]
384
+ children: [/* @__PURE__ */ m(_, { className: "w-4 h-4" }), "Add Stage"]
377
385
  })]
378
- }), N.length === 0 ? /* @__PURE__ */ p(d, {
386
+ }), F.length === 0 ? /* @__PURE__ */ m(f, {
379
387
  illustration: "empty-generic",
380
388
  title: "No stages yet",
381
389
  description: "Add a stage to start building your pipeline.",
382
- action: /* @__PURE__ */ m("button", {
390
+ action: /* @__PURE__ */ h("button", {
383
391
  type: "button",
384
- onClick: Y,
392
+ onClick: Z,
385
393
  className: "inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors",
386
- children: [/* @__PURE__ */ p(g, { className: "w-4 h-4" }), "Add First Stage"]
394
+ children: [/* @__PURE__ */ m(_, { className: "w-4 h-4" }), "Add First Stage"]
387
395
  })
388
- }) : /* @__PURE__ */ p("div", {
396
+ }) : /* @__PURE__ */ m("div", {
389
397
  className: "space-y-4",
390
- children: N.map((e, t) => /* @__PURE__ */ m("div", {
398
+ children: F.map((e, t) => /* @__PURE__ */ h("div", {
391
399
  className: "p-4 bg-bg-sunken border border-border-default rounded-lg",
392
- children: [/* @__PURE__ */ m("div", {
400
+ children: [/* @__PURE__ */ h("div", {
393
401
  className: "flex items-center justify-between mb-4",
394
- children: [/* @__PURE__ */ m("div", {
402
+ children: [/* @__PURE__ */ h("div", {
395
403
  className: "flex items-center gap-2",
396
- children: [/* @__PURE__ */ p("span", {
404
+ children: [/* @__PURE__ */ m("span", {
397
405
  className: "w-6 h-6 flex items-center justify-center text-xs font-medium bg-action-primary-bg/10 text-action-primary-bg rounded-full",
398
406
  children: t + 1
399
- }), /* @__PURE__ */ p("span", {
407
+ }), /* @__PURE__ */ m("span", {
400
408
  className: "font-medium text-text-primary",
401
409
  children: e.parserName || `Stage ${t + 1}`
402
410
  })]
403
- }), /* @__PURE__ */ m("div", {
411
+ }), /* @__PURE__ */ h("div", {
404
412
  className: "flex items-center gap-1",
405
413
  children: [
406
- /* @__PURE__ */ p("button", {
414
+ /* @__PURE__ */ m("button", {
407
415
  type: "button",
408
- onClick: () => Z(t, "up"),
416
+ onClick: () => Q(t, "up"),
409
417
  disabled: t === 0,
410
418
  className: "p-1 text-text-secondary hover:text-text-primary hover:bg-bg-surface rounded disabled:opacity-30",
411
- children: /* @__PURE__ */ p(v, { className: "w-4 h-4" })
419
+ children: /* @__PURE__ */ m(re, { className: "w-4 h-4" })
412
420
  }),
413
- /* @__PURE__ */ p("button", {
421
+ /* @__PURE__ */ m("button", {
414
422
  type: "button",
415
- onClick: () => Z(t, "down"),
416
- disabled: t === N.length - 1,
423
+ onClick: () => Q(t, "down"),
424
+ disabled: t === F.length - 1,
417
425
  className: "p-1 text-text-secondary hover:text-text-primary hover:bg-bg-surface rounded disabled:opacity-30",
418
- children: /* @__PURE__ */ p(y, { className: "w-4 h-4" })
426
+ children: /* @__PURE__ */ m(ie, { className: "w-4 h-4" })
419
427
  }),
420
- /* @__PURE__ */ p("button", {
428
+ /* @__PURE__ */ m("button", {
421
429
  type: "button",
422
- onClick: () => X(t),
430
+ onClick: () => se(t),
423
431
  className: "p-1 text-text-secondary hover:text-status-error-text hover:bg-status-error-bg/10 rounded",
424
- children: /* @__PURE__ */ p(_, { className: "w-4 h-4" })
432
+ children: /* @__PURE__ */ m(ne, { className: "w-4 h-4" })
425
433
  })
426
434
  ]
427
435
  })]
428
- }), /* @__PURE__ */ m("div", {
436
+ }), /* @__PURE__ */ h("div", {
429
437
  className: "grid grid-cols-2 gap-4",
430
438
  children: [
431
- /* @__PURE__ */ m("div", {
439
+ /* @__PURE__ */ h("div", {
432
440
  className: "col-span-2",
433
- children: [/* @__PURE__ */ m("label", {
441
+ children: [/* @__PURE__ */ h("label", {
434
442
  className: "block text-xs font-medium text-text-secondary mb-1",
435
- children: ["Parser ", /* @__PURE__ */ p("span", {
443
+ children: ["Parser ", /* @__PURE__ */ m("span", {
436
444
  className: "text-status-error-text",
437
445
  children: "*"
438
446
  })]
439
- }), /* @__PURE__ */ m("select", {
447
+ }), /* @__PURE__ */ h("select", {
440
448
  value: e.parserId,
441
- onChange: (e) => $(t, e.target.value),
449
+ onChange: (e) => ce(t, e.target.value),
442
450
  className: "w-full px-3 py-2 text-sm text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
443
- children: [/* @__PURE__ */ p("option", {
451
+ children: [/* @__PURE__ */ m("option", {
444
452
  value: "",
445
453
  children: "Select a parser..."
446
- }), K.map((e) => /* @__PURE__ */ m("option", {
454
+ }), J.map((e) => /* @__PURE__ */ h("option", {
447
455
  value: e.id,
448
456
  children: [
449
457
  e.name,
@@ -454,68 +462,68 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
454
462
  }, e.id))]
455
463
  })]
456
464
  }),
457
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("label", {
465
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("label", {
458
466
  className: "block text-xs font-medium text-text-secondary mb-1",
459
- children: ["Input Key ", /* @__PURE__ */ p("span", {
467
+ children: ["Input Key ", /* @__PURE__ */ m("span", {
460
468
  className: "text-status-error-text",
461
469
  children: "*"
462
470
  })]
463
- }), /* @__PURE__ */ p("input", {
471
+ }), /* @__PURE__ */ m("input", {
464
472
  type: "text",
465
473
  value: e.inputKey,
466
- onChange: (e) => Q(t, { inputKey: e.target.value }),
474
+ onChange: (e) => $(t, { inputKey: e.target.value }),
467
475
  placeholder: "data",
468
476
  className: "w-full px-3 py-2 text-sm font-mono text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
469
477
  })] }),
470
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("label", {
478
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ h("label", {
471
479
  className: "block text-xs font-medium text-text-secondary mb-1",
472
- children: ["Output Key ", /* @__PURE__ */ p("span", {
480
+ children: ["Output Key ", /* @__PURE__ */ m("span", {
473
481
  className: "text-status-error-text",
474
482
  children: "*"
475
483
  })]
476
- }), /* @__PURE__ */ p("input", {
484
+ }), /* @__PURE__ */ m("input", {
477
485
  type: "text",
478
486
  value: e.outputKey,
479
- onChange: (e) => Q(t, { outputKey: e.target.value }),
487
+ onChange: (e) => $(t, { outputKey: e.target.value }),
480
488
  placeholder: "result",
481
489
  className: "w-full px-3 py-2 text-sm font-mono text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
482
490
  })] }),
483
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("label", {
491
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("label", {
484
492
  className: "block text-xs font-medium text-text-secondary mb-1",
485
493
  children: "On Error"
486
- }), /* @__PURE__ */ p("select", {
494
+ }), /* @__PURE__ */ m("select", {
487
495
  value: e.onError,
488
- onChange: (e) => Q(t, { onError: e.target.value }),
496
+ onChange: (e) => $(t, { onError: e.target.value }),
489
497
  className: "w-full px-3 py-2 text-sm text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
490
- children: S.map((e) => /* @__PURE__ */ p("option", {
498
+ children: v.map((e) => /* @__PURE__ */ m("option", {
491
499
  value: e.value,
492
500
  children: e.label
493
501
  }, e.value))
494
502
  })] }),
495
- /* @__PURE__ */ p("div", {
503
+ /* @__PURE__ */ m("div", {
496
504
  className: "flex items-center",
497
- children: /* @__PURE__ */ m("label", {
505
+ children: /* @__PURE__ */ h("label", {
498
506
  className: "flex items-center gap-2 cursor-pointer",
499
- children: [/* @__PURE__ */ p("input", {
507
+ children: [/* @__PURE__ */ m("input", {
500
508
  type: "checkbox",
501
509
  checked: e.enabled,
502
- onChange: (e) => Q(t, { enabled: e.target.checked }),
510
+ onChange: (e) => $(t, { enabled: e.target.checked }),
503
511
  className: "w-4 h-4 rounded border-border-default text-action-primary-bg focus:ring-action-primary-bg"
504
- }), /* @__PURE__ */ p("span", {
512
+ }), /* @__PURE__ */ m("span", {
505
513
  className: "text-sm text-text-primary",
506
514
  children: "Enabled"
507
515
  })]
508
516
  })
509
517
  }),
510
- e.onError === "fallback" && /* @__PURE__ */ m("div", {
518
+ e.onError === "fallback" && /* @__PURE__ */ h("div", {
511
519
  className: "col-span-2",
512
- children: [/* @__PURE__ */ p("label", {
520
+ children: [/* @__PURE__ */ m("label", {
513
521
  className: "block text-xs font-medium text-text-secondary mb-1",
514
522
  children: "Fallback Value (JSON)"
515
- }), /* @__PURE__ */ p("input", {
523
+ }), /* @__PURE__ */ m("input", {
516
524
  type: "text",
517
525
  value: e.fallbackValue,
518
- onChange: (e) => Q(t, { fallbackValue: e.target.value }),
526
+ onChange: (e) => $(t, { fallbackValue: e.target.value }),
519
527
  placeholder: "{\"default\": true}",
520
528
  className: "w-full px-3 py-2 text-sm font-mono text-text-primary bg-bg-surface border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
521
529
  })]
@@ -525,58 +533,58 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
525
533
  }, t))
526
534
  })]
527
535
  })]
528
- }), /* @__PURE__ */ m("div", {
536
+ }), /* @__PURE__ */ h("div", {
529
537
  className: "space-y-6",
530
- children: [/* @__PURE__ */ m("div", {
538
+ children: [/* @__PURE__ */ h("div", {
531
539
  className: "bg-bg-surface border border-border-default rounded-lg p-6",
532
- children: [/* @__PURE__ */ p("h2", {
540
+ children: [/* @__PURE__ */ m("h2", {
533
541
  className: "text-lg font-semibold text-text-primary mb-4",
534
542
  children: "Preview"
535
- }), /* @__PURE__ */ m("div", {
543
+ }), /* @__PURE__ */ h("div", {
536
544
  className: "space-y-3",
537
545
  children: [
538
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
546
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("span", {
539
547
  className: "text-xs text-text-secondary",
540
548
  children: "Name"
541
- }), /* @__PURE__ */ p("p", {
549
+ }), /* @__PURE__ */ m("p", {
542
550
  className: "text-sm text-text-primary",
543
- children: D || "Untitled"
551
+ children: k || "Untitled"
544
552
  })] }),
545
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
553
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("span", {
546
554
  className: "text-xs text-text-secondary",
547
555
  children: "Status"
548
- }), /* @__PURE__ */ p("div", {
556
+ }), /* @__PURE__ */ m("div", {
549
557
  className: "mt-1",
550
- children: /* @__PURE__ */ p(r, { status: j })
558
+ children: /* @__PURE__ */ m(i, { status: N })
551
559
  })] }),
552
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
560
+ /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("span", {
553
561
  className: "text-xs text-text-secondary",
554
562
  children: "Stages"
555
- }), /* @__PURE__ */ p("p", {
563
+ }), /* @__PURE__ */ m("p", {
556
564
  className: "text-sm text-text-primary",
557
- children: N.length
565
+ children: F.length
558
566
  })] }),
559
- N.length > 0 && /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("span", {
567
+ F.length > 0 && /* @__PURE__ */ h("div", { children: [/* @__PURE__ */ m("span", {
560
568
  className: "text-xs text-text-secondary",
561
569
  children: "Data Flow"
562
- }), /* @__PURE__ */ m("div", {
570
+ }), /* @__PURE__ */ h("div", {
563
571
  className: "mt-1 text-xs font-mono text-text-secondary",
564
- children: [N.map((e, t) => /* @__PURE__ */ m("span", { children: [e.inputKey, t < N.length - 1 && " → "] }, t)), N.length > 0 && ` → ${N[N.length - 1].outputKey}`]
572
+ children: [F.map((e, t) => /* @__PURE__ */ h("span", { children: [e.inputKey, t < F.length - 1 && " → "] }, t)), F.length > 0 && ` → ${F[F.length - 1].outputKey}`]
565
573
  })] })
566
574
  ]
567
575
  })]
568
- }), /* @__PURE__ */ m("div", {
576
+ }), /* @__PURE__ */ h("div", {
569
577
  className: "bg-bg-sunken border border-border-default rounded-lg p-6",
570
- children: [/* @__PURE__ */ p("h3", {
578
+ children: [/* @__PURE__ */ m("h3", {
571
579
  className: "text-sm font-semibold text-text-primary mb-2",
572
580
  children: "Tips"
573
- }), /* @__PURE__ */ m("ul", {
581
+ }), /* @__PURE__ */ h("ul", {
574
582
  className: "text-xs text-text-secondary space-y-2",
575
583
  children: [
576
- /* @__PURE__ */ p("li", { children: "• Each stage processes the output of the previous stage" }),
577
- /* @__PURE__ */ p("li", { children: "• Use consistent input/output keys to chain data" }),
578
- /* @__PURE__ */ p("li", { children: "• Set error handling per stage for robustness" }),
579
- /* @__PURE__ */ p("li", { children: "• Disable stages to skip them during execution" })
584
+ /* @__PURE__ */ m("li", { children: "• Each stage processes the output of the previous stage" }),
585
+ /* @__PURE__ */ m("li", { children: "• Use consistent input/output keys to chain data" }),
586
+ /* @__PURE__ */ m("li", { children: "• Set error handling per stage for robustness" }),
587
+ /* @__PURE__ */ m("li", { children: "• Disable stages to skip them during execution" })
580
588
  ]
581
589
  })]
582
590
  })]
@@ -586,6 +594,6 @@ var h = ({ className: e }) => /* @__PURE__ */ p("svg", {
586
594
  });
587
595
  });
588
596
  //#endregion
589
- export { w as PipelineBuilderPage, w as default };
597
+ export { b as PipelineBuilderPage, b as default };
590
598
 
591
599
  //# sourceMappingURL=PipelineBuilderPage.js.map