@aintela/bi 0.2.3 → 0.2.4

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 (31) hide show
  1. package/dist/{ScriptDashboardViewerVertical-Rr_4adpH.js → ScriptDashboardViewerVertical-CHIPRLen.js} +2 -2
  2. package/dist/{ScriptDashboardViewerVertical-Rr_4adpH.js.map → ScriptDashboardViewerVertical-CHIPRLen.js.map} +1 -1
  3. package/dist/{biModuleSurface-BdJK7sSL.js → biModuleSurface-BYtgLreK.js} +5 -5
  4. package/dist/{biModuleSurface-BdJK7sSL.js.map → biModuleSurface-BYtgLreK.js.map} +1 -1
  5. package/dist/composer.js +1 -1
  6. package/dist/{index-DChE_l-p.js → index-CfKuT0vQ.js} +2 -2
  7. package/dist/index-CfKuT0vQ.js.map +1 -0
  8. package/dist/{index-C4_VSDeU.js → index-DOfnLVhs.js} +7 -10
  9. package/dist/{index-C4_VSDeU.js.map → index-DOfnLVhs.js.map} +1 -1
  10. package/dist/index-ZBNoVc5M.js +210 -0
  11. package/dist/index-ZBNoVc5M.js.map +1 -0
  12. package/dist/index-zN3LPF6u.js +97 -0
  13. package/dist/index-zN3LPF6u.js.map +1 -0
  14. package/dist/index.js +6 -6
  15. package/dist/inline/Chart.d.ts +0 -9
  16. package/dist/inline/Metric.d.ts +0 -2
  17. package/dist/inline/MetricGroup.d.ts +1 -1
  18. package/dist/inline.js +1 -1
  19. package/dist/runtime/version.d.ts +1 -1
  20. package/dist/runtime.js +4 -4
  21. package/dist/style.css +1 -1
  22. package/dist/theme.js +1 -1
  23. package/dist/{version-BTc4ElDG.js → version-CbZiTInp.js} +6 -6
  24. package/dist/{version-BTc4ElDG.js.map → version-CbZiTInp.js.map} +1 -1
  25. package/dist/viewer.js +1 -1
  26. package/package.json +1 -1
  27. package/dist/index-BYc79sSy.js +0 -131
  28. package/dist/index-BYc79sSy.js.map +0 -1
  29. package/dist/index-D7Oo_dC-.js +0 -94
  30. package/dist/index-D7Oo_dC-.js.map +0 -1
  31. package/dist/index-DChE_l-p.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"version-BTc4ElDG.js","sources":["../src/runtime/registerBiModules.ts","../src/runtime/createBiUiTools.tsx","../src/runtime/version.ts"],"sourcesContent":["import { extendModuleRegistry, extendDefaultScope } from '@aintela/chat/components';\nimport { getBiModuleSurface } from './biModuleSurface';\nimport { seedHostModules } from './loadDashboardBundle';\n\nexport interface RegisterBiModulesOptions {\n /**\n * The module specifiers LLM-emitted code imports from. The compiled\n * snippet does `__scope[\"<specifier>\"].X` and a bundle does\n * `require(\"<specifier>\")`, so every string here must match what the\n * template / instruction files told the model to write.\n *\n * AIA starts clean: `['@aintela/bi']`. Envision must keep resolving the\n * legacy keys forever (persisted sessions + content-hashed bundles):\n * `['@aintela/bi', '@envision/ui-library', '@envision/ui-library/components', …]`.\n */\n specifiers: string[];\n /**\n * Extra values merged into the surface under every specifier AND into the\n * bare-identifier scope — e.g. Envision's `VizLibrary` compat shim, or a\n * host's own components the instructions mention.\n */\n extraScope?: Record<string, unknown>;\n /**\n * Extra `require()` targets for dashboard bundles keyed by specifier\n * (`{ 'date-fns': dateFns, lodash }`). Not in the live-TSX scope.\n */\n extraHostModules?: Record<string, unknown>;\n}\n\nconst registeredKeys = new Set<string>();\n\n/**\n * Makes this library resolvable from LLM-generated code:\n * 1. `extendModuleRegistry(specifier, surface)` once per specifier (live TSX imports);\n * 2. `extendDefaultScope(surface)` once (bare identifiers, no import line);\n * 3. seeds the dashboard-bundle loader's host-module map under the same specifiers.\n *\n * Idempotent per specifier — call it at app start, before the first chat turn\n * or bundle renders.\n */\nexport function registerBiModules(options: RegisterBiModulesOptions): void {\n const surface = { ...getBiModuleSurface(), ...(options.extraScope ?? {}) };\n\n const fresh = options.specifiers.filter((s) => !registeredKeys.has(s));\n for (const specifier of fresh) {\n extendModuleRegistry(specifier, surface);\n registeredKeys.add(specifier);\n }\n if (fresh.length > 0 || options.extraScope) {\n extendDefaultScope(surface);\n }\n seedHostModules(options.specifiers, options.extraHostModules);\n}\n\n/** Test seam. */\nexport function resetBiModuleRegistration(): void {\n registeredKeys.clear();\n}\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport { createUiToolRegistry } from '@aintela/chat/components';\nimport type { UiToolRegistryBuilder } from '@aintela/chat/components';\nimport { Chart, Metric, MetricGroup, IFrame } from '../inline';\nimport type { ChartExpandInfo, IFrameExpandInfo } from '../inline';\nimport { BiClientProvider, type BiClient } from '../client';\nimport { VisualizationFrame, type VisualizationKind } from './sessionVisualizations';\nimport type { DashboardEnvironment, GuideStep } from '../composer/environment/types';\n\n/**\n * The explorer's visual vocabulary as `uiTools` registry entries. The chat\n * library owns the plumbing (routing `[KernelUiFunction]` calls, unwrapping\n * args, replay); here we only declare WHAT to draw per tool name.\n *\n * `present_dashboard` and `present_tsx` are deliberately NOT registered — the\n * dashboard hand-off belongs to the dashboard slice and `present_tsx`'s\n * compiled-JS sibling-event plumbing is host policy. Both are added by the\n * host on the returned builder:\n *\n * const uiTools = createBiUiTools({ client })\n * .render('present_dashboard', (a) => <ScriptDashboardViewer dashboardId={a.id} />)\n * .build();\n */\nexport interface CreateBiUiToolsOptions {\n /**\n * Client whose `artifactUrl` / `iframeUrl` resolve the images. When\n * omitted the renderers rely on an ambient `<BiClientProvider>` above the\n * chat pane (which is how a host also passes the session id).\n */\n client?: BiClient;\n /** Expand handlers (a lightbox, an artifact panel). Default: open in a new tab. */\n onExpandChart?: (info: ChartExpandInfo) => void;\n onExpandIframe?: (info: IFrameExpandInfo) => void;\n /** Start from an existing builder to chain more tools before these. */\n builder?: UiToolRegistryBuilder;\n /**\n * The composer's environment (`useComposerEnvironment()` /\n * `environmentFromStore(store)`). When supplied, the three ACTION tools\n * the dashboard agent calls are registered too: `refresh_dashboard`,\n * `present_dashboard_pad` (`definitionJson` + `mode`) and `present_guide`\n * (`stepsJson`). Without it they are left to the host, like `present_dashboard`.\n */\n environment?: Partial<DashboardEnvironment>;\n}\n\n// present_metric uses camelCase params, but present_metric_group's items come\n// from a C# class serialised PascalCase. Read either casing.\nexport interface PresentMetricArgs {\n currentValue: string;\n previousValue?: string;\n prefix?: string;\n suffix?: string;\n differenceStyle?: 'Percentage' | 'Value';\n description?: string;\n icon?: string;\n}\n\nexport function normalizeMetricArgs(raw: unknown): PresentMetricArgs {\n const o = (raw ?? {}) as Record<string, unknown>;\n const g = (k: string): string | undefined => {\n const v = o[k] ?? o[k.charAt(0).toUpperCase() + k.slice(1)];\n return v == null ? undefined : String(v);\n };\n return {\n currentValue: g('currentValue') ?? '',\n previousValue: g('previousValue'),\n prefix: g('prefix'),\n suffix: g('suffix'),\n differenceStyle: g('differenceStyle') as 'Percentage' | 'Value' | undefined,\n description: g('description'),\n icon: g('icon'),\n };\n}\n\nexport interface PresentChartArgs { src?: string; name?: string; alt?: string; reasoning?: string; naked?: boolean }\nexport interface PresentMetricGroupArgs { title?: string; materialIcon?: string; footNote?: string; metrics?: unknown[] }\nexport interface PresentIframeArgs { src?: string; name?: string }\nexport interface PresentDashboardPadArgs { definitionJson?: string; mode?: 'create' | 'update' | string }\nexport interface PresentGuideArgs { stepsJson?: string }\n\n/** JSON text that may have been encoded once or twice on the way through the tool call. */\nfunction parseJsonArg<T>(raw: string | undefined, fallback: T): T {\n let value: unknown = raw;\n for (let i = 0; i < 2 && typeof value === 'string'; i++) {\n try {\n value = JSON.parse(value);\n } catch {\n return fallback;\n }\n }\n return (value ?? fallback) as T;\n}\n\n/**\n * What `VisualizationFrame` needs from the tool call that produced the thing — a structural subset of the\n * chat library's `UiToolContext`, so the renderers can pass `ctx` straight through.\n */\ninterface FrameInfo {\n callId: string;\n /** The interaction the call belongs to — one group per agent answer. */\n message?: unknown;\n onGoing?: boolean;\n}\n\n/** The interaction's id, when it has one — the group key, and `undefined` is a perfectly good group. */\nfunction groupOf(message: unknown): string | undefined {\n const id = (message as { id?: unknown } | null | undefined)?.id;\n return typeof id === 'string' ? id : undefined;\n}\n\nexport function createBiUiTools(options: CreateBiUiToolsOptions = {}): UiToolRegistryBuilder {\n const { client, onExpandChart, onExpandIframe } = options;\n\n /**\n * Box the node, put it under the client, and REGISTER it as one of the session's visualizations.\n *\n * <p>The registration is here rather than in each inline component because it is a fact about the tool\n * CALL — its id, its interaction, whether the turn is still streaming — and only this layer sees those.\n * Outside a `SessionVisualizationsProvider` the frame is inert and renders its child unchanged, so a host\n * that does not use the panel sees no difference at all.</p>\n */\n const wrap = (node: React.ReactNode, viz?: { kind: VisualizationKind; title?: string; preview?: React.ReactNode; frame: FrameInfo }): React.ReactNode => {\n const boxed = <Box sx={{ my: 1 }}>{node}</Box>;\n const framed = viz ? (\n <VisualizationFrame\n id={viz.frame.callId}\n kind={viz.kind}\n title={viz.title}\n group={groupOf(viz.frame.message)}\n preview={viz.preview}\n ready={!viz.frame.onGoing}\n >\n {boxed}\n </VisualizationFrame>\n ) : (\n boxed\n );\n return client ? <BiClientProvider client={client}>{framed}</BiClientProvider> : framed;\n };\n\n const builder = (options.builder ?? createUiToolRegistry())\n .render<PresentMetricArgs>('present_metric', (args, ctx) => {\n const m = normalizeMetricArgs(args);\n if (!m.currentValue) return null;\n return wrap(<Metric partial={false} {...m} />, {\n kind: 'metric',\n title: m.description,\n // The value IS the thumbnail for a KPI — nothing smaller says more about it.\n preview: <Box sx={{ fontSize: 15, fontWeight: 600, letterSpacing: '-0.02em' }}>{`${m.prefix ?? ''}${m.currentValue}${m.suffix ?? ''}`}</Box>,\n frame: ctx,\n });\n })\n .render<PresentMetricGroupArgs>('present_metric_group', (a, ctx) => {\n if (!a.metrics?.length) return null;\n const values = a.metrics.map((raw) => normalizeMetricArgs(raw));\n return wrap(\n <MetricGroup partial={false} title={a.title} materialIcon={a.materialIcon} footNote={a.footNote}>\n {values.map((m, i) => (\n <Metric key={i} partial={false} {...m} />\n ))}\n </MetricGroup>,\n {\n kind: 'metric',\n title: a.title,\n preview: (\n <Box sx={{ display: 'flex', gap: 1.5, flexWrap: 'wrap', fontSize: 13, fontWeight: 600, letterSpacing: '-0.02em' }}>\n {values.slice(0, 3).map((m, i) => (\n <Box key={i} component=\"span\">{`${m.prefix ?? ''}${m.currentValue}${m.suffix ?? ''}`}</Box>\n ))}\n </Box>\n ),\n frame: ctx,\n },\n );\n })\n .render<PresentChartArgs>('present_chart', (a, ctx) => {\n if (!a.src) return null;\n return wrap(<Chart src={a.src} name={a.name} alt={a.alt} reasoning={a.reasoning} naked={a.naked} onExpand={onExpandChart} />, {\n kind: 'chart',\n title: a.name ?? a.alt,\n // The chart's OWN image, scaled down. A hand-drawn sparkline would be a second, different\n // picture of the same data — and one this package would have to keep in step with the chart.\n preview: client ? <Box component=\"img\" src={client.artifactUrl(a.src)} alt=\"\" sx={{ maxWidth: '100%', maxHeight: 44, objectFit: 'contain', display: 'block' }} /> : undefined,\n frame: ctx,\n });\n })\n .render<PresentIframeArgs>('present_iframe', (a, ctx) => {\n if (!a.src || !a.name) return null;\n return wrap(<IFrame partial={false} src={a.src} name={a.name} onExpand={onExpandIframe} />, { kind: 'iframe', title: a.name, frame: ctx });\n });\n\n const env = options.environment;\n if (!env) return builder;\n\n // Action tools: side effects on the composer, fired once per tool-call id\n // by the chat library; the status chip shows after a successful run.\n return builder\n .action('refresh_dashboard', () => {\n env.refreshDashboard?.();\n }, { status: 'Dashboard atualizado' })\n .action<PresentDashboardPadArgs>('present_dashboard_pad', (a) => {\n const def = parseJsonArg<Record<string, unknown>>(a.definitionJson, {});\n if (a.mode === 'create') env.createDashboardPad?.(def as never);\n else env.updateDashboardPad?.(def as never);\n }, { status: 'Rascunho atualizado' })\n .action<PresentGuideArgs>('present_guide', (a) => {\n const steps = parseJsonArg<GuideStep[]>(a.stepsJson, []);\n if (Array.isArray(steps) && steps.length > 0) env.showGuide?.(steps);\n }, { status: 'Guia iniciado' });\n}\n","/**\n * The package version, so a host can log a mismatch against the server-side\n * `AIntelA.Bi.Agents` version at handshake (the instruction files describe\n * THIS React API). Kept in sync with package.json by `tests/runtime/version.test.ts`.\n */\nexport const BI_RUNTIME_VERSION = '0.2.3';\n"],"names":["registeredKeys","registerBiModules","options","surface","getBiModuleSurface","fresh","s","specifier","extendModuleRegistry","extendDefaultScope","seedHostModules","__name","resetBiModuleRegistration","normalizeMetricArgs","raw","o","g","k","v","parseJsonArg","fallback","value","i","groupOf","message","id","createBiUiTools","client","onExpandChart","onExpandIframe","wrap","node","viz","boxed","Box","framed","jsx","VisualizationFrame","BiClientProvider","builder","createUiToolRegistry","args","ctx","m","Metric","a","_a","values","MetricGroup","Chart","IFrame","env","def","_b","steps","BI_RUNTIME_VERSION"],"mappings":"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"}
1
+ {"version":3,"file":"version-CbZiTInp.js","sources":["../src/runtime/registerBiModules.ts","../src/runtime/createBiUiTools.tsx","../src/runtime/version.ts"],"sourcesContent":["import { extendModuleRegistry, extendDefaultScope } from '@aintela/chat/components';\nimport { getBiModuleSurface } from './biModuleSurface';\nimport { seedHostModules } from './loadDashboardBundle';\n\nexport interface RegisterBiModulesOptions {\n /**\n * The module specifiers LLM-emitted code imports from. The compiled\n * snippet does `__scope[\"<specifier>\"].X` and a bundle does\n * `require(\"<specifier>\")`, so every string here must match what the\n * template / instruction files told the model to write.\n *\n * AIA starts clean: `['@aintela/bi']`. Envision must keep resolving the\n * legacy keys forever (persisted sessions + content-hashed bundles):\n * `['@aintela/bi', '@envision/ui-library', '@envision/ui-library/components', …]`.\n */\n specifiers: string[];\n /**\n * Extra values merged into the surface under every specifier AND into the\n * bare-identifier scope — e.g. Envision's `VizLibrary` compat shim, or a\n * host's own components the instructions mention.\n */\n extraScope?: Record<string, unknown>;\n /**\n * Extra `require()` targets for dashboard bundles keyed by specifier\n * (`{ 'date-fns': dateFns, lodash }`). Not in the live-TSX scope.\n */\n extraHostModules?: Record<string, unknown>;\n}\n\nconst registeredKeys = new Set<string>();\n\n/**\n * Makes this library resolvable from LLM-generated code:\n * 1. `extendModuleRegistry(specifier, surface)` once per specifier (live TSX imports);\n * 2. `extendDefaultScope(surface)` once (bare identifiers, no import line);\n * 3. seeds the dashboard-bundle loader's host-module map under the same specifiers.\n *\n * Idempotent per specifier — call it at app start, before the first chat turn\n * or bundle renders.\n */\nexport function registerBiModules(options: RegisterBiModulesOptions): void {\n const surface = { ...getBiModuleSurface(), ...(options.extraScope ?? {}) };\n\n const fresh = options.specifiers.filter((s) => !registeredKeys.has(s));\n for (const specifier of fresh) {\n extendModuleRegistry(specifier, surface);\n registeredKeys.add(specifier);\n }\n if (fresh.length > 0 || options.extraScope) {\n extendDefaultScope(surface);\n }\n seedHostModules(options.specifiers, options.extraHostModules);\n}\n\n/** Test seam. */\nexport function resetBiModuleRegistration(): void {\n registeredKeys.clear();\n}\n","import React from 'react';\nimport { Box } from '@mui/material';\nimport { createUiToolRegistry } from '@aintela/chat/components';\nimport type { UiToolRegistryBuilder } from '@aintela/chat/components';\nimport { Chart, Metric, MetricGroup, IFrame } from '../inline';\nimport type { ChartExpandInfo, IFrameExpandInfo } from '../inline';\nimport { BiClientProvider, type BiClient } from '../client';\nimport { VisualizationFrame, type VisualizationKind } from './sessionVisualizations';\nimport type { DashboardEnvironment, GuideStep } from '../composer/environment/types';\n\n/**\n * The explorer's visual vocabulary as `uiTools` registry entries. The chat\n * library owns the plumbing (routing `[KernelUiFunction]` calls, unwrapping\n * args, replay); here we only declare WHAT to draw per tool name.\n *\n * `present_dashboard` and `present_tsx` are deliberately NOT registered — the\n * dashboard hand-off belongs to the dashboard slice and `present_tsx`'s\n * compiled-JS sibling-event plumbing is host policy. Both are added by the\n * host on the returned builder:\n *\n * const uiTools = createBiUiTools({ client })\n * .render('present_dashboard', (a) => <ScriptDashboardViewer dashboardId={a.id} />)\n * .build();\n */\nexport interface CreateBiUiToolsOptions {\n /**\n * Client whose `artifactUrl` / `iframeUrl` resolve the images. When\n * omitted the renderers rely on an ambient `<BiClientProvider>` above the\n * chat pane (which is how a host also passes the session id).\n */\n client?: BiClient;\n /** Expand handlers (a lightbox, an artifact panel). Default: open in a new tab. */\n onExpandChart?: (info: ChartExpandInfo) => void;\n onExpandIframe?: (info: IFrameExpandInfo) => void;\n /** Start from an existing builder to chain more tools before these. */\n builder?: UiToolRegistryBuilder;\n /**\n * The composer's environment (`useComposerEnvironment()` /\n * `environmentFromStore(store)`). When supplied, the three ACTION tools\n * the dashboard agent calls are registered too: `refresh_dashboard`,\n * `present_dashboard_pad` (`definitionJson` + `mode`) and `present_guide`\n * (`stepsJson`). Without it they are left to the host, like `present_dashboard`.\n */\n environment?: Partial<DashboardEnvironment>;\n}\n\n// present_metric uses camelCase params, but present_metric_group's items come\n// from a C# class serialised PascalCase. Read either casing.\nexport interface PresentMetricArgs {\n currentValue: string;\n previousValue?: string;\n prefix?: string;\n suffix?: string;\n differenceStyle?: 'Percentage' | 'Value';\n description?: string;\n icon?: string;\n}\n\nexport function normalizeMetricArgs(raw: unknown): PresentMetricArgs {\n const o = (raw ?? {}) as Record<string, unknown>;\n const g = (k: string): string | undefined => {\n const v = o[k] ?? o[k.charAt(0).toUpperCase() + k.slice(1)];\n return v == null ? undefined : String(v);\n };\n return {\n currentValue: g('currentValue') ?? '',\n previousValue: g('previousValue'),\n prefix: g('prefix'),\n suffix: g('suffix'),\n differenceStyle: g('differenceStyle') as 'Percentage' | 'Value' | undefined,\n description: g('description'),\n icon: g('icon'),\n };\n}\n\nexport interface PresentChartArgs { src?: string; name?: string; alt?: string; reasoning?: string; naked?: boolean }\nexport interface PresentMetricGroupArgs { title?: string; materialIcon?: string; footNote?: string; metrics?: unknown[] }\nexport interface PresentIframeArgs { src?: string; name?: string }\nexport interface PresentDashboardPadArgs { definitionJson?: string; mode?: 'create' | 'update' | string }\nexport interface PresentGuideArgs { stepsJson?: string }\n\n/** JSON text that may have been encoded once or twice on the way through the tool call. */\nfunction parseJsonArg<T>(raw: string | undefined, fallback: T): T {\n let value: unknown = raw;\n for (let i = 0; i < 2 && typeof value === 'string'; i++) {\n try {\n value = JSON.parse(value);\n } catch {\n return fallback;\n }\n }\n return (value ?? fallback) as T;\n}\n\n/**\n * What `VisualizationFrame` needs from the tool call that produced the thing — a structural subset of the\n * chat library's `UiToolContext`, so the renderers can pass `ctx` straight through.\n */\ninterface FrameInfo {\n callId: string;\n /** The interaction the call belongs to — one group per agent answer. */\n message?: unknown;\n onGoing?: boolean;\n}\n\n/** The interaction's id, when it has one — the group key, and `undefined` is a perfectly good group. */\nfunction groupOf(message: unknown): string | undefined {\n const id = (message as { id?: unknown } | null | undefined)?.id;\n return typeof id === 'string' ? id : undefined;\n}\n\nexport function createBiUiTools(options: CreateBiUiToolsOptions = {}): UiToolRegistryBuilder {\n const { client, onExpandChart, onExpandIframe } = options;\n\n /**\n * Box the node, put it under the client, and REGISTER it as one of the session's visualizations.\n *\n * <p>The registration is here rather than in each inline component because it is a fact about the tool\n * CALL — its id, its interaction, whether the turn is still streaming — and only this layer sees those.\n * Outside a `SessionVisualizationsProvider` the frame is inert and renders its child unchanged, so a host\n * that does not use the panel sees no difference at all.</p>\n */\n const wrap = (node: React.ReactNode, viz?: { kind: VisualizationKind; title?: string; preview?: React.ReactNode; frame: FrameInfo }): React.ReactNode => {\n const boxed = <Box sx={{ my: 1 }}>{node}</Box>;\n const framed = viz ? (\n <VisualizationFrame\n id={viz.frame.callId}\n kind={viz.kind}\n title={viz.title}\n group={groupOf(viz.frame.message)}\n preview={viz.preview}\n ready={!viz.frame.onGoing}\n >\n {boxed}\n </VisualizationFrame>\n ) : (\n boxed\n );\n return client ? <BiClientProvider client={client}>{framed}</BiClientProvider> : framed;\n };\n\n const builder = (options.builder ?? createUiToolRegistry())\n .render<PresentMetricArgs>('present_metric', (args, ctx) => {\n const m = normalizeMetricArgs(args);\n if (!m.currentValue) return null;\n return wrap(<Metric partial={false} {...m} />, {\n kind: 'metric',\n title: m.description,\n // The value IS the thumbnail for a KPI — nothing smaller says more about it.\n preview: <Box sx={{ fontSize: 15, fontWeight: 600, letterSpacing: '-0.02em' }}>{`${m.prefix ?? ''}${m.currentValue}${m.suffix ?? ''}`}</Box>,\n frame: ctx,\n });\n })\n .render<PresentMetricGroupArgs>('present_metric_group', (a, ctx) => {\n if (!a.metrics?.length) return null;\n const values = a.metrics.map((raw) => normalizeMetricArgs(raw));\n return wrap(\n <MetricGroup partial={false} title={a.title} materialIcon={a.materialIcon} footNote={a.footNote}>\n {values.map((m, i) => (\n <Metric key={i} partial={false} {...m} />\n ))}\n </MetricGroup>,\n {\n kind: 'metric',\n title: a.title,\n preview: (\n <Box sx={{ display: 'flex', gap: 1.5, flexWrap: 'wrap', fontSize: 13, fontWeight: 600, letterSpacing: '-0.02em' }}>\n {values.slice(0, 3).map((m, i) => (\n <Box key={i} component=\"span\">{`${m.prefix ?? ''}${m.currentValue}${m.suffix ?? ''}`}</Box>\n ))}\n </Box>\n ),\n frame: ctx,\n },\n );\n })\n .render<PresentChartArgs>('present_chart', (a, ctx) => {\n if (!a.src) return null;\n return wrap(<Chart src={a.src} name={a.name} alt={a.alt} reasoning={a.reasoning} naked={a.naked} onExpand={onExpandChart} />, {\n kind: 'chart',\n title: a.name ?? a.alt,\n // The chart's OWN image, scaled down. A hand-drawn sparkline would be a second, different\n // picture of the same data — and one this package would have to keep in step with the chart.\n preview: client ? <Box component=\"img\" src={client.artifactUrl(a.src)} alt=\"\" sx={{ maxWidth: '100%', maxHeight: 44, objectFit: 'contain', display: 'block' }} /> : undefined,\n frame: ctx,\n });\n })\n .render<PresentIframeArgs>('present_iframe', (a, ctx) => {\n if (!a.src || !a.name) return null;\n return wrap(<IFrame partial={false} src={a.src} name={a.name} onExpand={onExpandIframe} />, { kind: 'iframe', title: a.name, frame: ctx });\n });\n\n const env = options.environment;\n if (!env) return builder;\n\n // Action tools: side effects on the composer, fired once per tool-call id\n // by the chat library; the status chip shows after a successful run.\n return builder\n .action('refresh_dashboard', () => {\n env.refreshDashboard?.();\n }, { status: 'Dashboard atualizado' })\n .action<PresentDashboardPadArgs>('present_dashboard_pad', (a) => {\n const def = parseJsonArg<Record<string, unknown>>(a.definitionJson, {});\n if (a.mode === 'create') env.createDashboardPad?.(def as never);\n else env.updateDashboardPad?.(def as never);\n }, { status: 'Rascunho atualizado' })\n .action<PresentGuideArgs>('present_guide', (a) => {\n const steps = parseJsonArg<GuideStep[]>(a.stepsJson, []);\n if (Array.isArray(steps) && steps.length > 0) env.showGuide?.(steps);\n }, { status: 'Guia iniciado' });\n}\n","/**\n * The package version, so a host can log a mismatch against the server-side\n * `AIntelA.Bi.Agents` version at handshake (the instruction files describe\n * THIS React API). Kept in sync with package.json by `tests/runtime/version.test.ts`.\n */\nexport const BI_RUNTIME_VERSION = '0.2.4';\n"],"names":["registeredKeys","registerBiModules","options","surface","getBiModuleSurface","fresh","s","specifier","extendModuleRegistry","extendDefaultScope","seedHostModules","__name","resetBiModuleRegistration","normalizeMetricArgs","raw","o","g","k","v","parseJsonArg","fallback","value","i","groupOf","message","id","createBiUiTools","client","onExpandChart","onExpandIframe","wrap","node","viz","boxed","Box","framed","jsx","VisualizationFrame","BiClientProvider","builder","createUiToolRegistry","args","ctx","m","Metric","a","_a","values","MetricGroup","Chart","IFrame","env","def","_b","steps","BI_RUNTIME_VERSION"],"mappings":"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"}
package/dist/viewer.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as e, S as s, a as d, r as o, u as t } from "./ScriptDashboardViewerVertical-Rr_4adpH.js";
1
+ import { C as e, S as s, a as d, r as o, u as t } from "./ScriptDashboardViewerVertical-CHIPRLen.js";
2
2
  export {
3
3
  e as CATEGORY_PREFIXES,
4
4
  s as ScriptDashboardViewer,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aintela/bi",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "BI visualisation components, dashboard grid, hooks, the dashboard composer (sketch pad + authoring view) and the LLM runtime registry for the AIA platform (extracted from Envision's dashboard app).",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -1,131 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,94 +0,0 @@
1
- var f = Object.defineProperty;
2
- var n = (t, i) => f(t, "name", { value: i, configurable: !0 });
3
- import { r as d, b as y, a as h, c as v, d as g, u as x, w as k } from "./createBiTheme-TyUv_UHM.js";
4
- import { jsx as P } from "react/jsx-runtime";
5
- import { useMemo as u, useEffect as m } from "react";
6
- import { useTheme as p, alpha as r } from "@mui/material/styles";
7
- function c(t) {
8
- const i = d(t), e = t.palette, o = typeof t.shape.borderRadius == "number" ? `${t.shape.borderRadius}px` : String(t.shape.borderRadius);
9
- return {
10
- "--bi-bg": e.background.default,
11
- "--bi-card-bg": e.background.paper,
12
- "--bi-card-border": e.divider,
13
- "--bi-card-border-strong": r(e.text.primary, 0.28),
14
- "--bi-text-1": e.text.primary,
15
- "--bi-text-2": e.text.secondary,
16
- "--bi-text-disabled": e.text.disabled,
17
- "--bi-grid-line": r(e.text.primary, 0.12),
18
- "--bi-hover": e.action.hover,
19
- "--bi-selected": e.action.selected,
20
- "--bi-overlay": r(e.text.primary, 0.08),
21
- "--bi-surface-1": r(e.text.primary, 0.03),
22
- "--bi-surface-2": r(e.text.primary, 0.06),
23
- "--bi-accent": e.primary.main,
24
- "--bi-accent-soft": r(e.primary.main, 0.12),
25
- "--bi-accent-border": r(e.primary.main, 0.3),
26
- "--bi-positive": i.positive,
27
- "--bi-positive-soft": r(i.positive, 0.15),
28
- "--bi-negative": i.negative,
29
- "--bi-negative-soft": r(i.negative, 0.15),
30
- "--bi-neutral": i.neutral,
31
- "--bi-neutral-soft": r(i.neutral, 0.15),
32
- "--bi-error": e.error.main,
33
- "--bi-error-soft": r(e.error.main, 0.08),
34
- // ── Composer / sketch pad (`composer.css`) ──
35
- "--bi-secondary": e.secondary.main,
36
- "--bi-secondary-soft": r(e.secondary.main, 0.16),
37
- "--bi-sketch-dash": r(e.text.primary, 0.35),
38
- "--bi-sketch-dash-faint": r(e.text.primary, 0.12),
39
- "--bi-sketch-selection": r(e.primary.main, 0.12),
40
- "--bi-scrim": r(e.common.black, 0.4),
41
- "--bi-highlight-outline": e.secondary.main,
42
- "--bi-highlight-glow": r(e.secondary.main, 0.35),
43
- "--bi-shadow": t.shadows[4],
44
- "--bi-shadow-strong": t.shadows[8],
45
- "--bi-radius": o,
46
- "--bi-radius-sm": `${Math.max(2, Math.round((typeof t.shape.borderRadius == "number" ? t.shape.borderRadius : 4) / 2))}px`,
47
- "--bi-font-family": t.typography.fontFamily ?? "inherit"
48
- };
49
- }
50
- n(c, "computeBiCssVars");
51
- const B = /* @__PURE__ */ n(({ children: t, className: i, style: e }) => {
52
- const o = p(), a = u(() => c(o), [o]);
53
- return m(() => {
54
- if (t !== void 0 || typeof document > "u") return;
55
- const s = document.documentElement;
56
- for (const [b, l] of Object.entries(a)) s.style.setProperty(b, l);
57
- return () => {
58
- for (const b of Object.keys(a)) s.style.removeProperty(b);
59
- };
60
- }, [a, t]), t === void 0 ? null : /* @__PURE__ */ P("div", { className: i, "data-bi-theme": o.palette.mode, style: { ...a, height: "100%", ...e }, children: t });
61
- }, "BiThemeBridge");
62
- function j(t) {
63
- const i = p(), e = u(() => c(i), [i]);
64
- return m(() => {
65
- const o = t ?? (typeof document < "u" ? document.documentElement : null);
66
- if (o) {
67
- for (const [a, s] of Object.entries(e)) o.style.setProperty(a, s);
68
- return () => {
69
- for (const a of Object.keys(e)) o.style.removeProperty(a);
70
- };
71
- }
72
- }, [e, t]), e;
73
- }
74
- n(j, "useBiCssVars");
75
- const S = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
76
- __proto__: null,
77
- BiThemeBridge: B,
78
- biDarkPalette: y,
79
- biLightPalette: h,
80
- biSeriesColor: v,
81
- computeBiCssVars: c,
82
- createBiTheme: g,
83
- resolveBiPalette: d,
84
- useBiCssVars: j,
85
- useBiPalette: x,
86
- withBiPalette: k
87
- }, Symbol.toStringTag, { value: "Module" }));
88
- export {
89
- B,
90
- S as T,
91
- c,
92
- j as u
93
- };
94
- //# sourceMappingURL=index-D7Oo_dC-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-D7Oo_dC-.js","sources":["../src/theme/BiThemeBridge.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from 'react';\nimport { alpha, useTheme } from '@mui/material/styles';\nimport type { Theme } from '@mui/material/styles';\nimport { resolveBiPalette } from './createBiTheme';\n\n/**\n * The CSS custom properties the package's stylesheets consume\n * (`GridLayout.css`, `inline.css`, `composer.css`). Every value is derived from the MUI theme —\n * the stylesheets themselves contain no colour.\n */\nexport function computeBiCssVars(theme: Theme): Record<string, string> {\n const bi = resolveBiPalette(theme);\n const p = theme.palette;\n const radius = typeof theme.shape.borderRadius === 'number' ? `${theme.shape.borderRadius}px` : String(theme.shape.borderRadius);\n return {\n '--bi-bg': p.background.default,\n '--bi-card-bg': p.background.paper,\n '--bi-card-border': p.divider,\n '--bi-card-border-strong': alpha(p.text.primary, 0.28),\n '--bi-text-1': p.text.primary,\n '--bi-text-2': p.text.secondary,\n '--bi-text-disabled': p.text.disabled,\n '--bi-grid-line': alpha(p.text.primary, 0.12),\n '--bi-hover': p.action.hover,\n '--bi-selected': p.action.selected,\n '--bi-overlay': alpha(p.text.primary, 0.08),\n '--bi-surface-1': alpha(p.text.primary, 0.03),\n '--bi-surface-2': alpha(p.text.primary, 0.06),\n '--bi-accent': p.primary.main,\n '--bi-accent-soft': alpha(p.primary.main, 0.12),\n '--bi-accent-border': alpha(p.primary.main, 0.3),\n '--bi-positive': bi.positive,\n '--bi-positive-soft': alpha(bi.positive, 0.15),\n '--bi-negative': bi.negative,\n '--bi-negative-soft': alpha(bi.negative, 0.15),\n '--bi-neutral': bi.neutral,\n '--bi-neutral-soft': alpha(bi.neutral, 0.15),\n '--bi-error': p.error.main,\n '--bi-error-soft': alpha(p.error.main, 0.08),\n // ── Composer / sketch pad (`composer.css`) ──\n '--bi-secondary': p.secondary.main,\n '--bi-secondary-soft': alpha(p.secondary.main, 0.16),\n '--bi-sketch-dash': alpha(p.text.primary, 0.35),\n '--bi-sketch-dash-faint': alpha(p.text.primary, 0.12),\n '--bi-sketch-selection': alpha(p.primary.main, 0.12),\n '--bi-scrim': alpha(p.common.black, 0.4),\n '--bi-highlight-outline': p.secondary.main,\n '--bi-highlight-glow': alpha(p.secondary.main, 0.35),\n '--bi-shadow': theme.shadows[4],\n '--bi-shadow-strong': theme.shadows[8],\n '--bi-radius': radius,\n '--bi-radius-sm': `${Math.max(2, Math.round((typeof theme.shape.borderRadius === 'number' ? theme.shape.borderRadius : 4) / 2))}px`,\n '--bi-font-family': theme.typography.fontFamily ?? 'inherit',\n };\n}\n\nexport interface BiThemeBridgeProps {\n /**\n * With children: renders a wrapper `div` carrying the variables as inline\n * style, so the theme applies to that subtree only (several themes may\n * coexist on one page). Without children: writes the variables onto\n * `document.documentElement` on mount and updates them when the theme\n * changes.\n */\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * Publishes the theme-derived CSS custom properties the package stylesheets\n * read. Mount it once inside your `<ThemeProvider>` (either around the BI\n * surface, or childless at the app root).\n */\nexport const BiThemeBridge: React.FC<BiThemeBridgeProps> = ({ children, className, style }) => {\n const theme = useTheme();\n const vars = useMemo(() => computeBiCssVars(theme), [theme]);\n\n useEffect(() => {\n if (children !== undefined) return;\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n for (const [k, v] of Object.entries(vars)) root.style.setProperty(k, v);\n return () => {\n for (const k of Object.keys(vars)) root.style.removeProperty(k);\n };\n }, [vars, children]);\n\n if (children === undefined) return null;\n return (\n <div className={className} data-bi-theme={theme.palette.mode} style={{ ...(vars as React.CSSProperties), height: '100%', ...style }}>\n {children}\n </div>\n );\n};\n\n/**\n * Hook form of the bridge: applies the variables to `target` (default:\n * `document.documentElement`) for as long as the calling component is mounted.\n */\nexport function useBiCssVars(target?: HTMLElement | null): Record<string, string> {\n const theme = useTheme();\n const vars = useMemo(() => computeBiCssVars(theme), [theme]);\n useEffect(() => {\n const el = target ?? (typeof document !== 'undefined' ? document.documentElement : null);\n if (!el) return;\n for (const [k, v] of Object.entries(vars)) el.style.setProperty(k, v);\n return () => {\n for (const k of Object.keys(vars)) el.style.removeProperty(k);\n };\n }, [vars, target]);\n return vars;\n}\n\nexport default BiThemeBridge;\n"],"names":["computeBiCssVars","theme","bi","resolveBiPalette","p","radius","alpha","__name","BiThemeBridge","children","className","style","useTheme","vars","useMemo","useEffect","root","k","v","useBiCssVars","target","el"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DChE_l-p.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}