@burdenoff/microfe-bigconsole 2026.1012.4 → 2026.1012.6

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