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