@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
@@ -2,76 +2,80 @@ import { memo as e, useMemo as t } from "react";
2
2
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
3
3
  //#region src/bigconsole/components/widgets/gauge/CircularGauge.tsx
4
4
  function i(e, t) {
5
+ let n = t - e;
6
+ return Number.isFinite(n) && n > 0 ? n : 1;
7
+ }
8
+ function a(e, t) {
5
9
  if (!t?.length) return "var(--color-action-primary-bg)";
6
10
  let n = [...t].sort((e, t) => e.value - t.value);
7
11
  for (let t of n) if (e <= t.value) return t.color;
8
12
  return n[n.length - 1].color;
9
13
  }
10
- var a = e(function({ value: e, min: a = 0, max: o = 100, size: s = 120, strokeWidth: c = 12, thresholds: l, unit: u, showValue: d = !0, formatValue: f = (e) => e.toFixed(0) }) {
11
- let p = t(() => {
12
- let t = (s - c) / 2, n = t * Math.PI * 2, r = -225;
14
+ var o = e(function({ value: e, min: o = 0, max: s = 100, size: c = 120, strokeWidth: l = 12, thresholds: u, unit: d, showValue: f = !0, formatValue: p = (e) => e.toFixed(0) }) {
15
+ let m = t(() => {
16
+ let t = (c - l) / 2, n = t * Math.PI * 2, r = -225;
13
17
  45 - r;
14
- let i = (Math.max(a, Math.min(o, e)) - a) / (o - a);
18
+ let a = (Math.max(o, Math.min(s, e)) - o) / i(o, s);
15
19
  return {
16
20
  radius: t,
17
21
  circumference: n,
18
- arcLength: i * 270 / 360 * n,
22
+ arcLength: a * 270 / 360 * n,
19
23
  backgroundArcLength: 270 / 360 * n,
20
24
  startAngle: r,
21
- percentage: i
25
+ percentage: a
22
26
  };
23
27
  }, [
24
- s,
25
28
  c,
29
+ l,
26
30
  e,
27
- a,
28
- o
29
- ]), m = i(e, l);
31
+ o,
32
+ s
33
+ ]), h = a(e, u);
30
34
  return /* @__PURE__ */ r("div", {
31
35
  className: "relative inline-flex items-center justify-center",
32
36
  style: {
33
- width: s,
34
- height: s
37
+ width: c,
38
+ height: c
35
39
  },
36
40
  children: [/* @__PURE__ */ r("svg", {
37
- width: s,
38
- height: s,
39
- viewBox: `0 0 ${s} ${s}`,
41
+ width: c,
42
+ height: c,
43
+ viewBox: `0 0 ${c} ${c}`,
40
44
  className: "transform -rotate-135",
41
45
  children: [/* @__PURE__ */ n("circle", {
42
- cx: s / 2,
43
- cy: s / 2,
44
- r: p.radius,
46
+ cx: c / 2,
47
+ cy: c / 2,
48
+ r: m.radius,
45
49
  fill: "none",
46
50
  stroke: "var(--color-border-default)",
47
- strokeWidth: c,
51
+ strokeWidth: l,
48
52
  strokeLinecap: "round",
49
- strokeDasharray: `${p.backgroundArcLength} ${p.circumference}`
53
+ strokeDasharray: `${m.backgroundArcLength} ${m.circumference}`
50
54
  }), /* @__PURE__ */ n("circle", {
51
- cx: s / 2,
52
- cy: s / 2,
53
- r: p.radius,
55
+ cx: c / 2,
56
+ cy: c / 2,
57
+ r: m.radius,
54
58
  fill: "none",
55
- stroke: m,
56
- strokeWidth: c,
59
+ stroke: h,
60
+ strokeWidth: l,
57
61
  strokeLinecap: "round",
58
- strokeDasharray: `${p.arcLength} ${p.circumference}`,
62
+ strokeDasharray: `${m.arcLength} ${m.circumference}`,
59
63
  className: "transition-all duration-500 ease-out"
60
64
  })]
61
- }), d && /* @__PURE__ */ r("div", {
65
+ }), f && /* @__PURE__ */ r("div", {
62
66
  className: "absolute inset-0 flex flex-col items-center justify-center",
63
67
  children: [/* @__PURE__ */ n("span", {
64
68
  className: "text-2xl font-bold text-text-primary",
65
- style: { color: m },
66
- children: f(e)
67
- }), u && /* @__PURE__ */ n("span", {
69
+ style: { color: h },
70
+ children: p(e)
71
+ }), d && /* @__PURE__ */ n("span", {
68
72
  className: "text-xs text-text-secondary",
69
- children: u
73
+ children: d
70
74
  })]
71
75
  })]
72
76
  });
73
77
  });
74
78
  //#endregion
75
- export { a as default };
79
+ export { o as default, i as gaugeSpan };
76
80
 
77
81
  //# sourceMappingURL=CircularGauge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircularGauge.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/gauge/CircularGauge.tsx"],"sourcesContent":["/**\n * CircularGauge Component\n *\n * Circular gauge visualization with arc and value display.\n */\n\nimport { type FC, memo, useMemo } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ThresholdConfig {\n /** Threshold value */\n value: number;\n /** Color for values up to this threshold */\n color: string;\n}\n\nexport interface CircularGaugeProps {\n /** Current value */\n value: number;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the gauge */\n size?: number;\n /** Stroke width of the arc */\n strokeWidth?: number;\n /** Thresholds for color zones */\n thresholds?: ThresholdConfig[];\n /** Unit label */\n unit?: string;\n /** Whether to show the value */\n showValue?: boolean;\n /** Value format function */\n formatValue?: (value: number) => string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getColorForValue(value: number, thresholds?: ThresholdConfig[]): string {\n if (!thresholds?.length) {\n return 'var(--color-action-primary-bg)';\n }\n\n // Sort thresholds by value\n const sorted = [...thresholds].sort((a, b) => a.value - b.value);\n\n for (const threshold of sorted) {\n if (value <= threshold.value) {\n return threshold.color;\n }\n }\n\n // Return last threshold color if above all\n return sorted[sorted.length - 1].color;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CircularGauge: FC<CircularGaugeProps> = memo(function CircularGauge({\n value,\n min = 0,\n max = 100,\n size = 120,\n strokeWidth = 12,\n thresholds,\n unit,\n showValue = true,\n formatValue = (v: number) => v.toFixed(0),\n}) {\n // Calculate arc geometry\n const geometry = useMemo(() => {\n const radius = (size - strokeWidth) / 2;\n const circumference = radius * Math.PI * 2;\n const startAngle = -225; // Start from bottom-left\n const endAngle = 45; // End at bottom-right\n const totalAngle = endAngle - startAngle; // 270 degrees\n\n // Clamp value to range\n const clampedValue = Math.max(min, Math.min(max, value));\n const percentage = (clampedValue - min) / (max - min);\n const angle = percentage * totalAngle;\n\n // Calculate arc path\n const arcLength = (angle / 360) * circumference;\n const backgroundArcLength = (totalAngle / 360) * circumference;\n\n return {\n radius,\n circumference,\n arcLength,\n backgroundArcLength,\n startAngle,\n percentage,\n };\n }, [size, strokeWidth, value, min, max]);\n\n const color = getColorForValue(value, thresholds);\n\n return (\n <div className=\"relative inline-flex items-center justify-center\" style={{ width: size, height: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className=\"transform -rotate-135\">\n {/* Background arc */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={geometry.radius}\n fill=\"none\"\n stroke=\"var(--color-border-default)\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={`${geometry.backgroundArcLength} ${geometry.circumference}`}\n />\n\n {/* Value arc */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={geometry.radius}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={`${geometry.arcLength} ${geometry.circumference}`}\n className=\"transition-all duration-500 ease-out\"\n />\n </svg>\n\n {/* Center content */}\n {showValue && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n <span className=\"text-2xl font-bold text-text-primary\" style={{ color }}>\n {formatValue(value)}\n </span>\n {unit && <span className=\"text-xs text-text-secondary\">{unit}</span>}\n </div>\n )}\n </div>\n );\n});\n\nexport default CircularGauge;\n"],"mappings":";;;AA4CA,SAAS,EAAiB,GAAe,GAAwC;AAC/E,KAAI,CAAC,GAAY,OACf,QAAO;CAIT,IAAM,IAAS,CAAC,GAAG,EAAW,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAEhE,MAAK,IAAM,KAAa,EACtB,KAAI,KAAS,EAAU,MACrB,QAAO,EAAU;AAKrB,QAAO,EAAO,EAAO,SAAS,GAAG;;AAOnC,IAAa,IAAwC,EAAK,SAAuB,EAC/E,UACA,SAAM,GACN,SAAM,KACN,UAAO,KACP,iBAAc,IACd,eACA,SACA,eAAY,IACZ,kBAAe,MAAc,EAAE,QAAQ,EAAE,IACxC;CAED,IAAM,IAAW,QAAc;EAC7B,IAAM,KAAU,IAAO,KAAe,GAChC,IAAgB,IAAS,KAAK,KAAK,GACnC,IAAa;AACF,OACa;EAJ9B,IAQM,KADe,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAM,CAAC,GACrB,MAAQ,IAAM;AAOjD,SAAO;GACL;GACA;GACA,WATY,IAAa,MAGA,MAAO;GAOhC,qBAN2B,MAAa,MAAO;GAO/C;GACA;GACD;IACA;EAAC;EAAM;EAAa;EAAO;EAAK;EAAI,CAAC,EAElC,IAAQ,EAAiB,GAAO,EAAW;AAEjD,QACE,kBAAC,OAAD;EAAK,WAAU;EAAmD,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;YAAtG,CACE,kBAAC,OAAD;GAAK,OAAO;GAAM,QAAQ;GAAM,SAAS,OAAO,EAAK,GAAG;GAAQ,WAAU;aAA1E,CAEE,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACX,GAAG,EAAS;IACZ,MAAK;IACL,QAAO;IACM;IACb,eAAc;IACd,iBAAiB,GAAG,EAAS,oBAAoB,GAAG,EAAS;IAC7D,CAAA,EAGF,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACX,GAAG,EAAS;IACZ,MAAK;IACL,QAAQ;IACK;IACb,eAAc;IACd,iBAAiB,GAAG,EAAS,UAAU,GAAG,EAAS;IACnD,WAAU;IACV,CAAA,CACE;MAGL,KACC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;IAAuC,OAAO,EAAE,UAAO;cACpE,EAAY,EAAM;IACd,CAAA,EACN,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAA+B;IAAY,CAAA,CAChE;KAEJ;;EAER"}
1
+ {"version":3,"file":"CircularGauge.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/gauge/CircularGauge.tsx"],"sourcesContent":["/**\n * CircularGauge Component\n *\n * Circular gauge visualization with arc and value display.\n */\n\nimport { type FC, memo, useMemo } from 'react';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ThresholdConfig {\n /** Threshold value */\n value: number;\n /** Color for values up to this threshold */\n color: string;\n}\n\nexport interface CircularGaugeProps {\n /** Current value */\n value: number;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the gauge */\n size?: number;\n /** Stroke width of the arc */\n strokeWidth?: number;\n /** Thresholds for color zones */\n thresholds?: ThresholdConfig[];\n /** Unit label */\n unit?: string;\n /** Whether to show the value */\n showValue?: boolean;\n /** Value format function */\n formatValue?: (value: number) => string;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Width of the gauge range.\n *\n * A degenerate range (`min === max`, or an inverted one) makes every ratio\n * `NaN`/`Infinity`, which React emits as `stroke-dasharray=\"NaN …\"` or\n * `width: NaN%` — both invalid, so the browser drops the declaration and the\n * gauge renders unpredictably. Falling back to 1 makes the gauge read at its\n * minimum instead. Mirrors the `max - min || 1` guard already used by\n * HeatmapWidget, SparklineChart and MapWidget.\n */\nexport function gaugeSpan(min: number, max: number): number {\n const span = max - min;\n return Number.isFinite(span) && span > 0 ? span : 1;\n}\n\nfunction getColorForValue(value: number, thresholds?: ThresholdConfig[]): string {\n if (!thresholds?.length) {\n return 'var(--color-action-primary-bg)';\n }\n\n // Sort thresholds by value\n const sorted = [...thresholds].sort((a, b) => a.value - b.value);\n\n for (const threshold of sorted) {\n if (value <= threshold.value) {\n return threshold.color;\n }\n }\n\n // Return last threshold color if above all\n return sorted[sorted.length - 1].color;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const CircularGauge: FC<CircularGaugeProps> = memo(function CircularGauge({\n value,\n min = 0,\n max = 100,\n size = 120,\n strokeWidth = 12,\n thresholds,\n unit,\n showValue = true,\n formatValue = (v: number) => v.toFixed(0),\n}) {\n // Calculate arc geometry\n const geometry = useMemo(() => {\n const radius = (size - strokeWidth) / 2;\n const circumference = radius * Math.PI * 2;\n const startAngle = -225; // Start from bottom-left\n const endAngle = 45; // End at bottom-right\n const totalAngle = endAngle - startAngle; // 270 degrees\n\n // Clamp value to range\n const clampedValue = Math.max(min, Math.min(max, value));\n const percentage = (clampedValue - min) / gaugeSpan(min, max);\n const angle = percentage * totalAngle;\n\n // Calculate arc path\n const arcLength = (angle / 360) * circumference;\n const backgroundArcLength = (totalAngle / 360) * circumference;\n\n return {\n radius,\n circumference,\n arcLength,\n backgroundArcLength,\n startAngle,\n percentage,\n };\n }, [size, strokeWidth, value, min, max]);\n\n const color = getColorForValue(value, thresholds);\n\n return (\n <div className=\"relative inline-flex items-center justify-center\" style={{ width: size, height: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className=\"transform -rotate-135\">\n {/* Background arc */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={geometry.radius}\n fill=\"none\"\n stroke=\"var(--color-border-default)\"\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={`${geometry.backgroundArcLength} ${geometry.circumference}`}\n />\n\n {/* Value arc */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={geometry.radius}\n fill=\"none\"\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={`${geometry.arcLength} ${geometry.circumference}`}\n className=\"transition-all duration-500 ease-out\"\n />\n </svg>\n\n {/* Center content */}\n {showValue && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n <span className=\"text-2xl font-bold text-text-primary\" style={{ color }}>\n {formatValue(value)}\n </span>\n {unit && <span className=\"text-xs text-text-secondary\">{unit}</span>}\n </div>\n )}\n </div>\n );\n});\n\nexport default CircularGauge;\n"],"mappings":";;;AAsDA,SAAgB,EAAU,GAAa,GAAqB;CAC1D,IAAM,IAAO,IAAM;AACnB,QAAO,OAAO,SAAS,EAAK,IAAI,IAAO,IAAI,IAAO;;AAGpD,SAAS,EAAiB,GAAe,GAAwC;AAC/E,KAAI,CAAC,GAAY,OACf,QAAO;CAIT,IAAM,IAAS,CAAC,GAAG,EAAW,CAAC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AAEhE,MAAK,IAAM,KAAa,EACtB,KAAI,KAAS,EAAU,MACrB,QAAO,EAAU;AAKrB,QAAO,EAAO,EAAO,SAAS,GAAG;;AAOnC,IAAa,IAAwC,EAAK,SAAuB,EAC/E,UACA,SAAM,GACN,SAAM,KACN,UAAO,KACP,iBAAc,IACd,eACA,SACA,eAAY,IACZ,kBAAe,MAAc,EAAE,QAAQ,EAAE,IACxC;CAED,IAAM,IAAW,QAAc;EAC7B,IAAM,KAAU,IAAO,KAAe,GAChC,IAAgB,IAAS,KAAK,KAAK,GACnC,IAAa;AACF,OACa;EAJ9B,IAQM,KADe,KAAK,IAAI,GAAK,KAAK,IAAI,GAAK,EAAM,CAAC,GACrB,KAAO,EAAU,GAAK,EAAI;AAO7D,SAAO;GACL;GACA;GACA,WATY,IAAa,MAGA,MAAO;GAOhC,qBAN2B,MAAa,MAAO;GAO/C;GACA;GACD;IACA;EAAC;EAAM;EAAa;EAAO;EAAK;EAAI,CAAC,EAElC,IAAQ,EAAiB,GAAO,EAAW;AAEjD,QACE,kBAAC,OAAD;EAAK,WAAU;EAAmD,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;YAAtG,CACE,kBAAC,OAAD;GAAK,OAAO;GAAM,QAAQ;GAAM,SAAS,OAAO,EAAK,GAAG;GAAQ,WAAU;aAA1E,CAEE,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACX,GAAG,EAAS;IACZ,MAAK;IACL,QAAO;IACM;IACb,eAAc;IACd,iBAAiB,GAAG,EAAS,oBAAoB,GAAG,EAAS;IAC7D,CAAA,EAGF,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACX,GAAG,EAAS;IACZ,MAAK;IACL,QAAQ;IACK;IACb,eAAc;IACd,iBAAiB,GAAG,EAAS,UAAU,GAAG,EAAS;IACnD,WAAU;IACV,CAAA,CACE;MAGL,KACC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;IAAuC,OAAO,EAAE,UAAO;cACpE,EAAY,EAAM;IACd,CAAA,EACN,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAA+B;IAAY,CAAA,CAChE;KAEJ;;EAER"}
@@ -2,91 +2,119 @@ import { memo as e, useCallback as t } from "react";
2
2
  import { useI18n as n } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
3
3
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
4
  //#region src/bigconsole/components/widgets/gauge/GaugeConfig.tsx
5
- var a = e(function({ config: e, onChange: a }) {
6
- let { t: o } = n(), s = t((t, n) => {
7
- a({
5
+ var a = [
6
+ {
7
+ value: 33,
8
+ color: "error"
9
+ },
10
+ {
11
+ value: 66,
12
+ color: "warning"
13
+ },
14
+ {
15
+ value: 100,
16
+ color: "success"
17
+ }
18
+ ], o = e(function({ config: e, onChange: o }) {
19
+ let { t: s } = n(), c = t((t, n) => {
20
+ o({
8
21
  ...e,
9
22
  [t]: n
10
23
  });
11
- }, [e, a]);
24
+ }, [e, o]), l = t((t, n) => {
25
+ let r = [];
26
+ for (let n = 0; n <= t; n++) r[n] = e.thresholds?.[n] ?? a[n] ?? {
27
+ value: 100,
28
+ color: "success"
29
+ };
30
+ r[t] = {
31
+ ...r[t],
32
+ value: Number(n)
33
+ };
34
+ for (let n = t + 1; n < (e.thresholds?.length ?? 0); n++) r[n] = e.thresholds?.[n] ?? {
35
+ value: 100,
36
+ color: "success"
37
+ };
38
+ c("thresholds", r);
39
+ }, [e.thresholds, c]);
12
40
  return /* @__PURE__ */ i("div", {
13
- className: "space-y-4",
41
+ className: "min-w-0 space-y-form-gap",
14
42
  children: [
15
43
  /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
16
44
  className: "block text-sm font-medium text-text-primary mb-1",
17
- children: o("bigconsole.widget.config.gauge.gaugeType", "Gauge Type")
45
+ children: s("bigconsole.widget.config.gauge.gaugeType", "Gauge Type")
18
46
  }), /* @__PURE__ */ i("select", {
19
47
  value: e.variant || "circular",
20
- onChange: (e) => s("variant", e.target.value),
48
+ onChange: (e) => c("variant", e.target.value),
21
49
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n ",
22
50
  children: [/* @__PURE__ */ r("option", {
23
51
  value: "circular",
24
- children: o("bigconsole.widget.config.gauge.variant.circular", "Circular")
52
+ children: s("bigconsole.widget.config.gauge.variant.circular", "Circular")
25
53
  }), /* @__PURE__ */ r("option", {
26
54
  value: "linear",
27
- children: o("bigconsole.widget.config.gauge.variant.linear", "Linear")
55
+ children: s("bigconsole.widget.config.gauge.variant.linear", "Linear")
28
56
  })]
29
57
  })] }),
30
58
  /* @__PURE__ */ i("div", {
31
- className: "grid grid-cols-2 gap-3",
59
+ className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
32
60
  children: [/* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
33
61
  className: "block text-sm font-medium text-text-primary mb-1",
34
- children: o("bigconsole.widget.config.gauge.minimum", "Minimum")
62
+ children: s("bigconsole.widget.config.gauge.minimum", "Minimum")
35
63
  }), /* @__PURE__ */ r("input", {
36
64
  type: "number",
37
65
  value: e.min ?? 0,
38
- onChange: (e) => s("min", Number(e.target.value)),
66
+ onChange: (e) => c("min", Number(e.target.value)),
39
67
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
40
68
  })] }), /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
41
69
  className: "block text-sm font-medium text-text-primary mb-1",
42
- children: o("bigconsole.widget.config.gauge.maximum", "Maximum")
70
+ children: s("bigconsole.widget.config.gauge.maximum", "Maximum")
43
71
  }), /* @__PURE__ */ r("input", {
44
72
  type: "number",
45
73
  value: e.max ?? 100,
46
- onChange: (e) => s("max", Number(e.target.value)),
74
+ onChange: (e) => c("max", Number(e.target.value)),
47
75
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
48
76
  })] })]
49
77
  }),
50
78
  /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
51
79
  className: "block text-sm font-medium text-text-primary mb-1",
52
- children: o("bigconsole.widget.config.gauge.unitLabel", "Unit Label")
80
+ children: s("bigconsole.widget.config.gauge.unitLabel", "Unit Label")
53
81
  }), /* @__PURE__ */ r("input", {
54
82
  type: "text",
55
83
  value: e.unit || "",
56
- onChange: (e) => s("unit", e.target.value),
57
- placeholder: o("bigconsole.widget.config.gauge.unitPlaceholder", "e.g., %, ms, users"),
84
+ onChange: (e) => c("unit", e.target.value),
85
+ placeholder: s("bigconsole.widget.config.gauge.unitPlaceholder", "e.g., %, ms, users"),
58
86
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
59
87
  })] }),
60
88
  /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("label", {
61
89
  className: "block text-sm font-medium text-text-primary mb-1",
62
- children: o("bigconsole.widget.config.gauge.valueFormat", "Value Format")
90
+ children: s("bigconsole.widget.config.gauge.valueFormat", "Value Format")
63
91
  }), /* @__PURE__ */ i("select", {
64
92
  value: e.format || "number",
65
- onChange: (e) => s("format", e.target.value),
93
+ onChange: (e) => c("format", e.target.value),
66
94
  className: "\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n ",
67
95
  children: [
68
96
  /* @__PURE__ */ r("option", {
69
97
  value: "number",
70
- children: o("bigconsole.widget.config.gauge.format.number", "Number")
98
+ children: s("bigconsole.widget.config.gauge.format.number", "Number")
71
99
  }),
72
100
  /* @__PURE__ */ r("option", {
73
101
  value: "percentage",
74
- children: o("bigconsole.widget.config.gauge.format.percentage", "Percentage")
102
+ children: s("bigconsole.widget.config.gauge.format.percentage", "Percentage")
75
103
  }),
76
104
  /* @__PURE__ */ r("option", {
77
105
  value: "currency",
78
- children: o("bigconsole.widget.config.gauge.format.currency", "Currency")
106
+ children: s("bigconsole.widget.config.gauge.format.currency", "Currency")
79
107
  })
80
108
  ]
81
109
  })] }),
82
110
  /* @__PURE__ */ i("div", { children: [
83
111
  /* @__PURE__ */ r("label", {
84
112
  className: "block text-sm font-medium text-text-primary mb-2",
85
- children: o("bigconsole.widget.config.gauge.colorThresholds", "Color Thresholds")
113
+ children: s("bigconsole.widget.config.gauge.colorThresholds", "Color Thresholds")
86
114
  }),
87
115
  /* @__PURE__ */ r("p", {
88
116
  className: "text-xs text-text-secondary mb-3",
89
- children: o("bigconsole.widget.config.gauge.colorThresholdsHelp", "Define color zones based on value ranges. Values up to each threshold will use that color.")
117
+ children: s("bigconsole.widget.config.gauge.colorThresholdsHelp", "Define color zones based on value ranges. Values up to each threshold will use that color.")
90
118
  }),
91
119
  /* @__PURE__ */ i("div", {
92
120
  className: "space-y-2",
@@ -97,18 +125,12 @@ var a = e(function({ config: e, onChange: a }) {
97
125
  /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-error-bg" }),
98
126
  /* @__PURE__ */ r("span", {
99
127
  className: "text-sm text-text-primary flex-1",
100
- children: o("bigconsole.widget.config.gauge.threshold.danger", "Danger (Red)")
128
+ children: s("bigconsole.widget.config.gauge.threshold.danger", "Danger (Red)")
101
129
  }),
102
130
  /* @__PURE__ */ r("input", {
103
131
  type: "number",
104
132
  value: e.thresholds?.[0]?.value ?? 33,
105
- onChange: (t) => {
106
- let n = [...e.thresholds || []];
107
- n[0] = {
108
- value: Number(t.target.value),
109
- color: "error"
110
- }, s("thresholds", n);
111
- },
133
+ onChange: (e) => l(0, e.target.value),
112
134
  className: "\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
113
135
  })
114
136
  ]
@@ -119,18 +141,12 @@ var a = e(function({ config: e, onChange: a }) {
119
141
  /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-warning-bg" }),
120
142
  /* @__PURE__ */ r("span", {
121
143
  className: "text-sm text-text-primary flex-1",
122
- children: o("bigconsole.widget.config.gauge.threshold.warning", "Warning (Yellow)")
144
+ children: s("bigconsole.widget.config.gauge.threshold.warning", "Warning (Yellow)")
123
145
  }),
124
146
  /* @__PURE__ */ r("input", {
125
147
  type: "number",
126
148
  value: e.thresholds?.[1]?.value ?? 66,
127
- onChange: (t) => {
128
- let n = [...e.thresholds || []];
129
- n[1] = {
130
- value: Number(t.target.value),
131
- color: "warning"
132
- }, s("thresholds", n);
133
- },
149
+ onChange: (e) => l(1, e.target.value),
134
150
  className: "\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
135
151
  })
136
152
  ]
@@ -141,18 +157,12 @@ var a = e(function({ config: e, onChange: a }) {
141
157
  /* @__PURE__ */ r("div", { className: "w-4 h-4 rounded bg-status-success-bg" }),
142
158
  /* @__PURE__ */ r("span", {
143
159
  className: "text-sm text-text-primary flex-1",
144
- children: o("bigconsole.widget.config.gauge.threshold.good", "Good (Green)")
160
+ children: s("bigconsole.widget.config.gauge.threshold.good", "Good (Green)")
145
161
  }),
146
162
  /* @__PURE__ */ r("input", {
147
163
  type: "number",
148
164
  value: e.thresholds?.[2]?.value ?? 100,
149
- onChange: (t) => {
150
- let n = [...e.thresholds || []];
151
- n[2] = {
152
- value: Number(t.target.value),
153
- color: "success"
154
- }, s("thresholds", n);
155
- },
165
+ onChange: (e) => l(2, e.target.value),
156
166
  className: "\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n "
157
167
  })
158
168
  ]
@@ -160,22 +170,37 @@ var a = e(function({ config: e, onChange: a }) {
160
170
  ]
161
171
  })
162
172
  ] }),
163
- e.variant === "linear" && /* @__PURE__ */ i("label", {
164
- className: "flex items-center gap-3",
165
- children: [/* @__PURE__ */ r("input", {
166
- type: "checkbox",
167
- checked: e.showZones === !0,
168
- onChange: (e) => s("showZones", e.target.checked),
169
- className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
170
- }), /* @__PURE__ */ r("span", {
171
- className: "text-sm text-text-primary",
172
- children: o("bigconsole.widget.config.gauge.showZones", "Show color zones in background")
173
- })]
173
+ /* @__PURE__ */ i("div", {
174
+ role: "group",
175
+ "aria-label": "Display options",
176
+ className: "space-y-3 border-t border-[var(--color-border-subtle)] pt-form-gap",
177
+ children: [
178
+ /* @__PURE__ */ r("p", {
179
+ className: "text-xs font-bold uppercase tracking-wider text-text-secondary",
180
+ children: "Display options"
181
+ }),
182
+ e.variant === "linear" && /* @__PURE__ */ i("label", {
183
+ className: "flex items-center gap-3",
184
+ children: [/* @__PURE__ */ r("input", {
185
+ type: "checkbox",
186
+ checked: e.showZones === !0,
187
+ onChange: (e) => c("showZones", e.target.checked),
188
+ className: "\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n "
189
+ }), /* @__PURE__ */ r("span", {
190
+ className: "text-sm text-text-primary",
191
+ children: s("bigconsole.widget.config.gauge.showZones", "Show color zones in background")
192
+ })]
193
+ }),
194
+ e.variant !== "linear" && /* @__PURE__ */ r("p", {
195
+ className: "text-xs text-text-secondary",
196
+ children: s("bigconsole.widget.config.gauge.noCircularOptions", "No display options for the circular gauge.")
197
+ })
198
+ ]
174
199
  })
175
200
  ]
176
201
  });
177
202
  });
178
203
  //#endregion
179
- export { a as default };
204
+ export { o as default };
180
205
 
181
206
  //# sourceMappingURL=GaugeConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GaugeConfig.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/gauge/GaugeConfig.tsx"],"sourcesContent":["/**\n * GaugeConfig Component\n *\n * Configuration panel for Gauge widgets.\n */\n\nimport { type FC, memo, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { GaugeConfig as ConfigType } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface GaugeConfigProps {\n /** Current configuration */\n config: ConfigType;\n /** Callback when config changes */\n onChange: (config: ConfigType) => void;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const GaugeConfig: FC<GaugeConfigProps> = memo(function GaugeConfig({ config, onChange }) {\n const { t } = useI18n();\n const handleChange = useCallback(\n <K extends keyof ConfigType>(key: K, value: ConfigType[K]) => {\n onChange({ ...config, [key]: value });\n },\n [config, onChange]\n );\n\n return (\n <div className=\"space-y-4\">\n {/* Variant */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.gaugeType', 'Gauge Type')}\n </label>\n <select\n value={config.variant || 'circular'}\n onChange={(e) => handleChange('variant', e.target.value as ConfigType['variant'])}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n >\n <option value=\"circular\">{t('bigconsole.widget.config.gauge.variant.circular', 'Circular')}</option>\n <option value=\"linear\">{t('bigconsole.widget.config.gauge.variant.linear', 'Linear')}</option>\n </select>\n </div>\n\n {/* Min/Max Range */}\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.minimum', 'Minimum')}\n </label>\n <input\n type=\"number\"\n value={config.min ?? 0}\n onChange={(e) => handleChange('min', Number(e.target.value))}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.maximum', 'Maximum')}\n </label>\n <input\n type=\"number\"\n value={config.max ?? 100}\n onChange={(e) => handleChange('max', Number(e.target.value))}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n </div>\n\n {/* Unit */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.unitLabel', 'Unit Label')}\n </label>\n <input\n type=\"text\"\n value={config.unit || ''}\n onChange={(e) => handleChange('unit', e.target.value)}\n placeholder={t('bigconsole.widget.config.gauge.unitPlaceholder', 'e.g., %, ms, users')}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Format */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.valueFormat', 'Value Format')}\n </label>\n <select\n value={config.format || 'number'}\n onChange={(e) => handleChange('format', e.target.value as ConfigType['format'])}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n >\n <option value=\"number\">{t('bigconsole.widget.config.gauge.format.number', 'Number')}</option>\n <option value=\"percentage\">{t('bigconsole.widget.config.gauge.format.percentage', 'Percentage')}</option>\n <option value=\"currency\">{t('bigconsole.widget.config.gauge.format.currency', 'Currency')}</option>\n </select>\n </div>\n\n {/* Thresholds Section */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n {t('bigconsole.widget.config.gauge.colorThresholds', 'Color Thresholds')}\n </label>\n <p className=\"text-xs text-text-secondary mb-3\">\n {t(\n 'bigconsole.widget.config.gauge.colorThresholdsHelp',\n 'Define color zones based on value ranges. Values up to each threshold will use that color.'\n )}\n </p>\n\n <div className=\"space-y-2\">\n {/* Red zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-error-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.danger', 'Danger (Red)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[0]?.value ?? 33}\n onChange={(e) => {\n const thresholds = [...(config.thresholds || [])];\n thresholds[0] = {\n value: Number(e.target.value),\n color: 'error',\n };\n handleChange('thresholds', thresholds);\n }}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Yellow zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-warning-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.warning', 'Warning (Yellow)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[1]?.value ?? 66}\n onChange={(e) => {\n const thresholds = [...(config.thresholds || [])];\n thresholds[1] = {\n value: Number(e.target.value),\n color: 'warning',\n };\n handleChange('thresholds', thresholds);\n }}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Green zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-success-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.good', 'Good (Green)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[2]?.value ?? 100}\n onChange={(e) => {\n const thresholds = [...(config.thresholds || [])];\n thresholds[2] = {\n value: Number(e.target.value),\n color: 'success',\n };\n handleChange('thresholds', thresholds);\n }}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n </div>\n </div>\n\n {/* Show zones (for linear gauge) */}\n {config.variant === 'linear' && (\n <label className=\"flex items-center gap-3\">\n <input\n type=\"checkbox\"\n checked={config.showZones === true}\n onChange={(e) => handleChange('showZones', e.target.checked)}\n className=\"\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n \"\n />\n <span className=\"text-sm text-text-primary\">\n {t('bigconsole.widget.config.gauge.showZones', 'Show color zones in background')}\n </span>\n </label>\n )}\n </div>\n );\n});\n\nexport default GaugeConfig;\n"],"mappings":"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"}
1
+ {"version":3,"file":"GaugeConfig.js","names":[],"sources":["../../../../../src/bigconsole/components/widgets/gauge/GaugeConfig.tsx"],"sourcesContent":["/**\n * GaugeConfig Component\n *\n * Configuration panel for Gauge widgets.\n */\n\nimport { type FC, memo, useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { GaugeConfig as ConfigType, GaugeThreshold } from '../../../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface GaugeConfigProps {\n /** Current configuration */\n config: ConfigType;\n /** Callback when config changes */\n onChange: (config: ConfigType) => void;\n}\n\n/** Semantic fallbacks for bands a config has not defined yet. */\nconst DEFAULT_THRESHOLD_BANDS: readonly GaugeThreshold[] = [\n { value: 33, color: 'error' },\n { value: 66, color: 'warning' },\n { value: 100, color: 'success' },\n];\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const GaugeConfig: FC<GaugeConfigProps> = memo(function GaugeConfig({ config, onChange }) {\n const { t } = useI18n();\n const handleChange = useCallback(\n <K extends keyof ConfigType>(key: K, value: ConfigType[K]) => {\n onChange({ ...config, [key]: value });\n },\n [config, onChange]\n );\n\n /**\n * Update one threshold band's value without disturbing the rest of the entry.\n *\n * Writing a whole new `{value, color}` by index used to discard whatever\n * colour the band already carried — including the hex the backend widget\n * catalog seeds — so editing one band left a mixed hex/semantic array and\n * silently repainted that band. It also dropped the optional `label`.\n *\n * Writing by bare index into a shorter array would leave holes (`[ , , {…}]`),\n * which the widget then maps over as `undefined`; seed any missing lower\n * bands with their semantic default instead.\n */\n const handleThresholdValueChange = useCallback(\n (index: number, rawValue: string) => {\n const next: GaugeThreshold[] = [];\n for (let i = 0; i <= index; i++) {\n next[i] = config.thresholds?.[i] ?? DEFAULT_THRESHOLD_BANDS[i] ?? { value: 100, color: 'success' };\n }\n // Preserve everything except the edited value (colour, label, …).\n next[index] = { ...next[index], value: Number(rawValue) };\n // Keep any bands beyond the edited one untouched.\n for (let i = index + 1; i < (config.thresholds?.length ?? 0); i++) {\n next[i] = config.thresholds?.[i] ?? { value: 100, color: 'success' };\n }\n handleChange('thresholds', next);\n },\n [config.thresholds, handleChange]\n );\n\n return (\n <div className=\"min-w-0 space-y-form-gap\">\n {/* Variant */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.gaugeType', 'Gauge Type')}\n </label>\n <select\n value={config.variant || 'circular'}\n onChange={(e) => handleChange('variant', e.target.value as ConfigType['variant'])}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n >\n <option value=\"circular\">{t('bigconsole.widget.config.gauge.variant.circular', 'Circular')}</option>\n <option value=\"linear\">{t('bigconsole.widget.config.gauge.variant.linear', 'Linear')}</option>\n </select>\n </div>\n\n {/* Min/Max Range */}\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.minimum', 'Minimum')}\n </label>\n <input\n type=\"number\"\n value={config.min ?? 0}\n onChange={(e) => handleChange('min', Number(e.target.value))}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.maximum', 'Maximum')}\n </label>\n <input\n type=\"number\"\n value={config.max ?? 100}\n onChange={(e) => handleChange('max', Number(e.target.value))}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n </div>\n\n {/* Unit */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.unitLabel', 'Unit Label')}\n </label>\n <input\n type=\"text\"\n value={config.unit || ''}\n onChange={(e) => handleChange('unit', e.target.value)}\n placeholder={t('bigconsole.widget.config.gauge.unitPlaceholder', 'e.g., %, ms, users')}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Format */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {t('bigconsole.widget.config.gauge.valueFormat', 'Value Format')}\n </label>\n <select\n value={config.format || 'number'}\n onChange={(e) => handleChange('format', e.target.value as ConfigType['format'])}\n className=\"\n w-full px-3 py-2\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n >\n <option value=\"number\">{t('bigconsole.widget.config.gauge.format.number', 'Number')}</option>\n <option value=\"percentage\">{t('bigconsole.widget.config.gauge.format.percentage', 'Percentage')}</option>\n <option value=\"currency\">{t('bigconsole.widget.config.gauge.format.currency', 'Currency')}</option>\n </select>\n </div>\n\n {/* Thresholds Section */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-2\">\n {t('bigconsole.widget.config.gauge.colorThresholds', 'Color Thresholds')}\n </label>\n <p className=\"text-xs text-text-secondary mb-3\">\n {t(\n 'bigconsole.widget.config.gauge.colorThresholdsHelp',\n 'Define color zones based on value ranges. Values up to each threshold will use that color.'\n )}\n </p>\n\n <div className=\"space-y-2\">\n {/* Red zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-error-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.danger', 'Danger (Red)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[0]?.value ?? 33}\n onChange={(e) => handleThresholdValueChange(0, e.target.value)}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Yellow zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-warning-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.warning', 'Warning (Yellow)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[1]?.value ?? 66}\n onChange={(e) => handleThresholdValueChange(1, e.target.value)}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n\n {/* Green zone */}\n <div className=\"flex items-center gap-2\">\n <div className=\"w-4 h-4 rounded bg-status-success-bg\" />\n <span className=\"text-sm text-text-primary flex-1\">\n {t('bigconsole.widget.config.gauge.threshold.good', 'Good (Green)')}\n </span>\n <input\n type=\"number\"\n value={config.thresholds?.[2]?.value ?? 100}\n onChange={(e) => handleThresholdValueChange(2, e.target.value)}\n className=\"\n w-20 px-2 py-1\n text-sm text-text-primary\n bg-bg-surface\n border border-border-default\n rounded-md\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n </div>\n </div>\n </div>\n\n {/* Show zones (for linear gauge) */}\n <div\n role=\"group\"\n aria-label=\"Display options\"\n className=\"space-y-3 border-t border-[var(--color-border-subtle)] pt-form-gap\"\n >\n {/* Toggles are a different KIND of control from the field stack above, so they\n get their own labelled group instead of being visually identical to it\n (BOFF-5636). */}\n <p className=\"text-xs font-bold uppercase tracking-wider text-text-secondary\">Display options</p>\n {config.variant === 'linear' && (\n <label className=\"flex items-center gap-3\">\n <input\n type=\"checkbox\"\n checked={config.showZones === true}\n onChange={(e) => handleChange('showZones', e.target.checked)}\n className=\"\n w-4 h-4\n text-action-primary-bg\n bg-bg-surface\n border-border-default\n rounded\n focus:ring-action-primary-bg\n \"\n />\n <span className=\"text-sm text-text-primary\">\n {t('bigconsole.widget.config.gauge.showZones', 'Show color zones in background')}\n </span>\n </label>\n )}\n {config.variant !== 'linear' && (\n <p className=\"text-xs text-text-secondary\">\n {t('bigconsole.widget.config.gauge.noCircularOptions', 'No display options for the circular gauge.')}\n </p>\n )}\n </div>\n </div>\n );\n});\n\nexport default GaugeConfig;\n"],"mappings":"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"}