@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,151 +1,166 @@
|
|
|
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 "./WorkflowStatusBadge.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/workflow/WorkflowCard.tsx
|
|
6
|
-
var
|
|
8
|
+
var s = ({ 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: "M13 10V3L4 14h7v7l9-11h-7z"
|
|
16
18
|
})
|
|
17
|
-
}),
|
|
19
|
+
}), c = ({ 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
|
+
}), l = ({ className: e }) => /* @__PURE__ */ i("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: "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"
|
|
38
40
|
})
|
|
39
|
-
}),
|
|
41
|
+
}), u = ({ className: e }) => /* @__PURE__ */ i("svg", {
|
|
40
42
|
className: e,
|
|
41
43
|
fill: "none",
|
|
42
44
|
stroke: "currentColor",
|
|
43
45
|
viewBox: "0 0 24 24",
|
|
44
|
-
children: /* @__PURE__ */
|
|
46
|
+
children: /* @__PURE__ */ i("path", {
|
|
45
47
|
strokeLinecap: "round",
|
|
46
48
|
strokeLinejoin: "round",
|
|
47
49
|
strokeWidth: 2,
|
|
48
50
|
d: "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4"
|
|
49
51
|
})
|
|
50
|
-
}),
|
|
52
|
+
}), d = ({ className: e }) => /* @__PURE__ */ a("svg", {
|
|
51
53
|
className: e,
|
|
52
54
|
fill: "none",
|
|
53
55
|
stroke: "currentColor",
|
|
54
56
|
viewBox: "0 0 24 24",
|
|
55
|
-
children: [/* @__PURE__ */
|
|
57
|
+
children: [/* @__PURE__ */ i("path", {
|
|
56
58
|
strokeLinecap: "round",
|
|
57
59
|
strokeLinejoin: "round",
|
|
58
60
|
strokeWidth: 2,
|
|
59
61
|
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"
|
|
60
|
-
}), /* @__PURE__ */
|
|
62
|
+
}), /* @__PURE__ */ i("path", {
|
|
61
63
|
strokeLinecap: "round",
|
|
62
64
|
strokeLinejoin: "round",
|
|
63
65
|
strokeWidth: 2,
|
|
64
66
|
d: "M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
65
67
|
})]
|
|
66
|
-
}),
|
|
67
|
-
let
|
|
68
|
+
}), f = n(function({ workflow: n, onView: f, onEdit: p, onDelete: m }) {
|
|
69
|
+
let h = n.dataSinkLinks?.length ?? n.linkedDataSinkCount ?? 0, g = r((e) => {
|
|
68
70
|
if (!e) return "Never";
|
|
69
71
|
try {
|
|
70
|
-
return
|
|
72
|
+
return o(new Date(e), { addSuffix: !0 });
|
|
71
73
|
} catch {
|
|
72
74
|
return "Unknown";
|
|
73
75
|
}
|
|
74
|
-
}, []),
|
|
75
|
-
|
|
76
|
-
}, [
|
|
77
|
-
e.stopPropagation(),
|
|
78
|
-
}, [
|
|
79
|
-
e.stopPropagation(),
|
|
80
|
-
}, [
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
76
|
+
}, []), _ = r(() => {
|
|
77
|
+
f?.(n.id);
|
|
78
|
+
}, [f, n.id]), v = r((e) => {
|
|
79
|
+
e.stopPropagation(), p?.(n.id);
|
|
80
|
+
}, [p, n.id]), y = r((e) => {
|
|
81
|
+
e.stopPropagation(), m?.(n.id);
|
|
82
|
+
}, [m, n.id]), b = r((e) => {
|
|
83
|
+
e.stopPropagation(), f?.(n.id);
|
|
84
|
+
}, [f, n.id]);
|
|
85
|
+
return /* @__PURE__ */ a("div", {
|
|
86
|
+
onClick: _,
|
|
87
|
+
className: "min-w-0 cursor-pointer overflow-hidden rounded-card border border-[var(--color-border-subtle)] bg-bg-elevated motion-safe:transition-[box-shadow,border-color] focus-within:border-action-primary-bg hover:border-action-primary-bg hover:shadow-[var(--shadow-elevation-1)]",
|
|
88
|
+
children: [/* @__PURE__ */ a("div", {
|
|
89
|
+
className: "flex items-center justify-between gap-icon-gap border-b border-[var(--color-border-subtle)] bg-bg-sunken px-3 py-2",
|
|
90
|
+
children: [/* @__PURE__ */ a("span", {
|
|
91
|
+
className: "flex min-w-0 items-center gap-icon-gap text-xs font-medium text-text-secondary",
|
|
92
|
+
children: [/* @__PURE__ */ i(s, { className: "w-4 h-4 shrink-0" }), /* @__PURE__ */ i("span", {
|
|
93
|
+
className: "truncate",
|
|
94
|
+
children: "Workflow"
|
|
95
|
+
})]
|
|
96
|
+
}), /* @__PURE__ */ i(t, {
|
|
97
|
+
status: n.status,
|
|
98
|
+
size: "sm"
|
|
92
99
|
})]
|
|
93
|
-
}), /* @__PURE__ */
|
|
94
|
-
className: "p-
|
|
100
|
+
}), /* @__PURE__ */ a("div", {
|
|
101
|
+
className: "p-card-padding",
|
|
95
102
|
children: [
|
|
96
|
-
/* @__PURE__ */
|
|
97
|
-
className: "flex items-start justify-between
|
|
98
|
-
children: [/* @__PURE__ */
|
|
99
|
-
className: "
|
|
100
|
-
children: [/* @__PURE__ */
|
|
101
|
-
className: "text-sm font-semibold text-text-primary
|
|
102
|
-
children:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
/* @__PURE__ */ a("div", {
|
|
104
|
+
className: "mb-2 flex items-start justify-between gap-icon-gap",
|
|
105
|
+
children: [/* @__PURE__ */ a("div", {
|
|
106
|
+
className: "min-w-0 flex-1",
|
|
107
|
+
children: [/* @__PURE__ */ i("h3", {
|
|
108
|
+
className: "text-sm font-semibold text-text-primary",
|
|
109
|
+
children: /* @__PURE__ */ i("button", {
|
|
110
|
+
type: "button",
|
|
111
|
+
onClick: b,
|
|
112
|
+
"aria-label": `Open workflow ${n.name}`,
|
|
113
|
+
className: `line-clamp-2 rounded-button text-left ${e}`,
|
|
114
|
+
children: n.name
|
|
115
|
+
})
|
|
116
|
+
}), /* @__PURE__ */ i("p", {
|
|
117
|
+
className: "mt-0.5 truncate font-mono text-xs text-text-secondary",
|
|
118
|
+
children: n.key
|
|
106
119
|
})]
|
|
107
|
-
}), /* @__PURE__ */
|
|
108
|
-
className: "flex items-center gap-1
|
|
109
|
-
children: [
|
|
120
|
+
}), /* @__PURE__ */ a("div", {
|
|
121
|
+
className: "flex shrink-0 items-center gap-1",
|
|
122
|
+
children: [p && /* @__PURE__ */ i("button", {
|
|
110
123
|
type: "button",
|
|
111
|
-
onClick:
|
|
112
|
-
className: "
|
|
124
|
+
onClick: v,
|
|
125
|
+
className: "inline-flex h-control-md w-[var(--size-controlHeight-md)] items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors hover:bg-bg-sunken hover:text-text-primary sm:h-control-sm sm:w-[var(--size-controlHeight-sm)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
113
126
|
title: "Edit Workflow",
|
|
114
|
-
|
|
115
|
-
|
|
127
|
+
"aria-label": `Edit workflow ${n.name}`,
|
|
128
|
+
children: /* @__PURE__ */ i(c, { className: "w-4 h-4" })
|
|
129
|
+
}), m && /* @__PURE__ */ i("button", {
|
|
116
130
|
type: "button",
|
|
117
|
-
onClick:
|
|
118
|
-
className: "
|
|
131
|
+
onClick: y,
|
|
132
|
+
className: "inline-flex h-control-md w-[var(--size-controlHeight-md)] items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors hover:bg-status-error-bg/10 hover:text-status-error-text sm:h-control-sm sm:w-[var(--size-controlHeight-sm)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
119
133
|
title: "Delete Workflow",
|
|
120
|
-
|
|
134
|
+
"aria-label": `Delete workflow ${n.name}`,
|
|
135
|
+
children: /* @__PURE__ */ i(l, { className: "w-4 h-4" })
|
|
121
136
|
})]
|
|
122
137
|
})]
|
|
123
138
|
}),
|
|
124
|
-
|
|
125
|
-
className: "text-xs text-text-secondary
|
|
126
|
-
children:
|
|
139
|
+
n.description && /* @__PURE__ */ i("p", {
|
|
140
|
+
className: "mb-3 line-clamp-2 text-xs text-text-secondary",
|
|
141
|
+
children: n.description
|
|
127
142
|
}),
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
className: "flex items-center justify-between text-xs text-text-
|
|
130
|
-
children: [/* @__PURE__ */
|
|
131
|
-
className: "flex items-center gap-3",
|
|
132
|
-
children: [/* @__PURE__ */
|
|
143
|
+
/* @__PURE__ */ a("div", {
|
|
144
|
+
className: "flex flex-wrap items-center justify-between gap-x-3 gap-y-1 text-xs text-text-muted",
|
|
145
|
+
children: [/* @__PURE__ */ a("div", {
|
|
146
|
+
className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1",
|
|
147
|
+
children: [/* @__PURE__ */ a("span", {
|
|
133
148
|
className: "flex items-center gap-1",
|
|
134
|
-
title: `${
|
|
149
|
+
title: `${h} linked DataSinks`,
|
|
135
150
|
children: [
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
|
|
151
|
+
/* @__PURE__ */ i(u, { className: "w-3.5 h-3.5 shrink-0" }),
|
|
152
|
+
h,
|
|
138
153
|
" DataSink",
|
|
139
|
-
|
|
154
|
+
h === 1 ? "" : "s"
|
|
140
155
|
]
|
|
141
|
-
}), /* @__PURE__ */
|
|
156
|
+
}), /* @__PURE__ */ a("span", {
|
|
142
157
|
className: "flex items-center gap-1",
|
|
143
|
-
title: `${
|
|
144
|
-
children: [/* @__PURE__ */
|
|
158
|
+
title: `${n.executionCount} executions`,
|
|
159
|
+
children: [/* @__PURE__ */ i(d, { className: "w-3.5 h-3.5 shrink-0" }), n.executionCount]
|
|
145
160
|
})]
|
|
146
|
-
}), /* @__PURE__ */
|
|
147
|
-
title:
|
|
148
|
-
children:
|
|
161
|
+
}), /* @__PURE__ */ i("span", {
|
|
162
|
+
title: n.lastExecutedAt ? `Last executed: ${new Date(n.lastExecutedAt).toLocaleString()}` : "Never executed",
|
|
163
|
+
children: g(n.lastExecutedAt)
|
|
149
164
|
})]
|
|
150
165
|
})
|
|
151
166
|
]
|
|
@@ -153,6 +168,6 @@ var o = ({ className: e }) => /* @__PURE__ */ r("svg", {
|
|
|
153
168
|
});
|
|
154
169
|
});
|
|
155
170
|
//#endregion
|
|
156
|
-
export {
|
|
171
|
+
export { f as default };
|
|
157
172
|
|
|
158
173
|
//# sourceMappingURL=WorkflowCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowCard.js","names":[],"sources":["../../../../src/bigconsole/components/workflow/WorkflowCard.tsx"],"sourcesContent":["/**\n * WorkflowCard Component\n *\n * Card component displaying a FluidGrids Workflow summary.\n * Shows name, status, linked DataSinks count, and execution stats.\n */\n\nimport { memo, useCallback } from 'react';\nimport { formatDistanceToNow } from 'date-fns';\nimport { WorkflowStatusBadge } from './WorkflowStatusBadge';\nimport type { FluidGridsWorkflow } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface WorkflowCardProps {\n workflow: FluidGridsWorkflow;\n onView?: (id: string) => void;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst WorkflowIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\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 DataSinkIcon = ({ 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=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\"\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\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const WorkflowCard = memo(function WorkflowCard({ workflow, onView, onEdit, onDelete }: WorkflowCardProps) {\n // Calculate linked DataSinks count\n const linkedDataSinkCount = workflow.dataSinkLinks?.length ?? workflow.linkedDataSinkCount ?? 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?.(workflow.id);\n }, [onView, workflow.id]);\n\n const handleEditClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(workflow.id);\n },\n [onEdit, workflow.id]\n );\n\n const handleDeleteClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(workflow.id);\n },\n [onDelete, workflow.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 <WorkflowIcon className=\"w-10 h-10 text-text-secondary/50\" />\n <div className=\"absolute top-2 right-2\">\n <WorkflowStatusBadge status={workflow.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\">{workflow.name}</h3>\n <p className=\"text-xs text-text-secondary truncate mt-0.5\">{workflow.key}</p>\n </div>\n\n <div className=\"flex items-center gap-1 ml-2\">\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 Workflow\"\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 Workflow\"\n >\n <DeleteIcon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Description */}\n {workflow.description && (\n <p className=\"text-xs text-text-secondary mb-3 line-clamp-2\">{workflow.description}</p>\n )}\n\n {/* Stats Footer */}\n <div className=\"flex items-center justify-between text-xs text-text-secondary\">\n <div className=\"flex items-center gap-3\">\n {/* DataSinks Count */}\n <span className=\"flex items-center gap-1\" title={`${linkedDataSinkCount} linked DataSinks`}>\n <DataSinkIcon className=\"w-3.5 h-3.5\" />\n {linkedDataSinkCount} DataSink{linkedDataSinkCount !== 1 ? 's' : ''}\n </span>\n\n {/* Execution Count */}\n <span className=\"flex items-center gap-1\" title={`${workflow.executionCount} executions`}>\n <PlayIcon className=\"w-3.5 h-3.5\" />\n {workflow.executionCount}\n </span>\n </div>\n\n {/* Last Executed */}\n <span\n title={\n workflow.lastExecutedAt\n ? `Last executed: ${new Date(workflow.lastExecutedAt).toLocaleString()}`\n : 'Never executed'\n }\n >\n {formatLastExecuted(workflow.lastExecutedAt)}\n </span>\n </div>\n </div>\n </div>\n );\n});\n\nexport default WorkflowCard;\n"],"mappings":";;;;;AA2BA,IAAM,KAAgB,EAAE,mBACtB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAK,GAAE;EAA+B,CAAA;CAClG,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAc,EAAE,mBACpB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAgB,EAAE,mBACtB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WAArE,CACE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA,EACF,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAuC,CAAA,CACxG;IAOK,IAAe,EAAK,SAAsB,EAAE,aAAU,WAAQ,WAAQ,eAA+B;CAEhH,IAAM,IAAsB,EAAS,eAAe,UAAU,EAAS,uBAAuB,GAGxF,IAAqB,GAAa,MAAmC;AACzE,MAAI,CAAC,EAAS,QAAO;AACrB,MAAI;AAEF,UAAO,EADM,IAAI,KAAK,EAAQ,EACG,EAAE,WAAW,IAAM,CAAC;UAC/C;AACN,UAAO;;IAER,EAAE,CAAC,EAGA,IAAkB,QAAkB;AACxC,MAAS,EAAS,GAAG;IACpB,CAAC,GAAQ,EAAS,GAAG,CAAC,EAEnB,IAAkB,GACrB,MAAwB;AAEvB,EADA,EAAE,iBAAiB,EACnB,IAAS,EAAS,GAAG;IAEvB,CAAC,GAAQ,EAAS,GAAG,CACtB,EAEK,IAAoB,GACvB,MAAwB;AAEvB,EADA,EAAE,iBAAiB,EACnB,IAAW,EAAS,GAAG;IAEzB,CAAC,GAAU,EAAS,GAAG,CACxB;AAED,QACE,kBAAC,OAAD;EACE,SAAS;EACT,WAAU;YAFZ,CAaE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,GAAD,EAAc,WAAU,oCAAqC,CAAA,EAC7D,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAqB,QAAQ,EAAS;KAAQ,MAAK;KAAO,CAAA;IACtD,CAAA,CACF;MAGN,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBAAoD,EAAS;OAAU,CAAA,EACrF,kBAAC,KAAD;OAAG,WAAU;iBAA+C,EAAS;OAAQ,CAAA,CACzE;SAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,KACC,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAU;OAOV,OAAM;iBAEN,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;OACzB,CAAA,EAEV,KACC,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAU;OAOV,OAAM;iBAEN,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;OAC3B,CAAA,CAEP;QACF;;IAGL,EAAS,eACR,kBAAC,KAAD;KAAG,WAAU;eAAiD,EAAS;KAAgB,CAAA;IAIzF,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CAEE,kBAAC,QAAD;OAAM,WAAU;OAA0B,OAAO,GAAG,EAAoB;iBAAxE;QACE,kBAAC,GAAD,EAAc,WAAU,eAAgB,CAAA;QACvC;QAAoB;QAAU,MAAwB,IAAU,KAAN;QACtD;UAGP,kBAAC,QAAD;OAAM,WAAU;OAA0B,OAAO,GAAG,EAAS,eAAe;iBAA5E,CACE,kBAAC,GAAD,EAAU,WAAU,eAAgB,CAAA,EACnC,EAAS,eACL;SACH;SAGN,kBAAC,QAAD;MACE,OACE,EAAS,iBACL,kBAAkB,IAAI,KAAK,EAAS,eAAe,CAAC,gBAAgB,KACpE;gBAGL,EAAmB,EAAS,eAAe;MACvC,CAAA,CACH;;IACF;KACF;;EAER"}
|
|
1
|
+
{"version":3,"file":"WorkflowCard.js","names":[],"sources":["../../../../src/bigconsole/components/workflow/WorkflowCard.tsx"],"sourcesContent":["/**\n * WorkflowCard Component\n *\n * Card component displaying a FluidGrids Workflow summary.\n * Shows name, status, linked DataSinks count, and execution stats.\n *\n * Emphasis (BOFF-5634): the card is a tile inside the list page's `primary`\n * results section, so it sits on `bg-bg-elevated` — one step above the section\n * surface — rather than repeating the generic panel treatment used by every\n * other block in the module. The old 96px empty media band carried no\n * information and out-weighed the title; it is now a compact identity strip.\n */\n\nimport { memo, useCallback } from 'react';\nimport { formatDistanceToNow } from 'date-fns';\nimport { WorkflowStatusBadge } from './WorkflowStatusBadge';\nimport { SECTION_FOCUS_RING } from '../common';\nimport type { FluidGridsWorkflow } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface WorkflowCardProps {\n workflow: FluidGridsWorkflow;\n onView?: (id: string) => void;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst WorkflowIcon = ({ className }: { className?: string }) => (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\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 DataSinkIcon = ({ 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=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\"\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\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const WorkflowCard = memo(function WorkflowCard({ workflow, onView, onEdit, onDelete }: WorkflowCardProps) {\n // Calculate linked DataSinks count\n const linkedDataSinkCount = workflow.dataSinkLinks?.length ?? workflow.linkedDataSinkCount ?? 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?.(workflow.id);\n }, [onView, workflow.id]);\n\n const handleEditClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onEdit?.(workflow.id);\n },\n [onEdit, workflow.id]\n );\n\n const handleDeleteClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(workflow.id);\n },\n [onDelete, workflow.id]\n );\n\n // The title is the real \"open this workflow\" control. The tile itself must NOT\n // carry role=\"button\": that role makes its subtree presentational, which would\n // drop the Edit/Delete buttons and the status badge out of the accessibility\n // tree. The tile keeps a plain click handler as a pointer convenience only.\n const handleTitleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onView?.(workflow.id);\n },\n [onView, workflow.id]\n );\n\n return (\n <div\n onClick={handleCardClick}\n className=\"min-w-0 cursor-pointer overflow-hidden rounded-card border border-[var(--color-border-subtle)] bg-bg-elevated motion-safe:transition-[box-shadow,border-color] focus-within:border-action-primary-bg hover:border-action-primary-bg hover:shadow-[var(--shadow-elevation-1)]\"\n >\n {/* Identity strip: what kind of thing this is + its status, at a glance */}\n <div className=\"flex items-center justify-between gap-icon-gap border-b border-[var(--color-border-subtle)] bg-bg-sunken px-3 py-2\">\n <span className=\"flex min-w-0 items-center gap-icon-gap text-xs font-medium text-text-secondary\">\n <WorkflowIcon className=\"w-4 h-4 shrink-0\" />\n <span className=\"truncate\">Workflow</span>\n </span>\n <WorkflowStatusBadge status={workflow.status} size=\"sm\" />\n </div>\n\n {/* Content */}\n <div className=\"p-card-padding\">\n {/* Title and Actions */}\n <div className=\"mb-2 flex items-start justify-between gap-icon-gap\">\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-semibold text-text-primary\">\n <button\n type=\"button\"\n onClick={handleTitleClick}\n aria-label={`Open workflow ${workflow.name}`}\n className={`line-clamp-2 rounded-button text-left ${SECTION_FOCUS_RING}`}\n >\n {workflow.name}\n </button>\n </h3>\n <p className=\"mt-0.5 truncate font-mono text-xs text-text-secondary\">{workflow.key}</p>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {onEdit && (\n <button\n type=\"button\"\n onClick={handleEditClick}\n className={`inline-flex h-control-md w-[var(--size-controlHeight-md)] items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors hover:bg-bg-sunken hover:text-text-primary sm:h-control-sm sm:w-[var(--size-controlHeight-sm)] ${SECTION_FOCUS_RING}`}\n title=\"Edit Workflow\"\n aria-label={`Edit workflow ${workflow.name}`}\n >\n <EditIcon className=\"w-4 h-4\" />\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={handleDeleteClick}\n className={`inline-flex h-control-md w-[var(--size-controlHeight-md)] items-center justify-center rounded-button text-text-secondary motion-safe:transition-colors hover:bg-status-error-bg/10 hover:text-status-error-text sm:h-control-sm sm:w-[var(--size-controlHeight-sm)] ${SECTION_FOCUS_RING}`}\n title=\"Delete Workflow\"\n aria-label={`Delete workflow ${workflow.name}`}\n >\n <DeleteIcon className=\"w-4 h-4\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Description */}\n {workflow.description && (\n <p className=\"mb-3 line-clamp-2 text-xs text-text-secondary\">{workflow.description}</p>\n )}\n\n {/* Stats Footer */}\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1 text-xs text-text-muted\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1\">\n {/* DataSinks Count */}\n <span className=\"flex items-center gap-1\" title={`${linkedDataSinkCount} linked DataSinks`}>\n <DataSinkIcon className=\"w-3.5 h-3.5 shrink-0\" />\n {linkedDataSinkCount} DataSink{linkedDataSinkCount !== 1 ? 's' : ''}\n </span>\n\n {/* Execution Count */}\n <span className=\"flex items-center gap-1\" title={`${workflow.executionCount} executions`}>\n <PlayIcon className=\"w-3.5 h-3.5 shrink-0\" />\n {workflow.executionCount}\n </span>\n </div>\n\n {/* Last Executed */}\n <span\n title={\n workflow.lastExecutedAt\n ? `Last executed: ${new Date(workflow.lastExecutedAt).toLocaleString()}`\n : 'Never executed'\n }\n >\n {formatLastExecuted(workflow.lastExecutedAt)}\n </span>\n </div>\n </div>\n </div>\n );\n});\n\nexport default WorkflowCard;\n"],"mappings":";;;;;;;AAkCA,IAAM,KAAgB,EAAE,mBACtB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAK,GAAE;EAA+B,CAAA;CAClG,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAc,EAAE,mBACpB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAgB,EAAE,mBACtB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WACnE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA;CACE,CAAA,EAGF,KAAY,EAAE,mBAClB,kBAAC,OAAD;CAAgB;CAAW,MAAK;CAAO,QAAO;CAAe,SAAQ;WAArE,CACE,kBAAC,QAAD;EACE,eAAc;EACd,gBAAe;EACf,aAAa;EACb,GAAE;EACF,CAAA,EACF,kBAAC,QAAD;EAAM,eAAc;EAAQ,gBAAe;EAAQ,aAAa;EAAG,GAAE;EAAuC,CAAA,CACxG;IAOK,IAAe,EAAK,SAAsB,EAAE,aAAU,WAAQ,WAAQ,eAA+B;CAEhH,IAAM,IAAsB,EAAS,eAAe,UAAU,EAAS,uBAAuB,GAGxF,IAAqB,GAAa,MAAmC;AACzE,MAAI,CAAC,EAAS,QAAO;AACrB,MAAI;AAEF,UAAO,EADM,IAAI,KAAK,EAAQ,EACG,EAAE,WAAW,IAAM,CAAC;UAC/C;AACN,UAAO;;IAER,EAAE,CAAC,EAGA,IAAkB,QAAkB;AACxC,MAAS,EAAS,GAAG;IACpB,CAAC,GAAQ,EAAS,GAAG,CAAC,EAEnB,IAAkB,GACrB,MAAwB;AAEvB,EADA,EAAE,iBAAiB,EACnB,IAAS,EAAS,GAAG;IAEvB,CAAC,GAAQ,EAAS,GAAG,CACtB,EAEK,IAAoB,GACvB,MAAwB;AAEvB,EADA,EAAE,iBAAiB,EACnB,IAAW,EAAS,GAAG;IAEzB,CAAC,GAAU,EAAS,GAAG,CACxB,EAMK,IAAmB,GACtB,MAAwB;AAEvB,EADA,EAAE,iBAAiB,EACnB,IAAS,EAAS,GAAG;IAEvB,CAAC,GAAQ,EAAS,GAAG,CACtB;AAED,QACE,kBAAC,OAAD;EACE,SAAS;EACT,WAAU;YAFZ,CAKE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cAAhB,CACE,kBAAC,GAAD,EAAc,WAAU,oBAAqB,CAAA,EAC7C,kBAAC,QAAD;KAAM,WAAU;eAAW;KAAe,CAAA,CACrC;OACP,kBAAC,GAAD;IAAqB,QAAQ,EAAS;IAAQ,MAAK;IAAO,CAAA,CACtD;MAGN,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACZ,kBAAC,UAAD;QACE,MAAK;QACL,SAAS;QACT,cAAY,iBAAiB,EAAS;QACtC,WAAW,yCAAyC;kBAEnD,EAAS;QACH,CAAA;OACN,CAAA,EACL,kBAAC,KAAD;OAAG,WAAU;iBAAyD,EAAS;OAAQ,CAAA,CACnF;SAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACG,KACC,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAW;OACX,OAAM;OACN,cAAY,iBAAiB,EAAS;iBAEtC,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;OACzB,CAAA,EAEV,KACC,kBAAC,UAAD;OACE,MAAK;OACL,SAAS;OACT,WAAW;OACX,OAAM;OACN,cAAY,mBAAmB,EAAS;iBAExC,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;OAC3B,CAAA,CAEP;QACF;;IAGL,EAAS,eACR,kBAAC,KAAD;KAAG,WAAU;eAAiD,EAAS;KAAgB,CAAA;IAIzF,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CAEE,kBAAC,QAAD;OAAM,WAAU;OAA0B,OAAO,GAAG,EAAoB;iBAAxE;QACE,kBAAC,GAAD,EAAc,WAAU,wBAAyB,CAAA;QAChD;QAAoB;QAAU,MAAwB,IAAU,KAAN;QACtD;UAGP,kBAAC,QAAD;OAAM,WAAU;OAA0B,OAAO,GAAG,EAAS,eAAe;iBAA5E,CACE,kBAAC,GAAD,EAAU,WAAU,wBAAyB,CAAA,EAC5C,EAAS,eACL;SACH;SAGN,kBAAC,QAAD;MACE,OACE,EAAS,iBACL,kBAAkB,IAAI,KAAK,EAAS,eAAe,CAAC,gBAAgB,KACpE;gBAGL,EAAmB,EAAS,eAAe;MACvC,CAAA,CACH;;IACF;KACF;;EAER"}
|
|
@@ -1,86 +1,105 @@
|
|
|
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/workflow/WorkflowDeleteDialog.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({ workflow: n, isOpen: u, onClose: d, onConfirm: f }) {
|
|
20
|
+
let p = n.dataSinkLinks?.length ?? n.linkedDataSinkCount ?? 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
|
+
className: "relative flex max-h-[calc(100dvh-2rem)] w-full max-w-md flex-col overflow-y-auto rounded-card border border-[var(--color-border-subtle)] bg-bg-surface p-card-padding shadow-[var(--shadow-elevation-3)] focus:outline-none",
|
|
28
44
|
children: [
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
className: "flex items-center gap-
|
|
31
|
-
children: [/* @__PURE__ */
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
45
|
+
/* @__PURE__ */ c("div", {
|
|
46
|
+
className: "mb-form-gap flex items-center gap-icon-gap",
|
|
47
|
+
children: [/* @__PURE__ */ s("span", {
|
|
48
|
+
"aria-hidden": "true",
|
|
49
|
+
className: "flex shrink-0 items-center justify-center rounded-pill bg-[var(--color-status-error-bgSubtle)] p-2",
|
|
50
|
+
children: /* @__PURE__ */ s(l, { className: "w-6 h-6 text-status-error-text" })
|
|
51
|
+
}), /* @__PURE__ */ s("h2", {
|
|
52
|
+
id: m,
|
|
35
53
|
className: "text-lg font-semibold text-text-primary",
|
|
36
54
|
children: "Delete Workflow"
|
|
37
55
|
})]
|
|
38
56
|
}),
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
className: "mb-
|
|
57
|
+
/* @__PURE__ */ c("div", {
|
|
58
|
+
className: "mb-form-gap flex flex-col gap-control-gap",
|
|
41
59
|
children: [
|
|
42
|
-
/* @__PURE__ */
|
|
43
|
-
|
|
60
|
+
/* @__PURE__ */ c("p", {
|
|
61
|
+
id: h,
|
|
62
|
+
className: "text-sm text-text-secondary",
|
|
44
63
|
children: [
|
|
45
64
|
"Are you sure you want to delete the workflow",
|
|
46
65
|
" ",
|
|
47
|
-
/* @__PURE__ */
|
|
66
|
+
/* @__PURE__ */ s("span", {
|
|
48
67
|
className: "font-medium text-text-primary",
|
|
49
|
-
children:
|
|
68
|
+
children: n.name
|
|
50
69
|
}),
|
|
51
70
|
"?"
|
|
52
71
|
]
|
|
53
72
|
}),
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
c === 1 ? "" : "s",
|
|
63
|
-
". Deleting this workflow will remove the links, but the DataSinks will not be deleted."
|
|
64
|
-
]
|
|
73
|
+
p > 0 && /* @__PURE__ */ s(e, {
|
|
74
|
+
headingLevel: 3,
|
|
75
|
+
tone: "warning",
|
|
76
|
+
padding: "compact",
|
|
77
|
+
title: `${p} linked DataSink${p === 1 ? "" : "s"} will be unlinked`,
|
|
78
|
+
children: /* @__PURE__ */ s("p", {
|
|
79
|
+
className: "text-sm text-[var(--color-status-warning-text)]",
|
|
80
|
+
children: "Deleting this workflow removes the links. The DataSinks themselves are not deleted."
|
|
65
81
|
})
|
|
66
82
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
className: "text-sm text-text-secondary
|
|
83
|
+
/* @__PURE__ */ s("p", {
|
|
84
|
+
className: "text-sm text-text-secondary",
|
|
69
85
|
children: "This action cannot be undone."
|
|
70
86
|
})
|
|
71
87
|
]
|
|
72
88
|
}),
|
|
73
|
-
/* @__PURE__ */
|
|
74
|
-
className: "flex justify-end gap-
|
|
75
|
-
children: [/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ c("div", {
|
|
90
|
+
className: "flex flex-wrap justify-end gap-control-gap",
|
|
91
|
+
children: [/* @__PURE__ */ s(o, {
|
|
92
|
+
ref: _,
|
|
76
93
|
type: "button",
|
|
77
|
-
|
|
78
|
-
|
|
94
|
+
size: "lg",
|
|
95
|
+
variant: "outline",
|
|
96
|
+
onClick: d,
|
|
79
97
|
children: "Cancel"
|
|
80
|
-
}), /* @__PURE__ */
|
|
98
|
+
}), /* @__PURE__ */ s(o, {
|
|
81
99
|
type: "button",
|
|
82
|
-
|
|
83
|
-
|
|
100
|
+
size: "lg",
|
|
101
|
+
variant: "destructive",
|
|
102
|
+
onClick: y,
|
|
84
103
|
children: "Delete Workflow"
|
|
85
104
|
})]
|
|
86
105
|
})
|
|
@@ -89,6 +108,6 @@ var i = ({ className: e }) => /* @__PURE__ */ n("svg", {
|
|
|
89
108
|
}) : null;
|
|
90
109
|
});
|
|
91
110
|
//#endregion
|
|
92
|
-
export {
|
|
111
|
+
export { u as default };
|
|
93
112
|
|
|
94
113
|
//# sourceMappingURL=WorkflowDeleteDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowDeleteDialog.js","names":[],"sources":["../../../../src/bigconsole/components/workflow/WorkflowDeleteDialog.tsx"],"sourcesContent":["/**\n * WorkflowDeleteDialog Component\n *\n * Confirmation dialog for deleting a FluidGrids Workflow.\n * Shows warning about linked DataSinks before deletion.\n */\n\nimport { memo, useCallback } from 'react';\nimport type { FluidGridsWorkflow } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface WorkflowDeleteDialogProps {\n workflow: FluidGridsWorkflow;\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void | Promise<void>;\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst WarningIcon = ({ 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 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\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const WorkflowDeleteDialog = memo(function WorkflowDeleteDialog({\n workflow,\n isOpen,\n onClose,\n onConfirm,\n}: WorkflowDeleteDialogProps) {\n // Calculate linked DataSinks count\n const linkedDataSinkCount = workflow.dataSinkLinks?.length ?? workflow.linkedDataSinkCount ?? 0;\n\n // Event handlers\n const handleBackdropClick = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleConfirmClick = useCallback(() => {\n onConfirm();\n }, [onConfirm]);\n\n // Don't render if not open\n if (!isOpen) {\n return null;\n }\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div className=\"absolute inset-0 bg-
|
|
1
|
+
{"version":3,"file":"WorkflowDeleteDialog.js","names":[],"sources":["../../../../src/bigconsole/components/workflow/WorkflowDeleteDialog.tsx"],"sourcesContent":["/**\n * WorkflowDeleteDialog Component\n *\n * Confirmation dialog for deleting a FluidGrids Workflow.\n * Shows warning about linked DataSinks before deletion.\n *\n * Emphasis (BOFF-5634): the panel bands into header → body → warning → actions.\n * The linked-DataSinks warning is a real `Section tone=\"warning\"` rather than a\n * hand-rolled tinted div, and the scrim uses `--color-bg-overlay` instead of a\n * raw `bg-black/50`.\n */\n\nimport { memo, useCallback, useId, useRef } from 'react';\n\nimport { useModalFocusTrap } from '../../hooks/useModalFocusTrap';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Section } from '../common';\nimport type { FluidGridsWorkflow } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface WorkflowDeleteDialogProps {\n workflow: FluidGridsWorkflow;\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void | Promise<void>;\n}\n\n// ============================================================================\n// ICONS\n// ============================================================================\n\nconst WarningIcon = ({ 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 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\"\n />\n </svg>\n);\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const WorkflowDeleteDialog = memo(function WorkflowDeleteDialog({\n workflow,\n isOpen,\n onClose,\n onConfirm,\n}: WorkflowDeleteDialogProps) {\n // Calculate linked DataSinks count\n const linkedDataSinkCount = workflow.dataSinkLinks?.length ?? workflow.linkedDataSinkCount ?? 0;\n const titleId = useId();\n const descriptionId = useId();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const cancelRef = useRef<HTMLButtonElement | null>(null);\n\n // Event handlers\n const handleBackdropClick = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleConfirmClick = useCallback(() => {\n onConfirm();\n }, [onConfirm]);\n\n // `aria-modal=\"true\"` hides everything outside this panel from assistive tech,\n // so focus has to move inside it and stay there. Cancel is the entry point on\n // purpose: this is a destructive confirmation, so the control under the\n // keyboard must be the safe one.\n useModalFocusTrap({ isOpen, panelRef, onClose, initialFocusRef: cancelRef });\n\n // Don't render if not open\n if (!isOpen) {\n return null;\n }\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n {/* Backdrop */}\n <div aria-hidden=\"true\" className=\"absolute inset-0 bg-[var(--color-bg-overlay)]\" onClick={handleBackdropClick} />\n\n {/* Dialog */}\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n tabIndex={-1}\n className=\"relative flex max-h-[calc(100dvh-2rem)] w-full max-w-md flex-col overflow-y-auto rounded-card border border-[var(--color-border-subtle)] bg-bg-surface p-card-padding shadow-[var(--shadow-elevation-3)] focus:outline-none\"\n >\n {/* Header */}\n <div className=\"mb-form-gap flex items-center gap-icon-gap\">\n <span\n aria-hidden=\"true\"\n className=\"flex shrink-0 items-center justify-center rounded-pill bg-[var(--color-status-error-bgSubtle)] p-2\"\n >\n <WarningIcon className=\"w-6 h-6 text-status-error-text\" />\n </span>\n <h2 id={titleId} className=\"text-lg font-semibold text-text-primary\">\n Delete Workflow\n </h2>\n </div>\n\n {/* Content */}\n <div className=\"mb-form-gap flex flex-col gap-control-gap\">\n <p id={descriptionId} className=\"text-sm text-text-secondary\">\n Are you sure you want to delete the workflow{' '}\n <span className=\"font-medium text-text-primary\">{workflow.name}</span>?\n </p>\n\n {/* Warning about linked DataSinks */}\n {linkedDataSinkCount > 0 && (\n <Section\n headingLevel={3}\n tone=\"warning\"\n padding=\"compact\"\n title={`${linkedDataSinkCount} linked DataSink${linkedDataSinkCount !== 1 ? 's' : ''} will be unlinked`}\n >\n <p className=\"text-sm text-[var(--color-status-warning-text)]\">\n Deleting this workflow removes the links. The DataSinks themselves are not deleted.\n </p>\n </Section>\n )}\n\n <p className=\"text-sm text-text-secondary\">This action cannot be undone.</p>\n </div>\n\n {/* Actions */}\n <div className=\"flex flex-wrap justify-end gap-control-gap\">\n <Button ref={cancelRef} type=\"button\" size=\"lg\" variant=\"outline\" onClick={onClose}>\n Cancel\n </Button>\n <Button type=\"button\" size=\"lg\" variant=\"destructive\" onClick={handleConfirmClick}>\n Delete Workflow\n </Button>\n </div>\n </div>\n </div>\n );\n});\n\nexport default WorkflowDeleteDialog;\n"],"mappings":";;;;;;;AAkCA,IAAM,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,IAAuB,EAAK,SAA8B,EACrE,aACA,WACA,YACA,gBAC4B;CAE5B,IAAM,IAAsB,EAAS,eAAe,UAAU,EAAS,uBAAuB,GACxF,IAAU,GAAO,EACjB,IAAgB,GAAO,EACvB,IAAW,EAA8B,KAAK,EAC9C,IAAY,EAAiC,KAAK,EAGlD,IAAsB,QAAkB;AAC5C,KAAS;IACR,CAAC,EAAQ,CAAC,EAEP,IAAqB,QAAkB;AAC3C,KAAW;IACV,CAAC,EAAU,CAAC;AAaf,QAPA,EAAkB;EAAE;EAAQ;EAAU;EAAS,iBAAiB;EAAW,CAAC,EAGvE,IAKH,kBAAC,OAAD;EAAK,WAAU;YAAf,CAEE,kBAAC,OAAD;GAAK,eAAY;GAAO,WAAU;GAAgD,SAAS;GAAuB,CAAA,EAGlH,kBAAC,OAAD;GACE,KAAK;GACL,MAAK;GACL,cAAW;GACX,mBAAiB;GACjB,oBAAkB;GAClB,UAAU;GACV,WAAU;aAPZ;IAUE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MACE,eAAY;MACZ,WAAU;gBAEV,kBAAC,GAAD,EAAa,WAAU,kCAAmC,CAAA;MACrD,CAAA,EACP,kBAAC,MAAD;MAAI,IAAI;MAAS,WAAU;gBAA0C;MAEhE,CAAA,CACD;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,KAAD;OAAG,IAAI;OAAe,WAAU;iBAAhC;QAA8D;QACf;QAC7C,kBAAC,QAAD;SAAM,WAAU;mBAAiC,EAAS;SAAY,CAAA;;QACpE;;MAGH,IAAsB,KACrB,kBAAC,GAAD;OACE,cAAc;OACd,MAAK;OACL,SAAQ;OACR,OAAO,GAAG,EAAoB,kBAAkB,MAAwB,IAAU,KAAN,IAAS;iBAErF,kBAAC,KAAD;QAAG,WAAU;kBAAkD;QAE3D,CAAA;OACI,CAAA;MAGZ,kBAAC,KAAD;OAAG,WAAU;iBAA8B;OAAiC,CAAA;MACxE;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAQ,KAAK;MAAW,MAAK;MAAS,MAAK;MAAK,SAAQ;MAAU,SAAS;gBAAS;MAE3E,CAAA,EACT,kBAAC,GAAD;MAAQ,MAAK;MAAS,MAAK;MAAK,SAAQ;MAAc,SAAS;gBAAoB;MAE1E,CAAA,CACL;;IACF;KACF;MAjEC;EAmET"}
|
|
@@ -4,15 +4,16 @@ import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
|
4
4
|
var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
5
5
|
let a = {
|
|
6
6
|
sm: "px-2 py-0.5 text-xs",
|
|
7
|
-
md: "px-2.5 py-1 text-sm",
|
|
8
|
-
lg: "px-3 py-1.5 text-base"
|
|
7
|
+
md: "px-2.5 py-1 text-xs sm:text-sm",
|
|
8
|
+
lg: "px-3 py-1.5 text-sm sm:text-base"
|
|
9
9
|
}, o = {
|
|
10
10
|
sm: "w-3 h-3",
|
|
11
11
|
md: "w-4 h-4",
|
|
12
12
|
lg: "w-5 h-5"
|
|
13
13
|
}, s = {
|
|
14
14
|
draft: {
|
|
15
|
-
|
|
15
|
+
surface: "border border-transparent bg-bg-sunken",
|
|
16
|
+
weight: "font-medium",
|
|
16
17
|
text: "text-text-secondary",
|
|
17
18
|
icon: /* @__PURE__ */ t("svg", {
|
|
18
19
|
className: o[r],
|
|
@@ -29,7 +30,8 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
|
29
30
|
label: "Draft"
|
|
30
31
|
},
|
|
31
32
|
active: {
|
|
32
|
-
|
|
33
|
+
surface: "border border-[var(--color-status-success-border)] bg-[var(--color-status-success-bgSubtle)]",
|
|
34
|
+
weight: "font-medium",
|
|
33
35
|
text: "text-status-success-text",
|
|
34
36
|
icon: /* @__PURE__ */ t("svg", {
|
|
35
37
|
className: o[r],
|
|
@@ -46,8 +48,9 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
|
46
48
|
label: "Active"
|
|
47
49
|
},
|
|
48
50
|
paused: {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
surface: "border border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bgSubtle)]",
|
|
52
|
+
weight: "font-medium",
|
|
53
|
+
text: "text-[var(--color-status-warning-text)]",
|
|
51
54
|
icon: /* @__PURE__ */ t("svg", {
|
|
52
55
|
className: o[r],
|
|
53
56
|
fill: "none",
|
|
@@ -63,7 +66,8 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
|
63
66
|
label: "Paused"
|
|
64
67
|
},
|
|
65
68
|
error: {
|
|
66
|
-
|
|
69
|
+
surface: "border border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)]",
|
|
70
|
+
weight: "font-semibold",
|
|
67
71
|
text: "text-status-error-text",
|
|
68
72
|
icon: /* @__PURE__ */ t("svg", {
|
|
69
73
|
className: o[r],
|
|
@@ -80,8 +84,9 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
|
80
84
|
label: "Error"
|
|
81
85
|
},
|
|
82
86
|
archived: {
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
surface: "border border-transparent bg-bg-sunken",
|
|
88
|
+
weight: "font-medium",
|
|
89
|
+
text: "text-text-muted",
|
|
85
90
|
icon: /* @__PURE__ */ t("svg", {
|
|
86
91
|
className: o[r],
|
|
87
92
|
fill: "none",
|
|
@@ -98,14 +103,8 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
|
|
|
98
103
|
}
|
|
99
104
|
}[e];
|
|
100
105
|
return /* @__PURE__ */ n("span", {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
${a[r]}
|
|
104
|
-
${s.bg}
|
|
105
|
-
${s.text}
|
|
106
|
-
rounded-full
|
|
107
|
-
font-medium
|
|
108
|
-
`,
|
|
106
|
+
"data-workflow-status": e,
|
|
107
|
+
className: `inline-flex shrink-0 items-center gap-1.5 rounded-pill ${a[r]} ${s.surface} ${s.text} ${s.weight}`,
|
|
109
108
|
children: [i && s.icon, /* @__PURE__ */ t("span", { children: s.label })]
|
|
110
109
|
});
|
|
111
110
|
});
|