@burdenoff/microfe-bigconsole 2026.1004.3 → 2026.1004.5
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.d.ts +1 -1
- package/dist/bigconsole/BigConsoleRoutes.d.ts.map +1 -1
- package/dist/bigconsole/BigConsoleRoutes.js +15 -1
- package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
- package/dist/bigconsole/components/DrilldownDashboardRenderer.d.ts.map +1 -1
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +57 -56
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.d.ts.map +1 -1
- package/dist/bigconsole/components/DrilldownModal.js +55 -53
- package/dist/bigconsole/components/DrilldownModal.js.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.d.ts +3 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.d.ts.map +1 -1
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +40 -39
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +184 -177
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardGrid.js +40 -22
- package/dist/bigconsole/components/dashboard/DashboardGrid.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js +31 -25
- package/dist/bigconsole/components/dashboard/ExportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.d.ts +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +115 -80
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +177 -146
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.d.ts +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.d.ts.map +1 -1
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js +375 -325
- package/dist/bigconsole/components/dashboard/ShareDialog/ShareDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.d.ts.map +1 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +7 -1
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.d.ts +3 -1
- package/dist/bigconsole/components/parser/ParserSelector.d.ts.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +94 -94
- package/dist/bigconsole/components/parser/ParserSelector.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.d.ts.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineCard.js +111 -89
- package/dist/bigconsole/components/pipeline/PipelineCard.js.map +1 -1
- package/dist/bigconsole/components/pipeline/PipelineScopePicker.d.ts +8 -0
- package/dist/bigconsole/components/pipeline/PipelineScopePicker.d.ts.map +1 -0
- package/dist/bigconsole/components/pipeline/PipelineScopePicker.js +52 -0
- package/dist/bigconsole/components/pipeline/PipelineScopePicker.js.map +1 -0
- package/dist/bigconsole/components/widgets/PropertiesPanel.d.ts.map +1 -1
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +257 -221
- package/dist/bigconsole/components/widgets/PropertiesPanel.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.d.ts +1 -0
- package/dist/bigconsole/components/widgets/WidgetHeader.d.ts.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetHeader.js +29 -29
- package/dist/bigconsole/components/widgets/WidgetHeader.js.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.d.ts +2 -0
- package/dist/bigconsole/components/widgets/WidgetWrapper.d.ts.map +1 -1
- package/dist/bigconsole/components/widgets/WidgetWrapper.js +247 -239
- package/dist/bigconsole/components/widgets/WidgetWrapper.js.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.d.ts.map +1 -1
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js +6 -4
- package/dist/bigconsole/components/widgets/metric-card/MetricCardWidget.js.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.d.ts +1 -0
- package/dist/bigconsole/components/widgets/states/EmptyState.d.ts.map +1 -1
- package/dist/bigconsole/components/widgets/states/EmptyState.js +4 -4
- package/dist/bigconsole/components/widgets/states/EmptyState.js.map +1 -1
- package/dist/bigconsole/components/workflow/WorkflowDesignPreview.d.ts +7 -0
- package/dist/bigconsole/components/workflow/WorkflowDesignPreview.d.ts.map +1 -0
- package/dist/bigconsole/components/workflow/WorkflowDesignPreview.js +94 -0
- package/dist/bigconsole/components/workflow/WorkflowDesignPreview.js.map +1 -0
- package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.d.ts +7 -0
- package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.d.ts.map +1 -0
- package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js +101 -0
- package/dist/bigconsole/components/workflow/WorkflowSinkLinkForm.js.map +1 -0
- package/dist/bigconsole/hooks/useBigConsoleSettings.d.ts +16 -0
- package/dist/bigconsole/hooks/useBigConsoleSettings.d.ts.map +1 -0
- package/dist/bigconsole/hooks/useBigConsoleSettings.js +57 -0
- package/dist/bigconsole/hooks/useBigConsoleSettings.js.map +1 -0
- package/dist/bigconsole/hooks/useDashboardOperations.d.ts.map +1 -1
- package/dist/bigconsole/hooks/useDashboardOperations.js +102 -79
- package/dist/bigconsole/hooks/useDashboardOperations.js.map +1 -1
- package/dist/bigconsole/hooks/useExportDashboard.d.ts +3 -1
- package/dist/bigconsole/hooks/useExportDashboard.d.ts.map +1 -1
- package/dist/bigconsole/hooks/useExportDashboard.js +23 -13
- package/dist/bigconsole/hooks/useExportDashboard.js.map +1 -1
- package/dist/bigconsole/hooks/useFilterUrlSync.d.ts +18 -0
- package/dist/bigconsole/hooks/useFilterUrlSync.d.ts.map +1 -1
- package/dist/bigconsole/hooks/useFilterUrlSync.js +87 -57
- package/dist/bigconsole/hooks/useFilterUrlSync.js.map +1 -1
- package/dist/bigconsole/hooks/useGlobalFilters.d.ts.map +1 -1
- package/dist/bigconsole/hooks/useGlobalFilters.js +39 -29
- package/dist/bigconsole/hooks/useGlobalFilters.js.map +1 -1
- package/dist/bigconsole/hooks/usePageOperations.d.ts.map +1 -1
- package/dist/bigconsole/hooks/usePageOperations.js +1 -0
- package/dist/bigconsole/hooks/usePageOperations.js.map +1 -1
- package/dist/bigconsole/hooks/usePipelineOperations.d.ts.map +1 -1
- package/dist/bigconsole/hooks/usePipelineOperations.js +114 -112
- package/dist/bigconsole/hooks/usePipelineOperations.js.map +1 -1
- package/dist/bigconsole/hooks/useShareRecipients.d.ts +22 -0
- package/dist/bigconsole/hooks/useShareRecipients.d.ts.map +1 -0
- package/dist/bigconsole/hooks/useShareRecipients.js +198 -0
- package/dist/bigconsole/hooks/useShareRecipients.js.map +1 -0
- package/dist/bigconsole/pages/DashboardBuilderPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/DashboardBuilderPage.js +198 -193
- package/dist/bigconsole/pages/DashboardBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/DashboardViewPage.js +171 -167
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +313 -266
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +84 -79
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +267 -257
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/InsightsPage.js +465 -402
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +169 -157
- package/dist/bigconsole/pages/PipelineBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/PipelineViewPage.js +370 -230
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +181 -151
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.js +188 -208
- package/dist/bigconsole/pages/SettingsPage.js.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/WidgetDemoPage.js +134 -117
- package/dist/bigconsole/pages/WidgetDemoPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/WorkflowViewPage.js +315 -267
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.d.ts.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +4 -3
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/dist/bigconsole/types/index.d.ts +4 -0
- package/dist/bigconsole/types/index.d.ts.map +1 -1
- package/dist/bigconsole/utils/drilldownParams.d.ts +3 -0
- package/dist/bigconsole/utils/drilldownParams.d.ts.map +1 -0
- package/dist/bigconsole/utils/drilldownParams.js +8 -0
- package/dist/bigconsole/utils/drilldownParams.js.map +1 -0
- package/dist/generated/wspace-operations.d.ts +148 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-operations.js +172 -133
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +21 -0
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/generated/wspace-types.js.map +1 -1
- package/dist/microfe-bigconsole.css +1 -1
- package/dist/translations/en.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -1,52 +1,55 @@
|
|
|
1
1
|
import e from "../store/drilldownStore.js";
|
|
2
2
|
import { SECTION_FOCUS_RING as t } from "./common/sectionStyles.js";
|
|
3
3
|
import "./common/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { getVisibleDrilldownParams as n } from "../utils/drilldownParams.js";
|
|
5
|
+
import { memo as r, useCallback as i, useRef as a } from "react";
|
|
6
|
+
import { ResponsiveDialog as o, ResponsiveDialogContent as s, ResponsiveDialogDescription as c, ResponsiveDialogTitle as l } from "@burdenoff/fe-libs/ui";
|
|
7
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
6
8
|
//#region src/bigconsole/components/DrilldownModal.tsx
|
|
7
|
-
var
|
|
8
|
-
let
|
|
9
|
-
|
|
10
|
-
}, [
|
|
11
|
-
|
|
12
|
-
}, [
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
className: "relative z-10 flex w-full max-w-5xl flex-col overflow-hidden rounded-card bg-bg-surface shadow-[var(--shadow-elevation-3)]",
|
|
30
|
-
style: { maxHeight: "calc(100vh - 2rem)" },
|
|
31
|
-
onClick: (e) => e.stopPropagation(),
|
|
9
|
+
var f = r(function({ renderDashboard: r, onClose: f }) {
|
|
10
|
+
let m = a(null), h = e((e) => e.isOpen), g = e((e) => e.dashboardId), _ = e((e) => e.params), v = e((e) => e.history), y = e((e) => e.closeModal), b = e((e) => e.popDrilldown), x = i(() => {
|
|
11
|
+
y(), f?.();
|
|
12
|
+
}, [y, f]), S = i(() => {
|
|
13
|
+
b();
|
|
14
|
+
}, [b]);
|
|
15
|
+
return !h || !g ? null : /* @__PURE__ */ u(o, {
|
|
16
|
+
open: h,
|
|
17
|
+
onOpenChange: (e) => {
|
|
18
|
+
e || x();
|
|
19
|
+
},
|
|
20
|
+
children: /* @__PURE__ */ d(s, {
|
|
21
|
+
showCloseButton: !1,
|
|
22
|
+
onOpenAutoFocus: () => {
|
|
23
|
+
let e = document.activeElement;
|
|
24
|
+
e instanceof HTMLElement && e !== document.body && !e.closest("[role=\"dialog\"]") && (m.current = e);
|
|
25
|
+
},
|
|
26
|
+
onCloseAutoFocus: (e) => {
|
|
27
|
+
e.preventDefault(), m.current?.isConnected && m.current.focus();
|
|
28
|
+
},
|
|
29
|
+
className: "flex w-full md:w-[calc(100%-2rem)] max-w-5xl flex-col gap-0 overflow-hidden rounded-card bg-bg-surface p-0 sm:max-w-5xl",
|
|
30
|
+
style: { maxHeight: "calc(100dvh - 2rem)" },
|
|
32
31
|
children: [
|
|
33
|
-
/* @__PURE__ */
|
|
32
|
+
/* @__PURE__ */ u(c, {
|
|
33
|
+
className: "sr-only",
|
|
34
|
+
children: "Explore the linked dashboard and return to the previous drilldown level."
|
|
35
|
+
}),
|
|
36
|
+
/* @__PURE__ */ d("div", {
|
|
34
37
|
className: "flex flex-shrink-0 flex-wrap items-center justify-between gap-control-gap border-b border-[var(--color-border-subtle)] px-4 py-3",
|
|
35
|
-
children: [/* @__PURE__ */
|
|
38
|
+
children: [/* @__PURE__ */ d("div", {
|
|
36
39
|
className: "flex min-w-0 items-center gap-3",
|
|
37
40
|
children: [
|
|
38
|
-
|
|
41
|
+
v.length > 0 && /* @__PURE__ */ u("button", {
|
|
39
42
|
type: "button",
|
|
40
|
-
onClick:
|
|
43
|
+
onClick: S,
|
|
41
44
|
className: "flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-bg-surface",
|
|
42
45
|
title: "Go back",
|
|
43
46
|
"aria-label": "Go back",
|
|
44
|
-
children: /* @__PURE__ */
|
|
47
|
+
children: /* @__PURE__ */ u("svg", {
|
|
45
48
|
className: "w-5 h-5 text-text-secondary",
|
|
46
49
|
fill: "none",
|
|
47
50
|
stroke: "currentColor",
|
|
48
51
|
viewBox: "0 0 24 24",
|
|
49
|
-
children: /* @__PURE__ */
|
|
52
|
+
children: /* @__PURE__ */ u("path", {
|
|
50
53
|
strokeLinecap: "round",
|
|
51
54
|
strokeLinejoin: "round",
|
|
52
55
|
strokeWidth: 2,
|
|
@@ -54,34 +57,33 @@ var s = n(function({ renderDashboard: n, onClose: s }) {
|
|
|
54
57
|
})
|
|
55
58
|
})
|
|
56
59
|
}),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
-
id: "drilldown-modal-title",
|
|
60
|
+
/* @__PURE__ */ u(l, {
|
|
59
61
|
className: "truncate text-sm font-semibold text-text-primary",
|
|
60
62
|
children: "Drilldown View"
|
|
61
63
|
}),
|
|
62
|
-
|
|
64
|
+
v.length > 0 && /* @__PURE__ */ d("span", {
|
|
63
65
|
className: "text-xs text-text-muted",
|
|
64
66
|
children: [
|
|
65
67
|
"(",
|
|
66
|
-
|
|
68
|
+
v.length + 1,
|
|
67
69
|
" level",
|
|
68
|
-
|
|
70
|
+
v.length > 0 ? "s" : "",
|
|
69
71
|
" deep)"
|
|
70
72
|
]
|
|
71
73
|
})
|
|
72
74
|
]
|
|
73
|
-
}), /* @__PURE__ */
|
|
75
|
+
}), /* @__PURE__ */ u("button", {
|
|
74
76
|
type: "button",
|
|
75
|
-
onClick:
|
|
77
|
+
onClick: x,
|
|
76
78
|
className: `flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${t}`,
|
|
77
79
|
title: "Close (Esc)",
|
|
78
80
|
"aria-label": "Close drilldown",
|
|
79
|
-
children: /* @__PURE__ */
|
|
81
|
+
children: /* @__PURE__ */ u("svg", {
|
|
80
82
|
className: "w-5 h-5 text-text-secondary",
|
|
81
83
|
fill: "none",
|
|
82
84
|
stroke: "currentColor",
|
|
83
85
|
viewBox: "0 0 24 24",
|
|
84
|
-
children: /* @__PURE__ */
|
|
86
|
+
children: /* @__PURE__ */ u("path", {
|
|
85
87
|
strokeLinecap: "round",
|
|
86
88
|
strokeLinejoin: "round",
|
|
87
89
|
strokeWidth: 2,
|
|
@@ -90,32 +92,32 @@ var s = n(function({ renderDashboard: n, onClose: s }) {
|
|
|
90
92
|
})
|
|
91
93
|
})]
|
|
92
94
|
}),
|
|
93
|
-
/* @__PURE__ */
|
|
95
|
+
/* @__PURE__ */ u("div", {
|
|
94
96
|
className: "min-h-0 flex-1 overflow-y-auto bg-bg-sunken p-4",
|
|
95
|
-
children:
|
|
97
|
+
children: r ? r(g, _) : /* @__PURE__ */ u(p, {})
|
|
96
98
|
}),
|
|
97
|
-
/* @__PURE__ */
|
|
99
|
+
/* @__PURE__ */ u("div", {
|
|
98
100
|
className: "flex-shrink-0 border-t border-[var(--color-border-subtle)] px-4 py-2",
|
|
99
|
-
children: /* @__PURE__ */
|
|
101
|
+
children: /* @__PURE__ */ d("div", {
|
|
100
102
|
className: "flex flex-wrap items-center justify-between gap-x-4 gap-y-1 text-xs text-text-muted",
|
|
101
|
-
children: [/* @__PURE__ */
|
|
103
|
+
children: [/* @__PURE__ */ d("span", { children: [
|
|
102
104
|
"Parameters:",
|
|
103
105
|
" ",
|
|
104
|
-
|
|
105
|
-
] }), /* @__PURE__ */
|
|
106
|
+
n(_).map(([e]) => e).join(", ") || "None"
|
|
107
|
+
] }), /* @__PURE__ */ u("span", { children: "Press Esc to close" })]
|
|
106
108
|
})
|
|
107
109
|
})
|
|
108
110
|
]
|
|
109
|
-
})
|
|
111
|
+
})
|
|
110
112
|
});
|
|
111
113
|
});
|
|
112
|
-
function
|
|
113
|
-
return /* @__PURE__ */
|
|
114
|
+
function p() {
|
|
115
|
+
return /* @__PURE__ */ u("div", {
|
|
114
116
|
className: "flex items-center justify-center h-full text-sm text-text-secondary",
|
|
115
117
|
children: "Unable to load drilldown content. Please try again."
|
|
116
118
|
});
|
|
117
119
|
}
|
|
118
120
|
//#endregion
|
|
119
|
-
export {
|
|
121
|
+
export { f as default };
|
|
120
122
|
|
|
121
123
|
//# sourceMappingURL=DrilldownModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrilldownModal.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownModal.tsx"],"sourcesContent":["/**\n * DrilldownModal Component\n *\n * Modal overlay for displaying drilldown dashboards.\n * Supports nested drilldowns with back navigation.\n */\n\nimport { type FC,
|
|
1
|
+
{"version":3,"file":"DrilldownModal.js","names":[],"sources":["../../../src/bigconsole/components/DrilldownModal.tsx"],"sourcesContent":["/**\n * DrilldownModal Component\n *\n * Modal overlay for displaying drilldown dashboards.\n * Supports nested drilldowns with back navigation.\n */\n\nimport { type FC, useCallback, useRef, memo } from 'react';\nimport { useDrilldownStore } from '../store/drilldownStore';\nimport { SECTION_FOCUS_RING } from './common';\nimport { getVisibleDrilldownParams } from '../utils/drilldownParams';\nimport {\n ResponsiveDialog as Dialog,\n ResponsiveDialogContent as DialogContent,\n ResponsiveDialogTitle as DialogTitle,\n ResponsiveDialogDescription as DialogDescription,\n} from '@burdenoff/fe-libs/ui';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface DrilldownModalProps {\n /** Custom content renderer for the dashboard */\n renderDashboard?: (dashboardId: string, params: Record<string, unknown>) => React.ReactNode;\n /** Called when modal closes */\n onClose?: () => void;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const DrilldownModal: FC<DrilldownModalProps> = memo(function DrilldownModal({ renderDashboard, onClose }) {\n const returnFocus = useRef<HTMLElement | null>(null);\n const isOpen = useDrilldownStore((state) => state.isOpen);\n const dashboardId = useDrilldownStore((state) => state.dashboardId);\n const params = useDrilldownStore((state) => state.params);\n const history = useDrilldownStore((state) => state.history);\n const closeModal = useDrilldownStore((state) => state.closeModal);\n const popDrilldown = useDrilldownStore((state) => state.popDrilldown);\n\n // Define handlers before effects that use them\n const handleClose = useCallback(() => {\n closeModal();\n onClose?.();\n }, [closeModal, onClose]);\n\n const handleBack = useCallback(() => {\n popDrilldown();\n }, [popDrilldown]);\n\n if (!isOpen || !dashboardId) {\n return null;\n }\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(open) => {\n if (!open) handleClose();\n }}\n >\n <DialogContent\n showCloseButton={false}\n onOpenAutoFocus={() => {\n const activeElement = document.activeElement;\n if (\n activeElement instanceof HTMLElement &&\n activeElement !== document.body &&\n !activeElement.closest('[role=\"dialog\"]')\n ) {\n returnFocus.current = activeElement;\n }\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n if (returnFocus.current?.isConnected) returnFocus.current.focus();\n }}\n className=\"flex w-full md:w-[calc(100%-2rem)] max-w-5xl flex-col gap-0 overflow-hidden rounded-card bg-bg-surface p-0 sm:max-w-5xl\"\n style={{ maxHeight: 'calc(100dvh - 2rem)' }}\n >\n <DialogDescription className=\"sr-only\">\n Explore the linked dashboard and return to the previous drilldown level.\n </DialogDescription>\n {/* Header — bare chrome: identity + close, no surface of its own */}\n <div className=\"flex flex-shrink-0 flex-wrap items-center justify-between gap-control-gap border-b border-[var(--color-border-subtle)] px-4 py-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n {/* Back button */}\n {history.length > 0 && (\n <button\n type=\"button\"\n onClick={handleBack}\n className={`flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${SECTION_FOCUS_RING}`}\n title=\"Go back\"\n aria-label=\"Go back\"\n >\n <svg className=\"w-5 h-5 text-text-secondary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n {/* Title */}\n <DialogTitle className=\"truncate text-sm font-semibold text-text-primary\">Drilldown View</DialogTitle>\n\n {/* Breadcrumb indicator */}\n {history.length > 0 && (\n <span className=\"text-xs text-text-muted\">\n ({history.length + 1} level{history.length > 0 ? 's' : ''} deep)\n </span>\n )}\n </div>\n\n {/* Close button */}\n <button\n type=\"button\"\n onClick={handleClose}\n className={`flex h-control-md w-[var(--size-controlHeight-md)] shrink-0 items-center justify-center rounded-button motion-safe:transition-colors hover:bg-bg-sunken ${SECTION_FOCUS_RING}`}\n title=\"Close (Esc)\"\n aria-label=\"Close drilldown\"\n >\n <svg className=\"w-5 h-5 text-text-secondary\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Dashboard Content — the point of the overlay, so it gets the surface\n weight and the chrome around it stays flat. */}\n <div className=\"min-h-0 flex-1 overflow-y-auto bg-bg-sunken p-4\">\n {renderDashboard ? renderDashboard(dashboardId, params) : <DrilldownFallback />}\n </div>\n\n {/* Footer — supporting detail only */}\n <div className=\"flex-shrink-0 border-t border-[var(--color-border-subtle)] px-4 py-2\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-1 text-xs text-text-muted\">\n <span>\n Parameters:{' '}\n {getVisibleDrilldownParams(params)\n .map(([key]) => key)\n .join(', ') || 'None'}\n </span>\n <span>Press Esc to close</span>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n );\n});\n\n// Fallback when no renderDashboard prop is provided (should not happen in normal usage\n// since BigConsoleRoot always passes DrilldownDashboardRenderer).\nfunction DrilldownFallback() {\n return (\n <div className=\"flex items-center justify-center h-full text-sm text-text-secondary\">\n Unable to load drilldown content. Please try again.\n </div>\n );\n}\n\nexport default DrilldownModal;\n"],"mappings":";;;;;;;;AAiCA,IAAa,IAA0C,EAAK,SAAwB,EAAE,oBAAiB,cAAW;CAChH,IAAM,IAAc,EAA2B,KAAK,EAC9C,IAAS,GAAmB,MAAU,EAAM,OAAO,EACnD,IAAc,GAAmB,MAAU,EAAM,YAAY,EAC7D,IAAS,GAAmB,MAAU,EAAM,OAAO,EACnD,IAAU,GAAmB,MAAU,EAAM,QAAQ,EACrD,IAAa,GAAmB,MAAU,EAAM,WAAW,EAC3D,IAAe,GAAmB,MAAU,EAAM,aAAa,EAG/D,IAAc,QAAkB;AAEpC,EADA,GAAY,EACZ,KAAW;IACV,CAAC,GAAY,EAAQ,CAAC,EAEnB,IAAa,QAAkB;AACnC,KAAc;IACb,CAAC,EAAa,CAAC;AAMlB,QAJI,CAAC,KAAU,CAAC,IACP,OAIP,kBAAC,GAAD;EACE,MAAM;EACN,eAAe,MAAS;AACtB,GAAK,KAAM,GAAa;;YAG1B,kBAAC,GAAD;GACE,iBAAiB;GACjB,uBAAuB;IACrB,IAAM,IAAgB,SAAS;AAC/B,IACE,aAAyB,eACzB,MAAkB,SAAS,QAC3B,CAAC,EAAc,QAAQ,oBAAkB,KAEzC,EAAY,UAAU;;GAG1B,mBAAmB,MAAU;AAE3B,IADA,EAAM,gBAAgB,EAClB,EAAY,SAAS,eAAa,EAAY,QAAQ,OAAO;;GAEnE,WAAU;GACV,OAAO,EAAE,WAAW,uBAAuB;aAjB7C;IAmBE,kBAAC,GAAD;KAAmB,WAAU;eAAU;KAEnB,CAAA;IAEpB,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OAEG,EAAQ,SAAS,KAChB,kBAAC,UAAD;QACE,MAAK;QACL,SAAS;QACT,WAAW;QACX,OAAM;QACN,cAAW;kBAEX,kBAAC,OAAD;SAAK,WAAU;SAA8B,MAAK;SAAO,QAAO;SAAe,SAAQ;mBACrF,kBAAC,QAAD;UAAM,eAAc;UAAQ,gBAAe;UAAQ,aAAa;UAAG,GAAE;UAAoB,CAAA;SACrF,CAAA;QACC,CAAA;OAIX,kBAAC,GAAD;QAAa,WAAU;kBAAmD;QAA4B,CAAA;OAGrG,EAAQ,SAAS,KAChB,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SAA0C;SACtC,EAAQ,SAAS;SAAE;SAAO,EAAQ,SAAS,IAAI,MAAM;SAAG;SACrD;;OAEL;SAGN,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,WAAW,2JAA2J;MACtK,OAAM;MACN,cAAW;gBAEX,kBAAC,OAAD;OAAK,WAAU;OAA8B,MAAK;OAAO,QAAO;OAAe,SAAQ;iBACrF,kBAAC,QAAD;QAAM,eAAc;QAAQ,gBAAe;QAAQ,aAAa;QAAG,GAAE;QAAyB,CAAA;OAC1F,CAAA;MACC,CAAA,CACL;;IAIN,kBAAC,OAAD;KAAK,WAAU;eACZ,IAAkB,EAAgB,GAAa,EAAO,GAAG,kBAAC,GAAD,EAAqB,CAAA;KAC3E,CAAA;IAGN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,QAAD,EAAA,UAAA;OAAM;OACQ;OACX,EAA0B,EAAO,CAC/B,KAAK,CAAC,OAAS,EAAI,CACnB,KAAK,KAAK,IAAI;OACZ,EAAA,CAAA,EACP,kBAAC,QAAD,EAAA,UAAM,sBAAyB,CAAA,CAC3B;;KACF,CAAA;IACQ;;EACT,CAAA;EAEX;AAIF,SAAS,IAAoB;AAC3B,QACE,kBAAC,OAAD;EAAK,WAAU;YAAsE;EAE/E,CAAA"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
-
import { WidgetBinding, WidgetBindingStatus } from '../../../types';
|
|
2
|
+
import { WidgetBinding, WidgetBindingStatus, Parser } from '../../../types';
|
|
3
3
|
|
|
4
4
|
export interface DataBindingSectionProps {
|
|
5
5
|
consoleId: string;
|
|
6
6
|
binding: WidgetBinding;
|
|
7
|
+
resolvedParser?: Parser;
|
|
7
8
|
dataSinkKey: string | null;
|
|
8
9
|
dataPath?: string;
|
|
9
10
|
status: WidgetBindingStatus;
|
|
11
|
+
resolving?: boolean;
|
|
10
12
|
missingFields?: string[];
|
|
11
13
|
preview?: unknown;
|
|
12
14
|
error?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBindingSection.d.ts","sourceRoot":"","sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"DataBindingSection.d.ts","sourceRoot":"","sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKjF,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAgBD,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAmK1D,CAAC"}
|
|
@@ -13,59 +13,60 @@ var u = {
|
|
|
13
13
|
no_data: "warning",
|
|
14
14
|
parser_error: "danger",
|
|
15
15
|
field_mismatch: "warning"
|
|
16
|
-
}, d = ({ consoleId: d, binding: f,
|
|
17
|
-
let { t:
|
|
18
|
-
unbound:
|
|
19
|
-
loading:
|
|
20
|
-
bound:
|
|
21
|
-
no_data:
|
|
22
|
-
parser_error:
|
|
23
|
-
field_mismatch:
|
|
16
|
+
}, d = ({ consoleId: d, binding: f, resolvedParser: p, dataSinkKey: m, dataPath: h, status: g, resolving: _ = !1, missingFields: v = [], preview: y, error: b, onDataSinkChange: x, onParserChange: S, onDataPathChange: C }) => {
|
|
17
|
+
let { t: w } = l(), T = {
|
|
18
|
+
unbound: w("bigconsole.builder.dataBinding.status.unbound", "Select a DataSink to begin"),
|
|
19
|
+
loading: _ ? w("bigconsole.parsers.selector.loading", "Loading parsers...") : w("bigconsole.builder.dataBinding.status.loading", "Testing parser and detecting fields…"),
|
|
20
|
+
bound: w("bigconsole.builder.dataBinding.status.bound", "Binding ready"),
|
|
21
|
+
no_data: w("bigconsole.builder.dataBinding.status.noData", "Parser returned no data"),
|
|
22
|
+
parser_error: w("bigconsole.builder.dataBinding.status.parserError", "Parser test failed"),
|
|
23
|
+
field_mismatch: w("bigconsole.builder.dataBinding.status.fieldMismatch", "Some mapped fields were not found")
|
|
24
24
|
};
|
|
25
25
|
return /* @__PURE__ */ c(t, { children: [
|
|
26
26
|
/* @__PURE__ */ s(e, {
|
|
27
27
|
title: "Data source",
|
|
28
|
-
description:
|
|
28
|
+
description: w("bigconsole.builder.dataBinding.intro", "Connect this widget to a DataSink and Parser to display transformed data."),
|
|
29
29
|
"data-testid": "widget-inspector-data-source",
|
|
30
30
|
children: /* @__PURE__ */ c("div", {
|
|
31
31
|
className: "flex flex-col gap-form-gap",
|
|
32
32
|
children: [/* @__PURE__ */ c("div", {
|
|
33
33
|
className: "space-y-2",
|
|
34
34
|
children: [
|
|
35
|
-
/* @__PURE__ */ s(a, { children:
|
|
35
|
+
/* @__PURE__ */ s(a, { children: w("bigconsole.builder.dataBinding.dataSinkLabel", "DataSink") }),
|
|
36
36
|
/* @__PURE__ */ s(n, {
|
|
37
|
-
value:
|
|
38
|
-
onChange:
|
|
39
|
-
placeholder:
|
|
37
|
+
value: m,
|
|
38
|
+
onChange: x,
|
|
39
|
+
placeholder: w("bigconsole.builder.dataBinding.dataSinkPlaceholder", "Select a DataSink...")
|
|
40
40
|
}),
|
|
41
|
-
|
|
41
|
+
m && /* @__PURE__ */ c("p", {
|
|
42
42
|
className: "text-xs text-text-secondary",
|
|
43
|
-
children: [
|
|
43
|
+
children: [w("bigconsole.builder.dataBinding.keyLabel", "Key: {{key}}", { key: m }), f.source.ref && /* @__PURE__ */ s("span", {
|
|
44
44
|
className: "ml-2 text-text-muted",
|
|
45
|
-
children:
|
|
45
|
+
children: w("bigconsole.builder.dataBinding.idLabel", "ID: {{id}}...", { id: f.source.ref.slice(0, 8) })
|
|
46
46
|
})]
|
|
47
47
|
})
|
|
48
48
|
]
|
|
49
49
|
}), /* @__PURE__ */ c("div", {
|
|
50
50
|
className: "space-y-2",
|
|
51
|
-
children: [/* @__PURE__ */ s(a, { children:
|
|
51
|
+
children: [/* @__PURE__ */ s(a, { children: w("bigconsole.builder.dataBinding.parserLabel", "Parser") }), /* @__PURE__ */ s(r, {
|
|
52
52
|
consoleId: d,
|
|
53
53
|
value: f.parserId ?? null,
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
resolvedParser: p,
|
|
55
|
+
onChange: S,
|
|
56
|
+
filterInputSinkKey: m ?? void 0,
|
|
56
57
|
filterStatus: void 0,
|
|
57
|
-
placeholder:
|
|
58
|
-
disabled: !
|
|
58
|
+
placeholder: m ? w("bigconsole.builder.dataBinding.parserPlaceholder", "Select a parser...") : w("bigconsole.builder.dataBinding.parserPlaceholderNoSink", "Select a DataSink first..."),
|
|
59
|
+
disabled: !m
|
|
59
60
|
})]
|
|
60
61
|
})]
|
|
61
62
|
})
|
|
62
63
|
}),
|
|
63
64
|
/* @__PURE__ */ s(e, {
|
|
64
|
-
title:
|
|
65
|
-
tone: u[
|
|
65
|
+
title: T[g],
|
|
66
|
+
tone: u[g],
|
|
66
67
|
padding: "compact",
|
|
67
68
|
headingLevel: 3,
|
|
68
|
-
icon:
|
|
69
|
+
icon: g === "loading" ? /* @__PURE__ */ s(o, { style: {
|
|
69
70
|
width: "14px",
|
|
70
71
|
height: "14px"
|
|
71
72
|
} }) : void 0,
|
|
@@ -77,17 +78,17 @@ var u = {
|
|
|
77
78
|
children: [
|
|
78
79
|
/* @__PURE__ */ s("p", {
|
|
79
80
|
className: "sr-only",
|
|
80
|
-
children:
|
|
81
|
+
children: T[g]
|
|
81
82
|
}),
|
|
82
|
-
|
|
83
|
+
b && /* @__PURE__ */ s("p", {
|
|
83
84
|
className: "break-words text-xs text-[var(--color-status-error-text)]",
|
|
84
|
-
children:
|
|
85
|
+
children: b
|
|
85
86
|
}),
|
|
86
|
-
|
|
87
|
+
v.length > 0 && /* @__PURE__ */ s("p", {
|
|
87
88
|
className: "break-words text-xs text-[var(--color-status-warning-text)]",
|
|
88
|
-
children:
|
|
89
|
+
children: w("bigconsole.builder.dataBinding.missingFields", "Missing: {{fields}}", { fields: v.join(", ") })
|
|
89
90
|
}),
|
|
90
|
-
!
|
|
91
|
+
!b && v.length === 0 && g === "bound" && y !== void 0 && /* @__PURE__ */ s("p", {
|
|
91
92
|
className: "text-xs text-text-secondary",
|
|
92
93
|
children: "The parser ran and its output matches the fields this widget expects."
|
|
93
94
|
})
|
|
@@ -97,7 +98,7 @@ var u = {
|
|
|
97
98
|
f.parserId && Object.keys(f.fields).length > 0 && /* @__PURE__ */ s(e, {
|
|
98
99
|
emphasis: "muted",
|
|
99
100
|
padding: "compact",
|
|
100
|
-
title:
|
|
101
|
+
title: w("bigconsole.builder.dataBinding.fieldMappingsConfigured", "Field mappings configured"),
|
|
101
102
|
headingLevel: 3,
|
|
102
103
|
children: /* @__PURE__ */ s("div", {
|
|
103
104
|
className: "min-w-0 space-y-1 text-xs text-text-secondary",
|
|
@@ -114,15 +115,15 @@ var u = {
|
|
|
114
115
|
}, e))
|
|
115
116
|
})
|
|
116
117
|
}),
|
|
117
|
-
|
|
118
|
+
y !== void 0 && /* @__PURE__ */ s(e, {
|
|
118
119
|
emphasis: "muted",
|
|
119
120
|
padding: "compact",
|
|
120
|
-
title:
|
|
121
|
+
title: w("bigconsole.builder.dataBinding.livePreviewLabel", "Live Preview"),
|
|
121
122
|
description: "Raw parser output, exactly as the widget receives it.",
|
|
122
123
|
headingLevel: 3,
|
|
123
124
|
children: /* @__PURE__ */ s("pre", {
|
|
124
125
|
className: "max-h-40 min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-surface p-3 text-xs text-text-secondary",
|
|
125
|
-
children: JSON.stringify(
|
|
126
|
+
children: JSON.stringify(y, null, 2)
|
|
126
127
|
})
|
|
127
128
|
}),
|
|
128
129
|
/* @__PURE__ */ s(e, {
|
|
@@ -135,17 +136,17 @@ var u = {
|
|
|
135
136
|
children: [
|
|
136
137
|
/* @__PURE__ */ s(a, {
|
|
137
138
|
htmlFor: "widget-inspector-data-path",
|
|
138
|
-
children:
|
|
139
|
+
children: w("bigconsole.builder.dataBinding.dataPathLabel", "Data Path (Optional)")
|
|
139
140
|
}),
|
|
140
141
|
/* @__PURE__ */ s(i, {
|
|
141
142
|
id: "widget-inspector-data-path",
|
|
142
|
-
value:
|
|
143
|
-
onChange: (e) =>
|
|
144
|
-
placeholder:
|
|
143
|
+
value: h ?? "",
|
|
144
|
+
onChange: (e) => C(e.target.value || void 0),
|
|
145
|
+
placeholder: w("bigconsole.builder.dataBinding.dataPathPlaceholder", "e.g., summary.totalRevenue")
|
|
145
146
|
}),
|
|
146
147
|
/* @__PURE__ */ s("p", {
|
|
147
148
|
className: "text-xs text-text-secondary",
|
|
148
|
-
children:
|
|
149
|
+
children: w("bigconsole.builder.dataBinding.dataPathHelp", "Path to extract specific data from the parser output (dot notation)")
|
|
149
150
|
})
|
|
150
151
|
]
|
|
151
152
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataBindingSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Input, Label, Spinner } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { WidgetBinding, WidgetBindingStatus } from '../../../types';\nimport { DataSinkSelector } from '../../parser/DataSinkSelector';\nimport { ParserSelector } from '../../parser/ParserSelector';\nimport { Section, SectionStack, type SectionTone } from '../../common';\n\nexport interface DataBindingSectionProps {\n consoleId: string;\n binding: WidgetBinding;\n dataSinkKey: string | null;\n dataPath?: string;\n status: WidgetBindingStatus;\n missingFields?: string[];\n preview?: unknown;\n error?: string | null;\n onDataSinkChange: (key: string | null) => void;\n onParserChange: (parserId: string | null) => void;\n onDataPathChange: (path: string | undefined) => void;\n}\n\n/**\n * Binding health is the single most important signal on this tab, so it gets a\n * toned section of its own instead of the bare `<p class=\"text-xs\">` it used to\n * be (BOFF-5636).\n */\nconst STATUS_TONES: Record<WidgetBindingStatus, SectionTone> = {\n unbound: 'info',\n loading: 'info',\n bound: 'success',\n no_data: 'warning',\n parser_error: 'danger',\n field_mismatch: 'warning',\n};\n\nexport const DataBindingSection: FC<DataBindingSectionProps> = ({\n consoleId,\n binding,\n dataSinkKey,\n dataPath,\n status,\n missingFields = [],\n preview,\n error,\n onDataSinkChange,\n onParserChange,\n onDataPathChange,\n}) => {\n const { t } = useI18n();\n\n const statusLabels: Record<WidgetBindingStatus, string> = {\n unbound: t('bigconsole.builder.dataBinding.status.unbound', 'Select a DataSink to begin'),\n loading: t('bigconsole.builder.dataBinding.status.loading', 'Testing parser and detecting fields…'),\n bound: t('bigconsole.builder.dataBinding.status.bound', 'Binding ready'),\n no_data: t('bigconsole.builder.dataBinding.status.noData', 'Parser returned no data'),\n parser_error: t('bigconsole.builder.dataBinding.status.parserError', 'Parser test failed'),\n field_mismatch: t('bigconsole.builder.dataBinding.status.fieldMismatch', 'Some mapped fields were not found'),\n };\n\n return (\n <SectionStack>\n <Section\n title=\"Data source\"\n description={t(\n 'bigconsole.builder.dataBinding.intro',\n 'Connect this widget to a DataSink and Parser to display transformed data.'\n )}\n data-testid=\"widget-inspector-data-source\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.dataSinkLabel', 'DataSink')}</Label>\n <DataSinkSelector\n value={dataSinkKey}\n onChange={onDataSinkChange}\n placeholder={t('bigconsole.builder.dataBinding.dataSinkPlaceholder', 'Select a DataSink...')}\n />\n {dataSinkKey && (\n <p className=\"text-xs text-text-secondary\">\n {t('bigconsole.builder.dataBinding.keyLabel', 'Key: {{key}}', { key: dataSinkKey })}\n {binding.source.ref && (\n <span className=\"ml-2 text-text-muted\">\n {t('bigconsole.builder.dataBinding.idLabel', 'ID: {{id}}...', {\n id: binding.source.ref.slice(0, 8),\n })}\n </span>\n )}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.parserLabel', 'Parser')}</Label>\n <ParserSelector\n consoleId={consoleId}\n value={binding.parserId ?? null}\n onChange={onParserChange}\n filterInputSinkKey={dataSinkKey ?? undefined}\n filterStatus={undefined}\n placeholder={\n dataSinkKey\n ? t('bigconsole.builder.dataBinding.parserPlaceholder', 'Select a parser...')\n : t('bigconsole.builder.dataBinding.parserPlaceholderNoSink', 'Select a DataSink first...')\n }\n disabled={!dataSinkKey}\n />\n </div>\n </div>\n </Section>\n\n <Section\n title={statusLabels[status]}\n tone={STATUS_TONES[status]}\n padding=\"compact\"\n headingLevel={3}\n icon={status === 'loading' ? <Spinner style={{ width: '14px', height: '14px' }} /> : undefined}\n data-testid=\"widget-inspector-binding-status\"\n >\n <div role=\"status\" aria-live=\"polite\" className=\"min-w-0 space-y-1\">\n {/*\n The status label is the section heading, which sits OUTSIDE this live\n region — without this echo a screen reader would never hear the binding\n flip from \"loading\" to \"bound\".\n */}\n <p className=\"sr-only\">{statusLabels[status]}</p>\n {error && <p className=\"break-words text-xs text-[var(--color-status-error-text)]\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"break-words text-xs text-[var(--color-status-warning-text)]\">\n {t('bigconsole.builder.dataBinding.missingFields', 'Missing: {{fields}}', {\n fields: missingFields.join(', '),\n })}\n </p>\n )}\n {!error && missingFields.length === 0 && status === 'bound' && (\n <p className=\"text-xs text-text-secondary\">\n The parser ran and its output matches the fields this widget expects.\n </p>\n )}\n </div>\n </Section>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.fieldMappingsConfigured', 'Field mappings configured')}\n headingLevel={3}\n >\n <div className=\"min-w-0 space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name} className=\"break-words\">\n {name}: <code className=\"rounded bg-bg-surface px-1 font-mono\">{path}</code>\n </p>\n ))}\n </div>\n </Section>\n )}\n\n {preview !== undefined && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.livePreviewLabel', 'Live Preview')}\n description=\"Raw parser output, exactly as the widget receives it.\"\n headingLevel={3}\n >\n <pre className=\"max-h-40 min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-surface p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </Section>\n )}\n\n <Section emphasis=\"muted\" padding=\"compact\" title=\"Data path\" headingLevel={3}>\n <div className=\"space-y-2\">\n <Label htmlFor=\"widget-inspector-data-path\">\n {t('bigconsole.builder.dataBinding.dataPathLabel', 'Data Path (Optional)')}\n </Label>\n <Input\n id=\"widget-inspector-data-path\"\n value={dataPath ?? ''}\n onChange={(event) => onDataPathChange(event.target.value || undefined)}\n placeholder={t('bigconsole.builder.dataBinding.dataPathPlaceholder', 'e.g., summary.totalRevenue')}\n />\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'bigconsole.builder.dataBinding.dataPathHelp',\n 'Path to extract specific data from the parser output (dot notation)'\n )}\n </p>\n </div>\n </Section>\n </SectionStack>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DataBindingSection.js","names":[],"sources":["../../../../../src/bigconsole/components/builder/inspector/DataBindingSection.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { Input, Label, Spinner } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { WidgetBinding, WidgetBindingStatus, Parser } from '../../../types';\nimport { DataSinkSelector } from '../../parser/DataSinkSelector';\nimport { ParserSelector } from '../../parser/ParserSelector';\nimport { Section, SectionStack, type SectionTone } from '../../common';\n\nexport interface DataBindingSectionProps {\n consoleId: string;\n binding: WidgetBinding;\n resolvedParser?: Parser;\n dataSinkKey: string | null;\n dataPath?: string;\n status: WidgetBindingStatus;\n resolving?: boolean;\n missingFields?: string[];\n preview?: unknown;\n error?: string | null;\n onDataSinkChange: (key: string | null) => void;\n onParserChange: (parserId: string | null) => void;\n onDataPathChange: (path: string | undefined) => void;\n}\n\n/**\n * Binding health is the single most important signal on this tab, so it gets a\n * toned section of its own instead of the bare `<p class=\"text-xs\">` it used to\n * be (BOFF-5636).\n */\nconst STATUS_TONES: Record<WidgetBindingStatus, SectionTone> = {\n unbound: 'info',\n loading: 'info',\n bound: 'success',\n no_data: 'warning',\n parser_error: 'danger',\n field_mismatch: 'warning',\n};\n\nexport const DataBindingSection: FC<DataBindingSectionProps> = ({\n consoleId,\n binding,\n resolvedParser,\n dataSinkKey,\n dataPath,\n status,\n resolving = false,\n missingFields = [],\n preview,\n error,\n onDataSinkChange,\n onParserChange,\n onDataPathChange,\n}) => {\n const { t } = useI18n();\n\n const statusLabels: Record<WidgetBindingStatus, string> = {\n unbound: t('bigconsole.builder.dataBinding.status.unbound', 'Select a DataSink to begin'),\n loading: resolving\n ? t('bigconsole.parsers.selector.loading', 'Loading parsers...')\n : t('bigconsole.builder.dataBinding.status.loading', 'Testing parser and detecting fields…'),\n bound: t('bigconsole.builder.dataBinding.status.bound', 'Binding ready'),\n no_data: t('bigconsole.builder.dataBinding.status.noData', 'Parser returned no data'),\n parser_error: t('bigconsole.builder.dataBinding.status.parserError', 'Parser test failed'),\n field_mismatch: t('bigconsole.builder.dataBinding.status.fieldMismatch', 'Some mapped fields were not found'),\n };\n\n return (\n <SectionStack>\n <Section\n title=\"Data source\"\n description={t(\n 'bigconsole.builder.dataBinding.intro',\n 'Connect this widget to a DataSink and Parser to display transformed data.'\n )}\n data-testid=\"widget-inspector-data-source\"\n >\n <div className=\"flex flex-col gap-form-gap\">\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.dataSinkLabel', 'DataSink')}</Label>\n <DataSinkSelector\n value={dataSinkKey}\n onChange={onDataSinkChange}\n placeholder={t('bigconsole.builder.dataBinding.dataSinkPlaceholder', 'Select a DataSink...')}\n />\n {dataSinkKey && (\n <p className=\"text-xs text-text-secondary\">\n {t('bigconsole.builder.dataBinding.keyLabel', 'Key: {{key}}', { key: dataSinkKey })}\n {binding.source.ref && (\n <span className=\"ml-2 text-text-muted\">\n {t('bigconsole.builder.dataBinding.idLabel', 'ID: {{id}}...', {\n id: binding.source.ref.slice(0, 8),\n })}\n </span>\n )}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label>{t('bigconsole.builder.dataBinding.parserLabel', 'Parser')}</Label>\n <ParserSelector\n consoleId={consoleId}\n value={binding.parserId ?? null}\n resolvedParser={resolvedParser}\n onChange={onParserChange}\n filterInputSinkKey={dataSinkKey ?? undefined}\n filterStatus={undefined}\n placeholder={\n dataSinkKey\n ? t('bigconsole.builder.dataBinding.parserPlaceholder', 'Select a parser...')\n : t('bigconsole.builder.dataBinding.parserPlaceholderNoSink', 'Select a DataSink first...')\n }\n disabled={!dataSinkKey}\n />\n </div>\n </div>\n </Section>\n\n <Section\n title={statusLabels[status]}\n tone={STATUS_TONES[status]}\n padding=\"compact\"\n headingLevel={3}\n icon={status === 'loading' ? <Spinner style={{ width: '14px', height: '14px' }} /> : undefined}\n data-testid=\"widget-inspector-binding-status\"\n >\n <div role=\"status\" aria-live=\"polite\" className=\"min-w-0 space-y-1\">\n {/*\n The status label is the section heading, which sits OUTSIDE this live\n region — without this echo a screen reader would never hear the binding\n flip from \"loading\" to \"bound\".\n */}\n <p className=\"sr-only\">{statusLabels[status]}</p>\n {error && <p className=\"break-words text-xs text-[var(--color-status-error-text)]\">{error}</p>}\n {missingFields.length > 0 && (\n <p className=\"break-words text-xs text-[var(--color-status-warning-text)]\">\n {t('bigconsole.builder.dataBinding.missingFields', 'Missing: {{fields}}', {\n fields: missingFields.join(', '),\n })}\n </p>\n )}\n {!error && missingFields.length === 0 && status === 'bound' && preview !== undefined && (\n <p className=\"text-xs text-text-secondary\">\n The parser ran and its output matches the fields this widget expects.\n </p>\n )}\n </div>\n </Section>\n\n {binding.parserId && Object.keys(binding.fields).length > 0 && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.fieldMappingsConfigured', 'Field mappings configured')}\n headingLevel={3}\n >\n <div className=\"min-w-0 space-y-1 text-xs text-text-secondary\">\n {Object.entries(binding.fields).map(([name, path]) => (\n <p key={name} className=\"break-words\">\n {name}: <code className=\"rounded bg-bg-surface px-1 font-mono\">{path}</code>\n </p>\n ))}\n </div>\n </Section>\n )}\n\n {preview !== undefined && (\n <Section\n emphasis=\"muted\"\n padding=\"compact\"\n title={t('bigconsole.builder.dataBinding.livePreviewLabel', 'Live Preview')}\n description=\"Raw parser output, exactly as the widget receives it.\"\n headingLevel={3}\n >\n <pre className=\"max-h-40 min-w-0 overflow-auto rounded-input border border-[var(--color-border-subtle)] bg-bg-surface p-3 text-xs text-text-secondary\">\n {JSON.stringify(preview, null, 2)}\n </pre>\n </Section>\n )}\n\n <Section emphasis=\"muted\" padding=\"compact\" title=\"Data path\" headingLevel={3}>\n <div className=\"space-y-2\">\n <Label htmlFor=\"widget-inspector-data-path\">\n {t('bigconsole.builder.dataBinding.dataPathLabel', 'Data Path (Optional)')}\n </Label>\n <Input\n id=\"widget-inspector-data-path\"\n value={dataPath ?? ''}\n onChange={(event) => onDataPathChange(event.target.value || undefined)}\n placeholder={t('bigconsole.builder.dataBinding.dataPathPlaceholder', 'e.g., summary.totalRevenue')}\n />\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'bigconsole.builder.dataBinding.dataPathHelp',\n 'Path to extract specific data from the parser output (dot notation)'\n )}\n </p>\n </div>\n </Section>\n </SectionStack>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardCanvas.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/dashboard/DashboardCanvas.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardCanvas.d.ts","sourceRoot":"","sources":["../../../../src/bigconsole/components/dashboard/DashboardCanvas.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAA2D,MAAM,OAAO,CAAC;AAsBzF,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc3E,MAAM,WAAW,oBAAoB;IACnC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,0CAA0C;IAC1C,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACrD,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,uCAAuC;IACvC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,oCAAoC;IACpC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmBD,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAqmBnD,CAAC;AAEH,eAAe,eAAe,CAAC"}
|