@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.
Files changed (175) hide show
  1. package/README.md +299 -0
  2. package/dist/BiClientProvider-CWJochvi.js +219 -0
  3. package/dist/BiClientProvider-CWJochvi.js.map +1 -0
  4. package/dist/ChartCardDefaultsContext-Cl5T25H0.js +32 -0
  5. package/dist/ChartCardDefaultsContext-Cl5T25H0.js.map +1 -0
  6. package/dist/ChartContext-C_f_6khG.js +14 -0
  7. package/dist/ChartContext-C_f_6khG.js.map +1 -0
  8. package/dist/DashboardParametersContext-Clv--79U.js +39 -0
  9. package/dist/DashboardParametersContext-Clv--79U.js.map +1 -0
  10. package/dist/cards/ChartCard.d.ts +62 -0
  11. package/dist/cards/DataTableCard.d.ts +55 -0
  12. package/dist/cards/GaugeCard.d.ts +20 -0
  13. package/dist/cards/GaugeGroup.d.ts +12 -0
  14. package/dist/cards/MapBubbles.d.ts +35 -0
  15. package/dist/cards/MapConnections.d.ts +28 -0
  16. package/dist/cards/MetricCard.d.ts +15 -0
  17. package/dist/cards/MetricGroupCard.d.ts +10 -0
  18. package/dist/cards/TreeMapCard.d.ts +15 -0
  19. package/dist/cards/geoLayers.d.ts +23 -0
  20. package/dist/cards/index.d.ts +24 -0
  21. package/dist/cards/licenseGuard.d.ts +9 -0
  22. package/dist/cards/mapUtils.d.ts +23 -0
  23. package/dist/cards/useContainerRectangle.d.ts +9 -0
  24. package/dist/cards/worldMapPath.d.ts +7 -0
  25. package/dist/cards.d.ts +2 -0
  26. package/dist/cards.js +28 -0
  27. package/dist/cards.js.map +1 -0
  28. package/dist/client/BiClient.d.ts +160 -0
  29. package/dist/client/BiClientProvider.d.ts +21 -0
  30. package/dist/client/index.d.ts +4 -0
  31. package/dist/client.d.ts +2 -0
  32. package/dist/client.js +11 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/composer/environment/environmentDom.d.ts +31 -0
  35. package/dist/composer/environment/types.d.ts +67 -0
  36. package/dist/composer/icons/cardTypeIcons.d.ts +31 -0
  37. package/dist/composer/index.d.ts +66 -0
  38. package/dist/composer/llm/ExampleCardSketch.d.ts +22 -0
  39. package/dist/composer/llm/ExamplePad.d.ts +18 -0
  40. package/dist/composer/llm/PrototypePad.d.ts +13 -0
  41. package/dist/composer/llm/useDashboardPad.d.ts +25 -0
  42. package/dist/composer/models/catalog.d.ts +33 -0
  43. package/dist/composer/models/sketchModels.d.ts +102 -0
  44. package/dist/composer/models/utils.d.ts +9 -0
  45. package/dist/composer/pad/CardSketch.d.ts +25 -0
  46. package/dist/composer/pad/ClonedComponent.d.ts +13 -0
  47. package/dist/composer/pad/DashboardPad.d.ts +38 -0
  48. package/dist/composer/pad/DashboardPadEditor.d.ts +35 -0
  49. package/dist/composer/pad/DashboardPadSketch.d.ts +31 -0
  50. package/dist/composer/pad/DatasetParameterizationControls.d.ts +34 -0
  51. package/dist/composer/pad/FilterSketch.d.ts +10 -0
  52. package/dist/composer/pad/HoverButton.d.ts +12 -0
  53. package/dist/composer/pad/TitleSketch.d.ts +19 -0
  54. package/dist/composer/pad/ToolBox.d.ts +11 -0
  55. package/dist/composer/store/ComposerProvider.d.ts +36 -0
  56. package/dist/composer/store/createComposerStore.d.ts +107 -0
  57. package/dist/composer/store/drafts.d.ts +20 -0
  58. package/dist/composer/view/ComposerChatBinding.d.ts +10 -0
  59. package/dist/composer/view/ComposerView.d.ts +49 -0
  60. package/dist/composer/view/DashboardPin.d.ts +3 -0
  61. package/dist/composer/view/DashboardSidePanel.d.ts +10 -0
  62. package/dist/composer/view/DrawablePrompt.d.ts +22 -0
  63. package/dist/composer/view/EntryEmptyState.d.ts +22 -0
  64. package/dist/composer/view/SpotlightOverlay.d.ts +21 -0
  65. package/dist/composer/view/composerAnimations.d.ts +11 -0
  66. package/dist/composer/view/composerTypes.d.ts +18 -0
  67. package/dist/composer/view/data/suggestions.d.ts +10 -0
  68. package/dist/composer/view/data/templates.d.ts +33 -0
  69. package/dist/composer/view/surfaces.d.ts +19 -0
  70. package/dist/composer/view/useComposerChatBridge.d.ts +43 -0
  71. package/dist/composer.d.ts +2 -0
  72. package/dist/composer.js +99 -0
  73. package/dist/composer.js.map +1 -0
  74. package/dist/createBiTheme-TyUv_UHM.js +93 -0
  75. package/dist/createBiTheme-TyUv_UHM.js.map +1 -0
  76. package/dist/data/ChartCardDefaultsContext.d.ts +43 -0
  77. package/dist/data/dataUtils.d.ts +152 -0
  78. package/dist/data/index.d.ts +5 -0
  79. package/dist/data/queryModel.d.ts +23 -0
  80. package/dist/data.d.ts +2 -0
  81. package/dist/data.js +37 -0
  82. package/dist/data.js.map +1 -0
  83. package/dist/dataUtils-CAUE5uZY.js +372 -0
  84. package/dist/dataUtils-CAUE5uZY.js.map +1 -0
  85. package/dist/filters/VizAutoComplete.d.ts +23 -0
  86. package/dist/filters/VizDatePicker.d.ts +9 -0
  87. package/dist/filters/VizDateRangePicker.d.ts +14 -0
  88. package/dist/filters/VizSelect.d.ts +12 -0
  89. package/dist/filters/VizTextField.d.ts +8 -0
  90. package/dist/filters/VizTriggerButton.d.ts +9 -0
  91. package/dist/filters/filterFactory.d.ts +30 -0
  92. package/dist/filters/friendlyName.d.ts +4 -0
  93. package/dist/filters/index.d.ts +15 -0
  94. package/dist/filters.d.ts +2 -0
  95. package/dist/filters.js +15 -0
  96. package/dist/filters.js.map +1 -0
  97. package/dist/grid/BiErrorBoundary.d.ts +24 -0
  98. package/dist/grid/ChartContext.d.ts +14 -0
  99. package/dist/grid/GridCard.d.ts +45 -0
  100. package/dist/grid/GridCardPlaceHolder.d.ts +8 -0
  101. package/dist/grid/GridLayout.d.ts +147 -0
  102. package/dist/grid/gridModels.d.ts +33 -0
  103. package/dist/grid/index.d.ts +14 -0
  104. package/dist/grid/types.d.ts +23 -0
  105. package/dist/grid/useGridConfigTranslator.d.ts +72 -0
  106. package/dist/grid.d.ts +2 -0
  107. package/dist/grid.js +20 -0
  108. package/dist/grid.js.map +1 -0
  109. package/dist/hooks/DashboardParametersContext.d.ts +32 -0
  110. package/dist/hooks/index.d.ts +8 -0
  111. package/dist/hooks/useDashboardData.d.ts +20 -0
  112. package/dist/hooks/useDashboardLazyData.d.ts +79 -0
  113. package/dist/hooks.d.ts +2 -0
  114. package/dist/hooks.js +16 -0
  115. package/dist/hooks.js.map +1 -0
  116. package/dist/index-BYc79sSy.js +131 -0
  117. package/dist/index-BYc79sSy.js.map +1 -0
  118. package/dist/index-C6JQ6770.js +4545 -0
  119. package/dist/index-C6JQ6770.js.map +1 -0
  120. package/dist/index-CZbCaXMC.js +15 -0
  121. package/dist/index-CZbCaXMC.js.map +1 -0
  122. package/dist/index-D3OoOPjl.js +259 -0
  123. package/dist/index-D3OoOPjl.js.map +1 -0
  124. package/dist/index-D7Oo_dC-.js +94 -0
  125. package/dist/index-D7Oo_dC-.js.map +1 -0
  126. package/dist/index-D7tVPX8d.js +347 -0
  127. package/dist/index-D7tVPX8d.js.map +1 -0
  128. package/dist/index-DGyvUtY3.js +494 -0
  129. package/dist/index-DGyvUtY3.js.map +1 -0
  130. package/dist/index-DOpx0R4Y.js +41 -0
  131. package/dist/index-DOpx0R4Y.js.map +1 -0
  132. package/dist/index-wtSLspPh.js +1065 -0
  133. package/dist/index-wtSLspPh.js.map +1 -0
  134. package/dist/index.d.ts +12 -0
  135. package/dist/index.js +236 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/inline/Chart.d.ts +29 -0
  138. package/dist/inline/IFrame.d.ts +19 -0
  139. package/dist/inline/Metric.d.ts +16 -0
  140. package/dist/inline/MetricGroup.d.ts +11 -0
  141. package/dist/inline/index.d.ts +9 -0
  142. package/dist/inline/parseKnownNumbers.d.ts +11 -0
  143. package/dist/inline.d.ts +2 -0
  144. package/dist/inline.js +9 -0
  145. package/dist/inline.js.map +1 -0
  146. package/dist/runtime/IDashboardDefinition.d.ts +22 -0
  147. package/dist/runtime/biModuleSurface.d.ts +2 -0
  148. package/dist/runtime/createBiUiTools.d.ts +74 -0
  149. package/dist/runtime/index.d.ts +9 -0
  150. package/dist/runtime/loadDashboardBundle.d.ts +32 -0
  151. package/dist/runtime/registerBiModules.d.ts +36 -0
  152. package/dist/runtime/version.d.ts +6 -0
  153. package/dist/runtime.d.ts +2 -0
  154. package/dist/runtime.js +19 -0
  155. package/dist/runtime.js.map +1 -0
  156. package/dist/style.css +1 -0
  157. package/dist/theme/BiThemeBridge.d.ts +32 -0
  158. package/dist/theme/biPalette.d.ts +23 -0
  159. package/dist/theme/createBiTheme.d.ts +25 -0
  160. package/dist/theme/index.d.ts +5 -0
  161. package/dist/theme.d.ts +2 -0
  162. package/dist/theme.js +15 -0
  163. package/dist/theme.js.map +1 -0
  164. package/dist/version-DnqajORq.js +83 -0
  165. package/dist/version-DnqajORq.js.map +1 -0
  166. package/dist/viewer/ScriptDashboardViewer.d.ts +82 -0
  167. package/dist/viewer/ScriptDashboardViewerVertical.d.ts +24 -0
  168. package/dist/viewer/cardMetadata.d.ts +15 -0
  169. package/dist/viewer/index.d.ts +8 -0
  170. package/dist/viewer/models.d.ts +67 -0
  171. package/dist/viewer/useDashboardBundle.d.ts +73 -0
  172. package/dist/viewer.d.ts +2 -0
  173. package/dist/viewer.js +9 -0
  174. package/dist/viewer.js.map +1 -0
  175. 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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"}