@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,41 +1,29 @@
1
- import e from "../components/widgets/WidgetErrorBoundary.js";
2
- import t from "../renderers/adapters/BigConsoleRenderer.js";
3
- import { PROPOSABLE_WIDGET_TYPES as n, derivePreviewState as ee, validateProposal as r } from "./proposalContract.js";
4
- import { localProposalSource as i } from "./proposalSource.js";
5
- import { memo as a, useCallback as o, useEffect as s, useMemo as c, useState as l } from "react";
6
- import { AlertTriangle as u, Check as d, Loader2 as f, RefreshCw as p, Sparkles as m, X as h } from "lucide-react";
7
- import { Button as g, Input as _, Label as v, Textarea as te } from "@burdenoff/fe-libs/ui";
8
- import { Fragment as ne, jsx as y, jsxs as b } from "react/jsx-runtime";
1
+ import { Section as e, SectionStack as t } from "../components/common/Section.js";
2
+ import "../components/common/index.js";
3
+ import n from "../components/widgets/WidgetErrorBoundary.js";
4
+ import ee from "../renderers/adapters/BigConsoleRenderer.js";
5
+ import { PROPOSABLE_WIDGET_TYPES as te, derivePreviewState as r, validateProposal as i } from "./proposalContract.js";
6
+ import { localProposalSource as ne } from "./proposalSource.js";
7
+ import { memo as a, useCallback as o, useEffect as re, useMemo as s, useState as c } from "react";
8
+ import { AlertTriangle as l, Check as u, Loader2 as d, RefreshCw as ie, Sparkles as ae, X as oe } from "lucide-react";
9
+ import { useI18n as se } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { Button as f, Input as p, Label as m, Textarea as ce } from "@burdenoff/fe-libs/ui";
11
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
9
12
  //#region src/bigconsole/customWidget/CustomWidgetProposalPanel.tsx
10
- var x = "w-full", S = {
11
- loading: {
12
- title: "Building preview…",
13
- body: "Running the parser against the selected DataSink."
14
- },
15
- valid: {
16
- title: "Preview",
17
- body: ""
18
- },
19
- "no-data": {
20
- title: "No data returned",
21
- body: "The binding is valid but the parser returned no rows. The widget will render empty until the sink has data."
22
- },
23
- "field-mismatch": {
24
- title: "Field mismatch",
25
- body: "Some mapped fields are not present in the parser output. Fix the mapping below before approving."
26
- },
27
- "access-error": {
28
- title: "Cannot read this data",
29
- body: "You do not have access to the proposed DataSink or parser in this workspace."
30
- }
13
+ var v = "w-full", y = {
14
+ loading: "neutral",
15
+ valid: "neutral",
16
+ "no-data": "warning",
17
+ "field-mismatch": "warning",
18
+ "access-error": "danger"
31
19
  };
32
- function C(e) {
33
- let t = (/* @__PURE__ */ new Date(0)).toISOString();
20
+ function b(e, t) {
21
+ let n = (/* @__PURE__ */ new Date(0)).toISOString();
34
22
  return {
35
23
  id: `preview-${e.id}`,
36
24
  pageId: "preview",
37
25
  type: e.widgetType,
38
- title: e.presentation.title || "Untitled widget",
26
+ title: e.presentation.title || t,
39
27
  description: e.presentation.description,
40
28
  dataSinkId: e.binding.dataSinkId || null,
41
29
  parserId: e.binding.parserId || null,
@@ -53,18 +41,18 @@ function C(e) {
53
41
  positionY: 0,
54
42
  positionWidth: 6,
55
43
  positionHeight: 4,
56
- createdAt: t,
57
- updatedAt: t
44
+ createdAt: n,
45
+ updatedAt: n
58
46
  };
59
47
  }
60
- function w(e) {
48
+ function x(e) {
61
49
  if (Array.isArray(e)) {
62
50
  let t = e.find((e) => e && typeof e == "object");
63
51
  return t ? Object.keys(t) : [];
64
52
  }
65
53
  if (e && typeof e == "object") return Object.keys(e);
66
54
  }
67
- function T(e) {
55
+ function S(e) {
68
56
  if (Array.isArray(e)) return e.length;
69
57
  if (e && typeof e == "object") {
70
58
  let t = e.cells;
@@ -72,378 +60,414 @@ function T(e) {
72
60
  }
73
61
  return 0;
74
62
  }
75
- var E = a(function({ sinks: a, parsers: E, resolvePreviewData: D, onApprove: O, onClose: k, source: A = i }) {
76
- let [j, re] = l(""), [M, N] = l(null), [P, F] = l(!1), [I, L] = l(!1), [R, z] = l(null), [B, V] = l(void 0), [H, U] = l(!1), [W, G] = l(!1), K = c(() => a.map((e) => e.id), [a]), q = c(() => E.map((e) => e.id), [E]), J = c(() => w(B), [B]), Y = c(() => M ? r(M, {
77
- permittedDataSinkIds: K,
78
- permittedParserIds: q,
79
- availableFields: J
63
+ var C = a(function({ sinks: a, parsers: C, resolvePreviewData: w, onApprove: T, onClose: E, source: D = ne }) {
64
+ let { t: O } = se(), k = s(() => ({
65
+ loading: {
66
+ title: O("bigconsole.widget.customWidget.preview.loading.title", "Building preview…"),
67
+ body: O("bigconsole.widget.customWidget.preview.loading.body", "Running the parser against the selected DataSink.")
68
+ },
69
+ valid: {
70
+ title: O("bigconsole.widget.customWidget.preview.valid.title", "Preview"),
71
+ body: ""
72
+ },
73
+ "no-data": {
74
+ title: O("bigconsole.widget.customWidget.preview.noData.title", "No data returned"),
75
+ body: O("bigconsole.widget.customWidget.preview.noData.body", "The binding is valid but the parser returned no rows. The widget will render empty until the sink has data.")
76
+ },
77
+ "field-mismatch": {
78
+ title: O("bigconsole.widget.customWidget.preview.fieldMismatch.title", "Field mismatch"),
79
+ body: O("bigconsole.widget.customWidget.preview.fieldMismatch.body", "Some mapped fields are not present in the parser output. Fix the mapping below before approving.")
80
+ },
81
+ "access-error": {
82
+ title: O("bigconsole.widget.customWidget.preview.accessError.title", "Cannot read this data"),
83
+ body: O("bigconsole.widget.customWidget.preview.accessError.body", "You do not have access to the proposed DataSink or parser in this workspace.")
84
+ }
85
+ }), [O]), [A, le] = c(""), [j, M] = c(null), [N, P] = c(!1), [F, I] = c(!1), [L, R] = c(null), [z, B] = c(void 0), [V, H] = c(!1), [U, W] = c(!1), G = s(() => a.map((e) => e.id), [a]), K = s(() => C.map((e) => e.id), [C]), q = s(() => x(z), [z]), J = s(() => j ? i(j, {
86
+ permittedDataSinkIds: G,
87
+ permittedParserIds: K,
88
+ availableFields: q
80
89
  }) : {
81
90
  issues: [],
82
91
  canApprove: !1
83
92
  }, [
84
- M,
93
+ j,
94
+ G,
85
95
  K,
86
- q,
87
- J
88
- ]), X = c(() => ee(Y, {
89
- loading: H,
90
- accessError: W,
91
- rowCount: T(B)
96
+ q
97
+ ]), Y = s(() => r(J, {
98
+ loading: V,
99
+ accessError: U,
100
+ rowCount: S(z)
92
101
  }), [
93
- Y,
94
- H,
95
- W,
96
- B
102
+ J,
103
+ V,
104
+ U,
105
+ z
97
106
  ]);
98
- s(() => {
99
- if (!M || !M.binding.dataSinkId) {
100
- V(void 0);
107
+ re(() => {
108
+ if (!j || !j.binding.dataSinkId) {
109
+ B(void 0);
101
110
  return;
102
111
  }
103
112
  let e = !1;
104
- return U(!0), G(!1), D(M).then((t) => {
105
- e || V(t);
113
+ return H(!0), W(!1), w(j).then((t) => {
114
+ e || B(t);
106
115
  }).catch(() => {
107
- e || (V(void 0), G(!0));
116
+ e || (B(void 0), W(!0));
108
117
  }).finally(() => {
109
- e || U(!1);
118
+ e || H(!1);
110
119
  }), () => {
111
120
  e = !0;
112
121
  };
113
- }, [M ? `${M.binding.dataSinkId}|${M.binding.parserId ?? ""}|${M.binding.dataPath ?? ""}` : "", D]);
114
- let ie = o(async () => {
115
- if (j.trim()) {
116
- F(!0), z(null);
122
+ }, [j ? `${j.binding.dataSinkId}|${j.binding.parserId ?? ""}|${j.binding.dataPath ?? ""}` : "", w]);
123
+ let ue = o(async () => {
124
+ if (A.trim()) {
125
+ P(!0), R(null);
117
126
  try {
118
- N(await A.propose({
119
- prompt: j.trim(),
127
+ M(await D.propose({
128
+ prompt: A.trim(),
120
129
  sinks: a,
121
- parsers: E
130
+ parsers: C
122
131
  }));
123
132
  } finally {
124
- F(!1);
133
+ P(!1);
125
134
  }
126
135
  }
127
136
  }, [
128
- j,
129
137
  A,
138
+ D,
130
139
  a,
131
- E
132
- ]), Z = o((e) => {
133
- N((t) => t && e(t));
134
- }, []), ae = o(() => {
135
- N(null), V(void 0), G(!1), z(null);
136
- }, []), oe = o(async () => {
137
- if (!(!M || !Y.canApprove)) {
138
- L(!0), z(null);
140
+ C
141
+ ]), X = o((e) => {
142
+ M((t) => t && e(t));
143
+ }, []), de = o(() => {
144
+ M(null), B(void 0), W(!1), R(null);
145
+ }, []), Z = o(async () => {
146
+ if (!(!j || !J.canApprove)) {
147
+ I(!0), R(null);
139
148
  try {
140
- await O(M), k();
149
+ await T(j), E();
141
150
  } catch (e) {
142
- z(e instanceof Error ? e.message : "Could not save the widget.");
151
+ R(e instanceof Error ? e.message : O("bigconsole.widget.customWidget.error.couldNotSaveWidget", "Could not save the widget."));
143
152
  } finally {
144
- L(!1);
153
+ I(!1);
145
154
  }
146
155
  }
147
156
  }, [
148
- M,
149
- Y.canApprove,
150
- O,
151
- k
152
- ]), Q = Y.issues.filter((e) => e.severity === "error"), $ = Y.issues.filter((e) => e.severity === "warning");
153
- return /* @__PURE__ */ b("section", {
157
+ j,
158
+ J.canApprove,
159
+ T,
160
+ E,
161
+ O
162
+ ]), Q = J.issues.filter((e) => e.severity === "error"), $ = J.issues.filter((e) => e.severity === "warning");
163
+ return /* @__PURE__ */ g("section", {
154
164
  "data-testid": "custom-widget-proposal-panel",
155
- "aria-label": "AI custom widget builder",
156
- className: "flex h-full w-full flex-col gap-4 overflow-y-auto p-4",
157
- children: [/* @__PURE__ */ b("div", {
158
- className: "flex flex-col gap-2",
159
- children: [
160
- /* @__PURE__ */ b(v, {
161
- htmlFor: "custom-widget-prompt",
162
- className: "flex items-center gap-2",
163
- children: [/* @__PURE__ */ y(m, {
164
- className: "size-4",
165
+ "aria-label": O("bigconsole.widget.customWidget.panel.ariaLabel", "AI custom widget builder"),
166
+ className: "flex h-full w-full min-w-0 flex-col overflow-y-auto p-4",
167
+ children: /* @__PURE__ */ _(t, { children: [/* @__PURE__ */ g(e, {
168
+ title: O("bigconsole.widget.customWidget.prompt.label", "Describe the widget you need"),
169
+ description: "Plain English. The assistant proposes a typed widget you can edit before anything is saved.",
170
+ icon: /* @__PURE__ */ g(ae, {
171
+ className: "size-4",
172
+ "aria-hidden": "true"
173
+ }),
174
+ actions: /* @__PURE__ */ _("div", {
175
+ className: "flex flex-wrap gap-2",
176
+ children: [/* @__PURE__ */ _(f, {
177
+ "data-testid": "custom-widget-generate",
178
+ onClick: ue,
179
+ disabled: !A.trim() || N,
180
+ children: [N ? /* @__PURE__ */ g(d, {
181
+ className: "mr-2 size-4 animate-spin",
165
182
  "aria-hidden": "true"
166
- }), "Describe the widget you need"]
167
- }),
168
- /* @__PURE__ */ y(te, {
183
+ }) : null, j ? O("bigconsole.widget.customWidget.action.regenerate", "Regenerate") : O("bigconsole.widget.customWidget.action.generateProposal", "Generate proposal")]
184
+ }), j ? /* @__PURE__ */ _(f, {
185
+ variant: "outline",
186
+ "data-testid": "custom-widget-reject",
187
+ onClick: de,
188
+ children: [/* @__PURE__ */ g(oe, {
189
+ className: "mr-1 size-4",
190
+ "aria-hidden": "true"
191
+ }), O("bigconsole.widget.customWidget.action.reject", "Reject")]
192
+ }) : null]
193
+ }),
194
+ children: /* @__PURE__ */ _("div", {
195
+ className: "flex flex-col gap-2",
196
+ children: [/* @__PURE__ */ g(m, {
197
+ htmlFor: "custom-widget-prompt",
198
+ children: "What should it show?"
199
+ }), /* @__PURE__ */ g(ce, {
169
200
  id: "custom-widget-prompt",
170
201
  "data-testid": "custom-widget-prompt",
171
- value: j,
172
- onChange: (e) => re(e.target.value),
173
- placeholder: "e.g. a funnel of signup conversion stages",
202
+ value: A,
203
+ onChange: (e) => le(e.target.value),
204
+ placeholder: O("bigconsole.widget.customWidget.prompt.placeholder", "e.g. a funnel of signup conversion stages"),
174
205
  rows: 3
206
+ })]
207
+ })
208
+ }), j ? /* @__PURE__ */ _(h, { children: [
209
+ /* @__PURE__ */ _(e, {
210
+ emphasis: "primary",
211
+ tone: y[Y],
212
+ title: k[Y].title,
213
+ description: "Rendered by the real widget renderer against the real parser output — what you approve is what you get.",
214
+ meta: /* @__PURE__ */ g("span", {
215
+ "data-testid": "custom-widget-preview-state",
216
+ "data-state": Y,
217
+ className: "rounded-pill bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
218
+ children: Y
175
219
  }),
176
- /* @__PURE__ */ b("div", {
177
- className: "flex flex-wrap gap-2",
178
- children: [/* @__PURE__ */ b(g, {
179
- "data-testid": "custom-widget-generate",
180
- onClick: ie,
181
- disabled: !j.trim() || P,
182
- children: [P ? /* @__PURE__ */ y(f, {
220
+ children: [/* @__PURE__ */ g("div", {
221
+ "data-testid": "custom-widget-preview",
222
+ className: "min-h-[220px] min-w-0 rounded-card border border-[var(--color-border-subtle)] bg-bg-surface p-2",
223
+ children: Y === "loading" ? /* @__PURE__ */ _("div", {
224
+ className: "flex h-[200px] items-center justify-center text-text-secondary",
225
+ children: [/* @__PURE__ */ g(d, {
183
226
  className: "mr-2 size-4 animate-spin",
184
227
  "aria-hidden": "true"
185
- }) : null, M ? "Regenerate" : "Generate proposal"]
186
- }), M ? /* @__PURE__ */ b(g, {
187
- variant: "outline",
188
- "data-testid": "custom-widget-reject",
189
- onClick: ae,
190
- children: [/* @__PURE__ */ y(h, {
191
- className: "mr-1 size-4",
192
- "aria-hidden": "true"
193
- }), "Reject"]
194
- }) : null]
195
- })
196
- ]
197
- }), M ? /* @__PURE__ */ b(ne, { children: [
198
- /* @__PURE__ */ b("div", {
199
- className: "flex flex-col gap-2",
200
- children: [
201
- /* @__PURE__ */ b("div", {
202
- className: "flex items-center justify-between gap-2",
203
- children: [/* @__PURE__ */ y("h3", {
204
- className: "text-sm font-semibold text-text-primary",
205
- children: S[X].title
206
- }), /* @__PURE__ */ y("span", {
207
- "data-testid": "custom-widget-preview-state",
208
- "data-state": X,
209
- className: "rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary",
210
- children: X
228
+ }), /* @__PURE__ */ g("span", {
229
+ className: "text-sm",
230
+ children: k.loading.body
211
231
  })]
212
- }),
213
- /* @__PURE__ */ y("div", {
214
- "data-testid": "custom-widget-preview",
215
- className: "min-h-[220px] rounded-lg border border-border-default bg-bg-surface p-2",
216
- children: X === "loading" ? /* @__PURE__ */ b("div", {
217
- className: "flex h-[200px] items-center justify-center text-text-secondary",
218
- children: [/* @__PURE__ */ y(f, {
219
- className: "mr-2 size-4 animate-spin",
220
- "aria-hidden": "true"
221
- }), /* @__PURE__ */ y("span", {
222
- className: "text-sm",
223
- children: S.loading.body
224
- })]
225
- }) : X === "valid" ? /* @__PURE__ */ y("div", {
226
- className: "h-[200px]",
227
- children: /* @__PURE__ */ y(e, {
228
- widgetId: `preview-${M.id}`,
229
- children: /* @__PURE__ */ y(t, {
230
- widget: C(M),
231
- data: B
232
- })
232
+ }) : Y === "valid" ? /* @__PURE__ */ g("div", {
233
+ className: "h-[200px]",
234
+ children: /* @__PURE__ */ g(n, {
235
+ widgetId: `preview-${j.id}`,
236
+ children: /* @__PURE__ */ g(ee, {
237
+ widget: b(j, O("bigconsole.widget.customWidget.untitledWidget", "Untitled widget")),
238
+ data: z
233
239
  })
234
- }) : /* @__PURE__ */ b("div", {
235
- className: "flex h-[200px] flex-col items-center justify-center gap-2 px-4 text-center",
236
- children: [
237
- /* @__PURE__ */ y(u, {
238
- className: "size-5 text-status-warning-text",
239
- "aria-hidden": "true"
240
- }),
241
- /* @__PURE__ */ y("p", {
242
- className: "text-sm text-text-secondary",
243
- children: S[X].body
244
- }),
245
- X === "access-error" ? /* @__PURE__ */ b(g, {
246
- size: "sm",
247
- variant: "outline",
248
- onClick: () => Z((e) => ({ ...e })),
249
- children: [/* @__PURE__ */ y(p, {
250
- className: "mr-1 size-3.5",
251
- "aria-hidden": "true"
252
- }), "Retry"]
253
- }) : null
254
- ]
255
240
  })
256
- }),
257
- M.rationale ? /* @__PURE__ */ y("p", {
258
- className: "text-xs text-text-secondary",
259
- "data-testid": "custom-widget-rationale",
260
- children: M.rationale
261
- }) : null
262
- ]
241
+ }) : /* @__PURE__ */ _("div", {
242
+ className: "flex h-[200px] flex-col items-center justify-center gap-2 px-4 text-center",
243
+ children: [
244
+ /* @__PURE__ */ g(l, {
245
+ className: "size-5 text-[var(--color-status-warning-text)]",
246
+ "aria-hidden": "true"
247
+ }),
248
+ /* @__PURE__ */ g("p", {
249
+ className: "text-sm text-text-secondary",
250
+ children: k[Y].body
251
+ }),
252
+ Y === "access-error" ? /* @__PURE__ */ _(f, {
253
+ size: "sm",
254
+ variant: "outline",
255
+ onClick: () => X((e) => ({ ...e })),
256
+ children: [/* @__PURE__ */ g(ie, {
257
+ className: "mr-1 size-3.5",
258
+ "aria-hidden": "true"
259
+ }), O("bigconsole.widget.customWidget.action.retry", "Retry")]
260
+ }) : null
261
+ ]
262
+ })
263
+ }), j.rationale ? /* @__PURE__ */ g("p", {
264
+ className: "mt-2 text-xs text-text-secondary",
265
+ "data-testid": "custom-widget-rationale",
266
+ children: j.rationale
267
+ }) : null]
263
268
  }),
264
- Q.length > 0 || $.length > 0 ? /* @__PURE__ */ y("ul", {
265
- "data-testid": "custom-widget-issues",
266
- className: "flex flex-col gap-1",
267
- children: [...Q, ...$].map((e) => /* @__PURE__ */ y("li", {
268
- "data-severity": e.severity,
269
- className: `rounded-md px-2 py-1 text-xs ${e.severity === "error" ? "bg-status-error-bg/10 text-status-error-text" : "bg-status-warning-bg/10 text-status-warning-text"}`,
270
- children: e.message
271
- }, `${e.code}-${e.path ?? ""}`))
269
+ Q.length > 0 || $.length > 0 ? /* @__PURE__ */ g(e, {
270
+ tone: Q.length > 0 ? "danger" : "warning",
271
+ padding: "compact",
272
+ headingLevel: 3,
273
+ title: Q.length > 0 ? `${Q.length} ${Q.length === 1 ? "problem" : "problems"} to fix before approving` : `${$.length} ${$.length === 1 ? "warning" : "warnings"}`,
274
+ children: /* @__PURE__ */ g("ul", {
275
+ "data-testid": "custom-widget-issues",
276
+ className: "flex min-w-0 flex-col gap-1",
277
+ children: [...Q, ...$].map((e) => /* @__PURE__ */ g("li", {
278
+ "data-severity": e.severity,
279
+ className: `break-words text-xs ${e.severity === "error" ? "text-[var(--color-status-error-text)]" : "text-[var(--color-status-warning-text)]"}`,
280
+ children: e.message
281
+ }, `${e.code}-${e.path ?? ""}`))
282
+ })
272
283
  }) : null,
273
- /* @__PURE__ */ b("div", {
274
- className: "flex flex-col gap-3",
275
- children: [
276
- /* @__PURE__ */ y("h3", {
277
- className: "text-sm font-semibold text-text-primary",
278
- children: "Proposal"
279
- }),
280
- /* @__PURE__ */ b("div", {
281
- className: "flex flex-col gap-1",
282
- children: [/* @__PURE__ */ y(v, {
283
- htmlFor: "custom-widget-title",
284
- children: "Title"
285
- }), /* @__PURE__ */ y(_, {
286
- id: "custom-widget-title",
287
- "data-testid": "custom-widget-title",
288
- className: x,
289
- value: M.presentation.title,
290
- onChange: (e) => Z((t) => ({
291
- ...t,
292
- presentation: {
293
- ...t.presentation,
294
- title: e.target.value
295
- }
296
- }))
297
- })]
298
- }),
299
- /* @__PURE__ */ b("div", {
300
- className: "flex flex-col gap-1",
301
- children: [/* @__PURE__ */ y(v, {
302
- htmlFor: "custom-widget-type",
303
- children: "Widget type"
304
- }), /* @__PURE__ */ y("select", {
305
- id: "custom-widget-type",
306
- "data-testid": "custom-widget-type",
307
- value: M.widgetType,
308
- onChange: (e) => Z((t) => ({
309
- ...t,
310
- widgetType: e.target.value
311
- })),
312
- className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
313
- children: n.map((e) => /* @__PURE__ */ y("option", {
314
- value: e,
315
- children: e
316
- }, e))
317
- })]
318
- }),
319
- /* @__PURE__ */ b("div", {
320
- className: "flex flex-col gap-1",
321
- children: [/* @__PURE__ */ y(v, {
322
- htmlFor: "custom-widget-sink",
323
- children: "DataSink"
324
- }), /* @__PURE__ */ b("select", {
325
- id: "custom-widget-sink",
326
- "data-testid": "custom-widget-sink",
327
- value: M.binding.dataSinkId,
328
- onChange: (e) => {
329
- let t = a.find((t) => t.id === e.target.value);
330
- Z((n) => ({
331
- ...n,
332
- binding: {
333
- ...n.binding,
334
- dataSinkId: e.target.value,
335
- dataSinkKey: t?.key
336
- }
337
- }));
338
- },
339
- className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
340
- children: [/* @__PURE__ */ y("option", {
341
- value: "",
342
- children: "Select a DataSink…"
343
- }), a.map((e) => /* @__PURE__ */ y("option", {
344
- value: e.id,
345
- children: e.name || e.key
346
- }, e.id))]
347
- })]
348
- }),
349
- /* @__PURE__ */ b("div", {
350
- className: "flex flex-col gap-1",
351
- children: [/* @__PURE__ */ y(v, {
352
- htmlFor: "custom-widget-parser",
353
- children: "Parser"
354
- }), /* @__PURE__ */ b("select", {
355
- id: "custom-widget-parser",
356
- "data-testid": "custom-widget-parser",
357
- value: M.binding.parserId ?? "",
358
- onChange: (e) => {
359
- let t = E.find((t) => t.id === e.target.value);
360
- Z((n) => ({
361
- ...n,
362
- binding: {
363
- ...n.binding,
364
- parserId: e.target.value || void 0,
365
- parserName: t?.name
284
+ /* @__PURE__ */ g(e, {
285
+ title: O("bigconsole.widget.customWidget.proposal.heading", "Proposal"),
286
+ description: "Every field is editable — the assistant proposes, you dispose.",
287
+ "data-testid": "custom-widget-proposal-fields",
288
+ children: /* @__PURE__ */ _("div", {
289
+ className: "flex flex-col gap-3",
290
+ children: [
291
+ /* @__PURE__ */ _("div", {
292
+ className: "flex flex-col gap-1",
293
+ children: [/* @__PURE__ */ g(m, {
294
+ htmlFor: "custom-widget-title",
295
+ children: O("bigconsole.widget.customWidget.field.title", "Title")
296
+ }), /* @__PURE__ */ g(p, {
297
+ id: "custom-widget-title",
298
+ "data-testid": "custom-widget-title",
299
+ className: v,
300
+ value: j.presentation.title,
301
+ onChange: (e) => X((t) => ({
302
+ ...t,
303
+ presentation: {
304
+ ...t.presentation,
305
+ title: e.target.value
366
306
  }
367
- }));
368
- },
369
- className: "w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
370
- children: [/* @__PURE__ */ y("option", {
371
- value: "",
372
- children: "No parser"
373
- }), E.map((e) => /* @__PURE__ */ y("option", {
374
- value: e.id,
375
- children: e.name
376
- }, e.id))]
377
- })]
378
- }),
379
- Object.keys(M.fieldMapping).length > 0 ? /* @__PURE__ */ b("fieldset", {
380
- className: "flex flex-col gap-2",
381
- "data-testid": "custom-widget-field-mapping",
382
- children: [
383
- /* @__PURE__ */ y("legend", {
384
- className: "text-sm font-medium text-text-primary",
385
- children: "Field mapping"
386
- }),
387
- Object.entries(M.fieldMapping).map(([e, t]) => /* @__PURE__ */ b("div", {
388
- className: "flex flex-col gap-1",
389
- children: [/* @__PURE__ */ y(v, {
390
- htmlFor: `custom-widget-field-${e}`,
307
+ }))
308
+ })]
309
+ }),
310
+ /* @__PURE__ */ _("div", {
311
+ className: "flex flex-col gap-1",
312
+ children: [/* @__PURE__ */ g(m, {
313
+ htmlFor: "custom-widget-type",
314
+ children: O("bigconsole.widget.customWidget.field.widgetType", "Widget type")
315
+ }), /* @__PURE__ */ g("select", {
316
+ id: "custom-widget-type",
317
+ "data-testid": "custom-widget-type",
318
+ value: j.widgetType,
319
+ onChange: (e) => X((t) => ({
320
+ ...t,
321
+ widgetType: e.target.value
322
+ })),
323
+ className: "w-full rounded-md border border-[var(--color-border-default)] bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
324
+ children: te.map((e) => /* @__PURE__ */ g("option", {
325
+ value: e,
391
326
  children: e
392
- }), /* @__PURE__ */ y(_, {
393
- id: `custom-widget-field-${e}`,
394
- "data-testid": `custom-widget-field-${e}`,
395
- value: t,
396
- onChange: (t) => Z((n) => ({
327
+ }, e))
328
+ })]
329
+ }),
330
+ /* @__PURE__ */ _("div", {
331
+ className: "flex flex-col gap-1",
332
+ children: [/* @__PURE__ */ g(m, {
333
+ htmlFor: "custom-widget-sink",
334
+ children: O("bigconsole.widget.customWidget.field.dataSink", "DataSink")
335
+ }), /* @__PURE__ */ _("select", {
336
+ id: "custom-widget-sink",
337
+ "data-testid": "custom-widget-sink",
338
+ value: j.binding.dataSinkId,
339
+ onChange: (e) => {
340
+ let t = a.find((t) => t.id === e.target.value);
341
+ X((n) => ({
397
342
  ...n,
398
- fieldMapping: {
399
- ...n.fieldMapping,
400
- [e]: t.target.value
343
+ binding: {
344
+ ...n.binding,
345
+ dataSinkId: e.target.value,
346
+ dataSinkKey: t?.key
401
347
  }
402
- }))
403
- })]
404
- }, e)),
405
- J?.length ? /* @__PURE__ */ b("p", {
406
- className: "text-xs text-text-secondary",
407
- children: ["Available: ", J.join(", ")]
408
- }) : null
409
- ]
410
- }) : null
411
- ]
348
+ }));
349
+ },
350
+ className: "w-full rounded-md border border-[var(--color-border-default)] bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
351
+ children: [/* @__PURE__ */ g("option", {
352
+ value: "",
353
+ children: O("bigconsole.widget.customWidget.field.selectDataSink", "Select a DataSink…")
354
+ }), a.map((e) => /* @__PURE__ */ g("option", {
355
+ value: e.id,
356
+ children: e.name || e.key
357
+ }, e.id))]
358
+ })]
359
+ }),
360
+ /* @__PURE__ */ _("div", {
361
+ className: "flex flex-col gap-1",
362
+ children: [/* @__PURE__ */ g(m, {
363
+ htmlFor: "custom-widget-parser",
364
+ children: O("bigconsole.widget.customWidget.field.parser", "Parser")
365
+ }), /* @__PURE__ */ _("select", {
366
+ id: "custom-widget-parser",
367
+ "data-testid": "custom-widget-parser",
368
+ value: j.binding.parserId ?? "",
369
+ onChange: (e) => {
370
+ let t = C.find((t) => t.id === e.target.value);
371
+ X((n) => ({
372
+ ...n,
373
+ binding: {
374
+ ...n.binding,
375
+ parserId: e.target.value || void 0,
376
+ parserName: t?.name
377
+ }
378
+ }));
379
+ },
380
+ className: "w-full rounded-md border border-[var(--color-border-default)] bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
381
+ children: [/* @__PURE__ */ g("option", {
382
+ value: "",
383
+ children: O("bigconsole.widget.customWidget.field.noParser", "No parser")
384
+ }), C.map((e) => /* @__PURE__ */ g("option", {
385
+ value: e.id,
386
+ children: e.name
387
+ }, e.id))]
388
+ })]
389
+ }),
390
+ Object.keys(j.fieldMapping).length > 0 ? /* @__PURE__ */ _("fieldset", {
391
+ className: "flex flex-col gap-2",
392
+ "data-testid": "custom-widget-field-mapping",
393
+ children: [
394
+ /* @__PURE__ */ g("legend", {
395
+ className: "text-sm font-medium text-text-primary",
396
+ children: O("bigconsole.widget.customWidget.fieldMapping.legend", "Field mapping")
397
+ }),
398
+ Object.entries(j.fieldMapping).map(([e, t]) => /* @__PURE__ */ _("div", {
399
+ className: "flex flex-col gap-1",
400
+ children: [/* @__PURE__ */ g(m, {
401
+ htmlFor: `custom-widget-field-${e}`,
402
+ children: e
403
+ }), /* @__PURE__ */ g(p, {
404
+ id: `custom-widget-field-${e}`,
405
+ "data-testid": `custom-widget-field-${e}`,
406
+ value: t,
407
+ onChange: (t) => X((n) => ({
408
+ ...n,
409
+ fieldMapping: {
410
+ ...n.fieldMapping,
411
+ [e]: t.target.value
412
+ }
413
+ }))
414
+ })]
415
+ }, e)),
416
+ q?.length ? /* @__PURE__ */ g("p", {
417
+ className: "break-words text-xs text-text-secondary",
418
+ children: O("bigconsole.widget.customWidget.fieldMapping.available", "Available: {{fields}}", { fields: q.join(", ") })
419
+ }) : null
420
+ ]
421
+ }) : null
422
+ ]
423
+ })
412
424
  }),
413
- R ? /* @__PURE__ */ y("p", {
414
- role: "alert",
415
- className: "text-xs text-status-error-text",
416
- "data-testid": "custom-widget-approve-error",
417
- children: R
425
+ L ? /* @__PURE__ */ g(e, {
426
+ tone: "danger",
427
+ padding: "compact",
428
+ headingLevel: 3,
429
+ title: "Could not add the widget",
430
+ children: /* @__PURE__ */ g("p", {
431
+ role: "alert",
432
+ className: "break-words text-xs text-[var(--color-status-error-text)]",
433
+ "data-testid": "custom-widget-approve-error",
434
+ children: L
435
+ })
418
436
  }) : null,
419
- /* @__PURE__ */ b("div", {
420
- className: "flex flex-wrap gap-2 border-t border-border-default pt-3",
421
- children: [/* @__PURE__ */ b(g, {
437
+ /* @__PURE__ */ _("div", {
438
+ className: "flex flex-wrap gap-2 border-t border-[var(--color-border-subtle)] pt-3",
439
+ children: [/* @__PURE__ */ _(f, {
422
440
  "data-testid": "custom-widget-approve",
423
- onClick: oe,
424
- disabled: !Y.canApprove || I,
425
- children: [I ? /* @__PURE__ */ y(f, {
441
+ onClick: Z,
442
+ disabled: !J.canApprove || F,
443
+ children: [F ? /* @__PURE__ */ g(d, {
426
444
  className: "mr-2 size-4 animate-spin",
427
445
  "aria-hidden": "true"
428
- }) : /* @__PURE__ */ y(d, {
446
+ }) : /* @__PURE__ */ g(u, {
429
447
  className: "mr-1 size-4",
430
448
  "aria-hidden": "true"
431
- }), "Approve & add to dashboard"]
432
- }), /* @__PURE__ */ y(g, {
449
+ }), O("bigconsole.widget.customWidget.action.approveAndAdd", "Approve & add to dashboard")]
450
+ }), /* @__PURE__ */ g(f, {
433
451
  variant: "outline",
434
- onClick: k,
452
+ onClick: E,
435
453
  "data-testid": "custom-widget-cancel",
436
- children: "Cancel"
454
+ children: O("bigconsole.widget.customWidget.action.cancel", "Cancel")
437
455
  })]
438
456
  })
439
- ] }) : /* @__PURE__ */ y("p", {
440
- className: "text-sm text-text-secondary",
441
- "data-testid": "custom-widget-empty",
442
- children: "No proposal yet. Describe a widget and the assistant will propose one for you to review — nothing is added to the dashboard until you approve it."
443
- })]
457
+ ] }) : /* @__PURE__ */ g(e, {
458
+ emphasis: "muted",
459
+ padding: "compact",
460
+ title: "No proposal yet",
461
+ headingLevel: 3,
462
+ children: /* @__PURE__ */ g("p", {
463
+ className: "text-sm text-text-secondary",
464
+ "data-testid": "custom-widget-empty",
465
+ children: O("bigconsole.widget.customWidget.empty", "No proposal yet. Describe a widget and the assistant will propose one for you to review — nothing is added to the dashboard until you approve it.")
466
+ })
467
+ })] })
444
468
  });
445
469
  });
446
470
  //#endregion
447
- export { E as default };
471
+ export { C as default };
448
472
 
449
473
  //# sourceMappingURL=CustomWidgetProposalPanel.js.map