@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.
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +118 -106
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +54 -50
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderCanvas.js +2 -2
- package/dist/bigconsole/components/builder/BuilderCanvas.js.map +1 -1
- package/dist/bigconsole/components/builder/BuilderTopbar.js +3 -3
- package/dist/bigconsole/components/builder/BuilderTopbar.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js +24 -25
- package/dist/bigconsole/components/builder/inspector/AdvancedSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js +40 -29
- package/dist/bigconsole/components/builder/inspector/AppearanceSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +135 -97
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js +58 -44
- package/dist/bigconsole/components/builder/inspector/GeneralSection.js.map +1 -1
- package/dist/bigconsole/components/common/Section.js +70 -0
- package/dist/bigconsole/components/common/Section.js.map +1 -0
- package/dist/bigconsole/components/common/index.js +2 -0
- package/dist/bigconsole/components/common/sectionStyles.js +42 -0
- package/dist/bigconsole/components/common/sectionStyles.js.map +1 -0
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +209 -193
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +213 -231
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +12 -18
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +109 -102
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +81 -70
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +125 -159
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +25 -23
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +3 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +5 -3
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +170 -284
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +147 -151
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js +45 -53
- package/dist/bigconsole/components/dashboard/LiveBoardBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js +157 -148
- package/dist/bigconsole/components/dashboard/PageTabsManager/PageTabsManager.js.map +1 -1
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +17 -8
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +101 -95
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js +20 -18
- package/dist/bigconsole/components/dashboard/StoreTemplatePicker.js.map +1 -1
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js +26 -58
- package/dist/bigconsole/components/dashboard/TemplateSetupBanner.js.map +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +307 -231
- package/dist/bigconsole/components/dashboard/WidgetPalette.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +29 -29
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkCard.js +78 -79
- package/dist/bigconsole/components/datasink/DataSinkCard.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js +33 -34
- package/dist/bigconsole/components/datasink/DataSinkDataViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +79 -56
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +75 -65
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +1 -1
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js +20 -19
- package/dist/bigconsole/components/datasink/DataSinkTableViewer.js.map +1 -1
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js +127 -171
- package/dist/bigconsole/components/datasink/ExportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +263 -243
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js +65 -66
- package/dist/bigconsole/components/datasink/LinkedParsersPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js +121 -127
- package/dist/bigconsole/components/datasink/LinkedWorkflowsPanel.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +33 -26
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js.map +1 -1
- package/dist/bigconsole/components/datasink/SetupStateBadge.js +3 -3
- package/dist/bigconsole/components/datasink/SetupStateBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js +95 -95
- package/dist/bigconsole/components/datasink/WorkflowStatusPanel.js.map +1 -1
- package/dist/bigconsole/components/parser/DataSinkSelector.js +154 -123
- package/dist/bigconsole/components/parser/DataSinkSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ExpressionEditor.js +3 -3
- package/dist/bigconsole/components/parser/ExpressionEditor.js.map +1 -1
- package/dist/bigconsole/components/parser/ImportParserDialog.js +235 -275
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserCard.js +133 -114
- package/dist/bigconsole/components/parser/ParserCard.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +191 -174
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserStatusBadge.js +2 -2
- package/dist/bigconsole/components/parser/ParserStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserTypeBadge.js +4 -4
- package/dist/bigconsole/components/parser/ParserTypeBadge.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +134 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js +77 -64
- package/dist/bigconsole/components/pipeline/PipelineDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js +7 -10
- package/dist/bigconsole/components/pipeline/PipelineStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewContent.js +31 -32
- package/dist/bigconsole/components/preview/AiPreviewContent.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +152 -106
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +193 -152
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/previewShared.js +41 -23
- package/dist/bigconsole/components/preview/previewShared.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +342 -308
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js.map +1 -1
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +262 -238
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +783 -867
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js +7 -5
- package/dist/bigconsole/components/widgets/WidgetErrorBoundary.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +7 -8
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetRegistry.js +4 -4
- package/dist/bigconsole/components/widgets/WidgetRegistry.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +8 -7
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js +1 -1
- package/dist/bigconsole/components/widgets/adaptive-card/AdaptiveCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +2 -2
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +11 -5
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +19 -15
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js.map +1 -1
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +154 -102
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js +36 -32
- package/dist/bigconsole/components/widgets/gauge/CircularGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +85 -60
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js +64 -35
- package/dist/bigconsole/components/widgets/gauge/GaugeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js +46 -45
- package/dist/bigconsole/components/widgets/gauge/LinearGauge.js.map +1 -1
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +35 -24
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js +2 -2
- package/dist/bigconsole/components/widgets/iframe-widget/IframeWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +4 -4
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js +153 -90
- package/dist/bigconsole/components/widgets/kpi-comparison/KPIComparisonWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListConfig.js +8 -2
- package/dist/bigconsole/components/widgets/list/ListConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js +1 -1
- package/dist/bigconsole/components/widgets/list/ListItem.js.map +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js +1 -1
- package/dist/bigconsole/components/widgets/map-widget/MapWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +14 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +112 -89
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +21 -13
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/index.js +4 -4
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +3 -3
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +34 -25
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js +129 -114
- package/dist/bigconsole/components/widgets/progress/ProgressWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js +3 -3
- package/dist/bigconsole/components/widgets/retention/RetentionWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +6 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/ErrorState.js +7 -5
- package/dist/bigconsole/components/widgets/states/ErrorState.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/LoadingState.js +5 -4
- package/dist/bigconsole/components/widgets/states/LoadingState.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableConfig.js +10 -4
- package/dist/bigconsole/components/widgets/table/TableConfig.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js +1 -1
- package/dist/bigconsole/components/widgets/table/TableWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js +1 -1
- package/dist/bigconsole/components/widgets/text-widget/TextWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js +3 -3
- package/dist/bigconsole/components/widgets/timeline/TimelineWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js +2 -2
- package/dist/bigconsole/components/widgets/utils/conditionalFormat.js.map +1 -1
- package/dist/bigconsole/components/widgets/utils/targetProgress.js +13 -0
- package/dist/bigconsole/components/widgets/utils/targetProgress.js.map +1 -0
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +112 -85
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js +28 -20
- package/dist/bigconsole/components/widgets/widget-actions/WidgetActions.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowCard.js +92 -77
- package/dist/bigconsole/components/workflow/WorkflowCard.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js +70 -51
- package/dist/bigconsole/components/workflow/WorkflowDeleteDialog.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js +16 -17
- package/dist/bigconsole/components/workflow/WorkflowStatusBadge.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +6 -4
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js.map +1 -1
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +360 -338
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useModalFocusTrap.js +53 -0
- package/dist/bigconsole/hooks/useModalFocusTrap.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.js +209 -203
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +126 -120
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +838 -800
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +263 -315
- package/dist/bigconsole/pages/DataParsersPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +301 -341
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +346 -339
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +356 -458
- package/dist/bigconsole/pages/DataSinksPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSourcesPage.js +7 -2
- package/dist/bigconsole/pages/DataSourcesPage.js.map +1 -1
- package/dist/bigconsole/pages/HomePage.js +186 -193
- package/dist/bigconsole/pages/HomePage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +887 -740
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserBuilderPage.js +679 -637
- package/dist/bigconsole/pages/ParserBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/ParserViewPage.js +368 -342
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +537 -444
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +412 -377
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +248 -298
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +251 -153
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +381 -371
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +171 -286
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- 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 {
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
40
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
50
|
+
children: [/* @__PURE__ */ x("div", {
|
|
49
51
|
className: "flex items-center gap-2",
|
|
50
|
-
children: [/* @__PURE__ */
|
|
52
|
+
children: [/* @__PURE__ */ b("div", {
|
|
51
53
|
style: { color: "var(--color-action-primary-bg)" },
|
|
52
54
|
children: e
|
|
53
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
}),
|
|
75
|
-
let
|
|
76
|
-
let n =
|
|
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
|
-
}, [
|
|
79
|
-
variables: { globalConsoleId:
|
|
80
|
+
}, [d]), { data: D, loading: O } = f(C, {
|
|
81
|
+
variables: { globalConsoleId: S },
|
|
80
82
|
fetchPolicy: "cache-and-network"
|
|
81
|
-
}), { data:
|
|
82
|
-
return /* @__PURE__ */
|
|
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__ */
|
|
88
|
-
|
|
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__ */
|
|
95
|
-
className: "relative
|
|
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__ */
|
|
98
|
-
/* @__PURE__ */
|
|
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__ */
|
|
102
|
+
children: /* @__PURE__ */ b(_, { children: "BigConsole" })
|
|
105
103
|
}),
|
|
106
|
-
/* @__PURE__ */
|
|
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:
|
|
110
|
+
children: E("bigconsole.home.subtitle", "AI-powered analytics platform")
|
|
113
111
|
})
|
|
114
112
|
]
|
|
115
113
|
}),
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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__ */
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
marginBottom: 12
|
|
131
|
+
display: "grid",
|
|
132
|
+
gridTemplateColumns: "repeat(auto-fit, minmax(min(180px, 100%), 1fr))",
|
|
133
|
+
gap: 12
|
|
171
134
|
},
|
|
172
|
-
children:
|
|
173
|
-
|
|
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:
|
|
186
|
+
label: E("bigconsole.home.quickActions.newDashboard", "New Dashboard"),
|
|
182
187
|
path: "/dashboards",
|
|
183
|
-
icon: /* @__PURE__ */
|
|
188
|
+
icon: /* @__PURE__ */ b(l, { size: 14 })
|
|
184
189
|
},
|
|
185
190
|
{
|
|
186
|
-
label:
|
|
191
|
+
label: E("bigconsole.home.quickActions.newDataSink", "New Data Sink"),
|
|
187
192
|
path: "/datasinks/new",
|
|
188
|
-
icon: /* @__PURE__ */
|
|
193
|
+
icon: /* @__PURE__ */ b(o, { size: 14 })
|
|
189
194
|
},
|
|
190
195
|
{
|
|
191
|
-
label:
|
|
196
|
+
label: E("bigconsole.home.quickActions.newParser", "New Parser"),
|
|
192
197
|
path: "/parsers/new",
|
|
193
|
-
icon: /* @__PURE__ */
|
|
198
|
+
icon: /* @__PURE__ */ b(s, { size: 14 })
|
|
194
199
|
},
|
|
195
200
|
{
|
|
196
|
-
label:
|
|
201
|
+
label: E("bigconsole.home.quickActions.newPipeline", "New Pipeline"),
|
|
197
202
|
path: "/pipelines/new",
|
|
198
|
-
icon: /* @__PURE__ */
|
|
203
|
+
icon: /* @__PURE__ */ b(c, { size: 14 })
|
|
199
204
|
}
|
|
200
|
-
].map((e) => /* @__PURE__ */
|
|
201
|
-
onClick: () =>
|
|
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__ */
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
|
|
238
|
+
E("bigconsole.home.recentDashboards.viewAll", "View all"),
|
|
252
239
|
" ",
|
|
253
|
-
/* @__PURE__ */
|
|
240
|
+
/* @__PURE__ */ b(a, { size: 14 })
|
|
254
241
|
]
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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
|
-
|
|
296
|
-
|
|
269
|
+
flexDirection: "column",
|
|
270
|
+
gap: 8
|
|
297
271
|
},
|
|
298
|
-
children:
|
|
299
|
-
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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:
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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 {
|
|
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":"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"}
|
|
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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"}
|