@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 +1 @@
1
- {"version":3,"file":"WidgetDemoPage.js","names":[],"sources":["../../../src/bigconsole/pages/WidgetDemoPage.tsx"],"sourcesContent":["/**\n * WidgetDemoPage\n *\n * Demonstrates all 18 widget types.\n * Widgets show empty states when no real data is available.\n * Connect a DataSink + Parser pipeline for real data processing.\n */\n\nimport { type FC, useState, useMemo } from 'react';\nimport { IllustratedEmptyState, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { Widget } from '../types';\nimport { WidgetWrapper } from '../components/widgets';\n\n// Widget type string literals\ntype WidgetType =\n | 'metric_card'\n | 'kpi_card_comparison'\n | 'chart'\n | 'funnel_chart'\n | 'table'\n | 'pivot_table'\n | 'gauge'\n | 'progress'\n | 'list'\n | 'form'\n | 'text'\n | 'iframe'\n | 'map'\n | 'heatmap'\n | 'calendar'\n | 'kanban'\n | 'timeline'\n | 'custom';\n\n// ============================================================================\n// Widget Types for Demo\n// ============================================================================\n\nconst WIDGET_TYPES: {\n type: WidgetType;\n title: string;\n titleKey: string;\n description: string;\n descriptionKey: string;\n}[] = [\n {\n type: 'metric_card',\n title: 'Metric Card',\n titleKey: 'bigconsole.widgetDemo.type.metricCard.title',\n description: 'Single metric with trend and sparkline',\n descriptionKey: 'bigconsole.widgetDemo.type.metricCard.description',\n },\n {\n type: 'kpi_card_comparison',\n title: 'KPI Card Comparison',\n titleKey: 'bigconsole.widgetDemo.type.kpiCardComparison.title',\n description: 'Multiple KPIs with comparisons',\n descriptionKey: 'bigconsole.widgetDemo.type.kpiCardComparison.description',\n },\n {\n type: 'chart',\n title: 'Chart (Line/Bar/Area)',\n titleKey: 'bigconsole.widgetDemo.type.chart.title',\n description: 'Time-series data visualization',\n descriptionKey: 'bigconsole.widgetDemo.type.chart.description',\n },\n {\n type: 'funnel_chart',\n title: 'Funnel Chart',\n titleKey: 'bigconsole.widgetDemo.type.funnelChart.title',\n description: 'Conversion funnel with stages',\n descriptionKey: 'bigconsole.widgetDemo.type.funnelChart.description',\n },\n {\n type: 'table',\n title: 'Table',\n titleKey: 'bigconsole.widgetDemo.type.table.title',\n description: 'Data table with sort/filter/pagination',\n descriptionKey: 'bigconsole.widgetDemo.type.table.description',\n },\n {\n type: 'pivot_table',\n title: 'Pivot Table',\n titleKey: 'bigconsole.widgetDemo.type.pivotTable.title',\n description: 'Multi-dimensional data analysis',\n descriptionKey: 'bigconsole.widgetDemo.type.pivotTable.description',\n },\n {\n type: 'gauge',\n title: 'Gauge',\n titleKey: 'bigconsole.widgetDemo.type.gauge.title',\n description: 'Circular/linear gauge with thresholds',\n descriptionKey: 'bigconsole.widgetDemo.type.gauge.description',\n },\n {\n type: 'progress',\n title: 'Progress',\n titleKey: 'bigconsole.widgetDemo.type.progress.title',\n description: 'Progress bar with milestones',\n descriptionKey: 'bigconsole.widgetDemo.type.progress.description',\n },\n {\n type: 'list',\n title: 'List',\n titleKey: 'bigconsole.widgetDemo.type.list.title',\n description: 'Scrollable list with items',\n descriptionKey: 'bigconsole.widgetDemo.type.list.description',\n },\n {\n type: 'form',\n title: 'Form (Adaptive Card)',\n titleKey: 'bigconsole.widgetDemo.type.form.title',\n description: 'Interactive form with inputs',\n descriptionKey: 'bigconsole.widgetDemo.type.form.description',\n },\n {\n type: 'text',\n title: 'Text (Markdown)',\n titleKey: 'bigconsole.widgetDemo.type.text.title',\n description: 'Rich text with markdown support',\n descriptionKey: 'bigconsole.widgetDemo.type.text.description',\n },\n {\n type: 'iframe',\n title: 'iFrame',\n titleKey: 'bigconsole.widgetDemo.type.iframe.title',\n description: 'Embedded external content',\n descriptionKey: 'bigconsole.widgetDemo.type.iframe.description',\n },\n {\n type: 'map',\n title: 'Map',\n titleKey: 'bigconsole.widgetDemo.type.map.title',\n description: 'Geographic data with markers',\n descriptionKey: 'bigconsole.widgetDemo.type.map.description',\n },\n {\n type: 'heatmap',\n title: 'Heatmap',\n titleKey: 'bigconsole.widgetDemo.type.heatmap.title',\n description: 'Grid visualization with color intensity',\n descriptionKey: 'bigconsole.widgetDemo.type.heatmap.description',\n },\n {\n type: 'calendar',\n title: 'Calendar',\n titleKey: 'bigconsole.widgetDemo.type.calendar.title',\n description: 'Event calendar view',\n descriptionKey: 'bigconsole.widgetDemo.type.calendar.description',\n },\n {\n type: 'kanban',\n title: 'Kanban',\n titleKey: 'bigconsole.widgetDemo.type.kanban.title',\n description: 'Task board with columns',\n descriptionKey: 'bigconsole.widgetDemo.type.kanban.description',\n },\n {\n type: 'timeline',\n title: 'Timeline (Gantt)',\n titleKey: 'bigconsole.widgetDemo.type.timeline.title',\n description: 'Project timeline with tasks',\n descriptionKey: 'bigconsole.widgetDemo.type.timeline.description',\n },\n {\n type: 'custom',\n title: 'Custom',\n titleKey: 'bigconsole.widgetDemo.type.custom.title',\n description: 'User-defined widget rendering',\n descriptionKey: 'bigconsole.widgetDemo.type.custom.description',\n },\n];\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WidgetDemoPage: FC = () => {\n const { t } = useI18n();\n const [filter, setFilter] = useState('');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n\n // Generate demo widgets from all types\n const demoWidgets = useMemo(() => {\n const filtered = filter\n ? WIDGET_TYPES.filter(\n (w) => w.type.includes(filter.toLowerCase()) || w.title.toLowerCase().includes(filter.toLowerCase())\n )\n : WIDGET_TYPES;\n\n return filtered.map((widgetDef, index): Widget => ({\n id: `demo-${widgetDef.type}`,\n pageId: 'demo-page',\n dashboardId: 'demo-dashboard',\n type: widgetDef.type,\n title: t(widgetDef.titleKey, widgetDef.title),\n // No data source - widgets show empty state until connected to DataSink\n config: {},\n position: {\n x: (index % 3) * 4,\n y: Math.floor(index / 3) * 4,\n width: 4,\n height: 4,\n },\n positionX: (index % 3) * 4,\n positionY: Math.floor(index / 3) * 4,\n positionWidth: 4,\n positionHeight: 4,\n refreshInterval: undefined,\n lastRefreshedAt: undefined,\n metadata: { description: t(widgetDef.descriptionKey, widgetDef.description) },\n context: {},\n translations: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }));\n }, [filter, t]);\n\n return (\n <div className=\"h-full flex flex-col bg-bg-canvas\">\n {/* Header */}\n <div className=\"flex-shrink-0 border-b border-border-default bg-bg-surface px-6 py-4\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-xl font-semibold text-text-primary\">\n {t('bigconsole.widgetDemo.header.title', 'Widget Demo')}\n </h1>\n <p className=\"text-sm text-text-secondary mt-1\">\n {t('bigconsole.widgetDemo.header.subtitle', 'All 18 widget types - connect a DataSink for real data')}\n </p>\n </div>\n <div className=\"flex items-center gap-4\">\n {/* Search Filter */}\n <div className=\"relative\">\n <input\n type=\"text\"\n placeholder={t('bigconsole.widgetDemo.filter.placeholder', 'Filter widgets...')}\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className=\"\n w-64 px-3 py-2 pl-[3.25rem]\n text-sm\n bg-bg-sunken\n border border-border-default\n rounded-lg\n text-text-primary\n placeholder:text-text-tertiary\n focus:outline-none focus:ring-2 focus:ring-action-primary-bg\n \"\n />\n <svg\n className=\"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-text-secondary\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n\n {/* View Toggle */}\n <div className=\"flex items-center bg-bg-sunken rounded-lg p-1\">\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={`\n px-3 py-1.5 text-sm font-medium rounded\n transition-colors\n ${\n viewMode === 'grid'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n }\n `}\n >\n {t('bigconsole.widgetDemo.viewToggle.grid', 'Grid')}\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('list')}\n className={`\n px-3 py-1.5 text-sm font-medium rounded\n transition-colors\n ${\n viewMode === 'list'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n }\n `}\n >\n {t('bigconsole.widgetDemo.viewToggle.list', 'List')}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n {/* Widget Grid */}\n <div className=\"flex-1 overflow-auto p-6\">\n <PagePurpose className=\"mb-[var(--space-sectionGap)]\">\n {t(\n 'bigconsole.widgetDemo.pagePurpose',\n 'This gallery previews every widget type BigConsole can render on a dashboard — metrics, charts, tables, maps, kanban boards and more. Use it to see what each widget looks like and pick the right one before wiring it to a real DataSink in the dashboard builder.'\n )}\n </PagePurpose>\n\n <div\n className={\n viewMode === 'grid' ? 'grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6' : 'flex flex-col gap-4'\n }\n >\n {demoWidgets.map((widget) => {\n const widgetDef = WIDGET_TYPES.find((w) => w.type === widget.type);\n return (\n <div key={widget.id} className={viewMode === 'grid' ? 'h-80' : 'h-64'}>\n <div className=\"h-full flex flex-col\">\n {/* Widget Description */}\n <div className=\"flex-shrink-0 mb-2\">\n <span className=\"text-xs text-text-tertiary\">\n {t('bigconsole.widgetDemo.widgetCard.typeLabel', 'Type:')}{' '}\n <code className=\"font-mono text-action-primary-text\">{widget.type}</code>\n </span>\n {widgetDef && (\n <span className=\"text-xs text-text-tertiary ml-2\">\n - {t(widgetDef.descriptionKey, widgetDef.description)}\n </span>\n )}\n </div>\n {/* Widget */}\n <div className=\"flex-1 min-h-0\">\n <WidgetWrapper widget={widget} />\n </div>\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Empty State */}\n {demoWidgets.length === 0 && (\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={t('bigconsole.widgetDemo.emptyState.title', 'No widgets match your filter')}\n description={t(\n 'bigconsole.widgetDemo.emptyState.description',\n 'Try a different search term to preview a widget type.'\n )}\n />\n )}\n </div>\n\n {/* Footer Stats */}\n <div className=\"flex-shrink-0 border-t border-border-default bg-bg-surface px-6 py-3\">\n <div className=\"flex items-center justify-between text-sm text-text-secondary\">\n <span>\n {t('bigconsole.widgetDemo.footer.showing', 'Showing {{shown}} of {{total}} widget types', {\n shown: demoWidgets.length,\n total: WIDGET_TYPES.length,\n })}\n </span>\n <span>\n {t('bigconsole.widgetDemo.footer.hint', 'Widgets show empty state until connected to DataSink + Parser')}\n </span>\n </div>\n </div>\n </div>\n );\n};\n\nexport default WidgetDemoPage;\n"],"mappings":";;;;;;;AAuCA,IAAM,IAMA;CACJ;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EACjB;CACF,EAMY,UAA2B;CACtC,IAAM,EAAE,SAAM,GAAS,E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"}
1
+ {"version":3,"file":"WidgetDemoPage.js","names":[],"sources":["../../../src/bigconsole/pages/WidgetDemoPage.tsx"],"sourcesContent":["/**\n * WidgetDemoPage\n *\n * Demonstrates all 18 widget types.\n * Widgets show empty states when no real data is available.\n * Connect a DataSink + Parser pipeline for real data processing.\n *\n * Section emphasis (BOFF-5636): the gallery is the one block this route exists\n * for, so it carries `primary`. The page-identity strip and the footer stat line\n * are structural (`bare` / `muted`) and the categories inside the gallery are\n * `bare` sub-sections, which gives the eye a ladder — page → gallery → category\n * → card — instead of eighteen equal rectangles.\n */\n\nimport { type FC, useState, useMemo } from 'react';\nimport { IllustratedEmptyState, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { Widget, WidgetCategory } from '../types';\nimport { WidgetWrapper } from '../components/widgets';\nimport { WIDGET_CATEGORY_LABELS } from '../components/widgets/WidgetRegistry';\nimport { Section, SectionStack, sectionSurfaceClasses } from '../components/common';\n\n// Widget type string literals\ntype WidgetType =\n | 'metric_card'\n | 'kpi_card_comparison'\n | 'chart'\n | 'funnel_chart'\n | 'table'\n | 'pivot_table'\n | 'gauge'\n | 'progress'\n | 'list'\n | 'form'\n | 'text'\n | 'iframe'\n | 'map'\n | 'heatmap'\n | 'calendar'\n | 'kanban'\n | 'timeline'\n | 'custom';\n\n// ============================================================================\n// Widget Types for Demo\n// ============================================================================\n\ninterface DemoWidgetDef {\n type: WidgetType;\n title: string;\n /** i18n key for the widget title shown on the demo card. */\n titleKey: string;\n description: string;\n /** i18n key for the one-line description under the card header. */\n descriptionKey: string;\n /** Grouping used by the gallery headings — mirrors the registry categories. */\n category: WidgetCategory;\n}\n\nconst WIDGET_TYPES: DemoWidgetDef[] = [\n {\n type: 'metric_card',\n title: 'Metric Card',\n titleKey: 'bigconsole.widgetDemo.type.metricCard.title',\n description: 'Single metric with trend and sparkline',\n descriptionKey: 'bigconsole.widgetDemo.type.metricCard.description',\n category: 'KPI',\n },\n {\n type: 'kpi_card_comparison',\n title: 'KPI Card Comparison',\n titleKey: 'bigconsole.widgetDemo.type.kpiCardComparison.title',\n description: 'Multiple KPIs with comparisons',\n descriptionKey: 'bigconsole.widgetDemo.type.kpiCardComparison.description',\n category: 'KPI',\n },\n {\n type: 'gauge',\n title: 'Gauge',\n titleKey: 'bigconsole.widgetDemo.type.gauge.title',\n description: 'Circular/linear gauge with thresholds',\n descriptionKey: 'bigconsole.widgetDemo.type.gauge.description',\n category: 'KPI',\n },\n {\n type: 'progress',\n title: 'Progress',\n titleKey: 'bigconsole.widgetDemo.type.progress.title',\n description: 'Progress bar with milestones',\n descriptionKey: 'bigconsole.widgetDemo.type.progress.description',\n category: 'KPI',\n },\n {\n type: 'chart',\n title: 'Chart (Line/Bar/Area)',\n titleKey: 'bigconsole.widgetDemo.type.chart.title',\n description: 'Time-series data visualization',\n descriptionKey: 'bigconsole.widgetDemo.type.chart.description',\n category: 'Visualization',\n },\n {\n type: 'funnel_chart',\n title: 'Funnel Chart',\n titleKey: 'bigconsole.widgetDemo.type.funnelChart.title',\n description: 'Conversion funnel with stages',\n descriptionKey: 'bigconsole.widgetDemo.type.funnelChart.description',\n category: 'Visualization',\n },\n {\n type: 'heatmap',\n title: 'Heatmap',\n titleKey: 'bigconsole.widgetDemo.type.heatmap.title',\n description: 'Grid visualization with color intensity',\n descriptionKey: 'bigconsole.widgetDemo.type.heatmap.description',\n category: 'Visualization',\n },\n {\n type: 'map',\n title: 'Map',\n titleKey: 'bigconsole.widgetDemo.type.map.title',\n description: 'Geographic data with markers',\n descriptionKey: 'bigconsole.widgetDemo.type.map.description',\n category: 'Visualization',\n },\n {\n type: 'table',\n title: 'Table',\n titleKey: 'bigconsole.widgetDemo.type.table.title',\n description: 'Data table with sort/filter/pagination',\n descriptionKey: 'bigconsole.widgetDemo.type.table.description',\n category: 'Data',\n },\n {\n type: 'pivot_table',\n title: 'Pivot Table',\n titleKey: 'bigconsole.widgetDemo.type.pivotTable.title',\n description: 'Multi-dimensional data analysis',\n descriptionKey: 'bigconsole.widgetDemo.type.pivotTable.description',\n category: 'Data',\n },\n {\n type: 'list',\n title: 'List',\n titleKey: 'bigconsole.widgetDemo.type.list.title',\n description: 'Scrollable list with items',\n descriptionKey: 'bigconsole.widgetDemo.type.list.description',\n category: 'Data',\n },\n {\n type: 'form',\n title: 'Form (Adaptive Card)',\n titleKey: 'bigconsole.widgetDemo.type.form.title',\n description: 'Interactive form with inputs',\n descriptionKey: 'bigconsole.widgetDemo.type.form.description',\n category: 'Content',\n },\n {\n type: 'text',\n title: 'Text (Markdown)',\n titleKey: 'bigconsole.widgetDemo.type.text.title',\n description: 'Rich text with markdown support',\n descriptionKey: 'bigconsole.widgetDemo.type.text.description',\n category: 'Content',\n },\n {\n type: 'iframe',\n title: 'iFrame',\n titleKey: 'bigconsole.widgetDemo.type.iframe.title',\n description: 'Embedded external content',\n descriptionKey: 'bigconsole.widgetDemo.type.iframe.description',\n category: 'Content',\n },\n {\n type: 'calendar',\n title: 'Calendar',\n titleKey: 'bigconsole.widgetDemo.type.calendar.title',\n description: 'Event calendar view',\n descriptionKey: 'bigconsole.widgetDemo.type.calendar.description',\n category: 'Temporal',\n },\n {\n type: 'kanban',\n title: 'Kanban',\n titleKey: 'bigconsole.widgetDemo.type.kanban.title',\n description: 'Task board with columns',\n descriptionKey: 'bigconsole.widgetDemo.type.kanban.description',\n category: 'Temporal',\n },\n {\n type: 'timeline',\n title: 'Timeline (Gantt)',\n titleKey: 'bigconsole.widgetDemo.type.timeline.title',\n description: 'Project timeline with tasks',\n descriptionKey: 'bigconsole.widgetDemo.type.timeline.description',\n category: 'Temporal',\n },\n {\n type: 'custom',\n title: 'Custom',\n titleKey: 'bigconsole.widgetDemo.type.custom.title',\n description: 'User-defined widget rendering',\n descriptionKey: 'bigconsole.widgetDemo.type.custom.description',\n category: 'Custom',\n },\n];\n\n/** Order the gallery renders its groups in. */\nconst CATEGORY_ORDER: WidgetCategory[] = ['KPI', 'Visualization', 'Data', 'Content', 'Temporal', 'Custom'];\n\n/** One line per group, so a heading is never a bare word. */\nconst CATEGORY_BLURBS: Partial<Record<WidgetCategory, string>> = {\n KPI: 'Single-number widgets for a headline figure and how it is trending.',\n Visualization: 'Chart widgets for comparing series, stages and distributions.',\n Data: 'Row-and-column widgets for browsing records in detail.',\n Content: 'Widgets that carry prose, forms or an embedded page.',\n Temporal: 'Widgets organised by date, schedule or workflow stage.',\n Custom: 'Widgets whose body you define yourself.',\n};\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const WidgetDemoPage: FC = () => {\n const { t } = useI18n();\n const [filter, setFilter] = useState('');\n const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid');\n\n // Generate demo widgets from all types\n const demoWidgets = useMemo(() => {\n const filtered = filter\n ? WIDGET_TYPES.filter(\n (w) => w.type.includes(filter.toLowerCase()) || w.title.toLowerCase().includes(filter.toLowerCase())\n )\n : WIDGET_TYPES;\n\n return filtered.map((widgetDef, index): Widget => ({\n id: `demo-${widgetDef.type}`,\n pageId: 'demo-page',\n dashboardId: 'demo-dashboard',\n type: widgetDef.type,\n title: t(widgetDef.titleKey, widgetDef.title),\n // No data source - widgets show empty state until connected to DataSink\n config: {},\n position: {\n x: (index % 3) * 4,\n y: Math.floor(index / 3) * 4,\n width: 4,\n height: 4,\n },\n positionX: (index % 3) * 4,\n positionY: Math.floor(index / 3) * 4,\n positionWidth: 4,\n positionHeight: 4,\n refreshInterval: undefined,\n lastRefreshedAt: undefined,\n metadata: { description: t(widgetDef.descriptionKey, widgetDef.description) },\n context: {},\n translations: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n }));\n }, [filter, t]);\n\n // Group the visible widgets so the gallery reads as labelled families rather\n // than a flat wall of same-weight cards.\n const groups = useMemo(() => {\n const byCategory = new Map<WidgetCategory, Widget[]>();\n for (const widget of demoWidgets) {\n const def = WIDGET_TYPES.find((w) => w.type === widget.type);\n if (!def) continue;\n const bucket = byCategory.get(def.category);\n if (bucket) bucket.push(widget);\n else byCategory.set(def.category, [widget]);\n }\n return CATEGORY_ORDER.filter((category) => (byCategory.get(category)?.length ?? 0) > 0).map((category) => ({\n category,\n label: WIDGET_CATEGORY_LABELS[category],\n blurb: CATEGORY_BLURBS[category],\n widgets: byCategory.get(category) ?? [],\n }));\n }, [demoWidgets]);\n\n const gridClassName =\n viewMode === 'grid' ? 'grid grid-cols-1 gap-form-gap sm:grid-cols-2 xl:grid-cols-3' : 'flex flex-col gap-form-gap';\n\n return (\n <div className=\"flex h-full min-w-0 flex-col bg-bg-canvas\">\n {/*\n Page identity + controls — a `bare` structural strip. It supplies the\n page `h1` itself, so it uses the emphasis recipe directly rather than\n `<Section title=…>`, which would render a second heading.\n */}\n <section\n aria-label=\"Widget demo header\"\n className={`${sectionSurfaceClasses('bare', 'neutral', 'none')} flex-shrink-0 border-b border-[var(--color-border-subtle)] bg-bg-surface px-4 py-3 sm:px-6 sm:py-4`}\n >\n <div className=\"flex flex-col gap-control-gap lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold text-text-primary\">\n {t('bigconsole.widgetDemo.header.title', 'Widget Demo')}\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t('bigconsole.widgetDemo.header.subtitle', 'All 18 widget types - connect a DataSink for real data')}\n </p>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-control-gap\">\n {/* Search Filter */}\n <div className=\"relative min-w-0 flex-1 sm:flex-none\">\n <label htmlFor=\"widget-demo-filter\" className=\"sr-only\">\n Filter widget types\n </label>\n <input\n id=\"widget-demo-filter\"\n type=\"text\"\n placeholder={t('bigconsole.widgetDemo.filter.placeholder', 'Filter widgets...')}\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n className=\"h-control-md w-full min-w-0 rounded-input border border-[var(--color-border-subtle)] bg-bg-sunken py-2 pl-[3.25rem] pr-3 text-sm text-text-primary placeholder:text-text-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface sm:w-64\"\n />\n <svg\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute left-3 top-1/2 h-icon-sm w-icon-sm -translate-y-1/2 text-text-secondary\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"\n />\n </svg>\n </div>\n\n {/* View Toggle */}\n <div\n className=\"flex shrink-0 items-center gap-1 rounded-button bg-bg-sunken p-1\"\n role=\"group\"\n aria-label=\"Gallery layout\"\n >\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n aria-pressed={viewMode === 'grid'}\n className={`min-h-control-md rounded-button px-3 text-sm font-medium motion-safe:transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface ${\n viewMode === 'grid'\n ? 'bg-bg-surface text-text-primary shadow-[var(--shadow-elevation-1)]'\n : 'text-text-secondary hover:text-text-primary'\n }`}\n >\n {t('bigconsole.widgetDemo.viewToggle.grid', 'Grid')}\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('list')}\n aria-pressed={viewMode === 'list'}\n className={`min-h-control-md rounded-button px-3 text-sm font-medium motion-safe:transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface ${\n viewMode === 'list'\n ? 'bg-bg-surface text-text-primary shadow-[var(--shadow-elevation-1)]'\n : 'text-text-secondary hover:text-text-primary'\n }`}\n >\n {t('bigconsole.widgetDemo.viewToggle.list', 'List')}\n </button>\n </div>\n </div>\n </div>\n </section>\n\n {/* Scroll region */}\n <div className=\"min-w-0 flex-1 overflow-y-auto overflow-x-hidden p-4 sm:p-6\">\n <SectionStack>\n <section\n aria-label=\"What this gallery is for\"\n className={sectionSurfaceClasses('muted', 'neutral', 'compact')}\n >\n <PagePurpose>\n {t(\n 'bigconsole.widgetDemo.pagePurpose',\n 'This gallery previews every widget type BigConsole can render on a dashboard — metrics, charts, tables, maps, kanban boards and more. Use it to see what each widget looks like and pick the right one before wiring it to a real DataSink in the dashboard builder.'\n )}\n </PagePurpose>\n </section>\n\n {groups.length > 0 && (\n <Section\n emphasis=\"primary\"\n headingLevel={2}\n title=\"Widget gallery\"\n description=\"Every widget renders its unconnected state here — the card chrome, header and empty copy are exactly what a dashboard will show before a DataSink is bound.\"\n meta={\n <span className=\"rounded-pill bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {demoWidgets.length} of {WIDGET_TYPES.length}\n </span>\n }\n >\n <div className=\"flex flex-col gap-section-gap\">\n {groups.map((group) => (\n <Section\n key={group.category}\n emphasis=\"bare\"\n padding=\"none\"\n headingLevel={3}\n title={group.label}\n description={group.blurb}\n meta={\n <span className=\"text-xs font-medium text-text-muted\">\n {group.widgets.length} {group.widgets.length === 1 ? 'type' : 'types'}\n </span>\n }\n >\n <div className={gridClassName}>\n {group.widgets.map((widget) => {\n const widgetDef = WIDGET_TYPES.find((w) => w.type === widget.type);\n return (\n <figure\n key={widget.id}\n className={`m-0 flex min-w-0 flex-col ${viewMode === 'grid' ? 'h-80' : 'h-64'}`}\n >\n <figcaption className=\"mb-2 flex flex-shrink-0 flex-wrap items-baseline gap-x-2 gap-y-0.5 text-xs text-text-secondary\">\n <span>\n {t('bigconsole.widgetDemo.widgetCard.typeLabel', 'Type:')}{' '}\n <code className=\"font-mono text-text-link\">{widget.type}</code>\n </span>\n {widgetDef && (\n <span className=\"text-text-muted\">\n {t(widgetDef.descriptionKey, widgetDef.description)}\n </span>\n )}\n </figcaption>\n <div className=\"min-h-0 min-w-0 flex-1\">\n <WidgetWrapper widget={widget} />\n </div>\n </figure>\n );\n })}\n </div>\n </Section>\n ))}\n </div>\n </Section>\n )}\n\n {/* Empty State */}\n {demoWidgets.length === 0 && (\n <Section\n emphasis=\"standard\"\n tone=\"info\"\n title={t('bigconsole.widgetDemo.emptyState.title', 'No widgets match your filter')}\n headingLevel={2}\n data-testid=\"widget-demo-empty\"\n >\n {/*\n The section heading is the empty state's title, so the inner\n state carries the next step instead of repeating it verbatim.\n */}\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title={t(\n 'bigconsole.widgetDemo.emptyState.description',\n 'Try a different search term to preview a widget type.'\n )}\n description=\"The filter matches a widget's name and its one-line description.\"\n />\n </Section>\n )}\n </SectionStack>\n </div>\n\n {/* Footer stats — supporting detail, deliberately lighter than the header strip */}\n <section\n aria-label=\"Gallery summary\"\n className={`${sectionSurfaceClasses('bare', 'neutral', 'none')} flex-shrink-0 border-t border-[var(--color-border-subtle)] bg-bg-sunken px-4 py-2 sm:px-6`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-1 text-xs text-text-secondary\">\n <span>\n {t('bigconsole.widgetDemo.footer.showing', 'Showing {{shown}} of {{total}} widget types', {\n shown: demoWidgets.length,\n total: WIDGET_TYPES.length,\n })}\n </span>\n <span className=\"text-text-muted\">\n {t('bigconsole.widgetDemo.footer.hint', 'Widgets show empty state until connected to DataSink + Parser')}\n </span>\n </div>\n </section>\n </div>\n );\n};\n\nexport default WidgetDemoPage;\n"],"mappings":";;;;;;;;;;;AA2DA,IAAM,IAAgC;CACpC;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACD;EACE,MAAM;EACN,OAAO;EACP,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,UAAU;EACX;CACF,EAGK,IAAmC;CAAC;CAAO;CAAiB;CAAQ;CAAW;CAAY;CAAS,EAGpG,IAA2D;CAC/D,KAAK;CACL,eAAe;CACf,MAAM;CACN,SAAS;CACT,UAAU;CACV,QAAQ;CACT,EAMY,UAA2B;CACtC,IAAM,EAAE,SAAM,GAAS,EACjB,CAAC,GAAQ,KAAa,EAAS,GAAG,EAClC,CAAC,GAAU,KAAe,EAA0B,OAAO,EAG3D,IAAc,SACD,IACb,EAAa,QACV,MAAM,EAAE,KAAK,SAAS,EAAO,aAAa,CAAC,IAAI,EAAE,MAAM,aAAa,CAAC,SAAS,EAAO,aAAa,CAAC,CACrG,GACD,GAEY,KAAK,GAAW,OAAmB;EACjD,IAAI,QAAQ,EAAU;EACtB,QAAQ;EACR,aAAa;EACb,MAAM,EAAU;EAChB,OAAO,EAAE,EAAU,UAAU,EAAU,MAAM;EAE7C,QAAQ,EAAE;EACV,UAAU;GACR,GAAI,IAAQ,IAAK;GACjB,GAAG,KAAK,MAAM,IAAQ,EAAE,GAAG;GAC3B,OAAO;GACP,QAAQ;GACT;EACD,WAAY,IAAQ,IAAK;EACzB,WAAW,KAAK,MAAM,IAAQ,EAAE,GAAG;EACnC,eAAe;EACf,gBAAgB;EAChB,iBAAiB,KAAA;EACjB,iBAAiB,KAAA;EACjB,UAAU,EAAE,aAAa,EAAE,EAAU,gBAAgB,EAAU,YAAY,EAAE;EAC7E,SAAS,EAAE;EACX,cAAc,EAAE;EAChB,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC,4BAAW,IAAI,MAAM,EAAC,aAAa;EACpC,EAAE,EACF,CAAC,GAAQ,EAAE,CAAC,EAIT,IAAS,QAAc;EAC3B,IAAM,oBAAa,IAAI,KAA+B;AACtD,OAAK,IAAM,KAAU,GAAa;GAChC,IAAM,IAAM,EAAa,MAAM,MAAM,EAAE,SAAS,EAAO,KAAK;AAC5D,OAAI,CAAC,EAAK;GACV,IAAM,IAAS,EAAW,IAAI,EAAI,SAAS;AAC3C,GAAI,IAAQ,EAAO,KAAK,EAAO,GAC1B,EAAW,IAAI,EAAI,UAAU,CAAC,EAAO,CAAC;;AAE7C,SAAO,EAAe,QAAQ,OAAc,EAAW,IAAI,EAAS,EAAE,UAAU,KAAK,EAAE,CAAC,KAAK,OAAc;GACzG;GACA,OAAO,EAAuB;GAC9B,OAAO,EAAgB;GACvB,SAAS,EAAW,IAAI,EAAS,IAAI,EAAE;GACxC,EAAE;IACF,CAAC,EAAY,CAAC,EAEX,IACJ,MAAa,SAAS,gEAAgE;AAExF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GAME,kBAAC,WAAD;IACE,cAAW;IACX,WAAW,GAAG,EAAsB,QAAQ,WAAW,OAAO,CAAC;cAE/D,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,sCAAsC,cAAc;OACpD,CAAA,EACL,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,yCAAyC,yDAAyD;OACnG,CAAA,CACA;SAEN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CAEE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,SAAD;SAAO,SAAQ;SAAqB,WAAU;mBAAU;SAEhD,CAAA;QACR,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,aAAa,EAAE,4CAA4C,oBAAoB;SAC/E,OAAO;SACP,WAAW,MAAM,EAAU,EAAE,OAAO,MAAM;SAC1C,WAAU;SACV,CAAA;QACF,kBAAC,OAAD;SACE,eAAY;SACZ,WAAU;SACV,MAAK;SACL,QAAO;SACP,SAAQ;mBAER,kBAAC,QAAD;UACE,eAAc;UACd,gBAAe;UACf,aAAa;UACb,GAAE;UACF,CAAA;SACE,CAAA;QACF;UAGN,kBAAC,OAAD;OACE,WAAU;OACV,MAAK;OACL,cAAW;iBAHb,CAKE,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAY,OAAO;QAClC,gBAAc,MAAa;QAC3B,WAAW,mOACT,MAAa,SACT,uEACA;kBAGL,EAAE,yCAAyC,OAAO;QAC5C,CAAA,EACT,kBAAC,UAAD;QACE,MAAK;QACL,eAAe,EAAY,OAAO;QAClC,gBAAc,MAAa;QAC3B,WAAW,mOACT,MAAa,SACT,uEACA;kBAGL,EAAE,yCAAyC,OAAO;QAC5C,CAAA,CACL;SACF;QACF;;IACE,CAAA;GAGV,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAA,UAAA;KACE,kBAAC,WAAD;MACE,cAAW;MACX,WAAW,EAAsB,SAAS,WAAW,UAAU;gBAE/D,kBAAC,GAAD,EAAA,UACG,EACC,qCACA,uQACD,EACW,CAAA;MACN,CAAA;KAET,EAAO,SAAS,KACf,kBAAC,GAAD;MACE,UAAS;MACT,cAAc;MACd,OAAM;MACN,aAAY;MACZ,MACE,kBAAC,QAAD;OAAM,WAAU;iBAAhB;QACG,EAAY;QAAO;QAAK,EAAa;QACjC;;gBAGT,kBAAC,OAAD;OAAK,WAAU;iBACZ,EAAO,KAAK,MACX,kBAAC,GAAD;QAEE,UAAS;QACT,SAAQ;QACR,cAAc;QACd,OAAO,EAAM;QACb,aAAa,EAAM;QACnB,MACE,kBAAC,QAAD;SAAM,WAAU;mBAAhB;UACG,EAAM,QAAQ;UAAO;UAAE,EAAM,QAAQ,WAAW,IAAI,SAAS;UACzD;;kBAGT,kBAAC,OAAD;SAAK,WAAW;mBACb,EAAM,QAAQ,KAAK,MAAW;UAC7B,IAAM,IAAY,EAAa,MAAM,MAAM,EAAE,SAAS,EAAO,KAAK;AAClE,iBACE,kBAAC,UAAD;WAEE,WAAW,6BAA6B,MAAa,SAAS,SAAS;qBAFzE,CAIE,kBAAC,cAAD;YAAY,WAAU;sBAAtB,CACE,kBAAC,QAAD,EAAA,UAAA;aACG,EAAE,8CAA8C,QAAQ;aAAE;aAC3D,kBAAC,QAAD;cAAM,WAAU;wBAA4B,EAAO;cAAY,CAAA;aAC1D,EAAA,CAAA,EACN,KACC,kBAAC,QAAD;aAAM,WAAU;uBACb,EAAE,EAAU,gBAAgB,EAAU,YAAY;aAC9C,CAAA,CAEE;eACb,kBAAC,OAAD;YAAK,WAAU;sBACb,kBAAC,GAAD,EAAuB,WAAU,CAAA;YAC7B,CAAA,CACC;aAjBF,EAAO,GAiBL;WAEX;SACE,CAAA;QACE,EAtCH,EAAM,SAsCH,CACV;OACE,CAAA;MACE,CAAA;KAIX,EAAY,WAAW,KACtB,kBAAC,GAAD;MACE,UAAS;MACT,MAAK;MACL,OAAO,EAAE,0CAA0C,+BAA+B;MAClF,cAAc;MACd,eAAY;gBAMZ,kBAAC,GAAD;OACE,cAAa;OACb,OAAO,EACL,gDACA,wDACD;OACD,aAAY;OACZ,CAAA;MACM,CAAA;KAEC,EAAA,CAAA;IACX,CAAA;GAGN,kBAAC,WAAD;IACE,cAAW;IACX,WAAW,GAAG,EAAsB,QAAQ,WAAW,OAAO,CAAC;cAE/D,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD,EAAA,UACG,EAAE,wCAAwC,+CAA+C;MACxF,OAAO,EAAY;MACnB,OAAO,EAAa;MACrB,CAAC,EACG,CAAA,EACP,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,qCAAqC,gEAAgE;MACnG,CAAA,CACH;;IACE,CAAA;GACN"}