@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 @@
1
+ {"version":3,"file":"index-wtSLspPh.js","sources":["../src/cards/MetricCard.tsx","../src/cards/MetricGroupCard.tsx","../src/cards/GaugeCard.tsx","../src/cards/GaugeGroup.tsx","../src/cards/licenseGuard.ts","../src/cards/DataTableCard.tsx","../src/cards/useContainerRectangle.ts","../src/cards/ChartCard.tsx","../src/cards/TreeMapCard.tsx","../src/cards/mapUtils.ts","../src/cards/geoLayers.ts","../src/cards/MapBubbles.tsx","../src/cards/MapConnections.tsx","../src/cards/worldMapPath.ts"],"sourcesContent":["import React from 'react';\nimport { Box, Skeleton, Stack, Typography } from '@mui/material';\nimport { formatCompact, percentChange, trendArrow } from '../data/dataUtils';\nimport { useBiPalette } from '../theme/createBiTheme';\nimport { useChartContext } from '../grid/ChartContext';\n\nexport interface MetricCardProps {\n currentValue: number;\n previousValue?: number;\n prefix?: string;\n suffix?: string;\n differenceStyle?: 'percentage' | 'value' | 'absolute';\n description?: string;\n icon?: React.ReactNode;\n label?: string;\n formatValue?: (value: number) => string;\n loading?: boolean;\n}\n\nexport function MetricCard({\n currentValue,\n previousValue,\n prefix = '',\n suffix = '',\n differenceStyle = 'percentage',\n description,\n icon,\n label,\n formatValue,\n loading = false,\n}: MetricCardProps) {\n const bi = useBiPalette();\n const fmt = formatValue ?? formatCompact;\n const { naked } = useChartContext() ?? {};\n\n if (loading) {\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2 }}>\n <Stack spacing={1} sx={{ height: '100%' }}>\n <Skeleton variant=\"text\" width={100} sx={{ fontSize: '0.75rem' }} />\n <Box sx={{ flex: 1, display: 'flex', alignItems: 'center' }}>\n <Skeleton variant=\"text\" width=\"60%\" sx={{ fontSize: '2.5rem' }} />\n </Box>\n <Skeleton variant=\"text\" width={140} sx={{ fontSize: '0.875rem' }} />\n </Stack>\n </Box>\n );\n }\n\n const change = previousValue != null ? percentChange(previousValue, currentValue) : null;\n const diff = previousValue != null ? currentValue - previousValue : null;\n\n const changeDisplay = change != null\n ? differenceStyle === 'percentage'\n ? `${(change * 100).toFixed(1)}%`\n : `${prefix}${fmt(diff!)}${suffix}`\n : null;\n\n const arrow = diff != null ? trendArrow(diff) : null;\n const changeColor = diff != null ? (diff > 0 ? bi.positive : diff < 0 ? bi.negative : bi.neutral) : undefined;\n\n return (\n <Box className=\"bi-metric-card\" sx={{ height: '100%', p: 1, alignContent: 'center' }}>\n <Stack spacing={1} sx={{ height: '100%' }} alignContent=\"center\">\n {label && naked && (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {icon && (\n <Box sx={{ color: 'primary.main', display: 'flex', alignItems: 'center' }}>\n <Typography variant=\"body2\">{icon}</Typography>\n </Box>\n )}\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ letterSpacing: 0.6, lineHeight: 1.4, overflow: 'clip' }}>\n {label}\n </Typography>\n </Stack>\n )}\n\n <Box sx={{ flex: 1, display: 'flex', alignItems: 'center', minWidth: '100%', justifyContent: 'center' }}>\n <Typography variant=\"h5\" sx={{ fontWeight: 800, fontSize: '28px', letterSpacing: -0.5 }}>\n {prefix}{fmt(currentValue)}{suffix}\n </Typography>\n </Box>\n\n {changeDisplay && (\n <Stack direction=\"row\" spacing={0.5} alignItems=\"center\" justifyContent=\"center\">\n <Typography variant=\"body1\" className=\"bi-metric-change\" sx={{ color: changeColor, fontWeight: 700 }}>\n {arrow} {changeDisplay}\n </Typography>\n {previousValue != null && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n vs {prefix}{fmt(previousValue)}{suffix}\n </Typography>\n )}\n </Stack>\n )}\n\n {description && (\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ opacity: 0.8 }}>\n {description}\n </Typography>\n )}\n </Stack>\n </Box>\n );\n}\n\nexport default MetricCard;\n","import React from 'react';\nimport { Box, Skeleton, Stack, Typography } from '@mui/material';\nimport { MetricCard } from './MetricCard';\nimport type { MetricCardProps } from './MetricCard';\n\nexport interface MetricGroupCardProps {\n title?: string;\n metrics: MetricCardProps[];\n columns?: 2 | 3 | 4;\n loading?: boolean;\n}\n\nexport function MetricGroupCard({ title, metrics, columns = 3, loading = false }: MetricGroupCardProps) {\n if (loading) {\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2 }}>\n {title && <Skeleton variant=\"text\" width={160} sx={{ fontSize: '1.25rem', mb: 2 }} />}\n <Box sx={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: 2 }}>\n {Array.from({ length: columns }).map((_, i) => (\n <Stack key={i} spacing={1} sx={{ p: 1 }}>\n <Skeleton variant=\"text\" width={80} sx={{ fontSize: '0.75rem' }} />\n <Skeleton variant=\"text\" width=\"70%\" sx={{ fontSize: '2rem' }} />\n <Skeleton variant=\"text\" width={100} sx={{ fontSize: '0.75rem' }} />\n </Stack>\n ))}\n </Box>\n </Box>\n );\n }\n\n return (\n <Box sx={{ height: '100%', p: 2 }}>\n {title && (\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n {title}\n </Typography>\n )}\n <Box sx={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: 2 }}>\n {metrics.map((props, i) => (\n <MetricCard key={i} {...props} />\n ))}\n </Box>\n </Box>\n );\n}\n\nexport default MetricGroupCard;\n","import React from 'react';\nimport { Box, Typography, useTheme } from '@mui/material';\nimport { formatCompact } from '../data/dataUtils';\n\nexport interface GaugeThreshold {\n /** Upper bound of the band as a ratio in `[0, 1]`. */\n value: number;\n color: string;\n}\n\nexport interface GaugeCardProps {\n value: number;\n min?: number;\n max?: number;\n label?: string;\n prefix?: string;\n suffix?: string;\n /** Bands from low to high. Defaults to error / warning / success at 33 % / 66 % / 100 %. */\n thresholds?: GaugeThreshold[];\n formatValue?: (value: number) => string;\n loading?: boolean;\n}\n\nconst ARC_START = Math.PI;\nconst ARC_END = 2 * Math.PI;\nconst R = 50;\nconst CX = R + 10;\nconst CY = R + 10;\nconst STROKEWIDTH = 10;\n\nconst viewBoxWidth = 2 * R + STROKEWIDTH + 10;\nconst viewBoxHeight = R + 40;\n\nfunction polarToXY(angle: number): [number, number] {\n return [CX + R * Math.cos(angle), CY + R * Math.sin(angle)];\n}\n\nfunction describeArc(startAngle: number, endAngle: number): string {\n const [sx, sy] = polarToXY(startAngle);\n const [ex, ey] = polarToXY(endAngle);\n const large = endAngle - startAngle > Math.PI ? 1 : 0;\n return `M ${sx} ${sy} A ${R} ${R} 0 ${large} 1 ${ex} ${ey}`;\n}\n\ninterface GaugeSvgProps {\n zones: GaugeThreshold[];\n ratio: number;\n needleColor: string;\n strokeWidth: number;\n textPrimaryColor: string;\n textSecondaryColor: string;\n min: string;\n max: string;\n elementsClass?: string;\n className?: string;\n valueComponent: string;\n strokeLinecap?: 'round' | 'inherit' | 'butt' | 'square';\n}\n\nfunction GaugeSvg({ zones, ratio, needleColor, strokeWidth, textPrimaryColor, textSecondaryColor, elementsClass, min, max, valueComponent, className, strokeLinecap = 'round' }: GaugeSvgProps) {\n const needleAngle = ARC_START + ratio * (ARC_END - ARC_START);\n const [nx, ny] = polarToXY(needleAngle);\n\n return (\n <svg className={className} x=\"0\" y=\"0\" viewBox={`0 0 ${viewBoxWidth} ${viewBoxHeight}`} width=\"100%\" height=\"100%\" preserveAspectRatio=\"xMidYMid meet\">\n {zones.map((zone, i) => {\n const prevVal = Math.min(i > 0 ? zones[i - 1].value : 0, 1);\n const segStart = ARC_START + prevVal * (ARC_END - ARC_START);\n const segEnd = Math.min(ARC_START + zone.value * (ARC_END - ARC_START), ARC_END);\n return (\n <path\n className={elementsClass}\n key={i}\n d={describeArc(segStart, segEnd)}\n fill=\"none\"\n stroke={zone.color}\n strokeWidth={strokeWidth}\n strokeLinecap={i === zones.length - 1 ? 'round' : strokeLinecap}\n />\n );\n })}\n\n {ratio > 0.005 && (\n <path className={elementsClass} d={describeArc(ARC_START, needleAngle)} fill=\"none\" stroke={needleColor} strokeWidth={strokeWidth} strokeLinecap=\"round\" />\n )}\n\n <line className={elementsClass} x1={CX} y1={CY} x2={nx} y2={ny} stroke={textPrimaryColor} strokeWidth={2.5} strokeLinecap=\"round\" />\n <circle className={elementsClass} cx={CX} cy={CY} r={4} fill={textPrimaryColor} />\n\n <text x={CX} y={CY + 20} textAnchor=\"middle\" fill={textPrimaryColor} fontSize=\"14\" fontWeight=\"bold\">\n {valueComponent}\n </text>\n\n <text x={CX - R} y={CY + 12} textAnchor=\"end\" fill={textSecondaryColor} fontSize=\"8\">\n {min}\n </text>\n <text x={CX + R - 10} y={CY + 12} textAnchor=\"start\" fill={textSecondaryColor} fontSize=\"8\">\n {max}\n </text>\n </svg>\n );\n}\n\nexport function GaugeCard({ value, min = 0, max = 100, label, prefix = '', suffix = '', thresholds, formatValue, loading = false }: GaugeCardProps) {\n const theme = useTheme();\n const fmt = formatValue ?? formatCompact;\n\n if (loading) {\n const skeleton = theme.palette.action.disabledBackground;\n return (\n <Box className=\"parallax-wrapper parallax-group\" data-testid=\"loading\" sx={{ height: '100%', p: 0, display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <GaugeSvg\n className=\"parallax-layer layer-fg skeleton-card\"\n elementsClass=\"svgElement\"\n zones={[{ color: skeleton, value: 0.33 }, { color: skeleton, value: 0.7 }, { color: skeleton, value: 1 }]}\n ratio={0.5}\n strokeLinecap=\"butt\"\n needleColor=\"inherit\"\n strokeWidth={20}\n textPrimaryColor={theme.palette.text.disabled}\n textSecondaryColor={theme.palette.text.disabled}\n min=\"\"\n max=\"\"\n valueComponent=\"Loading\"\n />\n </Box>\n );\n }\n\n const range = max - min || 1;\n const ratio = Math.max(0, Math.min(1, (value - min) / range));\n\n const zones = thresholds ?? [\n { value: 0.33, color: theme.palette.error.main },\n { value: 0.66, color: theme.palette.warning.main },\n { value: 1.0, color: theme.palette.success.main },\n ];\n\n let needleColor = zones[zones.length - 1]?.color ?? theme.palette.primary.main;\n for (const z of zones) {\n if (ratio <= z.value) {\n needleColor = z.color;\n break;\n }\n }\n\n return (\n <Box sx={{ position: 'relative', m: 0, height: '100%', p: 0, display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n {label && (\n <Box sx={{ position: 'absolute', top: 100, left: 10 }}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ letterSpacing: 0.6 }}>\n {label}\n </Typography>\n </Box>\n )}\n\n <Box sx={{ display: 'inline-flex', mt: 0, alignItems: 'normal', width: '100%', height: 'inherit', alignContent: 'center' }}>\n <GaugeSvg\n zones={zones}\n ratio={ratio}\n needleColor={needleColor}\n strokeWidth={20}\n textPrimaryColor={theme.palette.text.primary}\n textSecondaryColor={theme.palette.text.secondary}\n min={fmt(min)}\n max={fmt(max)}\n valueComponent={`${prefix}${fmt(value)}${suffix}`}\n />\n </Box>\n </Box>\n );\n}\n\nexport default GaugeCard;\n","import React from 'react';\nimport { Stack } from '@mui/material';\nimport type { GaugeCardProps } from './GaugeCard';\n\nexport interface GaugeGroupProps {\n title?: string;\n materialIcon?: string;\n footNote?: string;\n partial?: boolean;\n loading?: boolean;\n gauges: React.ReactElement<GaugeCardProps>[];\n}\n\nexport const GaugeGroup: React.FC<GaugeGroupProps> = (props) => (\n <div style={{ height: '100%' }}>\n <Stack direction=\"row\" gap={1} sx={{ height: '100%' }}>\n {props.gauges.map((g, i) => (\n <div key={g.key ?? i}>{g}</div>\n ))}\n </Stack>\n {props.footNote && (\n <div className=\"ds-card-footer\">\n <small>{props.footNote}</small>\n </div>\n )}\n </div>\n);\n\nexport default GaugeGroup;\n","import { LicenseInfo } from '@mui/x-license';\n\nlet warned = false;\n\n/**\n * `DataTableCard` renders MUI X DataGrid **Pro**, whose licence key must be set\n * by the HOST before first render (`LicenseInfo.setLicenseKey(...)` at boot —\n * this package never ships a key). Without one the grid draws a watermark and\n * logs a licence error; this guard makes the cause obvious once per session.\n */\nexport function warnIfMuiXLicenseMissing(): void {\n if (warned) return;\n warned = true;\n let key: string | undefined;\n try {\n key = LicenseInfo.getLicenseKey?.();\n } catch {\n key = undefined;\n }\n if (!key) {\n console.warn(\n '[@aintela/bi] MUI X licence key not set. DataTableCard uses @mui/x-data-grid-pro; call ' +\n \"LicenseInfo.setLicenseKey('<your key>') (from '@mui/x-license' or '@mui/x-data-grid-pro') in the host \" +\n 'before the first BI render, or the grid renders a watermark.',\n );\n }\n}\n\n/** Test seam. */\nexport function resetMuiXLicenseWarning(): void {\n warned = false;\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Alert, Box, Button, CircularProgress, MenuItem, Snackbar, Typography, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport DownloadIcon from '@mui/icons-material/FileDownloadOutlined';\nimport TableViewIcon from '@mui/icons-material/TableViewOutlined';\nimport FilterAltOffIcon from '@mui/icons-material/FilterAltOffOutlined';\n// Pro variant — same surface as the community `DataGrid` plus column pinning\n// and reorder. The licence key is set by the HOST (see licenseGuard.ts).\nimport {\n DataGridPro,\n GridToolbarContainer,\n GridToolbarColumnsButton,\n GridToolbarFilterButton,\n GridToolbarDensitySelector,\n GridToolbarExportContainer,\n getGridSingleSelectOperators,\n gridClasses,\n gridFilterModelSelector,\n useGridApiContext,\n useGridSelector,\n} from '@mui/x-data-grid-pro';\nimport type {\n GridCellClassNamePropType, GridCellParams, GridColDef, GridColumnHeaderParams, GridFilterItem, GridFilterOperator,\n GridRowClassNameParams, GridRowHeightParams, GridRowHeightReturnValue, GridValidRowModel,\n} from '@mui/x-data-grid-pro';\nimport { formatCompact, formatNumber, formatCurrency, formatPercent, formatDate, toStr, formatBoolean, DataResult } from '../data/dataUtils';\nimport { useChartContext } from '../grid/ChartContext';\nimport type { LazyDataResult } from '../hooks/useDashboardLazyData';\nimport { warnIfMuiXLicenseMissing } from './licenseGuard';\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport type ColumnFormats = 'compact' | 'number' | 'currency' | 'check' | 'percent' | 'date';\n\nexport interface DataTableColumn<TModel extends GridValidRowModel = any, T = any> {\n field: string;\n label: string;\n align?: 'left' | 'center' | 'right';\n width?: number;\n minWidth?: number;\n format?: ColumnFormats | ((value: unknown) => string);\n sortable?: boolean;\n filterable?: boolean;\n headerClassName?: string;\n cellClassName?: string | GridCellClassNamePropType<TModel, T>;\n renderHeader?: (params: GridColumnHeaderParams<TModel, T>) => React.ReactNode;\n renderCell?: (params: GridCellParams<TModel, T, string>) => React.ReactNode;\n /** `'singleSelect'` renders a dropdown filter (with {@link valueOptions}). */\n type?: 'singleSelect';\n valueOptions?: ReadonlyArray<unknown>;\n /** `true` → restrict the singleSelect filter to `isAnyOf` (multi-select). */\n multiSelectDropdown?: boolean;\n}\n\nexport interface DataTableCardProps<TModel extends Record<string, any> = Record<string, any>> {\n /** Local mode — full rowset already in memory (`useDashboardData(...).toDataResult(schema)`). */\n data?: DataResult<TModel> | null;\n /** Server mode (mutually exclusive with `data`) — `useDashboardLazyData(viewId, schema)`. */\n lazyData?: LazyDataResult<TModel>;\n /** Column schema (`defineSchema(...)`). Loosely typed on purpose: an untyped `DataResult` + a typed schema is the common LLM pattern. */\n schema?: { build(): DataTableColumn<any>[] };\n title?: string;\n pageSize?: number;\n dense?: boolean;\n striped?: boolean;\n /** Override for the even-row stripe (defaults to `theme.palette.action.hover`). */\n stripedColorEven?: string;\n stripedColorOdd?: string;\n maxHeight?: number | string;\n /** Header background (defaults to a translucent `primary.main`). */\n headerColor?: string;\n loading?: boolean;\n autoFitHeaders?: boolean;\n getRowHeight?: (params: GridRowHeightParams) => GridRowHeightReturnValue;\n getRowClassName?: (params: GridRowClassNameParams<TModel & GridValidRowModel>) => string;\n /** Default pinned columns at first render (`{ left?: string[]; right?: string[] }`). */\n initialPinnedColumns?: { left?: string[]; right?: string[] };\n}\n\n// ─── Helpers ─────────────────────────────────────────────────\n\nfunction resolveFormatter(format: DataTableColumn['format']): ((value: unknown) => string) | undefined {\n if (!format) return undefined;\n if (typeof format === 'function') return format;\n switch (format) {\n case 'compact': return (v) => (v != null && typeof v === 'number' ? formatCompact(v) : toStr(v));\n case 'number': return (v) => (v != null && typeof v === 'number' ? formatNumber(v) : toStr(v));\n case 'currency': return (v) => (v != null && typeof v === 'number' ? formatCurrency(v) : toStr(v));\n case 'percent': return (v) => (v != null && typeof v === 'number' ? formatPercent(v) : toStr(v));\n case 'check': return (v) => (v != null && typeof v === 'boolean' ? formatBoolean(v) : toStr(v));\n case 'date': return (v) => (v instanceof Date ? formatDate(v) : toStr(v));\n }\n}\n\n// ─── Toolbar (server-side export) ────────────────────────────\n// Composed from the legacy toolbar pieces so our server-side CSV / XLSX\n// items sit inside the export menu (see the source app's DataTableCard for\n// why `<GridToolbar />` itself does not work here).\n\ninterface ServerExportToolbarProps {\n onCsvExport?: () => void;\n onXlsxExport?: () => void;\n onClearFilters?: () => void;\n exporting?: boolean;\n}\n\nfunction isActiveFilterItem(item: GridFilterItem): boolean {\n if (item.operator === 'isEmpty' || item.operator === 'isNotEmpty') return true;\n if (Array.isArray(item.value)) return item.value.length > 0;\n return item.value !== undefined && item.value !== null && item.value !== '';\n}\n\nfunction ServerExportToolbar({ onCsvExport, onXlsxExport, onClearFilters, exporting }: ServerExportToolbarProps) {\n const apiRef = useGridApiContext();\n const filterModel = useGridSelector(apiRef, gridFilterModelSelector);\n const hasActiveFilters = (filterModel?.items ?? []).some(isActiveFilterItem) || (filterModel?.quickFilterValues?.length ?? 0) > 0;\n\n return (\n <GridToolbarContainer>\n <GridToolbarColumnsButton />\n <GridToolbarFilterButton />\n <GridToolbarDensitySelector />\n {onClearFilters && hasActiveFilters && (\n <Button size=\"small\" startIcon={<FilterAltOffIcon fontSize=\"small\" />} onClick={onClearFilters} sx={{ textTransform: 'none' }}>\n Limpar filtros\n </Button>\n )}\n <GridToolbarExportContainer>\n {/* Each MenuItem must be a DIRECT child so the container can clone it with `hideMenu`. */}\n {onCsvExport && (\n <MenuItem key=\"server-csv\" disabled={exporting} onClick={onCsvExport}>\n <DownloadIcon fontSize=\"small\" style={{ marginRight: 8 }} />\n Exportar CSV (todos os dados)\n </MenuItem>\n )}\n {onXlsxExport && (\n <MenuItem key=\"server-xlsx\" disabled={exporting} onClick={onXlsxExport}>\n <TableViewIcon fontSize=\"small\" style={{ marginRight: 8 }} />\n Exportar Excel (todos os dados)\n </MenuItem>\n )}\n </GridToolbarExportContainer>\n </GridToolbarContainer>\n );\n}\n\nconst CHAR_WIDTH_PX = 11;\nconst HEADER_PADDING_PX = 30;\nconst MIN_COL_WIDTH = 80;\n\nfunction estimateHeaderWidth(label: string): number {\n return Math.max(MIN_COL_WIDTH, label.length * CHAR_WIDTH_PX + HEADER_PADDING_PX);\n}\n\nfunction toGridColumns(columns: DataTableColumn[], autoFitHeaders: boolean): GridColDef[] {\n return columns.map((col) => {\n const formatter = resolveFormatter(col.format);\n const label = col.label ?? col.field;\n const baseMinWidth = col.minWidth ?? MIN_COL_WIDTH;\n const minWidth = autoFitHeaders ? Math.max(baseMinWidth, estimateHeaderWidth(label)) : baseMinWidth;\n\n const def: GridColDef = {\n field: col.field,\n headerName: label,\n align: col.align,\n headerAlign: col.align,\n headerClassName: col.headerClassName ?? 'bi-datatable--header',\n width: col.width,\n minWidth,\n sortable: col.sortable !== false,\n filterable: col.filterable !== false,\n flex: col.width ? undefined : 1,\n cellClassName: col.cellClassName,\n renderCell: col.renderCell,\n renderHeader: col.renderHeader,\n };\n if (formatter) def.valueFormatter = (value: unknown) => formatter(value);\n if (col.type === 'singleSelect') {\n const selectDef = def as unknown as { type: string; valueOptions: unknown; filterOperators?: GridFilterOperator[] };\n selectDef.type = 'singleSelect';\n selectDef.valueOptions = col.valueOptions;\n if (col.multiSelectDropdown) {\n selectDef.filterOperators = getGridSingleSelectOperators().filter((op: GridFilterOperator) => op.value === 'isAnyOf');\n }\n }\n return def;\n });\n}\n\ntype ExportNotice = { kind: 'progress' | 'success' | 'error'; message: string } | null;\n\nexport function DataTableCard<TModel extends Record<string, any>>({\n data,\n lazyData,\n schema,\n getRowClassName,\n title,\n striped,\n stripedColorEven,\n stripedColorOdd,\n getRowHeight,\n headerColor,\n pageSize,\n dense = true,\n loading = false,\n autoFitHeaders = true,\n initialPinnedColumns,\n}: DataTableCardProps<TModel>) {\n const theme = useTheme();\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const isLazy = !!lazyData;\n\n useEffect(() => { warnIfMuiXLicenseMissing(); }, []);\n\n if (data && lazyData) {\n console.warn('[DataTableCard] Both `data` and `lazyData` were provided. These props are mutually exclusive. Using `lazyData` and ignoring `data`.');\n }\n\n const initialPageSize = pageSize ?? (isLazy ? 50 : 20);\n const [paginationModel, setPaginationModel] = useState({ page: 0, pageSize: initialPageSize });\n\n const columns: DataTableColumn<TModel>[] = useMemo(() => {\n const source = schema ?? lazyData?.columnSchema ?? data?.columnSchema;\n return source ? (source.build() as DataTableColumn<TModel>[]) : [];\n }, [schema, data?.columnSchema, lazyData?.columnSchema]);\n\n // `dataSource` must be a stable reference or the grid re-fetches forever.\n const lazyGetRows = lazyData?.getRows;\n const dataSource = useMemo(() => (lazyGetRows ? { getRows: lazyGetRows } : undefined), [lazyGetRows]);\n\n const { naked } = useChartContext() ?? {};\n const multiplier = naked ? 1 : 0.9;\n const containerHeight = useContainerMeasurements({ containerRef, multiplier, naked, minHeight: 300 });\n\n const gridColumns = useMemo(() => toGridColumns(columns, autoFitHeaders), [columns, autoFitHeaders]);\n\n const downloadCsv = lazyData?.downloadCsv;\n const downloadXlsx = lazyData?.downloadXlsx;\n const isExporting = lazyData?.exporting ?? false;\n\n // Export feedback through a self-contained MUI Snackbar (the legacy card\n // used notistack, which would have been another peer).\n const [notice, setNotice] = useState<ExportNotice>(null);\n\n const runExport = React.useCallback(\n async (format: 'csv' | 'xlsx') => {\n const fn = format === 'xlsx' ? downloadXlsx : downloadCsv;\n if (!fn) return;\n const formatLabel = format === 'xlsx' ? 'Excel' : 'CSV';\n setNotice({ kind: 'progress', message: `Exportando ${formatLabel}…` });\n try {\n await fn();\n setNotice({ kind: 'success', message: `${formatLabel} exportado com sucesso` });\n } catch (err) {\n console.error(`[DataTableCard] ${formatLabel} export failed`, err);\n setNotice({ kind: 'error', message: err instanceof Error ? err.message : `Falha ao exportar ${formatLabel}` });\n }\n },\n [downloadCsv, downloadXlsx],\n );\n\n const onCsvExport = useMemo(() => (downloadCsv ? () => runExport('csv') : undefined), [downloadCsv, runExport]);\n const onXlsxExport = useMemo(() => (downloadXlsx ? () => runExport('xlsx') : undefined), [downloadXlsx, runExport]);\n\n const lazyApiRef = lazyData?.apiRef;\n const onClearFilters = useMemo(\n () => (lazyApiRef ? () => lazyApiRef.current?.setFilterModel({ items: [], quickFilterValues: [] }) : undefined),\n [lazyApiRef],\n );\n\n const toolbarSlotProps: ServerExportToolbarProps | undefined = useMemo(() => {\n if (!onCsvExport && !onXlsxExport && !onClearFilters) return undefined;\n return { onCsvExport, onXlsxExport, onClearFilters, exporting: isExporting };\n }, [onCsvExport, onXlsxExport, onClearFilters, isExporting]);\n\n // Consumed ONCE by DataGridPro on mount (\"seed, then user controls\").\n const initialState = useMemo(() => {\n const state: Record<string, unknown> = { density: dense ? 'compact' : 'standard' };\n if (initialPinnedColumns) state.pinnedColumns = initialPinnedColumns;\n return state;\n }, []);\n\n const rows: GridValidRowModel[] = useMemo(() => {\n if (!data) return [];\n return (data.rows as Record<string, unknown>[]).map((row, i) => ({ id: i, ...row }));\n }, [data]);\n\n const evenStripe = stripedColorEven ?? theme.palette.action.hover;\n const oddStripe = stripedColorOdd ?? 'transparent';\n const headerBg = headerColor ?? alpha(theme.palette.primary.main, theme.palette.mode === 'dark' ? 0.24 : 0.1);\n\n return (\n <Box data-testid={loading ? 'loading' : ''} sx={{ width: '100%', height: '100%', p: dense ? 1 : 2, display: 'flex', flexDirection: 'column', overflow: 'auto' }} ref={containerRef}>\n {title && naked && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n <Box\n sx={{\n overflow: 'auto',\n height: `${containerHeight}px`,\n '& .bi-datatable-row-even': { backgroundColor: evenStripe },\n '& .bi-datatable-row-odd': { backgroundColor: oddStripe },\n }}\n >\n <DataGridPro\n {...(isLazy\n ? {\n apiRef: lazyData!.apiRef,\n dataSource,\n onDataSourceError: lazyData!.onError,\n loading: lazyData!.loading || loading,\n }\n : { rows, loading })}\n initialState={initialState}\n showToolbar={!!toolbarSlotProps}\n slots={toolbarSlotProps ? { toolbar: ServerExportToolbar as any } : undefined}\n getRowHeight={getRowHeight}\n columns={gridColumns}\n getRowClassName={(params) => {\n let result = getRowClassName ? getRowClassName(params) : '';\n if (result.length > 0) result += ' ';\n if (striped) result += params.indexRelativeToCurrentPage % 2 === 0 ? 'bi-datatable-row-even' : 'bi-datatable-row-odd';\n return result;\n }}\n disableRowSelectionOnClick\n filterDebounceMs={300}\n pagination\n paginationModel={paginationModel}\n pageSizeOptions={[20, 35, 50, 100]}\n onPaginationModelChange={setPaginationModel}\n slotProps={{\n baseIconButton: { style: { backgroundColor: 'transparent' } },\n ...(toolbarSlotProps ? { toolbar: toolbarSlotProps as any } : {}),\n }}\n sx={{\n fontSize: '14px',\n maxHeight: '100%',\n border: 'none',\n color: 'text.primary',\n [`& .${gridClasses.columnSeparator}`]: { color: 'divider' },\n [`& .${gridClasses.sortIcon}`]: { color: 'text.primary' },\n '& .bi-datatable--header': { backgroundColor: headerBg },\n '& .MuiDataGrid-columnHeaders': { borderColor: 'divider' },\n '& .MuiDataGrid-cell': { borderColor: 'divider' },\n '& .MuiDataGrid-row:hover': { backgroundColor: 'action.selected' },\n '& .MuiDataGrid-footerContainer': { borderTop: 'none' },\n }}\n />\n </Box>\n\n <Snackbar\n open={notice !== null}\n autoHideDuration={notice?.kind === 'progress' ? null : notice?.kind === 'error' ? 6000 : 3000}\n onClose={() => setNotice(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}\n >\n <Alert\n onClose={() => setNotice(null)}\n severity={notice?.kind === 'error' ? 'error' : notice?.kind === 'success' ? 'success' : 'info'}\n icon={notice?.kind === 'progress' ? <CircularProgress size={16} color=\"inherit\" /> : undefined}\n variant=\"outlined\"\n sx={{ bgcolor: 'background.paper' }}\n >\n {notice?.message}\n </Alert>\n </Snackbar>\n </Box>\n );\n}\n\nfunction useContainerMeasurements({ containerRef, multiplier = 1, naked, minHeight = 200 }: {\n containerRef: React.RefObject<HTMLElement | null>;\n multiplier: number;\n naked: boolean | undefined;\n minHeight: number;\n}) {\n const [containerHeight, setContainerHeight] = useState(minHeight);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const getParentGridCard = (element: HTMLElement | null): HTMLElement | null => {\n if (element?.parentElement == null) return null;\n if (element?.classList.contains('ds-card')) return element;\n return getParentGridCard(element?.parentElement ?? null);\n };\n\n useEffect(() => {\n const refElement = containerRef.current;\n if (!refElement || typeof ResizeObserver === 'undefined') return;\n const target = getParentGridCard(refElement);\n\n const observer = new ResizeObserver((entries) => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n const height = Math.floor(entries[0].contentRect.height) * multiplier;\n timeoutRef.current = setTimeout(() => {\n setContainerHeight(() => height);\n timeoutRef.current = null;\n }, 50);\n });\n if (target) observer.observe(target);\n\n if (containerHeight !== 200 && target) {\n setContainerHeight((prev) => prev * multiplier);\n }\n\n return () => observer.disconnect();\n }, [containerRef?.current, naked, multiplier]);\n\n return containerHeight;\n}\n\nexport default DataTableCard;\n","import { useEffect, useState } from 'react';\nimport type React from 'react';\n\n/**\n * Width/height of a container element, kept fresh with a ResizeObserver.\n * Local copy of the chat library's hook of the same name (a runtime import of\n * `@aintela/chat` would drag the whole chat barrel into every card).\n */\nexport function useContainerRectangle(\n ref: React.RefObject<HTMLElement | null>,\n initialWidth = 0,\n initialHeight = 0,\n /** Re-attach the observer when this changes (the element may mount after the first render). */\n remeasureKey?: unknown,\n): [number, number] {\n const [width, setWidth] = useState(initialWidth);\n const [height, setHeight] = useState(initialHeight);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (typeof ResizeObserver === 'undefined') {\n const r = el.getBoundingClientRect();\n setWidth(r.width);\n setHeight(r.height);\n return;\n }\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setHeight(entry.contentRect.height);\n setWidth(entry.contentRect.width);\n }\n });\n observer.observe(el);\n const r = el.getBoundingClientRect();\n setWidth(r.width);\n setHeight(r.height);\n return () => observer.disconnect();\n }, [ref, remeasureKey]);\n\n return [width, height];\n}\n","import React, { useMemo, useRef, useState } from 'react';\nimport { Box, Skeleton, Typography, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport {\n ResponsiveContainer, CartesianGrid, Tooltip, Legend,\n LineChart, Line,\n BarChart, Bar,\n AreaChart, Area,\n PieChart, Pie, Cell,\n ScatterChart, Scatter,\n ComposedChart,\n XAxis, YAxis,\n} from 'recharts';\nimport type { PieLabelRenderProps } from 'recharts';\nimport type { DataResult } from '../data/dataUtils';\nimport { formatCompact, formatDate } from '../data/dataUtils';\nimport { useChartCardDefaults } from '../data/ChartCardDefaultsContext';\nimport { resolveBiPalette } from '../theme/createBiTheme';\nimport { useChartContext } from '../grid/ChartContext';\nimport { useContainerRectangle } from './useContainerRectangle';\n\n// ─── Types ───────────────────────────────────────────────────\n\nexport interface ChartSeries {\n dataKey: string;\n name?: string;\n color?: string;\n type?: 'line' | 'bar' | 'area';\n}\n\nexport type ChartType = 'line' | 'bar' | 'barH' | 'barV' | 'donut' | 'pie' | 'scatter' | 'area' | 'stackedArea' | 'stackedBar' | 'combo';\n\ntype DomainValue = number | 'auto' | 'dataMin' | 'dataMax';\n\nexport interface AxisConfig {\n hide?: boolean;\n label?: string;\n tickAngle?: number;\n tickCount?: number;\n interval?: number | 'preserveStart' | 'preserveEnd' | 'preserveStartEnd';\n tickSize?: number;\n tickLine?: boolean;\n axisLine?: boolean;\n domain?: [DomainValue, DomainValue];\n unit?: string;\n reversed?: boolean;\n fontSize?: number;\n color?: string;\n width?: number;\n height?: number;\n scale?: 'auto' | 'linear' | 'pow' | 'sqrt' | 'log' | 'time' | 'band' | 'point';\n}\n\nexport interface ChartCardProps<TModel extends Record<string, any> = Record<string, any>> {\n data?: DataResult<TModel> | null;\n type: ChartType;\n xAxis?: string;\n series: ChartSeries[];\n title?: string;\n height?: number;\n stacked?: boolean;\n showLegend?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n formatXAxis?: (value: unknown) => string;\n formatYAxis?: (value: number) => string;\n xAxisConfig?: AxisConfig;\n yAxisConfig?: AxisConfig;\n loading?: boolean;\n /** Max visible slices for pie/donut charts. Smaller slices are grouped into \"Others\". Default 4. */\n maxSlices?: number;\n /** Overrides the palette from chartDefaults / the theme when set. */\n palette?: string[];\n /** Background colour of the chart container (a theme token string is fine). */\n backgroundColor?: string;\n /** Colour of the grid lines; defaults to a translucent `text.primary`. */\n gridColor?: string;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────\n\nfunction defaultXFormatter(v: unknown): string {\n if (v instanceof Date) return formatDate(v, 'MM/DD');\n return String(v ?? '');\n}\n\n/**\n * Modulates the alpha of `baseColor` by `index/total`, returning a colour in\n * `[minAlpha, maxAlpha]`. Used to render mono-shaded bars / slices where every\n * mark shares one hue but varies in intensity. Built on MUI's `alpha()`, so it\n * accepts hex, functional and keyword CSS colours alike.\n */\nexport function chartShade(baseColor: string, index: number, total: number, minAlpha = 0.25, maxAlpha = 1): string {\n if (total <= 1) return baseColor;\n const t = index / Math.max(1, total - 1);\n const a = minAlpha + (maxAlpha - minAlpha) * t;\n try {\n return alpha(baseColor, a);\n } catch {\n return baseColor;\n }\n}\n\n// ─── Component ───────────────────────────────────────────────\n\nexport function ChartCard<TModel extends Record<string, any> = Record<string, any>>({\n data,\n type,\n xAxis,\n series,\n title,\n height = 300,\n stacked = false,\n showLegend = true,\n showGrid = true,\n showTooltip = true,\n formatXAxis,\n formatYAxis,\n xAxisConfig,\n yAxisConfig,\n loading = false,\n maxSlices = 4,\n palette: paletteOverride,\n backgroundColor,\n gridColor: gridColorOverride,\n}: ChartCardProps<TModel>) {\n const theme = useTheme();\n const { naked } = useChartContext() ?? {};\n\n const rows = !data ? [] : Array.isArray(data) ? (data as Record<string, unknown>[]) : data.rows;\n const chartData: Record<string, unknown>[] = useMemo(() => {\n if (!xAxis) return rows;\n return rows.map((row) => ({\n ...row,\n __xLabel: (formatXAxis ?? defaultXFormatter)(row[xAxis]),\n }));\n }, [rows, xAxis, formatXAxis]);\n\n const fmtY = formatYAxis ?? ((v: number) => formatCompact(v, 0));\n const axisColor = theme.palette.text.secondary;\n const gridColor = gridColorOverride ?? alpha(theme.palette.text.primary, 0.12);\n const xKey = xAxis ? '__xLabel' : undefined;\n\n const resolveAxisProps = (cfg: AxisConfig | undefined, defaults: Record<string, unknown>) => {\n if (!cfg) return defaults;\n const props: Record<string, unknown> = { ...defaults };\n const tickFill = cfg.color ?? (defaults.tick as Record<string, unknown>)?.fill ?? axisColor;\n const tickFs = cfg.fontSize ?? (defaults.tick as Record<string, unknown>)?.fontSize ?? 12;\n props.tick = { fill: tickFill, fontSize: tickFs };\n if (cfg.hide !== undefined) props.hide = cfg.hide;\n if (cfg.label !== undefined) props.label = { value: cfg.label, position: 'insideBottom', offset: -4, fill: tickFill, fontSize: tickFs };\n if (cfg.tickAngle !== undefined) {\n (props.tick as Record<string, unknown>).angle = cfg.tickAngle;\n (props.tick as Record<string, unknown>).textAnchor = cfg.tickAngle < 0 ? 'end' : cfg.tickAngle > 0 ? 'start' : 'middle';\n }\n if (cfg.tickCount !== undefined) props.tickCount = cfg.tickCount;\n if (cfg.interval !== undefined) props.interval = cfg.interval;\n if (cfg.tickSize !== undefined) props.tickSize = cfg.tickSize;\n if (cfg.tickLine !== undefined) props.tickLine = cfg.tickLine;\n if (cfg.axisLine !== undefined) props.axisLine = cfg.axisLine;\n if (cfg.domain) props.domain = cfg.domain;\n if (cfg.unit !== undefined) props.unit = cfg.unit;\n if (cfg.reversed !== undefined) props.reversed = cfg.reversed;\n if (cfg.width !== undefined) props.width = cfg.width;\n if (cfg.height !== undefined) props.height = cfg.height;\n if (cfg.scale !== undefined) props.scale = cfg.scale;\n return props;\n };\n\n const MAX_LENGTH_LABEL = 10;\n const truncateLabel = (label: string) => (label.length > MAX_LENGTH_LABEL ? label.slice(0, MAX_LENGTH_LABEL) : label);\n\n const tooltipStyle = {\n contentStyle: {\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n color: theme.palette.text.primary,\n },\n itemStyle: { color: theme.palette.text.primary },\n labelStyle: { color: axisColor },\n // Recharts' default cursor is a hard-coded light grey overlay; give it\n // both `fill` (BarChart hover rectangle) and `stroke` (Line/Area\n // crosshair) from the theme so it belongs to either canvas.\n cursor: {\n fill: theme.palette.action.hover,\n stroke: theme.palette.action.selected,\n strokeWidth: 1,\n },\n };\n\n // Palette resolution: prop → ChartCardDefaults → theme.palette.bi.series.\n const chartDefaults = useChartCardDefaults();\n const palette = paletteOverride ?? chartDefaults.palette ?? resolveBiPalette(theme).series;\n const monoShade = chartDefaults.monoShadePerCategory ?? true;\n const rotateBase = (chartDefaults.rotateBasePerChart ?? true) && palette.length > 0;\n\n const [slotIndex] = useState<number>(() => (rotateBase ? (chartDefaults.allocateChartSlot?.() ?? 0) : 0));\n const pickPaletteColor = (i: number) => palette[((rotateBase ? slotIndex : 0) + i) % palette.length];\n\n const RADIAN = Math.PI / 180;\n const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent, fill }: PieLabelRenderProps & { fill?: string }) => {\n if (cx == null || cy == null || innerRadius == null || outerRadius == null) return null;\n const radius = (innerRadius as number) + ((outerRadius as number) - (innerRadius as number)) * 0.5;\n const ncx = Number(cx);\n const x = ncx + radius * Math.cos(-(midAngle ?? 0) * RADIAN);\n const ncy = Number(cy);\n const y = ncy + radius * Math.sin(-(midAngle ?? 0) * RADIAN);\n let labelFill = theme.palette.text.primary;\n if (fill) {\n try { labelFill = theme.palette.getContrastText(fill); } catch { /* keep text.primary */ }\n }\n return (\n <text x={x} y={y} fill={labelFill} fontSize={14} textAnchor={x > ncx ? 'start' : 'end'} dominantBaseline=\"central\">\n {`${((percent ?? 1) * 100).toFixed(0)}%`}\n </text>\n );\n };\n\n const seriesColors = series.map((s, i) => s.color ?? pickPaletteColor(i));\n const useMonoShadeBars = monoShade && series.length === 1;\n\n const pieData = useMemo(() => {\n if (type !== 'pie' && type !== 'donut') return [];\n const raw = chartData.map((row, i) => ({\n name: truncateLabel(xKey ? String(row[xKey] ?? row[xAxis!] ?? i) : `#${i}`),\n value: Number(series[0] ? row[series[0].dataKey] : 0) || 0,\n }));\n if (raw.length <= maxSlices) return raw;\n const sorted = [...raw].sort((a, b) => b.value - a.value);\n const top = sorted.slice(0, maxSlices - 1);\n const othersTotal = sorted.slice(maxSlices - 1).reduce((sum, d) => sum + d.value, 0);\n return [...top, { name: 'Others', value: othersTotal }];\n }, [type, chartData, xKey, xAxis, series, maxSlices]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const [, containerHeight] = useContainerRectangle(containerRef);\n\n if (loading || !data) {\n const isPie = type === 'pie' || type === 'donut';\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2, width: '100%', backgroundColor }}>\n {title && naked && <Skeleton variant=\"text\" width={180} sx={{ fontSize: '1.25rem', mb: 1 }} />}\n {isPie ? (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height }}>\n <Skeleton variant=\"circular\" width={Math.min(height * 0.7, 200)} height={Math.min(height * 0.7, 200)} />\n </Box>\n ) : (\n <Skeleton variant=\"rounded\" width=\"100%\" height={height} />\n )}\n </Box>\n );\n }\n\n // ─── Pie / Donut ─────────────────────────────────────────\n if (type === 'pie' || type === 'donut') {\n return (\n <Box ref={containerRef} sx={{ height: '100%', width: '100%', px: 0, backgroundColor }}>\n {title && naked && <Typography variant=\"h6\" sx={{ mb: 0.5 }}>{title}</Typography>}\n <ResponsiveContainer width=\"100%\" height={containerHeight || height}>\n <PieChart>\n <Pie\n data={pieData}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={type === 'donut' ? '50%' : 0}\n outerRadius=\"70%\"\n label={renderCustomizedLabel}\n labelLine={false}\n paddingAngle={1}\n >\n {pieData.map((_, i) => (\n <Cell\n key={i}\n fill={monoShade && pieData.length > 1 ? chartShade(pickPaletteColor(0), i, pieData.length) : pickPaletteColor(i)}\n />\n ))}\n {showTooltip && <Tooltip {...tooltipStyle} />}\n </Pie>\n <Legend wrapperStyle={{ color: theme.palette.text.secondary }} />\n </PieChart>\n </ResponsiveContainer>\n </Box>\n );\n }\n\n // ─── Scatter ─────────────────────────────────────────────\n if (type === 'scatter') {\n return (\n <Box sx={{ height: '100%', p: 0, backgroundColor }}>\n {title && naked && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n <ResponsiveContainer width=\"100%\" height={height}>\n <ScatterChart margin={{ top: 8, right: 16, bottom: xAxisConfig?.tickAngle ? 24 : 8, left: 0 }}>\n {showGrid && <CartesianGrid stroke={gridColor} />}\n <XAxis dataKey={xAxis} name={xAxis} {...resolveAxisProps(xAxisConfig, { tick: { fill: axisColor, fontSize: 12 } })} />\n <YAxis dataKey={series[0]?.dataKey} tickFormatter={fmtY} name={series[0]?.name} {...resolveAxisProps(yAxisConfig, { tick: { fill: axisColor, fontSize: 12 } })} />\n {showTooltip && <Tooltip {...tooltipStyle} />}\n {showLegend && <Legend wrapperStyle={{ color: theme.palette.text.secondary }} />}\n {series.map((s, i) => (\n <Scatter key={s.dataKey} name={s.name ?? s.dataKey} data={chartData} fill={seriesColors[i]} />\n ))}\n </ScatterChart>\n </ResponsiveContainer>\n </Box>\n );\n }\n\n // ─── Cartesian ───────────────────────────────────────────\n const chartType: ChartType = type === 'bar' ? 'barH' : type;\n const isHorizontal = chartType === 'barH';\n const forceStacked = chartType === 'stackedArea' || chartType === 'stackedBar';\n\n const ChartComp = chartType === 'combo' ? ComposedChart\n : chartType === 'barH' || chartType === 'barV' || chartType === 'stackedBar' ? BarChart\n : chartType === 'area' || chartType === 'stackedArea' ? AreaChart\n : LineChart;\n\n const layout = isHorizontal ? ('vertical' as const) : ('horizontal' as const);\n const effectiveStacked = stacked || forceStacked;\n\n const resolveSeriesType = (s: ChartSeries): 'line' | 'bar' | 'area' => {\n if (s.type) return s.type;\n if (chartType === 'combo') return 'bar';\n if (chartType === 'barV' || chartType === 'barH' || chartType === 'stackedBar') return 'bar';\n if (chartType === 'area' || chartType === 'stackedArea') return 'area';\n return 'line';\n };\n\n return (\n <Box sx={{ height: '100%', p: 0.3, backgroundColor }} ref={containerRef}>\n {title && naked && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <ChartComp data={chartData} layout={layout} margin={{ top: 0, right: 16, bottom: xAxisConfig?.tickAngle ? 24 : 8, left: 0 }} style={{ maxHeight: '95%' }}>\n {showGrid && <CartesianGrid stroke={gridColor} strokeDasharray=\"3 3\" />}\n\n {isHorizontal ? (\n <>\n <XAxis type=\"number\" tickFormatter={fmtY} {...resolveAxisProps(xAxisConfig, { tick: { fill: axisColor, fontSize: 12 } })} />\n <YAxis type=\"category\" dataKey={xKey ?? xAxis} {...resolveAxisProps(yAxisConfig, { tick: { fill: axisColor, fontSize: 12 }, width: 80 })} />\n </>\n ) : (\n <>\n <XAxis dataKey={xKey ?? xAxis} {...resolveAxisProps(xAxisConfig, { tick: { fill: axisColor, fontSize: 12 } })} />\n <YAxis tickFormatter={fmtY} {...resolveAxisProps(yAxisConfig, { tick: { fill: axisColor, fontSize: 12 } })} />\n </>\n )}\n\n {showTooltip && <Tooltip {...tooltipStyle} />}\n {showLegend && <Legend wrapperStyle={{ color: theme.palette.text.secondary }} />}\n\n {series.map((s, i) => {\n const color = seriesColors[i];\n const seriesType = resolveSeriesType(s);\n\n if (seriesType === 'bar') {\n return (\n <Bar\n key={s.dataKey}\n dataKey={s.dataKey}\n name={s.name ?? s.dataKey}\n fill={color}\n stackId={effectiveStacked ? 'stack' : undefined}\n radius={isHorizontal ? [0, 4, 4, 0] : [4, 4, 0, 0]}\n maxBarSize={24}\n >\n {useMonoShadeBars && chartData.map((_, ri) => (\n // Bars are typically sorted descending, so invert the shade\n // index: the largest bar gets the strongest alpha.\n <Cell key={ri} fill={chartShade(color, chartData.length - 1 - ri, chartData.length)} />\n ))}\n </Bar>\n );\n }\n if (seriesType === 'area') {\n return (\n <Area\n key={s.dataKey}\n type=\"monotone\"\n dataKey={s.dataKey}\n name={s.name ?? s.dataKey}\n stroke={color}\n fill={color}\n fillOpacity={effectiveStacked ? 0.6 : 0.15}\n stackId={effectiveStacked ? 'stack' : undefined}\n strokeWidth={2}\n />\n );\n }\n return (\n <Line key={s.dataKey} type=\"monotone\" dataKey={s.dataKey} name={s.name ?? s.dataKey} stroke={color} strokeWidth={2} dot={false} activeDot={{ r: 4 }} />\n );\n })}\n </ChartComp>\n </ResponsiveContainer>\n </Box>\n );\n}\n\nexport default ChartCard;\n","import React, { useMemo } from 'react';\nimport { Box, Skeleton, Typography, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport { ResponsiveContainer, Treemap } from 'recharts';\nimport type { DataResult } from '../data/dataUtils';\nimport { formatCompact } from '../data/dataUtils';\nimport { resolveBiPalette } from '../theme/createBiTheme';\n\nexport interface TreeMapCardProps<TModel extends Record<string, any> = Record<string, any>> {\n data?: DataResult<TModel> | null;\n nameKey: keyof TModel & string;\n valueKey: keyof TModel & string;\n title?: string;\n height?: number;\n formatValue?: (value: number) => string;\n loading?: boolean;\n /** Overrides `theme.palette.bi.series`. */\n palette?: readonly string[];\n}\n\ninterface TreeNode {\n name: string;\n size: number;\n fill: string;\n // recharts 3 types `Treemap`'s `data` as `readonly TreemapDataType[]`, which carries a string index\n // signature; recharts 2 constrains it to nothing. Declaring one here typechecks against BOTH majors\n // (see the `recharts` peer range) and costs nothing at runtime — every field a node actually holds is\n // already a string or a number.\n [key: string]: string | number;\n}\n\nfunction CustomContent(props: {\n x?: number; y?: number; width?: number; height?: number;\n name?: string; size?: number; fill?: string;\n formatValue?: (v: number) => string;\n strokeColor: string;\n labelFor: (fill: string) => string;\n}) {\n const { x = 0, y = 0, width = 0, height = 0, name, size, fill, strokeColor, labelFor } = props;\n const fmt = props.formatValue ?? formatCompact;\n if (width < 20 || height < 20) return null;\n const labelColor = fill ? labelFor(fill) : strokeColor;\n\n return (\n <g>\n <rect x={x} y={y} width={width} height={height} rx={4} fill={fill} stroke={strokeColor} strokeWidth={1} />\n {width > 50 && height > 30 && (\n <>\n <text x={x + 6} y={y + 16} fill={labelColor} fontSize={12} fontWeight={600}>\n {(name ?? '').length > width / 7 ? (name ?? '').slice(0, Math.floor(width / 7)) + '…' : name}\n </text>\n {height > 44 && (\n <text x={x + 6} y={y + 32} fill={alpha(labelColor, 0.7)} fontSize={11}>\n {fmt(size ?? 0)}\n </text>\n )}\n </>\n )}\n </g>\n );\n}\n\nexport function TreeMapCard<TModel extends Record<string, any> = Record<string, any>>({\n data,\n nameKey,\n valueKey,\n title,\n height = 300,\n formatValue,\n loading = false,\n palette: paletteOverride,\n}: TreeMapCardProps<TModel>) {\n const theme = useTheme();\n const palette = paletteOverride ?? resolveBiPalette(theme).series;\n\n const treeData: TreeNode[] = useMemo(() => {\n if (!data) return [];\n return (data.rows as Record<string, unknown>[]).map((row, i) => ({\n name: String(row[nameKey] ?? ''),\n size: Math.max(0, Number(row[valueKey]) || 0),\n fill: palette[i % palette.length],\n }));\n }, [data, nameKey, valueKey, palette]);\n\n const labelFor = (fill: string) => {\n try { return theme.palette.getContrastText(fill); } catch { return theme.palette.text.primary; }\n };\n\n if (loading || !data) {\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2 }}>\n {title && <Skeleton variant=\"text\" width={180} sx={{ fontSize: '1.25rem', mb: 1 }} />}\n <Skeleton variant=\"rounded\" width=\"100%\" height={height} />\n </Box>\n );\n }\n\n return (\n <Box sx={{ height: '100%', p: 2 }}>\n {title && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n {treeData.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">No data</Typography>\n ) : (\n <ResponsiveContainer width=\"100%\" height={height}>\n <Treemap\n data={treeData}\n dataKey=\"size\"\n nameKey=\"name\"\n stroke={theme.palette.background.paper}\n content={<CustomContent formatValue={formatValue} strokeColor={theme.palette.background.paper} labelFor={labelFor} />}\n />\n </ResponsiveContainer>\n )}\n </Box>\n );\n}\n\nexport default TreeMapCard;\n","// Map projection helpers shared by MapBubblesCard and MapConnectionsCard.\n// Geography layer URLs live in `./geoLayers.ts`.\n\nexport const BASE_SCALE = 150;\n\nconst BASE_LNG_SPAN = 300;\nconst BASE_LAT_SPAN = 140;\n\nexport interface MapViewport {\n center: [number, number];\n zoom: number;\n}\n\n/**\n * Computes the projection center and zoom multiplier to best fit a set of\n * coordinates.\n *\n * Priority:\n * 1. Both `center` and `defaultZoom` provided → use them directly.\n * 2. `autoFit` enabled (default) → derive center/zoom from coordinates.\n * 3. `defaultZoom` only → derive center from data, apply the given zoom.\n * 4. `center` only → use it, derive zoom from data.\n */\nexport function computeMapViewport(\n coords: { lat: number; lng: number }[],\n opts: {\n autoFit?: boolean;\n defaultZoom?: number;\n center?: [number, number];\n } = {},\n): MapViewport {\n const { autoFit = true, defaultZoom, center: userCenter } = opts;\n\n if (userCenter && defaultZoom != null) {\n return { center: userCenter, zoom: defaultZoom };\n }\n\n if (!autoFit || coords.length === 0) {\n return {\n center: userCenter ?? [0, 20],\n zoom: defaultZoom ?? 1,\n };\n }\n\n const lats = coords.map(c => c.lat);\n const lngs = coords.map(c => c.lng);\n\n const minLat = Math.min(...lats);\n const maxLat = Math.max(...lats);\n const minLng = Math.min(...lngs);\n const maxLng = Math.max(...lngs);\n\n const center: [number, number] = userCenter ?? [\n (minLng + maxLng) / 2,\n (minLat + maxLat) / 2,\n ];\n\n if (defaultZoom != null) {\n return { center, zoom: defaultZoom };\n }\n\n if (coords.length === 1) {\n return { center, zoom: 4 };\n }\n\n const padding = 1.5;\n const latSpan = Math.max(maxLat - minLat, 5) * padding;\n const lngSpan = Math.max(maxLng - minLng, 5) * padding;\n\n const zoomByLat = BASE_LAT_SPAN / latSpan;\n const zoomByLng = BASE_LNG_SPAN / lngSpan;\n const zoom = Math.max(1, Math.min(zoomByLat, zoomByLng, 20));\n\n return { center, zoom };\n}\n","import { createContext, useContext } from 'react';\n\n/** World countries (world-atlas, ~110 m). */\nexport const GEO_URL_WORLD = 'https://cdn.jsdelivr.net/npm/world-atlas@2/countries-110m.json';\n\n/** IBGE — Brazilian states at maximum quality (~1 MB). */\nexport const GEO_URL_BRAZIL_STATES =\n 'https://servicodados.ibge.gov.br/api/v3/malhas/paises/BR?formato=application/vnd.geo+json&qualidade=maxima&intrarregiao=UF';\n\n/** IBGE — Brazilian municipalities at minimum quality (~3.5 MB). Use sparingly. */\nexport const GEO_URL_BRAZIL_MUNICIPALITIES =\n 'https://servicodados.ibge.gov.br/api/v3/malhas/paises/BR?formato=application/vnd.geo+json&qualidade=minima&intrarregiao=municipio';\n\n/**\n * The layer set the legacy app used everywhere: world countries as the base\n * fill + Brazilian state boundaries as an overlay. Exported as a *named*\n * default a host opts into (`<GeoLayersProvider layers={brazilGeoLayers}>`\n * or `geoUrl={brazilGeoLayers}`); the cards' built-in default is the world\n * base alone.\n */\nexport const brazilGeoLayers: readonly string[] = [GEO_URL_WORLD, GEO_URL_BRAZIL_STATES];\n\n/** Cards' built-in default when neither a prop nor a provider sets layers. */\nexport const worldGeoLayers: readonly string[] = [GEO_URL_WORLD];\n\nconst GeoLayersContext = createContext<readonly string[] | null>(null);\n\n/** Sets the geography layer URLs for every map card in a subtree. */\nexport const GeoLayersProvider = GeoLayersContext.Provider;\n\n/**\n * Resolves the layers for a map card: explicit prop → nearest provider →\n * {@link worldGeoLayers}.\n */\nexport function useGeoLayers(override?: string | readonly string[]): readonly string[] {\n const fromContext = useContext(GeoLayersContext);\n if (override !== undefined) return Array.isArray(override) ? (override as readonly string[]) : [override as string];\n return fromContext ?? worldGeoLayers;\n}\n","import React, { useMemo, useState, useCallback } from 'react';\nimport { Box, Skeleton, Typography, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport { ComposableMap, Geographies, Geography, Marker, ZoomableGroup, useZoomPanContext } from 'react-simple-maps';\nimport { formatCompact } from '../data/dataUtils';\nimport { BASE_SCALE, computeMapViewport } from './mapUtils';\nimport { useGeoLayers } from './geoLayers';\nimport { resolveBiPalette } from '../theme/createBiTheme';\n\nexport interface MapBubble {\n lat: number;\n lng: number;\n value: number;\n label?: string;\n}\n\nexport interface MapBubblesProps {\n data?: { rows: MapBubble[] };\n title?: string;\n height?: number;\n minBubbleSize?: number;\n maxBubbleSize?: number;\n /** Bubble colour; defaults to the first BI series colour. */\n color?: string;\n formatValue?: (value: number) => string;\n loading?: boolean;\n /** Zoom multiplier (1 = whole world). Overrides auto-fit zoom when set. */\n defaultZoom?: number;\n /** Map center as [longitude, latitude]. Overrides auto-fit center when set. */\n center?: [number, number];\n /** When true (default), automatically centers and zooms to fit all bubbles. */\n autoFit?: boolean;\n /**\n * Geography topology URL(s). The first layer is the base (filled); further\n * layers render as boundary overlays. Defaults to the nearest\n * `GeoLayersProvider`, else the world base layer (`worldGeoLayers`).\n * Pass `brazilGeoLayers` for the legacy world + Brazil-states pair.\n */\n geoUrl?: string | readonly string[];\n}\n\nfunction BubbleMarkers({ bubbles, maxVal, minBubbleSize, maxBubbleSize, fillColor, fmt, onHover, onLeave }: {\n bubbles: MapBubble[];\n maxVal: number;\n minBubbleSize: number;\n maxBubbleSize: number;\n fillColor: string;\n fmt: (v: number) => string;\n onHover: (e: React.MouseEvent, text: string) => void;\n onLeave: () => void;\n}) {\n const { k } = useZoomPanContext();\n return (\n <>\n {bubbles.map((b, i) => {\n const ratio = Math.abs(b.value) / maxVal;\n const r = minBubbleSize + ratio * (maxBubbleSize - minBubbleSize);\n const label = `${b.label ?? ''} ${fmt(b.value)}`.trim();\n return (\n <Marker key={i} coordinates={[b.lng, b.lat]}>\n <g transform={`scale(${1 / k})`} style={{ cursor: 'pointer' }} onMouseEnter={(e) => onHover(e, label)} onMouseMove={(e) => onHover(e, label)} onMouseLeave={onLeave}>\n <circle r={r} fill={fillColor} opacity={0.45} />\n <circle r={r * 0.6} fill={fillColor} opacity={0.85} />\n </g>\n </Marker>\n );\n })}\n </>\n );\n}\n\nexport function MapBubblesCard({\n data,\n title,\n height = 340,\n minBubbleSize = 4,\n maxBubbleSize = 28,\n color,\n formatValue,\n loading = false,\n defaultZoom,\n center: centerProp,\n autoFit = true,\n geoUrl,\n}: MapBubblesProps) {\n const theme = useTheme();\n const bubbles = data?.rows ?? [];\n const [tooltip, setTooltip] = useState<{ x: number; y: number; text: string } | null>(null);\n const fmt = formatValue ?? formatCompact;\n const fillColor = color ?? resolveBiPalette(theme).series[0];\n const layers = useGeoLayers(geoUrl);\n\n const landFill = alpha(theme.palette.text.primary, 0.06);\n const landHover = alpha(theme.palette.text.primary, 0.09);\n const landStroke = theme.palette.divider;\n const overlayStroke = theme.palette.text.disabled;\n\n const maxVal = useMemo(() => Math.max(1, ...bubbles.map((b) => Math.abs(b.value))), [bubbles]);\n const viewport = useMemo(() => computeMapViewport(bubbles, { autoFit, defaultZoom, center: centerProp }), [bubbles, autoFit, defaultZoom, centerProp]);\n\n const handleHover = useCallback((e: React.MouseEvent, text: string) => {\n const svg = (e.currentTarget as Element).closest('svg');\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n setTooltip({ x: e.clientX - rect.left, y: e.clientY - rect.top, text });\n }, []);\n const clearTooltip = useCallback(() => setTooltip(null), []);\n\n if (loading) {\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2 }}>\n {title && <Skeleton variant=\"text\" width={180} sx={{ fontSize: '1.25rem', mb: 1 }} />}\n <Skeleton variant=\"rounded\" width=\"100%\" height={height} />\n </Box>\n );\n }\n\n const noInteraction = { default: { outline: 'none' }, hover: { outline: 'none' }, pressed: { outline: 'none' } } as const;\n\n return (\n <Box sx={{ height: '100%', p: 0.5, overflow: 'auto' }}>\n {title && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n <Box sx={{ position: 'relative' }}>\n <ComposableMap\n projection=\"geoMercator\"\n projectionConfig={{ scale: BASE_SCALE }}\n width={800}\n height={500}\n style={{ width: '100%', height: '100%', display: 'block', background: theme.palette.background.default, borderRadius: theme.shape.borderRadius }}\n >\n <ZoomableGroup center={viewport.center} zoom={viewport.zoom} minZoom={1} maxZoom={40}>\n {layers.map((url, idx) =>\n idx === 0 ? (\n <Geographies key={url} geography={url}>\n {({ geographies }) =>\n geographies.map((geo) => (\n <Geography key={geo.rsmKey} geography={geo} fill={landFill} stroke={landStroke} strokeWidth={0.5} style={{ ...noInteraction, hover: { outline: 'none', fill: landHover } }} />\n ))\n }\n </Geographies>\n ) : (\n <Geographies key={url} geography={url}>\n {({ geographies }) =>\n geographies.map((geo) => (\n <Geography key={geo.rsmKey} geography={geo} fill=\"none\" stroke={overlayStroke} strokeWidth={0.3} style={noInteraction} />\n ))\n }\n </Geographies>\n ),\n )}\n\n <BubbleMarkers bubbles={bubbles} maxVal={maxVal} minBubbleSize={minBubbleSize} maxBubbleSize={maxBubbleSize} fillColor={fillColor} fmt={fmt} onHover={handleHover} onLeave={clearTooltip} />\n </ZoomableGroup>\n </ComposableMap>\n\n {tooltip && (\n <Box\n sx={{\n position: 'absolute',\n left: tooltip.x,\n top: tooltip.y - 34,\n transform: 'translateX(-50%)',\n bgcolor: 'background.paper',\n color: 'text.primary',\n px: 1,\n py: 0.5,\n borderRadius: 1,\n fontSize: 12,\n pointerEvents: 'none',\n border: '1px solid',\n borderColor: 'divider',\n whiteSpace: 'nowrap',\n zIndex: 10,\n boxShadow: 2,\n }}\n >\n {tooltip.text}\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default MapBubblesCard;\n","import React, { useMemo, useState, useCallback } from 'react';\nimport { Box, Skeleton, Typography, useTheme } from '@mui/material';\nimport { alpha } from '@mui/material/styles';\nimport { ComposableMap, Geographies, Geography, Marker, ZoomableGroup, useMapContext, useZoomPanContext } from 'react-simple-maps';\nimport { formatCompact } from '../data/dataUtils';\nimport { BASE_SCALE, computeMapViewport } from './mapUtils';\nimport { useGeoLayers } from './geoLayers';\nimport { resolveBiPalette } from '../theme/createBiTheme';\n\nexport interface MapConnection {\n fromLat: number;\n fromLng: number;\n toLat: number;\n toLng: number;\n value?: number;\n label?: string;\n}\n\nexport interface MapConnectionsProps {\n data?: { rows: MapConnection[] };\n title?: string;\n height?: number;\n /** Arc colour; defaults to the second BI series colour. */\n color?: string;\n showEndpoints?: boolean;\n formatValue?: (value: number) => string;\n loading?: boolean;\n defaultZoom?: number;\n center?: [number, number];\n autoFit?: boolean;\n /** See `MapBubblesProps.geoUrl`. */\n geoUrl?: string | readonly string[];\n}\n\ninterface ProjectedConnection extends MapConnection {\n x1: number; y1: number; x2: number; y2: number;\n width: number;\n d: string;\n}\n\nfunction curvedPath(x1: number, y1: number, x2: number, y2: number): string {\n const mx = (x1 + x2) / 2;\n const my = Math.min(y1, y2) - Math.abs(x2 - x1) * 0.15;\n return `M${x1},${y1} Q${mx},${my} ${x2},${y2}`;\n}\n\nfunction ConnectionArcs({ connections, maxVal, strokeColor, hoveredIdx, onHover, onLeave }: {\n connections: MapConnection[];\n maxVal: number;\n strokeColor: string;\n hoveredIdx: number | null;\n onHover: (i: number, e: React.MouseEvent) => void;\n onLeave: () => void;\n}) {\n const { projection } = useMapContext();\n const { k } = useZoomPanContext();\n\n const lines = useMemo<ProjectedConnection[]>(\n () =>\n connections.map((c) => {\n const from = projection([c.fromLng, c.fromLat]);\n const to = projection([c.toLng, c.toLat]);\n const x1 = from?.[0] ?? 0;\n const y1 = from?.[1] ?? 0;\n const x2 = to?.[0] ?? 0;\n const y2 = to?.[1] ?? 0;\n const ratio = Math.abs(c.value ?? 1) / maxVal;\n const width = 1 + ratio * 3;\n return { ...c, x1, y1, x2, y2, width, d: curvedPath(x1, y1, x2, y2) };\n }),\n [connections, projection, maxVal],\n );\n\n return (\n <g>\n {lines.map((ln, i) => (\n <g key={i} onMouseEnter={(e) => onHover(i, e)} onMouseMove={(e) => onHover(i, e)} onMouseLeave={onLeave} style={{ cursor: 'pointer' }}>\n <path d={ln.d} fill=\"none\" stroke=\"transparent\" strokeWidth={(ln.width + 8) / k} />\n <path d={ln.d} fill=\"none\" stroke={strokeColor} strokeWidth={ln.width / k} opacity={hoveredIdx === i ? 0.9 : 0.4} strokeLinecap=\"round\" />\n </g>\n ))}\n </g>\n );\n}\n\nfunction EndpointMarkers({ connections, strokeColor }: { connections: MapConnection[]; strokeColor: string }) {\n const { k } = useZoomPanContext();\n return (\n <>\n {connections.map((c, i) => (\n <React.Fragment key={i}>\n <Marker coordinates={[c.fromLng, c.fromLat]}>\n <circle r={3 / k} fill={strokeColor} opacity={0.8} />\n </Marker>\n <Marker coordinates={[c.toLng, c.toLat]}>\n <circle r={3 / k} fill={strokeColor} opacity={0.8} />\n </Marker>\n </React.Fragment>\n ))}\n </>\n );\n}\n\nexport function MapConnectionsCard({\n data,\n title,\n height = 340,\n color,\n showEndpoints = true,\n formatValue,\n loading = false,\n defaultZoom,\n center: centerProp,\n autoFit = true,\n geoUrl,\n}: MapConnectionsProps) {\n const theme = useTheme();\n const connections = data?.rows ?? [];\n const [tooltip, setTooltip] = useState<{ x: number; y: number; text: string } | null>(null);\n const [hoveredIdx, setHoveredIdx] = useState<number | null>(null);\n const fmt = formatValue ?? formatCompact;\n const series = resolveBiPalette(theme).series;\n const strokeColor = color ?? series[1 % series.length];\n const layers = useGeoLayers(geoUrl);\n\n const landFill = alpha(theme.palette.text.primary, 0.06);\n const landHover = alpha(theme.palette.text.primary, 0.09);\n const landStroke = theme.palette.divider;\n const overlayStroke = theme.palette.text.disabled;\n\n const maxVal = useMemo(() => Math.max(1, ...connections.map((c) => Math.abs(c.value ?? 1))), [connections]);\n const allCoords = useMemo(() => connections.flatMap((c) => [{ lat: c.fromLat, lng: c.fromLng }, { lat: c.toLat, lng: c.toLng }]), [connections]);\n const viewport = useMemo(() => computeMapViewport(allCoords, { autoFit, defaultZoom, center: centerProp }), [allCoords, autoFit, defaultZoom, centerProp]);\n\n const handleArcHover = useCallback(\n (i: number, e: React.MouseEvent) => {\n const c = connections[i];\n const text = `${c.label ?? ''} ${c.value != null ? fmt(c.value) : ''}`.trim();\n if (!text) return;\n const svg = (e.currentTarget as Element).closest('svg');\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n setHoveredIdx(i);\n setTooltip({ x: e.clientX - rect.left, y: e.clientY - rect.top, text });\n },\n [connections, fmt],\n );\n const clearTooltip = useCallback(() => {\n setHoveredIdx(null);\n setTooltip(null);\n }, []);\n\n if (loading) {\n return (\n <Box data-testid=\"loading\" sx={{ height: '100%', p: 2 }}>\n {title && <Skeleton variant=\"text\" width={180} sx={{ fontSize: '1.25rem', mb: 1 }} />}\n <Skeleton variant=\"rounded\" width=\"100%\" height={height} />\n </Box>\n );\n }\n\n const noInteraction = { default: { outline: 'none' }, hover: { outline: 'none' }, pressed: { outline: 'none' } } as const;\n\n return (\n <Box sx={{ height: '100%', p: 2, overflow: 'auto' }}>\n {title && <Typography variant=\"h6\" sx={{ mb: 1 }}>{title}</Typography>}\n <Box sx={{ position: 'relative' }}>\n <ComposableMap\n projection=\"geoMercator\"\n projectionConfig={{ scale: BASE_SCALE }}\n width={800}\n style={{ width: '100%', height: '100%', display: 'block', background: theme.palette.background.default, borderRadius: theme.shape.borderRadius }}\n >\n <ZoomableGroup center={viewport.center} zoom={viewport.zoom} minZoom={1} maxZoom={40}>\n {layers.map((url, idx) =>\n idx === 0 ? (\n <Geographies key={url} geography={url}>\n {({ geographies }) =>\n geographies.map((geo) => (\n <Geography key={geo.rsmKey} geography={geo} fill={landFill} stroke={landStroke} strokeWidth={0.5} style={{ ...noInteraction, hover: { outline: 'none', fill: landHover } }} />\n ))\n }\n </Geographies>\n ) : (\n <Geographies key={url} geography={url}>\n {({ geographies }) =>\n geographies.map((geo) => (\n <Geography key={geo.rsmKey} geography={geo} fill=\"none\" stroke={overlayStroke} strokeWidth={0.3} style={noInteraction} />\n ))\n }\n </Geographies>\n ),\n )}\n\n <ConnectionArcs connections={connections} maxVal={maxVal} strokeColor={strokeColor} hoveredIdx={hoveredIdx} onHover={handleArcHover} onLeave={clearTooltip} />\n {showEndpoints && <EndpointMarkers connections={connections} strokeColor={strokeColor} />}\n </ZoomableGroup>\n </ComposableMap>\n\n {tooltip && (\n <Box\n sx={{\n position: 'absolute',\n left: tooltip.x,\n top: tooltip.y - 34,\n transform: 'translateX(-50%)',\n bgcolor: 'background.paper',\n color: 'text.primary',\n px: 1,\n py: 0.5,\n borderRadius: 1,\n fontSize: 12,\n pointerEvents: 'none',\n border: '1px solid',\n borderColor: 'divider',\n whiteSpace: 'nowrap',\n zIndex: 10,\n boxShadow: 2,\n }}\n >\n {tooltip.text}\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default MapConnectionsCard;\n","/**\n * Simplified equirectangular world map for dashboard visualizations.\n * Coordinates: viewBox 0 0 1000 500, where x = (lng+180)/360*1000, y = (90-lat)/180*500.\n */\n\nfunction ll(lat: number, lng: number): [number, number] {\n return [(lng + 180) / 360 * 1000, (90 - lat) / 180 * 500];\n}\n\nfunction toPath(coords: [number, number][]): string {\n return coords.map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(0)},${y.toFixed(0)}`).join(' ') + ' Z';\n}\n\nconst northAmerica = toPath([\n ll(70, -165), ll(72, -140), ll(73, -100), ll(70, -80), ll(65, -60),\n ll(50, -55), ll(44, -65), ll(40, -73), ll(30, -80), ll(25, -80),\n ll(18, -88), ll(15, -92), ll(18, -105), ll(25, -110), ll(32, -117),\n ll(48, -125), ll(55, -130), ll(60, -140), ll(60, -165),\n]);\n\nconst southAmerica = toPath([\n ll(12, -75), ll(10, -60), ll(5, -52), ll(0, -50), ll(-5, -35),\n ll(-15, -38), ll(-23, -42), ll(-33, -52), ll(-42, -63), ll(-55, -68),\n ll(-50, -75), ll(-40, -73), ll(-18, -70), ll(-5, -77), ll(5, -77),\n]);\n\nconst europe = toPath([\n ll(36, -10), ll(38, 0), ll(43, 5), ll(48, -5), ll(51, -10),\n ll(55, -7), ll(58, 5), ll(55, 15), ll(56, 25), ll(60, 30),\n ll(70, 30), ll(70, 15), ll(65, 10), ll(56, 10), ll(52, 5),\n ll(48, 5), ll(44, 10), ll(40, 10), ll(38, 0), ll(36, -5),\n]);\n\nconst africa = toPath([\n ll(35, -10), ll(37, 10), ll(32, 32), ll(30, 33), ll(20, 38),\n ll(12, 44), ll(5, 42), ll(-5, 40), ll(-12, 45), ll(-25, 35),\n ll(-35, 20), ll(-34, 18), ll(-25, 15), ll(-15, 12), ll(-5, 10),\n ll(5, -5), ll(10, -15), ll(15, -17), ll(22, -17), ll(28, -13),\n]);\n\nconst asia = toPath([\n ll(70, 30), ll(72, 60), ll(75, 100), ll(72, 130), ll(65, 170),\n ll(55, 165), ll(50, 140), ll(45, 130), ll(35, 130), ll(30, 120),\n ll(22, 115), ll(10, 105), ll(5, 100), ll(8, 80), ll(12, 75),\n ll(25, 68), ll(28, 60), ll(30, 48), ll(32, 36), ll(38, 28),\n ll(42, 28), ll(48, 40), ll(55, 38), ll(60, 30),\n]);\n\nconst australia = toPath([\n ll(-12, 130), ll(-15, 140), ll(-20, 148), ll(-28, 153),\n ll(-35, 150), ll(-38, 145), ll(-35, 137), ll(-32, 130),\n ll(-25, 115), ll(-22, 115), ll(-15, 122),\n]);\n\nexport const CONTINENT_PATHS = [northAmerica, southAmerica, europe, africa, asia, australia];\n\nexport const MAP_VIEWBOX = '0 0 1000 500';\n\nexport function latLngToXY(lat: number, lng: number): [number, number] {\n return ll(lat, lng);\n}\n"],"names":["MetricCard","currentValue","previousValue","prefix","suffix","differenceStyle","description","icon","label","formatValue","loading","bi","useBiPalette","fmt","formatCompact","naked","useChartContext","Box","jsxs","Stack","jsx","Skeleton","change","percentChange","diff","changeDisplay","arrow","trendArrow","changeColor","Typography","__name","MetricGroupCard","title","metrics","columns","_","i","props","ARC_START","ARC_END","R","CX","CY","STROKEWIDTH","viewBoxWidth","viewBoxHeight","polarToXY","angle","describeArc","startAngle","endAngle","sx","sy","ex","ey","large","GaugeSvg","zones","ratio","needleColor","strokeWidth","textPrimaryColor","textSecondaryColor","elementsClass","min","max","valueComponent","className","strokeLinecap","needleAngle","nx","ny","zone","prevVal","segStart","segEnd","GaugeCard","value","thresholds","theme","useTheme","skeleton","range","_a","z","GaugeGroup","g","warned","warnIfMuiXLicenseMissing","key","_b","LicenseInfo","resolveFormatter","format","v","toStr","formatNumber","formatCurrency","formatPercent","formatBoolean","formatDate","isActiveFilterItem","item","ServerExportToolbar","onCsvExport","onXlsxExport","onClearFilters","exporting","apiRef","useGridApiContext","filterModel","useGridSelector","gridFilterModelSelector","hasActiveFilters","GridToolbarContainer","GridToolbarColumnsButton","GridToolbarFilterButton","GridToolbarDensitySelector","Button","FilterAltOffIcon","GridToolbarExportContainer","MenuItem","DownloadIcon","TableViewIcon","CHAR_WIDTH_PX","HEADER_PADDING_PX","MIN_COL_WIDTH","estimateHeaderWidth","toGridColumns","autoFitHeaders","col","formatter","baseMinWidth","minWidth","def","selectDef","getGridSingleSelectOperators","op","DataTableCard","data","lazyData","schema","getRowClassName","striped","stripedColorEven","stripedColorOdd","getRowHeight","headerColor","pageSize","dense","initialPinnedColumns","containerRef","React","isLazy","useEffect","initialPageSize","paginationModel","setPaginationModel","useState","useMemo","source","lazyGetRows","dataSource","containerHeight","useContainerMeasurements","gridColumns","downloadCsv","downloadXlsx","isExporting","notice","setNotice","runExport","fn","formatLabel","err","lazyApiRef","toolbarSlotProps","initialState","state","rows","row","evenStripe","oddStripe","headerBg","alpha","DataGridPro","params","result","gridClasses","Snackbar","Alert","CircularProgress","multiplier","minHeight","setContainerHeight","timeoutRef","useRef","getParentGridCard","element","refElement","target","observer","entries","height","prev","useContainerRectangle","ref","initialWidth","initialHeight","remeasureKey","width","setWidth","setHeight","el","r","entry","defaultXFormatter","chartShade","baseColor","index","total","minAlpha","maxAlpha","t","a","ChartCard","type","xAxis","series","stacked","showLegend","showGrid","showTooltip","formatXAxis","formatYAxis","xAxisConfig","yAxisConfig","maxSlices","paletteOverride","backgroundColor","gridColorOverride","chartData","fmtY","axisColor","gridColor","xKey","resolveAxisProps","cfg","defaults","tickFill","tickFs","MAX_LENGTH_LABEL","truncateLabel","tooltipStyle","chartDefaults","useChartCardDefaults","palette","resolveBiPalette","monoShade","rotateBase","slotIndex","pickPaletteColor","RADIAN","renderCustomizedLabel","cx","cy","midAngle","innerRadius","outerRadius","percent","fill","radius","ncx","x","y","labelFill","seriesColors","s","useMonoShadeBars","pieData","raw","sorted","b","top","othersTotal","sum","d","ResponsiveContainer","PieChart","Pie","Cell","Tooltip","Legend","ScatterChart","CartesianGrid","XAxis","YAxis","Scatter","chartType","isHorizontal","forceStacked","ChartComp","ComposedChart","BarChart","AreaChart","LineChart","layout","effectiveStacked","resolveSeriesType","Fragment","color","seriesType","Bar","ri","Area","Line","CustomContent","name","size","strokeColor","labelFor","labelColor","TreeMapCard","nameKey","valueKey","treeData","Treemap","BASE_SCALE","BASE_LNG_SPAN","BASE_LAT_SPAN","computeMapViewport","coords","opts","autoFit","defaultZoom","userCenter","lats","c","lngs","minLat","maxLat","minLng","maxLng","center","padding","latSpan","lngSpan","zoomByLat","zoomByLng","zoom","GEO_URL_WORLD","GEO_URL_BRAZIL_STATES","GEO_URL_BRAZIL_MUNICIPALITIES","brazilGeoLayers","worldGeoLayers","GeoLayersContext","createContext","GeoLayersProvider","useGeoLayers","override","fromContext","useContext","BubbleMarkers","bubbles","maxVal","minBubbleSize","maxBubbleSize","fillColor","onHover","onLeave","k","useZoomPanContext","Marker","e","MapBubblesCard","centerProp","geoUrl","tooltip","setTooltip","layers","landFill","landHover","landStroke","overlayStroke","viewport","handleHover","useCallback","text","svg","rect","clearTooltip","noInteraction","ComposableMap","ZoomableGroup","url","idx","Geographies","geographies","geo","Geography","curvedPath","x1","y1","x2","y2","mx","my","ConnectionArcs","connections","hoveredIdx","projection","useMapContext","lines","from","to","ln","EndpointMarkers","MapConnectionsCard","showEndpoints","setHoveredIdx","allCoords","handleArcHover","ll","lat","lng","toPath","northAmerica","southAmerica","europe","africa","asia","australia","CONTINENT_PATHS","MAP_VIEWBOX","latLngToXY"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from './theme';
2
+ export * from './client';
3
+ export * from './data';
4
+ export * from './cards';
5
+ export * from './grid';
6
+ export * from './inline';
7
+ export * from './filters';
8
+ export * from './runtime';
9
+ export * from './viewer';
10
+ export * from './composer';
11
+ export { useDashboardData, useDashboardLazyData, DashboardParametersContext, DashboardParametersProvider, useDashboardParameters } from './hooks';
12
+ export type { UseDashboardDataResult, SchemaInput, LazyDataResult, LazySchemaInput, ParametersState, ParametersStateSlim } from './hooks';
package/dist/index.js ADDED
@@ -0,0 +1,236 @@
1
+ import { b as s, a as r, c as t, d as o, r as i, u as n, w as d } from "./createBiTheme-TyUv_UHM.js";
2
+ import { B as l, c as u, u as m } from "./index-D7Oo_dC-.js";
3
+ import { B as c, b as E, c as D, d as S, u as T, a as h, e as P } from "./BiClientProvider-CWJochvi.js";
4
+ import { D as f, c as I, a as B, b as R, d as g, e as A, f as L, g as b, h as x, i as G, j as M, k as v, l as O, m as F, p as N, t as V, n as y, o as k, q as H, r as U, s as w, u as z, v as Y, w as W, x as X } from "./dataUtils-CAUE5uZY.js";
5
+ import { C as j, a as q, u as J } from "./ChartCardDefaultsContext-Cl5T25H0.js";
6
+ import { B as Q, C as $, a as aa, D as ea, G as sa, b as ra, c as ta, d as oa, e as ia, f as na, M as da, g as Ca, h as la, i as ua, j as ma, T as pa, k as ca, l as Ea, m as Da, n as Sa, u as Ta, o as ha, w as Pa, p as _a } from "./index-wtSLspPh.js";
7
+ import { B as Ia, D as Ba, a as Ra, b as ga, c as Aa, d as La, G as ba, e as xa, f as Ga, t as Ma, g as va, h as Oa, u as Fa } from "./index-DGyvUtY3.js";
8
+ import { C as Va, u as ya } from "./ChartContext-C_f_6khG.js";
9
+ import { C as Ha, I as Ua, M as wa, a as za, p as Ya } from "./index-BYc79sSy.js";
10
+ import { A as Xa, D as Ka, a as ja, V as qa, b as Ja, c as Za, d as Qa, e as $a, f as ae, g as ee, h as se } from "./index-D7tVPX8d.js";
11
+ import { B as te, c as oe, n as ie, r as ne, a as de } from "./version-DnqajORq.js";
12
+ import { C as le, a as ue, b as me, c as pe, d as ce, e as Ee, f as De, g as Se, h as Te, i as he, j as Pe, D as _e, k as fe, l as Ie, m as Be, n as Re, o as ge, p as Ae, q as Le, r as be, E as xe, s as Ge, t as Me, u as ve, v as Oe, w as Fe, F as Ne, x as Ve, y as ye, G as ke, z as He, H as Ue, P as we, A as ze, B as Ye, S as We, I as Xe, J as Ke, K as je, L as qe, M as Je, T as Ze, N as Qe, O as $e, Q as as, R as es, V as ss, U as rs, W as ts, X as os, Y as is, Z as ns, _ as ds, $ as Cs, a0 as ls, a1 as us, a2 as ms, a3 as ps, a4 as cs, a5 as Es, a6 as Ds, a7 as Ss, a8 as Ts, a9 as hs, aa as Ps, ab as _s, ac as fs, ad as Is, ae as Bs, af as Rs, ag as gs, ah as As, ai as Ls, aj as bs, ak as xs, al as Gs, am as Ms, an as vs, ao as Os, ap as Fs, aq as Ns, ar as Vs, as as ys, at as ks, au as Hs, av as Us, aw as ws, ax as zs, ay as Ys, az as Ws, aA as Xs, aB as Ks, aC as js, aD as qs, aE as Js, aF as Zs, aG as Qs, aH as $s, aI as ar, aJ as er, aK as sr, aL as rr, aM as tr, aN as or } from "./index-C6JQ6770.js";
13
+ import { EnvironmentProvider as nr, InertEnvironmentProvider as dr, useEnvironment as Cr, useEnvironmentOptional as lr } from "@aintela/chat/components";
14
+ import { u as mr, a as pr } from "./index-D3OoOPjl.js";
15
+ import { D as Er, a as Dr, u as Sr } from "./DashboardParametersContext-Clv--79U.js";
16
+ export {
17
+ Xa as AutoCompleteInstructions,
18
+ Q as BASE_SCALE,
19
+ te as BI_RUNTIME_VERSION,
20
+ c as BiClientProvider,
21
+ Ia as BiErrorBoundary,
22
+ l as BiThemeBridge,
23
+ le as CARD_TYPE_CATALOG,
24
+ ue as CATEGORY_ICONS,
25
+ me as CATEGORY_PREFIXES,
26
+ pe as COLOR_MAP,
27
+ $ as CONTINENT_PATHS,
28
+ ce as CardScketch,
29
+ Ee as CardSketch,
30
+ De as CardTypeIconsProvider,
31
+ Ha as Chart,
32
+ aa as ChartCard,
33
+ j as ChartCardDefaultsContext,
34
+ q as ChartCardDefaultsProvider,
35
+ Va as ChartContextProvider,
36
+ Se as ClonedComponent,
37
+ Te as ComposerChatBinding,
38
+ he as ComposerProvider,
39
+ Pe as ComposerView,
40
+ Ba as DEFAULT_BREAKPOINTS,
41
+ Ra as DEFAULT_COLS,
42
+ ga as DEFAULT_MAX_ROWS,
43
+ _e as DEFAULT_PAD_HEIGHT_PX,
44
+ Aa as DEFAULT_ROW_HEIGHT,
45
+ La as DEFAULT_ROW_MULTIPLIER,
46
+ fe as DRAFT_SAVE_DEBOUNCE_MS,
47
+ Ie as DashboardPad,
48
+ Be as DashboardPadEditor,
49
+ Re as DashboardPadSketch,
50
+ Er as DashboardParametersContext,
51
+ Dr as DashboardParametersProvider,
52
+ ge as DashboardPin,
53
+ Ae as DashboardSidePanel,
54
+ f as DataResult,
55
+ ea as DataTableCard,
56
+ Le as DatasetParameterizationControls,
57
+ Ka as DateRangeFilterBeginSuffix,
58
+ ja as DateRangeFilterEndSuffix,
59
+ be as DrawablePrompt,
60
+ xe as ENV_HIGHLIGHT_CLASS,
61
+ Ge as EntryEmptyState,
62
+ nr as EnvironmentProvider,
63
+ Me as ExampleCardSkath,
64
+ ve as ExampleCardSketch,
65
+ Oe as ExampleCardSketh,
66
+ Fe as ExamplePad,
67
+ Ne as FILTER_TYPE_CATALOG,
68
+ Ve as FILTER_TYPE_ICONS,
69
+ ye as FilterSketch,
70
+ sa as GEO_URL_BRAZIL_MUNICIPALITIES,
71
+ ra as GEO_URL_BRAZIL_STATES,
72
+ ta as GEO_URL_WORLD,
73
+ ke as GRID_ROW_HEIGHT_PX,
74
+ He as GUIDE_SHOW_DELAY_MS,
75
+ oa as GaugeCard,
76
+ ia as GaugeGroup,
77
+ na as GeoLayersProvider,
78
+ ba as GridCard,
79
+ xa as GridCardPlaceHolder,
80
+ Ga as GridLayout,
81
+ Ue as HoverButton,
82
+ Ua as IFrame,
83
+ dr as InertEnvironmentProvider,
84
+ da as MAP_VIEWBOX,
85
+ Ca as MapBubblesCard,
86
+ la as MapConnectionsCard,
87
+ wa as Metric,
88
+ ua as MetricCard,
89
+ za as MetricGroup,
90
+ ma as MetricGroupCard,
91
+ we as PAD_INTERNAL_CLASSES,
92
+ ze as PAD_INTERNAL_IDS,
93
+ Ye as PrototypePad,
94
+ We as SPECIFIC_TYPE_ICONS,
95
+ Xe as SPECIFIC_TYPE_ICON_NAMES,
96
+ Ke as STARTER_TEMPLATES,
97
+ je as ScriptDashboardViewer,
98
+ qe as ScriptDashboardViewerVertical,
99
+ Je as SpotlightOverlay,
100
+ Ze as TEMPLATE_KIND_TO_SKETCH,
101
+ Qe as TextSketh,
102
+ $e as TitleSkath,
103
+ as as TitleSketch,
104
+ es as ToolBox,
105
+ pa as TreeMapCard,
106
+ ss as VIEWER_COMMIT_DEBOUNCE_MS,
107
+ qa as VizAutoComplete,
108
+ Ja as VizDatePicker,
109
+ Za as VizDateRangePicker,
110
+ Qa as VizSelect,
111
+ $a as VizTextField,
112
+ ae as VizTriggerButton,
113
+ rs as activityPanelVariants,
114
+ ts as activityPanelVariantsReduced,
115
+ os as ambientVariants,
116
+ is as ambientVariantsReduced,
117
+ ns as autoComplete,
118
+ s as biDarkPalette,
119
+ E as biDateReviver,
120
+ r as biLightPalette,
121
+ t as biSeriesColor,
122
+ ca as brazilGeoLayers,
123
+ ds as c,
124
+ I as capitalize,
125
+ Cs as categoryPrefix,
126
+ Ea as chartShade,
127
+ ls as clearBundleCaches,
128
+ us as composerLayoutTransition,
129
+ ms as composerLayoutTransitionReduced,
130
+ u as computeBiCssVars,
131
+ B as computeDomain,
132
+ Da as computeMapViewport,
133
+ R as computeTicks,
134
+ D as createBiClient,
135
+ o as createBiTheme,
136
+ oe as createBiUiTools,
137
+ ps as createComposerStore,
138
+ cs as createDashboardDraft,
139
+ ee as createFilterComponent,
140
+ Es as datePicker,
141
+ Ds as dateRange,
142
+ S as defaultBiRoutes,
143
+ Ss as defaultCardTypeIcons,
144
+ Ts as defaultComposerSuggestions,
145
+ hs as defaultComposerTemplates,
146
+ g as defineSchema,
147
+ Ps as environmentFromStore,
148
+ _s as evaluateDashboardBundle,
149
+ A as extractFieldDescriptor,
150
+ L as extractFieldTypeName,
151
+ b as formatBoolean,
152
+ x as formatCompact,
153
+ G as formatCurrency,
154
+ M as formatDate,
155
+ v as formatISODate,
156
+ O as formatNumber,
157
+ F as formatPercent,
158
+ fs as fromUpsertResponse,
159
+ Is as getBiModuleSurface,
160
+ se as getFriendlyName,
161
+ Bs as getHostModules,
162
+ Rs as getRegisteredSpecifiers,
163
+ gs as groupCardCatalog,
164
+ As as guideStepsRequireSketch,
165
+ Ls as hashBundleCode,
166
+ bs as instantiateDashboardBundle,
167
+ xs as isElementVisible,
168
+ Gs as isSimplePadDefinition,
169
+ Ms as joinClientSideChanges,
170
+ Sa as latLngToXY,
171
+ vs as loadDashboardBundle,
172
+ ie as normalizeMetricArgs,
173
+ Os as padConfigToDashboard,
174
+ Ya as parseKnownNumbers,
175
+ N as percentChange,
176
+ Fs as pickBestElement,
177
+ Ns as randomId,
178
+ ne as registerBiModules,
179
+ de as resetBiModuleRegistration,
180
+ i as resolveBiPalette,
181
+ Vs as resolveCardMetadata,
182
+ ys as resolveComposerSurfaces,
183
+ ks as resolveEnvironmentElements,
184
+ Hs as resolveGuideElement,
185
+ Us as sanitizeToJsVariable,
186
+ ws as seedFromTemplate,
187
+ zs as seedHostModules,
188
+ Ys as sketchCardItemComparer,
189
+ Ws as sketchFilterComparer,
190
+ Xs as targetSuggestsPadInternal,
191
+ Ks as templateKinds,
192
+ V as toBoolean,
193
+ y as toDashResult,
194
+ k as toDataResultFromList,
195
+ H as toDate,
196
+ js as toDraftPayload,
197
+ U as toNumber,
198
+ qs as toSelectorList,
199
+ w as toStr,
200
+ z as toTitleCase,
201
+ Ma as translateGridConfig,
202
+ va as translateGridConfigAutoResponsive,
203
+ Oa as translateResponsiveGridConfig,
204
+ Y as trendArrow,
205
+ W as trendColor,
206
+ X as truncateText,
207
+ Js as upsertDashboardDraft,
208
+ T as useBiClient,
209
+ h as useBiClientOptional,
210
+ m as useBiCssVars,
211
+ n as useBiPalette,
212
+ P as useBiSessionId,
213
+ Zs as useCardTypeIcons,
214
+ J as useChartCardDefaults,
215
+ ya as useChartContext,
216
+ Qs as useComposer,
217
+ $s as useComposerChatBridge,
218
+ ar as useComposerEnvironment,
219
+ er as useComposerStore,
220
+ sr as useComposerStoreOptional,
221
+ Ta as useContainerRectangle,
222
+ rr as useDashboardBundle,
223
+ mr as useDashboardData,
224
+ pr as useDashboardLazyData,
225
+ tr as useDashboardPad,
226
+ Sr as useDashboardParameters,
227
+ Cr as useEnvironment,
228
+ lr as useEnvironmentOptional,
229
+ ha as useGeoLayers,
230
+ Fa as useGridConfigTranslator,
231
+ or as validateSketch,
232
+ Pa as warnIfMuiXLicenseMissing,
233
+ d as withBiPalette,
234
+ _a as worldGeoLayers
235
+ };
236
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
@@ -0,0 +1,29 @@
1
+ import { default as React } from 'react';
2
+ export interface ChartExpandInfo {
3
+ src: string;
4
+ url: string;
5
+ name?: string;
6
+ reasoning?: string;
7
+ }
8
+ export interface ChartProps {
9
+ /** Artifact file name as the tool returned it (e.g. `chart_1.png`). */
10
+ src: string;
11
+ name?: string;
12
+ reasoning?: string;
13
+ alt?: string;
14
+ /** Just the image, no card chrome. */
15
+ naked?: boolean;
16
+ /** Artifact scope; defaults to the `BiClientProvider`'s `sessionId`. */
17
+ sessionId?: string;
18
+ dashboardId?: string;
19
+ id?: string;
20
+ /** Called from the expand affordance. When omitted the image opens in a new tab. */
21
+ onExpand?: (info: ChartExpandInfo) => void;
22
+ }
23
+ /**
24
+ * The explorer's chart card: a matplotlib PNG rendered server-side and served
25
+ * as an artifact. The URL comes from the injected `BiClient`
26
+ * (`client.artifactUrl(src, { sessionId, dashboardId })`).
27
+ */
28
+ export declare const Chart: React.FC<ChartProps>;
29
+ export default Chart;