@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.
- 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 +145 -111
- 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 +269 -251
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +214 -223
- 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 +110 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -68
- 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 +147 -144
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +154 -153
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +82 -79
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +171 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +250 -273
- 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/PublishToStoreDialog.js +75 -83
- package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +167 -161
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.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/TemplatePicker/TemplatePicker.js +1 -0
- 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 -229
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +128 -129
- 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 -61
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -64
- 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/ImportDataGuideDialog.js +113 -117
- package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +312 -307
- 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 +194 -189
- 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 +163 -131
- 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 +205 -260
- 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 +193 -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 -103
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -148
- 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 +405 -364
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +265 -237
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +764 -821
- 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/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 +46 -49
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +154 -147
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +118 -101
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +244 -191
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
- package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +92 -76
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +89 -86
- 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 +64 -63
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +2 -2
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +65 -58
- 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 +79 -72
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +181 -180
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +100 -90
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.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 +193 -172
- 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/webhook-config/WebhookConfigPanel.js +283 -249
- 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 +46 -42
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +372 -348
- 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 +153 -142
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +230 -220
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +832 -790
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +249 -304
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +324 -349
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +336 -323
- 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 +14 -8
- 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 +901 -724
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +769 -675
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +382 -354
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +540 -420
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +416 -384
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +260 -309
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.js +177 -172
- package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +278 -142
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +382 -366
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +202 -316
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParserStatusBadge.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserStatusBadge.tsx"],"sourcesContent":["/**\n * Parser Status Badge\n *\n * Badge component displaying parser status (active, inactive).\n */\n\nimport { memo } from 'react';\nimport type { ParserStatus } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserStatusBadgeProps {\n /** Parser status */\n status: ParserStatus;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show icon */\n showIcon?: boolean;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst SIZE_CLASSES = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\nconst ICON_SIZE_CLASSES = {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n};\n\n// ============================================================================\n// ICONS\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 XCircleIcon = ({ 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=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const ParserStatusBadge = memo(function ParserStatusBadge({\n status,\n size = 'md',\n showIcon = true,\n}: ParserStatusBadgeProps) {\n const sizeClass = SIZE_CLASSES[size];\n const iconSizeClass = ICON_SIZE_CLASSES[size];\n\n const config = {\n active: {\n bg: 'bg-status-success-bg/10',\n text: 'text-status-success-text',\n icon: <CheckIcon className={iconSizeClass} />,\n label: 'Active',\n },\n inactive: {\n
|
|
1
|
+
{"version":3,"file":"ParserStatusBadge.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserStatusBadge.tsx"],"sourcesContent":["/**\n * Parser Status Badge\n *\n * Badge component displaying parser status (active, inactive).\n */\n\nimport { memo } from 'react';\nimport type { ParserStatus } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserStatusBadgeProps {\n /** Parser status */\n status: ParserStatus;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show icon */\n showIcon?: boolean;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst SIZE_CLASSES = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\nconst ICON_SIZE_CLASSES = {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n};\n\n// ============================================================================\n// ICONS\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 XCircleIcon = ({ 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=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const ParserStatusBadge = memo(function ParserStatusBadge({\n status,\n size = 'md',\n showIcon = true,\n}: ParserStatusBadgeProps) {\n const sizeClass = SIZE_CLASSES[size];\n const iconSizeClass = ICON_SIZE_CLASSES[size];\n\n const config = {\n active: {\n bg: 'bg-status-success-bg/10',\n text: 'text-status-success-text',\n icon: <CheckIcon className={iconSizeClass} />,\n label: 'Active',\n },\n inactive: {\n // `bg-text-tertiary` / `text-text-tertiary` are unregistered in this shell\n // and emitted no CSS, so the inactive pill rendered with no fill at all.\n bg: 'bg-bg-sunken',\n text: 'text-text-muted',\n icon: <XCircleIcon className={iconSizeClass} />,\n label: 'Inactive',\n },\n }[status];\n\n if (!config) {\n return (\n <span\n className={`\n inline-flex items-center gap-1.5\n ${sizeClass}\n bg-bg-sunken\n text-text-secondary\n rounded-full\n font-medium\n `}\n >\n {status}\n </span>\n );\n }\n\n return (\n <span\n className={`\n inline-flex items-center gap-1.5\n ${sizeClass}\n ${config.bg}\n ${config.text}\n rounded-full\n font-medium\n `}\n >\n {showIcon && config.icon}\n <span>{config.label}</span>\n </span>\n );\n});\n\nexport default ParserStatusBadge;\n"],"mappings":";;;AA0BA,IAAM,IAAe;CACnB,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAEK,IAAoB;CACxB,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAMK,KAAa,EAAE,mBACnB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAmB,CAAA;CACpF,CAAA,EAGF,KAAe,EAAE,mBACrB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAOK,IAAoB,EAAK,SAA2B,EAC/D,WACA,UAAO,MACP,cAAW,MACc;CACzB,IAAM,IAAY,EAAa,IACzB,IAAgB,EAAkB,IAElC,IAAS;EACb,QAAQ;GACN,IAAI;GACJ,MAAM;GACN,MAAM,kBAAC,GAAD,EAAW,WAAW,GAAiB,CAAA;GAC7C,OAAO;GACR;EACD,UAAU;GAGR,IAAI;GACJ,MAAM;GACN,MAAM,kBAAC,GAAD,EAAa,WAAW,GAAiB,CAAA;GAC/C,OAAO;GACR;EACF,CAAC;AAmBF,QAjBK,IAkBH,kBAAC,QAAD;EACE,WAAW;;UAEP,EAAU;UACV,EAAO,GAAG;UACV,EAAO,KAAK;;;;YALlB,CAUG,KAAY,EAAO,MACpB,kBAAC,QAAD,EAAA,UAAO,EAAO,OAAa,CAAA,CACtB;MA5BL,kBAAC,QAAD;EACE,WAAW;;YAEP,EAAU;;;;;;YAOb;EACI,CAAA;EAmBX"}
|
|
@@ -7,13 +7,13 @@ var n = {
|
|
|
7
7
|
lg: "px-3 py-1.5 text-base"
|
|
8
8
|
}, r = {
|
|
9
9
|
jq: {
|
|
10
|
-
bg: "bg-
|
|
11
|
-
text: "text-
|
|
10
|
+
bg: "bg-[var(--color-status-info-bgSubtle)]",
|
|
11
|
+
text: "text-[var(--color-status-info-text)]",
|
|
12
12
|
label: "JQ"
|
|
13
13
|
},
|
|
14
14
|
jsonata: {
|
|
15
|
-
bg: "bg-
|
|
16
|
-
text: "text-
|
|
15
|
+
bg: "bg-bg-accentSubtle",
|
|
16
|
+
text: "text-text-link",
|
|
17
17
|
label: "JSONata"
|
|
18
18
|
}
|
|
19
19
|
}, i = e(function({ type: e, size: i = "md" }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParserTypeBadge.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserTypeBadge.tsx"],"sourcesContent":["/**\n * Parser Type Badge\n *\n * Badge component displaying parser type (JQ, JSONata).\n */\n\nimport { memo } from 'react';\nimport type { ParserType } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserTypeBadgeProps {\n /** Parser type */\n type: ParserType;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst SIZE_CLASSES = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\nconst TYPE_CONFIG: Record<ParserType, { bg: string; text: string; label: string }> = {\n jq: {\n bg: 'bg-
|
|
1
|
+
{"version":3,"file":"ParserTypeBadge.js","names":[],"sources":["../../../../src/bigconsole/components/parser/ParserTypeBadge.tsx"],"sourcesContent":["/**\n * Parser Type Badge\n *\n * Badge component displaying parser type (JQ, JSONata).\n */\n\nimport { memo } from 'react';\nimport type { ParserType } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface ParserTypeBadgeProps {\n /** Parser type */\n type: ParserType;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst SIZE_CLASSES = {\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n};\n\n/**\n * Type accents use semantic tokens only — the previous raw `blue-500`/`purple-500`\n * palette classes were not theme-aware and disagreed with the duplicate badge on\n * the DataSink detail page. `info` and `accent` are the two neutral-safe accents\n * available in every BigConsole theme.\n */\nconst TYPE_CONFIG: Record<ParserType, { bg: string; text: string; label: string }> = {\n jq: {\n bg: 'bg-[var(--color-status-info-bgSubtle)]',\n text: 'text-[var(--color-status-info-text)]',\n label: 'JQ',\n },\n jsonata: {\n bg: 'bg-bg-accentSubtle',\n text: 'text-text-link',\n label: 'JSONata',\n },\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const ParserTypeBadge = memo(function ParserTypeBadge({ type, size = 'md' }: ParserTypeBadgeProps) {\n const sizeClass = SIZE_CLASSES[size];\n const config = TYPE_CONFIG[type];\n\n if (!config) {\n return (\n <span\n className={`\n inline-flex items-center\n ${sizeClass}\n bg-bg-sunken\n text-text-secondary\n rounded-md\n font-mono\n font-semibold\n `}\n >\n {type}\n </span>\n );\n }\n\n return (\n <span\n className={`\n inline-flex items-center\n ${sizeClass}\n ${config.bg}\n ${config.text}\n rounded-md\n font-mono\n font-semibold\n `}\n >\n {config.label}\n </span>\n );\n});\n\nexport default ParserTypeBadge;\n"],"mappings":";;;AAwBA,IAAM,IAAe;CACnB,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAQK,IAA+E;CACnF,IAAI;EACF,IAAI;EACJ,MAAM;EACN,OAAO;EACR;CACD,SAAS;EACP,IAAI;EACJ,MAAM;EACN,OAAO;EACR;CACF,EAMY,IAAkB,EAAK,SAAyB,EAAE,SAAM,UAAO,QAA8B;CACxG,IAAM,IAAY,EAAa,IACzB,IAAS,EAAY;AAoB3B,QAlBK,IAmBH,kBAAC,QAAD;EACE,WAAW;;UAEP,EAAU;UACV,EAAO,GAAG;UACV,EAAO,KAAK;;;;;YAMf,EAAO;EACH,CAAA,GA7BL,kBAAC,QAAD;EACE,WAAW;;YAEP,EAAU;;;;;;;YAQb;EACI,CAAA;EAmBX"}
|
|
@@ -1,159 +1,204 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
1
|
+
import { SECTION_FOCUS_RING as e } from "../common/sectionStyles.js";
|
|
2
|
+
import "../common/index.js";
|
|
3
|
+
import t from "./PipelineStatusBadge.js";
|
|
4
|
+
import { memo as n, useCallback as r } from "react";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
+
import { formatDistanceToNow as o } from "date-fns";
|
|
5
7
|
//#region src/bigconsole/components/pipeline/PipelineCard.tsx
|
|
6
|
-
var
|
|
8
|
+
var s = `inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors ${e}`, c = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
7
9
|
className: e,
|
|
8
10
|
fill: "none",
|
|
9
11
|
stroke: "currentColor",
|
|
10
12
|
viewBox: "0 0 24 24",
|
|
11
|
-
children: /* @__PURE__ */
|
|
13
|
+
children: /* @__PURE__ */ i("path", {
|
|
12
14
|
strokeLinecap: "round",
|
|
13
15
|
strokeLinejoin: "round",
|
|
14
16
|
strokeWidth: 1.5,
|
|
15
17
|
d: "M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 00-3.7-3.7 48.678 48.678 0 00-7.324 0 4.006 4.006 0 00-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3l-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 003.7 3.7 48.656 48.656 0 007.324 0 4.006 4.006 0 003.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3l-3 3"
|
|
16
18
|
})
|
|
17
|
-
}),
|
|
19
|
+
}), l = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
18
20
|
className: e,
|
|
19
21
|
fill: "none",
|
|
20
22
|
stroke: "currentColor",
|
|
21
23
|
viewBox: "0 0 24 24",
|
|
22
|
-
children: /* @__PURE__ */
|
|
24
|
+
children: /* @__PURE__ */ i("path", {
|
|
23
25
|
strokeLinecap: "round",
|
|
24
26
|
strokeLinejoin: "round",
|
|
25
27
|
strokeWidth: 2,
|
|
26
28
|
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"
|
|
27
29
|
})
|
|
28
|
-
}),
|
|
30
|
+
}), u = ({ className: e }) => /* @__PURE__ */ a("svg", {
|
|
29
31
|
className: e,
|
|
30
32
|
fill: "none",
|
|
31
33
|
stroke: "currentColor",
|
|
32
34
|
viewBox: "0 0 24 24",
|
|
33
|
-
children: [/* @__PURE__ */
|
|
35
|
+
children: [/* @__PURE__ */ i("path", {
|
|
34
36
|
strokeLinecap: "round",
|
|
35
37
|
strokeLinejoin: "round",
|
|
36
38
|
strokeWidth: 2,
|
|
37
39
|
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"
|
|
38
|
-
}), /* @__PURE__ */
|
|
40
|
+
}), /* @__PURE__ */ i("path", {
|
|
39
41
|
strokeLinecap: "round",
|
|
40
42
|
strokeLinejoin: "round",
|
|
41
43
|
strokeWidth: 2,
|
|
42
44
|
d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
43
45
|
})]
|
|
44
|
-
}),
|
|
46
|
+
}), d = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
45
47
|
className: e,
|
|
46
48
|
fill: "none",
|
|
47
49
|
stroke: "currentColor",
|
|
48
50
|
viewBox: "0 0 24 24",
|
|
49
|
-
children: /* @__PURE__ */
|
|
51
|
+
children: /* @__PURE__ */ i("path", {
|
|
50
52
|
strokeLinecap: "round",
|
|
51
53
|
strokeLinejoin: "round",
|
|
52
54
|
strokeWidth: 2,
|
|
53
55
|
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"
|
|
54
56
|
})
|
|
55
|
-
}),
|
|
57
|
+
}), f = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
56
58
|
className: e,
|
|
57
59
|
fill: "none",
|
|
58
60
|
stroke: "currentColor",
|
|
59
61
|
viewBox: "0 0 24 24",
|
|
60
|
-
children: /* @__PURE__ */
|
|
62
|
+
children: /* @__PURE__ */ i("path", {
|
|
61
63
|
strokeLinecap: "round",
|
|
62
64
|
strokeLinejoin: "round",
|
|
63
65
|
strokeWidth: 2,
|
|
64
66
|
d: "M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"
|
|
65
67
|
})
|
|
66
|
-
}),
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
}), p = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
69
|
+
className: e,
|
|
70
|
+
fill: "none",
|
|
71
|
+
stroke: "currentColor",
|
|
72
|
+
viewBox: "0 0 24 24",
|
|
73
|
+
children: /* @__PURE__ */ i("path", {
|
|
74
|
+
strokeLinecap: "round",
|
|
75
|
+
strokeLinejoin: "round",
|
|
76
|
+
strokeWidth: 2,
|
|
77
|
+
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
78
|
+
})
|
|
79
|
+
}), m = n(function({ pipeline: n, onView: m, onEdit: h, onTest: g, onDelete: _ }) {
|
|
80
|
+
let v = n.stages?.length ?? 0, y = r((e) => {
|
|
81
|
+
if (!e) return "Never run";
|
|
69
82
|
try {
|
|
70
|
-
return
|
|
83
|
+
return o(new Date(e), { addSuffix: !0 });
|
|
71
84
|
} catch {
|
|
72
85
|
return "Unknown";
|
|
73
86
|
}
|
|
74
|
-
}, []),
|
|
75
|
-
|
|
76
|
-
}, [
|
|
77
|
-
e.stopPropagation(),
|
|
78
|
-
}, [
|
|
79
|
-
e.stopPropagation(),
|
|
80
|
-
}, [
|
|
81
|
-
e.stopPropagation(),
|
|
82
|
-
}, [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
}, []), b = r(() => {
|
|
88
|
+
m?.(n.id);
|
|
89
|
+
}, [m, n.id]), x = r((e) => {
|
|
90
|
+
e.stopPropagation(), m?.(n.id);
|
|
91
|
+
}, [m, n.id]), S = r((e) => {
|
|
92
|
+
e.stopPropagation(), h?.(n.id);
|
|
93
|
+
}, [h, n.id]), C = r((e) => {
|
|
94
|
+
e.stopPropagation(), g?.(n.id);
|
|
95
|
+
}, [g, n.id]), w = r((e) => {
|
|
96
|
+
e.stopPropagation(), _?.(n.id);
|
|
97
|
+
}, [_, n.id]);
|
|
98
|
+
return /* @__PURE__ */ a("article", {
|
|
99
|
+
onClick: b,
|
|
100
|
+
"data-testid": "pipeline-card",
|
|
101
|
+
className: "group flex min-w-0 cursor-pointer flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-1)] motion-safe:transition-[box-shadow,border-color] hover:border-[var(--color-border-strong)] hover:shadow-[var(--shadow-elevation-2)]",
|
|
102
|
+
children: [/* @__PURE__ */ a("div", {
|
|
103
|
+
className: "flex min-w-0 items-start gap-icon-gap border-b border-[var(--color-border-subtle)] p-4",
|
|
104
|
+
children: [
|
|
105
|
+
/* @__PURE__ */ i("span", {
|
|
106
|
+
"aria-hidden": "true",
|
|
107
|
+
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-button bg-bg-sunken text-text-secondary",
|
|
108
|
+
children: /* @__PURE__ */ i(c, { className: "h-icon-md w-icon-md" })
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ a("div", {
|
|
111
|
+
className: "min-w-0 flex-1",
|
|
112
|
+
children: [/* @__PURE__ */ i("h3", {
|
|
113
|
+
className: "min-w-0 text-base font-semibold leading-tight text-text-primary",
|
|
114
|
+
children: /* @__PURE__ */ i("button", {
|
|
115
|
+
type: "button",
|
|
116
|
+
onClick: x,
|
|
117
|
+
title: n.name,
|
|
118
|
+
className: `block w-full truncate rounded-button text-left ${e}`,
|
|
119
|
+
children: n.name
|
|
120
|
+
})
|
|
121
|
+
}), n.description && /* @__PURE__ */ i("p", {
|
|
122
|
+
className: "mt-0.5 line-clamp-2 text-sm text-text-secondary",
|
|
123
|
+
children: n.description
|
|
124
|
+
})]
|
|
125
|
+
}),
|
|
126
|
+
/* @__PURE__ */ i(t, {
|
|
127
|
+
status: n.status,
|
|
92
128
|
size: "sm"
|
|
93
129
|
})
|
|
94
|
-
|
|
95
|
-
}), /* @__PURE__ */
|
|
96
|
-
className: "p-4",
|
|
97
|
-
children: [/* @__PURE__ */
|
|
98
|
-
className: "flex items-
|
|
99
|
-
children: [/* @__PURE__ */
|
|
100
|
-
className: "flex-
|
|
101
|
-
children: [/* @__PURE__ */ r("h3", {
|
|
102
|
-
className: "text-sm font-semibold text-text-primary truncate",
|
|
103
|
-
children: t.name
|
|
104
|
-
}), t.description && /* @__PURE__ */ r("p", {
|
|
105
|
-
className: "text-xs text-text-secondary truncate mt-0.5",
|
|
106
|
-
children: t.description
|
|
107
|
-
})]
|
|
108
|
-
}), /* @__PURE__ */ i("div", {
|
|
109
|
-
className: "flex items-center gap-1 ml-2",
|
|
130
|
+
]
|
|
131
|
+
}), /* @__PURE__ */ a("div", {
|
|
132
|
+
className: "flex flex-wrap items-center justify-between gap-control-gap p-4",
|
|
133
|
+
children: [/* @__PURE__ */ a("dl", {
|
|
134
|
+
className: "flex min-w-0 flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary",
|
|
135
|
+
children: [/* @__PURE__ */ a("div", {
|
|
136
|
+
className: "flex items-center gap-1",
|
|
110
137
|
children: [
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
className: "\n p-1 rounded-md\n text-text-secondary\n hover:text-status-success-text\n hover:bg-status-success-bg/10\n transition-colors\n ",
|
|
115
|
-
title: "Test Pipeline",
|
|
116
|
-
children: /* @__PURE__ */ r(c, { className: "w-4 h-4" })
|
|
138
|
+
/* @__PURE__ */ i("dt", {
|
|
139
|
+
className: "sr-only",
|
|
140
|
+
children: "Stages"
|
|
117
141
|
}),
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
className: "\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n ",
|
|
122
|
-
title: "Edit Pipeline",
|
|
123
|
-
children: /* @__PURE__ */ r(s, { className: "w-4 h-4" })
|
|
142
|
+
/* @__PURE__ */ i(f, {
|
|
143
|
+
className: "h-3.5 w-3.5 shrink-0",
|
|
144
|
+
"aria-hidden": "true"
|
|
124
145
|
}),
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
146
|
+
/* @__PURE__ */ a("dd", { children: [
|
|
147
|
+
v,
|
|
148
|
+
" stage",
|
|
149
|
+
v === 1 ? "" : "s"
|
|
150
|
+
] })
|
|
151
|
+
]
|
|
152
|
+
}), /* @__PURE__ */ a("div", {
|
|
153
|
+
className: "flex items-center gap-1",
|
|
154
|
+
children: [
|
|
155
|
+
/* @__PURE__ */ i("dt", {
|
|
156
|
+
className: "sr-only",
|
|
157
|
+
children: "Last run"
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ i(p, {
|
|
160
|
+
className: "h-3.5 w-3.5 shrink-0",
|
|
161
|
+
"aria-hidden": "true"
|
|
162
|
+
}),
|
|
163
|
+
/* @__PURE__ */ i("dd", {
|
|
164
|
+
title: n.lastExecutedAt ? `Last executed: ${new Date(n.lastExecutedAt).toLocaleString()}` : "Never executed",
|
|
165
|
+
children: y(n.lastExecutedAt)
|
|
131
166
|
})
|
|
132
167
|
]
|
|
133
168
|
})]
|
|
134
|
-
}), /* @__PURE__ */
|
|
135
|
-
className: "flex items-center
|
|
136
|
-
children: [
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
169
|
+
}), /* @__PURE__ */ a("div", {
|
|
170
|
+
className: "flex shrink-0 items-center gap-1",
|
|
171
|
+
children: [
|
|
172
|
+
g && /* @__PURE__ */ i("button", {
|
|
173
|
+
type: "button",
|
|
174
|
+
onClick: C,
|
|
175
|
+
className: `${s} hover:bg-[var(--color-status-success-bgSubtle)] hover:text-status-success-text`,
|
|
176
|
+
title: "Test Pipeline",
|
|
177
|
+
"aria-label": `Test ${n.name}`,
|
|
178
|
+
children: /* @__PURE__ */ i(u, { className: "h-icon-sm w-icon-sm" })
|
|
179
|
+
}),
|
|
180
|
+
h && /* @__PURE__ */ i("button", {
|
|
181
|
+
type: "button",
|
|
182
|
+
onClick: S,
|
|
183
|
+
className: `${s} hover:bg-bg-sunken hover:text-text-primary`,
|
|
184
|
+
title: "Edit Pipeline",
|
|
185
|
+
"aria-label": `Edit ${n.name}`,
|
|
186
|
+
children: /* @__PURE__ */ i(l, { className: "h-icon-sm w-icon-sm" })
|
|
187
|
+
}),
|
|
188
|
+
_ && /* @__PURE__ */ i("button", {
|
|
189
|
+
type: "button",
|
|
190
|
+
onClick: w,
|
|
191
|
+
className: `${s} hover:bg-[var(--color-status-error-bgSubtle)] hover:text-status-error-text`,
|
|
192
|
+
title: "Delete Pipeline",
|
|
193
|
+
"aria-label": `Delete ${n.name}`,
|
|
194
|
+
children: /* @__PURE__ */ i(d, { className: "h-icon-sm w-icon-sm" })
|
|
147
195
|
})
|
|
148
|
-
|
|
149
|
-
title: t.lastExecutedAt ? `Last executed: ${new Date(t.lastExecutedAt).toLocaleString()}` : "Never executed",
|
|
150
|
-
children: g(t.lastExecutedAt)
|
|
151
|
-
})]
|
|
196
|
+
]
|
|
152
197
|
})]
|
|
153
198
|
})]
|
|
154
199
|
});
|
|
155
200
|
});
|
|
156
201
|
//#endregion
|
|
157
|
-
export {
|
|
202
|
+
export { m as default };
|
|
158
203
|
|
|
159
204
|
//# sourceMappingURL=PipelineCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineCard.js","names":[],"sources":["../../../../src/bigconsole/components/pipeline/PipelineCard.tsx"],"sourcesContent":["/**\n * PipelineCard Component\n *\n * Card component displaying a Pipeline summary.\n * Shows name, status, stage count, and execution stats.\n */\n\nimport { memo, useCallback } from 'react';\nimport { formatDistanceToNow } from 'date-fns';\nimport { PipelineStatusBadge } from './PipelineStatusBadge';\nimport type { Pipeline } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface PipelineCardProps {\n pipeline: Pipeline;\n onView?: (id: string) => void;\n onEdit?: (id: string) => void;\n onTest?: (id: string) => void;\n onDelete?: (id: string) => void;\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst PipelineIcon = ({ 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={1.5}\n d=\"M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 00-3.7-3.7 48.678 48.678 0 00-7.324 0 4.006 4.006 0 00-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3l-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 003.7 3.7 48.656 48.656 0 007.324 0 4.006 4.006 0 003.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3l-3 3\"\n />\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 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 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 LayersIcon = ({ 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 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineCard = memo(function PipelineCard({\n pipeline,\n onView,\n onEdit,\n onTest,\n onDelete,\n}: PipelineCardProps) {\n // Calculate stage count\n const stageCount = pipeline.stages?.length ?? 0;\n\n // Format last executed time\n const formatLastExecuted = useCallback((dateStr: string | null): string => {\n if (!dateStr) return 'Never';\n try {\n const date = new Date(dateStr);\n return formatDistanceToNow(date, { addSuffix: true });\n } catch {\n return 'Unknown';\n }\n }, []);\n\n // Event handlers\n const handleCardClick = useCallback(() => {\n onView?.(pipeline.id);\n }, [onView, pipeline.id]);\n\n const handleEditClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(pipeline.id);\n },\n [onEdit, pipeline.id]\n );\n\n const handleTestClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onTest?.(pipeline.id);\n },\n [onTest, pipeline.id]\n );\n\n const handleDeleteClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(pipeline.id);\n },\n [onDelete, pipeline.id]\n );\n\n return (\n <div\n onClick={handleCardClick}\n className=\"\n bg-bg-surface\n border border-border-default\n rounded-lg\n overflow-hidden\n cursor-pointer\n hover:border-action-primary-bg\n transition-colors\n \"\n >\n {/* Header with Icon */}\n <div className=\"h-24 bg-bg-sunken flex items-center justify-center relative\">\n <PipelineIcon className=\"w-10 h-10 text-text-secondary/50\" />\n <div className=\"absolute top-2 right-2\">\n <PipelineStatusBadge status={pipeline.status} size=\"sm\" />\n </div>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {/* Title and Actions */}\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-text-primary truncate\">{pipeline.name}</h3>\n {pipeline.description && (\n <p className=\"text-xs text-text-secondary truncate mt-0.5\">{pipeline.description}</p>\n )}\n </div>\n\n <div className=\"flex items-center gap-1 ml-2\">\n {onTest && (\n <button\n type=\"button\"\n onClick={handleTestClick}\n className=\"\n p-1 rounded-md\n text-text-secondary\n hover:text-status-success-text\n hover:bg-status-success-bg/10\n transition-colors\n \"\n title=\"Test Pipeline\"\n >\n <PlayIcon className=\"w-4 h-4\" />\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n onClick={handleEditClick}\n className=\"\n p-1 rounded-md\n text-text-secondary\n hover:text-text-primary\n hover:bg-bg-sunken\n transition-colors\n \"\n title=\"Edit Pipeline\"\n >\n <EditIcon className=\"w-4 h-4\" />\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className=\"\n p-1 rounded-md\n text-text-secondary\n hover:text-status-error-text\n hover:bg-status-error-bg/10\n transition-colors\n \"\n title=\"Delete Pipeline\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Stats Footer */}\n <div className=\"flex items-center justify-between text-xs text-text-secondary mt-3\">\n <div className=\"flex items-center gap-3\">\n {/* Stage Count */}\n <span className=\"flex items-center gap-1\" title={`${stageCount} stages`}>\n <LayersIcon className=\"w-3.5 h-3.5\" />\n {stageCount} stage{stageCount !== 1 ? 's' : ''}\n </span>\n </div>\n\n {/* Last Executed */}\n <span\n title={\n pipeline.lastExecutedAt\n ? `Last executed: ${new Date(pipeline.lastExecutedAt).toLocaleString()}`\n : 'Never executed'\n }\n >\n {formatLastExecuted(pipeline.lastExecutedAt)}\n </span>\n </div>\n </div>\n </div>\n );\n});\n\nexport default PipelineCard;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PipelineCard.js","names":[],"sources":["../../../../src/bigconsole/components/pipeline/PipelineCard.tsx"],"sourcesContent":["/**\n * PipelineCard Component\n *\n * Card component displaying a Pipeline summary.\n * Shows name, status, stage count, and execution stats.\n *\n * Hierarchy (BOFF-5635): the card is a tile inside the list page's `primary`\n * results section, so it carries a raised surface (border + elevation) and puts\n * its identity first. The old 96px decorative banner was the largest mass in the\n * card and carried no information — the icon is now a small puck on the identity\n * row, which roughly doubles the number of pipelines visible per screen.\n */\n\nimport { memo, useCallback } from 'react';\nimport { formatDistanceToNow } from 'date-fns';\nimport { PipelineStatusBadge } from './PipelineStatusBadge';\nimport { SECTION_FOCUS_RING } from '../common';\nimport type { Pipeline } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface PipelineCardProps {\n pipeline: Pipeline;\n onView?: (id: string) => void;\n onEdit?: (id: string) => void;\n onTest?: (id: string) => void;\n onDelete?: (id: string) => void;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n/** Icon action button: 40px touch target, visible focus ring, no colour of its own. */\nconst ICON_ACTION = `inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors ${SECTION_FOCUS_RING}`;\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst PipelineIcon = ({ 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={1.5}\n d=\"M19.5 12c0-1.232-.046-2.453-.138-3.662a4.006 4.006 0 00-3.7-3.7 48.678 48.678 0 00-7.324 0 4.006 4.006 0 00-3.7 3.7c-.017.22-.032.441-.046.662M19.5 12l3-3m-3 3l-3-3m-12 3c0 1.232.046 2.453.138 3.662a4.006 4.006 0 003.7 3.7 48.656 48.656 0 007.324 0 4.006 4.006 0 003.7-3.7c.017-.22.032-.441.046-.662M4.5 12l3 3m-3-3l-3 3\"\n />\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 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 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 LayersIcon = ({ 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 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\"\n />\n </svg>\n);\n\nconst ClockIcon = ({ 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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const PipelineCard = memo(function PipelineCard({\n pipeline,\n onView,\n onEdit,\n onTest,\n onDelete,\n}: PipelineCardProps) {\n // Calculate stage count\n const stageCount = pipeline.stages?.length ?? 0;\n\n // Format last executed time\n const formatLastExecuted = useCallback((dateStr: string | null): string => {\n if (!dateStr) return 'Never run';\n try {\n const date = new Date(dateStr);\n return formatDistanceToNow(date, { addSuffix: true });\n } catch {\n return 'Unknown';\n }\n }, []);\n\n // Event handlers\n const handleCardClick = useCallback(() => {\n onView?.(pipeline.id);\n }, [onView, pipeline.id]);\n\n const handleTitleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onView?.(pipeline.id);\n },\n [onView, pipeline.id]\n );\n\n const handleEditClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(pipeline.id);\n },\n [onEdit, pipeline.id]\n );\n\n const handleTestClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onTest?.(pipeline.id);\n },\n [onTest, pipeline.id]\n );\n\n const handleDeleteClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(pipeline.id);\n },\n [onDelete, pipeline.id]\n );\n\n return (\n <article\n onClick={handleCardClick}\n data-testid=\"pipeline-card\"\n className=\"group flex min-w-0 cursor-pointer flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-1)] motion-safe:transition-[box-shadow,border-color] hover:border-[var(--color-border-strong)] hover:shadow-[var(--shadow-elevation-2)]\"\n >\n {/* Identity — name first, status right, icon reduced to a puck */}\n <div className=\"flex min-w-0 items-start gap-icon-gap border-b border-[var(--color-border-subtle)] p-4\">\n <span\n aria-hidden=\"true\"\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-button bg-bg-sunken text-text-secondary\"\n >\n <PipelineIcon className=\"h-icon-md w-icon-md\" />\n </span>\n\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"min-w-0 text-base font-semibold leading-tight text-text-primary\">\n <button\n type=\"button\"\n onClick={handleTitleClick}\n title={pipeline.name}\n className={`block w-full truncate rounded-button text-left ${SECTION_FOCUS_RING}`}\n >\n {pipeline.name}\n </button>\n </h3>\n {pipeline.description && (\n <p className=\"mt-0.5 line-clamp-2 text-sm text-text-secondary\">{pipeline.description}</p>\n )}\n </div>\n\n <PipelineStatusBadge status={pipeline.status} size=\"sm\" />\n </div>\n\n {/* Supporting facts + row actions */}\n <div className=\"flex flex-wrap items-center justify-between gap-control-gap p-4\">\n <dl className=\"flex min-w-0 flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary\">\n <div className=\"flex items-center gap-1\">\n <dt className=\"sr-only\">Stages</dt>\n <LayersIcon className=\"h-3.5 w-3.5 shrink-0\" aria-hidden=\"true\" />\n <dd>\n {stageCount} stage{stageCount !== 1 ? 's' : ''}\n </dd>\n </div>\n <div className=\"flex items-center gap-1\">\n <dt className=\"sr-only\">Last run</dt>\n <ClockIcon className=\"h-3.5 w-3.5 shrink-0\" aria-hidden=\"true\" />\n <dd\n title={\n pipeline.lastExecutedAt\n ? `Last executed: ${new Date(pipeline.lastExecutedAt).toLocaleString()}`\n : 'Never executed'\n }\n >\n {formatLastExecuted(pipeline.lastExecutedAt)}\n </dd>\n </div>\n </dl>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {onTest && (\n <button\n type=\"button\"\n onClick={handleTestClick}\n className={`${ICON_ACTION} hover:bg-[var(--color-status-success-bgSubtle)] hover:text-status-success-text`}\n title=\"Test Pipeline\"\n aria-label={`Test ${pipeline.name}`}\n >\n <PlayIcon className=\"h-icon-sm w-icon-sm\" />\n </button>\n )}\n {onEdit && (\n <button\n type=\"button\"\n onClick={handleEditClick}\n className={`${ICON_ACTION} hover:bg-bg-sunken hover:text-text-primary`}\n title=\"Edit Pipeline\"\n aria-label={`Edit ${pipeline.name}`}\n >\n <EditIcon className=\"h-icon-sm w-icon-sm\" />\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className={`${ICON_ACTION} hover:bg-[var(--color-status-error-bgSubtle)] hover:text-status-error-text`}\n title=\"Delete Pipeline\"\n aria-label={`Delete ${pipeline.name}`}\n >\n <DeleteIcon className=\"h-icon-sm w-icon-sm\" />\n </button>\n )}\n </div>\n </div>\n </article>\n );\n});\n\nexport default PipelineCard;\n"],"mappings":"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"}
|
|
@@ -1,86 +1,99 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { Section as e } from "../common/Section.js";
|
|
2
|
+
import "../common/index.js";
|
|
3
|
+
import { useModalFocusTrap as t } from "../../hooks/useModalFocusTrap.js";
|
|
4
|
+
import { memo as n, useCallback as r, useId as i, useRef as a } from "react";
|
|
5
|
+
import { Button as o } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
3
7
|
//#region src/bigconsole/components/pipeline/PipelineDeleteDialog.tsx
|
|
4
|
-
var
|
|
8
|
+
var l = ({ className: e }) => /* @__PURE__ */ s("svg", {
|
|
5
9
|
className: e,
|
|
6
10
|
fill: "none",
|
|
7
11
|
stroke: "currentColor",
|
|
8
12
|
viewBox: "0 0 24 24",
|
|
9
|
-
children: /* @__PURE__ */
|
|
13
|
+
children: /* @__PURE__ */ s("path", {
|
|
10
14
|
strokeLinecap: "round",
|
|
11
15
|
strokeLinejoin: "round",
|
|
12
16
|
strokeWidth: 2,
|
|
13
17
|
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
14
18
|
})
|
|
15
|
-
}),
|
|
16
|
-
let
|
|
17
|
-
|
|
18
|
-
}, [
|
|
19
|
-
|
|
20
|
-
}, [
|
|
21
|
-
return
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
}), u = n(function({ pipeline: n, isOpen: u, onClose: d, onConfirm: f }) {
|
|
20
|
+
let p = n.stages?.length ?? 0, m = i(), h = i(), g = a(null), _ = a(null), v = r(() => {
|
|
21
|
+
d();
|
|
22
|
+
}, [d]), y = r(() => {
|
|
23
|
+
f();
|
|
24
|
+
}, [f]);
|
|
25
|
+
return t({
|
|
26
|
+
isOpen: u,
|
|
27
|
+
panelRef: g,
|
|
28
|
+
onClose: d,
|
|
29
|
+
initialFocusRef: _
|
|
30
|
+
}), u ? /* @__PURE__ */ c("div", {
|
|
31
|
+
className: "fixed inset-0 z-50 flex items-center justify-center p-4",
|
|
32
|
+
children: [/* @__PURE__ */ s("div", {
|
|
33
|
+
"aria-hidden": "true",
|
|
34
|
+
className: "absolute inset-0 bg-[var(--color-bg-overlay)]",
|
|
35
|
+
onClick: v
|
|
36
|
+
}), /* @__PURE__ */ c("div", {
|
|
37
|
+
ref: g,
|
|
38
|
+
role: "dialog",
|
|
39
|
+
"aria-modal": "true",
|
|
40
|
+
"aria-labelledby": m,
|
|
41
|
+
"aria-describedby": h,
|
|
42
|
+
tabIndex: -1,
|
|
43
|
+
"data-testid": "pipeline-delete-dialog",
|
|
44
|
+
className: "relative flex max-h-[calc(100dvh-2rem)] w-full max-w-md min-w-0 flex-col gap-form-gap overflow-y-auto rounded-card border border-[var(--color-border-subtle)] bg-bg-surface p-card-padding shadow-[var(--shadow-elevation-4)] focus:outline-none",
|
|
28
45
|
children: [
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
className: "flex items-center gap-
|
|
31
|
-
children: [/* @__PURE__ */
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
/* @__PURE__ */ c("div", {
|
|
47
|
+
className: "flex items-center gap-icon-gap",
|
|
48
|
+
children: [/* @__PURE__ */ s("span", {
|
|
49
|
+
"aria-hidden": "true",
|
|
50
|
+
className: "rounded-pill bg-[var(--color-status-error-bgSubtle)] p-2",
|
|
51
|
+
children: /* @__PURE__ */ s(l, { className: "h-icon-md w-icon-md text-status-error-text" })
|
|
52
|
+
}), /* @__PURE__ */ s("h2", {
|
|
53
|
+
id: m,
|
|
35
54
|
className: "text-lg font-semibold text-text-primary",
|
|
36
55
|
children: "Delete Pipeline"
|
|
37
56
|
})]
|
|
38
57
|
}),
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
className: "
|
|
41
|
-
children: [
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
". All stages will be permanently deleted."
|
|
64
|
-
]
|
|
65
|
-
})
|
|
66
|
-
}),
|
|
67
|
-
/* @__PURE__ */ n("p", {
|
|
68
|
-
className: "text-sm text-text-secondary mt-3",
|
|
69
|
-
children: "This action cannot be undone."
|
|
58
|
+
/* @__PURE__ */ c("div", {
|
|
59
|
+
className: "flex min-w-0 flex-col gap-form-gap",
|
|
60
|
+
children: [/* @__PURE__ */ c("p", {
|
|
61
|
+
id: h,
|
|
62
|
+
className: "text-sm text-text-secondary",
|
|
63
|
+
children: [
|
|
64
|
+
"Are you sure you want to delete the pipeline",
|
|
65
|
+
" ",
|
|
66
|
+
/* @__PURE__ */ s("span", {
|
|
67
|
+
className: "font-medium text-text-primary",
|
|
68
|
+
children: n.name
|
|
69
|
+
}),
|
|
70
|
+
"? This action cannot be undone."
|
|
71
|
+
]
|
|
72
|
+
}), p > 0 && /* @__PURE__ */ s(e, {
|
|
73
|
+
tone: "warning",
|
|
74
|
+
padding: "compact",
|
|
75
|
+
headingLevel: 3,
|
|
76
|
+
title: `${p} stage${p === 1 ? "" : "s"} will be deleted`,
|
|
77
|
+
icon: /* @__PURE__ */ s(l, { className: "h-icon-sm w-icon-sm" }),
|
|
78
|
+
"data-testid": "pipeline-delete-stage-warning",
|
|
79
|
+
children: /* @__PURE__ */ s("p", {
|
|
80
|
+
className: "text-sm text-text-secondary",
|
|
81
|
+
children: "Every stage in this pipeline is removed with it. The parsers themselves are not deleted."
|
|
70
82
|
})
|
|
71
|
-
]
|
|
83
|
+
})]
|
|
72
84
|
}),
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
-
className: "flex justify-end gap-
|
|
75
|
-
children: [/* @__PURE__ */
|
|
85
|
+
/* @__PURE__ */ c("div", {
|
|
86
|
+
className: "flex flex-wrap justify-end gap-control-gap border-t border-[var(--color-border-subtle)] pt-form-gap",
|
|
87
|
+
children: [/* @__PURE__ */ s(o, {
|
|
88
|
+
ref: _,
|
|
76
89
|
type: "button",
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
variant: "secondary",
|
|
91
|
+
onClick: d,
|
|
79
92
|
children: "Cancel"
|
|
80
|
-
}), /* @__PURE__ */
|
|
93
|
+
}), /* @__PURE__ */ s(o, {
|
|
81
94
|
type: "button",
|
|
82
|
-
|
|
83
|
-
|
|
95
|
+
variant: "destructive",
|
|
96
|
+
onClick: y,
|
|
84
97
|
children: "Delete Pipeline"
|
|
85
98
|
})]
|
|
86
99
|
})
|
|
@@ -89,6 +102,6 @@ var i = ({ className: e }) => /* @__PURE__ */ n("svg", {
|
|
|
89
102
|
}) : null;
|
|
90
103
|
});
|
|
91
104
|
//#endregion
|
|
92
|
-
export {
|
|
105
|
+
export { u as default };
|
|
93
106
|
|
|
94
107
|
//# sourceMappingURL=PipelineDeleteDialog.js.map
|