@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.
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +54 -50
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
- package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
- package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
- package/dist/bigconsole/components/common/Section.js +70 -0
- package/dist/bigconsole/components/common/Section.js.map +1 -0
- package/dist/bigconsole/components/common/index.js +2 -0
- package/dist/bigconsole/components/common/sectionStyles.js +42 -0
- package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
- package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
- package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
- package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserCard.js +133 -114
- package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
- package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
- package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
- package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/previewShared.js +41 -23
- package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
- package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
- package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
- package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
- package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
- package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
- package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +838 -800
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +263 -315
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +356 -458
- package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/HomePage.js +186 -193
- package/dist/bigconsole/pages/HomePage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +887 -740
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +368 -342
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +248 -298
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/PipelineViewPage.tsx"],"sourcesContent":["/**\n * Pipeline View Page\n *\n * Display Pipeline details, stages, and execution history.\n * Supports testing pipeline with sample input.\n */\n\nimport { memo, useState, useCallback, useEffect } from 'react';\nimport { useParams, useSearchParams } from 'react-router';\nimport { GlassCard, IllustratedEmptyState, PagePurpose, NextSteps } from '@burdenoff/fe-libs/ui';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { usePipelineOperations } from '../hooks/usePipelineOperations';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { PipelineStatusBadge } from '../components/pipeline/PipelineStatusBadge';\nimport { PipelineDeleteDialog } from '../components/pipeline/PipelineDeleteDialog';\nimport type { Pipeline, PipelineExecution, PipelineStage } from '../types';\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst BackIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n);\n\nconst DeleteIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n);\n\nconst PlayIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst ErrorIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n);\n\n// ============================================================================\n// STAGE ERROR BADGE\n// ============================================================================\n\nconst StageErrorBadge = ({ handling }: { handling: string }) => {\n const { t } = useI18n();\n const config = {\n fail: {\n label: t('bigconsole.pipelines.view.errorHandlingFail', 'Fail'),\n className: 'bg-status-error-bg/10 text-status-error-text',\n },\n skip: {\n label: t('bigconsole.pipelines.view.errorHandlingSkip', 'Skip'),\n className: 'bg-status-warning-bg/10 text-status-warning-text',\n },\n fallback: {\n label: t('bigconsole.pipelines.view.errorHandlingFallback', 'Fallback'),\n className: 'bg-action-primary-bg/10 text-action-primary-bg',\n },\n };\n const c = config[handling as keyof typeof config] || config.fail;\n return <span className={`px-1.5 py-0.5 text-xs font-medium rounded ${c.className}`}>{c.label}</span>;\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineViewPage = memo(function PipelineViewPage() {\n const { pipelineId } = useParams<{ pipelineId: string }>();\n const navigate = useAppNavigate();\n const { t } = useI18n();\n // Use default consoleId for now (should come from context in production)\n const consoleId = 'default';\n const [searchParams] = useSearchParams();\n\n // Permissions\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canRead = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_READ);\n const canUpdate = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_UPDATE);\n const canDelete = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_DELETE);\n const canTest = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_TEST);\n\n // Local state\n const [pipeline, setPipeline] = useState<Pipeline | null>(null);\n const [testInput, setTestInput] = useState('{\\n \"data\": \"sample\"\\n}');\n const [testResult, setTestResult] = useState<PipelineExecution | null>(null);\n const [showTestPanel, setShowTestPanel] = useState(searchParams.get('test') === 'true');\n\n // Store state\n const deleteDialogOpen = usePipelineStore((state) => state.deleteDialogOpen);\n const openDeleteDialog = usePipelineStore((state) => state.openDeleteDialog);\n const closeDeleteDialog = usePipelineStore((state) => state.closeDeleteDialog);\n\n // Operations\n const { loading, error, fetchPipeline, deletePipeline, testPipeline } = usePipelineOperations({\n consoleId,\n skipFetch: true,\n });\n\n // Fetch pipeline on mount\n useEffect(() => {\n if (pipelineId) {\n fetchPipeline(pipelineId).then((result) => {\n if (result) {\n setPipeline(result);\n }\n });\n }\n }, [pipelineId, fetchPipeline]);\n\n // Handlers\n const handleBack = useCallback(() => {\n navigate(`/pipelines`);\n }, [navigate]);\n\n const handleEdit = useCallback(() => {\n navigate(`/pipelines/${pipelineId}/edit`);\n }, [navigate, pipelineId]);\n\n const handleDeleteClick = useCallback(() => {\n if (pipeline) {\n openDeleteDialog(pipeline);\n }\n }, [pipeline, openDeleteDialog]);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (pipeline) {\n const success = await deletePipeline(pipeline.id);\n if (success) {\n if (isNative()) void nativeNotify('success');\n closeDeleteDialog();\n navigate(`/pipelines`);\n } else if (isNative()) {\n void nativeNotify('error');\n }\n }\n }, [pipeline, deletePipeline, closeDeleteDialog, navigate]);\n\n const handleViewParser = useCallback(\n (parserId: string) => {\n navigate(`/dashboards/${consoleId}/parsers/${parserId}`);\n },\n [navigate, consoleId]\n );\n\n const handleTest = useCallback(async () => {\n if (!pipeline) return;\n\n try {\n const result = await testPipeline({\n pipelineId: pipeline.id,\n inputData: testInput,\n });\n if (result) {\n setTestResult(result);\n }\n } catch (err) {}\n }, [pipeline, testPipeline, testInput]);\n\n // Loading state\n if (loading && !pipeline) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16\">\n <svg className=\"w-8 h-8 text-action-primary-bg animate-spin mb-4\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n 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\"\n />\n </svg>\n <p className=\"text-sm text-text-secondary\">{t('bigconsole.pipelines.view.loading', 'Loading Pipeline...')}</p>\n </div>\n </div>\n );\n }\n\n // Read gate — once permissions have loaded, block actors without read access.\n if (!permissionsLoading && !canRead) {\n return (\n <AccessDenied\n title={t('bigconsole.pipelines.errors.accessDeniedTitle', 'Access Denied')}\n description={t(\n 'bigconsole.pipelines.errors.accessDeniedViewDescription',\n \"You don't have permission to view this pipeline.\"\n )}\n />\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-6\">\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"p-3 rounded-full bg-status-error-bg/10 mb-4\">\n <ErrorIcon className=\"w-8 h-8 text-status-error-text\" />\n </div>\n <h3 className=\"text-lg font-medium text-text-primary mb-2\">\n {t('bigconsole.pipelines.view.loadError', 'Failed to load Pipeline')}\n </h3>\n <p className=\"text-sm text-text-secondary mb-4\">{error.message}</p>\n <button\n type=\"button\"\n onClick={handleBack}\n 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\"\n >\n {t('bigconsole.pipelines.actions.backToPipelines', 'Back to Pipelines')}\n </button>\n </div>\n </div>\n );\n }\n\n // Not found state\n if (!pipeline) {\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('bigconsole.pipelines.view.notFoundTitle', 'Pipeline not found')}\n description={t(\n 'bigconsole.pipelines.view.notFoundDescription',\n \"The pipeline you're looking for doesn't exist or has been deleted.\"\n )}\n action={\n <button\n type=\"button\"\n onClick={handleBack}\n 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\"\n >\n {t('bigconsole.pipelines.actions.backToPipelines', 'Back to Pipelines')}\n </button>\n }\n />\n </div>\n );\n }\n\n return (\n <div className=\"p-6\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-6\">\n <div className=\"flex items-center gap-4\">\n <button\n type=\"button\"\n onClick={handleBack}\n className=\"p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-md transition-colors\"\n >\n <BackIcon className=\"w-5 h-5\" />\n </button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold text-text-primary\">{pipeline.name}</h1>\n <PipelineStatusBadge status={pipeline.status} />\n </div>\n {pipeline.description && <p className=\"text-sm text-text-secondary mt-1\">{pipeline.description}</p>}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setShowTestPanel(!showTestPanel)}\n disabled={!canTest}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-status-success-text bg-status-success-bg/10 hover:bg-status-success-bg/20 rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n {t('bigconsole.pipelines.actions.test', 'Test')}\n </button>\n <button\n type=\"button\"\n onClick={handleEdit}\n disabled={!canUpdate}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-text-primary bg-bg-sunken hover:bg-border-default rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <EditIcon className=\"w-4 h-4\" />\n {t('bigconsole.pipelines.actions.edit', 'Edit')}\n </button>\n {canDelete && (\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-status-error-text bg-status-error-bg/10 hover:bg-status-error-bg/20 rounded-md transition-colors\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n {t('bigconsole.pipelines.actions.delete', 'Delete')}\n </button>\n )}\n </div>\n </div>\n\n <PagePurpose className=\"mb-6\">\n {t(\n 'bigconsole.pipelines.view.purpose',\n 'A pipeline chains parsers and a data sink into a repeatable flow. Review its stages here, test it with sample input to confirm the output, then edit the stages or run it to process real data into the connected sink.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"bigconsole-pipeline-view\"\n steps={[\n ...(canTest\n ? [\n {\n id: 'test',\n label: t('bigconsole.pipelines.view.nextStepTestLabel', 'Test with sample input'),\n description: t(\n 'bigconsole.pipelines.view.nextStepTestDescription',\n 'Run the pipeline against a sample to verify each stage.'\n ),\n onClick: () => setShowTestPanel(true),\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n id: 'edit',\n label: t('bigconsole.pipelines.view.nextStepEditLabel', 'Edit the stages'),\n description: t(\n 'bigconsole.pipelines.view.nextStepEditDescription',\n 'Add, reorder, or configure the parsers in this pipeline.'\n ),\n onClick: handleEdit,\n },\n ]\n : []),\n {\n id: 'sinks',\n label: t('bigconsole.pipelines.view.nextStepSinksLabel', 'Review the target data sink'),\n description: t('bigconsole.pipelines.view.nextStepSinksDescription', 'See where the processed data lands.'),\n onClick: () => navigate('/datasinks'),\n },\n ]}\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n {/* Main Content */}\n <div className=\"lg:col-span-2 space-y-6\">\n {/* Stages — primary emphasis zone */}\n <GlassCard treatment=\"glass\" glow className=\"p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('bigconsole.pipelines.view.stagesHeading', 'Pipeline Stages ({{count}})', {\n count: pipeline.stages?.length || 0,\n })}\n </h2>\n\n {!pipeline.stages || pipeline.stages.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title={t('bigconsole.pipelines.view.noStagesTitle', 'No stages defined')}\n description={t(\n 'bigconsole.pipelines.view.noStagesDescription',\n 'Edit the pipeline to add parser stages.'\n )}\n />\n ) : (\n <div className=\"space-y-3\">\n {pipeline.stages.map((stage: PipelineStage, index: number) => (\n <div key={stage.id} className=\"flex items-center gap-3\">\n {/* Stage Card */}\n <div\n className={`\n flex-1 p-4 rounded-lg border\n ${stage.enabled ? 'bg-bg-surface border-border-default' : 'bg-bg-sunken border-border-default opacity-60'}\n `}\n >\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n <span 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\">\n {index + 1}\n </span>\n <span className=\"font-medium text-text-primary\">\n {stage.parserName ||\n t('bigconsole.pipelines.view.stageFallbackName', 'Stage {{number}}', {\n number: index + 1,\n })}\n </span>\n {stage.parserType && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n {stage.parserType.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <StageErrorBadge handling={stage.onError} />\n {!stage.enabled && (\n <span className=\"px-1.5 py-0.5 text-xs font-medium bg-bg-sunken text-text-secondary rounded\">\n {t('bigconsole.pipelines.view.stageDisabled', 'Disabled')}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 text-xs text-text-secondary\">\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.inputKey}</span>\n <ArrowRightIcon className=\"w-3 h-3\" />\n <span className=\"font-mono bg-bg-sunken px-1.5 py-0.5 rounded\">{stage.outputKey}</span>\n </div>\n\n {stage.description && <p className=\"text-xs text-text-secondary mt-2\">{stage.description}</p>}\n\n {stage.parserId && (\n <button\n type=\"button\"\n onClick={() => handleViewParser(stage.parserId)}\n className=\"mt-2 text-xs text-action-primary-bg hover:underline\"\n >\n {t('bigconsole.pipelines.view.viewParser', 'View Parser')}\n </button>\n )}\n </div>\n\n {/* Arrow to next stage */}\n {index < (pipeline.stages?.length || 0) - 1 && (\n <ArrowRightIcon className=\"w-5 h-5 text-text-secondary flex-shrink-0 hidden md:block\" />\n )}\n </div>\n ))}\n </div>\n )}\n </GlassCard>\n\n {/* Test Panel */}\n {showTestPanel && (\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('bigconsole.pipelines.view.testPanelHeading', 'Test Pipeline')}\n </h2>\n\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n {t('bigconsole.pipelines.view.inputJsonLabel', 'Input JSON')}\n </label>\n <textarea\n value={testInput}\n onChange={(e) => setTestInput(e.target.value)}\n className=\"w-full h-32 px-3 py-2 text-sm font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none\"\n placeholder='{\"key\": \"value\"}'\n />\n </div>\n\n <button\n type=\"button\"\n onClick={handleTest}\n disabled={loading || !canTest}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-fg bg-action-primary-bg hover:bg-action-primary-bgHover rounded-md transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n {loading\n ? t('bigconsole.pipelines.view.testRunning', 'Running...')\n : t('bigconsole.pipelines.view.runTest', 'Run Test')}\n </button>\n\n {testResult && (\n <div className=\"mt-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n {testResult.status === 'completed' ? (\n <>\n <CheckIcon className=\"w-4 h-4 text-status-success-text\" />\n <span className=\"text-sm font-medium text-status-success-text\">\n {t('bigconsole.pipelines.view.testPassed', 'Test Passed')}\n </span>\n </>\n ) : (\n <>\n <ErrorIcon className=\"w-4 h-4 text-status-error-text\" />\n <span className=\"text-sm font-medium text-status-error-text\">\n {t('bigconsole.pipelines.view.testFailed', 'Test Failed')}\n </span>\n </>\n )}\n {testResult.totalExecutionTimeMs && (\n <span className=\"text-xs text-text-secondary\">({testResult.totalExecutionTimeMs}ms)</span>\n )}\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n {t('bigconsole.pipelines.view.outputLabel', 'Output')}\n </label>\n <pre className=\"w-full p-3 text-xs font-mono text-text-primary bg-bg-sunken border border-border-default rounded-md overflow-auto max-h-48\">\n {JSON.stringify(testResult.outputData, null, 2) || 'null'}\n </pre>\n </div>\n\n {testResult.error && (\n <div className=\"mt-2\">\n <label className=\"block text-sm font-medium text-status-error-text mb-2\">\n {t('bigconsole.pipelines.view.errorLabel', 'Error')}\n </label>\n <pre className=\"w-full p-3 text-xs font-mono text-status-error-text bg-status-error-bg/10 border border-status-error-border/20 rounded-md overflow-auto\">\n {testResult.error}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Sidebar */}\n <div className=\"space-y-6\">\n {/* Details */}\n <div className=\"bg-bg-surface border border-border-default rounded-lg p-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-4\">\n {t('bigconsole.pipelines.view.detailsHeading', 'Details')}\n </h2>\n\n <dl className=\"space-y-3\">\n <div>\n <dt className=\"text-xs text-text-secondary\">{t('bigconsole.pipelines.view.detailStatus', 'Status')}</dt>\n <dd className=\"mt-1\">\n <PipelineStatusBadge status={pipeline.status} />\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">{t('bigconsole.pipelines.view.detailStages', 'Stages')}</dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.stages?.length || 0}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">\n {t('bigconsole.pipelines.view.detailLastExecuted', 'Last Executed')}\n </dt>\n <dd className=\"text-sm text-text-primary\">\n {pipeline.lastExecutedAt\n ? new Date(pipeline.lastExecutedAt).toLocaleString()\n : t('bigconsole.pipelines.view.detailNever', 'Never')}\n </dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">\n {t('bigconsole.pipelines.view.detailVersion', 'Version')}\n </dt>\n <dd className=\"text-sm text-text-primary\">{pipeline.version}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">\n {t('bigconsole.pipelines.view.detailCreated', 'Created')}\n </dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.createdAt).toLocaleString()}</dd>\n </div>\n\n <div>\n <dt className=\"text-xs text-text-secondary\">\n {t('bigconsole.pipelines.view.detailUpdated', 'Updated')}\n </dt>\n <dd className=\"text-sm text-text-primary\">{new Date(pipeline.updatedAt).toLocaleString()}</dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n {/* Delete Dialog */}\n {pipeline && (\n <PipelineDeleteDialog\n pipeline={pipeline}\n isOpen={deleteDialogOpen}\n onClose={closeDeleteDialog}\n onConfirm={handleDeleteConfirm}\n />\n )}\n </div>\n );\n});\n\nexport default PipelineViewPage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PipelineViewPage.js","names":[],"sources":["../../../src/bigconsole/pages/PipelineViewPage.tsx"],"sourcesContent":["/**\n * Pipeline View Page\n *\n * Display Pipeline details, stages, and execution history.\n * Supports testing pipeline with sample input.\n *\n * Section ladder (BOFF-5635):\n * bare — header strip (back / title / status / actions)\n * primary — the block this route exists for. That is the stage chain by\n * default; when the test panel is open (the Test button or\n * `?test=true`) the execution surface takes over as primary and\n * the stages step down to `standard`, so there is always exactly\n * one hero and it is whatever the user just asked for.\n * standard — the other of those two.\n * muted — sidebar metadata, stage cards nested inside the hero.\n * tone — pass/fail result, load failure, \"not found\".\n */\n\nimport { memo, useState, useCallback, useEffect, useId } from 'react';\nimport { useParams, useSearchParams } from 'react-router';\nimport { Button, IllustratedEmptyState, PagePurpose, NextSteps, Spinner } from '@burdenoff/fe-libs/ui';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\nimport { useAppNavigate } from '../contexts';\nimport { isNative, nativeNotify } from '../../utils/nativeBridge';\nimport { usePipelineOperations } from '../hooks/usePipelineOperations';\nimport { usePipelineStore } from '../store/pipelineStore';\nimport { PipelineStatusBadge } from '../components/pipeline/PipelineStatusBadge';\nimport { PipelineDeleteDialog } from '../components/pipeline/PipelineDeleteDialog';\nimport { Section, SectionStack, SECTION_FOCUS_RING } from '../components/common';\nimport type { Pipeline, PipelineExecution, PipelineStage } from '../types';\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n/** Keeps header/panel actions at the 40px touch minimum on mobile. */\nconst TOUCH_TARGET = 'min-h-[var(--size-controlHeight-md)]';\n\n/** Count / timing chip used in section headers. */\nconst META_CHIP = 'rounded-pill bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary';\n\n/** Mono key chip — the data contract of a stage. */\n/** `break-all`: stage keys are user-supplied and are often one long token. */\nconst KEY_CHIP = 'rounded-button bg-bg-surface px-1.5 py-0.5 font-mono break-all text-text-primary';\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst BackIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst EditIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n);\n\nconst DeleteIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n 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\"\n />\n </svg>\n);\n\nconst PlayIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z\"\n />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst ErrorIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n);\n\nconst ArrowRightIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M14 5l7 7m0 0l-7 7m7-7H3\" />\n </svg>\n);\n\n// ============================================================================\n// STAGE ERROR BADGE\n// ============================================================================\n\n/**\n * The stage's failure policy. Labelled (\"On error\") because an unlabelled\n * `Fail` / `Skip` chip sitting next to the parser-type chip and the mono key\n * chips gave the reader no way to tell state from config.\n */\nconst StageErrorBadge = ({ handling }: { handling: string }) => {\n const { t } = useI18n();\n const config = {\n fail: {\n label: t('bigconsole.pipelines.view.errorHandlingFail', 'Fail'),\n className:\n 'bg-[var(--color-status-error-bgSubtle)] text-status-error-text border-[var(--color-status-error-border)]',\n },\n skip: {\n label: t('bigconsole.pipelines.view.errorHandlingSkip', 'Skip'),\n className:\n 'bg-[var(--color-status-warning-bgSubtle)] text-[var(--color-status-warning-text)] border-[var(--color-status-warning-border)]',\n },\n fallback: {\n label: t('bigconsole.pipelines.view.errorHandlingFallback', 'Fallback'),\n className:\n 'bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)] border-[var(--color-status-info-border)]',\n },\n };\n const c = config[handling as keyof typeof config] || config.fail;\n return (\n <span\n className={`inline-flex items-center gap-1 whitespace-nowrap rounded-pill border px-2 py-0.5 text-xs font-medium ${c.className}`}\n >\n <span className=\"font-normal opacity-80\">On error</span>\n {c.label}\n </span>\n );\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineViewPage = memo(function PipelineViewPage() {\n const { pipelineId } = useParams<{ pipelineId: string }>();\n const navigate = useAppNavigate();\n const { t } = useI18n();\n // Use default consoleId for now (should come from context in production)\n const consoleId = 'default';\n const [searchParams] = useSearchParams();\n const testInputId = useId();\n\n // Permissions\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const canRead = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_READ);\n const canUpdate = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_UPDATE);\n const canDelete = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_DELETE);\n const canTest = hasPermission(BIGCONSOLE_PERMISSIONS.PIPELINE_TEST);\n\n // Local state\n const [pipeline, setPipeline] = useState<Pipeline | null>(null);\n const [testInput, setTestInput] = useState('{\\n \"data\": \"sample\"\\n}');\n const [testResult, setTestResult] = useState<PipelineExecution | null>(null);\n const [showTestPanel, setShowTestPanel] = useState(searchParams.get('test') === 'true');\n\n // Store state\n const deleteDialogOpen = usePipelineStore((state) => state.deleteDialogOpen);\n const openDeleteDialog = usePipelineStore((state) => state.openDeleteDialog);\n const closeDeleteDialog = usePipelineStore((state) => state.closeDeleteDialog);\n\n // Operations\n const { loading, error, fetchPipeline, deletePipeline, testPipeline } = usePipelineOperations({\n consoleId,\n skipFetch: true,\n });\n\n // Fetch pipeline on mount\n useEffect(() => {\n if (pipelineId) {\n fetchPipeline(pipelineId).then((result) => {\n if (result) {\n setPipeline(result);\n }\n });\n }\n }, [pipelineId, fetchPipeline]);\n\n // Handlers\n const handleBack = useCallback(() => {\n navigate(`/pipelines`);\n }, [navigate]);\n\n const handleEdit = useCallback(() => {\n navigate(`/pipelines/${pipelineId}/edit`);\n }, [navigate, pipelineId]);\n\n const handleDeleteClick = useCallback(() => {\n if (pipeline) {\n openDeleteDialog(pipeline);\n }\n }, [pipeline, openDeleteDialog]);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (pipeline) {\n const success = await deletePipeline(pipeline.id);\n if (success) {\n if (isNative()) void nativeNotify('success');\n closeDeleteDialog();\n navigate(`/pipelines`);\n } else if (isNative()) {\n void nativeNotify('error');\n }\n }\n }, [pipeline, deletePipeline, closeDeleteDialog, navigate]);\n\n const handleViewParser = useCallback(\n (parserId: string) => {\n navigate(`/dashboards/${consoleId}/parsers/${parserId}`);\n },\n [navigate, consoleId]\n );\n\n const handleTest = useCallback(async () => {\n if (!pipeline) return;\n\n try {\n const result = await testPipeline({\n pipelineId: pipeline.id,\n inputData: testInput,\n });\n if (result) {\n setTestResult(result);\n }\n } catch {\n // Failures surface through the hook's `error` state; the panel keeps the\n // previous result rather than blanking out.\n }\n }, [pipeline, testPipeline, testInput]);\n\n // Loading state\n if (loading && !pipeline) {\n return (\n <div className=\"p-card-padding\">\n <div className=\"flex flex-col items-center justify-center py-16\" role=\"status\">\n <Spinner style={{ height: 'var(--size-icon-xl)', width: 'var(--size-icon-xl)' }} />\n <p className=\"mt-form-gap text-sm text-text-secondary\">\n {t('bigconsole.pipelines.view.loading', 'Loading Pipeline...')}\n </p>\n </div>\n </div>\n );\n }\n\n // Read gate — once permissions have loaded, block actors without read access.\n if (!permissionsLoading && !canRead) {\n return (\n <AccessDenied\n title={t('bigconsole.pipelines.errors.accessDeniedTitle', 'Access Denied')}\n description={t(\n 'bigconsole.pipelines.errors.accessDeniedViewDescription',\n \"You don't have permission to view this pipeline.\"\n )}\n />\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"p-card-padding\">\n <Section\n tone=\"danger\"\n headingLevel={2}\n title={t('bigconsole.pipelines.view.loadError', 'Failed to load Pipeline')}\n description={error.message}\n icon={<ErrorIcon className=\"h-icon-sm w-icon-sm\" />}\n actions={\n <Button onClick={handleBack} className={TOUCH_TARGET}>\n {t('bigconsole.pipelines.actions.backToPipelines', 'Back to Pipelines')}\n </Button>\n }\n data-testid=\"pipeline-view-error\"\n >\n <p className=\"text-sm text-text-secondary\">\n The pipeline could not be read from the console service. Nothing was changed.\n </p>\n </Section>\n </div>\n );\n }\n\n // Not found state\n if (!pipeline) {\n return (\n <div className=\"p-card-padding\">\n <Section\n tone=\"warning\"\n headingLevel={2}\n title={t('bigconsole.pipelines.view.notFoundTitle', 'Pipeline not found')}\n description={t(\n 'bigconsole.pipelines.view.notFoundDescription',\n \"The pipeline you're looking for doesn't exist or has been deleted.\"\n )}\n icon={<ErrorIcon className=\"h-icon-sm w-icon-sm\" />}\n actions={\n <Button onClick={handleBack} className={TOUCH_TARGET}>\n {t('bigconsole.pipelines.actions.backToPipelines', 'Back to Pipelines')}\n </Button>\n }\n data-testid=\"pipeline-not-found\"\n />\n </div>\n );\n }\n\n const stageCount = pipeline.stages?.length ?? 0;\n const testPassed = testResult?.status === 'completed';\n\n /** Stage chain — hero unless the user opened the execution panel. */\n const stagesSection = (\n <Section\n emphasis={showTestPanel ? 'standard' : 'primary'}\n headingLevel={2}\n title={t('bigconsole.pipelines.view.stagesHeading', 'Pipeline Stages ({{count}})', { count: stageCount })}\n description=\"Data flows top to bottom — each stage reads its input key and writes an output key for the next one.\"\n data-testid=\"pipeline-stages\"\n >\n {stageCount === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-generic\"\n title={t('bigconsole.pipelines.view.noStagesTitle', 'No stages defined')}\n description={t('bigconsole.pipelines.view.noStagesDescription', 'Edit the pipeline to add parser stages.')}\n action={\n <Button variant=\"secondary\" onClick={handleEdit} disabled={!canUpdate} className={TOUCH_TARGET}>\n <EditIcon className=\"h-icon-sm w-icon-sm\" />\n {t('bigconsole.pipelines.actions.edit', 'Edit')}\n </Button>\n }\n />\n ) : (\n <ol className=\"flex flex-col\">\n {(pipeline.stages ?? []).map((stage: PipelineStage, index: number) => (\n <li key={stage.id} className=\"flex min-w-0 flex-col\">\n {/* Stage card — recessed so the chain reads as N discrete steps\n instead of one stack at the parent's luminance. */}\n <div\n data-testid=\"pipeline-stage\"\n data-enabled={stage.enabled}\n className={`min-w-0 rounded-card border bg-bg-sunken p-4 ${\n stage.enabled\n ? 'border-[var(--color-border-subtle)]'\n : 'border-dashed border-[var(--color-border-strong)]'\n }`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-control-gap\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-icon-gap\">\n <span\n aria-hidden=\"true\"\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-pill bg-bg-surface text-xs font-semibold text-text-secondary\"\n >\n {index + 1}\n </span>\n <h3 className=\"min-w-0 truncate text-sm font-semibold text-text-primary\">\n {stage.parserName ||\n t('bigconsole.pipelines.view.stageFallbackName', 'Stage {{number}}', { number: index + 1 })}\n </h3>\n {stage.parserType && (\n <span className=\"rounded-pill bg-bg-surface px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {stage.parserType.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-icon-gap\">\n <StageErrorBadge handling={stage.onError} />\n {!stage.enabled && (\n <span className=\"rounded-pill border border-[var(--color-border-strong)] px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {t('bigconsole.pipelines.view.stageDisabled', 'Disabled')}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"mt-2 flex flex-wrap items-center gap-x-2 gap-y-1 text-xs text-text-secondary\">\n <span className=\"text-text-muted\">Reads</span>\n <code className={KEY_CHIP}>{stage.inputKey}</code>\n <ArrowRightIcon className=\"h-3 w-3 shrink-0\" />\n <span className=\"text-text-muted\">writes</span>\n <code className={KEY_CHIP}>{stage.outputKey}</code>\n </div>\n\n {stage.description && <p className=\"mt-2 text-xs text-text-secondary\">{stage.description}</p>}\n\n {stage.parserId && (\n <button\n type=\"button\"\n onClick={() => handleViewParser(stage.parserId)}\n className={`mt-2 rounded-button text-xs text-text-link hover:underline ${SECTION_FOCUS_RING}`}\n >\n {t('bigconsole.pipelines.view.viewParser', 'View Parser')}\n </button>\n )}\n </div>\n\n {/* Sequence connector — vertical, so the ordering metaphor survives\n below md (the old arrow was `hidden md:block`). */}\n {index < stageCount - 1 && (\n <span aria-hidden=\"true\" className=\"flex justify-center py-1\">\n <ArrowRightIcon className=\"h-icon-sm w-icon-sm rotate-90 text-text-muted\" />\n </span>\n )}\n </li>\n ))}\n </ol>\n )}\n </Section>\n );\n\n /** Execution surface — hero while it is open. */\n const testSection = showTestPanel ? (\n <Section\n id=\"pipeline-test-panel\"\n emphasis=\"primary\"\n headingLevel={2}\n title={t('bigconsole.pipelines.view.testPanelHeading', 'Test Pipeline')}\n description=\"Run sample input through every enabled stage. Nothing is written to the connected sink.\"\n actions={\n <Button onClick={handleTest} disabled={loading || !canTest} className={TOUCH_TARGET}>\n <PlayIcon className=\"h-icon-sm w-icon-sm\" />\n {loading\n ? t('bigconsole.pipelines.view.testRunning', 'Running...')\n : t('bigconsole.pipelines.view.runTest', 'Run Test')}\n </Button>\n }\n data-testid=\"pipeline-test-panel\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"min-w-0\">\n <label htmlFor={testInputId} className=\"mb-1 block text-sm font-medium text-text-primary\">\n {t('bigconsole.pipelines.view.inputJsonLabel', 'Input JSON')}\n </label>\n <textarea\n id={testInputId}\n value={testInput}\n onChange={(e) => setTestInput(e.target.value)}\n spellCheck={false}\n className={`min-h-32 w-full resize-y rounded-input border border-[var(--color-border-subtle)] bg-bg-canvas px-3 py-2 font-mono text-sm text-text-primary ${SECTION_FOCUS_RING}`}\n placeholder='{\"key\": \"value\"}'\n />\n </div>\n\n {testResult && (\n <Section\n tone={testPassed ? 'success' : 'danger'}\n headingLevel={3}\n title={\n testPassed\n ? t('bigconsole.pipelines.view.testPassed', 'Test Passed')\n : t('bigconsole.pipelines.view.testFailed', 'Test Failed')\n }\n icon={\n testPassed ? <CheckIcon className=\"h-icon-sm w-icon-sm\" /> : <ErrorIcon className=\"h-icon-sm w-icon-sm\" />\n }\n meta={\n testResult.totalExecutionTimeMs ? (\n <span className={META_CHIP}>{testResult.totalExecutionTimeMs}ms</span>\n ) : null\n }\n data-testid=\"pipeline-test-result\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"min-w-0\">\n <h4 className=\"mb-1 text-sm font-medium text-text-primary\">\n {t('bigconsole.pipelines.view.outputLabel', 'Output')}\n </h4>\n <pre className=\"max-h-64 w-full overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-canvas p-3 font-mono text-xs text-text-primary\">\n {JSON.stringify(testResult.outputData, null, 2) || 'null'}\n </pre>\n </div>\n\n {testResult.error && (\n <div className=\"min-w-0\">\n <h4 className=\"mb-1 text-sm font-medium text-status-error-text\">\n {t('bigconsole.pipelines.view.errorLabel', 'Error')}\n </h4>\n <pre className=\"max-h-64 w-full overflow-auto rounded-input border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)] p-3 font-mono text-xs text-status-error-text\">\n {testResult.error}\n </pre>\n </div>\n )}\n </div>\n </Section>\n )}\n </div>\n </Section>\n ) : null;\n\n return (\n <div className=\"p-card-padding\">\n <SectionStack>\n {/* Header strip — structure only, no surface. */}\n <header className=\"flex flex-col gap-form-gap sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex min-w-0 flex-col gap-control-gap\">\n <Button variant=\"ghost\" size=\"sm\" onClick={handleBack} className=\"w-fit\">\n <BackIcon className=\"h-icon-sm w-icon-sm\" />\n {t('bigconsole.pipelines.actions.backToPipelines', 'Back to Pipelines')}\n </Button>\n <div className=\"flex flex-wrap items-center gap-icon-gap\">\n {/* `break-words`: a pipeline name is user-supplied and can be one\n long unbroken token — without it the h1 pushes the whole page\n into horizontal scroll at 390px. */}\n <h1 className=\"min-w-0 break-words text-2xl font-bold leading-tight text-text-primary\">\n {pipeline.name}\n </h1>\n <PipelineStatusBadge status={pipeline.status} />\n </div>\n {pipeline.description && <p className=\"text-sm text-text-secondary\">{pipeline.description}</p>}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-control-gap\">\n <Button\n onClick={() => setShowTestPanel(!showTestPanel)}\n disabled={!canTest}\n aria-expanded={showTestPanel}\n aria-controls=\"pipeline-test-panel\"\n className={TOUCH_TARGET}\n >\n <PlayIcon className=\"h-icon-sm w-icon-sm\" />\n {t('bigconsole.pipelines.actions.test', 'Test')}\n </Button>\n <Button variant=\"secondary\" onClick={handleEdit} disabled={!canUpdate} className={TOUCH_TARGET}>\n <EditIcon className=\"h-icon-sm w-icon-sm\" />\n {t('bigconsole.pipelines.actions.edit', 'Edit')}\n </Button>\n {canDelete && (\n <Button variant=\"destructive\" onClick={handleDeleteClick} className={TOUCH_TARGET}>\n <DeleteIcon className=\"h-icon-sm w-icon-sm\" />\n {t('bigconsole.pipelines.actions.delete', 'Delete')}\n </Button>\n )}\n </div>\n </header>\n\n <PagePurpose className=\"max-w-[75ch]\">\n {t(\n 'bigconsole.pipelines.view.purpose',\n 'A pipeline chains parsers and a data sink into a repeatable flow. Review its stages here, test it with sample input to confirm the output, then edit the stages or run it to process real data into the connected sink.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"bigconsole-pipeline-view\"\n steps={[\n ...(canTest\n ? [\n {\n id: 'test',\n label: t('bigconsole.pipelines.view.nextStepTestLabel', 'Test with sample input'),\n description: t(\n 'bigconsole.pipelines.view.nextStepTestDescription',\n 'Run the pipeline against a sample to verify each stage.'\n ),\n onClick: () => setShowTestPanel(true),\n },\n ]\n : []),\n ...(canUpdate\n ? [\n {\n id: 'edit',\n label: t('bigconsole.pipelines.view.nextStepEditLabel', 'Edit the stages'),\n description: t(\n 'bigconsole.pipelines.view.nextStepEditDescription',\n 'Add, reorder, or configure the parsers in this pipeline.'\n ),\n onClick: handleEdit,\n },\n ]\n : []),\n {\n id: 'sinks',\n label: t('bigconsole.pipelines.view.nextStepSinksLabel', 'Review the target data sink'),\n description: t(\n 'bigconsole.pipelines.view.nextStepSinksDescription',\n 'See where the processed data lands.'\n ),\n onClick: () => navigate('/datasinks'),\n },\n ]}\n />\n\n <div className=\"grid grid-cols-1 gap-section-gap lg:grid-cols-3\">\n {/* Main column */}\n <div className=\"min-w-0 lg:col-span-2\">\n <SectionStack>\n {testSection}\n {stagesSection}\n </SectionStack>\n </div>\n\n {/* Sidebar — supporting detail only. */}\n <div className=\"min-w-0\">\n <SectionStack>\n <Section\n emphasis=\"muted\"\n headingLevel={2}\n title={t('bigconsole.pipelines.view.detailsHeading', 'Details')}\n data-testid=\"pipeline-details\"\n >\n <dl className=\"flex flex-col gap-form-gap text-sm\">\n <div className=\"flex flex-col gap-3\">\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailStatus', 'Status')}\n </dt>\n <dd className=\"mt-1\">\n <PipelineStatusBadge status={pipeline.status} size=\"sm\" />\n </dd>\n </div>\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailStages', 'Stages')}\n </dt>\n <dd className=\"text-text-primary\">{stageCount}</dd>\n </div>\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailLastExecuted', 'Last Executed')}\n </dt>\n <dd className=\"break-words text-text-primary\">\n {pipeline.lastExecutedAt\n ? new Date(pipeline.lastExecutedAt).toLocaleString(undefined, {\n dateStyle: 'medium',\n timeStyle: 'short',\n })\n : t('bigconsole.pipelines.view.detailNever', 'Never')}\n </dd>\n </div>\n </div>\n\n {/* Lifecycle facts — separated so the sidebar reads as two\n short groups rather than six equal rows. */}\n <div className=\"flex flex-col gap-3 border-t border-[var(--color-border-subtle)] pt-form-gap\">\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailVersion', 'Version')}\n </dt>\n <dd className=\"text-text-primary\">{pipeline.version}</dd>\n </div>\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailCreated', 'Created')}\n </dt>\n <dd className=\"break-words text-text-primary\">\n {new Date(pipeline.createdAt).toLocaleString(undefined, {\n dateStyle: 'medium',\n timeStyle: 'short',\n })}\n </dd>\n </div>\n <div>\n <dt className=\"text-xs text-text-muted\">\n {t('bigconsole.pipelines.view.detailUpdated', 'Updated')}\n </dt>\n <dd className=\"break-words text-text-primary\">\n {new Date(pipeline.updatedAt).toLocaleString(undefined, {\n dateStyle: 'medium',\n timeStyle: 'short',\n })}\n </dd>\n </div>\n </div>\n </dl>\n </Section>\n </SectionStack>\n </div>\n </div>\n </SectionStack>\n\n {/* Delete Dialog */}\n {pipeline && (\n <PipelineDeleteDialog\n pipeline={pipeline}\n isOpen={deleteDialogOpen}\n onClose={closeDeleteDialog}\n onConfirm={handleDeleteConfirm}\n />\n )}\n </div>\n );\n});\n\nexport default PipelineViewPage;\n"],"mappings":"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"}
|