@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,97 +2,100 @@ import { usePipelineStore as e } from "../store/pipelineStore.js";
2
2
  import { useAppNavigate as t } from "../contexts/NavigationContext.js";
3
3
  import "../contexts/index.js";
4
4
  import n from "../hooks/usePipelineOperations.js";
5
- import { isNative as r, nativeNotify as i } from "../../utils/nativeBridge.js";
6
- import a from "../components/pipeline/PipelineStatusBadge.js";
7
- import o from "../components/pipeline/PipelineDeleteDialog.js";
8
- import { memo as s, useCallback as c, useEffect as l, useState as u } from "react";
9
- import { useParams as d, useSearchParams as f } from "react-router";
10
- import { GlassCard as p, IllustratedEmptyState as m, NextSteps as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
11
- import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
5
+ import { BIGCONSOLE_PERMISSIONS as r } from "../../constants/permissions.js";
6
+ import { isNative as i, nativeNotify as a } from "../../utils/nativeBridge.js";
7
+ import o from "../components/pipeline/PipelineStatusBadge.js";
8
+ import s from "../components/pipeline/PipelineDeleteDialog.js";
9
+ import { memo as c, useCallback as l, useEffect as u, useState as d } from "react";
10
+ import { useParams as f, useSearchParams as p } from "react-router";
11
+ import { AccessDenied as m } from "@burdenoff/fe-libs/shared/components";
12
+ import { usePermissions as h } from "@burdenoff/fe-libs/shared/providers/shell";
13
+ import { GlassCard as g, IllustratedEmptyState as _, NextSteps as v, PagePurpose as ee } from "@burdenoff/fe-libs/ui";
14
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
12
15
  //#region src/bigconsole/pages/PipelineViewPage.tsx
13
- var b = ({ className: e }) => /* @__PURE__ */ v("svg", {
16
+ var S = ({ className: e }) => /* @__PURE__ */ b("svg", {
14
17
  className: e,
15
18
  fill: "none",
16
19
  stroke: "currentColor",
17
20
  viewBox: "0 0 24 24",
18
- children: /* @__PURE__ */ v("path", {
21
+ children: /* @__PURE__ */ b("path", {
19
22
  strokeLinecap: "round",
20
23
  strokeLinejoin: "round",
21
24
  strokeWidth: 2,
22
25
  d: "M10 19l-7-7m0 0l7-7m-7 7h18"
23
26
  })
24
- }), x = ({ className: e }) => /* @__PURE__ */ v("svg", {
27
+ }), te = ({ className: e }) => /* @__PURE__ */ b("svg", {
25
28
  className: e,
26
29
  fill: "none",
27
30
  stroke: "currentColor",
28
31
  viewBox: "0 0 24 24",
29
- children: /* @__PURE__ */ v("path", {
32
+ children: /* @__PURE__ */ b("path", {
30
33
  strokeLinecap: "round",
31
34
  strokeLinejoin: "round",
32
35
  strokeWidth: 2,
33
36
  d: "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
34
37
  })
35
- }), S = ({ className: e }) => /* @__PURE__ */ v("svg", {
38
+ }), C = ({ className: e }) => /* @__PURE__ */ b("svg", {
36
39
  className: e,
37
40
  fill: "none",
38
41
  stroke: "currentColor",
39
42
  viewBox: "0 0 24 24",
40
- children: /* @__PURE__ */ v("path", {
43
+ children: /* @__PURE__ */ b("path", {
41
44
  strokeLinecap: "round",
42
45
  strokeLinejoin: "round",
43
46
  strokeWidth: 2,
44
47
  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"
45
48
  })
46
- }), C = ({ className: e }) => /* @__PURE__ */ y("svg", {
49
+ }), w = ({ className: e }) => /* @__PURE__ */ x("svg", {
47
50
  className: e,
48
51
  fill: "none",
49
52
  stroke: "currentColor",
50
53
  viewBox: "0 0 24 24",
51
- children: [/* @__PURE__ */ v("path", {
54
+ children: [/* @__PURE__ */ b("path", {
52
55
  strokeLinecap: "round",
53
56
  strokeLinejoin: "round",
54
57
  strokeWidth: 2,
55
58
  d: "M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"
56
- }), /* @__PURE__ */ v("path", {
59
+ }), /* @__PURE__ */ b("path", {
57
60
  strokeLinecap: "round",
58
61
  strokeLinejoin: "round",
59
62
  strokeWidth: 2,
60
63
  d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
61
64
  })]
62
- }), w = ({ className: e }) => /* @__PURE__ */ v("svg", {
65
+ }), T = ({ className: e }) => /* @__PURE__ */ b("svg", {
63
66
  className: e,
64
67
  fill: "none",
65
68
  stroke: "currentColor",
66
69
  viewBox: "0 0 24 24",
67
- children: /* @__PURE__ */ v("path", {
70
+ children: /* @__PURE__ */ b("path", {
68
71
  strokeLinecap: "round",
69
72
  strokeLinejoin: "round",
70
73
  strokeWidth: 2,
71
74
  d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
72
75
  })
73
- }), T = ({ className: e }) => /* @__PURE__ */ v("svg", {
76
+ }), E = ({ className: e }) => /* @__PURE__ */ b("svg", {
74
77
  className: e,
75
78
  fill: "none",
76
79
  stroke: "currentColor",
77
80
  viewBox: "0 0 24 24",
78
- children: /* @__PURE__ */ v("path", {
81
+ children: /* @__PURE__ */ b("path", {
79
82
  strokeLinecap: "round",
80
83
  strokeLinejoin: "round",
81
84
  strokeWidth: 2,
82
85
  d: "M5 13l4 4L19 7"
83
86
  })
84
- }), E = ({ className: e }) => /* @__PURE__ */ v("svg", {
87
+ }), D = ({ className: e }) => /* @__PURE__ */ b("svg", {
85
88
  className: e,
86
89
  fill: "none",
87
90
  stroke: "currentColor",
88
91
  viewBox: "0 0 24 24",
89
- children: /* @__PURE__ */ v("path", {
92
+ children: /* @__PURE__ */ b("path", {
90
93
  strokeLinecap: "round",
91
94
  strokeLinejoin: "round",
92
95
  strokeWidth: 2,
93
96
  d: "M14 5l7 7m0 0l-7 7m7-7H3"
94
97
  })
95
- }), D = ({ handling: e }) => {
98
+ }), O = ({ handling: e }) => {
96
99
  let t = {
97
100
  fail: {
98
101
  label: "Fail",
@@ -107,313 +110,318 @@ var b = ({ className: e }) => /* @__PURE__ */ v("svg", {
107
110
  className: "bg-action-primary-bg/10 text-action-primary-bg"
108
111
  }
109
112
  }, n = t[e] || t.fail;
110
- return /* @__PURE__ */ v("span", {
113
+ return /* @__PURE__ */ b("span", {
111
114
  className: `px-1.5 py-0.5 text-xs font-medium rounded ${n.className}`,
112
115
  children: n.label
113
116
  });
114
- }, O = s(function() {
115
- let { pipelineId: s } = d(), O = t(), k = "default", [A] = f(), [j, M] = u(null), [N, P] = u("{\n \"data\": \"sample\"\n}"), [F, I] = u(null), [L, R] = u(A.get("test") === "true"), z = e((e) => e.deleteDialogOpen), B = e((e) => e.openDeleteDialog), V = e((e) => e.closeDeleteDialog), { loading: H, error: U, fetchPipeline: W, deletePipeline: G, testPipeline: K } = n({
116
- consoleId: k,
117
+ }, k = c(function() {
118
+ let { pipelineId: c } = f(), k = t(), A = "default", [j] = p(), { hasPermission: M, isLoading: ne } = h(), re = M(r.PIPELINE_READ), N = M(r.PIPELINE_UPDATE), P = M(r.PIPELINE_DELETE), F = M(r.PIPELINE_TEST), [I, L] = d(null), [R, z] = d("{\n \"data\": \"sample\"\n}"), [B, V] = d(null), [H, U] = d(j.get("test") === "true"), W = e((e) => e.deleteDialogOpen), G = e((e) => e.openDeleteDialog), K = e((e) => e.closeDeleteDialog), { loading: q, error: J, fetchPipeline: Y, deletePipeline: X, testPipeline: Z } = n({
119
+ consoleId: A,
117
120
  skipFetch: !0
118
121
  });
119
- l(() => {
120
- s && W(s).then((e) => {
121
- e && M(e);
122
+ u(() => {
123
+ c && Y(c).then((e) => {
124
+ e && L(e);
122
125
  });
123
- }, [s, W]);
124
- let q = c(() => {
125
- O("/pipelines");
126
- }, [O]), J = c(() => {
127
- O(`/pipelines/${s}/edit`);
128
- }, [O, s]), Y = c(() => {
129
- j && B(j);
130
- }, [j, B]), X = c(async () => {
131
- j && (await G(j.id) ? (r() && i("success"), V(), O("/pipelines")) : r() && i("error"));
126
+ }, [c, Y]);
127
+ let Q = l(() => {
128
+ k("/pipelines");
129
+ }, [k]), $ = l(() => {
130
+ k(`/pipelines/${c}/edit`);
131
+ }, [k, c]), ie = l(() => {
132
+ I && G(I);
133
+ }, [I, G]), ae = l(async () => {
134
+ I && (await X(I.id) ? (i() && a("success"), K(), k("/pipelines")) : i() && a("error"));
132
135
  }, [
133
- j,
134
- G,
135
- V,
136
- O
137
- ]), Z = c((e) => {
138
- O(`/dashboards/${k}/parsers/${e}`);
139
- }, [O, k]), Q = c(async () => {
140
- if (j) try {
141
- let e = await K({
142
- pipelineId: j.id,
143
- inputData: N
136
+ I,
137
+ X,
138
+ K,
139
+ k
140
+ ]), oe = l((e) => {
141
+ k(`/dashboards/${A}/parsers/${e}`);
142
+ }, [k, A]), se = l(async () => {
143
+ if (I) try {
144
+ let e = await Z({
145
+ pipelineId: I.id,
146
+ inputData: R
144
147
  });
145
- e && I(e);
148
+ e && V(e);
146
149
  } catch {}
147
150
  }, [
148
- j,
149
- K,
150
- N
151
+ I,
152
+ Z,
153
+ R
151
154
  ]);
152
- return H && !j ? /* @__PURE__ */ v("div", {
155
+ return q && !I ? /* @__PURE__ */ b("div", {
153
156
  className: "p-6",
154
- children: /* @__PURE__ */ y("div", {
157
+ children: /* @__PURE__ */ x("div", {
155
158
  className: "flex flex-col items-center justify-center py-16",
156
- children: [/* @__PURE__ */ y("svg", {
159
+ children: [/* @__PURE__ */ x("svg", {
157
160
  className: "w-8 h-8 text-action-primary-bg animate-spin mb-4",
158
161
  fill: "none",
159
162
  viewBox: "0 0 24 24",
160
- children: [/* @__PURE__ */ v("circle", {
163
+ children: [/* @__PURE__ */ b("circle", {
161
164
  className: "opacity-25",
162
165
  cx: "12",
163
166
  cy: "12",
164
167
  r: "10",
165
168
  stroke: "currentColor",
166
169
  strokeWidth: "4"
167
- }), /* @__PURE__ */ v("path", {
170
+ }), /* @__PURE__ */ b("path", {
168
171
  className: "opacity-75",
169
172
  fill: "currentColor",
170
173
  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"
171
174
  })]
172
- }), /* @__PURE__ */ v("p", {
175
+ }), /* @__PURE__ */ b("p", {
173
176
  className: "text-sm text-text-secondary",
174
177
  children: "Loading Pipeline..."
175
178
  })]
176
179
  })
177
- }) : U ? /* @__PURE__ */ v("div", {
180
+ }) : !ne && !re ? /* @__PURE__ */ b(m, {
181
+ title: "Access Denied",
182
+ description: "You don't have permission to view this pipeline."
183
+ }) : J ? /* @__PURE__ */ b("div", {
178
184
  className: "p-6",
179
- children: /* @__PURE__ */ y("div", {
185
+ children: /* @__PURE__ */ x("div", {
180
186
  className: "flex flex-col items-center justify-center py-16 text-center",
181
187
  children: [
182
- /* @__PURE__ */ v("div", {
188
+ /* @__PURE__ */ b("div", {
183
189
  className: "p-3 rounded-full bg-status-error-bg/10 mb-4",
184
- children: /* @__PURE__ */ v(w, { className: "w-8 h-8 text-status-error-text" })
190
+ children: /* @__PURE__ */ b(T, { className: "w-8 h-8 text-status-error-text" })
185
191
  }),
186
- /* @__PURE__ */ v("h3", {
192
+ /* @__PURE__ */ b("h3", {
187
193
  className: "text-lg font-medium text-text-primary mb-2",
188
194
  children: "Failed to load Pipeline"
189
195
  }),
190
- /* @__PURE__ */ v("p", {
196
+ /* @__PURE__ */ b("p", {
191
197
  className: "text-sm text-text-secondary mb-4",
192
- children: U.message
198
+ children: J.message
193
199
  }),
194
- /* @__PURE__ */ v("button", {
200
+ /* @__PURE__ */ b("button", {
195
201
  type: "button",
196
- onClick: q,
202
+ onClick: Q,
197
203
  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",
198
204
  children: "Back to Pipelines"
199
205
  })
200
206
  ]
201
207
  })
202
- }) : j ? /* @__PURE__ */ y("div", {
208
+ }) : I ? /* @__PURE__ */ x("div", {
203
209
  className: "p-6",
204
210
  children: [
205
- /* @__PURE__ */ y("div", {
211
+ /* @__PURE__ */ x("div", {
206
212
  className: "flex items-center justify-between mb-6",
207
- children: [/* @__PURE__ */ y("div", {
213
+ children: [/* @__PURE__ */ x("div", {
208
214
  className: "flex items-center gap-4",
209
- children: [/* @__PURE__ */ v("button", {
215
+ children: [/* @__PURE__ */ b("button", {
210
216
  type: "button",
211
- onClick: q,
217
+ onClick: Q,
212
218
  className: "p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-md transition-colors",
213
- children: /* @__PURE__ */ v(b, { className: "w-5 h-5" })
214
- }), /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
219
+ children: /* @__PURE__ */ b(S, { className: "w-5 h-5" })
220
+ }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ x("div", {
215
221
  className: "flex items-center gap-3",
216
- children: [/* @__PURE__ */ v("h1", {
222
+ children: [/* @__PURE__ */ b("h1", {
217
223
  className: "text-2xl font-bold text-text-primary",
218
- children: j.name
219
- }), /* @__PURE__ */ v(a, { status: j.status })]
220
- }), j.description && /* @__PURE__ */ v("p", {
224
+ children: I.name
225
+ }), /* @__PURE__ */ b(o, { status: I.status })]
226
+ }), I.description && /* @__PURE__ */ b("p", {
221
227
  className: "text-sm text-text-secondary mt-1",
222
- children: j.description
228
+ children: I.description
223
229
  })] })]
224
- }), /* @__PURE__ */ y("div", {
230
+ }), /* @__PURE__ */ x("div", {
225
231
  className: "flex items-center gap-2",
226
232
  children: [
227
- /* @__PURE__ */ y("button", {
233
+ /* @__PURE__ */ x("button", {
228
234
  type: "button",
229
- onClick: () => R(!L),
230
- className: "inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-status-success-text bg-status-success-bg/10 hover:bg-status-success-bg/20 rounded-md transition-colors",
231
- children: [/* @__PURE__ */ v(C, { className: "w-4 h-4" }), "Test"]
235
+ onClick: () => U(!H),
236
+ disabled: !F,
237
+ className: "inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-status-success-text bg-status-success-bg/10 hover:bg-status-success-bg/20 rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
238
+ children: [/* @__PURE__ */ b(w, { className: "w-4 h-4" }), "Test"]
232
239
  }),
233
- /* @__PURE__ */ y("button", {
240
+ /* @__PURE__ */ x("button", {
234
241
  type: "button",
235
- onClick: J,
236
- className: "inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors",
237
- children: [/* @__PURE__ */ v(x, { className: "w-4 h-4" }), "Edit"]
242
+ onClick: $,
243
+ disabled: !N,
244
+ className: "inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
245
+ children: [/* @__PURE__ */ b(te, { className: "w-4 h-4" }), "Edit"]
238
246
  }),
239
- /* @__PURE__ */ y("button", {
247
+ P && /* @__PURE__ */ x("button", {
240
248
  type: "button",
241
- onClick: Y,
249
+ onClick: ie,
242
250
  className: "inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-status-error-text bg-status-error-bg/10 hover:bg-status-error-bg/20 rounded-md transition-colors",
243
- children: [/* @__PURE__ */ v(S, { className: "w-4 h-4" }), "Delete"]
251
+ children: [/* @__PURE__ */ b(C, { className: "w-4 h-4" }), "Delete"]
244
252
  })
245
253
  ]
246
254
  })]
247
255
  }),
248
- /* @__PURE__ */ v(g, {
256
+ /* @__PURE__ */ b(ee, {
249
257
  className: "mb-6",
250
258
  children: "A pipeline chains parsers and a data sink into a repeatable flow. Review its stages here, test it with sample input to confirm the output, then edit the stages or run it to process real data into the connected sink."
251
259
  }),
252
- /* @__PURE__ */ v(h, {
260
+ /* @__PURE__ */ b(v, {
253
261
  storageKey: "bigconsole-pipeline-view",
254
262
  steps: [
255
- {
263
+ ...F ? [{
256
264
  id: "test",
257
265
  label: "Test with sample input",
258
266
  description: "Run the pipeline against a sample to verify each stage.",
259
- onClick: () => R(!0)
260
- },
261
- {
267
+ onClick: () => U(!0)
268
+ }] : [],
269
+ ...N ? [{
262
270
  id: "edit",
263
271
  label: "Edit the stages",
264
272
  description: "Add, reorder, or configure the parsers in this pipeline.",
265
- onClick: J
266
- },
273
+ onClick: $
274
+ }] : [],
267
275
  {
268
276
  id: "sinks",
269
277
  label: "Review the target data sink",
270
278
  description: "See where the processed data lands.",
271
- onClick: () => O("/datasinks")
279
+ onClick: () => k("/datasinks")
272
280
  }
273
281
  ]
274
282
  }),
275
- /* @__PURE__ */ y("div", {
283
+ /* @__PURE__ */ x("div", {
276
284
  className: "grid grid-cols-1 lg:grid-cols-3 gap-6",
277
- children: [/* @__PURE__ */ y("div", {
285
+ children: [/* @__PURE__ */ x("div", {
278
286
  className: "lg:col-span-2 space-y-6",
279
- children: [/* @__PURE__ */ y(p, {
287
+ children: [/* @__PURE__ */ x(g, {
280
288
  treatment: "glass",
281
289
  glow: !0,
282
290
  className: "p-6",
283
- children: [/* @__PURE__ */ y("h2", {
291
+ children: [/* @__PURE__ */ x("h2", {
284
292
  className: "text-lg font-semibold text-text-primary mb-4",
285
293
  children: [
286
294
  "Pipeline Stages (",
287
- j.stages?.length || 0,
295
+ I.stages?.length || 0,
288
296
  ")"
289
297
  ]
290
- }), !j.stages || j.stages.length === 0 ? /* @__PURE__ */ v(m, {
298
+ }), !I.stages || I.stages.length === 0 ? /* @__PURE__ */ b(_, {
291
299
  illustration: "empty-generic",
292
300
  title: "No stages defined",
293
301
  description: "Edit the pipeline to add parser stages."
294
- }) : /* @__PURE__ */ v("div", {
302
+ }) : /* @__PURE__ */ b("div", {
295
303
  className: "space-y-3",
296
- children: j.stages.map((e, t) => /* @__PURE__ */ y("div", {
304
+ children: I.stages.map((e, t) => /* @__PURE__ */ x("div", {
297
305
  className: "flex items-center gap-3",
298
- children: [/* @__PURE__ */ y("div", {
306
+ children: [/* @__PURE__ */ x("div", {
299
307
  className: `
300
308
  flex-1 p-4 rounded-lg border
301
309
  ${e.enabled ? "bg-bg-surface border-border-default" : "bg-bg-sunken border-border-default opacity-60"}
302
310
  `,
303
311
  children: [
304
- /* @__PURE__ */ y("div", {
312
+ /* @__PURE__ */ x("div", {
305
313
  className: "flex items-center justify-between mb-2",
306
- children: [/* @__PURE__ */ y("div", {
314
+ children: [/* @__PURE__ */ x("div", {
307
315
  className: "flex items-center gap-2",
308
316
  children: [
309
- /* @__PURE__ */ v("span", {
317
+ /* @__PURE__ */ b("span", {
310
318
  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",
311
319
  children: t + 1
312
320
  }),
313
- /* @__PURE__ */ v("span", {
321
+ /* @__PURE__ */ b("span", {
314
322
  className: "font-medium text-text-primary",
315
323
  children: e.parserName || `Stage ${t + 1}`
316
324
  }),
317
- e.parserType && /* @__PURE__ */ v("span", {
325
+ e.parserType && /* @__PURE__ */ b("span", {
318
326
  className: "px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded",
319
327
  children: e.parserType.toUpperCase()
320
328
  })
321
329
  ]
322
- }), /* @__PURE__ */ y("div", {
330
+ }), /* @__PURE__ */ x("div", {
323
331
  className: "flex items-center gap-2",
324
- children: [/* @__PURE__ */ v(D, { handling: e.onError }), !e.enabled && /* @__PURE__ */ v("span", {
332
+ children: [/* @__PURE__ */ b(O, { handling: e.onError }), !e.enabled && /* @__PURE__ */ b("span", {
325
333
  className: "px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded",
326
334
  children: "Disabled"
327
335
  })]
328
336
  })]
329
337
  }),
330
- /* @__PURE__ */ y("div", {
338
+ /* @__PURE__ */ x("div", {
331
339
  className: "flex items-center gap-2 text-xs text-text-secondary",
332
340
  children: [
333
- /* @__PURE__ */ v("span", {
341
+ /* @__PURE__ */ b("span", {
334
342
  className: "font-mono bg-bg-sunken px-1.5 py-0.5 rounded",
335
343
  children: e.inputKey
336
344
  }),
337
- /* @__PURE__ */ v(E, { className: "w-3 h-3" }),
338
- /* @__PURE__ */ v("span", {
345
+ /* @__PURE__ */ b(D, { className: "w-3 h-3" }),
346
+ /* @__PURE__ */ b("span", {
339
347
  className: "font-mono bg-bg-sunken px-1.5 py-0.5 rounded",
340
348
  children: e.outputKey
341
349
  })
342
350
  ]
343
351
  }),
344
- e.description && /* @__PURE__ */ v("p", {
352
+ e.description && /* @__PURE__ */ b("p", {
345
353
  className: "text-xs text-text-secondary mt-2",
346
354
  children: e.description
347
355
  }),
348
- e.parserId && /* @__PURE__ */ v("button", {
356
+ e.parserId && /* @__PURE__ */ b("button", {
349
357
  type: "button",
350
- onClick: () => Z(e.parserId),
358
+ onClick: () => oe(e.parserId),
351
359
  className: "mt-2 text-xs text-action-primary-bg hover:underline",
352
360
  children: "View Parser"
353
361
  })
354
362
  ]
355
- }), t < (j.stages?.length || 0) - 1 && /* @__PURE__ */ v(E, { className: "w-5 h-5 text-text-secondary flex-shrink-0 hidden md:block" })]
363
+ }), t < (I.stages?.length || 0) - 1 && /* @__PURE__ */ b(D, { className: "w-5 h-5 text-text-secondary flex-shrink-0 hidden md:block" })]
356
364
  }, e.id))
357
365
  })]
358
- }), L && /* @__PURE__ */ y("div", {
366
+ }), H && /* @__PURE__ */ x("div", {
359
367
  className: "bg-bg-surface border border-border-default rounded-lg p-6",
360
- children: [/* @__PURE__ */ v("h2", {
368
+ children: [/* @__PURE__ */ b("h2", {
361
369
  className: "text-lg font-semibold text-text-primary mb-4",
362
370
  children: "Test Pipeline"
363
- }), /* @__PURE__ */ y("div", {
371
+ }), /* @__PURE__ */ x("div", {
364
372
  className: "space-y-4",
365
373
  children: [
366
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
374
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
367
375
  className: "block text-sm font-medium text-text-primary mb-2",
368
376
  children: "Input JSON"
369
- }), /* @__PURE__ */ v("textarea", {
370
- value: N,
371
- onChange: (e) => P(e.target.value),
377
+ }), /* @__PURE__ */ b("textarea", {
378
+ value: R,
379
+ onChange: (e) => z(e.target.value),
372
380
  className: "w-full h-32 px-3 py-2 text-sm font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none",
373
381
  placeholder: "{\"key\": \"value\"}"
374
382
  })] }),
375
- /* @__PURE__ */ y("button", {
383
+ /* @__PURE__ */ x("button", {
376
384
  type: "button",
377
- onClick: Q,
378
- disabled: H,
379
- 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 disabled:opacity-50",
380
- children: [/* @__PURE__ */ v(C, { className: "w-4 h-4" }), H ? "Running..." : "Run Test"]
385
+ onClick: se,
386
+ disabled: q || !F,
387
+ 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 disabled:opacity-50 disabled:cursor-not-allowed",
388
+ children: [/* @__PURE__ */ b(w, { className: "w-4 h-4" }), q ? "Running..." : "Run Test"]
381
389
  }),
382
- F && /* @__PURE__ */ y("div", {
390
+ B && /* @__PURE__ */ x("div", {
383
391
  className: "mt-4",
384
392
  children: [
385
- /* @__PURE__ */ y("div", {
393
+ /* @__PURE__ */ x("div", {
386
394
  className: "flex items-center gap-2 mb-2",
387
- children: [F.status === "completed" ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(T, { className: "w-4 h-4 text-status-success-text" }), /* @__PURE__ */ v("span", {
395
+ children: [B.status === "completed" ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(E, { className: "w-4 h-4 text-status-success-text" }), /* @__PURE__ */ b("span", {
388
396
  className: "text-sm font-medium text-status-success-text",
389
397
  children: "Test Passed"
390
- })] }) : /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(w, { className: "w-4 h-4 text-status-error-text" }), /* @__PURE__ */ v("span", {
398
+ })] }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(T, { className: "w-4 h-4 text-status-error-text" }), /* @__PURE__ */ b("span", {
391
399
  className: "text-sm font-medium text-status-error-text",
392
400
  children: "Test Failed"
393
- })] }), F.totalExecutionTimeMs && /* @__PURE__ */ y("span", {
401
+ })] }), B.totalExecutionTimeMs && /* @__PURE__ */ x("span", {
394
402
  className: "text-xs text-text-secondary",
395
403
  children: [
396
404
  "(",
397
- F.totalExecutionTimeMs,
405
+ B.totalExecutionTimeMs,
398
406
  "ms)"
399
407
  ]
400
408
  })]
401
409
  }),
402
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
410
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
403
411
  className: "block text-sm font-medium text-text-primary mb-2",
404
412
  children: "Output"
405
- }), /* @__PURE__ */ v("pre", {
413
+ }), /* @__PURE__ */ b("pre", {
406
414
  className: "w-full p-3 text-xs font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md overflow-auto max-h-48",
407
- children: JSON.stringify(F.outputData, null, 2) || "null"
415
+ children: JSON.stringify(B.outputData, null, 2) || "null"
408
416
  })] }),
409
- F.error && /* @__PURE__ */ y("div", {
417
+ B.error && /* @__PURE__ */ x("div", {
410
418
  className: "mt-2",
411
- children: [/* @__PURE__ */ v("label", {
419
+ children: [/* @__PURE__ */ b("label", {
412
420
  className: "block text-sm font-medium text-status-error-text mb-2",
413
421
  children: "Error"
414
- }), /* @__PURE__ */ v("pre", {
422
+ }), /* @__PURE__ */ b("pre", {
415
423
  className: "w-full p-3 text-xs font-mono text-status-error-text bg-status-error-bg/10 border border-status-error-border/20 rounded-md overflow-auto",
416
- children: F.error
424
+ children: B.error
417
425
  })]
418
426
  })
419
427
  ]
@@ -421,79 +429,79 @@ var b = ({ className: e }) => /* @__PURE__ */ v("svg", {
421
429
  ]
422
430
  })]
423
431
  })]
424
- }), /* @__PURE__ */ v("div", {
432
+ }), /* @__PURE__ */ b("div", {
425
433
  className: "space-y-6",
426
- children: /* @__PURE__ */ y("div", {
434
+ children: /* @__PURE__ */ x("div", {
427
435
  className: "bg-bg-surface border border-border-default rounded-lg p-6",
428
- children: [/* @__PURE__ */ v("h2", {
436
+ children: [/* @__PURE__ */ b("h2", {
429
437
  className: "text-lg font-semibold text-text-primary mb-4",
430
438
  children: "Details"
431
- }), /* @__PURE__ */ y("dl", {
439
+ }), /* @__PURE__ */ x("dl", {
432
440
  className: "space-y-3",
433
441
  children: [
434
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
442
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
435
443
  className: "text-xs text-text-secondary",
436
444
  children: "Status"
437
- }), /* @__PURE__ */ v("dd", {
445
+ }), /* @__PURE__ */ b("dd", {
438
446
  className: "mt-1",
439
- children: /* @__PURE__ */ v(a, { status: j.status })
447
+ children: /* @__PURE__ */ b(o, { status: I.status })
440
448
  })] }),
441
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
449
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
442
450
  className: "text-xs text-text-secondary",
443
451
  children: "Stages"
444
- }), /* @__PURE__ */ v("dd", {
452
+ }), /* @__PURE__ */ b("dd", {
445
453
  className: "text-sm text-text-primary",
446
- children: j.stages?.length || 0
454
+ children: I.stages?.length || 0
447
455
  })] }),
448
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
456
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
449
457
  className: "text-xs text-text-secondary",
450
458
  children: "Last Executed"
451
- }), /* @__PURE__ */ v("dd", {
459
+ }), /* @__PURE__ */ b("dd", {
452
460
  className: "text-sm text-text-primary",
453
- children: j.lastExecutedAt ? new Date(j.lastExecutedAt).toLocaleString() : "Never"
461
+ children: I.lastExecutedAt ? new Date(I.lastExecutedAt).toLocaleString() : "Never"
454
462
  })] }),
455
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
463
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
456
464
  className: "text-xs text-text-secondary",
457
465
  children: "Version"
458
- }), /* @__PURE__ */ v("dd", {
466
+ }), /* @__PURE__ */ b("dd", {
459
467
  className: "text-sm text-text-primary",
460
- children: j.version
468
+ children: I.version
461
469
  })] }),
462
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
470
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
463
471
  className: "text-xs text-text-secondary",
464
472
  children: "Created"
465
- }), /* @__PURE__ */ v("dd", {
473
+ }), /* @__PURE__ */ b("dd", {
466
474
  className: "text-sm text-text-primary",
467
- children: new Date(j.createdAt).toLocaleString()
475
+ children: new Date(I.createdAt).toLocaleString()
468
476
  })] }),
469
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("dt", {
477
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("dt", {
470
478
  className: "text-xs text-text-secondary",
471
479
  children: "Updated"
472
- }), /* @__PURE__ */ v("dd", {
480
+ }), /* @__PURE__ */ b("dd", {
473
481
  className: "text-sm text-text-primary",
474
- children: new Date(j.updatedAt).toLocaleString()
482
+ children: new Date(I.updatedAt).toLocaleString()
475
483
  })] })
476
484
  ]
477
485
  })]
478
486
  })
479
487
  })]
480
488
  }),
481
- j && /* @__PURE__ */ v(o, {
482
- pipeline: j,
483
- isOpen: z,
484
- onClose: V,
485
- onConfirm: X
489
+ I && /* @__PURE__ */ b(s, {
490
+ pipeline: I,
491
+ isOpen: W,
492
+ onClose: K,
493
+ onConfirm: ae
486
494
  })
487
495
  ]
488
- }) : /* @__PURE__ */ v("div", {
496
+ }) : /* @__PURE__ */ b("div", {
489
497
  className: "p-6",
490
- children: /* @__PURE__ */ v(m, {
498
+ children: /* @__PURE__ */ b(_, {
491
499
  illustration: "empty-data",
492
500
  title: "Pipeline not found",
493
501
  description: "The pipeline you're looking for doesn't exist or has been deleted.",
494
- action: /* @__PURE__ */ v("button", {
502
+ action: /* @__PURE__ */ b("button", {
495
503
  type: "button",
496
- onClick: q,
504
+ onClick: Q,
497
505
  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",
498
506
  children: "Back to Pipelines"
499
507
  })
@@ -501,6 +509,6 @@ var b = ({ className: e }) => /* @__PURE__ */ v("svg", {
501
509
  });
502
510
  });
503
511
  //#endregion
504
- export { O as PipelineViewPage, O as default };
512
+ export { k as PipelineViewPage, k as default };
505
513
 
506
514
  //# sourceMappingURL=PipelineViewPage.js.map