@aintela/bi 0.2.0
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/README.md +299 -0
- package/dist/BiClientProvider-CWJochvi.js +219 -0
- package/dist/BiClientProvider-CWJochvi.js.map +1 -0
- package/dist/ChartCardDefaultsContext-Cl5T25H0.js +32 -0
- package/dist/ChartCardDefaultsContext-Cl5T25H0.js.map +1 -0
- package/dist/ChartContext-C_f_6khG.js +14 -0
- package/dist/ChartContext-C_f_6khG.js.map +1 -0
- package/dist/DashboardParametersContext-Clv--79U.js +39 -0
- package/dist/DashboardParametersContext-Clv--79U.js.map +1 -0
- package/dist/cards/ChartCard.d.ts +62 -0
- package/dist/cards/DataTableCard.d.ts +55 -0
- package/dist/cards/GaugeCard.d.ts +20 -0
- package/dist/cards/GaugeGroup.d.ts +12 -0
- package/dist/cards/MapBubbles.d.ts +35 -0
- package/dist/cards/MapConnections.d.ts +28 -0
- package/dist/cards/MetricCard.d.ts +15 -0
- package/dist/cards/MetricGroupCard.d.ts +10 -0
- package/dist/cards/TreeMapCard.d.ts +15 -0
- package/dist/cards/geoLayers.d.ts +23 -0
- package/dist/cards/index.d.ts +24 -0
- package/dist/cards/licenseGuard.d.ts +9 -0
- package/dist/cards/mapUtils.d.ts +23 -0
- package/dist/cards/useContainerRectangle.d.ts +9 -0
- package/dist/cards/worldMapPath.d.ts +7 -0
- package/dist/cards.d.ts +2 -0
- package/dist/cards.js +28 -0
- package/dist/cards.js.map +1 -0
- package/dist/client/BiClient.d.ts +160 -0
- package/dist/client/BiClientProvider.d.ts +21 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +11 -0
- package/dist/client.js.map +1 -0
- package/dist/composer/environment/environmentDom.d.ts +31 -0
- package/dist/composer/environment/types.d.ts +67 -0
- package/dist/composer/icons/cardTypeIcons.d.ts +31 -0
- package/dist/composer/index.d.ts +66 -0
- package/dist/composer/llm/ExampleCardSketch.d.ts +22 -0
- package/dist/composer/llm/ExamplePad.d.ts +18 -0
- package/dist/composer/llm/PrototypePad.d.ts +13 -0
- package/dist/composer/llm/useDashboardPad.d.ts +25 -0
- package/dist/composer/models/catalog.d.ts +33 -0
- package/dist/composer/models/sketchModels.d.ts +102 -0
- package/dist/composer/models/utils.d.ts +9 -0
- package/dist/composer/pad/CardSketch.d.ts +25 -0
- package/dist/composer/pad/ClonedComponent.d.ts +13 -0
- package/dist/composer/pad/DashboardPad.d.ts +38 -0
- package/dist/composer/pad/DashboardPadEditor.d.ts +35 -0
- package/dist/composer/pad/DashboardPadSketch.d.ts +31 -0
- package/dist/composer/pad/DatasetParameterizationControls.d.ts +34 -0
- package/dist/composer/pad/FilterSketch.d.ts +10 -0
- package/dist/composer/pad/HoverButton.d.ts +12 -0
- package/dist/composer/pad/TitleSketch.d.ts +19 -0
- package/dist/composer/pad/ToolBox.d.ts +11 -0
- package/dist/composer/store/ComposerProvider.d.ts +36 -0
- package/dist/composer/store/createComposerStore.d.ts +107 -0
- package/dist/composer/store/drafts.d.ts +20 -0
- package/dist/composer/view/ComposerChatBinding.d.ts +10 -0
- package/dist/composer/view/ComposerView.d.ts +49 -0
- package/dist/composer/view/DashboardPin.d.ts +3 -0
- package/dist/composer/view/DashboardSidePanel.d.ts +10 -0
- package/dist/composer/view/DrawablePrompt.d.ts +22 -0
- package/dist/composer/view/EntryEmptyState.d.ts +22 -0
- package/dist/composer/view/SpotlightOverlay.d.ts +21 -0
- package/dist/composer/view/composerAnimations.d.ts +11 -0
- package/dist/composer/view/composerTypes.d.ts +18 -0
- package/dist/composer/view/data/suggestions.d.ts +10 -0
- package/dist/composer/view/data/templates.d.ts +33 -0
- package/dist/composer/view/surfaces.d.ts +19 -0
- package/dist/composer/view/useComposerChatBridge.d.ts +43 -0
- package/dist/composer.d.ts +2 -0
- package/dist/composer.js +99 -0
- package/dist/composer.js.map +1 -0
- package/dist/createBiTheme-TyUv_UHM.js +93 -0
- package/dist/createBiTheme-TyUv_UHM.js.map +1 -0
- package/dist/data/ChartCardDefaultsContext.d.ts +43 -0
- package/dist/data/dataUtils.d.ts +152 -0
- package/dist/data/index.d.ts +5 -0
- package/dist/data/queryModel.d.ts +23 -0
- package/dist/data.d.ts +2 -0
- package/dist/data.js +37 -0
- package/dist/data.js.map +1 -0
- package/dist/dataUtils-CAUE5uZY.js +372 -0
- package/dist/dataUtils-CAUE5uZY.js.map +1 -0
- package/dist/filters/VizAutoComplete.d.ts +23 -0
- package/dist/filters/VizDatePicker.d.ts +9 -0
- package/dist/filters/VizDateRangePicker.d.ts +14 -0
- package/dist/filters/VizSelect.d.ts +12 -0
- package/dist/filters/VizTextField.d.ts +8 -0
- package/dist/filters/VizTriggerButton.d.ts +9 -0
- package/dist/filters/filterFactory.d.ts +30 -0
- package/dist/filters/friendlyName.d.ts +4 -0
- package/dist/filters/index.d.ts +15 -0
- package/dist/filters.d.ts +2 -0
- package/dist/filters.js +15 -0
- package/dist/filters.js.map +1 -0
- package/dist/grid/BiErrorBoundary.d.ts +24 -0
- package/dist/grid/ChartContext.d.ts +14 -0
- package/dist/grid/GridCard.d.ts +45 -0
- package/dist/grid/GridCardPlaceHolder.d.ts +8 -0
- package/dist/grid/GridLayout.d.ts +147 -0
- package/dist/grid/gridModels.d.ts +33 -0
- package/dist/grid/index.d.ts +14 -0
- package/dist/grid/types.d.ts +23 -0
- package/dist/grid/useGridConfigTranslator.d.ts +72 -0
- package/dist/grid.d.ts +2 -0
- package/dist/grid.js +20 -0
- package/dist/grid.js.map +1 -0
- package/dist/hooks/DashboardParametersContext.d.ts +32 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/useDashboardData.d.ts +20 -0
- package/dist/hooks/useDashboardLazyData.d.ts +79 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.js +16 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index-BYc79sSy.js +131 -0
- package/dist/index-BYc79sSy.js.map +1 -0
- package/dist/index-C6JQ6770.js +4545 -0
- package/dist/index-C6JQ6770.js.map +1 -0
- package/dist/index-CZbCaXMC.js +15 -0
- package/dist/index-CZbCaXMC.js.map +1 -0
- package/dist/index-D3OoOPjl.js +259 -0
- package/dist/index-D3OoOPjl.js.map +1 -0
- package/dist/index-D7Oo_dC-.js +94 -0
- package/dist/index-D7Oo_dC-.js.map +1 -0
- package/dist/index-D7tVPX8d.js +347 -0
- package/dist/index-D7tVPX8d.js.map +1 -0
- package/dist/index-DGyvUtY3.js +494 -0
- package/dist/index-DGyvUtY3.js.map +1 -0
- package/dist/index-DOpx0R4Y.js +41 -0
- package/dist/index-DOpx0R4Y.js.map +1 -0
- package/dist/index-wtSLspPh.js +1065 -0
- package/dist/index-wtSLspPh.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +236 -0
- package/dist/index.js.map +1 -0
- package/dist/inline/Chart.d.ts +29 -0
- package/dist/inline/IFrame.d.ts +19 -0
- package/dist/inline/Metric.d.ts +16 -0
- package/dist/inline/MetricGroup.d.ts +11 -0
- package/dist/inline/index.d.ts +9 -0
- package/dist/inline/parseKnownNumbers.d.ts +11 -0
- package/dist/inline.d.ts +2 -0
- package/dist/inline.js +9 -0
- package/dist/inline.js.map +1 -0
- package/dist/runtime/IDashboardDefinition.d.ts +22 -0
- package/dist/runtime/biModuleSurface.d.ts +2 -0
- package/dist/runtime/createBiUiTools.d.ts +74 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/loadDashboardBundle.d.ts +32 -0
- package/dist/runtime/registerBiModules.d.ts +36 -0
- package/dist/runtime/version.d.ts +6 -0
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.js +19 -0
- package/dist/runtime.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/theme/BiThemeBridge.d.ts +32 -0
- package/dist/theme/biPalette.d.ts +23 -0
- package/dist/theme/createBiTheme.d.ts +25 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js +15 -0
- package/dist/theme.js.map +1 -0
- package/dist/version-DnqajORq.js +83 -0
- package/dist/version-DnqajORq.js.map +1 -0
- package/dist/viewer/ScriptDashboardViewer.d.ts +82 -0
- package/dist/viewer/ScriptDashboardViewerVertical.d.ts +24 -0
- package/dist/viewer/cardMetadata.d.ts +15 -0
- package/dist/viewer/index.d.ts +8 -0
- package/dist/viewer/models.d.ts +67 -0
- package/dist/viewer/useDashboardBundle.d.ts +73 -0
- package/dist/viewer.d.ts +2 -0
- package/dist/viewer.js +9 -0
- package/dist/viewer.js.map +1 -0
- package/package.json +196 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
var M = Object.defineProperty;
|
|
2
|
+
var o = (e, n) => M(e, "name", { value: n, configurable: !0 });
|
|
3
|
+
import { jsx as i, jsxs as t, Fragment as N } from "react/jsx-runtime";
|
|
4
|
+
import { useCallback as S } from "react";
|
|
5
|
+
import { Box as x, Paper as C, Typography as y, Tooltip as I, IconButton as z, Stack as q } from "@mui/material";
|
|
6
|
+
import F from "@mui/icons-material/SettingsOverscan";
|
|
7
|
+
import { u as $, e as j } from "./BiClientProvider-CWJochvi.js";
|
|
8
|
+
import P from "@mui/icons-material/TrendingUp";
|
|
9
|
+
import B from "@mui/icons-material/TrendingDown";
|
|
10
|
+
import T from "@mui/icons-material/TrendingFlat";
|
|
11
|
+
import { u as V } from "./createBiTheme-TyUv_UHM.js";
|
|
12
|
+
const _ = /* @__PURE__ */ o(({ src: e, name: n, reasoning: a, alt: c, naked: m, sessionId: d, dashboardId: f, id: l, onExpand: r }) => {
|
|
13
|
+
const u = $(), g = j(), p = { sessionId: d ?? g, dashboardId: f }, b = u.artifactUrl(e, p), h = S(() => {
|
|
14
|
+
r ? r({ src: e, url: b, name: n, reasoning: a }) : typeof window < "u" && window.open(b, "_blank", "noopener");
|
|
15
|
+
}, [r, e, b, n, a]), v = /* @__PURE__ */ i(
|
|
16
|
+
"img",
|
|
17
|
+
{
|
|
18
|
+
src: b,
|
|
19
|
+
alt: c ?? n ?? "",
|
|
20
|
+
title: a,
|
|
21
|
+
onClick: h,
|
|
22
|
+
style: { maxWidth: "100%", maxHeight: 480, width: "auto", height: "auto", objectFit: "scale-down", display: "block", cursor: "zoom-in", borderRadius: "var(--bi-radius)" }
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
return m ? /* @__PURE__ */ i(x, { id: l, sx: { position: "relative", width: "100%", my: 1 }, children: v }) : /* @__PURE__ */ t(C, { id: l, variant: "outlined", className: "bi-chart", sx: { position: "relative", my: 2, p: 1, bgcolor: "background.paper", borderColor: "divider", minHeight: 120 }, children: [
|
|
26
|
+
/* @__PURE__ */ t(x, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", mb: 0.5, minHeight: 32 }, children: [
|
|
27
|
+
/* @__PURE__ */ i(y, { variant: "overline", color: "text.secondary", sx: { letterSpacing: 0.6, lineHeight: 1.4, pl: 0.5 }, children: n ?? "" }),
|
|
28
|
+
/* @__PURE__ */ i(I, { title: "Expandir", children: /* @__PURE__ */ i(z, { size: "small", onClick: h, "aria-label": "Expandir gráfico", "data-src": e, children: /* @__PURE__ */ i(F, { fontSize: "small" }) }) })
|
|
29
|
+
] }),
|
|
30
|
+
/* @__PURE__ */ i(x, { sx: { display: "flex", justifyContent: "center" }, children: v })
|
|
31
|
+
] });
|
|
32
|
+
}, "Chart");
|
|
33
|
+
function k(e) {
|
|
34
|
+
if (!e) return { prefix: void 0, suffix: void 0, number: void 0 };
|
|
35
|
+
const n = /[$%(\w?$)]/gi, a = /[a-z]?\$/gi;
|
|
36
|
+
let c = "", m = "";
|
|
37
|
+
if (e.match(n)) {
|
|
38
|
+
e.indexOf("%") > -1 && (m = " %");
|
|
39
|
+
const l = e.match(a);
|
|
40
|
+
l && (c = l[0] + " ");
|
|
41
|
+
}
|
|
42
|
+
let d = parseFloat(e);
|
|
43
|
+
if (!isNaN(d))
|
|
44
|
+
return e = e.replaceAll(".", "").replaceAll(",", "."), { prefix: c, suffix: m, number: parseFloat(e) };
|
|
45
|
+
let f = "";
|
|
46
|
+
for (const l of e)
|
|
47
|
+
if (l.match(/[0-9.,]/)) {
|
|
48
|
+
let r = l;
|
|
49
|
+
r === "." ? r = "" : r === "," && (r = "."), f += r;
|
|
50
|
+
}
|
|
51
|
+
return d = parseFloat(f), isNaN(d) ? { prefix: void 0, suffix: void 0, number: void 0 } : { prefix: c, suffix: m, number: d };
|
|
52
|
+
}
|
|
53
|
+
o(k, "parseKnownNumbers");
|
|
54
|
+
const w = /* @__PURE__ */ o((e) => {
|
|
55
|
+
if (!e) return /* @__PURE__ */ i("span", { children: "N/A" });
|
|
56
|
+
const n = Math.abs(e);
|
|
57
|
+
return n >= 1e9 ? /* @__PURE__ */ t(N, { children: [
|
|
58
|
+
/* @__PURE__ */ i("span", { children: (e / 1e9).toFixed(2).replace(/\.?0+$/, "") }),
|
|
59
|
+
" ",
|
|
60
|
+
/* @__PURE__ */ i("span", { className: "billion", children: "B" })
|
|
61
|
+
] }) : n >= 1e6 ? /* @__PURE__ */ t(N, { children: [
|
|
62
|
+
/* @__PURE__ */ i("span", { children: (e / 1e6).toFixed(3).replace(/\.?0+$/, "") }),
|
|
63
|
+
/* @__PURE__ */ i("span", { className: "million", children: "M" })
|
|
64
|
+
] }) : n >= 1e3 ? /* @__PURE__ */ t(N, { children: [
|
|
65
|
+
/* @__PURE__ */ i("span", { children: (e / 1e3).toFixed(2).replace(/\.?0+$/, "") }),
|
|
66
|
+
/* @__PURE__ */ i("span", { className: "thousand", children: "K" })
|
|
67
|
+
] }) : /* @__PURE__ */ i("span", { children: e.toString() });
|
|
68
|
+
}, "formatValue"), H = /* @__PURE__ */ o((e, n) => {
|
|
69
|
+
if (e = e ?? 0, n = n ?? 0, !n) return { percentage: 0, trend: "flat" };
|
|
70
|
+
const a = (e - n) / n * 100, c = a > 0 ? "up" : a < 0 ? "down" : "flat";
|
|
71
|
+
return { percentage: Math.abs(a), trend: c };
|
|
72
|
+
}, "calculateDelta"), A = /* @__PURE__ */ o((e) => {
|
|
73
|
+
const n = V(), a = /* @__PURE__ */ o((s) => s === "up" ? n.positive : s === "down" ? n.negative : n.neutral, "trendColor"), c = /* @__PURE__ */ o((s) => s === "up" ? /* @__PURE__ */ i(P, { fontSize: "small" }) : s === "down" ? /* @__PURE__ */ i(B, { fontSize: "small" }) : /* @__PURE__ */ i(T, { fontSize: "small" }), "trendIcon"), m = /* @__PURE__ */ o((s) => s === "up" ? "+" : s === "down" ? "-" : "", "trendPrefix"), d = /* @__PURE__ */ o((s) => s === "up" ? "kpi-change-up" : s === "down" ? "kpi-change-down" : "kpi-change-flat", "trendClass"), { prefix: f, suffix: l, number: r } = k(e.currentValue), { prefix: u, suffix: g, number: p } = k(e.previousValue), { percentage: b, trend: h } = H(r, p), v = e.partial ? "-nohover" : "";
|
|
74
|
+
return /* @__PURE__ */ t("div", { className: `quick-stat${v}`, children: [
|
|
75
|
+
e.icon && /* @__PURE__ */ i("div", { className: "quick-stat-icon kpi", children: /* @__PURE__ */ i("i", { className: "material-icons", children: e.icon }) }),
|
|
76
|
+
/* @__PURE__ */ t("div", { className: "quick-stat-content", children: [
|
|
77
|
+
/* @__PURE__ */ t("div", { className: "quick-stat-value", children: [
|
|
78
|
+
e.prefix ?? f,
|
|
79
|
+
w(r),
|
|
80
|
+
e.suffix ?? l
|
|
81
|
+
] }),
|
|
82
|
+
e.description && /* @__PURE__ */ i(y, { component: "div", className: "quick-stat-label", variant: "body2", children: e.description }),
|
|
83
|
+
e.previousValue && /* @__PURE__ */ t(q, { direction: "row", spacing: 1, sx: { alignItems: "center" }, children: [
|
|
84
|
+
/* @__PURE__ */ t("div", { className: `kpi-change ${d(h)}`, style: { color: a(h) }, children: [
|
|
85
|
+
m(h),
|
|
86
|
+
c(h),
|
|
87
|
+
e.differenceStyle === "Value" && r != null && p != null ? w(Math.abs(r - p)) : `${b.toFixed(2)}%`
|
|
88
|
+
] }),
|
|
89
|
+
/* @__PURE__ */ t("div", { className: "quick-stat-label", style: { fontStyle: "italic" }, children: [
|
|
90
|
+
u,
|
|
91
|
+
w(p),
|
|
92
|
+
g
|
|
93
|
+
] })
|
|
94
|
+
] })
|
|
95
|
+
] })
|
|
96
|
+
] });
|
|
97
|
+
}, "Metric"), O = /* @__PURE__ */ o((e) => /* @__PURE__ */ t("div", { className: "bi-metric-group", children: [
|
|
98
|
+
e.title && /* @__PURE__ */ t(y, { variant: "overline", color: "text.secondary", sx: { px: 0.5, letterSpacing: 0.6 }, children: [
|
|
99
|
+
e.materialIcon && /* @__PURE__ */ i("i", { className: "material-icons", style: { fontSize: 14, verticalAlign: "middle", marginRight: 4 }, children: e.materialIcon }),
|
|
100
|
+
e.title
|
|
101
|
+
] }),
|
|
102
|
+
/* @__PURE__ */ i("div", { className: "ds-card-body", children: /* @__PURE__ */ i("div", { className: "quick-stats", children: e.children }) }),
|
|
103
|
+
e.footNote && /* @__PURE__ */ i("div", { className: "ds-card-footer", children: /* @__PURE__ */ i("small", { children: e.footNote }) })
|
|
104
|
+
] }), "MetricGroup"), R = /* @__PURE__ */ o(({ id: e, name: n, src: a, sessionId: c, partial: m, height: d = 400, onExpand: f }) => {
|
|
105
|
+
const l = $(), r = j(), u = l.iframeUrl(a, { sessionId: c ?? r }), g = S(() => {
|
|
106
|
+
f ? f({ name: n, url: u }) : typeof window < "u" && window.open(u, "_blank", "noopener");
|
|
107
|
+
}, [f, n, u]);
|
|
108
|
+
return /* @__PURE__ */ t(C, { id: e, variant: "outlined", className: `bi-iframe${m ? " bi-iframe-partial" : ""}`, sx: { position: "relative", my: 2, p: 1, bgcolor: "background.paper", borderColor: "divider" }, children: [
|
|
109
|
+
/* @__PURE__ */ t(x, { sx: { display: "flex", alignItems: "center", justifyContent: "space-between", mb: 0.5 }, children: [
|
|
110
|
+
/* @__PURE__ */ i(y, { variant: "overline", color: "text.secondary", sx: { letterSpacing: 0.6, pl: 0.5 }, children: n }),
|
|
111
|
+
/* @__PURE__ */ i(I, { title: "Expandir", children: /* @__PURE__ */ i(z, { size: "small", onClick: g, "aria-label": "Expandir", "data-src": u, children: /* @__PURE__ */ i(F, { fontSize: "small" }) }) })
|
|
112
|
+
] }),
|
|
113
|
+
/* @__PURE__ */ i(x, { className: "iframe-container", sx: { border: "1px dashed", borderColor: "divider", borderRadius: 1, bgcolor: "action.hover" }, children: /* @__PURE__ */ i("iframe", { title: n, src: u, style: { minHeight: d, width: "100%", border: 0, borderRadius: "var(--bi-radius)" } }) })
|
|
114
|
+
] });
|
|
115
|
+
}, "IFrame"), Y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
116
|
+
__proto__: null,
|
|
117
|
+
Chart: _,
|
|
118
|
+
IFrame: R,
|
|
119
|
+
Metric: A,
|
|
120
|
+
MetricGroup: O,
|
|
121
|
+
parseKnownNumbers: k
|
|
122
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
123
|
+
export {
|
|
124
|
+
_ as C,
|
|
125
|
+
R as I,
|
|
126
|
+
A as M,
|
|
127
|
+
O as a,
|
|
128
|
+
Y as b,
|
|
129
|
+
k as p
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=index-BYc79sSy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BYc79sSy.js","sources":["../src/inline/Chart.tsx","../src/inline/parseKnownNumbers.ts","../src/inline/Metric.tsx","../src/inline/MetricGroup.tsx","../src/inline/IFrame.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Box, IconButton, Paper, Tooltip, Typography } from '@mui/material';\nimport SettingsOverscanIcon from '@mui/icons-material/SettingsOverscan';\nimport { useBiClient, useBiSessionId, type ArtifactUrlScope } from '../client';\n\nexport interface ChartExpandInfo {\n src: string;\n url: string;\n name?: string;\n reasoning?: string;\n}\n\nexport interface ChartProps {\n /** Artifact file name as the tool returned it (e.g. `chart_1.png`). */\n src: string;\n name?: string;\n reasoning?: string;\n alt?: string;\n /** Just the image, no card chrome. */\n naked?: boolean;\n /** Artifact scope; defaults to the `BiClientProvider`'s `sessionId`. */\n sessionId?: string;\n dashboardId?: string;\n id?: string;\n /** Called from the expand affordance. When omitted the image opens in a new tab. */\n onExpand?: (info: ChartExpandInfo) => void;\n}\n\n/**\n * The explorer's chart card: a matplotlib PNG rendered server-side and served\n * as an artifact. The URL comes from the injected `BiClient`\n * (`client.artifactUrl(src, { sessionId, dashboardId })`).\n */\nexport const Chart: React.FC<ChartProps> = ({ src, name, reasoning, alt, naked, sessionId, dashboardId, id, onExpand }) => {\n const client = useBiClient();\n const ambientSession = useBiSessionId();\n const scope: ArtifactUrlScope = { sessionId: sessionId ?? ambientSession, dashboardId };\n const url = client.artifactUrl(src, scope);\n\n const expand = useCallback(() => {\n if (onExpand) onExpand({ src, url, name, reasoning });\n else if (typeof window !== 'undefined') window.open(url, '_blank', 'noopener');\n }, [onExpand, src, url, name, reasoning]);\n\n const img = (\n <img\n src={url}\n alt={alt ?? name ?? ''}\n title={reasoning}\n onClick={expand}\n style={{ maxWidth: '100%', maxHeight: 480, width: 'auto', height: 'auto', objectFit: 'scale-down', display: 'block', cursor: 'zoom-in', borderRadius: 'var(--bi-radius)' }}\n />\n );\n\n if (naked) return <Box id={id} sx={{ position: 'relative', width: '100%', my: 1 }}>{img}</Box>;\n\n return (\n <Paper id={id} variant=\"outlined\" className=\"bi-chart\" sx={{ position: 'relative', my: 2, p: 1, bgcolor: 'background.paper', borderColor: 'divider', minHeight: 120 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 0.5, minHeight: 32 }}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ letterSpacing: 0.6, lineHeight: 1.4, pl: 0.5 }}>\n {name ?? ''}\n </Typography>\n <Tooltip title=\"Expandir\">\n <IconButton size=\"small\" onClick={expand} aria-label=\"Expandir gráfico\" data-src={src}>\n <SettingsOverscanIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n <Box sx={{ display: 'flex', justifyContent: 'center' }}>{img}</Box>\n </Paper>\n );\n};\n\nexport default Chart;\n","/**\n * Splits a formatted figure such as `\"R$ 1.234,56\"` or `\"12,5%\"` into a\n * currency/percent prefix + suffix and a JS number. Mirrors the chat library's\n * `parseKnownNumbers` (`src/utils/stringUtils.ts`), which is not part of its\n * public `@aintela/chat/utils` surface — so it lives here.\n */\nexport function parseKnownNumbers(text?: string): { prefix?: string; suffix?: string; number?: number } {\n if (!text) return { prefix: undefined, suffix: undefined, number: undefined };\n\n const knownChars = /[$%(\\w?$)]/gi;\n const currencySymbol = /[a-z]?\\$/gi;\n\n let prefix = '';\n let suffix = '';\n\n if (text.match(knownChars)) {\n if (text.indexOf('%') > -1) suffix = ' %';\n const match = text.match(currencySymbol);\n if (match) prefix = match[0] + ' ';\n }\n\n let number = parseFloat(text);\n if (!isNaN(number)) {\n text = text.replaceAll('.', '').replaceAll(',', '.');\n return { prefix, suffix, number: parseFloat(text) };\n }\n\n let finalNumber = '';\n for (const char of text) {\n if (char.match(/[0-9.,]/)) {\n let replacedChar = char;\n if (replacedChar === '.') replacedChar = '';\n else if (replacedChar === ',') replacedChar = '.';\n finalNumber += replacedChar;\n }\n }\n\n number = parseFloat(finalNumber);\n if (!isNaN(number)) return { prefix, suffix, number };\n\n return { prefix: undefined, suffix: undefined, number: undefined };\n}\n","import React from 'react';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport TrendingDownIcon from '@mui/icons-material/TrendingDown';\nimport TrendingFlatIcon from '@mui/icons-material/TrendingFlat';\nimport { Stack, Typography } from '@mui/material';\nimport { parseKnownNumbers } from './parseKnownNumbers';\nimport { useBiPalette } from '../theme/createBiTheme';\nimport './inline.css';\n\nexport interface MetricProps {\n preview?: boolean;\n previousValue?: string;\n currentValue: string;\n prefix?: string;\n suffix?: string;\n differenceStyle?: 'Percentage' | 'Value';\n description?: string;\n /** Material Icons ligature name (the host must load the Material Icons font). */\n icon?: string;\n partial?: boolean;\n}\n\nconst formatValue = (value?: number) => {\n if (!value) return <span>N/A</span>;\n const absValue = Math.abs(value);\n if (absValue >= 1e9) return <><span>{(value / 1e9).toFixed(2).replace(/\\.?0+$/, '')}</span> <span className=\"billion\">B</span></>;\n if (absValue >= 1e6) return <><span>{(value / 1e6).toFixed(3).replace(/\\.?0+$/, '')}</span><span className=\"million\">M</span></>;\n if (absValue >= 1e3) return <><span>{(value / 1e3).toFixed(2).replace(/\\.?0+$/, '')}</span><span className=\"thousand\">K</span></>;\n return <span>{value.toString()}</span>;\n};\n\ntype Trend = 'up' | 'down' | 'flat';\n\nconst calculateDelta = (current?: number, previous?: number): { percentage: number; trend: Trend } => {\n current = current ?? 0;\n previous = previous ?? 0;\n if (!previous) return { percentage: 0, trend: 'flat' };\n const percentage = ((current - previous) / previous) * 100;\n const trend: Trend = percentage > 0 ? 'up' : percentage < 0 ? 'down' : 'flat';\n return { percentage: Math.abs(percentage), trend };\n};\n\n/** KPI tile used by `present_metric` / `present_metric_group`. */\nexport const Metric: React.FC<MetricProps> = (props) => {\n const bi = useBiPalette();\n const trendColor = (t: Trend) => (t === 'up' ? bi.positive : t === 'down' ? bi.negative : bi.neutral);\n const trendIcon = (t: Trend) => (t === 'up' ? <TrendingUpIcon fontSize=\"small\" /> : t === 'down' ? <TrendingDownIcon fontSize=\"small\" /> : <TrendingFlatIcon fontSize=\"small\" />);\n const trendPrefix = (t: Trend) => (t === 'up' ? '+' : t === 'down' ? '-' : '');\n const trendClass = (t: Trend) => (t === 'up' ? 'kpi-change-up' : t === 'down' ? 'kpi-change-down' : 'kpi-change-flat');\n\n const { prefix: prefixC, suffix: suffixC, number: numberC } = parseKnownNumbers(props.currentValue);\n const { prefix: prefixP, suffix: suffixP, number: numberP } = parseKnownNumbers(props.previousValue);\n const { percentage, trend } = calculateDelta(numberC, numberP);\n const classNameSuffix = props.partial ? '-nohover' : '';\n\n return (\n <div className={`quick-stat${classNameSuffix}`}>\n {props.icon && (\n <div className=\"quick-stat-icon kpi\">\n <i className=\"material-icons\">{props.icon}</i>\n </div>\n )}\n <div className=\"quick-stat-content\">\n <div className=\"quick-stat-value\">\n {props.prefix ?? prefixC}\n {formatValue(numberC)}\n {props.suffix ?? suffixC}\n </div>\n {props.description && (\n <Typography component=\"div\" className=\"quick-stat-label\" variant=\"body2\">\n {props.description}\n </Typography>\n )}\n {props.previousValue && (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }}>\n <div className={`kpi-change ${trendClass(trend)}`} style={{ color: trendColor(trend) }}>\n {trendPrefix(trend)}\n {trendIcon(trend)}\n {props.differenceStyle === 'Value' && numberC != null && numberP != null\n ? formatValue(Math.abs(numberC - numberP))\n : `${percentage.toFixed(2)}%`}\n </div>\n <div className=\"quick-stat-label\" style={{ fontStyle: 'italic' }}>\n {prefixP}\n {formatValue(numberP)}\n {suffixP}\n </div>\n </Stack>\n )}\n </div>\n </div>\n );\n};\n\nexport default Metric;\n","import React from 'react';\nimport { Typography } from '@mui/material';\nimport './inline.css';\n\nexport interface MetricGroupProps {\n children: React.ReactNode;\n title?: string;\n materialIcon?: string;\n footNote?: string;\n partial?: boolean;\n}\n\n/** A row of `Metric` tiles (`present_metric_group`). */\nexport const MetricGroup: React.FC<MetricGroupProps> = (props) => (\n <div className=\"bi-metric-group\">\n {props.title && (\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ px: 0.5, letterSpacing: 0.6 }}>\n {props.materialIcon && <i className=\"material-icons\" style={{ fontSize: 14, verticalAlign: 'middle', marginRight: 4 }}>{props.materialIcon}</i>}\n {props.title}\n </Typography>\n )}\n <div className=\"ds-card-body\">\n <div className=\"quick-stats\">{props.children}</div>\n </div>\n {props.footNote && (\n <div className=\"ds-card-footer\">\n <small>{props.footNote}</small>\n </div>\n )}\n </div>\n);\n\nexport default MetricGroup;\n","import React, { useCallback } from 'react';\nimport { Box, IconButton, Paper, Tooltip, Typography } from '@mui/material';\nimport SettingsOverscanIcon from '@mui/icons-material/SettingsOverscan';\nimport { useBiClient, useBiSessionId } from '../client';\n\nexport interface IFrameExpandInfo {\n name: string;\n url: string;\n}\n\nexport interface IFrameProps {\n id?: string;\n name: string;\n /** HTML artifact file name (e.g. a folium map). */\n src: string;\n sessionId?: string;\n partial?: boolean;\n height?: number | string;\n /** Called from the expand affordance. When omitted the frame URL opens in a new tab. */\n onExpand?: (info: IFrameExpandInfo) => void;\n}\n\n/** HTML artifact card used by `present_iframe`. URL resolved through the injected `BiClient`. */\nexport const IFrame: React.FC<IFrameProps> = ({ id, name, src, sessionId, partial, height = 400, onExpand }) => {\n const client = useBiClient();\n const ambientSession = useBiSessionId();\n const url = client.iframeUrl(src, { sessionId: sessionId ?? ambientSession });\n\n const expand = useCallback(() => {\n if (onExpand) onExpand({ name, url });\n else if (typeof window !== 'undefined') window.open(url, '_blank', 'noopener');\n }, [onExpand, name, url]);\n\n return (\n <Paper id={id} variant=\"outlined\" className={`bi-iframe${partial ? ' bi-iframe-partial' : ''}`} sx={{ position: 'relative', my: 2, p: 1, bgcolor: 'background.paper', borderColor: 'divider' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 0.5 }}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ letterSpacing: 0.6, pl: 0.5 }}>{name}</Typography>\n <Tooltip title=\"Expandir\">\n <IconButton size=\"small\" onClick={expand} aria-label=\"Expandir\" data-src={url}>\n <SettingsOverscanIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n <Box className=\"iframe-container\" sx={{ border: '1px dashed', borderColor: 'divider', borderRadius: 1, bgcolor: 'action.hover' }}>\n <iframe title={name} src={url} style={{ minHeight: height, width: '100%', border: 0, borderRadius: 'var(--bi-radius)' }} />\n </Box>\n </Paper>\n );\n};\n\nexport default IFrame;\n"],"names":["Chart","__name","src","name","reasoning","alt","naked","sessionId","dashboardId","id","onExpand","client","useBiClient","ambientSession","useBiSessionId","scope","url","expand","useCallback","img","jsx","Box","jsxs","Paper","Typography","Tooltip","IconButton","SettingsOverscanIcon","parseKnownNumbers","text","knownChars","currencySymbol","prefix","suffix","match","number","finalNumber","char","replacedChar","formatValue","value","absValue","Fragment","calculateDelta","current","previous","percentage","trend","Metric","props","bi","useBiPalette","trendColor","t","trendIcon","TrendingUpIcon","TrendingDownIcon","TrendingFlatIcon","trendPrefix","trendClass","prefixC","suffixC","numberC","prefixP","suffixP","numberP","classNameSuffix","Stack","MetricGroup","IFrame","partial","height"],"mappings":"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"}
|