@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
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { useAppNavigate as e } from "../contexts/NavigationContext.js";
|
|
2
|
+
import "../contexts/index.js";
|
|
3
|
+
import { BIGCONSOLE_PERMISSIONS as t } from "../../constants/permissions.js";
|
|
4
|
+
import { useTr as n } from "../../shared/hooks/useTr.js";
|
|
5
|
+
import { CREATE_DASHBOARD_PATH as r, buildAiAlternative as ee, buildDashboardGuideSteps as te } from "../components/overview/dashboardGuideSteps.js";
|
|
6
|
+
import ne from "../components/overview/DashboardGuide.js";
|
|
7
|
+
import i from "../components/overview/DataHealthCard.js";
|
|
8
|
+
import a from "../components/overview/OverviewQuickActions.js";
|
|
9
|
+
import o from "../components/overview/OverviewStatCard.js";
|
|
10
|
+
import s from "../components/overview/RecentDashboardsPanel.js";
|
|
11
|
+
import { formatRelativeTime as c, resolveGuideDefaultExpanded as l, summarizeDashboards as u, summarizeDataSinks as d } from "../components/overview/overviewModel.js";
|
|
12
|
+
import { useOverviewData as f } from "../components/overview/useOverviewData.js";
|
|
13
|
+
import "../components/overview/index.js";
|
|
14
|
+
import { memo as p, useCallback as m, useEffect as re, useMemo as h, useRef as ie, useState as ae } from "react";
|
|
15
|
+
import { usePermissions as oe } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
16
|
+
import { AlertTriangle as se, Database as g, FileCode2 as _, LayoutDashboard as v, Plus as ce, RefreshCw as y, Sparkles as b } from "lucide-react";
|
|
17
|
+
import { AuroraBackground as le, Button as x, GradientText as ue, PagePurpose as de } from "@burdenoff/fe-libs/ui";
|
|
18
|
+
import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
|
|
19
|
+
import { useI18n as T } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
20
|
+
import { PageHeader as E } from "@burdenoff/fe-libs/chrome";
|
|
21
|
+
import { MotionItem as D, MotionList as O, MotionPage as k } from "@burdenoff/fe-libs/shared/motion";
|
|
22
|
+
//#region src/bigconsole/pages/OverviewPage.tsx
|
|
23
|
+
var A = p(function() {
|
|
24
|
+
let p = e(), A = n(), { locale: j } = T(), { hasPermission: M } = oe(), { permissionsLoading: N, dashboards: P, dataSinks: F, refetchAll: I } = f(), L = m((e) => p(e), [p]), R = h(() => u(P.data), [P.data]), z = h(() => d(F.data), [F.data]), B = m((e) => c(e, /* @__PURE__ */ new Date(), A, j), [A, j]), V = m((e) => !N && M(e), [N, M]), H = h(() => te({
|
|
25
|
+
tr: A,
|
|
26
|
+
latestDashboard: R.latest,
|
|
27
|
+
permissions: {
|
|
28
|
+
canCreateDataSink: V(t.DATASINK_CREATE),
|
|
29
|
+
canReadDataSinks: V(t.DATASINK_READ),
|
|
30
|
+
canCreateWorkflow: V(t.WORKFLOW_CREATE),
|
|
31
|
+
canCreateParser: V(t.PARSER_CREATE),
|
|
32
|
+
canCreateDashboard: V(t.DASHBOARD_CREATE),
|
|
33
|
+
canReadDashboards: V(t.DASHBOARD_READ),
|
|
34
|
+
canBuildDashboards: V(t.DASHBOARD_UPDATE) && V(t.WIDGET_CREATE),
|
|
35
|
+
canGenerateWithAi: V(t.PROMPT_CREATE)
|
|
36
|
+
}
|
|
37
|
+
}), [
|
|
38
|
+
A,
|
|
39
|
+
V,
|
|
40
|
+
R.latest
|
|
41
|
+
]), fe = h(() => ee(A, V(t.PROMPT_CREATE)), [A, V]), U = h(() => [
|
|
42
|
+
{
|
|
43
|
+
permission: t.DASHBOARD_CREATE,
|
|
44
|
+
action: {
|
|
45
|
+
id: "create-dashboard",
|
|
46
|
+
label: A("bigconsole.overview.actions.createDashboard", "Create Dashboard"),
|
|
47
|
+
icon: /* @__PURE__ */ C(ce, {
|
|
48
|
+
className: "size-4",
|
|
49
|
+
"aria-hidden": "true"
|
|
50
|
+
}),
|
|
51
|
+
path: r,
|
|
52
|
+
primary: !0
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
permission: t.DATASINK_CREATE,
|
|
57
|
+
action: {
|
|
58
|
+
id: "new-data-sink",
|
|
59
|
+
label: A("bigconsole.overview.actions.newDataSink", "New Data Sink"),
|
|
60
|
+
icon: /* @__PURE__ */ C(g, {
|
|
61
|
+
className: "size-4",
|
|
62
|
+
"aria-hidden": "true"
|
|
63
|
+
}),
|
|
64
|
+
path: "/datasinks/new"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
permission: t.PARSER_CREATE,
|
|
69
|
+
action: {
|
|
70
|
+
id: "new-parser",
|
|
71
|
+
label: A("bigconsole.overview.actions.newParser", "New Parser"),
|
|
72
|
+
icon: /* @__PURE__ */ C(_, {
|
|
73
|
+
className: "size-4",
|
|
74
|
+
"aria-hidden": "true"
|
|
75
|
+
}),
|
|
76
|
+
path: "/parsers/new"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
permission: t.PROMPT_CREATE,
|
|
81
|
+
action: {
|
|
82
|
+
id: "generate-with-ai",
|
|
83
|
+
label: A("bigconsole.overview.actions.generateWithAi", "Generate with AI Insights"),
|
|
84
|
+
icon: /* @__PURE__ */ C(b, {
|
|
85
|
+
className: "size-4",
|
|
86
|
+
"aria-hidden": "true"
|
|
87
|
+
}),
|
|
88
|
+
path: "/insights"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
].filter(({ permission: e }) => V(e)).map(({ action: e }) => e), [A, V]), [pe, W] = ae(!1), G = ie(!1), K = l({
|
|
92
|
+
permissionsLoading: N,
|
|
93
|
+
dashboardsAllowed: P.allowed,
|
|
94
|
+
dashboardsLoading: P.loading,
|
|
95
|
+
dashboardsTotal: R.total,
|
|
96
|
+
dashboardsFailed: !!P.error
|
|
97
|
+
});
|
|
98
|
+
re(() => {
|
|
99
|
+
G.current || K === null || (G.current = !0, W(K));
|
|
100
|
+
}, [K]);
|
|
101
|
+
let me = m(() => {
|
|
102
|
+
G.current = !0, W((e) => !e);
|
|
103
|
+
}, []), he = h(() => ({
|
|
104
|
+
title: A("bigconsole.overview.guide.title", "How to create a complete dashboard, end to end"),
|
|
105
|
+
subtitle: A("bigconsole.overview.guide.subtitle", "Follow these steps in order — each button takes you to the right place."),
|
|
106
|
+
show: A("bigconsole.overview.guide.show", "Show guide"),
|
|
107
|
+
hide: A("bigconsole.overview.guide.hide", "Hide guide"),
|
|
108
|
+
optional: A("bigconsole.overview.guide.optional", "Optional"),
|
|
109
|
+
flow: [
|
|
110
|
+
A("bigconsole.overview.guide.flow.dataSink", "Data Sink"),
|
|
111
|
+
A("bigconsole.overview.guide.flow.parser", "Parser (optional)"),
|
|
112
|
+
A("bigconsole.overview.guide.flow.dashboard", "Dashboard"),
|
|
113
|
+
A("bigconsole.overview.guide.flow.widgets", "Widgets"),
|
|
114
|
+
A("bigconsole.overview.guide.flow.share", "Share")
|
|
115
|
+
],
|
|
116
|
+
stepPrefix: (e) => A("bigconsole.overview.guide.stepPrefix", "Step {{number}}:", { number: e })
|
|
117
|
+
}), [A]), q = P.loading && P.data !== void 0 || F.loading && F.data !== void 0, ge = N || P.allowed || F.allowed, J = z.attentionCount, Y = !P.loading && !!P.error && R.total === void 0, X = !F.loading && !!F.error && z.total === void 0, Z = A("bigconsole.overview.kpis.unavailable", "Currently unavailable"), Q = U.length > 0 ? /* @__PURE__ */ C(a, {
|
|
118
|
+
actions: U,
|
|
119
|
+
onNavigate: L
|
|
120
|
+
}) : null, $ = F.allowed ? /* @__PURE__ */ C(i, {
|
|
121
|
+
summary: z,
|
|
122
|
+
loading: F.loading,
|
|
123
|
+
error: F.error,
|
|
124
|
+
canCreate: V(t.DATASINK_CREATE),
|
|
125
|
+
onRetry: F.refetch,
|
|
126
|
+
onNavigate: L,
|
|
127
|
+
formatUpdated: B
|
|
128
|
+
}) : null;
|
|
129
|
+
return /* @__PURE__ */ C(k, {
|
|
130
|
+
className: "min-h-screen bg-bg-canvas p-[var(--space-pagePadding)]",
|
|
131
|
+
children: /* @__PURE__ */ w("div", {
|
|
132
|
+
"data-testid": "overview-page",
|
|
133
|
+
className: "space-y-6",
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ w("div", {
|
|
136
|
+
className: "relative overflow-hidden rounded-card px-2 pt-1",
|
|
137
|
+
children: [/* @__PURE__ */ C(le, { intensity: "subtle" }), /* @__PURE__ */ C(E, {
|
|
138
|
+
title: /* @__PURE__ */ w(S, { children: [
|
|
139
|
+
/* @__PURE__ */ C(ue, { children: A("bigconsole.overview.titleNoun", "BigConsole") }),
|
|
140
|
+
" ",
|
|
141
|
+
A("bigconsole.overview.titleSuffix", "Overview")
|
|
142
|
+
] }),
|
|
143
|
+
description: A("bigconsole.overview.description", "Your dashboards and data at a glance"),
|
|
144
|
+
actions: /* @__PURE__ */ w(x, {
|
|
145
|
+
type: "button",
|
|
146
|
+
variant: "outline",
|
|
147
|
+
size: "sm",
|
|
148
|
+
onClick: I,
|
|
149
|
+
disabled: q || N,
|
|
150
|
+
className: "min-h-11 sm:min-h-9",
|
|
151
|
+
"data-testid": "overview-refresh",
|
|
152
|
+
children: [/* @__PURE__ */ C(y, {
|
|
153
|
+
className: `size-4 ${q ? "motion-safe:animate-spin" : ""}`,
|
|
154
|
+
"aria-hidden": "true"
|
|
155
|
+
}), A("bigconsole.overview.refresh", "Refresh")]
|
|
156
|
+
})
|
|
157
|
+
})]
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ C(de, {
|
|
160
|
+
icon: /* @__PURE__ */ C(v, { className: "size-4" }),
|
|
161
|
+
className: "max-w-[80ch]",
|
|
162
|
+
children: A("bigconsole.overview.purpose", "Bring data into a Data Sink, optionally reshape it with a Parser, and turn it into live dashboards your team can share.")
|
|
163
|
+
}),
|
|
164
|
+
/* @__PURE__ */ C(ne, {
|
|
165
|
+
steps: H,
|
|
166
|
+
alternative: fe,
|
|
167
|
+
labels: he,
|
|
168
|
+
expanded: pe,
|
|
169
|
+
onToggle: me,
|
|
170
|
+
onNavigate: L
|
|
171
|
+
}),
|
|
172
|
+
ge ? /* @__PURE__ */ w(O, {
|
|
173
|
+
"data-tour": "bigconsole-overview-stats",
|
|
174
|
+
"data-testid": "overview-kpis",
|
|
175
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-3",
|
|
176
|
+
stagger: .06,
|
|
177
|
+
children: [N || P.allowed ? /* @__PURE__ */ C(D, {
|
|
178
|
+
variant: "fadeScale",
|
|
179
|
+
children: /* @__PURE__ */ C(o, {
|
|
180
|
+
title: A("bigconsole.overview.kpis.dashboards", "Dashboards"),
|
|
181
|
+
value: R.total,
|
|
182
|
+
loading: N || P.loading,
|
|
183
|
+
subtitle: Y ? Z : A("bigconsole.overview.kpis.dashboardsSubtitle", "Across this workspace"),
|
|
184
|
+
icon: /* @__PURE__ */ C(v, {}),
|
|
185
|
+
variant: Y ? "warning" : "default",
|
|
186
|
+
onClick: () => L("/dashboards"),
|
|
187
|
+
"data-testid": "overview-kpi-dashboards"
|
|
188
|
+
})
|
|
189
|
+
}) : null, N || F.allowed ? /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C(D, {
|
|
190
|
+
variant: "fadeScale",
|
|
191
|
+
children: /* @__PURE__ */ C(o, {
|
|
192
|
+
title: A("bigconsole.overview.kpis.dataSinks", "Data Sinks"),
|
|
193
|
+
value: z.total,
|
|
194
|
+
loading: N || F.loading,
|
|
195
|
+
subtitle: X ? Z : z.ready === void 0 ? void 0 : A("bigconsole.overview.kpis.dataSinksReady", "{{count}} ready", { count: z.ready }),
|
|
196
|
+
icon: /* @__PURE__ */ C(g, {}),
|
|
197
|
+
variant: X ? "warning" : "default",
|
|
198
|
+
onClick: () => L("/datasinks"),
|
|
199
|
+
"data-testid": "overview-kpi-data-sinks"
|
|
200
|
+
})
|
|
201
|
+
}), /* @__PURE__ */ C(D, {
|
|
202
|
+
variant: "fadeScale",
|
|
203
|
+
children: /* @__PURE__ */ C(o, {
|
|
204
|
+
title: A("bigconsole.overview.kpis.needsAttention", "Needs attention"),
|
|
205
|
+
value: J,
|
|
206
|
+
loading: N || F.loading,
|
|
207
|
+
subtitle: X ? Z : A("bigconsole.overview.kpis.needsAttentionSubtitle", "Data sinks with errors or stale data"),
|
|
208
|
+
icon: /* @__PURE__ */ C(se, {}),
|
|
209
|
+
variant: X || (J ?? 0) > 0 ? "warning" : J === void 0 ? "default" : "success",
|
|
210
|
+
onClick: () => L("/datasinks"),
|
|
211
|
+
"data-testid": "overview-kpi-needs-attention"
|
|
212
|
+
})
|
|
213
|
+
})] }) : null]
|
|
214
|
+
}) : null,
|
|
215
|
+
P.allowed ? /* @__PURE__ */ w("div", {
|
|
216
|
+
className: "grid grid-cols-1 gap-6 xl:grid-cols-3",
|
|
217
|
+
children: [/* @__PURE__ */ C("div", {
|
|
218
|
+
className: "min-w-0 xl:col-span-2",
|
|
219
|
+
children: /* @__PURE__ */ C(s, {
|
|
220
|
+
dashboards: R.recent,
|
|
221
|
+
loading: P.loading,
|
|
222
|
+
error: P.error,
|
|
223
|
+
canCreate: V(t.DASHBOARD_CREATE),
|
|
224
|
+
onRetry: P.refetch,
|
|
225
|
+
onNavigate: L,
|
|
226
|
+
formatUpdated: B,
|
|
227
|
+
createDashboardPath: r
|
|
228
|
+
})
|
|
229
|
+
}), Q || $ ? /* @__PURE__ */ w("div", {
|
|
230
|
+
className: "flex min-w-0 flex-col gap-6",
|
|
231
|
+
children: [Q, $]
|
|
232
|
+
}) : null]
|
|
233
|
+
}) : Q || $ ? /* @__PURE__ */ w("div", {
|
|
234
|
+
className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
|
|
235
|
+
children: [Q, $]
|
|
236
|
+
}) : null
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
//#endregion
|
|
242
|
+
export { A as OverviewPage, A as default };
|
|
243
|
+
|
|
244
|
+
//# sourceMappingURL=OverviewPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewPage.js","names":[],"sources":["../../../src/bigconsole/pages/OverviewPage.tsx"],"sourcesContent":["/**\n * OverviewPage\n *\n * BigConsole home (`/bigconsole`): the dashboards and data at a glance, plus a\n * step-by-step guide to building a complete dashboard. Mirrors the VibeControls\n * product Overview — aurora hero, purpose line, guidance, KPI tiles and a single\n * emphasis panel — while showing only data the backend reports accurately.\n *\n * Every section is gated on its own read permission and loaded by its own\n * operation (see `useOverviewData`), so a caller missing one permission still\n * gets the rest of the page.\n */\n\nimport { type FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { PageHeader } from '@burdenoff/fe-libs/chrome';\nimport { MotionItem, MotionList, MotionPage } from '@burdenoff/fe-libs/shared/motion';\nimport { AuroraBackground, Button, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { AlertTriangle, Database, FileCode2, LayoutDashboard, Plus, RefreshCw, Sparkles } from 'lucide-react';\nimport { BIGCONSOLE_PERMISSIONS } from '../../constants/permissions';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { useAppNavigate } from '../contexts';\nimport {\n CREATE_DASHBOARD_PATH,\n DashboardGuide,\n DataHealthCard,\n OverviewQuickActions,\n OverviewStatCard,\n RecentDashboardsPanel,\n buildAiAlternative,\n buildDashboardGuideSteps,\n formatRelativeTime,\n resolveGuideDefaultExpanded,\n summarizeDashboards,\n summarizeDataSinks,\n useOverviewData,\n type OverviewQuickAction,\n} from '../components/overview';\n\nexport const OverviewPage: FC = memo(function OverviewPage() {\n const navigate = useAppNavigate();\n const tr = useTr();\n const { locale } = useI18n();\n const { hasPermission } = usePermissions();\n const { permissionsLoading, dashboards, dataSinks, refetchAll } = useOverviewData();\n\n const handleNavigate = useCallback((path: string) => navigate(path), [navigate]);\n\n // ---------------------------------------------------------------------------\n // Derived data\n // ---------------------------------------------------------------------------\n\n const dashboardSummary = useMemo(() => summarizeDashboards(dashboards.data), [dashboards.data]);\n const dataSinkSummary = useMemo(() => summarizeDataSinks(dataSinks.data), [dataSinks.data]);\n\n const formatUpdated = useCallback((iso: string) => formatRelativeTime(iso, new Date(), tr, locale), [tr, locale]);\n\n const can = useCallback(\n (permission: string) => !permissionsLoading && hasPermission(permission),\n [permissionsLoading, hasPermission]\n );\n\n const guideSteps = useMemo(\n () =>\n buildDashboardGuideSteps({\n tr,\n latestDashboard: dashboardSummary.latest,\n permissions: {\n canCreateDataSink: can(BIGCONSOLE_PERMISSIONS.DATASINK_CREATE),\n canReadDataSinks: can(BIGCONSOLE_PERMISSIONS.DATASINK_READ),\n canCreateWorkflow: can(BIGCONSOLE_PERMISSIONS.WORKFLOW_CREATE),\n canCreateParser: can(BIGCONSOLE_PERMISSIONS.PARSER_CREATE),\n canCreateDashboard: can(BIGCONSOLE_PERMISSIONS.DASHBOARD_CREATE),\n canReadDashboards: can(BIGCONSOLE_PERMISSIONS.DASHBOARD_READ),\n canBuildDashboards: can(BIGCONSOLE_PERMISSIONS.DASHBOARD_UPDATE) && can(BIGCONSOLE_PERMISSIONS.WIDGET_CREATE),\n canGenerateWithAi: can(BIGCONSOLE_PERMISSIONS.PROMPT_CREATE),\n },\n }),\n [tr, can, dashboardSummary.latest]\n );\n\n const aiAlternative = useMemo(() => buildAiAlternative(tr, can(BIGCONSOLE_PERMISSIONS.PROMPT_CREATE)), [tr, can]);\n\n const quickActions = useMemo<OverviewQuickAction[]>(() => {\n const candidates: Array<{ permission: string; action: OverviewQuickAction }> = [\n {\n permission: BIGCONSOLE_PERMISSIONS.DASHBOARD_CREATE,\n action: {\n id: 'create-dashboard',\n label: tr('bigconsole.overview.actions.createDashboard', 'Create Dashboard'),\n icon: <Plus className=\"size-4\" aria-hidden=\"true\" />,\n path: CREATE_DASHBOARD_PATH,\n primary: true,\n },\n },\n {\n permission: BIGCONSOLE_PERMISSIONS.DATASINK_CREATE,\n action: {\n id: 'new-data-sink',\n label: tr('bigconsole.overview.actions.newDataSink', 'New Data Sink'),\n icon: <Database className=\"size-4\" aria-hidden=\"true\" />,\n path: '/datasinks/new',\n },\n },\n {\n permission: BIGCONSOLE_PERMISSIONS.PARSER_CREATE,\n action: {\n id: 'new-parser',\n label: tr('bigconsole.overview.actions.newParser', 'New Parser'),\n icon: <FileCode2 className=\"size-4\" aria-hidden=\"true\" />,\n path: '/parsers/new',\n },\n },\n {\n permission: BIGCONSOLE_PERMISSIONS.PROMPT_CREATE,\n action: {\n id: 'generate-with-ai',\n label: tr('bigconsole.overview.actions.generateWithAi', 'Generate with AI Insights'),\n icon: <Sparkles className=\"size-4\" aria-hidden=\"true\" />,\n path: '/insights',\n },\n },\n ];\n return candidates.filter(({ permission }) => can(permission)).map(({ action }) => action);\n }, [tr, can]);\n\n // ---------------------------------------------------------------------------\n // Guide: expanded by default only until the workspace has dashboards. The\n // default is applied once, after the first answer, so it never fights a user\n // who has toggled it.\n // ---------------------------------------------------------------------------\n\n const [guideExpanded, setGuideExpanded] = useState(false);\n const guideDefaultApplied = useRef(false);\n const guideDefault = resolveGuideDefaultExpanded({\n permissionsLoading,\n dashboardsAllowed: dashboards.allowed,\n dashboardsLoading: dashboards.loading,\n dashboardsTotal: dashboardSummary.total,\n dashboardsFailed: Boolean(dashboards.error),\n });\n\n useEffect(() => {\n if (guideDefaultApplied.current || guideDefault === null) return;\n guideDefaultApplied.current = true;\n setGuideExpanded(guideDefault);\n }, [guideDefault]);\n\n const handleToggleGuide = useCallback(() => {\n guideDefaultApplied.current = true;\n setGuideExpanded((expanded) => !expanded);\n }, []);\n\n const guideLabels = useMemo(\n () => ({\n title: tr('bigconsole.overview.guide.title', 'How to create a complete dashboard, end to end'),\n subtitle: tr(\n 'bigconsole.overview.guide.subtitle',\n 'Follow these steps in order — each button takes you to the right place.'\n ),\n show: tr('bigconsole.overview.guide.show', 'Show guide'),\n hide: tr('bigconsole.overview.guide.hide', 'Hide guide'),\n optional: tr('bigconsole.overview.guide.optional', 'Optional'),\n flow: [\n tr('bigconsole.overview.guide.flow.dataSink', 'Data Sink'),\n tr('bigconsole.overview.guide.flow.parser', 'Parser (optional)'),\n tr('bigconsole.overview.guide.flow.dashboard', 'Dashboard'),\n tr('bigconsole.overview.guide.flow.widgets', 'Widgets'),\n tr('bigconsole.overview.guide.flow.share', 'Share'),\n ],\n stepPrefix: (stepNumber: number) =>\n tr('bigconsole.overview.guide.stepPrefix', 'Step {{number}}:', { number: stepNumber }),\n }),\n [tr]\n );\n\n // ---------------------------------------------------------------------------\n // Render\n // ---------------------------------------------------------------------------\n\n const refreshing =\n (dashboards.loading && dashboards.data !== undefined) || (dataSinks.loading && dataSinks.data !== undefined);\n const showKpis = permissionsLoading || dashboards.allowed || dataSinks.allowed;\n const attentionCount = dataSinkSummary.attentionCount;\n // A section whose first load failed has no numbers to show; its tiles say so\n // instead of shimmering forever (a Retry that is in flight shows the skeleton).\n // (Apollo reports a rejected operation as `data: null`, so check the summaries.)\n const dashboardsUnavailable =\n !dashboards.loading && Boolean(dashboards.error) && dashboardSummary.total === undefined;\n const dataSinksUnavailable = !dataSinks.loading && Boolean(dataSinks.error) && dataSinkSummary.total === undefined;\n const unavailableLabel = tr('bigconsole.overview.kpis.unavailable', 'Currently unavailable');\n\n const quickActionsCard =\n quickActions.length > 0 ? <OverviewQuickActions actions={quickActions} onNavigate={handleNavigate} /> : null;\n const dataHealthCard = dataSinks.allowed ? (\n <DataHealthCard\n summary={dataSinkSummary}\n loading={dataSinks.loading}\n error={dataSinks.error}\n canCreate={can(BIGCONSOLE_PERMISSIONS.DATASINK_CREATE)}\n onRetry={dataSinks.refetch}\n onNavigate={handleNavigate}\n formatUpdated={formatUpdated}\n />\n ) : null;\n\n return (\n <MotionPage className=\"min-h-screen bg-bg-canvas p-[var(--space-pagePadding)]\">\n <div data-testid=\"overview-page\" className=\"space-y-6\">\n {/* Hero header — the one aurora backdrop on this page. */}\n <div className=\"relative overflow-hidden rounded-card px-2 pt-1\">\n <AuroraBackground intensity=\"subtle\" />\n <PageHeader\n title={\n <>\n <GradientText>{tr('bigconsole.overview.titleNoun', 'BigConsole')}</GradientText>{' '}\n {tr('bigconsole.overview.titleSuffix', 'Overview')}\n </>\n }\n description={tr('bigconsole.overview.description', 'Your dashboards and data at a glance')}\n actions={\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={refetchAll}\n disabled={refreshing || permissionsLoading}\n className=\"min-h-11 sm:min-h-9\"\n data-testid=\"overview-refresh\"\n >\n <RefreshCw className={`size-4 ${refreshing ? 'motion-safe:animate-spin' : ''}`} aria-hidden=\"true\" />\n {tr('bigconsole.overview.refresh', 'Refresh')}\n </Button>\n }\n />\n </div>\n\n <PagePurpose icon={<LayoutDashboard className=\"size-4\" />} className=\"max-w-[80ch]\">\n {tr(\n 'bigconsole.overview.purpose',\n 'Bring data into a Data Sink, optionally reshape it with a Parser, and turn it into live dashboards your team can share.'\n )}\n </PagePurpose>\n\n <DashboardGuide\n steps={guideSteps}\n alternative={aiAlternative}\n labels={guideLabels}\n expanded={guideExpanded}\n onToggle={handleToggleGuide}\n onNavigate={handleNavigate}\n />\n\n {showKpis ? (\n <MotionList\n data-tour=\"bigconsole-overview-stats\"\n data-testid=\"overview-kpis\"\n className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\"\n stagger={0.06}\n >\n {permissionsLoading || dashboards.allowed ? (\n <MotionItem variant=\"fadeScale\">\n <OverviewStatCard\n title={tr('bigconsole.overview.kpis.dashboards', 'Dashboards')}\n value={dashboardSummary.total}\n loading={permissionsLoading || dashboards.loading}\n subtitle={\n dashboardsUnavailable\n ? unavailableLabel\n : tr('bigconsole.overview.kpis.dashboardsSubtitle', 'Across this workspace')\n }\n icon={<LayoutDashboard />}\n variant={dashboardsUnavailable ? 'warning' : 'default'}\n onClick={() => handleNavigate('/dashboards')}\n data-testid=\"overview-kpi-dashboards\"\n />\n </MotionItem>\n ) : null}\n {permissionsLoading || dataSinks.allowed ? (\n <>\n <MotionItem variant=\"fadeScale\">\n <OverviewStatCard\n title={tr('bigconsole.overview.kpis.dataSinks', 'Data Sinks')}\n value={dataSinkSummary.total}\n loading={permissionsLoading || dataSinks.loading}\n subtitle={\n dataSinksUnavailable\n ? unavailableLabel\n : dataSinkSummary.ready === undefined\n ? undefined\n : tr('bigconsole.overview.kpis.dataSinksReady', '{{count}} ready', {\n count: dataSinkSummary.ready,\n })\n }\n icon={<Database />}\n variant={dataSinksUnavailable ? 'warning' : 'default'}\n onClick={() => handleNavigate('/datasinks')}\n data-testid=\"overview-kpi-data-sinks\"\n />\n </MotionItem>\n <MotionItem variant=\"fadeScale\">\n <OverviewStatCard\n title={tr('bigconsole.overview.kpis.needsAttention', 'Needs attention')}\n value={attentionCount}\n loading={permissionsLoading || dataSinks.loading}\n subtitle={\n dataSinksUnavailable\n ? unavailableLabel\n : tr('bigconsole.overview.kpis.needsAttentionSubtitle', 'Data sinks with errors or stale data')\n }\n icon={<AlertTriangle />}\n variant={\n dataSinksUnavailable || (attentionCount ?? 0) > 0\n ? 'warning'\n : attentionCount === undefined\n ? 'default'\n : 'success'\n }\n onClick={() => handleNavigate('/datasinks')}\n data-testid=\"overview-kpi-needs-attention\"\n />\n </MotionItem>\n </>\n ) : null}\n </MotionList>\n ) : null}\n\n {dashboards.allowed ? (\n <div className=\"grid grid-cols-1 gap-6 xl:grid-cols-3\">\n <div className=\"min-w-0 xl:col-span-2\">\n <RecentDashboardsPanel\n dashboards={dashboardSummary.recent}\n loading={dashboards.loading}\n error={dashboards.error}\n canCreate={can(BIGCONSOLE_PERMISSIONS.DASHBOARD_CREATE)}\n onRetry={dashboards.refetch}\n onNavigate={handleNavigate}\n formatUpdated={formatUpdated}\n createDashboardPath={CREATE_DASHBOARD_PATH}\n />\n </div>\n {quickActionsCard || dataHealthCard ? (\n <div className=\"flex min-w-0 flex-col gap-6\">\n {quickActionsCard}\n {dataHealthCard}\n </div>\n ) : null}\n </div>\n ) : quickActionsCard || dataHealthCard ? (\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n {quickActionsCard}\n {dataHealthCard}\n </div>\n ) : null}\n </div>\n </MotionPage>\n );\n});\n\nexport default OverviewPage;\n"],"mappings":"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"}
|
|
@@ -12,9 +12,9 @@ import { useParams as ae } from "react-router";
|
|
|
12
12
|
import { AccessDenied as oe, PermissionButton as se } from "@burdenoff/fe-libs/shared/components";
|
|
13
13
|
import { usePermissions as ce } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
14
14
|
import { AlertCircle as l, ArrowLeft as le, CheckCircle2 as ue, ChevronDown as de, ChevronRight as fe, Code as pe, Download as me, Eye as he, FileCode2 as ge, LayoutDashboard as _e, Loader2 as u, Play as ve, Save as ye, Settings as be, X as xe } from "lucide-react";
|
|
15
|
-
import {
|
|
16
|
-
import { Button as d, PagePurpose as Ce, Stepper as we } from "@burdenoff/fe-libs/ui";
|
|
15
|
+
import { Button as d, PagePurpose as Se, Stepper as Ce } from "@burdenoff/fe-libs/ui";
|
|
17
16
|
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
17
|
+
import { useI18n as we } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
18
18
|
//#region src/bigconsole/pages/ParserBuilderPage.tsx
|
|
19
19
|
var h = "w-full min-w-0 min-h-control-md rounded-md border bg-bg-surface px-3 py-2.5 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-action-primary-bg motion-safe:transition-colors disabled:bg-bg-sunken disabled:cursor-not-allowed disabled:opacity-60";
|
|
20
20
|
function g(e = !1, t = "") {
|
|
@@ -74,7 +74,7 @@ function Ae(e) {
|
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
var b = i(function() {
|
|
77
|
-
let { parserId: i, consoleId: h } = ae(), b = e(), { t: x } =
|
|
77
|
+
let { parserId: i, consoleId: h } = ae(), b = e(), { t: x } = we(), je = s(() => De(x), [x]), S = s(() => Ae(x), [x]), C = je.length, [w, T] = c(0), [E, Me] = c(Te), Ne = h || E || Te, D = i !== "new" && !!i, { hasPermission: Pe, isLoading: Fe } = ce(), Ie = Pe(r.PARSER_READ), Le = Pe(D ? r.PARSER_UPDATE : r.PARSER_CREATE), Re = D ? r.PARSER_UPDATE : r.PARSER_CREATE, O = !h, [k, A] = c({
|
|
78
78
|
name: "",
|
|
79
79
|
outputKey: "",
|
|
80
80
|
description: "",
|
|
@@ -408,13 +408,13 @@ var b = i(function() {
|
|
|
408
408
|
})
|
|
409
409
|
]
|
|
410
410
|
}),
|
|
411
|
-
/* @__PURE__ */ p(
|
|
411
|
+
/* @__PURE__ */ p(Se, {
|
|
412
412
|
className: "max-w-[80ch]",
|
|
413
413
|
children: x("bigconsole.parsers.builder.header.purpose", "A parser maps raw input into structured fields using a JQ or JSONata expression. Write the expression, run it against a sample to confirm the output, and save it once it produces the shape you need — then reuse it across pipelines to normalise any source.")
|
|
414
414
|
}),
|
|
415
415
|
/* @__PURE__ */ p("div", {
|
|
416
416
|
className: "min-w-0 overflow-x-auto",
|
|
417
|
-
children: /* @__PURE__ */ p(
|
|
417
|
+
children: /* @__PURE__ */ p(Ce, {
|
|
418
418
|
steps: je,
|
|
419
419
|
active: w,
|
|
420
420
|
onStepClick: At
|