@burdenoff/microfe-bigconsole 2026.805.2 → 2026.812.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
  2. package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
  3. package/dist/bigconsole/components/DrilldownModal.js +54 -50
  4. package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
  5. package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
  6. package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
  7. package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
  8. package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
  9. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
  10. package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
  11. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
  12. package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
  13. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +145 -111
  14. package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
  15. package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
  16. package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
  17. package/dist/bigconsole/components/common/Section.js +70 -0
  18. package/dist/bigconsole/components/common/Section.js.map +1 -0
  19. package/dist/bigconsole/components/common/index.js +2 -0
  20. package/dist/bigconsole/components/common/sectionStyles.js +42 -0
  21. package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
  22. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +269 -251
  23. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  24. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +214 -223
  25. package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
  26. package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
  27. package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
  28. package/dist/bigconsole/components/dashboard/DashboardToolbar.js +110 -102
  29. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  30. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -68
  31. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
  32. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
  33. package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
  34. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +147 -144
  35. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  36. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +154 -153
  37. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  38. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +82 -79
  39. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  40. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +171 -284
  41. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  42. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +250 -273
  43. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
  44. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
  45. package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
  46. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
  47. package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
  48. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +75 -83
  49. package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js.map +1 -1
  50. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +167 -161
  51. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  52. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +181 -190
  53. package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js.map +1 -1
  54. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
  55. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  56. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
  57. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
  58. package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -0
  59. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
  60. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
  61. package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -229
  62. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  63. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +128 -129
  64. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  65. package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
  66. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  67. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
  68. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
  69. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -61
  70. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  71. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -64
  72. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  73. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
  74. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  75. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
  76. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
  77. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
  78. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
  79. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +113 -117
  80. package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js.map +1 -1
  81. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +312 -307
  82. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  83. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
  84. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
  85. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
  86. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
  87. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +194 -189
  88. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  89. package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
  90. package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
  91. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
  92. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
  93. package/dist/bigconsole/components/parser/DataSinkSelector.js +163 -131
  94. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  95. package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
  96. package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
  97. package/dist/bigconsole/components/parser/ImportParserDialog.js +205 -260
  98. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  99. package/dist/bigconsole/components/parser/ParserCard.js +133 -114
  100. package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
  101. package/dist/bigconsole/components/parser/ParserSelector.js +193 -174
  102. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  103. package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
  104. package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
  105. package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
  106. package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
  107. package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
  108. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  109. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
  110. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
  111. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
  112. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
  113. package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
  114. package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
  115. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -103
  116. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  117. package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -148
  118. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  119. package/dist/bigconsole/components/preview/previewShared.js +41 -23
  120. package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
  121. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +405 -364
  122. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  123. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +265 -237
  124. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  125. package/dist/bigconsole/components/widgets/PropertiesPanel.js +764 -821
  126. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  127. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
  128. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
  129. package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
  130. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  131. package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
  132. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  133. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
  134. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
  135. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +46 -49
  136. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  137. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +154 -147
  138. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  139. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +118 -101
  140. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  141. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +244 -191
  142. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  143. package/dist/bigconsole/components/widgets/form/FormWidget.js +167 -159
  144. package/dist/bigconsole/components/widgets/form/FormWidget.js.map +1 -1
  145. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +92 -76
  146. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  147. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +1 -1
  148. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
  149. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +89 -86
  150. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  151. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
  152. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
  153. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +64 -63
  154. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  155. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +2 -2
  156. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
  157. package/dist/bigconsole/components/widgets/list/ListConfig.js +65 -58
  158. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  159. package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
  160. package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
  161. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
  162. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
  163. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +79 -72
  164. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  165. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +35 -34
  166. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  167. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +20 -19
  168. package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js.map +1 -1
  169. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +181 -180
  170. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  171. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +100 -90
  172. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  173. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
  174. package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
  175. package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
  176. package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
  177. package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
  178. package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
  179. package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
  180. package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
  181. package/dist/bigconsole/components/widgets/table/TableConfig.js +193 -172
  182. package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
  183. package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
  184. package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
  185. package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
  186. package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
  187. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
  188. package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
  189. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
  190. package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
  191. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
  192. package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
  193. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +283 -249
  194. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  195. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
  196. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  197. package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
  198. package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
  199. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
  200. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
  201. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
  202. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
  203. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +46 -42
  204. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  205. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +372 -348
  206. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  207. package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
  208. package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
  209. package/dist/bigconsole/pages/DashboardBuilderPage.js +153 -142
  210. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  211. package/dist/bigconsole/pages/DashboardViewPage.js +230 -220
  212. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  213. package/dist/bigconsole/pages/DashboardsPage.js +832 -790
  214. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  215. package/dist/bigconsole/pages/DataParsersPage.js +249 -304
  216. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  217. package/dist/bigconsole/pages/DataSinkBuilderPage.js +324 -349
  218. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  219. package/dist/bigconsole/pages/DataSinkViewPage.js +336 -323
  220. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  221. package/dist/bigconsole/pages/DataSinksPage.js +356 -458
  222. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  223. package/dist/bigconsole/pages/DataSourcesPage.js +14 -8
  224. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  225. package/dist/bigconsole/pages/HomePage.js +186 -193
  226. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  227. package/dist/bigconsole/pages/InsightsPage.js +901 -724
  228. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  229. package/dist/bigconsole/pages/ParserBuilderPage.js +769 -675
  230. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  231. package/dist/bigconsole/pages/ParserViewPage.js +382 -354
  232. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  233. package/dist/bigconsole/pages/PipelineBuilderPage.js +540 -420
  234. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  235. package/dist/bigconsole/pages/PipelineViewPage.js +416 -384
  236. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  237. package/dist/bigconsole/pages/PipelinesPage.js +260 -309
  238. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  239. package/dist/bigconsole/pages/SettingsPage.js +177 -172
  240. package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
  241. package/dist/bigconsole/pages/WidgetDemoPage.js +278 -142
  242. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  243. package/dist/bigconsole/pages/WorkflowViewPage.js +382 -366
  244. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  245. package/dist/bigconsole/pages/WorkflowsPage.js +202 -316
  246. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  247. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +111 -109
  248. package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js.map +1 -1
  249. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +127 -126
  250. package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js.map +1 -1
  251. package/dist/bigconsole/renderers/adapters/CustomRenderer.js +103 -103
  252. package/dist/bigconsole/renderers/adapters/CustomRenderer.js.map +1 -1
  253. package/package.json +2 -1
@@ -1,80 +1,98 @@
1
- import { memo as e, useCallback as t } from "react";
2
- import { jsx as n, jsxs as r } from "react/jsx-runtime";
1
+ import { SECTION_FOCUS_RING as e } from "../common/sectionStyles.js";
2
+ import { Section as t } from "../common/Section.js";
3
+ import "../common/index.js";
4
+ import { useModalFocusTrap as n } from "../../hooks/useModalFocusTrap.js";
5
+ import { memo as r, useCallback as i, useId as a, useRef as o } from "react";
6
+ import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
7
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
3
8
  //#region src/bigconsole/components/datasink/DataSinkDeleteDialog.tsx
4
- var i = e(function({ dataSink: e, isOpen: i, onClose: a, onConfirm: o, isDeleting: s = !1 }) {
5
- let c = t((e) => {
6
- e.target === e.currentTarget && !s && a();
7
- }, [s, a]), l = t((e) => {
8
- e.key === "Escape" && !s && a();
9
- }, [s, a]);
10
- return i ? /* @__PURE__ */ n("div", {
11
- className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50",
12
- onClick: c,
13
- onKeyDown: l,
14
- role: "dialog",
15
- "aria-modal": "true",
16
- "aria-labelledby": "delete-dialog-title",
17
- children: /* @__PURE__ */ r("div", {
18
- className: "bg-bg-surface border border-border-default rounded-lg shadow-xl max-w-md w-full",
9
+ var u = `min-h-[var(--size-controlHeight-md)] rounded-button px-4 py-2 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors ${e}`, d = r(function({ dataSink: e, isOpen: r, onClose: d, onConfirm: f, isDeleting: p = !1 }) {
10
+ let { t: m } = s(), h = a(), g = a(), _ = o(null), v = o(null);
11
+ n({
12
+ isOpen: r,
13
+ panelRef: _,
14
+ onClose: i(() => {
15
+ p || d();
16
+ }, [p, d]),
17
+ initialFocusRef: v
18
+ });
19
+ let y = i((e) => {
20
+ e.target === e.currentTarget && !p && d();
21
+ }, [p, d]);
22
+ return r ? /* @__PURE__ */ c("div", {
23
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-[var(--color-bg-overlay)] p-4",
24
+ onClick: y,
25
+ children: /* @__PURE__ */ l("div", {
26
+ ref: _,
27
+ role: "dialog",
28
+ "aria-modal": "true",
29
+ "aria-labelledby": h,
30
+ "aria-describedby": g,
31
+ tabIndex: -1,
32
+ className: "flex max-h-[90vh] w-full max-w-md flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-3)] focus:outline-none",
19
33
  children: [
20
- /* @__PURE__ */ n("div", {
21
- className: "p-6 border-b border-border-default",
22
- children: /* @__PURE__ */ n("h2", {
23
- id: "delete-dialog-title",
34
+ /* @__PURE__ */ c("div", {
35
+ className: "border-b border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding",
36
+ children: /* @__PURE__ */ c("h2", {
37
+ id: h,
24
38
  className: "text-lg font-semibold text-text-primary",
25
- children: "Delete DataSink"
39
+ children: m("bigconsole.dataSinks.deleteDialog.title", "Delete DataSink")
26
40
  })
27
41
  }),
28
- /* @__PURE__ */ r("div", {
29
- className: "p-6",
42
+ /* @__PURE__ */ l("div", {
43
+ className: "min-w-0 flex-1 space-y-form-gap overflow-y-auto p-form-gap sm:p-card-padding",
30
44
  children: [
31
- /* @__PURE__ */ n("p", {
32
- className: "text-sm text-text-primary mb-4",
33
- children: "Are you sure you want to delete this DataSink?"
45
+ /* @__PURE__ */ c("p", {
46
+ id: g,
47
+ className: "text-sm text-text-primary",
48
+ children: m("bigconsole.dataSinks.deleteDialog.confirmMessage", "Are you sure you want to delete this DataSink?")
34
49
  }),
35
- /* @__PURE__ */ r("div", {
36
- className: "bg-bg-sunken p-3 rounded-md",
37
- children: [/* @__PURE__ */ n("p", {
50
+ /* @__PURE__ */ l(t, {
51
+ emphasis: "muted",
52
+ padding: "compact",
53
+ headingLevel: 3,
54
+ title: "Data sink",
55
+ headerClassName: "mb-control-gap",
56
+ children: [/* @__PURE__ */ c("p", {
38
57
  className: "text-sm font-medium text-text-primary",
39
- children: e.name || "Untitled DataSink"
40
- }), /* @__PURE__ */ n("p", {
41
- className: "text-xs text-text-secondary mt-1 font-mono",
58
+ children: e.name || m("bigconsole.dataSinks.deleteDialog.untitledName", "Untitled DataSink")
59
+ }), /* @__PURE__ */ c("p", {
60
+ className: "mt-1 break-all font-mono text-xs text-text-secondary",
42
61
  children: e.key
43
62
  })]
44
63
  }),
45
- e.linkedWorkflowCount && e.linkedWorkflowCount > 0 && /* @__PURE__ */ n("div", {
46
- className: "mt-4 p-3 bg-status-warning-bg/10 border border-status-warning-border/20 rounded-md",
47
- children: /* @__PURE__ */ r("p", {
48
- className: "text-sm text-status-warning-text",
49
- children: [
50
- "This DataSink is linked to ",
51
- e.linkedWorkflowCount,
52
- " workflow",
53
- e.linkedWorkflowCount === 1 ? "" : "s",
54
- ". Deleting it will remove these links."
55
- ]
64
+ e.linkedWorkflowCount && e.linkedWorkflowCount > 0 ? /* @__PURE__ */ c(t, {
65
+ tone: "warning",
66
+ padding: "compact",
67
+ headingLevel: 3,
68
+ title: "Workflow links will be removed",
69
+ headerClassName: "mb-control-gap",
70
+ children: /* @__PURE__ */ c("p", {
71
+ className: "text-sm text-[var(--color-status-warning-text)]",
72
+ children: e.linkedWorkflowCount === 1 ? m("bigconsole.dataSinks.deleteDialog.linkedWorkflowWarningSingular", "This DataSink is linked to {{count}} workflow. Deleting it will remove these links.", { count: e.linkedWorkflowCount }) : m("bigconsole.dataSinks.deleteDialog.linkedWorkflowWarningPlural", "This DataSink is linked to {{count}} workflows. Deleting it will remove these links.", { count: e.linkedWorkflowCount })
56
73
  })
57
- }),
58
- /* @__PURE__ */ n("p", {
59
- className: "text-sm text-status-error-text mt-4",
60
- children: "This action cannot be undone."
74
+ }) : null,
75
+ /* @__PURE__ */ c("p", {
76
+ className: "text-sm text-status-error-text",
77
+ children: m("bigconsole.dataSinks.deleteDialog.cannotBeUndone", "This action cannot be undone.")
61
78
  })
62
79
  ]
63
80
  }),
64
- /* @__PURE__ */ r("div", {
65
- className: "p-6 border-t border-border-default flex items-center justify-end gap-3",
66
- children: [/* @__PURE__ */ n("button", {
81
+ /* @__PURE__ */ l("div", {
82
+ className: "flex flex-wrap items-center justify-end gap-control-gap border-t border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding",
83
+ children: [/* @__PURE__ */ c("button", {
84
+ ref: v,
67
85
  type: "button",
68
- onClick: a,
69
- disabled: s,
70
- className: "\n px-4 py-2\n text-sm font-medium\n text-text-primary\n bg-bg-sunken\n hover:bg-border-default\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n ",
71
- children: "Cancel"
72
- }), /* @__PURE__ */ n("button", {
86
+ onClick: d,
87
+ disabled: p,
88
+ className: `${u} bg-bg-sunken text-text-primary hover:bg-bg-elevated`,
89
+ children: m("bigconsole.dataSinks.deleteDialog.cancelButton", "Cancel")
90
+ }), /* @__PURE__ */ c("button", {
73
91
  type: "button",
74
- onClick: o,
75
- disabled: s,
76
- className: "\n px-4 py-2\n text-sm font-medium\n text-white\n bg-status-error-bg\n hover:bg-status-error-bg/90\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n ",
77
- children: s ? "Deleting..." : "Delete"
92
+ onClick: f,
93
+ disabled: p,
94
+ className: `${u} bg-action-danger-bg text-[var(--color-action-danger-text)] hover:bg-[var(--color-action-danger-bgHover)]`,
95
+ children: p ? m("bigconsole.dataSinks.deleteDialog.deletingButton", "Deleting...") : m("bigconsole.dataSinks.deleteDialog.deleteButton", "Delete")
78
96
  })]
79
97
  })
80
98
  ]
@@ -82,6 +100,6 @@ var i = e(function({ dataSink: e, isOpen: i, onClose: a, onConfirm: o, isDeletin
82
100
  }) : null;
83
101
  });
84
102
  //#endregion
85
- export { i as default };
103
+ export { d as default };
86
104
 
87
105
  //# sourceMappingURL=DataSinkDeleteDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataSinkDeleteDialog.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkDeleteDialog.tsx"],"sourcesContent":["/**\n * DataSink Delete Dialog\n *\n * Confirmation dialog for deleting a DataSink.\n */\n\nimport { memo, useCallback } from 'react';\nimport type { DataSink } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkDeleteDialogProps {\n /** DataSink to delete */\n dataSink: DataSink;\n /** Whether dialog is open */\n isOpen: boolean;\n /** Callback when dialog is closed */\n onClose: () => void;\n /** Callback when delete is confirmed */\n onConfirm: () => void;\n /** Whether delete is in progress */\n isDeleting?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkDeleteDialog = memo(function DataSinkDeleteDialog({\n dataSink,\n isOpen,\n onClose,\n onConfirm,\n isDeleting = false,\n}: DataSinkDeleteDialogProps) {\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isDeleting) {\n onClose();\n }\n },\n [isDeleting, onClose]\n );\n\n // Handle escape key\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && !isDeleting) {\n onClose();\n }\n },\n [isDeleting, onClose]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50\"\n onClick={handleBackdropClick}\n onKeyDown={handleKeyDown}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"delete-dialog-title\"\n >\n <div className=\"bg-bg-surface border border-border-default rounded-lg shadow-xl max-w-md w-full\">\n {/* Header */}\n <div className=\"p-6 border-b border-border-default\">\n <h2 id=\"delete-dialog-title\" className=\"text-lg font-semibold text-text-primary\">\n Delete DataSink\n </h2>\n </div>\n\n {/* Content */}\n <div className=\"p-6\">\n <p className=\"text-sm text-text-primary mb-4\">Are you sure you want to delete this DataSink?</p>\n\n <div className=\"bg-bg-sunken p-3 rounded-md\">\n <p className=\"text-sm font-medium text-text-primary\">{dataSink.name || 'Untitled DataSink'}</p>\n <p className=\"text-xs text-text-secondary mt-1 font-mono\">{dataSink.key}</p>\n </div>\n\n {dataSink.linkedWorkflowCount && dataSink.linkedWorkflowCount > 0 && (\n <div className=\"mt-4 p-3 bg-status-warning-bg/10 border border-status-warning-border/20 rounded-md\">\n <p className=\"text-sm text-status-warning-text\">\n This DataSink is linked to {dataSink.linkedWorkflowCount} workflow\n {dataSink.linkedWorkflowCount !== 1 ? 's' : ''}. Deleting it will remove these links.\n </p>\n </div>\n )}\n\n <p className=\"text-sm text-status-error-text mt-4\">This action cannot be undone.</p>\n </div>\n\n {/* Footer */}\n <div className=\"p-6 border-t border-border-default flex items-center justify-end gap-3\">\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isDeleting}\n className={`\n px-4 py-2\n text-sm font-medium\n text-text-primary\n bg-bg-sunken\n hover:bg-border-default\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n `}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={isDeleting}\n className={`\n px-4 py-2\n text-sm font-medium\n text-white\n bg-status-error-bg\n hover:bg-status-error-bg/90\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n `}\n >\n {isDeleting ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n </div>\n </div>\n );\n});\n\nexport default DataSinkDeleteDialog;\n"],"mappings":";;;AA8BA,IAAa,IAAuB,EAAK,SAA8B,EACrE,aACA,WACA,YACA,cACA,gBAAa,MACe;CAE5B,IAAM,IAAsB,GACzB,MAAwB;AACvB,EAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,KACnC,GAAS;IAGb,CAAC,GAAY,EAAQ,CACtB,EAGK,IAAgB,GACnB,MAA2B;AAC1B,EAAI,EAAE,QAAQ,YAAY,CAAC,KACzB,GAAS;IAGb,CAAC,GAAY,EAAQ,CACtB;AAMD,QAJK,IAKH,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;EACT,WAAW;EACX,MAAK;EACL,cAAW;EACX,mBAAgB;YAEhB,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,IAAG;MAAsB,WAAU;gBAA0C;MAE5E,CAAA;KACD,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,KAAD;OAAG,WAAU;iBAAiC;OAAkD,CAAA;MAEhG,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAyC,EAAS,QAAQ;QAAwB,CAAA,EAC/F,kBAAC,KAAD;QAAG,WAAU;kBAA8C,EAAS;QAAQ,CAAA,CACxE;;MAEL,EAAS,uBAAuB,EAAS,sBAAsB,KAC9D,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,KAAD;QAAG,WAAU;kBAAb;SAAgD;SAClB,EAAS;SAAoB;SACxD,EAAS,wBAAwB,IAAU,KAAN;SAAS;SAC7C;;OACA,CAAA;MAGR,kBAAC,KAAD;OAAG,WAAU;iBAAsC;OAAiC,CAAA;MAChF;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW;gBAUZ;MAEQ,CAAA,EACT,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW;gBAWV,IAAa,gBAAgB;MACvB,CAAA,CACL;;IACF;;EACF,CAAA,GA/EC;EAiFT"}
1
+ {"version":3,"file":"DataSinkDeleteDialog.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkDeleteDialog.tsx"],"sourcesContent":["/**\n * DataSink Delete Dialog\n *\n * Confirmation dialog for deleting a DataSink.\n */\n\nimport { memo, useCallback, useId, useRef } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useModalFocusTrap } from '../../hooks/useModalFocusTrap';\nimport { Section, SECTION_FOCUS_RING } from '../common';\nimport type { DataSink } from '../../types';\n\n/** Shared button recipe for the dialog footer. Keeps a visible focus ring. */\nconst DIALOG_BUTTON =\n `min-h-[var(--size-controlHeight-md)] rounded-button px-4 py-2 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors ${SECTION_FOCUS_RING}` as const;\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkDeleteDialogProps {\n /** DataSink to delete */\n dataSink: DataSink;\n /** Whether dialog is open */\n isOpen: boolean;\n /** Callback when dialog is closed */\n onClose: () => void;\n /** Callback when delete is confirmed */\n onConfirm: () => void;\n /** Whether delete is in progress */\n isDeleting?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkDeleteDialog = memo(function DataSinkDeleteDialog({\n dataSink,\n isOpen,\n onClose,\n onConfirm,\n isDeleting = false,\n}: DataSinkDeleteDialogProps) {\n const { t } = useI18n();\n const titleId = useId();\n const descriptionId = useId();\n const panelRef = useRef<HTMLDivElement | null>(null);\n const cancelRef = useRef<HTMLButtonElement | null>(null);\n\n // Escape must not yank the dialog away mid-delete — the request is already in\n // flight and the user would be left guessing whether it landed.\n const handleEscape = useCallback(() => {\n if (!isDeleting) onClose();\n }, [isDeleting, onClose]);\n\n // `aria-modal=\"true\"` promises assistive tech that focus is confined to the\n // panel, so it has to actually be confined. Cancel is the entry point: this is\n // a destructive confirmation, so the control under the keyboard is the safe\n // one. Same contract as the pipeline and workflow delete dialogs.\n useModalFocusTrap({ isOpen, panelRef, onClose: handleEscape, initialFocusRef: cancelRef });\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isDeleting) {\n onClose();\n }\n },\n [isDeleting, onClose]\n );\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-[var(--color-bg-overlay)] p-4\"\n onClick={handleBackdropClick}\n >\n {/*\n `role=\"dialog\"` / `aria-modal` belong on the PANEL, not the scrim: on the\n scrim the dialog boundary screen readers announce is the whole viewport.\n */}\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=\"flex max-h-[90vh] w-full max-w-md flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-3)] focus:outline-none\"\n >\n {/* Header strip — structural only. */}\n <div className=\"border-b border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding\">\n <h2 id={titleId} className=\"text-lg font-semibold text-text-primary\">\n {t('bigconsole.dataSinks.deleteDialog.title', 'Delete DataSink')}\n </h2>\n </div>\n\n {/* Body */}\n <div className=\"min-w-0 flex-1 space-y-form-gap overflow-y-auto p-form-gap sm:p-card-padding\">\n <p id={descriptionId} className=\"text-sm text-text-primary\">\n {t('bigconsole.dataSinks.deleteDialog.confirmMessage', 'Are you sure you want to delete this DataSink?')}\n </p>\n\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n headingLevel={3}\n title=\"Data sink\"\n headerClassName=\"mb-control-gap\"\n >\n <p className=\"text-sm font-medium text-text-primary\">\n {dataSink.name || t('bigconsole.dataSinks.deleteDialog.untitledName', 'Untitled DataSink')}\n </p>\n <p className=\"mt-1 break-all font-mono text-xs text-text-secondary\">{dataSink.key}</p>\n </Section>\n\n {dataSink.linkedWorkflowCount && dataSink.linkedWorkflowCount > 0 ? (\n <Section\n tone=\"warning\"\n padding=\"compact\"\n headingLevel={3}\n title=\"Workflow links will be removed\"\n headerClassName=\"mb-control-gap\"\n >\n <p className=\"text-sm text-[var(--color-status-warning-text)]\">\n {dataSink.linkedWorkflowCount === 1\n ? t(\n 'bigconsole.dataSinks.deleteDialog.linkedWorkflowWarningSingular',\n 'This DataSink is linked to {{count}} workflow. Deleting it will remove these links.',\n { count: dataSink.linkedWorkflowCount }\n )\n : t(\n 'bigconsole.dataSinks.deleteDialog.linkedWorkflowWarningPlural',\n 'This DataSink is linked to {{count}} workflows. Deleting it will remove these links.',\n { count: dataSink.linkedWorkflowCount }\n )}\n </p>\n </Section>\n ) : null}\n\n <p className=\"text-sm text-status-error-text\">\n {t('bigconsole.dataSinks.deleteDialog.cannotBeUndone', 'This action cannot be undone.')}\n </p>\n </div>\n\n {/* Footer strip */}\n <div className=\"flex flex-wrap items-center justify-end gap-control-gap border-t border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding\">\n <button\n ref={cancelRef}\n type=\"button\"\n onClick={onClose}\n disabled={isDeleting}\n className={`${DIALOG_BUTTON} bg-bg-sunken text-text-primary hover:bg-bg-elevated`}\n >\n {t('bigconsole.dataSinks.deleteDialog.cancelButton', 'Cancel')}\n </button>\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={isDeleting}\n className={`${DIALOG_BUTTON} bg-action-danger-bg text-[var(--color-action-danger-text)] hover:bg-[var(--color-action-danger-bgHover)]`}\n >\n {isDeleting\n ? t('bigconsole.dataSinks.deleteDialog.deletingButton', 'Deleting...')\n : t('bigconsole.dataSinks.deleteDialog.deleteButton', 'Delete')}\n </button>\n </div>\n </div>\n </div>\n );\n});\n\nexport default DataSinkDeleteDialog;\n"],"mappings":";;;;;;;;AAaA,IAAM,IACJ,mKAAmK,KAuBxJ,IAAuB,EAAK,SAA8B,EACrE,aACA,WACA,YACA,cACA,gBAAa,MACe;CAC5B,IAAM,EAAE,SAAM,GAAS,EACjB,IAAU,GAAO,EACjB,IAAgB,GAAO,EACvB,IAAW,EAA8B,KAAK,EAC9C,IAAY,EAAiC,KAAK;AAYxD,GAAkB;EAAE;EAAQ;EAAU,SARjB,QAAkB;AACrC,GAAK,KAAY,GAAS;KACzB,CAAC,GAAY,EAAQ,CAAC;EAMoC,iBAAiB;EAAW,CAAC;CAG1F,IAAM,IAAsB,GACzB,MAAwB;AACvB,EAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,KACnC,GAAS;IAGb,CAAC,GAAY,EAAQ,CACtB;AAMD,QAJK,IAKH,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;YAMT,kBAAC,OAAD;GACE,KAAK;GACL,MAAK;GACL,cAAW;GACX,mBAAiB;GACjB,oBAAkB;GAClB,UAAU;GACV,WAAU;aAPZ;IAUE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,IAAI;MAAS,WAAU;gBACxB,EAAE,2CAA2C,kBAAkB;MAC7D,CAAA;KACD,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,KAAD;OAAG,IAAI;OAAe,WAAU;iBAC7B,EAAE,oDAAoD,iDAAiD;OACtG,CAAA;MAEJ,kBAAC,GAAD;OACE,UAAS;OACT,SAAQ;OACR,cAAc;OACd,OAAM;OACN,iBAAgB;iBALlB,CAOE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAS,QAAQ,EAAE,kDAAkD,oBAAoB;QACxF,CAAA,EACJ,kBAAC,KAAD;QAAG,WAAU;kBAAwD,EAAS;QAAQ,CAAA,CAC9E;;MAET,EAAS,uBAAuB,EAAS,sBAAsB,IAC9D,kBAAC,GAAD;OACE,MAAK;OACL,SAAQ;OACR,cAAc;OACd,OAAM;OACN,iBAAgB;iBAEhB,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAS,wBAAwB,IAC9B,EACE,mEACA,uFACA,EAAE,OAAO,EAAS,qBAAqB,CACxC,GACD,EACE,iEACA,wFACA,EAAE,OAAO,EAAS,qBAAqB,CACxC;QACH,CAAA;OACI,CAAA,GACR;MAEJ,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,oDAAoD,gCAAgC;OACrF,CAAA;MACA;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,KAAK;MACL,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW,GAAG,EAAc;gBAE3B,EAAE,kDAAkD,SAAS;MACvD,CAAA,EACT,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW,GAAG,EAAc;gBAE3B,IACG,EAAE,oDAAoD,cAAc,GACpE,EAAE,kDAAkD,SAAS;MAC1D,CAAA,CACL;;IACF;;EACF,CAAA,GAnGC;EAqGT"}
@@ -1,81 +1,92 @@
1
- import { memo as e, useCallback as t, useState as n } from "react";
2
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
1
+ import { SECTION_FOCUS_RING as e } from "../common/sectionStyles.js";
2
+ import { Section as t } from "../common/Section.js";
3
+ import "../common/index.js";
4
+ import { memo as n, useCallback as r, useState as i } from "react";
5
+ import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
3
7
  //#region src/bigconsole/components/datasink/DataSinkRefreshDialog.tsx
4
- var a = e(function({ dataSink: e, isOpen: a, onClose: o, onConfirm: s, isRefreshing: c = !1 }) {
5
- let [l, u] = n(!1), d = t((e) => {
6
- e.target === e.currentTarget && !c && o();
7
- }, [c, o]), f = (e) => new Date(e).toLocaleString(), p = t(() => {
8
- s(l);
9
- }, [s, l]);
10
- return a ? /* @__PURE__ */ r("div", {
11
- className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50",
12
- onClick: d,
8
+ var c = `min-h-[var(--size-controlHeight-md)] rounded-button px-4 py-2 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors ${e}`, l = n(function({ dataSink: n, isOpen: l, onClose: u, onConfirm: d, isRefreshing: f = !1 }) {
9
+ let { t: p } = a(), [m, h] = i(!1), g = r((e) => {
10
+ e.target === e.currentTarget && !f && u();
11
+ }, [f, u]), _ = (e) => new Date(e).toLocaleString(), v = r(() => {
12
+ d(m);
13
+ }, [d, m]);
14
+ return l ? /* @__PURE__ */ o("div", {
15
+ className: "fixed inset-0 z-50 flex items-center justify-center bg-[var(--color-bg-overlay)] p-4",
16
+ onClick: g,
13
17
  role: "dialog",
14
18
  "aria-modal": "true",
15
19
  "aria-labelledby": "refresh-dialog-title",
16
- children: /* @__PURE__ */ i("div", {
17
- className: "bg-bg-surface border border-border-default rounded-lg shadow-xl max-w-md w-full",
20
+ children: /* @__PURE__ */ s("div", {
21
+ className: "flex max-h-[90vh] w-full max-w-md flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-3)]",
18
22
  children: [
19
- /* @__PURE__ */ r("div", {
20
- className: "p-6 border-b border-border-default",
21
- children: /* @__PURE__ */ r("h2", {
23
+ /* @__PURE__ */ o("div", {
24
+ className: "border-b border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding",
25
+ children: /* @__PURE__ */ o("h2", {
22
26
  id: "refresh-dialog-title",
23
27
  className: "text-lg font-semibold text-text-primary",
24
- children: "Refresh DataSink"
28
+ children: p("bigconsole.dataSinks.refreshDialog.title", "Refresh DataSink")
25
29
  })
26
30
  }),
27
- /* @__PURE__ */ i("div", {
28
- className: "p-6",
29
- children: [
30
- /* @__PURE__ */ i("div", {
31
- className: "bg-bg-sunken p-3 rounded-md mb-4",
32
- children: [
33
- /* @__PURE__ */ r("p", {
34
- className: "text-sm font-medium text-text-primary",
35
- children: e.name || "Untitled DataSink"
36
- }),
37
- /* @__PURE__ */ r("p", {
38
- className: "text-xs text-text-secondary mt-1 font-mono",
39
- children: e.key
40
- }),
41
- e.lastRefreshedAt && /* @__PURE__ */ i("p", {
42
- className: "text-xs text-text-secondary mt-2",
43
- children: ["Last refreshed: ", f(e.lastRefreshedAt)]
44
- })
45
- ]
46
- }),
47
- /* @__PURE__ */ i("label", {
48
- className: "flex items-center gap-2 cursor-pointer",
49
- children: [/* @__PURE__ */ r("input", {
31
+ /* @__PURE__ */ s("div", {
32
+ className: "min-w-0 flex-1 space-y-form-gap overflow-y-auto p-form-gap sm:p-card-padding",
33
+ children: [/* @__PURE__ */ s(t, {
34
+ emphasis: "muted",
35
+ padding: "compact",
36
+ headingLevel: 3,
37
+ title: "Data sink",
38
+ headerClassName: "mb-control-gap",
39
+ children: [
40
+ /* @__PURE__ */ o("p", {
41
+ className: "text-sm font-medium text-text-primary",
42
+ children: n.name || p("bigconsole.dataSinks.refreshDialog.untitledName", "Untitled DataSink")
43
+ }),
44
+ /* @__PURE__ */ o("p", {
45
+ className: "mt-1 break-all font-mono text-xs text-text-secondary",
46
+ children: n.key
47
+ }),
48
+ n.lastRefreshedAt && /* @__PURE__ */ o("p", {
49
+ className: "mt-2 text-xs text-text-secondary",
50
+ children: p("bigconsole.dataSinks.refreshDialog.lastRefreshed", "Last refreshed: {{date}}", { date: _(n.lastRefreshedAt) })
51
+ })
52
+ ]
53
+ }), /* @__PURE__ */ s(t, {
54
+ emphasis: "bare",
55
+ padding: "none",
56
+ headingLevel: 3,
57
+ title: "Options",
58
+ headerClassName: "mb-control-gap",
59
+ children: [/* @__PURE__ */ s("label", {
60
+ className: "flex min-h-[var(--size-controlHeight-md)] cursor-pointer items-center gap-2",
61
+ children: [/* @__PURE__ */ o("input", {
50
62
  type: "checkbox",
51
- checked: l,
52
- onChange: (e) => u(e.target.checked),
53
- className: "w-4 h-4 text-action-primary-bg focus:ring-action-primary-bg rounded"
54
- }), /* @__PURE__ */ r("span", {
63
+ checked: m,
64
+ onChange: (e) => h(e.target.checked),
65
+ className: `h-4 w-4 rounded ${e}`
66
+ }), /* @__PURE__ */ o("span", {
55
67
  className: "text-sm text-text-primary",
56
- children: "Force refresh (bypass cache)"
68
+ children: p("bigconsole.dataSinks.refreshDialog.forceRefreshLabel", "Force refresh (bypass cache)")
57
69
  })]
58
- }),
59
- /* @__PURE__ */ r("p", {
60
- className: "mt-2 text-xs text-text-secondary",
61
- children: "Force refresh will re-fetch all data from the source, ignoring any cached values."
62
- })
63
- ]
70
+ }), /* @__PURE__ */ o("p", {
71
+ className: "mt-1 text-xs text-text-secondary",
72
+ children: p("bigconsole.dataSinks.refreshDialog.forceRefreshDescription", "Force refresh will re-fetch all data from the source, ignoring any cached values.")
73
+ })]
74
+ })]
64
75
  }),
65
- /* @__PURE__ */ i("div", {
66
- className: "p-6 border-t border-border-default flex items-center justify-end gap-3",
67
- children: [/* @__PURE__ */ r("button", {
76
+ /* @__PURE__ */ s("div", {
77
+ className: "flex flex-wrap items-center justify-end gap-control-gap border-t border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding",
78
+ children: [/* @__PURE__ */ o("button", {
68
79
  type: "button",
69
- onClick: o,
70
- disabled: c,
71
- className: "\n px-4 py-2\n text-sm font-medium\n text-text-primary\n bg-bg-sunken\n hover:bg-border-default\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n ",
72
- children: "Cancel"
73
- }), /* @__PURE__ */ r("button", {
80
+ onClick: u,
81
+ disabled: f,
82
+ className: `${c} bg-bg-sunken text-text-primary hover:bg-bg-elevated`,
83
+ children: p("bigconsole.dataSinks.refreshDialog.cancelButton", "Cancel")
84
+ }), /* @__PURE__ */ o("button", {
74
85
  type: "button",
75
- onClick: p,
76
- disabled: c,
77
- className: "\n px-4 py-2\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n ",
78
- children: c ? "Refreshing..." : "Refresh"
86
+ onClick: v,
87
+ disabled: f,
88
+ className: `${c} bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bgHover`,
89
+ children: f ? p("bigconsole.dataSinks.refreshDialog.refreshingButton", "Refreshing...") : p("bigconsole.dataSinks.refreshDialog.refreshButton", "Refresh")
79
90
  })]
80
91
  })
81
92
  ]
@@ -83,6 +94,6 @@ var a = e(function({ dataSink: e, isOpen: a, onClose: o, onConfirm: s, isRefresh
83
94
  }) : null;
84
95
  });
85
96
  //#endregion
86
- export { a as default };
97
+ export { l as default };
87
98
 
88
99
  //# sourceMappingURL=DataSinkRefreshDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataSinkRefreshDialog.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkRefreshDialog.tsx"],"sourcesContent":["/**\n * DataSink Refresh Dialog\n *\n * Dialog for confirming DataSink refresh with force option.\n */\n\nimport { memo, useState, useCallback } from 'react';\nimport type { DataSink } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkRefreshDialogProps {\n /** DataSink to refresh */\n dataSink: DataSink;\n /** Whether dialog is open */\n isOpen: boolean;\n /** Callback when dialog is closed */\n onClose: () => void;\n /** Callback when refresh is confirmed (with force flag) */\n onConfirm: (force: boolean) => void;\n /** Whether refresh is in progress */\n isRefreshing?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkRefreshDialog = memo(function DataSinkRefreshDialog({\n dataSink,\n isOpen,\n onClose,\n onConfirm,\n isRefreshing = false,\n}: DataSinkRefreshDialogProps) {\n const [forceRefresh, setForceRefresh] = useState(false);\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isRefreshing) {\n onClose();\n }\n },\n [isRefreshing, onClose]\n );\n\n // Format date\n const formatDate = (dateString: string) => {\n return new Date(dateString).toLocaleString();\n };\n\n // Handle confirm\n const handleConfirm = useCallback(() => {\n onConfirm(forceRefresh);\n }, [onConfirm, forceRefresh]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50\"\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"refresh-dialog-title\"\n >\n <div className=\"bg-bg-surface border border-border-default rounded-lg shadow-xl max-w-md w-full\">\n {/* Header */}\n <div className=\"p-6 border-b border-border-default\">\n <h2 id=\"refresh-dialog-title\" className=\"text-lg font-semibold text-text-primary\">\n Refresh DataSink\n </h2>\n </div>\n\n {/* Content */}\n <div className=\"p-6\">\n {/* DataSink info */}\n <div className=\"bg-bg-sunken p-3 rounded-md mb-4\">\n <p className=\"text-sm font-medium text-text-primary\">{dataSink.name || 'Untitled DataSink'}</p>\n <p className=\"text-xs text-text-secondary mt-1 font-mono\">{dataSink.key}</p>\n {dataSink.lastRefreshedAt && (\n <p className=\"text-xs text-text-secondary mt-2\">Last refreshed: {formatDate(dataSink.lastRefreshedAt)}</p>\n )}\n </div>\n\n {/* Force refresh option */}\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={forceRefresh}\n onChange={(e) => setForceRefresh(e.target.checked)}\n className=\"w-4 h-4 text-action-primary-bg focus:ring-action-primary-bg rounded\"\n />\n <span className=\"text-sm text-text-primary\">Force refresh (bypass cache)</span>\n </label>\n <p className=\"mt-2 text-xs text-text-secondary\">\n Force refresh will re-fetch all data from the source, ignoring any cached values.\n </p>\n </div>\n\n {/* Footer */}\n <div className=\"p-6 border-t border-border-default flex items-center justify-end gap-3\">\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isRefreshing}\n className={`\n px-4 py-2\n text-sm font-medium\n text-text-primary\n bg-bg-sunken\n hover:bg-border-default\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n `}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={isRefreshing}\n className={`\n px-4 py-2\n text-sm font-medium\n text-action-primary-fg\n bg-action-primary-bg\n hover:bg-action-primary-bgHover\n disabled:opacity-50 disabled:cursor-not-allowed\n rounded-md\n transition-colors\n `}\n >\n {isRefreshing ? 'Refreshing...' : 'Refresh'}\n </button>\n </div>\n </div>\n </div>\n );\n});\n\nexport default DataSinkRefreshDialog;\n"],"mappings":";;;AA8BA,IAAa,IAAwB,EAAK,SAA+B,EACvE,aACA,WACA,YACA,cACA,kBAAe,MACc;CAC7B,IAAM,CAAC,GAAc,KAAmB,EAAS,GAAM,EAGjD,IAAsB,GACzB,MAAwB;AACvB,EAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,KACnC,GAAS;IAGb,CAAC,GAAc,EAAQ,CACxB,EAGK,KAAc,MACX,IAAI,KAAK,EAAW,CAAC,gBAAgB,EAIxC,IAAgB,QAAkB;AACtC,IAAU,EAAa;IACtB,CAAC,GAAW,EAAa,CAAC;AAM7B,QAJK,IAKH,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;EACT,MAAK;EACL,cAAW;EACX,mBAAgB;YAEhB,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,IAAG;MAAuB,WAAU;gBAA0C;MAE7E,CAAA;KACD,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,KAAD;SAAG,WAAU;mBAAyC,EAAS,QAAQ;SAAwB,CAAA;QAC/F,kBAAC,KAAD;SAAG,WAAU;mBAA8C,EAAS;SAAQ,CAAA;QAC3E,EAAS,mBACR,kBAAC,KAAD;SAAG,WAAU;mBAAb,CAAgD,oBAAiB,EAAW,EAAS,gBAAgB,CAAK;;QAExG;;MAGN,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,SAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW,MAAM,EAAgB,EAAE,OAAO,QAAQ;QAClD,WAAU;QACV,CAAA,EACF,kBAAC,QAAD;QAAM,WAAU;kBAA4B;QAAmC,CAAA,CACzE;;MACR,kBAAC,KAAD;OAAG,WAAU;iBAAmC;OAE5C,CAAA;MACA;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW;gBAUZ;MAEQ,CAAA,EACT,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW;gBAWV,IAAe,kBAAkB;MAC3B,CAAA,CACL;;IACF;;EACF,CAAA,GAnFC;EAqFT"}
1
+ {"version":3,"file":"DataSinkRefreshDialog.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkRefreshDialog.tsx"],"sourcesContent":["/**\n * DataSink Refresh Dialog\n *\n * Dialog for confirming DataSink refresh with force option.\n */\n\nimport { memo, useState, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Section, SECTION_FOCUS_RING } from '../common';\nimport type { DataSink } from '../../types';\n\n/** Shared button recipe for the dialog footer. Keeps a visible focus ring. */\nconst DIALOG_BUTTON =\n `min-h-[var(--size-controlHeight-md)] rounded-button px-4 py-2 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors ${SECTION_FOCUS_RING}` as const;\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkRefreshDialogProps {\n /** DataSink to refresh */\n dataSink: DataSink;\n /** Whether dialog is open */\n isOpen: boolean;\n /** Callback when dialog is closed */\n onClose: () => void;\n /** Callback when refresh is confirmed (with force flag) */\n onConfirm: (force: boolean) => void;\n /** Whether refresh is in progress */\n isRefreshing?: boolean;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkRefreshDialog = memo(function DataSinkRefreshDialog({\n dataSink,\n isOpen,\n onClose,\n onConfirm,\n isRefreshing = false,\n}: DataSinkRefreshDialogProps) {\n const { t } = useI18n();\n const [forceRefresh, setForceRefresh] = useState(false);\n\n // Handle backdrop click\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !isRefreshing) {\n onClose();\n }\n },\n [isRefreshing, onClose]\n );\n\n // Format date\n const formatDate = (dateString: string) => {\n return new Date(dateString).toLocaleString();\n };\n\n // Handle confirm\n const handleConfirm = useCallback(() => {\n onConfirm(forceRefresh);\n }, [onConfirm, forceRefresh]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-[var(--color-bg-overlay)] p-4\"\n onClick={handleBackdropClick}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"refresh-dialog-title\"\n >\n <div className=\"flex max-h-[90vh] w-full max-w-md flex-col rounded-card border border-[var(--color-border-subtle)] bg-bg-surface shadow-[var(--shadow-elevation-3)]\">\n {/* Header strip — structural only. */}\n <div className=\"border-b border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding\">\n <h2 id=\"refresh-dialog-title\" className=\"text-lg font-semibold text-text-primary\">\n {t('bigconsole.dataSinks.refreshDialog.title', 'Refresh DataSink')}\n </h2>\n </div>\n\n {/* Body */}\n <div className=\"min-w-0 flex-1 space-y-form-gap overflow-y-auto p-form-gap sm:p-card-padding\">\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n headingLevel={3}\n title=\"Data sink\"\n headerClassName=\"mb-control-gap\"\n >\n <p className=\"text-sm font-medium text-text-primary\">\n {dataSink.name || t('bigconsole.dataSinks.refreshDialog.untitledName', 'Untitled DataSink')}\n </p>\n <p className=\"mt-1 break-all font-mono text-xs text-text-secondary\">{dataSink.key}</p>\n {dataSink.lastRefreshedAt && (\n <p className=\"mt-2 text-xs text-text-secondary\">\n {t('bigconsole.dataSinks.refreshDialog.lastRefreshed', 'Last refreshed: {{date}}', {\n date: formatDate(dataSink.lastRefreshedAt),\n })}\n </p>\n )}\n </Section>\n\n <Section emphasis=\"bare\" padding=\"none\" headingLevel={3} title=\"Options\" headerClassName=\"mb-control-gap\">\n <label className=\"flex min-h-[var(--size-controlHeight-md)] cursor-pointer items-center gap-2\">\n <input\n type=\"checkbox\"\n checked={forceRefresh}\n onChange={(e) => setForceRefresh(e.target.checked)}\n className={`h-4 w-4 rounded ${SECTION_FOCUS_RING}`}\n />\n <span className=\"text-sm text-text-primary\">\n {t('bigconsole.dataSinks.refreshDialog.forceRefreshLabel', 'Force refresh (bypass cache)')}\n </span>\n </label>\n <p className=\"mt-1 text-xs text-text-secondary\">\n {t(\n 'bigconsole.dataSinks.refreshDialog.forceRefreshDescription',\n 'Force refresh will re-fetch all data from the source, ignoring any cached values.'\n )}\n </p>\n </Section>\n </div>\n\n {/* Footer strip */}\n <div className=\"flex flex-wrap items-center justify-end gap-control-gap border-t border-[var(--color-border-subtle)] p-form-gap sm:p-card-padding\">\n <button\n type=\"button\"\n onClick={onClose}\n disabled={isRefreshing}\n className={`${DIALOG_BUTTON} bg-bg-sunken text-text-primary hover:bg-bg-elevated`}\n >\n {t('bigconsole.dataSinks.refreshDialog.cancelButton', 'Cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={isRefreshing}\n className={`${DIALOG_BUTTON} bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bgHover`}\n >\n {isRefreshing\n ? t('bigconsole.dataSinks.refreshDialog.refreshingButton', 'Refreshing...')\n : t('bigconsole.dataSinks.refreshDialog.refreshButton', 'Refresh')}\n </button>\n </div>\n </div>\n </div>\n );\n});\n\nexport default DataSinkRefreshDialog;\n"],"mappings":";;;;;;;AAYA,IAAM,IACJ,mKAAmK,KAuBxJ,IAAwB,EAAK,SAA+B,EACvE,aACA,WACA,YACA,cACA,kBAAe,MACc;CAC7B,IAAM,EAAE,SAAM,GAAS,EACjB,CAAC,GAAc,KAAmB,EAAS,GAAM,EAGjD,IAAsB,GACzB,MAAwB;AACvB,EAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,KACnC,GAAS;IAGb,CAAC,GAAc,EAAQ,CACxB,EAGK,KAAc,MACX,IAAI,KAAK,EAAW,CAAC,gBAAgB,EAIxC,IAAgB,QAAkB;AACtC,IAAU,EAAa;IACtB,CAAC,GAAW,EAAa,CAAC;AAM7B,QAJK,IAKH,kBAAC,OAAD;EACE,WAAU;EACV,SAAS;EACT,MAAK;EACL,cAAW;EACX,mBAAgB;YAEhB,kBAAC,OAAD;GAAK,WAAU;aAAf;IAEE,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,MAAD;MAAI,IAAG;MAAuB,WAAU;gBACrC,EAAE,4CAA4C,mBAAmB;MAC/D,CAAA;KACD,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MACE,UAAS;MACT,SAAQ;MACR,cAAc;MACd,OAAM;MACN,iBAAgB;gBALlB;OAOE,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAS,QAAQ,EAAE,mDAAmD,oBAAoB;QACzF,CAAA;OACJ,kBAAC,KAAD;QAAG,WAAU;kBAAwD,EAAS;QAAQ,CAAA;OACrF,EAAS,mBACR,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAE,oDAAoD,4BAA4B,EACjF,MAAM,EAAW,EAAS,gBAAgB,EAC3C,CAAC;QACA,CAAA;OAEE;SAEV,kBAAC,GAAD;MAAS,UAAS;MAAO,SAAQ;MAAO,cAAc;MAAG,OAAM;MAAU,iBAAgB;gBAAzF,CACE,kBAAC,SAAD;OAAO,WAAU;iBAAjB,CACE,kBAAC,SAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW,MAAM,EAAgB,EAAE,OAAO,QAAQ;QAClD,WAAW,mBAAmB;QAC9B,CAAA,EACF,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAE,wDAAwD,+BAA+B;QACrF,CAAA,CACD;UACR,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,8DACA,oFACD;OACC,CAAA,CACI;QACN;;IAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW,GAAG,EAAc;gBAE3B,EAAE,mDAAmD,SAAS;MACxD,CAAA,EACT,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU;MACV,WAAW,GAAG,EAAc;gBAE3B,IACG,EAAE,uDAAuD,gBAAgB,GACzE,EAAE,oDAAoD,UAAU;MAC7D,CAAA,CACL;;IACF;;EACF,CAAA,GApFC;EAsFT"}
@@ -47,7 +47,7 @@ var r = e(function({ status: e, size: r = "md", showIcon: i = !0 }) {
47
47
  },
48
48
  stale: {
49
49
  bg: "bg-status-warning-bg/10",
50
- text: "text-status-warning-text",
50
+ text: "text-[var(--color-status-warning-text)]",
51
51
  icon: /* @__PURE__ */ t("svg", {
52
52
  className: o[r],
53
53
  fill: "none",
@@ -1 +1 @@
1
- {"version":3,"file":"DataSinkStatusBadge.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkStatusBadge.tsx"],"sourcesContent":["/**\n * DataSink Status Badge\n *\n * Display badge showing DataSink status with icon and color coding.\n */\n\nimport { memo, type ReactNode } from 'react';\nimport type { DataSinkStatus } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkStatusBadgeProps {\n /** DataSink status */\n status: DataSinkStatus;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show icon */\n showIcon?: boolean;\n}\n\ninterface StatusConfig {\n bg: string;\n text: string;\n icon: ReactNode;\n label: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkStatusBadge = memo(function DataSinkStatusBadge({\n status,\n size = 'md',\n showIcon = true,\n}: DataSinkStatusBadgeProps) {\n const sizeClasses: Record<string, string> = {\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 const iconSizes: Record<string, string> = {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n };\n\n const statusConfigs: Record<DataSinkStatus, StatusConfig> = {\n ready: {\n bg: 'bg-status-success-bg/10',\n text: 'text-status-success-text',\n icon: (\n <svg className={iconSizes[size]} 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 label: 'Ready',\n },\n error: {\n bg: 'bg-status-error-bg/10',\n text: 'text-status-error-text',\n icon: (\n <svg className={iconSizes[size]} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n label: 'Error',\n },\n stale: {\n bg: 'bg-status-warning-bg/10',\n text: 'text-status-warning-text',\n icon: (\n <svg className={iconSizes[size]} 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 label: 'Stale',\n },\n refreshing: {\n bg: 'bg-action-primary-bg/10',\n text: 'text-action-primary-bg',\n icon: (\n <svg className={`${iconSizes[size]} animate-spin`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n ),\n label: 'Refreshing',\n },\n };\n\n const config = statusConfigs[status];\n\n if (!config) {\n return null;\n }\n\n return (\n <span\n className={`\n inline-flex items-center gap-1.5\n ${sizeClasses[size]}\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 DataSinkStatusBadge;\n"],"mappings":";;;AAiCA,IAAa,IAAsB,EAAK,SAA6B,EACnE,WACA,UAAO,MACP,cAAW,MACgB;CAC3B,IAAM,IAAsC;EAC1C,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EAEK,IAAoC;EACxC,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EA4DK,IA1DsD;EAC1D,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KAAM,eAAc;KAAQ,gBAAe;KAAQ,aAAa;KAAG,GAAE;KAAmB,CAAA;IACpF,CAAA;GAER,OAAO;GACR;EACD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACD,YAAY;GACV,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,GAAG,EAAU,GAAM;IAAgB,MAAK;IAAO,QAAO;IAAe,SAAQ;cAC3F,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACF,CAE4B;AAM7B,QAJK,IAKH,kBAAC,QAAD;EACE,WAAW;;UAEP,EAAY,GAAM;UAClB,EAAO,GAAG;UACV,EAAO,KAAK;;;;YALlB,CAUG,KAAY,EAAO,MACpB,kBAAC,QAAD,EAAA,UAAO,EAAO,OAAa,CAAA,CACtB;MAhBA;EAkBT"}
1
+ {"version":3,"file":"DataSinkStatusBadge.js","names":[],"sources":["../../../../src/bigconsole/components/datasink/DataSinkStatusBadge.tsx"],"sourcesContent":["/**\n * DataSink Status Badge\n *\n * Display badge showing DataSink status with icon and color coding.\n */\n\nimport { memo, type ReactNode } from 'react';\nimport type { DataSinkStatus } from '../../types';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface DataSinkStatusBadgeProps {\n /** DataSink status */\n status: DataSinkStatus;\n /** Badge size */\n size?: 'sm' | 'md' | 'lg';\n /** Whether to show icon */\n showIcon?: boolean;\n}\n\ninterface StatusConfig {\n bg: string;\n text: string;\n icon: ReactNode;\n label: string;\n}\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport const DataSinkStatusBadge = memo(function DataSinkStatusBadge({\n status,\n size = 'md',\n showIcon = true,\n}: DataSinkStatusBadgeProps) {\n const sizeClasses: Record<string, string> = {\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 const iconSizes: Record<string, string> = {\n sm: 'w-3 h-3',\n md: 'w-4 h-4',\n lg: 'w-5 h-5',\n };\n\n const statusConfigs: Record<DataSinkStatus, StatusConfig> = {\n ready: {\n bg: 'bg-status-success-bg/10',\n text: 'text-status-success-text',\n icon: (\n <svg className={iconSizes[size]} 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 label: 'Ready',\n },\n error: {\n bg: 'bg-status-error-bg/10',\n text: 'text-status-error-text',\n icon: (\n <svg className={iconSizes[size]} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n ),\n label: 'Error',\n },\n stale: {\n bg: 'bg-status-warning-bg/10',\n text: 'text-[var(--color-status-warning-text)]',\n icon: (\n <svg className={iconSizes[size]} 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 label: 'Stale',\n },\n refreshing: {\n bg: 'bg-action-primary-bg/10',\n text: 'text-action-primary-bg',\n icon: (\n <svg className={`${iconSizes[size]} animate-spin`} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n ),\n label: 'Refreshing',\n },\n };\n\n const config = statusConfigs[status];\n\n if (!config) {\n return null;\n }\n\n return (\n <span\n className={`\n inline-flex items-center gap-1.5\n ${sizeClasses[size]}\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 DataSinkStatusBadge;\n"],"mappings":";;;AAiCA,IAAa,IAAsB,EAAK,SAA6B,EACnE,WACA,UAAO,MACP,cAAW,MACgB;CAC3B,IAAM,IAAsC;EAC1C,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EAEK,IAAoC;EACxC,IAAI;EACJ,IAAI;EACJ,IAAI;EACL,EA4DK,IA1DsD;EAC1D,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KAAM,eAAc;KAAQ,gBAAe;KAAQ,aAAa;KAAG,GAAE;KAAmB,CAAA;IACpF,CAAA;GAER,OAAO;GACR;EACD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACD,OAAO;GACL,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,EAAU;IAAO,MAAK;IAAO,QAAO;IAAe,SAAQ;cACzE,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACD,YAAY;GACV,IAAI;GACJ,MAAM;GACN,MACE,kBAAC,OAAD;IAAK,WAAW,GAAG,EAAU,GAAM;IAAgB,MAAK;IAAO,QAAO;IAAe,SAAQ;cAC3F,kBAAC,QAAD;KACE,eAAc;KACd,gBAAe;KACf,aAAa;KACb,GAAE;KACF,CAAA;IACE,CAAA;GAER,OAAO;GACR;EACF,CAE4B;AAM7B,QAJK,IAKH,kBAAC,QAAD;EACE,WAAW;;UAEP,EAAY,GAAM;UAClB,EAAO,GAAG;UACV,EAAO,KAAK;;;;YALlB,CAUG,KAAY,EAAO,MACpB,kBAAC,QAAD,EAAA,UAAO,EAAO,OAAa,CAAA,CACtB;MAhBA;EAkBT"}
@@ -1,3 +1,5 @@
1
+ import "../common/sectionStyles.js";
2
+ import "../common/index.js";
1
3
  import { memo as e, useCallback as t, useMemo as n, useState as r } from "react";
2
4
  import { ChevronLeft as i, ChevronRight as a, ChevronsLeft as o, ChevronsRight as s, Settings2 as c, X as l } from "lucide-react";
3
5
  import { Button as u } from "@burdenoff/fe-libs/ui";
@@ -58,13 +60,13 @@ var w = e(function({ data: e, maxHeight: w = "400px" }) {
58
60
  O(null), A(!1);
59
61
  }, []);
60
62
  return j.length === 0 ? /* @__PURE__ */ d("div", {
61
- className: "flex items-center justify-center p-8 text-text-secondary text-body-sm",
63
+ className: "flex items-center justify-center p-8 text-center text-sm text-text-secondary",
62
64
  children: "No tabular data available. Data must be an array of objects for table view."
63
65
  }) : /* @__PURE__ */ f("div", {
64
- className: "relative",
66
+ className: "relative min-w-0",
65
67
  children: [
66
68
  /* @__PURE__ */ f("div", {
67
- className: "flex items-center justify-between p-3 bg-bg-sunken border-b border-border-default",
69
+ className: "mb-control-gap flex flex-wrap items-center justify-between gap-control-gap",
68
70
  children: [/* @__PURE__ */ f("span", {
69
71
  className: "text-xs text-text-secondary",
70
72
  children: [
@@ -73,38 +75,37 @@ var w = e(function({ data: e, maxHeight: w = "400px" }) {
73
75
  N.length,
74
76
  " columns"
75
77
  ]
76
- }), /* @__PURE__ */ d("div", {
77
- className: "flex items-center gap-2",
78
- children: /* @__PURE__ */ d(u, {
79
- variant: "ghost",
80
- size: "sm",
81
- onClick: () => A((e) => !e),
82
- children: /* @__PURE__ */ d(c, { className: "w-4 h-4" })
83
- })
78
+ }), /* @__PURE__ */ d(u, {
79
+ variant: "ghost",
80
+ size: "sm",
81
+ onClick: () => A((e) => !e),
82
+ "aria-label": "Select columns",
83
+ children: /* @__PURE__ */ d(c, { className: "w-4 h-4" })
84
84
  })]
85
85
  }),
86
86
  k && /* @__PURE__ */ f("div", {
87
- className: "absolute right-0 top-10 z-10 bg-bg-surface border border-border-default rounded-md shadow-lg p-3 min-w-[200px] max-h-[300px] overflow-auto",
87
+ className: "absolute right-0 top-10 z-10 max-h-[300px] w-56 max-w-[calc(100vw-2rem)] overflow-auto rounded-card border border-[var(--color-border-subtle)] bg-bg-surface p-3 shadow-[var(--shadow-elevation-2)]",
88
88
  children: [/* @__PURE__ */ f("div", {
89
- className: "flex items-center justify-between mb-2",
89
+ className: "mb-2 flex items-center justify-between gap-control-gap",
90
90
  children: [/* @__PURE__ */ d("span", {
91
91
  className: "text-xs font-medium text-text-primary",
92
- children: "Select Columns"
92
+ children: "Select columns"
93
93
  }), /* @__PURE__ */ d(u, {
94
94
  variant: "ghost",
95
95
  size: "sm",
96
96
  onClick: L,
97
+ "aria-label": "Reset columns",
97
98
  children: /* @__PURE__ */ d(l, { className: "w-3 h-3" })
98
99
  })]
99
100
  }), /* @__PURE__ */ d("div", {
100
101
  className: "space-y-1",
101
102
  children: M.map((e) => /* @__PURE__ */ f("label", {
102
- className: "flex items-center gap-2 text-xs text-text-secondary hover:text-text-primary cursor-pointer",
103
+ className: "flex min-h-[var(--size-controlHeight-md)] cursor-pointer items-center gap-2 text-xs text-text-secondary hover:text-text-primary",
103
104
  children: [/* @__PURE__ */ d("input", {
104
105
  type: "checkbox",
105
106
  checked: !D || D.includes(e.key),
106
107
  onChange: () => I(e.key),
107
- className: "rounded border-border-default"
108
+ className: "rounded border-[var(--color-border-default)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface"
108
109
  }), /* @__PURE__ */ d("span", {
109
110
  className: "truncate",
110
111
  title: e.key,
@@ -114,7 +115,7 @@ var w = e(function({ data: e, maxHeight: w = "400px" }) {
114
115
  })]
115
116
  }),
116
117
  /* @__PURE__ */ d("div", {
117
- className: "overflow-auto",
118
+ className: "min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)]",
118
119
  style: { maxHeight: w },
119
120
  children: /* @__PURE__ */ f(p, { children: [/* @__PURE__ */ d(_, { children: /* @__PURE__ */ d(v, { children: N.map((e) => /* @__PURE__ */ d(g, {
120
121
  title: e.path,
@@ -122,7 +123,7 @@ var w = e(function({ data: e, maxHeight: w = "400px" }) {
122
123
  }, e.key)) }) }), /* @__PURE__ */ d(m, { children: P.map((e, t) => /* @__PURE__ */ d(v, { children: N.map((t) => /* @__PURE__ */ d(h, { children: C(S(e, t.path)) }, t.key)) }, t)) })] })
123
124
  }),
124
125
  F > 1 && /* @__PURE__ */ f("div", {
125
- className: "flex items-center justify-between p-3 bg-bg-sunken border-t border-border-default",
126
+ className: "mt-control-gap flex flex-wrap items-center justify-between gap-control-gap",
126
127
  children: [/* @__PURE__ */ f("span", {
127
128
  className: "text-xs text-text-secondary",
128
129
  children: [
@@ -132,7 +133,7 @@ var w = e(function({ data: e, maxHeight: w = "400px" }) {
132
133
  F
133
134
  ]
134
135
  }), /* @__PURE__ */ f("div", {
135
- className: "flex items-center gap-1",
136
+ className: "flex flex-wrap items-center gap-1",
136
137
  children: [
137
138
  /* @__PURE__ */ d(u, {
138
139
  variant: "ghost",