@burdenoff/microfe-bigconsole 2026.805.3 → 2026.812.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) 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 +135 -97
  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 +209 -193
  23. package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
  24. package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
  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 +109 -102
  29. package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
  30. package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
  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 +25 -23
  35. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
  36. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
  37. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
  38. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
  39. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
  40. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
  41. package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
  42. package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
  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/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
  49. package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
  50. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
  51. package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
  52. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
  53. package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
  54. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
  55. package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
  56. package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
  57. package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
  58. package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
  59. package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
  60. package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
  61. package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
  62. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
  63. package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
  64. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
  65. package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
  66. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
  67. package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
  68. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
  69. package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
  70. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
  71. package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
  72. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
  73. package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
  74. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
  75. package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
  76. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
  77. package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
  78. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
  79. package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
  80. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
  81. package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
  82. package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
  83. package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
  84. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
  85. package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
  86. package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
  87. package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
  88. package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
  89. package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
  90. package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
  91. package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
  92. package/dist/bigconsole/components/parser/ParserCard.js +133 -114
  93. package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
  94. package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
  95. package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
  96. package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
  97. package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
  98. package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
  99. package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
  100. package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
  101. package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
  102. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
  103. package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
  104. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
  105. package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
  106. package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
  107. package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
  108. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
  109. package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
  110. package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
  111. package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
  112. package/dist/bigconsole/components/preview/previewShared.js +41 -23
  113. package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
  114. package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
  115. package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
  116. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
  117. package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
  118. package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
  119. package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
  120. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
  121. package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
  122. package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
  123. package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
  124. package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
  125. package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
  126. package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
  127. package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
  128. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
  129. package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
  130. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
  131. package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
  132. package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
  133. package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
  134. package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
  135. package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
  136. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
  137. package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
  138. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
  139. package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
  140. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
  141. package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
  142. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
  143. package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
  144. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
  145. package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
  146. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
  147. package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
  148. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
  149. package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
  150. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
  151. package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
  152. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
  153. package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
  154. package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
  155. package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
  156. package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
  157. package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
  158. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
  159. package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
  160. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
  161. package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
  162. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
  163. package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
  164. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
  165. package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
  166. package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
  167. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
  168. package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
  169. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
  170. package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
  171. package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
  172. package/dist/bigconsole/components/widgets/progress/ProgressWidget.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 +10 -4
  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/utils/targetProgress.js +13 -0
  194. package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
  195. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
  196. package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
  197. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
  198. package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
  199. package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
  200. package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
  201. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
  202. package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
  203. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
  204. package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
  205. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
  206. package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
  207. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
  208. package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
  209. package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
  210. package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
  211. package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
  212. package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
  213. package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
  214. package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
  215. package/dist/bigconsole/pages/DashboardsPage.js +838 -800
  216. package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
  217. package/dist/bigconsole/pages/DataParsersPage.js +263 -315
  218. package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
  219. package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
  220. package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
  221. package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
  222. package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
  223. package/dist/bigconsole/pages/DataSinksPage.js +356 -458
  224. package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
  225. package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
  226. package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
  227. package/dist/bigconsole/pages/HomePage.js +186 -193
  228. package/dist/bigconsole/pages/HomePage.js.map +1 -1
  229. package/dist/bigconsole/pages/InsightsPage.js +887 -740
  230. package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
  231. package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
  232. package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
  233. package/dist/bigconsole/pages/ParserViewPage.js +368 -342
  234. package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
  235. package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
  236. package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
  237. package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
  238. package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
  239. package/dist/bigconsole/pages/PipelinesPage.js +248 -298
  240. package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
  241. package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
  242. package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
  243. package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
  244. package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
  245. package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
  246. package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
  247. package/package.json +1 -1
@@ -1,50 +1,64 @@
1
- import { memo as e } from "react";
2
- import { Input as t, Textarea as n } from "@burdenoff/fe-libs/ui";
3
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
1
+ import { Section as e } from "../../common/Section.js";
2
+ import "../../common/index.js";
3
+ import { memo as t } from "react";
4
+ import { Input as n, Textarea as r } from "@burdenoff/fe-libs/ui";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
6
  //#region src/bigconsole/components/builder/inspector/GeneralSection.tsx
5
- var a = e(function({ title: e, description: a, refreshInterval: o, onTitleChange: s, onDescriptionChange: c, onRefreshIntervalChange: l }) {
6
- let u = "mb-1 block text-sm font-semibold text-text-primary";
7
- return /* @__PURE__ */ i("div", {
8
- className: "flex flex-col gap-4",
9
- children: [
10
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
11
- htmlFor: "widget-inspector-title",
12
- className: u,
13
- children: "Title"
14
- }), /* @__PURE__ */ r(t, {
15
- id: "widget-inspector-title",
16
- value: e,
17
- onChange: (e) => s(e.target.value),
18
- className: "h-9 text-sm"
19
- })] }),
20
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
21
- htmlFor: "widget-inspector-description",
22
- className: u,
23
- children: "Description"
24
- }), /* @__PURE__ */ r(n, {
25
- id: "widget-inspector-description",
26
- value: a,
27
- onChange: (e) => c(e.target.value),
28
- rows: 3,
29
- className: "resize-none text-sm"
30
- })] }),
31
- /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
32
- htmlFor: "widget-inspector-refresh",
33
- className: u,
34
- children: "Auto-Refresh (seconds)"
35
- }), /* @__PURE__ */ r(t, {
36
- id: "widget-inspector-refresh",
37
- type: "number",
38
- value: o ?? "",
39
- onChange: (e) => l(e.target.value === "" ? void 0 : Number(e.target.value)),
40
- min: 0,
41
- placeholder: "No auto-refresh",
42
- className: "h-9 text-sm"
43
- })] })
44
- ]
7
+ var o = t(function({ title: t, description: o, refreshInterval: s, onTitleChange: c, onDescriptionChange: l, onRefreshIntervalChange: u }) {
8
+ let d = "mb-1 block text-sm font-medium text-text-primary";
9
+ return /* @__PURE__ */ i(e, {
10
+ title: "Identity",
11
+ description: "How this widget names itself on the dashboard, and how often it reloads.",
12
+ "data-testid": "widget-inspector-general",
13
+ children: /* @__PURE__ */ a("div", {
14
+ className: "flex flex-col gap-form-gap",
15
+ children: [
16
+ /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
17
+ htmlFor: "widget-inspector-title",
18
+ className: d,
19
+ children: "Title"
20
+ }), /* @__PURE__ */ i(n, {
21
+ id: "widget-inspector-title",
22
+ value: t,
23
+ onChange: (e) => c(e.target.value),
24
+ className: "h-control-md text-sm"
25
+ })] }),
26
+ /* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("label", {
27
+ htmlFor: "widget-inspector-description",
28
+ className: d,
29
+ children: "Description"
30
+ }), /* @__PURE__ */ i(r, {
31
+ id: "widget-inspector-description",
32
+ value: o,
33
+ onChange: (e) => l(e.target.value),
34
+ rows: 3,
35
+ className: "resize-none text-sm"
36
+ })] }),
37
+ /* @__PURE__ */ a("div", { children: [
38
+ /* @__PURE__ */ i("label", {
39
+ htmlFor: "widget-inspector-refresh",
40
+ className: d,
41
+ children: "Auto-refresh (seconds)"
42
+ }),
43
+ /* @__PURE__ */ i(n, {
44
+ id: "widget-inspector-refresh",
45
+ type: "number",
46
+ value: s ?? "",
47
+ onChange: (e) => u(e.target.value === "" ? void 0 : Number(e.target.value)),
48
+ min: 0,
49
+ placeholder: "No auto-refresh",
50
+ className: "h-control-md text-sm"
51
+ }),
52
+ /* @__PURE__ */ i("p", {
53
+ className: "mt-1 text-xs text-text-secondary",
54
+ children: "Leave empty to refresh only on demand."
55
+ })
56
+ ] })
57
+ ]
58
+ })
45
59
  });
46
60
  });
47
61
  //#endregion
48
- export { a as GeneralSection };
62
+ export { o as GeneralSection };
49
63
 
50
64
  //# sourceMappingURL=GeneralSection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/GeneralSection.tsx"],"sourcesContent":["import { type FC, memo } from 'react';\nimport { Input, Textarea } from '@burdenoff/fe-libs/ui';\n\nexport interface GeneralSectionProps {\n title: string;\n description: string;\n refreshInterval?: number;\n onTitleChange: (title: string) => void;\n onDescriptionChange: (description: string) => void;\n onRefreshIntervalChange: (refreshInterval: number | undefined) => void;\n}\n\n/** Widget identity and refresh settings shared by every widget type. */\nexport const GeneralSection: FC<GeneralSectionProps> = memo(function GeneralSection({\n title,\n description,\n refreshInterval,\n onTitleChange,\n onDescriptionChange,\n onRefreshIntervalChange,\n}) {\n const labelClassName = 'mb-1 block text-sm font-semibold text-text-primary';\n\n return (\n <div className=\"flex flex-col gap-4\">\n <div>\n <label htmlFor=\"widget-inspector-title\" className={labelClassName}>\n Title\n </label>\n <Input\n id=\"widget-inspector-title\"\n value={title}\n onChange={(event) => onTitleChange(event.target.value)}\n className=\"h-9 text-sm\"\n />\n </div>\n\n <div>\n <label htmlFor=\"widget-inspector-description\" className={labelClassName}>\n Description\n </label>\n <Textarea\n id=\"widget-inspector-description\"\n value={description}\n onChange={(event) => onDescriptionChange(event.target.value)}\n rows={3}\n className=\"resize-none text-sm\"\n />\n </div>\n\n <div>\n <label htmlFor=\"widget-inspector-refresh\" className={labelClassName}>\n Auto-Refresh (seconds)\n </label>\n <Input\n id=\"widget-inspector-refresh\"\n type=\"number\"\n value={refreshInterval ?? ''}\n onChange={(event) =>\n onRefreshIntervalChange(event.target.value === '' ? undefined : Number(event.target.value))\n }\n min={0}\n placeholder=\"No auto-refresh\"\n className=\"h-9 text-sm\"\n />\n </div>\n </div>\n );\n});\n"],"mappings":";;;;AAaA,IAAa,IAA0C,EAAK,SAAwB,EAClF,UACA,gBACA,oBACA,kBACA,wBACA,8BACC;CACD,IAAM,IAAiB;AAEvB,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;IAAO,SAAQ;IAAyB,WAAW;cAAgB;IAE3D,CAAA,EACR,kBAAC,GAAD;IACE,IAAG;IACH,OAAO;IACP,WAAW,MAAU,EAAc,EAAM,OAAO,MAAM;IACtD,WAAU;IACV,CAAA,CACE,EAAA,CAAA;GAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;IAAO,SAAQ;IAA+B,WAAW;cAAgB;IAEjE,CAAA,EACR,kBAAC,GAAD;IACE,IAAG;IACH,OAAO;IACP,WAAW,MAAU,EAAoB,EAAM,OAAO,MAAM;IAC5D,MAAM;IACN,WAAU;IACV,CAAA,CACE,EAAA,CAAA;GAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;IAAO,SAAQ;IAA2B,WAAW;cAAgB;IAE7D,CAAA,EACR,kBAAC,GAAD;IACE,IAAG;IACH,MAAK;IACL,OAAO,KAAmB;IAC1B,WAAW,MACT,EAAwB,EAAM,OAAO,UAAU,KAAK,KAAA,IAAY,OAAO,EAAM,OAAO,MAAM,CAAC;IAE7F,KAAK;IACL,aAAY;IACZ,WAAU;IACV,CAAA,CACE,EAAA,CAAA;GACF;;EAER"}
1
+ {"version":3,"file":"GeneralSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/GeneralSection.tsx"],"sourcesContent":["import { type FC, memo } from 'react';\nimport { Input, Textarea } from '@burdenoff/fe-libs/ui';\nimport { Section } from '../../common';\n\nexport interface GeneralSectionProps {\n title: string;\n description: string;\n refreshInterval?: number;\n onTitleChange: (title: string) => void;\n onDescriptionChange: (description: string) => void;\n onRefreshIntervalChange: (refreshInterval: number | undefined) => void;\n}\n\n/**\n * Widget identity and refresh settings shared by every widget type.\n *\n * Field labels are `font-medium`: the section heading owns `font-semibold`, so a\n * label can never be mistaken for the heading that groups it (BOFF-5636).\n */\nexport const GeneralSection: FC<GeneralSectionProps> = memo(function GeneralSection({\n title,\n description,\n refreshInterval,\n onTitleChange,\n onDescriptionChange,\n onRefreshIntervalChange,\n}) {\n const labelClassName = 'mb-1 block text-sm font-medium text-text-primary';\n\n return (\n <Section\n title=\"Identity\"\n description=\"How this widget names itself on the dashboard, and how often it reloads.\"\n data-testid=\"widget-inspector-general\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div>\n <label htmlFor=\"widget-inspector-title\" className={labelClassName}>\n Title\n </label>\n <Input\n id=\"widget-inspector-title\"\n value={title}\n onChange={(event) => onTitleChange(event.target.value)}\n className=\"h-control-md text-sm\"\n />\n </div>\n\n <div>\n <label htmlFor=\"widget-inspector-description\" className={labelClassName}>\n Description\n </label>\n <Textarea\n id=\"widget-inspector-description\"\n value={description}\n onChange={(event) => onDescriptionChange(event.target.value)}\n rows={3}\n className=\"resize-none text-sm\"\n />\n </div>\n\n <div>\n <label htmlFor=\"widget-inspector-refresh\" className={labelClassName}>\n Auto-refresh (seconds)\n </label>\n <Input\n id=\"widget-inspector-refresh\"\n type=\"number\"\n value={refreshInterval ?? ''}\n onChange={(event) =>\n onRefreshIntervalChange(event.target.value === '' ? undefined : Number(event.target.value))\n }\n min={0}\n placeholder=\"No auto-refresh\"\n className=\"h-control-md text-sm\"\n />\n <p className=\"mt-1 text-xs text-text-secondary\">Leave empty to refresh only on demand.</p>\n </div>\n </div>\n </Section>\n );\n});\n"],"mappings":";;;;;;AAmBA,IAAa,IAA0C,EAAK,SAAwB,EAClF,UACA,gBACA,oBACA,kBACA,wBACA,8BACC;CACD,IAAM,IAAiB;AAEvB,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,eAAY;YAEZ,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;KAAO,SAAQ;KAAyB,WAAW;eAAgB;KAE3D,CAAA,EACR,kBAAC,GAAD;KACE,IAAG;KACH,OAAO;KACP,WAAW,MAAU,EAAc,EAAM,OAAO,MAAM;KACtD,WAAU;KACV,CAAA,CACE,EAAA,CAAA;IAEN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;KAAO,SAAQ;KAA+B,WAAW;eAAgB;KAEjE,CAAA,EACR,kBAAC,GAAD;KACE,IAAG;KACH,OAAO;KACP,WAAW,MAAU,EAAoB,EAAM,OAAO,MAAM;KAC5D,MAAM;KACN,WAAU;KACV,CAAA,CACE,EAAA,CAAA;IAEN,kBAAC,OAAD,EAAA,UAAA;KACE,kBAAC,SAAD;MAAO,SAAQ;MAA2B,WAAW;gBAAgB;MAE7D,CAAA;KACR,kBAAC,GAAD;MACE,IAAG;MACH,MAAK;MACL,OAAO,KAAmB;MAC1B,WAAW,MACT,EAAwB,EAAM,OAAO,UAAU,KAAK,KAAA,IAAY,OAAO,EAAM,OAAO,MAAM,CAAC;MAE7F,KAAK;MACL,aAAY;MACZ,WAAU;MACV,CAAA;KACF,kBAAC,KAAD;MAAG,WAAU;gBAAmC;MAA0C,CAAA;KACtF,EAAA,CAAA;IACF;;EACE,CAAA;EAEZ"}
@@ -0,0 +1,70 @@
1
+ import { SECTION_STACK as e, sectionSurfaceClasses as t, sectionTitleClasses as n } from "./sectionStyles.js";
2
+ import { memo as r, useId as i } from "react";
3
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
4
+ //#region src/bigconsole/components/common/Section.tsx
5
+ var s = r(function({ title: e, description: t, icon: r, actions: i, meta: s, headingLevel: c = 3, tone: l = "neutral", headingId: u, className: d }) {
6
+ let f = `h${c}`;
7
+ return /* @__PURE__ */ o("div", {
8
+ className: `flex flex-col gap-control-gap sm:flex-row sm:items-start sm:justify-between ${d ?? ""}`.trim(),
9
+ children: [/* @__PURE__ */ o("div", {
10
+ className: "flex min-w-0 items-start gap-icon-gap",
11
+ children: [r ? /* @__PURE__ */ a("span", {
12
+ "aria-hidden": "true",
13
+ className: "mt-0.5 flex shrink-0 items-center justify-center text-text-secondary",
14
+ children: r
15
+ }) : null, /* @__PURE__ */ o("div", {
16
+ className: "min-w-0",
17
+ children: [/* @__PURE__ */ o("div", {
18
+ className: "flex flex-wrap items-center gap-icon-gap",
19
+ children: [/* @__PURE__ */ a(f, {
20
+ id: u,
21
+ className: n(l),
22
+ children: e
23
+ }), s]
24
+ }), t ? /* @__PURE__ */ a("p", {
25
+ className: "mt-1 text-sm leading-relaxed text-text-secondary",
26
+ children: t
27
+ }) : null]
28
+ })]
29
+ }), i ? /* @__PURE__ */ a("div", {
30
+ className: "flex shrink-0 flex-wrap items-center gap-control-gap",
31
+ children: i
32
+ }) : null]
33
+ });
34
+ }), c = r(function({ title: e, description: n, icon: r, actions: c, meta: l, headingLevel: u = 3, emphasis: d = "standard", tone: f = "neutral", padding: p = "default", className: m, bodyClassName: h, headerClassName: g, header: _, children: v, id: y, "aria-label": b, "data-testid": x }) {
35
+ let S = i(), C = e ? `${y ?? S}-title` : void 0, w = !!(e || _);
36
+ return /* @__PURE__ */ o("section", {
37
+ id: y,
38
+ "data-testid": x,
39
+ "data-section-emphasis": d,
40
+ "data-section-tone": f,
41
+ "aria-labelledby": C,
42
+ "aria-label": C ? void 0 : b,
43
+ className: `${t(d, f, p)} ${m ?? ""}`.trim(),
44
+ children: [w ? /* @__PURE__ */ a("div", {
45
+ className: g ?? (v ? "mb-form-gap" : void 0),
46
+ children: e ? /* @__PURE__ */ a(s, {
47
+ title: e,
48
+ description: n,
49
+ icon: r,
50
+ actions: c,
51
+ meta: l,
52
+ headingLevel: u,
53
+ tone: f,
54
+ headingId: C
55
+ }) : _
56
+ }) : null, v ? /* @__PURE__ */ a("div", {
57
+ className: `min-w-0 ${h ?? ""}`.trim(),
58
+ children: v
59
+ }) : null]
60
+ });
61
+ }), l = r(function({ children: t, className: n }) {
62
+ return /* @__PURE__ */ a("div", {
63
+ className: `${e} ${n ?? ""}`.trim(),
64
+ children: t
65
+ });
66
+ });
67
+ //#endregion
68
+ export { c as Section, s as SectionHeader, l as SectionStack };
69
+
70
+ //# sourceMappingURL=Section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Section.js","names":[],"sources":["../../../../src/bigconsole/components/common/Section.tsx"],"sourcesContent":["/**\n * Section / SectionHeader / SectionStack — BigConsole's section-emphasis\n * components (BOFF-5632).\n *\n * A `Section` is a labelled region of a screen. It renders a real `<section>`\n * tied to its heading with `aria-labelledby`, so screen-reader users get the\n * same \"where am I\" landmarks that the visual treatment gives sighted users.\n *\n * ```tsx\n * <SectionStack>\n * <Section title=\"Configuration\" description=\"How this parser reads input.\" >\n * …fields…\n * </Section>\n * <Section title=\"Output\" emphasis=\"primary\" actions={<Button>Run</Button>}>\n * …result…\n * </Section>\n * <Section title=\"Last run failed\" emphasis=\"standard\" tone=\"danger\">\n * …error detail…\n * </Section>\n * </SectionStack>\n * ```\n *\n * The class vocabulary lives in `./sectionStyles.ts` — see the notes there on which\n * design tokens actually emit CSS in the BigConsole shell.\n */\n\nimport { memo, useId, type ReactNode } from 'react';\nimport {\n SECTION_STACK,\n sectionSurfaceClasses,\n sectionTitleClasses,\n type SectionEmphasis,\n type SectionPadding,\n type SectionTone,\n} from './sectionStyles';\n\nexport type { SectionEmphasis, SectionPadding, SectionTone } from './sectionStyles';\n\n/** Heading level the section title renders as. Keep the page outline ordered. */\nexport type SectionHeadingLevel = 2 | 3 | 4;\n\nexport interface SectionHeaderProps {\n /** Short, scannable label. Sentence case — this is a UI label, not a title. */\n title: ReactNode;\n /** One line of context. Keep it under ~120 characters. */\n description?: ReactNode;\n /** Leading icon, already sized by the caller (`h-icon-sm w-icon-sm`). */\n icon?: ReactNode;\n /** Buttons/toggles for this section. They wrap under the title on mobile. */\n actions?: ReactNode;\n /** Status chip or count rendered right after the title. */\n meta?: ReactNode;\n headingLevel?: SectionHeadingLevel;\n tone?: SectionTone;\n /** id applied to the heading so the owning `<section>` can reference it. */\n headingId?: string;\n className?: string;\n}\n\n/**\n * The header row of a section: icon + title + meta on the left, actions on the\n * right. Stacks vertically below `sm` so a two-button action cluster never\n * squeezes the title into a one-word-per-line column on mobile.\n */\nexport const SectionHeader = memo(function SectionHeader({\n title,\n description,\n icon,\n actions,\n meta,\n headingLevel = 3,\n tone = 'neutral',\n headingId,\n className,\n}: SectionHeaderProps) {\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4';\n\n return (\n <div\n className={`flex flex-col gap-control-gap sm:flex-row sm:items-start sm:justify-between ${className ?? ''}`.trim()}\n >\n <div className=\"flex min-w-0 items-start gap-icon-gap\">\n {icon ? (\n <span aria-hidden=\"true\" className=\"mt-0.5 flex shrink-0 items-center justify-center text-text-secondary\">\n {icon}\n </span>\n ) : null}\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-icon-gap\">\n <Heading id={headingId} className={sectionTitleClasses(tone)}>\n {title}\n </Heading>\n {meta}\n </div>\n {description ? <p className=\"mt-1 text-sm leading-relaxed text-text-secondary\">{description}</p> : null}\n </div>\n </div>\n {actions ? <div className=\"flex shrink-0 flex-wrap items-center gap-control-gap\">{actions}</div> : null}\n </div>\n );\n});\n\nexport interface SectionProps extends Omit<SectionHeaderProps, 'headingId' | 'className' | 'title'> {\n /**\n * Visible section label. Optional: a `bare` strip or a section whose heading\n * is supplied through `header` can go without one, but it must then carry an\n * `aria-label` so the region is still announced.\n */\n title?: ReactNode;\n /** Visual weight relative to sibling sections. @default 'standard' */\n emphasis?: SectionEmphasis;\n /** Inner padding step. Use `none` when the child owns its own scroll area. */\n padding?: SectionPadding;\n /** Extra classes for the `<section>` element itself. */\n className?: string;\n /** Extra classes for the body wrapper (below the header). */\n bodyClassName?: string;\n /** Classes for the header block (e.g. `mb-form-gap` overrides). */\n headerClassName?: string;\n /**\n * Renders the header without a title element — for sections whose heading is\n * supplied by a caller-provided node. Prefer passing `title` when possible.\n */\n header?: ReactNode;\n children?: ReactNode;\n id?: string;\n /** Accessible name when the section has no visible title. */\n 'aria-label'?: string;\n 'data-testid'?: string;\n}\n\n/**\n * A labelled region with a consistent emphasis treatment.\n *\n * Layout rules that hold at every breakpoint:\n * - the section never forces horizontal page scroll (`min-w-0`);\n * - the header collapses to a column below `sm` (640px);\n * - padding and inter-section gaps follow the density tokens, so a compact\n * workspace stays compact and a spacious one stays readable.\n */\nexport const Section = memo(function Section({\n title,\n description,\n icon,\n actions,\n meta,\n headingLevel = 3,\n emphasis = 'standard',\n tone = 'neutral',\n padding = 'default',\n className,\n bodyClassName,\n headerClassName,\n header,\n children,\n id,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n}: SectionProps) {\n const generatedId = useId();\n const headingId = title ? `${id ?? generatedId}-title` : undefined;\n const hasHeader = Boolean(title || header);\n\n // `title` and `aria-label` are independently optional, so nothing in the type\n // system stops a caller from rendering a `<section>` landmark that screen\n // readers announce as just \"section\". Fail loudly in development rather than\n // shipping a silent a11y regression.\n if (import.meta.env.DEV && !title && !ariaLabel) {\n console.warn(\n '[BigConsole] Section: pass `title` or `aria-label` — a section landmark without an accessible name is announced with no context.'\n );\n }\n\n return (\n <section\n id={id}\n data-testid={dataTestId}\n data-section-emphasis={emphasis}\n data-section-tone={tone}\n aria-labelledby={headingId}\n aria-label={headingId ? undefined : ariaLabel}\n className={`${sectionSurfaceClasses(emphasis, tone, padding)} ${className ?? ''}`.trim()}\n >\n {hasHeader ? (\n <div className={headerClassName ?? (children ? 'mb-form-gap' : undefined)}>\n {title ? (\n <SectionHeader\n title={title}\n description={description}\n icon={icon}\n actions={actions}\n meta={meta}\n headingLevel={headingLevel}\n tone={tone}\n headingId={headingId}\n />\n ) : (\n header\n )}\n </div>\n ) : null}\n {children ? <div className={`min-w-0 ${bodyClassName ?? ''}`.trim()}>{children}</div> : null}\n </section>\n );\n});\n\nexport interface SectionStackProps {\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Vertical rhythm container for sibling sections. Use it instead of ad-hoc\n * `space-y-6`, so section spacing tracks the workspace density setting.\n */\nexport const SectionStack = memo(function SectionStack({ children, className }: SectionStackProps) {\n return <div className={`${SECTION_STACK} ${className ?? ''}`.trim()}>{children}</div>;\n});\n"],"mappings":";;;;AAgEA,IAAa,IAAgB,EAAK,SAAuB,EACvD,UACA,gBACA,SACA,YACA,SACA,kBAAe,GACf,UAAO,WACP,cACA,gBACqB;CACrB,IAAM,IAAU,IAAI;AAEpB,QACE,kBAAC,OAAD;EACE,WAAW,+EAA+E,KAAa,KAAK,MAAM;YADpH,CAGE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACG,IACC,kBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;cAChC;IACI,CAAA,GACL,MACJ,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAS,IAAI;MAAW,WAAW,EAAoB,EAAK;gBACzD;MACO,CAAA,EACT,EACG;QACL,IAAc,kBAAC,KAAD;KAAG,WAAU;eAAoD;KAAgB,CAAA,GAAG,KAC/F;MACF;MACL,IAAU,kBAAC,OAAD;GAAK,WAAU;aAAwD;GAAc,CAAA,GAAG,KAC/F;;EAER,EAwCW,IAAU,EAAK,SAAiB,EAC3C,UACA,gBACA,SACA,YACA,SACA,kBAAe,GACf,cAAW,YACX,UAAO,WACP,aAAU,WACV,cACA,kBACA,oBACA,WACA,aACA,OACA,cAAc,GACd,eAAe,KACA;CACf,IAAM,IAAc,GAAO,EACrB,IAAY,IAAQ,GAAG,KAAM,EAAY,UAAU,KAAA,GACnD,IAAY,GAAQ,KAAS;AAYnC,QACE,kBAAC,WAAD;EACM;EACJ,eAAa;EACb,yBAAuB;EACvB,qBAAmB;EACnB,mBAAiB;EACjB,cAAY,IAAY,KAAA,IAAY;EACpC,WAAW,GAAG,EAAsB,GAAU,GAAM,EAAQ,CAAC,GAAG,KAAa,KAAK,MAAM;YAP1F,CASG,IACC,kBAAC,OAAD;GAAK,WAAW,MAAoB,IAAW,gBAAgB,KAAA;aAC5D,IACC,kBAAC,GAAD;IACS;IACM;IACP;IACG;IACH;IACQ;IACR;IACK;IACX,CAAA,GAEF;GAEE,CAAA,GACJ,MACH,IAAW,kBAAC,OAAD;GAAK,WAAW,WAAW,KAAiB,KAAK,MAAM;GAAG;GAAe,CAAA,GAAG,KAChF;;EAEZ,EAWW,IAAe,EAAK,SAAsB,EAAE,aAAU,gBAAgC;AACjG,QAAO,kBAAC,OAAD;EAAK,WAAW,GAAG,EAAc,GAAG,KAAa,KAAK,MAAM;EAAG;EAAe,CAAA;EACrF"}
@@ -0,0 +1,2 @@
1
+ import "./sectionStyles.js";
2
+ import "./Section.js";
@@ -0,0 +1,42 @@
1
+ //#region src/bigconsole/components/common/sectionStyles.ts
2
+ var e = {
3
+ primary: "rounded-card border shadow-[var(--shadow-elevation-1)]",
4
+ standard: "rounded-card border",
5
+ muted: "rounded-card border",
6
+ bare: ""
7
+ }, t = {
8
+ primary: "border-[var(--color-border-subtle)] bg-bg-surface",
9
+ standard: "border-[var(--color-border-subtle)] bg-bg-surface",
10
+ muted: "border-transparent bg-bg-sunken"
11
+ }, n = {
12
+ info: "border-[var(--color-status-info-border)] bg-[var(--color-status-info-bgSubtle)]",
13
+ success: "border-[var(--color-status-success-border)] bg-[var(--color-status-success-bgSubtle)]",
14
+ warning: "border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bgSubtle)]",
15
+ danger: "border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)]"
16
+ }, r = {
17
+ neutral: "text-text-primary",
18
+ info: "text-[var(--color-status-info-text)]",
19
+ success: "text-[var(--color-status-success-text)]",
20
+ warning: "text-[var(--color-status-warning-text)]",
21
+ danger: "text-[var(--color-status-error-text)]"
22
+ }, i = {
23
+ none: "",
24
+ compact: "p-control-gap",
25
+ default: "p-card-padding"
26
+ }, a = "motion-safe:transition-[box-shadow,border-color,background-color] motion-safe:duration-[var(--motion-duration-fast)] motion-safe:ease-[var(--motion-easing-out)]", o = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface", s = "flex flex-col gap-section-gap";
27
+ function c(r = "standard", o = "neutral", s = "default") {
28
+ let c = ["min-w-0"];
29
+ if (r === "bare") s !== "default" && c.push(i[s]);
30
+ else {
31
+ let l = o === "neutral" ? t[r] : n[o];
32
+ c.push(e[r], l, i[s], a);
33
+ }
34
+ return c.filter(Boolean).join(" ");
35
+ }
36
+ function l(e = "neutral") {
37
+ return `text-sm font-semibold leading-tight tracking-tight ${r[e]}`;
38
+ }
39
+ //#endregion
40
+ export { o as SECTION_FOCUS_RING, a as SECTION_MOTION, s as SECTION_STACK, c as sectionSurfaceClasses, l as sectionTitleClasses };
41
+
42
+ //# sourceMappingURL=sectionStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sectionStyles.js","names":[],"sources":["../../../../src/bigconsole/components/common/sectionStyles.ts"],"sourcesContent":["/**\n * Section emphasis — shared visual-hierarchy vocabulary for BigConsole (BOFF-5632).\n *\n * BigConsole screens are dense: a builder can stack a toolbar, a palette, a\n * canvas, an inspector, a preview and a status strip on one route. Before this\n * module every one of those blocks was drawn with the same weight, so nothing\n * told the eye where a section started or which one mattered. This file is the\n * single source of truth for that answer; `Section.tsx` renders it and every\n * module imports from there.\n *\n * ## Why the class recipes look the way they do\n *\n * The host shells (`bigconsole-app`, `admin-app`) register a *narrower*\n * `@theme` than `fe-libs/shared/styles/app-shell.css`. A Tailwind utility only\n * exists if its token key is in that shell registry, which makes three\n * otherwise reasonable choices silently emit **no CSS** (the same failure mode\n * as BOFF-5660's `state-*` classes):\n *\n * - `shadow-elevation-1` … `shadow-elevation-5` are not registered — the\n * elevation scale has to be reached through `shadow-[var(--shadow-…)]`.\n * - `--color-border-*` are registered as *hard-coded light hex*, so\n * `border-border-subtle` keeps a light border in dark mode. The arbitrary\n * form `border-[var(--color-border-subtle)]` re-resolves per theme.\n * - `status-{warning,info}-text` are not registered even though the CSS\n * variables exist per theme, so tones read their text colour through\n * `text-[var(--color-status-…-text)]`.\n *\n * Everything below therefore uses registered utilities where they exist and\n * `var()` arbitrary values where they do not. Both forms are theme-aware, so a\n * section keeps its meaning in light, dark and high-contrast themes.\n */\n\n/**\n * How much visual weight a section carries relative to its siblings.\n *\n * - `primary` — the one block the route exists for (the canvas, the generated\n * result, the test output). Raised surface + border + elevation shadow.\n * - `standard` — a normal grouped block: configuration, lists, forms.\n * - `muted` — supporting context that must stay readable but never compete:\n * metadata, raw payloads, help, secondary summaries. Recessed surface.\n * - `bare` — structural grouping only (header strips, toolbars, filter rows).\n * Contributes rhythm and a11y semantics, no surface of its own.\n */\nexport type SectionEmphasis = 'primary' | 'standard' | 'muted' | 'bare';\n\n/** Semantic colouring for state-carrying sections (banners, results, errors). */\nexport type SectionTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\n/** Padding step. `none` is for sections that own their inner scroll/canvas. */\nexport type SectionPadding = 'none' | 'compact' | 'default';\n\n/**\n * Emphasis is split into STRUCTURE (geometry) and FILL (colour) so that a\n * section never carries two competing `bg-*` or `border-*` utilities.\n *\n * The obvious implementation — emit the emphasis surface, then append the tone\n * surface to override it — relies on the tone's utility winning the cascade.\n * Tailwind v4 orders utilities by their position in the generated stylesheet,\n * not by their order in the `class` attribute, so that override is an accident\n * of build output rather than a guarantee: it can invert silently on a Tailwind\n * upgrade and leave a danger banner painted like a neutral card. Composing\n * exactly one fill instead makes the outcome independent of stylesheet order.\n */\nconst EMPHASIS_STRUCTURE: Record<SectionEmphasis, string> = {\n primary: 'rounded-card border shadow-[var(--shadow-elevation-1)]',\n standard: 'rounded-card border',\n muted: 'rounded-card border',\n bare: '',\n};\n\n/** Neutral fill per emphasis level — used when no tone is set. */\nconst EMPHASIS_FILL: Record<Exclude<SectionEmphasis, 'bare'>, string> = {\n primary: 'border-[var(--color-border-subtle)] bg-bg-surface',\n standard: 'border-[var(--color-border-subtle)] bg-bg-surface',\n muted: 'border-transparent bg-bg-sunken',\n};\n\n/**\n * Tone fills replace the emphasis fill (they are alternatives, never additions)\n * so a status section reads as status first while keeping its emphasis\n * geometry. `bare` has no surface at all, so a tone on `bare` colours nothing —\n * callers wanting a coloured banner use `muted`/`standard`.\n */\nconst TONE_SURFACE: Record<Exclude<SectionTone, 'neutral'>, string> = {\n info: 'border-[var(--color-status-info-border)] bg-[var(--color-status-info-bgSubtle)]',\n success: 'border-[var(--color-status-success-border)] bg-[var(--color-status-success-bgSubtle)]',\n warning: 'border-[var(--color-status-warning-border)] bg-[var(--color-status-warning-bgSubtle)]',\n danger: 'border-[var(--color-status-error-border)] bg-[var(--color-status-error-bgSubtle)]',\n};\n\n/** Title colour per tone — the neutral case inherits the normal heading colour. */\nconst TONE_TITLE: Record<SectionTone, string> = {\n neutral: 'text-text-primary',\n info: 'text-[var(--color-status-info-text)]',\n success: 'text-[var(--color-status-success-text)]',\n warning: 'text-[var(--color-status-warning-text)]',\n danger: 'text-[var(--color-status-error-text)]',\n};\n\nconst PADDING: Record<SectionPadding, string> = {\n none: '',\n // `--spacing-control-gap` and `--spacing-card-padding` both track\n // `data-density`, so compact/comfortable/spacious users keep their rhythm.\n compact: 'p-control-gap',\n default: 'p-card-padding',\n};\n\n/**\n * Transitions are opt-in through `motion-safe:` so the OS \"reduce motion\"\n * setting removes them; the shell's `data-reduce-motion` attribute neutralises\n * whatever survives. Only colour/shadow animate — never layout.\n */\nexport const SECTION_MOTION =\n 'motion-safe:transition-[box-shadow,border-color,background-color] motion-safe:duration-[var(--motion-duration-fast)] motion-safe:ease-[var(--motion-easing-out)]';\n\n/** Focus ring used when a section itself is focusable (collapsible headers). */\nexport const SECTION_FOCUS_RING =\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface';\n\n/** Vertical rhythm between sibling sections. Density-reactive. */\nexport const SECTION_STACK = 'flex flex-col gap-section-gap';\n\n/**\n * Composes the container classes for a section.\n *\n * `min-w-0` is always applied: BigConsole sections routinely host tables, JSON\n * previews and node canvases, and without it a flex/grid child refuses to\n * shrink and pushes the page into horizontal scroll on tablet and mobile.\n */\nexport function sectionSurfaceClasses(\n emphasis: SectionEmphasis = 'standard',\n tone: SectionTone = 'neutral',\n padding: SectionPadding = 'default'\n): string {\n const parts = ['min-w-0'];\n\n if (emphasis === 'bare') {\n // A tone is a fill, and `bare` has no surface to fill — asking for\n // `emphasis=\"bare\" tone=\"danger\"` silently produces an uncoloured section,\n // which reads as a styling bug rather than a deliberate choice. Say so.\n if (import.meta.env.DEV && tone !== 'neutral') {\n console.warn(\n `[BigConsole] Section: tone=\"${tone}\" is ignored on emphasis=\"bare\" — a tone needs a surface. Use \"muted\" or \"standard\" for a coloured banner.`\n );\n }\n if (padding !== 'default') parts.push(PADDING[padding]);\n } else {\n const fill = tone === 'neutral' ? EMPHASIS_FILL[emphasis] : TONE_SURFACE[tone];\n parts.push(EMPHASIS_STRUCTURE[emphasis], fill, PADDING[padding], SECTION_MOTION);\n }\n\n return parts.filter(Boolean).join(' ');\n}\n\n/** Title classes for a section header at the given tone. */\nexport function sectionTitleClasses(tone: SectionTone = 'neutral'): string {\n return `text-sm font-semibold leading-tight tracking-tight ${TONE_TITLE[tone]}`;\n}\n"],"mappings":";AA+DA,IAAM,IAAsD;CAC1D,SAAS;CACT,UAAU;CACV,OAAO;CACP,MAAM;CACP,EAGK,IAAkE;CACtE,SAAS;CACT,UAAU;CACV,OAAO;CACR,EAQK,IAAgE;CACpE,MAAM;CACN,SAAS;CACT,SAAS;CACT,QAAQ;CACT,EAGK,IAA0C;CAC9C,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;CACT,QAAQ;CACT,EAEK,IAA0C;CAC9C,MAAM;CAGN,SAAS;CACT,SAAS;CACV,EAOY,IACX,oKAGW,IACX,4IAGW,IAAgB;AAS7B,SAAgB,EACd,IAA4B,YAC5B,IAAoB,WACpB,IAA0B,WAClB;CACR,IAAM,IAAQ,CAAC,UAAU;AAEzB,KAAI,MAAa,QASX,MAAY,aAAW,EAAM,KAAK,EAAQ,GAAS;MAClD;EACL,IAAM,IAAO,MAAS,YAAY,EAAc,KAAY,EAAa;AACzE,IAAM,KAAK,EAAmB,IAAW,GAAM,EAAQ,IAAU,EAAe;;AAGlF,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAIxC,SAAgB,EAAoB,IAAoB,WAAmB;AACzE,QAAO,sDAAsD,EAAW"}