@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,14 +1,16 @@
1
1
  import { useAppNavigate as e } from "../contexts/NavigationContext.js";
2
2
  import "../contexts/index.js";
3
- import { memo as t, useCallback as n } from "react";
4
- import { ArrowRight as r, Blocks as i, FileCode2 as a, GitBranch as o, LayoutDashboard as s, Loader2 as c } from "lucide-react";
5
- import { gql as l } from "@apollo/client";
6
- import { useQuery as u } from "@apollo/client/react";
7
- import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
- import { AuroraBackground as f, Button as p, GlassCard as m, GradientText as h, IllustratedEmptyState as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
9
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
3
+ import { Section as t, SectionStack as n } from "../components/common/Section.js";
4
+ import "../components/common/index.js";
5
+ import { memo as r, useCallback as i } from "react";
6
+ import { ArrowRight as a, Blocks as o, FileCode2 as s, GitBranch as c, LayoutDashboard as l, Loader2 as u } from "lucide-react";
7
+ import { gql as d } from "@apollo/client";
8
+ import { useQuery as f } from "@apollo/client/react";
9
+ import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { AuroraBackground as m, Button as h, GlassCard as g, GradientText as _, IllustratedEmptyState as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
11
+ import { jsx as b, jsxs as x } from "react/jsx-runtime";
10
12
  //#region src/bigconsole/pages/HomePage.tsx
11
- var b = "default", x = l`
13
+ var S = "default", C = d`
12
14
  query HomepageStats($globalConsoleId: ID!) {
13
15
  listDashboards(first: 0) {
14
16
  totalCount
@@ -23,7 +25,7 @@ var b = "default", x = l`
23
25
  totalCount
24
26
  }
25
27
  }
26
- `, S = l`
28
+ `, w = d`
27
29
  query RecentDashboards {
28
30
  listDashboards(first: 5, sortBy: UPDATED_AT, sortOrder: DESC) {
29
31
  edges {
@@ -36,141 +38,144 @@ var b = "default", x = l`
36
38
  }
37
39
  }
38
40
  }
39
- `, C = t(function({ icon: e, label: t, count: n, loading: r, path: i, onNavigate: a, hero: o = !1 }) {
40
- return /* @__PURE__ */ v(m, {
41
+ `, T = r(function({ icon: e, label: t, count: n, loading: r, path: i, onNavigate: a, hero: o = !1 }) {
42
+ return /* @__PURE__ */ b(g, {
41
43
  treatment: o ? "glass" : "metric",
42
44
  glow: o,
43
- className: "border-border-seam p-0",
44
- children: /* @__PURE__ */ y("button", {
45
+ className: "border-[var(--color-border-seam)] p-0",
46
+ children: /* @__PURE__ */ x("button", {
45
47
  type: "button",
46
48
  onClick: () => a(i),
47
49
  className: "flex w-full flex-col gap-2 rounded-card p-[var(--space-cardPadding)] text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
48
- children: [/* @__PURE__ */ y("div", {
50
+ children: [/* @__PURE__ */ x("div", {
49
51
  className: "flex items-center gap-2",
50
- children: [/* @__PURE__ */ v("div", {
52
+ children: [/* @__PURE__ */ b("div", {
51
53
  style: { color: "var(--color-action-primary-bg)" },
52
54
  children: e
53
- }), /* @__PURE__ */ v("span", {
55
+ }), /* @__PURE__ */ b("span", {
54
56
  style: {
55
57
  fontSize: "var(--font-size-body-sm)",
56
58
  color: "var(--color-text-secondary)"
57
59
  },
58
60
  children: t
59
61
  })]
60
- }), /* @__PURE__ */ v("div", {
62
+ }), /* @__PURE__ */ b("div", {
61
63
  className: "tabular-nums",
62
64
  style: {
63
65
  fontSize: "var(--font-size-heading-h4)",
64
66
  fontWeight: "var(--font-weight-bold)",
65
67
  color: "var(--color-text-primary)"
66
68
  },
67
- children: r ? /* @__PURE__ */ v(c, {
69
+ children: r ? /* @__PURE__ */ b(u, {
68
70
  size: 20,
69
71
  className: "animate-spin"
70
72
  }) : n ?? 0
71
73
  })]
72
74
  })
73
75
  });
74
- }), w = t(function() {
75
- let t = e(), { t: l } = d(), w = n((e, t) => {
76
- let n = l(e);
76
+ }), E = r(function() {
77
+ let r = e(), { t: d } = p(), E = i((e, t) => {
78
+ let n = d(e);
77
79
  return n === e ? t : n;
78
- }, [l]), { data: T, loading: E } = u(x, {
79
- variables: { globalConsoleId: b },
80
+ }, [d]), { data: D, loading: O } = f(C, {
81
+ variables: { globalConsoleId: S },
80
82
  fetchPolicy: "cache-and-network"
81
- }), { data: D, loading: O } = u(S, { fetchPolicy: "cache-and-network" }), k = D?.listDashboards?.edges?.map((e) => e.node) || [];
82
- return /* @__PURE__ */ v("div", {
83
+ }), { data: k, loading: A } = f(w, { fetchPolicy: "cache-and-network" }), j = k?.listDashboards?.edges?.map((e) => e.node) || [];
84
+ return /* @__PURE__ */ b("div", {
83
85
  style: {
84
86
  minHeight: "100vh",
85
87
  backgroundColor: "var(--color-bg-canvas)"
86
88
  },
87
- children: /* @__PURE__ */ y("div", {
88
- style: {
89
- padding: "var(--space-pagePadding)",
90
- maxWidth: 960,
91
- margin: "0 auto"
92
- },
89
+ children: /* @__PURE__ */ x(n, {
90
+ className: "mx-auto max-w-[960px] p-[var(--space-pagePadding)]",
93
91
  children: [
94
- /* @__PURE__ */ y("div", {
95
- className: "relative mb-[var(--space-sectionGap)] overflow-hidden rounded-card border border-border-seam bg-gloss-card p-6",
92
+ /* @__PURE__ */ x("div", {
93
+ className: "relative overflow-hidden rounded-card border border-[var(--color-border-seam)] bg-[image:var(--gradient-gloss-card)] p-6",
96
94
  children: [
97
- /* @__PURE__ */ v(f, { intensity: "subtle" }),
98
- /* @__PURE__ */ v("h1", {
95
+ /* @__PURE__ */ b(m, { intensity: "subtle" }),
96
+ /* @__PURE__ */ b("h1", {
99
97
  style: {
100
98
  fontSize: "var(--font-size-heading-h4)",
101
99
  fontWeight: "var(--font-weight-bold)",
102
100
  color: "var(--color-text-primary)"
103
101
  },
104
- children: /* @__PURE__ */ v(h, { children: "BigConsole" })
102
+ children: /* @__PURE__ */ b(_, { children: "BigConsole" })
105
103
  }),
106
- /* @__PURE__ */ v("p", {
104
+ /* @__PURE__ */ b("p", {
107
105
  style: {
108
106
  fontSize: "var(--font-size-body-md)",
109
107
  color: "var(--color-text-secondary)",
110
108
  marginTop: 4
111
109
  },
112
- children: w("bigconsole.home.subtitle", "AI-powered analytics platform")
110
+ children: E("bigconsole.home.subtitle", "AI-powered analytics platform")
113
111
  })
114
112
  ]
115
113
  }),
116
- /* @__PURE__ */ v(_, {
117
- className: "mb-[var(--space-sectionGap)]",
118
- children: w("bigconsole.home.purpose", "BigConsole is your analytics command center — build live dashboards, wire up data sinks and parsers, then automate it all with pipelines and workflows. Start from the quick actions below or jump back into a recent dashboard.")
119
- }),
120
- /* @__PURE__ */ y("div", {
121
- style: {
122
- display: "grid",
123
- gridTemplateColumns: "repeat(auto-fit, minmax(180px, 1fr))",
124
- gap: 12,
125
- marginBottom: "var(--space-sectionGap)"
126
- },
127
- children: [
128
- /* @__PURE__ */ v(C, {
129
- hero: !0,
130
- icon: /* @__PURE__ */ v(s, { size: 20 }),
131
- label: w("bigconsole.home.stats.dashboards", "Dashboards"),
132
- count: T?.listDashboards?.totalCount,
133
- loading: E,
134
- path: "/dashboards",
135
- onNavigate: t
136
- }),
137
- /* @__PURE__ */ v(C, {
138
- icon: /* @__PURE__ */ v(i, { size: 20 }),
139
- label: w("bigconsole.home.stats.dataSinks", "Data Sinks"),
140
- count: T?.listDataSinks?.totalCount,
141
- loading: E,
142
- path: "/datasinks",
143
- onNavigate: t
144
- }),
145
- /* @__PURE__ */ v(C, {
146
- icon: /* @__PURE__ */ v(a, { size: 20 }),
147
- label: w("bigconsole.home.stats.parsers", "Parsers"),
148
- count: T?.listParsers?.totalCount,
149
- loading: E,
150
- path: "/parsers",
151
- onNavigate: t
152
- }),
153
- /* @__PURE__ */ v(C, {
154
- icon: /* @__PURE__ */ v(o, { size: 20 }),
155
- label: w("bigconsole.home.stats.pipelines", "Pipelines"),
156
- count: T?.listPipelines?.totalCount,
157
- loading: E,
158
- path: "/pipelines",
159
- onNavigate: t
160
- })
161
- ]
114
+ /* @__PURE__ */ b(t, {
115
+ emphasis: "muted",
116
+ padding: "compact",
117
+ "aria-label": E("bigconsole.home.about", "About BigConsole"),
118
+ children: /* @__PURE__ */ b(y, {
119
+ className: "max-w-[80ch]",
120
+ children: E("bigconsole.home.purpose", "BigConsole is your analytics command center — build live dashboards, wire up data sinks and parsers, then automate it all with pipelines and workflows. Start from the quick actions below or jump back into a recent dashboard.")
121
+ })
162
122
  }),
163
- /* @__PURE__ */ y("div", {
164
- style: { marginBottom: "var(--space-sectionGap)" },
165
- children: [/* @__PURE__ */ v("h2", {
123
+ /* @__PURE__ */ b(t, {
124
+ headingLevel: 2,
125
+ emphasis: "bare",
126
+ padding: "none",
127
+ title: E("bigconsole.home.stats.title", "Workspace at a glance"),
128
+ "data-testid": "home-stats",
129
+ children: /* @__PURE__ */ x("div", {
166
130
  style: {
167
- fontSize: "var(--font-size-body-md)",
168
- fontWeight: "var(--font-weight-semibold)",
169
- color: "var(--color-text-primary)",
170
- marginBottom: 12
131
+ display: "grid",
132
+ gridTemplateColumns: "repeat(auto-fit, minmax(min(180px, 100%), 1fr))",
133
+ gap: 12
171
134
  },
172
- children: w("bigconsole.home.quickActions.title", "Quick Actions")
173
- }), /* @__PURE__ */ v("div", {
135
+ children: [
136
+ /* @__PURE__ */ b(T, {
137
+ hero: !0,
138
+ icon: /* @__PURE__ */ b(l, { size: 20 }),
139
+ label: E("bigconsole.home.stats.dashboards", "Dashboards"),
140
+ count: D?.listDashboards?.totalCount,
141
+ loading: O,
142
+ path: "/dashboards",
143
+ onNavigate: r
144
+ }),
145
+ /* @__PURE__ */ b(T, {
146
+ icon: /* @__PURE__ */ b(o, { size: 20 }),
147
+ label: E("bigconsole.home.stats.dataSinks", "Data Sinks"),
148
+ count: D?.listDataSinks?.totalCount,
149
+ loading: O,
150
+ path: "/datasinks",
151
+ onNavigate: r
152
+ }),
153
+ /* @__PURE__ */ b(T, {
154
+ icon: /* @__PURE__ */ b(s, { size: 20 }),
155
+ label: E("bigconsole.home.stats.parsers", "Parsers"),
156
+ count: D?.listParsers?.totalCount,
157
+ loading: O,
158
+ path: "/parsers",
159
+ onNavigate: r
160
+ }),
161
+ /* @__PURE__ */ b(T, {
162
+ icon: /* @__PURE__ */ b(c, { size: 20 }),
163
+ label: E("bigconsole.home.stats.pipelines", "Pipelines"),
164
+ count: D?.listPipelines?.totalCount,
165
+ loading: O,
166
+ path: "/pipelines",
167
+ onNavigate: r
168
+ })
169
+ ]
170
+ })
171
+ }),
172
+ /* @__PURE__ */ b(t, {
173
+ headingLevel: 2,
174
+ emphasis: "bare",
175
+ padding: "none",
176
+ title: E("bigconsole.home.quickActions.title", "Quick Actions"),
177
+ "data-testid": "home-quick-actions",
178
+ children: /* @__PURE__ */ b("div", {
174
179
  style: {
175
180
  display: "flex",
176
181
  gap: 12,
@@ -178,34 +183,34 @@ var b = "default", x = l`
178
183
  },
179
184
  children: [
180
185
  {
181
- label: w("bigconsole.home.quickActions.newDashboard", "New Dashboard"),
186
+ label: E("bigconsole.home.quickActions.newDashboard", "New Dashboard"),
182
187
  path: "/dashboards",
183
- icon: /* @__PURE__ */ v(s, { size: 14 })
188
+ icon: /* @__PURE__ */ b(l, { size: 14 })
184
189
  },
185
190
  {
186
- label: w("bigconsole.home.quickActions.newDataSink", "New Data Sink"),
191
+ label: E("bigconsole.home.quickActions.newDataSink", "New Data Sink"),
187
192
  path: "/datasinks/new",
188
- icon: /* @__PURE__ */ v(i, { size: 14 })
193
+ icon: /* @__PURE__ */ b(o, { size: 14 })
189
194
  },
190
195
  {
191
- label: w("bigconsole.home.quickActions.newParser", "New Parser"),
196
+ label: E("bigconsole.home.quickActions.newParser", "New Parser"),
192
197
  path: "/parsers/new",
193
- icon: /* @__PURE__ */ v(a, { size: 14 })
198
+ icon: /* @__PURE__ */ b(s, { size: 14 })
194
199
  },
195
200
  {
196
- label: w("bigconsole.home.quickActions.newPipeline", "New Pipeline"),
201
+ label: E("bigconsole.home.quickActions.newPipeline", "New Pipeline"),
197
202
  path: "/pipelines/new",
198
- icon: /* @__PURE__ */ v(o, { size: 14 })
203
+ icon: /* @__PURE__ */ b(c, { size: 14 })
199
204
  }
200
- ].map((e) => /* @__PURE__ */ y("button", {
201
- onClick: () => t(e.path),
205
+ ].map((e) => /* @__PURE__ */ x("button", {
206
+ onClick: () => r(e.path),
202
207
  style: {
203
208
  display: "flex",
204
209
  alignItems: "center",
205
210
  gap: 6,
206
211
  padding: "8px 16px",
207
212
  borderRadius: "var(--radius-button)",
208
- border: "1px solid var(--color-border)",
213
+ border: "1px solid var(--color-border-subtle)",
209
214
  backgroundColor: "var(--color-bg-surface)",
210
215
  color: "var(--color-text-primary)",
211
216
  fontSize: "var(--font-size-body-sm)",
@@ -217,109 +222,97 @@ var b = "default", x = l`
217
222
  e.label
218
223
  ]
219
224
  }, e.path))
220
- })]
225
+ })
221
226
  }),
222
- /* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
223
- style: {
224
- display: "flex",
225
- justifyContent: "space-between",
226
- alignItems: "center",
227
- marginBottom: 12
228
- },
229
- children: [/* @__PURE__ */ v("h2", {
230
- style: {
231
- fontSize: "var(--font-size-body-md)",
232
- fontWeight: "var(--font-weight-semibold)",
233
- color: "var(--color-text-primary)"
234
- },
235
- children: w("bigconsole.home.recentDashboards.title", "Recent Dashboards")
236
- }), /* @__PURE__ */ y("button", {
237
- onClick: () => t("/dashboards"),
238
- style: {
239
- display: "flex",
240
- alignItems: "center",
241
- gap: 4,
242
- padding: "4px 8px",
243
- borderRadius: "var(--radius-button)",
244
- border: "none",
245
- backgroundColor: "transparent",
246
- color: "var(--color-action-primary-bg)",
247
- fontSize: "var(--font-size-body-sm)",
248
- cursor: "pointer"
249
- },
227
+ /* @__PURE__ */ b(t, {
228
+ headingLevel: 2,
229
+ emphasis: "primary",
230
+ "data-testid": "home-recent-dashboards",
231
+ title: E("bigconsole.home.recentDashboards.title", "Recent Dashboards"),
232
+ description: E("bigconsole.home.recentDashboards.description", "Jump straight back into a board you were working on."),
233
+ actions: /* @__PURE__ */ x(h, {
234
+ variant: "ghost",
235
+ size: "sm",
236
+ onClick: () => r("/dashboards"),
250
237
  children: [
251
- w("bigconsole.home.recentDashboards.viewAll", "View all"),
238
+ E("bigconsole.home.recentDashboards.viewAll", "View all"),
252
239
  " ",
253
- /* @__PURE__ */ v(r, { size: 14 })
240
+ /* @__PURE__ */ b(a, { size: 14 })
254
241
  ]
255
- })]
256
- }), O ? /* @__PURE__ */ v("div", {
257
- style: {
258
- textAlign: "center",
259
- padding: 24,
260
- color: "var(--color-text-muted)"
261
- },
262
- children: /* @__PURE__ */ v(c, {
263
- size: 20,
264
- className: "animate-spin",
265
- style: { margin: "0 auto" }
266
- })
267
- }) : k.length === 0 ? /* @__PURE__ */ v(m, {
268
- treatment: "insight",
269
- className: "border-border-seam",
270
- children: /* @__PURE__ */ v(g, {
271
- illustration: "empty-data",
272
- title: w("bigconsole.home.recentDashboards.emptyTitle", "No dashboards yet"),
273
- description: w("bigconsole.home.recentDashboards.emptyDescription", "Create your first dashboard to get started"),
274
- action: /* @__PURE__ */ v(p, {
275
- onClick: () => t("/dashboards"),
276
- children: w("bigconsole.home.quickActions.newDashboard", "New Dashboard")
242
+ }),
243
+ children: A ? /* @__PURE__ */ b("div", {
244
+ style: {
245
+ textAlign: "center",
246
+ padding: 24,
247
+ color: "var(--color-text-muted)"
248
+ },
249
+ children: /* @__PURE__ */ b(u, {
250
+ size: 20,
251
+ className: "animate-spin",
252
+ style: { margin: "0 auto" }
277
253
  })
278
- })
279
- }) : /* @__PURE__ */ v("div", {
280
- style: {
281
- display: "flex",
282
- flexDirection: "column",
283
- gap: 8
284
- },
285
- children: k.map((e) => /* @__PURE__ */ y("button", {
286
- onClick: () => t(`/dashboards/${e.id}`),
254
+ }) : j.length === 0 ? /* @__PURE__ */ b(g, {
255
+ treatment: "insight",
256
+ className: "border-[var(--color-border-seam)]",
257
+ children: /* @__PURE__ */ b(v, {
258
+ illustration: "empty-data",
259
+ title: E("bigconsole.home.recentDashboards.emptyTitle", "No dashboards yet"),
260
+ description: E("bigconsole.home.recentDashboards.emptyDescription", "Create your first dashboard to get started"),
261
+ action: /* @__PURE__ */ b(h, {
262
+ onClick: () => r("/dashboards"),
263
+ children: E("bigconsole.home.quickActions.newDashboard", "New Dashboard")
264
+ })
265
+ })
266
+ }) : /* @__PURE__ */ b("div", {
287
267
  style: {
288
- textAlign: "left",
289
- padding: 12,
290
- borderRadius: "var(--radius-card)",
291
- border: "1px solid var(--color-border)",
292
- backgroundColor: "var(--color-bg-surface)",
293
- cursor: "pointer",
294
268
  display: "flex",
295
- justifyContent: "space-between",
296
- alignItems: "center"
269
+ flexDirection: "column",
270
+ gap: 8
297
271
  },
298
- children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("div", {
299
- style: {
300
- fontWeight: "var(--font-weight-medium)",
301
- fontSize: "var(--font-size-body-sm)",
302
- color: "var(--color-text-primary)"
303
- },
304
- children: e.name
305
- }), e.description && /* @__PURE__ */ v("div", {
272
+ children: j.map((e) => /* @__PURE__ */ x("button", {
273
+ onClick: () => r(`/dashboards/${e.id}`),
306
274
  style: {
307
- fontSize: 11,
308
- color: "var(--color-text-muted)",
309
- marginTop: 2
275
+ textAlign: "left",
276
+ padding: 12,
277
+ borderRadius: "var(--radius-card)",
278
+ border: "1px solid var(--color-border-subtle)",
279
+ backgroundColor: "var(--color-bg-surface)",
280
+ cursor: "pointer",
281
+ display: "flex",
282
+ justifyContent: "space-between",
283
+ alignItems: "center",
284
+ gap: "var(--space-controlGap)",
285
+ minHeight: "var(--size-controlHeight-lg)"
310
286
  },
311
- children: e.description.slice(0, 80)
312
- })] }), /* @__PURE__ */ v(r, {
313
- size: 14,
314
- style: { color: "var(--color-text-muted)" }
315
- })]
316
- }, e.id))
317
- })] })
287
+ children: [/* @__PURE__ */ x("div", {
288
+ style: { minWidth: 0 },
289
+ children: [/* @__PURE__ */ b("div", {
290
+ style: {
291
+ fontWeight: "var(--font-weight-medium)",
292
+ fontSize: "var(--font-size-body-sm)",
293
+ color: "var(--color-text-primary)"
294
+ },
295
+ children: e.name
296
+ }), e.description && /* @__PURE__ */ b("div", {
297
+ style: {
298
+ fontSize: 11,
299
+ color: "var(--color-text-muted)",
300
+ marginTop: 2
301
+ },
302
+ children: e.description.slice(0, 80)
303
+ })]
304
+ }), /* @__PURE__ */ b(a, {
305
+ size: 14,
306
+ style: { color: "var(--color-text-muted)" }
307
+ })]
308
+ }, e.id))
309
+ })
310
+ })
318
311
  ]
319
312
  })
320
313
  });
321
314
  });
322
315
  //#endregion
323
- export { w as default };
316
+ export { E as default };
324
317
 
325
318
  //# sourceMappingURL=HomePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/bigconsole/pages/HomePage.tsx"],"sourcesContent":["/**\n * HomePage\n *\n * BigConsole landing page showing workspace statistics and quick actions.\n */\n\nimport { type FC, memo, useCallback } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n AuroraBackground,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Button,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useAppNavigate } from '../contexts';\nimport { LayoutDashboard, Blocks, FileCode2, GitBranch, ArrowRight, Loader2 } from 'lucide-react';\n\n// ============================================================================\n// GRAPHQL RESPONSE TYPES\n// ============================================================================\n\ninterface HomepageStatsData {\n listDashboards: { totalCount: number };\n listDataSinks: { totalCount: number };\n listParsers: { totalCount: number };\n listPipelines: { totalCount: number };\n}\n\ninterface RecentDashboardNode {\n id: string;\n name: string;\n description?: string;\n updatedAt: string;\n}\n\ninterface RecentDashboardsData {\n listDashboards: {\n edges: Array<{ node: RecentDashboardNode }>;\n };\n}\n\n// `listParsers` / `listPipelines` are Relay connections and their filter requires a\n// `consoleId`; GLOBAL_CONSOLE_ID counts the workspace-wide (non dashboard-scoped)\n// entries, which is what these tiles represent.\nconst GLOBAL_CONSOLE_ID = 'default';\n\nconst HOMEPAGE_STATS = gql`\n query HomepageStats($globalConsoleId: ID!) {\n listDashboards(first: 0) {\n totalCount\n }\n listDataSinks(first: 0) {\n totalCount\n }\n listParsers(filter: { consoleId: $globalConsoleId }, first: 0) {\n totalCount\n }\n listPipelines(filter: { consoleId: $globalConsoleId }, first: 0) {\n totalCount\n }\n }\n`;\n\nconst RECENT_DASHBOARDS = gql`\n query RecentDashboards {\n listDashboards(first: 5, sortBy: UPDATED_AT, sortOrder: DESC) {\n edges {\n node {\n id\n name\n description\n updatedAt\n }\n }\n }\n }\n`;\n\ninterface StatCardProps {\n icon: React.ReactNode;\n label: string;\n count: number | undefined;\n loading: boolean;\n path: string;\n onNavigate: (path: string) => void;\n}\n\nconst StatCard: FC<StatCardProps & { hero?: boolean }> = memo(function StatCard({\n icon,\n label,\n count,\n loading,\n path,\n onNavigate,\n hero = false,\n}) {\n return (\n <GlassCard treatment={hero ? 'glass' : 'metric'} glow={hero} className=\"border-border-seam p-0\">\n <button\n type=\"button\"\n onClick={() => onNavigate(path)}\n className=\"flex w-full flex-col gap-2 rounded-card p-[var(--space-cardPadding)] text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <div className=\"flex items-center gap-2\">\n <div style={{ color: 'var(--color-action-primary-bg)' }}>{icon}</div>\n <span style={{ fontSize: 'var(--font-size-body-sm)', color: 'var(--color-text-secondary)' }}>{label}</span>\n </div>\n <div\n className=\"tabular-nums\"\n style={{\n fontSize: 'var(--font-size-heading-h4)',\n fontWeight: 'var(--font-weight-bold)',\n color: 'var(--color-text-primary)',\n }}\n >\n {loading ? <Loader2 size={20} className=\"animate-spin\" /> : (count ?? 0)}\n </div>\n </button>\n </GlassCard>\n );\n});\n\nexport const HomePage: FC = memo(function HomePage() {\n const navigate = useAppNavigate();\n const { t } = useI18n();\n const tr = useCallback(\n (key: string, fallback: string) => {\n const translated = t(key);\n return translated === key ? fallback : translated;\n },\n [t]\n );\n const { data: stats, loading: statsLoading } = useQuery<HomepageStatsData>(HOMEPAGE_STATS, {\n variables: { globalConsoleId: GLOBAL_CONSOLE_ID },\n fetchPolicy: 'cache-and-network',\n });\n const { data: recentData, loading: recentLoading } = useQuery<RecentDashboardsData>(RECENT_DASHBOARDS, {\n fetchPolicy: 'cache-and-network',\n });\n\n const recentDashboards = recentData?.listDashboards?.edges?.map((e) => e.node) || [];\n\n return (\n <div style={{ minHeight: '100vh', backgroundColor: 'var(--color-bg-canvas)' }}>\n <div style={{ padding: 'var(--space-pagePadding)', maxWidth: 960, margin: '0 auto' }}>\n {/* Hero Header */}\n <div className=\"relative mb-[var(--space-sectionGap)] overflow-hidden rounded-card border border-border-seam bg-gloss-card p-6\">\n <AuroraBackground intensity=\"subtle\" />\n <h1\n style={{\n fontSize: 'var(--font-size-heading-h4)',\n fontWeight: 'var(--font-weight-bold)',\n color: 'var(--color-text-primary)',\n }}\n >\n <GradientText>BigConsole</GradientText>\n </h1>\n <p style={{ fontSize: 'var(--font-size-body-md)', color: 'var(--color-text-secondary)', marginTop: 4 }}>\n {tr('bigconsole.home.subtitle', 'AI-powered analytics platform')}\n </p>\n </div>\n\n <PagePurpose className=\"mb-[var(--space-sectionGap)]\">\n {tr(\n 'bigconsole.home.purpose',\n 'BigConsole is your analytics command center — build live dashboards, wire up data sinks and parsers, then automate it all with pipelines and workflows. Start from the quick actions below or jump back into a recent dashboard.'\n )}\n </PagePurpose>\n\n {/* Stats Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))',\n gap: 12,\n marginBottom: 'var(--space-sectionGap)',\n }}\n >\n <StatCard\n hero\n icon={<LayoutDashboard size={20} />}\n label={tr('bigconsole.home.stats.dashboards', 'Dashboards')}\n count={stats?.listDashboards?.totalCount}\n loading={statsLoading}\n path=\"/dashboards\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<Blocks size={20} />}\n label={tr('bigconsole.home.stats.dataSinks', 'Data Sinks')}\n count={stats?.listDataSinks?.totalCount}\n loading={statsLoading}\n path=\"/datasinks\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<FileCode2 size={20} />}\n label={tr('bigconsole.home.stats.parsers', 'Parsers')}\n count={stats?.listParsers?.totalCount}\n loading={statsLoading}\n path=\"/parsers\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<GitBranch size={20} />}\n label={tr('bigconsole.home.stats.pipelines', 'Pipelines')}\n count={stats?.listPipelines?.totalCount}\n loading={statsLoading}\n path=\"/pipelines\"\n onNavigate={navigate}\n />\n </div>\n\n {/* Quick Actions */}\n <div style={{ marginBottom: 'var(--space-sectionGap)' }}>\n <h2\n style={{\n fontSize: 'var(--font-size-body-md)',\n fontWeight: 'var(--font-weight-semibold)',\n color: 'var(--color-text-primary)',\n marginBottom: 12,\n }}\n >\n {tr('bigconsole.home.quickActions.title', 'Quick Actions')}\n </h2>\n <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>\n {[\n {\n label: tr('bigconsole.home.quickActions.newDashboard', 'New Dashboard'),\n path: '/dashboards',\n icon: <LayoutDashboard size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newDataSink', 'New Data Sink'),\n path: '/datasinks/new',\n icon: <Blocks size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newParser', 'New Parser'),\n path: '/parsers/new',\n icon: <FileCode2 size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newPipeline', 'New Pipeline'),\n path: '/pipelines/new',\n icon: <GitBranch size={14} />,\n },\n ].map((action) => (\n <button\n key={action.path}\n onClick={() => navigate(action.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '8px 16px',\n borderRadius: 'var(--radius-button)',\n border: '1px solid var(--color-border)',\n backgroundColor: 'var(--color-bg-surface)',\n color: 'var(--color-text-primary)',\n fontSize: 'var(--font-size-body-sm)',\n cursor: 'pointer',\n }}\n >\n {action.icon} {action.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Recent Dashboards */}\n <div>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 12 }}>\n <h2\n style={{\n fontSize: 'var(--font-size-body-md)',\n fontWeight: 'var(--font-weight-semibold)',\n color: 'var(--color-text-primary)',\n }}\n >\n {tr('bigconsole.home.recentDashboards.title', 'Recent Dashboards')}\n </h2>\n <button\n onClick={() => navigate('/dashboards')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 8px',\n borderRadius: 'var(--radius-button)',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'var(--color-action-primary-bg)',\n fontSize: 'var(--font-size-body-sm)',\n cursor: 'pointer',\n }}\n >\n {tr('bigconsole.home.recentDashboards.viewAll', 'View all')} <ArrowRight size={14} />\n </button>\n </div>\n\n {recentLoading ? (\n <div style={{ textAlign: 'center', padding: 24, color: 'var(--color-text-muted)' }}>\n <Loader2 size={20} className=\"animate-spin\" style={{ margin: '0 auto' }} />\n </div>\n ) : recentDashboards.length === 0 ? (\n <GlassCard treatment=\"insight\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={tr('bigconsole.home.recentDashboards.emptyTitle', 'No dashboards yet')}\n description={tr(\n 'bigconsole.home.recentDashboards.emptyDescription',\n 'Create your first dashboard to get started'\n )}\n action={\n <Button onClick={() => navigate('/dashboards')}>\n {tr('bigconsole.home.quickActions.newDashboard', 'New Dashboard')}\n </Button>\n }\n />\n </GlassCard>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {recentDashboards.map((d) => (\n <button\n key={d.id}\n onClick={() => navigate(`/dashboards/${d.id}`)}\n style={{\n textAlign: 'left',\n padding: 12,\n borderRadius: 'var(--radius-card)',\n border: '1px solid var(--color-border)',\n backgroundColor: 'var(--color-bg-surface)',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <div>\n <div\n style={{\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-primary)',\n }}\n >\n {d.name}\n </div>\n {d.description && (\n <div style={{ fontSize: 11, color: 'var(--color-text-muted)', marginTop: 2 }}>\n {d.description.slice(0, 80)}\n </div>\n )}\n </div>\n <ArrowRight size={14} style={{ color: 'var(--color-text-muted)' }} />\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n});\n\nexport default HomePage;\n"],"mappings":";;;;;;;;;;AAgDA,IAAM,IAAoB,WAEpB,IAAiB,CAAG;;;;;;;;;;;;;;;GAiBpB,IAAoB,CAAG;;;;;;;;;;;;;GAwBvB,IAAmD,EAAK,SAAkB,EAC9E,SACA,UACA,UACA,YACA,SACA,eACA,UAAO,MACN;AACD,QACE,kBAAC,GAAD;EAAW,WAAW,IAAO,UAAU;EAAU,MAAM;EAAM,WAAU;YACrE,kBAAC,UAAD;GACE,MAAK;GACL,eAAe,EAAW,EAAK;GAC/B,WAAU;aAHZ,CAKE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,OAAO,EAAE,OAAO,kCAAkC;eAAG;KAAW,CAAA,EACrE,kBAAC,QAAD;KAAM,OAAO;MAAE,UAAU;MAA4B,OAAO;MAA+B;eAAG;KAAa,CAAA,CACvG;OACN,kBAAC,OAAD;IACE,WAAU;IACV,OAAO;KACL,UAAU;KACV,YAAY;KACZ,OAAO;KACR;cAEA,IAAU,kBAAC,GAAD;KAAS,MAAM;KAAI,WAAU;KAAiB,CAAA,GAAI,KAAS;IAClE,CAAA,CACC;;EACC,CAAA;EAEd,EAEW,IAAe,EAAK,WAAoB;CACnD,IAAM,IAAW,GAAgB,EAC3B,EAAE,SAAM,GAAS,EACjB,IAAK,GACR,GAAa,MAAqB;EACjC,IAAM,IAAa,EAAE,EAAI;AACzB,SAAO,MAAe,IAAM,IAAW;IAEzC,CAAC,EAAE,CACJ,EACK,EAAE,MAAM,GAAO,SAAS,MAAiB,EAA4B,GAAgB;EACzF,WAAW,EAAE,iBAAiB,GAAmB;EACjD,aAAa;EACd,CAAC,EACI,EAAE,MAAM,GAAY,SAAS,MAAkB,EAA+B,GAAmB,EACrG,aAAa,qBACd,CAAC,EAEI,IAAmB,GAAY,gBAAgB,OAAO,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE;AAEpF,QACE,kBAAC,OAAD;EAAK,OAAO;GAAE,WAAW;GAAS,iBAAiB;GAA0B;YAC3E,kBAAC,OAAD;GAAK,OAAO;IAAE,SAAS;IAA4B,UAAU;IAAK,QAAQ;IAAU;aAApF;IAEE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD,EAAkB,WAAU,UAAW,CAAA;MACvC,kBAAC,MAAD;OACE,OAAO;QACL,UAAU;QACV,YAAY;QACZ,OAAO;QACR;iBAED,kBAAC,GAAD,EAAA,UAAc,cAAyB,CAAA;OACpC,CAAA;MACL,kBAAC,KAAD;OAAG,OAAO;QAAE,UAAU;QAA4B,OAAO;QAA+B,WAAW;QAAG;iBACnG,EAAG,4BAA4B,gCAAgC;OAC9D,CAAA;MACA;;IAEN,kBAAC,GAAD;KAAa,WAAU;eACpB,EACC,2BACA,mOACD;KACW,CAAA;IAGd,kBAAC,OAAD;KACE,OAAO;MACL,SAAS;MACT,qBAAqB;MACrB,KAAK;MACL,cAAc;MACf;eANH;MAQE,kBAAC,GAAD;OACE,MAAA;OACA,MAAM,kBAAC,GAAD,EAAiB,MAAM,IAAM,CAAA;OACnC,OAAO,EAAG,oCAAoC,aAAa;OAC3D,OAAO,GAAO,gBAAgB;OAC9B,SAAS;OACT,MAAK;OACL,YAAY;OACZ,CAAA;MACF,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;OAC1B,OAAO,EAAG,mCAAmC,aAAa;OAC1D,OAAO,GAAO,eAAe;OAC7B,SAAS;OACT,MAAK;OACL,YAAY;OACZ,CAAA;MACF,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;OAC7B,OAAO,EAAG,iCAAiC,UAAU;OACrD,OAAO,GAAO,aAAa;OAC3B,SAAS;OACT,MAAK;OACL,YAAY;OACZ,CAAA;MACF,kBAAC,GAAD;OACE,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;OAC7B,OAAO,EAAG,mCAAmC,YAAY;OACzD,OAAO,GAAO,eAAe;OAC7B,SAAS;OACT,MAAK;OACL,YAAY;OACZ,CAAA;MACE;;IAGN,kBAAC,OAAD;KAAK,OAAO,EAAE,cAAc,2BAA2B;eAAvD,CACE,kBAAC,MAAD;MACE,OAAO;OACL,UAAU;OACV,YAAY;OACZ,OAAO;OACP,cAAc;OACf;gBAEA,EAAG,sCAAsC,gBAAgB;MACvD,CAAA,EACL,kBAAC,OAAD;MAAK,OAAO;OAAE,SAAS;OAAQ,KAAK;OAAI,UAAU;OAAQ;gBACvD;OACC;QACE,OAAO,EAAG,6CAA6C,gBAAgB;QACvE,MAAM;QACN,MAAM,kBAAC,GAAD,EAAiB,MAAM,IAAM,CAAA;QACpC;OACD;QACE,OAAO,EAAG,4CAA4C,gBAAgB;QACtE,MAAM;QACN,MAAM,kBAAC,GAAD,EAAQ,MAAM,IAAM,CAAA;QAC3B;OACD;QACE,OAAO,EAAG,0CAA0C,aAAa;QACjE,MAAM;QACN,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;QAC9B;OACD;QACE,OAAO,EAAG,4CAA4C,eAAe;QACrE,MAAM;QACN,MAAM,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA;QAC9B;OACF,CAAC,KAAK,MACL,kBAAC,UAAD;OAEE,eAAe,EAAS,EAAO,KAAK;OACpC,OAAO;QACL,SAAS;QACT,YAAY;QACZ,KAAK;QACL,SAAS;QACT,cAAc;QACd,QAAQ;QACR,iBAAiB;QACjB,OAAO;QACP,UAAU;QACV,QAAQ;QACT;iBAdH;QAgBG,EAAO;QAAK;QAAE,EAAO;QACf;SAhBF,EAAO,KAgBL,CACT;MACE,CAAA,CACF;;IAGN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;KAAK,OAAO;MAAE,SAAS;MAAQ,gBAAgB;MAAiB,YAAY;MAAU,cAAc;MAAI;eAAxG,CACE,kBAAC,MAAD;MACE,OAAO;OACL,UAAU;OACV,YAAY;OACZ,OAAO;OACR;gBAEA,EAAG,0CAA0C,oBAAoB;MAC/D,CAAA,EACL,kBAAC,UAAD;MACE,eAAe,EAAS,cAAc;MACtC,OAAO;OACL,SAAS;OACT,YAAY;OACZ,KAAK;OACL,SAAS;OACT,cAAc;OACd,QAAQ;OACR,iBAAiB;OACjB,OAAO;OACP,UAAU;OACV,QAAQ;OACT;gBAbH;OAeG,EAAG,4CAA4C,WAAW;OAAC;OAAC,kBAAC,GAAD,EAAY,MAAM,IAAM,CAAA;OAC9E;QACL;QAEL,IACC,kBAAC,OAAD;KAAK,OAAO;MAAE,WAAW;MAAU,SAAS;MAAI,OAAO;MAA2B;eAChF,kBAAC,GAAD;MAAS,MAAM;MAAI,WAAU;MAAe,OAAO,EAAE,QAAQ,UAAU;MAAI,CAAA;KACvE,CAAA,GACJ,EAAiB,WAAW,IAC9B,kBAAC,GAAD;KAAW,WAAU;KAAU,WAAU;eACvC,kBAAC,GAAD;MACE,cAAa;MACb,OAAO,EAAG,+CAA+C,oBAAoB;MAC7E,aAAa,EACX,qDACA,6CACD;MACD,QACE,kBAAC,GAAD;OAAQ,eAAe,EAAS,cAAc;iBAC3C,EAAG,6CAA6C,gBAAgB;OAC1D,CAAA;MAEX,CAAA;KACQ,CAAA,GAEZ,kBAAC,OAAD;KAAK,OAAO;MAAE,SAAS;MAAQ,eAAe;MAAU,KAAK;MAAG;eAC7D,EAAiB,KAAK,MACrB,kBAAC,UAAD;MAEE,eAAe,EAAS,eAAe,EAAE,KAAK;MAC9C,OAAO;OACL,WAAW;OACX,SAAS;OACT,cAAc;OACd,QAAQ;OACR,iBAAiB;OACjB,QAAQ;OACR,SAAS;OACT,gBAAgB;OAChB,YAAY;OACb;gBAbH,CAeE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OACE,OAAO;QACL,YAAY;QACZ,UAAU;QACV,OAAO;QACR;iBAEA,EAAE;OACC,CAAA,EACL,EAAE,eACD,kBAAC,OAAD;OAAK,OAAO;QAAE,UAAU;QAAI,OAAO;QAA2B,WAAW;QAAG;iBACzE,EAAE,YAAY,MAAM,GAAG,GAAG;OACvB,CAAA,CAEJ,EAAA,CAAA,EACN,kBAAC,GAAD;OAAY,MAAM;OAAI,OAAO,EAAE,OAAO,2BAA2B;OAAI,CAAA,CAC9D;QA/BF,EAAE,GA+BA,CACT;KACE,CAAA,CAEJ,EAAA,CAAA;IACF;;EACF,CAAA;EAER"}
1
+ {"version":3,"file":"HomePage.js","names":[],"sources":["../../../src/bigconsole/pages/HomePage.tsx"],"sourcesContent":["/**\n * HomePage\n *\n * BigConsole landing page showing workspace statistics and quick actions.\n */\n\nimport { type FC, memo, useCallback } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n AuroraBackground,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Button,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useAppNavigate } from '../contexts';\nimport { Section, SectionStack } from '../components/common';\nimport { LayoutDashboard, Blocks, FileCode2, GitBranch, ArrowRight, Loader2 } from 'lucide-react';\n\n// ============================================================================\n// GRAPHQL RESPONSE TYPES\n// ============================================================================\n\ninterface HomepageStatsData {\n listDashboards: { totalCount: number };\n listDataSinks: { totalCount: number };\n listParsers: { totalCount: number };\n listPipelines: { totalCount: number };\n}\n\ninterface RecentDashboardNode {\n id: string;\n name: string;\n description?: string;\n updatedAt: string;\n}\n\ninterface RecentDashboardsData {\n listDashboards: {\n edges: Array<{ node: RecentDashboardNode }>;\n };\n}\n\n// `listParsers` / `listPipelines` are Relay connections and their filter requires a\n// `consoleId`; GLOBAL_CONSOLE_ID counts the workspace-wide (non dashboard-scoped)\n// entries, which is what these tiles represent.\nconst GLOBAL_CONSOLE_ID = 'default';\n\nconst HOMEPAGE_STATS = gql`\n query HomepageStats($globalConsoleId: ID!) {\n listDashboards(first: 0) {\n totalCount\n }\n listDataSinks(first: 0) {\n totalCount\n }\n listParsers(filter: { consoleId: $globalConsoleId }, first: 0) {\n totalCount\n }\n listPipelines(filter: { consoleId: $globalConsoleId }, first: 0) {\n totalCount\n }\n }\n`;\n\nconst RECENT_DASHBOARDS = gql`\n query RecentDashboards {\n listDashboards(first: 5, sortBy: UPDATED_AT, sortOrder: DESC) {\n edges {\n node {\n id\n name\n description\n updatedAt\n }\n }\n }\n }\n`;\n\ninterface StatCardProps {\n icon: React.ReactNode;\n label: string;\n count: number | undefined;\n loading: boolean;\n path: string;\n onNavigate: (path: string) => void;\n}\n\nconst StatCard: FC<StatCardProps & { hero?: boolean }> = memo(function StatCard({\n icon,\n label,\n count,\n loading,\n path,\n onNavigate,\n hero = false,\n}) {\n return (\n <GlassCard treatment={hero ? 'glass' : 'metric'} glow={hero} className=\"border-[var(--color-border-seam)] p-0\">\n <button\n type=\"button\"\n onClick={() => onNavigate(path)}\n className=\"flex w-full flex-col gap-2 rounded-card p-[var(--space-cardPadding)] text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n <div className=\"flex items-center gap-2\">\n <div style={{ color: 'var(--color-action-primary-bg)' }}>{icon}</div>\n <span style={{ fontSize: 'var(--font-size-body-sm)', color: 'var(--color-text-secondary)' }}>{label}</span>\n </div>\n <div\n className=\"tabular-nums\"\n style={{\n fontSize: 'var(--font-size-heading-h4)',\n fontWeight: 'var(--font-weight-bold)',\n color: 'var(--color-text-primary)',\n }}\n >\n {loading ? <Loader2 size={20} className=\"animate-spin\" /> : (count ?? 0)}\n </div>\n </button>\n </GlassCard>\n );\n});\n\nexport const HomePage: FC = memo(function HomePage() {\n const navigate = useAppNavigate();\n const { t } = useI18n();\n const tr = useCallback(\n (key: string, fallback: string) => {\n const translated = t(key);\n return translated === key ? fallback : translated;\n },\n [t]\n );\n const { data: stats, loading: statsLoading } = useQuery<HomepageStatsData>(HOMEPAGE_STATS, {\n variables: { globalConsoleId: GLOBAL_CONSOLE_ID },\n fetchPolicy: 'cache-and-network',\n });\n const { data: recentData, loading: recentLoading } = useQuery<RecentDashboardsData>(RECENT_DASHBOARDS, {\n fetchPolicy: 'cache-and-network',\n });\n\n const recentDashboards = recentData?.listDashboards?.edges?.map((e) => e.node) || [];\n\n return (\n <div style={{ minHeight: '100vh', backgroundColor: 'var(--color-bg-canvas)' }}>\n <SectionStack className=\"mx-auto max-w-[960px] p-[var(--space-pagePadding)]\">\n {/* Hero Header */}\n <div className=\"relative overflow-hidden rounded-card border border-[var(--color-border-seam)] bg-[image:var(--gradient-gloss-card)] p-6\">\n <AuroraBackground intensity=\"subtle\" />\n <h1\n style={{\n fontSize: 'var(--font-size-heading-h4)',\n fontWeight: 'var(--font-weight-bold)',\n color: 'var(--color-text-primary)',\n }}\n >\n <GradientText>BigConsole</GradientText>\n </h1>\n <p style={{ fontSize: 'var(--font-size-body-md)', color: 'var(--color-text-secondary)', marginTop: 4 }}>\n {tr('bigconsole.home.subtitle', 'AI-powered analytics platform')}\n </p>\n </div>\n\n <Section emphasis=\"muted\" padding=\"compact\" aria-label={tr('bigconsole.home.about', 'About BigConsole')}>\n <PagePurpose className=\"max-w-[80ch]\">\n {tr(\n 'bigconsole.home.purpose',\n 'BigConsole is your analytics command center — build live dashboards, wire up data sinks and parsers, then automate it all with pipelines and workflows. Start from the quick actions below or jump back into a recent dashboard.'\n )}\n </PagePurpose>\n </Section>\n\n {/* Stats Grid */}\n <Section\n headingLevel={2}\n emphasis=\"bare\"\n padding=\"none\"\n title={tr('bigconsole.home.stats.title', 'Workspace at a glance')}\n data-testid=\"home-stats\"\n >\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(180px, 100%), 1fr))',\n gap: 12,\n }}\n >\n <StatCard\n hero\n icon={<LayoutDashboard size={20} />}\n label={tr('bigconsole.home.stats.dashboards', 'Dashboards')}\n count={stats?.listDashboards?.totalCount}\n loading={statsLoading}\n path=\"/dashboards\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<Blocks size={20} />}\n label={tr('bigconsole.home.stats.dataSinks', 'Data Sinks')}\n count={stats?.listDataSinks?.totalCount}\n loading={statsLoading}\n path=\"/datasinks\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<FileCode2 size={20} />}\n label={tr('bigconsole.home.stats.parsers', 'Parsers')}\n count={stats?.listParsers?.totalCount}\n loading={statsLoading}\n path=\"/parsers\"\n onNavigate={navigate}\n />\n <StatCard\n icon={<GitBranch size={20} />}\n label={tr('bigconsole.home.stats.pipelines', 'Pipelines')}\n count={stats?.listPipelines?.totalCount}\n loading={statsLoading}\n path=\"/pipelines\"\n onNavigate={navigate}\n />\n </div>\n </Section>\n\n {/* Quick Actions */}\n <Section\n headingLevel={2}\n emphasis=\"bare\"\n padding=\"none\"\n title={tr('bigconsole.home.quickActions.title', 'Quick Actions')}\n data-testid=\"home-quick-actions\"\n >\n <div style={{ display: 'flex', gap: 12, flexWrap: 'wrap' }}>\n {[\n {\n label: tr('bigconsole.home.quickActions.newDashboard', 'New Dashboard'),\n path: '/dashboards',\n icon: <LayoutDashboard size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newDataSink', 'New Data Sink'),\n path: '/datasinks/new',\n icon: <Blocks size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newParser', 'New Parser'),\n path: '/parsers/new',\n icon: <FileCode2 size={14} />,\n },\n {\n label: tr('bigconsole.home.quickActions.newPipeline', 'New Pipeline'),\n path: '/pipelines/new',\n icon: <GitBranch size={14} />,\n },\n ].map((action) => (\n <button\n key={action.path}\n onClick={() => navigate(action.path)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n padding: '8px 16px',\n borderRadius: 'var(--radius-button)',\n border: '1px solid var(--color-border-subtle)',\n backgroundColor: 'var(--color-bg-surface)',\n color: 'var(--color-text-primary)',\n fontSize: 'var(--font-size-body-sm)',\n cursor: 'pointer',\n }}\n >\n {action.icon} {action.label}\n </button>\n ))}\n </div>\n </Section>\n\n {/* Recent Dashboards — the one block on this page you act on, so it is\n the only one with a raised surface. */}\n <Section\n headingLevel={2}\n emphasis=\"primary\"\n data-testid=\"home-recent-dashboards\"\n title={tr('bigconsole.home.recentDashboards.title', 'Recent Dashboards')}\n description={tr(\n 'bigconsole.home.recentDashboards.description',\n 'Jump straight back into a board you were working on.'\n )}\n actions={\n <Button variant=\"ghost\" size=\"sm\" onClick={() => navigate('/dashboards')}>\n {tr('bigconsole.home.recentDashboards.viewAll', 'View all')} <ArrowRight size={14} />\n </Button>\n }\n >\n {recentLoading ? (\n <div style={{ textAlign: 'center', padding: 24, color: 'var(--color-text-muted)' }}>\n <Loader2 size={20} className=\"animate-spin\" style={{ margin: '0 auto' }} />\n </div>\n ) : recentDashboards.length === 0 ? (\n <GlassCard treatment=\"insight\" className=\"border-[var(--color-border-seam)]\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={tr('bigconsole.home.recentDashboards.emptyTitle', 'No dashboards yet')}\n description={tr(\n 'bigconsole.home.recentDashboards.emptyDescription',\n 'Create your first dashboard to get started'\n )}\n action={\n <Button onClick={() => navigate('/dashboards')}>\n {tr('bigconsole.home.quickActions.newDashboard', 'New Dashboard')}\n </Button>\n }\n />\n </GlassCard>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {recentDashboards.map((d) => (\n <button\n key={d.id}\n onClick={() => navigate(`/dashboards/${d.id}`)}\n style={{\n textAlign: 'left',\n padding: 12,\n borderRadius: 'var(--radius-card)',\n border: '1px solid var(--color-border-subtle)',\n backgroundColor: 'var(--color-bg-surface)',\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 'var(--space-controlGap)',\n minHeight: 'var(--size-controlHeight-lg)',\n }}\n >\n <div style={{ minWidth: 0 }}>\n <div\n style={{\n fontWeight: 'var(--font-weight-medium)',\n fontSize: 'var(--font-size-body-sm)',\n color: 'var(--color-text-primary)',\n }}\n >\n {d.name}\n </div>\n {d.description && (\n <div style={{ fontSize: 11, color: 'var(--color-text-muted)', marginTop: 2 }}>\n {d.description.slice(0, 80)}\n </div>\n )}\n </div>\n <ArrowRight size={14} style={{ color: 'var(--color-text-muted)' }} />\n </button>\n ))}\n </div>\n )}\n </Section>\n </SectionStack>\n </div>\n );\n});\n\nexport default HomePage;\n"],"mappings":"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"}