@burdenoff/microfe-bigconsole 2026.805.2 → 2026.812.1

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