@burdenoff/microfe-bigconsole 2026.924.1 → 2026.924.3
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/BigConsoleRoutes.js +137 -138
- package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
- package/dist/bigconsole/assistant/previewController.js +10 -10
- package/dist/bigconsole/assistant/useAssistantPanelShowsPreview.js +25 -0
- package/dist/bigconsole/assistant/useAssistantPanelShowsPreview.js.map +1 -0
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +17 -17
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +32 -32
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +52 -52
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +7 -7
- package/dist/bigconsole/components/dashboard/DashboardStatusPill.js +53 -0
- package/dist/bigconsole/components/dashboard/DashboardStatusPill.js.map +1 -0
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +60 -60
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +21 -21
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +30 -30
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +36 -36
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +34 -34
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +38 -38
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +121 -121
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +22 -22
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +46 -46
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +53 -53
- package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +47 -47
- package/dist/bigconsole/components/dashboard/index.js +1 -0
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +35 -35
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +18 -18
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +20 -20
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +30 -29
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +48 -48
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +103 -103
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +35 -35
- package/dist/bigconsole/components/overview/DashboardGuide.js +214 -0
- package/dist/bigconsole/components/overview/DashboardGuide.js.map +1 -0
- package/dist/bigconsole/components/overview/DataHealthCard.js +97 -0
- package/dist/bigconsole/components/overview/DataHealthCard.js.map +1 -0
- package/dist/bigconsole/components/overview/OverviewQuickActions.js +32 -0
- package/dist/bigconsole/components/overview/OverviewQuickActions.js.map +1 -0
- package/dist/bigconsole/components/overview/OverviewStatCard.js +57 -0
- package/dist/bigconsole/components/overview/OverviewStatCard.js.map +1 -0
- package/dist/bigconsole/components/overview/RecentDashboardsPanel.js +107 -0
- package/dist/bigconsole/components/overview/RecentDashboardsPanel.js.map +1 -0
- package/dist/bigconsole/components/overview/dashboardGuideSteps.js +119 -0
- package/dist/bigconsole/components/overview/dashboardGuideSteps.js.map +1 -0
- package/dist/bigconsole/components/overview/index.js +8 -0
- package/dist/bigconsole/components/overview/overviewModel.js +119 -0
- package/dist/bigconsole/components/overview/overviewModel.js.map +1 -0
- package/dist/bigconsole/components/overview/useOverviewData.js +48 -0
- package/dist/bigconsole/components/overview/useOverviewData.js.map +1 -0
- package/dist/bigconsole/components/parser/DataSinkSelector.js +40 -40
- package/dist/bigconsole/components/parser/ImportParserDialog.js +127 -127
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +51 -51
- package/dist/bigconsole/components/preview/AiPreviewContent.js +5 -5
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +62 -61
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js.map +1 -1
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +82 -81
- package/dist/bigconsole/components/preview/AiPreviewPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +13 -13
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +70 -70
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +28 -28
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +25 -25
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +48 -48
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +46 -46
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +61 -61
- package/dist/bigconsole/components/widgets/form/FormWidget.js +36 -36
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +42 -42
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +25 -25
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +21 -21
- package/dist/bigconsole/components/widgets/list/ListConfig.js +30 -30
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +38 -38
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +9 -9
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +9 -9
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +49 -49
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +39 -39
- package/dist/bigconsole/components/widgets/table/TableConfig.js +73 -73
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +64 -64
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +10 -10
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +68 -68
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/pages/AdminPage.js +136 -136
- package/dist/bigconsole/pages/DashboardBuilderPage.js +10 -10
- package/dist/bigconsole/pages/DashboardViewPage.js +61 -61
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +327 -348
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +5 -5
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +10 -10
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +83 -83
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +11 -11
- package/dist/bigconsole/pages/DataSourcesPage.js +5 -5
- package/dist/bigconsole/pages/InsightsPage.js +315 -315
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/OverviewPage.js +244 -0
- package/dist/bigconsole/pages/OverviewPage.js.map +1 -0
- package/dist/bigconsole/pages/ParserBuilderPage.js +5 -5
- package/dist/bigconsole/pages/ParserViewPage.js +98 -98
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +8 -8
- package/dist/bigconsole/pages/PipelineViewPage.js +46 -46
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +80 -80
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.js +70 -70
- package/dist/bigconsole/pages/WidgetDemoPage.js +42 -42
- package/dist/bigconsole/pages/WorkflowViewPage.js +200 -200
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +78 -78
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +34 -34
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +79 -79
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js +46 -46
- package/dist/bigconsole/utils/createDialogParam.js +14 -0
- package/dist/bigconsole/utils/createDialogParam.js.map +1 -0
- package/dist/generated/global-operations.js +1 -1
- package/dist/generated/wspace-operations.js +285 -222
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/shared/hooks/useTr.js +10 -7
- package/dist/shared/hooks/useTr.js.map +1 -1
- package/package.json +1 -1
- package/dist/bigconsole/pages/HomePage.js +0 -318
- package/dist/bigconsole/pages/HomePage.js.map +0 -1
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { useCallback as e } from "react";
|
|
2
2
|
import { useI18n as t } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
3
3
|
//#region src/shared/hooks/useTr.ts
|
|
4
|
-
function n() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
function n(e, t) {
|
|
5
|
+
return t ? Object.entries(t).reduce((e, [t, n]) => e.replace(RegExp(`\\{\\{${t}\\}\\}`, "g"), () => String(n)), e) : e;
|
|
6
|
+
}
|
|
7
|
+
function r() {
|
|
8
|
+
let { t: r } = t();
|
|
9
|
+
return e((e, t, i) => {
|
|
10
|
+
let a = r(e);
|
|
11
|
+
return n(a === e ? t : a, i);
|
|
12
|
+
}, [r]);
|
|
10
13
|
}
|
|
11
14
|
//#endregion
|
|
12
|
-
export {
|
|
15
|
+
export { r as useTr };
|
|
13
16
|
|
|
14
17
|
//# sourceMappingURL=useTr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTr.js","names":[],"sources":["../../../src/shared/hooks/useTr.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\n/**\n * useTr — translation hook with fallback semantics.\n *\n * Wraps `useI18n().t()` so that when a key has no translation (i.e. the\n * provider returns the key itself), the caller's English fallback is used\n * instead. This keeps consumer call sites consistent and avoids leaking\n * untranslated keys into the UI.\n *\n * Supports optional interpolation params using `{{key}}` placeholders.\n *\n * @example\n * const tr = useTr();\n * return <h1>{tr('bigconsole.dashboards.title', 'Dashboards')}</h1>;\n * return <p>{tr('bigconsole.delete.confirm', 'Delete {{count}} items?', { count: 5 })}</p>;\n */\nexport function useTr(): (key: string, fallback: string, params?: Record<string, string | number>) => string {\n const { t } = useI18n();\n return useCallback(\n (key: string, fallback: string, params?: Record<string, string | number>): string => {\n const translated = t(key);\n
|
|
1
|
+
{"version":3,"file":"useTr.js","names":[],"sources":["../../../src/shared/hooks/useTr.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\n/**\n * Replace `{{key}}` placeholders with their values.\n *\n * Values are inserted literally: a replacer function is used because a plain\n * replacement string would interpret `$&`, `$$`, `` $` `` and `$'` inside\n * user-provided values (e.g. a dashboard named \"Cost $$ tracker\").\n */\nexport function interpolateParams(text: string, params?: Record<string, string | number>): string {\n if (!params) return text;\n return Object.entries(params).reduce(\n (str, [k, v]) => str.replace(new RegExp(`\\\\{\\\\{${k}\\\\}\\\\}`, 'g'), () => String(v)),\n text\n );\n}\n\n/**\n * useTr — translation hook with fallback semantics.\n *\n * Wraps `useI18n().t()` so that when a key has no translation (i.e. the\n * provider returns the key itself), the caller's English fallback is used\n * instead. This keeps consumer call sites consistent and avoids leaking\n * untranslated keys into the UI.\n *\n * Supports optional interpolation params using `{{key}}` placeholders.\n *\n * @example\n * const tr = useTr();\n * return <h1>{tr('bigconsole.dashboards.title', 'Dashboards')}</h1>;\n * return <p>{tr('bigconsole.delete.confirm', 'Delete {{count}} items?', { count: 5 })}</p>;\n */\nexport function useTr(): (key: string, fallback: string, params?: Record<string, string | number>) => string {\n const { t } = useI18n();\n return useCallback(\n (key: string, fallback: string, params?: Record<string, string | number>): string => {\n const translated = t(key);\n return interpolateParams(translated === key ? fallback : translated, params);\n },\n [t]\n );\n}\n"],"mappings":";;;AAUA,SAAgB,EAAkB,GAAc,GAAkD;AAEhG,QADK,IACE,OAAO,QAAQ,EAAO,CAAC,QAC3B,GAAK,CAAC,GAAG,OAAO,EAAI,QAAY,OAAO,SAAS,EAAE,SAAS,IAAI,QAAQ,OAAO,EAAE,CAAC,EAClF,EACD,GAJmB;;AAsBtB,SAAgB,IAA6F;CAC3G,IAAM,EAAE,SAAM,GAAS;AACvB,QAAO,GACJ,GAAa,GAAkB,MAAqD;EACnF,IAAM,IAAa,EAAE,EAAI;AACzB,SAAO,EAAkB,MAAe,IAAM,IAAW,GAAY,EAAO;IAE9E,CAAC,EAAE,CACJ"}
|
package/package.json
CHANGED
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
import { useAppNavigate as e } from "../contexts/NavigationContext.js";
|
|
2
|
-
import "../contexts/index.js";
|
|
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";
|
|
12
|
-
//#region src/bigconsole/pages/HomePage.tsx
|
|
13
|
-
var S = "default", C = d`
|
|
14
|
-
query HomepageStats($globalConsoleId: ID!) {
|
|
15
|
-
listDashboards(first: 0) {
|
|
16
|
-
totalCount
|
|
17
|
-
}
|
|
18
|
-
listDataSinks(first: 0) {
|
|
19
|
-
totalCount
|
|
20
|
-
}
|
|
21
|
-
listParsers(filter: { consoleId: $globalConsoleId }, first: 0) {
|
|
22
|
-
totalCount
|
|
23
|
-
}
|
|
24
|
-
listPipelines(filter: { consoleId: $globalConsoleId }, first: 0) {
|
|
25
|
-
totalCount
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
`, w = d`
|
|
29
|
-
query RecentDashboards {
|
|
30
|
-
listDashboards(first: 5, sortBy: UPDATED_AT, sortOrder: DESC) {
|
|
31
|
-
edges {
|
|
32
|
-
node {
|
|
33
|
-
id
|
|
34
|
-
name
|
|
35
|
-
description
|
|
36
|
-
updatedAt
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
`, T = r(function({ icon: e, label: t, count: n, loading: r, path: i, onNavigate: a, hero: o = !1 }) {
|
|
42
|
-
return /* @__PURE__ */ b(g, {
|
|
43
|
-
treatment: o ? "glass" : "metric",
|
|
44
|
-
glow: o,
|
|
45
|
-
className: "border-[var(--color-border-seam)] p-0",
|
|
46
|
-
children: /* @__PURE__ */ x("button", {
|
|
47
|
-
type: "button",
|
|
48
|
-
onClick: () => a(i),
|
|
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)]",
|
|
50
|
-
children: [/* @__PURE__ */ x("div", {
|
|
51
|
-
className: "flex items-center gap-2",
|
|
52
|
-
children: [/* @__PURE__ */ b("div", {
|
|
53
|
-
style: { color: "var(--color-action-primary-bg)" },
|
|
54
|
-
children: e
|
|
55
|
-
}), /* @__PURE__ */ b("span", {
|
|
56
|
-
style: {
|
|
57
|
-
fontSize: "var(--font-size-body-sm)",
|
|
58
|
-
color: "var(--color-text-secondary)"
|
|
59
|
-
},
|
|
60
|
-
children: t
|
|
61
|
-
})]
|
|
62
|
-
}), /* @__PURE__ */ b("div", {
|
|
63
|
-
className: "tabular-nums",
|
|
64
|
-
style: {
|
|
65
|
-
fontSize: "var(--font-size-heading-h4)",
|
|
66
|
-
fontWeight: "var(--font-weight-bold)",
|
|
67
|
-
color: "var(--color-text-primary)"
|
|
68
|
-
},
|
|
69
|
-
children: r ? /* @__PURE__ */ b(u, {
|
|
70
|
-
size: 20,
|
|
71
|
-
className: "animate-spin"
|
|
72
|
-
}) : n ?? 0
|
|
73
|
-
})]
|
|
74
|
-
})
|
|
75
|
-
});
|
|
76
|
-
}), E = r(function() {
|
|
77
|
-
let r = e(), { t: d } = p(), E = i((e, t) => {
|
|
78
|
-
let n = d(e);
|
|
79
|
-
return n === e ? t : n;
|
|
80
|
-
}, [d]), { data: D, loading: O } = f(C, {
|
|
81
|
-
variables: { globalConsoleId: S },
|
|
82
|
-
fetchPolicy: "cache-and-network"
|
|
83
|
-
}), { data: k, loading: A } = f(w, { fetchPolicy: "cache-and-network" }), j = k?.listDashboards?.edges?.map((e) => e.node) || [];
|
|
84
|
-
return /* @__PURE__ */ b("div", {
|
|
85
|
-
style: {
|
|
86
|
-
minHeight: "100vh",
|
|
87
|
-
backgroundColor: "var(--color-bg-canvas)"
|
|
88
|
-
},
|
|
89
|
-
children: /* @__PURE__ */ x(n, {
|
|
90
|
-
className: "mx-auto max-w-[960px] p-[var(--space-pagePadding)]",
|
|
91
|
-
children: [
|
|
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",
|
|
94
|
-
children: [
|
|
95
|
-
/* @__PURE__ */ b(m, { intensity: "subtle" }),
|
|
96
|
-
/* @__PURE__ */ b("h1", {
|
|
97
|
-
style: {
|
|
98
|
-
fontSize: "var(--font-size-heading-h4)",
|
|
99
|
-
fontWeight: "var(--font-weight-bold)",
|
|
100
|
-
color: "var(--color-text-primary)"
|
|
101
|
-
},
|
|
102
|
-
children: /* @__PURE__ */ b(_, { children: "BigConsole" })
|
|
103
|
-
}),
|
|
104
|
-
/* @__PURE__ */ b("p", {
|
|
105
|
-
style: {
|
|
106
|
-
fontSize: "var(--font-size-body-md)",
|
|
107
|
-
color: "var(--color-text-secondary)",
|
|
108
|
-
marginTop: 4
|
|
109
|
-
},
|
|
110
|
-
children: E("bigconsole.home.subtitle", "AI-powered analytics platform")
|
|
111
|
-
})
|
|
112
|
-
]
|
|
113
|
-
}),
|
|
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
|
-
})
|
|
122
|
-
}),
|
|
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", {
|
|
130
|
-
style: {
|
|
131
|
-
display: "grid",
|
|
132
|
-
gridTemplateColumns: "repeat(auto-fit, minmax(min(180px, 100%), 1fr))",
|
|
133
|
-
gap: 12
|
|
134
|
-
},
|
|
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", {
|
|
179
|
-
style: {
|
|
180
|
-
display: "flex",
|
|
181
|
-
gap: 12,
|
|
182
|
-
flexWrap: "wrap"
|
|
183
|
-
},
|
|
184
|
-
children: [
|
|
185
|
-
{
|
|
186
|
-
label: E("bigconsole.home.quickActions.newDashboard", "New Dashboard"),
|
|
187
|
-
path: "/dashboards",
|
|
188
|
-
icon: /* @__PURE__ */ b(l, { size: 14 })
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
label: E("bigconsole.home.quickActions.newDataSink", "New Data Sink"),
|
|
192
|
-
path: "/datasinks/new",
|
|
193
|
-
icon: /* @__PURE__ */ b(o, { size: 14 })
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
label: E("bigconsole.home.quickActions.newParser", "New Parser"),
|
|
197
|
-
path: "/parsers/new",
|
|
198
|
-
icon: /* @__PURE__ */ b(s, { size: 14 })
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
label: E("bigconsole.home.quickActions.newPipeline", "New Pipeline"),
|
|
202
|
-
path: "/pipelines/new",
|
|
203
|
-
icon: /* @__PURE__ */ b(c, { size: 14 })
|
|
204
|
-
}
|
|
205
|
-
].map((e) => /* @__PURE__ */ x("button", {
|
|
206
|
-
onClick: () => r(e.path),
|
|
207
|
-
style: {
|
|
208
|
-
display: "flex",
|
|
209
|
-
alignItems: "center",
|
|
210
|
-
gap: 6,
|
|
211
|
-
padding: "8px 16px",
|
|
212
|
-
borderRadius: "var(--radius-button)",
|
|
213
|
-
border: "1px solid var(--color-border-subtle)",
|
|
214
|
-
backgroundColor: "var(--color-bg-surface)",
|
|
215
|
-
color: "var(--color-text-primary)",
|
|
216
|
-
fontSize: "var(--font-size-body-sm)",
|
|
217
|
-
cursor: "pointer"
|
|
218
|
-
},
|
|
219
|
-
children: [
|
|
220
|
-
e.icon,
|
|
221
|
-
" ",
|
|
222
|
-
e.label
|
|
223
|
-
]
|
|
224
|
-
}, e.path))
|
|
225
|
-
})
|
|
226
|
-
}),
|
|
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"),
|
|
237
|
-
children: [
|
|
238
|
-
E("bigconsole.home.recentDashboards.viewAll", "View all"),
|
|
239
|
-
" ",
|
|
240
|
-
/* @__PURE__ */ b(a, { size: 14 })
|
|
241
|
-
]
|
|
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" }
|
|
253
|
-
})
|
|
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", {
|
|
267
|
-
style: {
|
|
268
|
-
display: "flex",
|
|
269
|
-
flexDirection: "column",
|
|
270
|
-
gap: 8
|
|
271
|
-
},
|
|
272
|
-
children: j.map((e) => /* @__PURE__ */ x("button", {
|
|
273
|
-
onClick: () => r(`/dashboards/${e.id}`),
|
|
274
|
-
style: {
|
|
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)"
|
|
286
|
-
},
|
|
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
|
-
})
|
|
311
|
-
]
|
|
312
|
-
})
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
//#endregion
|
|
316
|
-
export { E as default };
|
|
317
|
-
|
|
318
|
-
//# sourceMappingURL=HomePage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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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"}
|