@projectcor/maia-components 2.11.67-2 → 2.11.68-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/Chip/Chip.js +15 -50
- package/lib/components/atoms/Chip/styles.js +5 -9
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +6 -38
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +13 -21
- package/lib/components/atoms/MAIAInput/MAIAInput.js +215 -71
- package/lib/components/atoms/MAIAInput/styles.js +64 -24
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +4 -2
- package/lib/components/atoms/MAIAViz/MAIAViz.js +97 -0
- package/lib/components/atoms/MAIAViz/MAIAViz.parse.js +131 -0
- package/lib/components/atoms/MAIAViz/MAIAViz.skeleton.js +40 -0
- package/lib/components/atoms/MAIAViz/MAIAViz.styles.js +8 -0
- package/lib/components/atoms/MAIAViz/MAIAViz.types.js +49 -0
- package/lib/components/atoms/MAIAViz/MAIAVizBar.js +123 -0
- package/lib/components/atoms/MAIAViz/MAIAVizDonut.js +111 -0
- package/lib/components/atoms/MAIAViz/MAIAVizKpis.js +34 -0
- package/lib/components/atoms/MAIAViz/README.md +85 -0
- package/lib/components/atoms/MAIAViz/index.js +2 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +46 -297
- package/lib/components/molecules/ChatAIHome/styles.js +26 -63
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +159 -84
- package/lib/components/molecules/ChatAIMessages/newStyles.js +9 -19
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +47 -223
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +1 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +29 -22
- package/lib/components/molecules/ChatFooter/ChatFooter.js +18 -75
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +7 -22
- package/lib/components/molecules/ChatFooter/styles.js +2 -11
- package/lib/components/molecules/Sidebar/Sidebar.js +10 -12
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +5 -5
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +13 -7
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/maiaTaskPanelAccess.js +5 -7
- package/lib/constants/taskUrls.js +1 -3
- package/lib/context/global-context.js +1 -8
- package/lib/dev/DevContextMentionInput.js +3 -1
- package/lib/hooks/index.js +1 -2
- package/lib/hooks/useChatManager/useChatManager.js +144 -155
- package/lib/hooks/useChatMessages/useChatMessages.js +2 -33
- package/lib/hooks/useEntitySearch.js +129 -74
- package/lib/hooks/useEvent.js +1 -2
- package/lib/hooks/useFrequentlyAskedQuestions.js +10 -12
- package/lib/hooks/useFrequentlyUsedActions.js +3 -5
- package/lib/hooks/useMentionAllowedTypes.js +1 -11
- package/lib/hooks/useMentionPopover.js +2 -3
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +22 -28
- package/lib/hooks/useProjectSearch.js +28 -4
- package/lib/hooks/useProjectSummaryConfig.js +33 -88
- package/lib/hooks/useRecentClientsSearch.js +34 -4
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +16 -24
- package/lib/lang/br/index.js +10 -28
- package/lib/lang/en/index.js +10 -28
- package/lib/lang/es/index.js +10 -28
- package/lib/lang/fr/index.js +10 -28
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +3 -6
- package/lib/services/maia/Agents/getAgents.js +175 -225
- package/lib/services/maia/Chats/getChatMessages.js +3 -13
- package/lib/services/maia/Chats/getChatsByUserId.js +2 -10
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -6
- package/lib/services/maia/Orchestrator/orchestrator.js +11 -25
- package/lib/services/maia/index.js +2 -4
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/Chat.js +1 -1
- package/lib/types/Hitl.js +2 -0
- package/lib/types/agent.js +1 -1
- package/lib/utils/agentDisplayName.js +1 -9
- package/lib/utils/hitlAnalytics.js +3 -3
- package/lib/utils/maiaStreamdownRenderers.js +16 -0
- package/lib/utils/renderContextMentions.js +1 -3
- package/package.json +1 -1
- package/lib/hooks/useContextPinPopover.js +0 -235
- package/lib/hooks/useRecentContexts.js +0 -86
- package/lib/services/maia/RecentContexts/getRecentContexts.js +0 -54
- package/lib/services/maia/RecentContexts/index.js +0 -6
- package/lib/utils/entityLinkRender.js +0 -132
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styled, { keyframes } from 'styled-components';
|
|
2
|
+
import { COR_COLORS } from './MAIAViz.types';
|
|
3
|
+
var blockIn = keyframes(["from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:none;}"]);
|
|
4
|
+
export var StyledMAIAViz = styled.div.withConfig({
|
|
5
|
+
displayName: "MAIAVizstyles__StyledMAIAViz",
|
|
6
|
+
componentId: "sc-7b9qoj-0"
|
|
7
|
+
})(["display:flex;flex-direction:column;gap:20px;width:100%;font-family:'Work Sans',sans-serif;color:", ";.MAIAViz-block{animation:", " 0.35s ease-out both;}@media (prefers-reduced-motion:reduce){.MAIAViz-block{animation:none;}}.MAIAViz-header{display:flex;flex-direction:column;gap:2px;}.MAIAViz-title{&&{font-size:18px;font-weight:600;line-height:1.2;color:", ";}}.MAIAViz-subtitle{&&{display:block;font-size:13px;color:", ";}}.MAIAViz-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;}.MAIAViz-kpi-card{display:flex;flex-direction:column;gap:6px;padding:16px;background:", ";border:1px solid ", ";border-radius:12px;}.MAIAViz-kpi-label{font-size:13px;color:", ";}.MAIAViz-kpi-value{font-size:26px;font-weight:600;line-height:1.1;color:", ";}.MAIAViz-kpi-delta{font-size:12px;font-weight:500;}.MAIAViz-figure{&&{display:flex;flex-direction:column;gap:10px;margin:0;}}.MAIAViz-caption{font-size:14px;font-weight:500;color:", ";}.MAIAViz-donut{display:flex;flex-wrap:wrap;align-items:center;gap:24px;}.MAIAViz-legend{&&{display:flex;flex-direction:column;gap:8px;padding:0;margin:0;list-style:none;}li{display:flex;align-items:center;gap:8px;margin:0;font-size:13px;}}.MAIAViz-legend-dot{width:10px;height:10px;border-radius:3px;flex-shrink:0;}.MAIAViz-legend-label{color:", ";}.MAIAViz-legend-value{font-weight:600;color:", ";}.MAIAViz-error{&&{font-size:13px;color:", ";font-style:italic;}}"], COR_COLORS.text, blockIn, COR_COLORS.navy, COR_COLORS.textMuted, COR_COLORS.surfaceMuted, COR_COLORS.border, COR_COLORS.textMuted, COR_COLORS.navy, COR_COLORS.navy, COR_COLORS.text, COR_COLORS.navy, COR_COLORS.textMuted);
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHlsZWQiLCJrZXlmcmFtZXMiLCJDT1JfQ09MT1JTIiwiYmxvY2tJbiIsIlN0eWxlZE1BSUFWaXoiLCJkaXYiLCJ3aXRoQ29uZmlnIiwiZGlzcGxheU5hbWUiLCJjb21wb25lbnRJZCIsInRleHQiLCJuYXZ5IiwidGV4dE11dGVkIiwic3VyZmFjZU11dGVkIiwiYm9yZGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQVZpei9NQUlBVml6LnN0eWxlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3R5bGVkLCB7IGtleWZyYW1lcyB9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJ1xuXG5pbXBvcnQgeyBDT1JfQ09MT1JTIH0gZnJvbSAnLi9NQUlBVml6LnR5cGVzJ1xuXG5jb25zdCBibG9ja0luID0ga2V5ZnJhbWVzYFxuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxuYFxuXG5leHBvcnQgY29uc3QgU3R5bGVkTUFJQVZpeiA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMjBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiAnV29yayBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICR7Q09SX0NPTE9SUy50ZXh0fTtcblxuICAvKiBDYWRhIHdpZGdldCBhcGFyZWNlIGNvbiB1biBmYWRlIGFsIGNlcnJhciBzdSB74oCmfSBtaWVudHJhcyBzdHJlbWVhLiAqL1xuICAuTUFJQVZpei1ibG9jayB7XG4gICAgYW5pbWF0aW9uOiAke2Jsb2NrSW59IDAuMzVzIGVhc2Utb3V0IGJvdGg7XG4gIH1cblxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5NQUlBVml6LWJsb2NrIHtcbiAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICB9XG4gIH1cblxuICAuTUFJQVZpei1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDJweDtcbiAgfVxuXG4gIC5NQUlBVml6LXRpdGxlIHtcbiAgICAmJiB7XG4gICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgIGNvbG9yOiAke0NPUl9DT0xPUlMubmF2eX07XG4gICAgfVxuICB9XG5cbiAgLk1BSUFWaXotc3VidGl0bGUge1xuICAgICYmIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgY29sb3I6ICR7Q09SX0NPTE9SUy50ZXh0TXV0ZWR9O1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tLSBLUEkgY2FyZHMgLS0tICovXG4gIC5NQUlBVml6LWtwaXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpO1xuICAgIGdhcDogMTJweDtcbiAgfVxuXG4gIC5NQUlBVml6LWtwaS1jYXJkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiA2cHg7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBiYWNrZ3JvdW5kOiAke0NPUl9DT0xPUlMuc3VyZmFjZU11dGVkfTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke0NPUl9DT0xPUlMuYm9yZGVyfTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICB9XG5cbiAgLk1BSUFWaXota3BpLWxhYmVsIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6ICR7Q09SX0NPTE9SUy50ZXh0TXV0ZWR9O1xuICB9XG5cbiAgLk1BSUFWaXota3BpLXZhbHVlIHtcbiAgICBmb250LXNpemU6IDI2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgIGNvbG9yOiAke0NPUl9DT0xPUlMubmF2eX07XG4gIH1cblxuICAuTUFJQVZpei1rcGktZGVsdGEge1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICB9XG5cbiAgLyogLS0tIEZpZ3VyZXMgKGNoYXJ0cykgLS0tICovXG4gIC5NQUlBVml6LWZpZ3VyZSB7XG4gICAgJiYge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBnYXA6IDEwcHg7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgLk1BSUFWaXotY2FwdGlvbiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgY29sb3I6ICR7Q09SX0NPTE9SUy5uYXZ5fTtcbiAgfVxuXG4gIC8qIC0tLSBEb251dCAtLS0gKi9cbiAgLk1BSUFWaXotZG9udXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAyNHB4O1xuICB9XG5cbiAgLk1BSUFWaXotbGVnZW5kIHtcbiAgICAmJiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgfVxuXG4gICAgbGkge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICB9XG4gIH1cblxuICAuTUFJQVZpei1sZWdlbmQtZG90IHtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICB9XG5cbiAgLk1BSUFWaXotbGVnZW5kLWxhYmVsIHtcbiAgICBjb2xvcjogJHtDT1JfQ09MT1JTLnRleHR9O1xuICB9XG5cbiAgLk1BSUFWaXotbGVnZW5kLXZhbHVlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGNvbG9yOiAke0NPUl9DT0xPUlMubmF2eX07XG4gIH1cblxuICAuTUFJQVZpei1lcnJvciB7XG4gICAgJiYge1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgY29sb3I6ICR7Q09SX0NPTE9SUy50ZXh0TXV0ZWR9O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cbiAgfVxuYFxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLElBQUlDLFNBQVMsUUFBUSxtQkFBbUI7QUFFckQsU0FBU0MsVUFBVSxRQUFRLGlCQUFpQjtBQUU1QyxJQUFNQyxPQUFPLEdBQUdGLFNBQVMsNkVBU3hCO0FBRUQsT0FBTyxJQUFNRyxhQUFhLEdBQUdKLE1BQU0sQ0FBQ0ssR0FBRyxDQUFBQyxVQUFBO0VBQUFDLFdBQUE7RUFBQUMsV0FBQTtBQUFBLHc1Q0FNNUJOLFVBQVUsQ0FBQ08sSUFBSSxFQUlUTixPQUFPLEVBb0JURCxVQUFVLENBQUNRLElBQUksRUFRZlIsVUFBVSxDQUFDUyxTQUFTLEVBZ0JqQlQsVUFBVSxDQUFDVSxZQUFZLEVBQ2pCVixVQUFVLENBQUNXLE1BQU0sRUFNNUJYLFVBQVUsQ0FBQ1MsU0FBUyxFQU9wQlQsVUFBVSxDQUFDUSxJQUFJLEVBcUJmUixVQUFVLENBQUNRLElBQUksRUFzQ2ZSLFVBQVUsQ0FBQ08sSUFBSSxFQUtmUCxVQUFVLENBQUNRLElBQUksRUFNYlIsVUFBVSxDQUFDUyxTQUFTLENBSWxDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contrato de datos que el modelo emite dentro de un bloque ```maia-viz.
|
|
3
|
+
* El modelo NO genera HTML ni SVG: solo describe los datos. El render lo hace
|
|
4
|
+
* el cliente con estos tipos, por eso es seguro (no pasa por la sanitización
|
|
5
|
+
* de HTML de Streamdown).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** Una tarjeta de KPI (los recuadros grandes con número + variación). */
|
|
9
|
+
|
|
10
|
+
/** Un punto de una serie (barra, donut, etc.). */
|
|
11
|
+
|
|
12
|
+
/** Bloques que pueden ir dentro de un reporte compuesto. */
|
|
13
|
+
|
|
14
|
+
/** Cualquier spec válido dentro de un bloque ```maia-viz. */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Orden de colores de serie según el design system de COR.
|
|
18
|
+
* Paleta de estados de tareas de COR — los gráficos viz SOLO pueden usar estos colores.
|
|
19
|
+
*/
|
|
20
|
+
export var COR_CHART_COLORS = ['#0094CA',
|
|
21
|
+
// azul (Nueva)
|
|
22
|
+
'#FFAC2C',
|
|
23
|
+
// naranja (En proceso)
|
|
24
|
+
'#9B68BB',
|
|
25
|
+
// morado (En revisión)
|
|
26
|
+
'#ED2C50',
|
|
27
|
+
// rojo (Ajustes)
|
|
28
|
+
'#00C972',
|
|
29
|
+
// verde (Finalizada)
|
|
30
|
+
'#5A5A5A' // gris (neutral)
|
|
31
|
+
];
|
|
32
|
+
export var COR_COLORS = {
|
|
33
|
+
blue: '#0094CA',
|
|
34
|
+
orange: '#FFAC2C',
|
|
35
|
+
purple: '#9B68BB',
|
|
36
|
+
red: '#ED2C50',
|
|
37
|
+
green: '#00C972',
|
|
38
|
+
gray: '#5A5A5A',
|
|
39
|
+
positive: '#00C972',
|
|
40
|
+
negative: '#ED2C50',
|
|
41
|
+
neutral: '#5A5A5A',
|
|
42
|
+
surface: '#FFFFFF',
|
|
43
|
+
surfaceMuted: '#F7F8FA',
|
|
44
|
+
border: 'rgba(0, 0, 0, 0.08)',
|
|
45
|
+
text: '#5A5A5A',
|
|
46
|
+
textMuted: 'rgba(90, 90, 90, 0.6)',
|
|
47
|
+
navy: '#5A5A5A'
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ0hBUlRfQ09MT1JTIiwiQ09SX0NPTE9SUyIsImJsdWUiLCJvcmFuZ2UiLCJwdXJwbGUiLCJyZWQiLCJncmVlbiIsImdyYXkiLCJwb3NpdGl2ZSIsIm5lZ2F0aXZlIiwibmV1dHJhbCIsInN1cmZhY2UiLCJzdXJmYWNlTXV0ZWQiLCJib3JkZXIiLCJ0ZXh0IiwidGV4dE11dGVkIiwibmF2eSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL01BSUFWaXovTUFJQVZpei50eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyYXRvIGRlIGRhdG9zIHF1ZSBlbCBtb2RlbG8gZW1pdGUgZGVudHJvIGRlIHVuIGJsb3F1ZSBgYGBtYWlhLXZpei5cbiAqIEVsIG1vZGVsbyBOTyBnZW5lcmEgSFRNTCBuaSBTVkc6IHNvbG8gZGVzY3JpYmUgbG9zIGRhdG9zLiBFbCByZW5kZXIgbG8gaGFjZVxuICogZWwgY2xpZW50ZSBjb24gZXN0b3MgdGlwb3MsIHBvciBlc28gZXMgc2VndXJvIChubyBwYXNhIHBvciBsYSBzYW5pdGl6YWNpw7NuXG4gKiBkZSBIVE1MIGRlIFN0cmVhbWRvd24pLlxuICovXG5cbmV4cG9ydCB0eXBlIFRyZW5kID0gJ3VwJyB8ICdkb3duJyB8ICdmbGF0J1xuXG4vKiogVW5hIHRhcmpldGEgZGUgS1BJIChsb3MgcmVjdWFkcm9zIGdyYW5kZXMgY29uIG7Dum1lcm8gKyB2YXJpYWNpw7NuKS4gKi9cbmV4cG9ydCB0eXBlIEtwaUl0ZW0gPSB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICAvKiogVGV4dG8gZGUgdmFyaWFjacOzbiwgcC4gZWouIFwiKzE4LjMlIHZzIDIwMjRcIi4gT3BjaW9uYWwuICovXG4gIGRlbHRhPzogc3RyaW5nXG4gIC8qKiBEaXJlY2Npw7NuIGRlIGxhIHZhcmlhY2nDs246IHBpbnRhIGVsIGRlbHRhIGVuIHZlcmRlL3Jvam8vZ3Jpcy4gKi9cbiAgdHJlbmQ/OiBUcmVuZFxufVxuXG4vKiogVW4gcHVudG8gZGUgdW5hIHNlcmllIChiYXJyYSwgZG9udXQsIGV0Yy4pLiAqL1xuZXhwb3J0IHR5cGUgU2VyaWVzUG9pbnQgPSB7XG4gIGxhYmVsOiBzdHJpbmdcbiAgdmFsdWU6IG51bWJlclxuICAvKiogQ29sb3Igb3ZlcnJpZGUgZW4gSEVYLiBTaSBubyBzZSBwYXNhLCBzZSB1c2EgbGEgcGFsZXRhIENPUiBwb3Igw61uZGljZS4gKi9cbiAgY29sb3I/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgS3Bpc1NwZWMgPSB7XG4gIHR5cGU6ICdrcGlzJ1xuICB0aXRsZT86IHN0cmluZ1xuICBzdWJ0aXRsZT86IHN0cmluZ1xuICBpdGVtczogS3BpSXRlbVtdXG59XG5cbmV4cG9ydCB0eXBlIEJhclNwZWMgPSB7XG4gIHR5cGU6ICdiYXInXG4gIHRpdGxlPzogc3RyaW5nXG4gIC8qKiBTdWZpam8gZGUgdW5pZGFkIHBhcmEgZWwgZWplL3Rvb2x0aXAsIHAuIGVqLiBcIk0gVVNEXCIuICovXG4gIHVuaXQ/OiBzdHJpbmdcbiAgZGF0YTogU2VyaWVzUG9pbnRbXVxufVxuXG5leHBvcnQgdHlwZSBEb251dFNwZWMgPSB7XG4gIHR5cGU6ICdkb251dCdcbiAgdGl0bGU/OiBzdHJpbmdcbiAgZGF0YTogU2VyaWVzUG9pbnRbXVxufVxuXG4vKiogQmxvcXVlcyBxdWUgcHVlZGVuIGlyIGRlbnRybyBkZSB1biByZXBvcnRlIGNvbXB1ZXN0by4gKi9cbmV4cG9ydCB0eXBlIFJlcG9ydEJsb2NrID0gS3Bpc1NwZWMgfCBCYXJTcGVjIHwgRG9udXRTcGVjXG5cbmV4cG9ydCB0eXBlIFJlcG9ydFNwZWMgPSB7XG4gIHR5cGU6ICdyZXBvcnQnXG4gIHRpdGxlPzogc3RyaW5nXG4gIHN1YnRpdGxlPzogc3RyaW5nXG4gIGJsb2NrczogUmVwb3J0QmxvY2tbXVxufVxuXG4vKiogQ3VhbHF1aWVyIHNwZWMgdsOhbGlkbyBkZW50cm8gZGUgdW4gYmxvcXVlIGBgYG1haWEtdml6LiAqL1xuZXhwb3J0IHR5cGUgTWFpYVZpelNwZWMgPSBLcGlzU3BlYyB8IEJhclNwZWMgfCBEb251dFNwZWMgfCBSZXBvcnRTcGVjXG5cbi8qKlxuICogT3JkZW4gZGUgY29sb3JlcyBkZSBzZXJpZSBzZWfDum4gZWwgZGVzaWduIHN5c3RlbSBkZSBDT1IuXG4gKiBQYWxldGEgZGUgZXN0YWRvcyBkZSB0YXJlYXMgZGUgQ09SIOKAlCBsb3MgZ3LDoWZpY29zIHZpeiBTT0xPIHB1ZWRlbiB1c2FyIGVzdG9zIGNvbG9yZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBDT1JfQ0hBUlRfQ09MT1JTID0gW1xuICAnIzAwOTRDQScsIC8vIGF6dWwgKE51ZXZhKVxuICAnI0ZGQUMyQycsIC8vIG5hcmFuamEgKEVuIHByb2Nlc28pXG4gICcjOUI2OEJCJywgLy8gbW9yYWRvIChFbiByZXZpc2nDs24pXG4gICcjRUQyQzUwJywgLy8gcm9qbyAoQWp1c3RlcylcbiAgJyMwMEM5NzInLCAvLyB2ZXJkZSAoRmluYWxpemFkYSlcbiAgJyM1QTVBNUEnLCAvLyBncmlzIChuZXV0cmFsKVxuXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgQ09SX0NPTE9SUyA9IHtcbiAgYmx1ZTogJyMwMDk0Q0EnLFxuICBvcmFuZ2U6ICcjRkZBQzJDJyxcbiAgcHVycGxlOiAnIzlCNjhCQicsXG4gIHJlZDogJyNFRDJDNTAnLFxuICBncmVlbjogJyMwMEM5NzInLFxuICBncmF5OiAnIzVBNUE1QScsXG4gIHBvc2l0aXZlOiAnIzAwQzk3MicsXG4gIG5lZ2F0aXZlOiAnI0VEMkM1MCcsXG4gIG5ldXRyYWw6ICcjNUE1QTVBJyxcbiAgc3VyZmFjZTogJyNGRkZGRkYnLFxuICBzdXJmYWNlTXV0ZWQ6ICcjRjdGOEZBJyxcbiAgYm9yZGVyOiAncmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gIHRleHQ6ICcjNUE1QTVBJyxcbiAgdGV4dE11dGVkOiAncmdiYSg5MCwgOTAsIDkwLCAwLjYpJyxcbiAgbmF2eTogJyM1QTVBNUEnLFxufSBhcyBjb25zdFxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7O0FBVUE7O0FBNkJBOztBQVVBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQSxnQkFBZ0IsR0FBRyxDQUM5QixTQUFTO0FBQUU7QUFDWCxTQUFTO0FBQUU7QUFDWCxTQUFTO0FBQUU7QUFDWCxTQUFTO0FBQUU7QUFDWCxTQUFTO0FBQUU7QUFDWCxTQUFTLENBQUU7QUFBQSxDQUNIO0FBRVYsT0FBTyxJQUFNQyxVQUFVLEdBQUc7RUFDeEJDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLE1BQU0sRUFBRSxTQUFTO0VBQ2pCQyxNQUFNLEVBQUUsU0FBUztFQUNqQkMsR0FBRyxFQUFFLFNBQVM7RUFDZEMsS0FBSyxFQUFFLFNBQVM7RUFDaEJDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLFFBQVEsRUFBRSxTQUFTO0VBQ25CQyxRQUFRLEVBQUUsU0FBUztFQUNuQkMsT0FBTyxFQUFFLFNBQVM7RUFDbEJDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsTUFBTSxFQUFFLHFCQUFxQjtFQUM3QkMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsU0FBUyxFQUFFLHVCQUF1QjtFQUNsQ0MsSUFBSSxFQUFFO0FBQ1IsQ0FBVSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { COR_COLORS, COR_CHART_COLORS } from './MAIAViz.types';
|
|
3
|
+
import { normalizeSeries } from './MAIAViz.parse';
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
var WIDTH = 640;
|
|
6
|
+
var PAD_LEFT = 48;
|
|
7
|
+
var PAD_RIGHT = 16;
|
|
8
|
+
var PAD_TOP = 16;
|
|
9
|
+
var PLOT_H = 210;
|
|
10
|
+
var TICKS = 4;
|
|
11
|
+
var NICE_STEPS = [1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10];
|
|
12
|
+
var niceCeil = function niceCeil(value) {
|
|
13
|
+
var _NICE_STEPS$find;
|
|
14
|
+
if (value <= 0) return 1;
|
|
15
|
+
var pow = Math.pow(10, Math.floor(Math.log10(value)));
|
|
16
|
+
var norm = value / pow;
|
|
17
|
+
var step = (_NICE_STEPS$find = NICE_STEPS.find(function (s) {
|
|
18
|
+
return s >= norm;
|
|
19
|
+
})) !== null && _NICE_STEPS$find !== void 0 ? _NICE_STEPS$find : 10;
|
|
20
|
+
return step * pow;
|
|
21
|
+
};
|
|
22
|
+
var truncate = function truncate(label, maxChars) {
|
|
23
|
+
return label.length > maxChars ? "".concat(label.slice(0, maxChars - 1), "\u2026") : label;
|
|
24
|
+
};
|
|
25
|
+
export var MAIAVizBar = function MAIAVizBar(_ref) {
|
|
26
|
+
var _spec$title;
|
|
27
|
+
var spec = _ref.spec;
|
|
28
|
+
var data = normalizeSeries(spec.data);
|
|
29
|
+
if (!data.length) return null;
|
|
30
|
+
var max = niceCeil(Math.max.apply(Math, _toConsumableArray(data.map(function (d) {
|
|
31
|
+
return d.value;
|
|
32
|
+
}))));
|
|
33
|
+
var plotW = WIDTH - PAD_LEFT - PAD_RIGHT;
|
|
34
|
+
var slot = plotW / data.length;
|
|
35
|
+
var barW = Math.min(slot * 0.55, 64);
|
|
36
|
+
var unit = spec.unit ? " ".concat(spec.unit) : '';
|
|
37
|
+
|
|
38
|
+
// Con nombres largos o muchas barras, las etiquetas horizontales se pisan:
|
|
39
|
+
// las rotamos y reservamos más alto abajo. Con pocas y cortas (Q1, Q2…) no.
|
|
40
|
+
var maxLabelLen = Math.max.apply(Math, _toConsumableArray(data.map(function (d) {
|
|
41
|
+
return d.label.length;
|
|
42
|
+
})));
|
|
43
|
+
var rotate = data.length > 4 || maxLabelLen > 9;
|
|
44
|
+
var labelCap = rotate ? 20 : Math.max(5, Math.floor(slot / 7));
|
|
45
|
+
var padBottom = rotate ? 92 : 40;
|
|
46
|
+
var height = PAD_TOP + PLOT_H + padBottom;
|
|
47
|
+
var yFor = function yFor(value) {
|
|
48
|
+
return PAD_TOP + PLOT_H - value / max * PLOT_H;
|
|
49
|
+
};
|
|
50
|
+
var baseline = PAD_TOP + PLOT_H;
|
|
51
|
+
return /*#__PURE__*/_jsxs("figure", {
|
|
52
|
+
className: "MAIAViz-figure",
|
|
53
|
+
children: [spec.title && /*#__PURE__*/_jsx("figcaption", {
|
|
54
|
+
className: "MAIAViz-caption",
|
|
55
|
+
children: spec.title
|
|
56
|
+
}), /*#__PURE__*/_jsxs("svg", {
|
|
57
|
+
viewBox: "0 0 ".concat(WIDTH, " ").concat(height),
|
|
58
|
+
role: "img",
|
|
59
|
+
"aria-label": (_spec$title = spec.title) !== null && _spec$title !== void 0 ? _spec$title : 'Gráfico de barras',
|
|
60
|
+
preserveAspectRatio: "xMidYMid meet",
|
|
61
|
+
style: {
|
|
62
|
+
width: '100%',
|
|
63
|
+
height: 'auto',
|
|
64
|
+
display: 'block'
|
|
65
|
+
},
|
|
66
|
+
children: [Array.from({
|
|
67
|
+
length: TICKS + 1
|
|
68
|
+
}, function (_, i) {
|
|
69
|
+
var value = max / TICKS * i;
|
|
70
|
+
var y = yFor(value);
|
|
71
|
+
return /*#__PURE__*/_jsxs("g", {
|
|
72
|
+
children: [/*#__PURE__*/_jsx("line", {
|
|
73
|
+
x1: PAD_LEFT,
|
|
74
|
+
y1: y,
|
|
75
|
+
x2: WIDTH - PAD_RIGHT,
|
|
76
|
+
y2: y,
|
|
77
|
+
stroke: COR_COLORS.border,
|
|
78
|
+
strokeWidth: 1
|
|
79
|
+
}), /*#__PURE__*/_jsx("text", {
|
|
80
|
+
x: PAD_LEFT - 8,
|
|
81
|
+
y: y + 4,
|
|
82
|
+
textAnchor: "end",
|
|
83
|
+
fontSize: 11,
|
|
84
|
+
fill: COR_COLORS.textMuted,
|
|
85
|
+
children: Math.round(value)
|
|
86
|
+
})]
|
|
87
|
+
}, "tick-".concat(value));
|
|
88
|
+
}), data.map(function (d, i) {
|
|
89
|
+
var _d$color;
|
|
90
|
+
var x = PAD_LEFT + slot * i + (slot - barW) / 2;
|
|
91
|
+
var y = yFor(d.value);
|
|
92
|
+
var h = baseline - y;
|
|
93
|
+
var fill = (_d$color = d.color) !== null && _d$color !== void 0 ? _d$color : COR_CHART_COLORS[i % COR_CHART_COLORS.length];
|
|
94
|
+
var cx = x + barW / 2;
|
|
95
|
+
var ly = baseline + (rotate ? 14 : 18);
|
|
96
|
+
return /*#__PURE__*/_jsxs("g", {
|
|
97
|
+
children: [/*#__PURE__*/_jsx("rect", {
|
|
98
|
+
x: x,
|
|
99
|
+
y: y,
|
|
100
|
+
width: barW,
|
|
101
|
+
height: Math.max(h, 0),
|
|
102
|
+
rx: 4,
|
|
103
|
+
fill: fill,
|
|
104
|
+
children: /*#__PURE__*/_jsx("title", {
|
|
105
|
+
children: "".concat(d.label, ": ").concat(d.value).concat(unit)
|
|
106
|
+
})
|
|
107
|
+
}), /*#__PURE__*/_jsxs("text", {
|
|
108
|
+
x: cx,
|
|
109
|
+
y: ly,
|
|
110
|
+
textAnchor: rotate ? 'end' : 'middle',
|
|
111
|
+
transform: rotate ? "rotate(-32 ".concat(cx, " ").concat(ly, ")") : undefined,
|
|
112
|
+
fontSize: 11,
|
|
113
|
+
fill: COR_COLORS.text,
|
|
114
|
+
children: [truncate(d.label, labelCap), /*#__PURE__*/_jsx("title", {
|
|
115
|
+
children: d.label
|
|
116
|
+
})]
|
|
117
|
+
})]
|
|
118
|
+
}, d.label);
|
|
119
|
+
})]
|
|
120
|
+
})]
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ09MT1JTIiwiQ09SX0NIQVJUX0NPTE9SUyIsIm5vcm1hbGl6ZVNlcmllcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJXSURUSCIsIlBBRF9MRUZUIiwiUEFEX1JJR0hUIiwiUEFEX1RPUCIsIlBMT1RfSCIsIlRJQ0tTIiwiTklDRV9TVEVQUyIsIm5pY2VDZWlsIiwidmFsdWUiLCJfTklDRV9TVEVQUyRmaW5kIiwicG93IiwiTWF0aCIsImZsb29yIiwibG9nMTAiLCJub3JtIiwic3RlcCIsImZpbmQiLCJzIiwidHJ1bmNhdGUiLCJsYWJlbCIsIm1heENoYXJzIiwibGVuZ3RoIiwiY29uY2F0Iiwic2xpY2UiLCJNQUlBVml6QmFyIiwiX3JlZiIsIl9zcGVjJHRpdGxlIiwic3BlYyIsImRhdGEiLCJtYXgiLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hcCIsImQiLCJwbG90VyIsInNsb3QiLCJiYXJXIiwibWluIiwidW5pdCIsIm1heExhYmVsTGVuIiwicm90YXRlIiwibGFiZWxDYXAiLCJwYWRCb3R0b20iLCJoZWlnaHQiLCJ5Rm9yIiwiYmFzZWxpbmUiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsInRpdGxlIiwidmlld0JveCIsInJvbGUiLCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwic3R5bGUiLCJ3aWR0aCIsImRpc3BsYXkiLCJBcnJheSIsImZyb20iLCJfIiwiaSIsInkiLCJ4MSIsInkxIiwieDIiLCJ5MiIsInN0cm9rZSIsImJvcmRlciIsInN0cm9rZVdpZHRoIiwieCIsInRleHRBbmNob3IiLCJmb250U2l6ZSIsImZpbGwiLCJ0ZXh0TXV0ZWQiLCJyb3VuZCIsIl9kJGNvbG9yIiwiaCIsImNvbG9yIiwiY3giLCJseSIsInJ4IiwidHJhbnNmb3JtIiwidW5kZWZpbmVkIiwidGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL01BSUFWaXovTUFJQVZpekJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFyU3BlYywgQ09SX0NPTE9SUywgQ09SX0NIQVJUX0NPTE9SUyB9IGZyb20gJy4vTUFJQVZpei50eXBlcydcbmltcG9ydCB7IG5vcm1hbGl6ZVNlcmllcyB9IGZyb20gJy4vTUFJQVZpei5wYXJzZSdcblxudHlwZSBNQUlBVml6QmFyUHJvcHMgPSB7XG4gIHNwZWM6IEJhclNwZWNcbn1cblxuY29uc3QgV0lEVEggPSA2NDBcbmNvbnN0IFBBRF9MRUZUID0gNDhcbmNvbnN0IFBBRF9SSUdIVCA9IDE2XG5jb25zdCBQQURfVE9QID0gMTZcbmNvbnN0IFBMT1RfSCA9IDIxMFxuY29uc3QgVElDS1MgPSA0XG5cbmNvbnN0IE5JQ0VfU1RFUFMgPSBbMSwgMS41LCAyLCAyLjUsIDMsIDQsIDUsIDYsIDgsIDEwXVxuXG5jb25zdCBuaWNlQ2VpbCA9ICh2YWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlIDw9IDApIHJldHVybiAxXG4gIGNvbnN0IHBvdyA9IDEwICoqIE1hdGguZmxvb3IoTWF0aC5sb2cxMCh2YWx1ZSkpXG4gIGNvbnN0IG5vcm0gPSB2YWx1ZSAvIHBvd1xuICBjb25zdCBzdGVwID0gTklDRV9TVEVQUy5maW5kKHMgPT4gcyA+PSBub3JtKSA/PyAxMFxuICByZXR1cm4gc3RlcCAqIHBvd1xufVxuXG5jb25zdCB0cnVuY2F0ZSA9IChsYWJlbDogc3RyaW5nLCBtYXhDaGFyczogbnVtYmVyKTogc3RyaW5nID0+XG4gIGxhYmVsLmxlbmd0aCA+IG1heENoYXJzID8gYCR7bGFiZWwuc2xpY2UoMCwgbWF4Q2hhcnMgLSAxKX3igKZgIDogbGFiZWxcblxuZXhwb3J0IGNvbnN0IE1BSUFWaXpCYXIgPSAoeyBzcGVjIH06IE1BSUFWaXpCYXJQcm9wcykgPT4ge1xuICBjb25zdCBkYXRhID0gbm9ybWFsaXplU2VyaWVzKHNwZWMuZGF0YSlcbiAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBtYXggPSBuaWNlQ2VpbChNYXRoLm1heCguLi5kYXRhLm1hcChkID0+IGQudmFsdWUpKSlcbiAgY29uc3QgcGxvdFcgPSBXSURUSCAtIFBBRF9MRUZUIC0gUEFEX1JJR0hUXG4gIGNvbnN0IHNsb3QgPSBwbG90VyAvIGRhdGEubGVuZ3RoXG4gIGNvbnN0IGJhclcgPSBNYXRoLm1pbihzbG90ICogMC41NSwgNjQpXG4gIGNvbnN0IHVuaXQgPSBzcGVjLnVuaXQgPyBgICR7c3BlYy51bml0fWAgOiAnJ1xuXG4gIC8vIENvbiBub21icmVzIGxhcmdvcyBvIG11Y2hhcyBiYXJyYXMsIGxhcyBldGlxdWV0YXMgaG9yaXpvbnRhbGVzIHNlIHBpc2FuOlxuICAvLyBsYXMgcm90YW1vcyB5IHJlc2VydmFtb3MgbcOhcyBhbHRvIGFiYWpvLiBDb24gcG9jYXMgeSBjb3J0YXMgKFExLCBRMuKApikgbm8uXG4gIGNvbnN0IG1heExhYmVsTGVuID0gTWF0aC5tYXgoLi4uZGF0YS5tYXAoZCA9PiBkLmxhYmVsLmxlbmd0aCkpXG4gIGNvbnN0IHJvdGF0ZSA9IGRhdGEubGVuZ3RoID4gNCB8fCBtYXhMYWJlbExlbiA+IDlcbiAgY29uc3QgbGFiZWxDYXAgPSByb3RhdGUgPyAyMCA6IE1hdGgubWF4KDUsIE1hdGguZmxvb3Ioc2xvdCAvIDcpKVxuICBjb25zdCBwYWRCb3R0b20gPSByb3RhdGUgPyA5MiA6IDQwXG4gIGNvbnN0IGhlaWdodCA9IFBBRF9UT1AgKyBQTE9UX0ggKyBwYWRCb3R0b21cblxuICBjb25zdCB5Rm9yID0gKHZhbHVlOiBudW1iZXIpID0+IFBBRF9UT1AgKyBQTE9UX0ggLSAodmFsdWUgLyBtYXgpICogUExPVF9IXG4gIGNvbnN0IGJhc2VsaW5lID0gUEFEX1RPUCArIFBMT1RfSFxuXG4gIHJldHVybiAoXG4gICAgPGZpZ3VyZSBjbGFzc05hbWU9XCJNQUlBVml6LWZpZ3VyZVwiPlxuICAgICAge3NwZWMudGl0bGUgJiYgPGZpZ2NhcHRpb24gY2xhc3NOYW1lPVwiTUFJQVZpei1jYXB0aW9uXCI+e3NwZWMudGl0bGV9PC9maWdjYXB0aW9uPn1cbiAgICAgIDxzdmdcbiAgICAgICAgdmlld0JveD17YDAgMCAke1dJRFRIfSAke2hlaWdodH1gfVxuICAgICAgICByb2xlPVwiaW1nXCJcbiAgICAgICAgYXJpYS1sYWJlbD17c3BlYy50aXRsZSA/PyAnR3LDoWZpY28gZGUgYmFycmFzJ31cbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cInhNaWRZTWlkIG1lZXRcIlxuICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICdhdXRvJywgZGlzcGxheTogJ2Jsb2NrJyB9fVxuICAgICAgPlxuICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogVElDS1MgKyAxIH0sIChfLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSAobWF4IC8gVElDS1MpICogaVxuICAgICAgICAgIGNvbnN0IHkgPSB5Rm9yKHZhbHVlKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZyBrZXk9e2B0aWNrLSR7dmFsdWV9YH0+XG4gICAgICAgICAgICAgIDxsaW5lIHgxPXtQQURfTEVGVH0geTE9e3l9IHgyPXtXSURUSCAtIFBBRF9SSUdIVH0geTI9e3l9IHN0cm9rZT17Q09SX0NPTE9SUy5ib3JkZXJ9IHN0cm9rZVdpZHRoPXsxfSAvPlxuICAgICAgICAgICAgICA8dGV4dCB4PXtQQURfTEVGVCAtIDh9IHk9e3kgKyA0fSB0ZXh0QW5jaG9yPVwiZW5kXCIgZm9udFNpemU9ezExfSBmaWxsPXtDT1JfQ09MT1JTLnRleHRNdXRlZH0+XG4gICAgICAgICAgICAgICAge01hdGgucm91bmQodmFsdWUpfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICA8L2c+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cblxuICAgICAgICB7ZGF0YS5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gUEFEX0xFRlQgKyBzbG90ICogaSArIChzbG90IC0gYmFyVykgLyAyXG4gICAgICAgICAgY29uc3QgeSA9IHlGb3IoZC52YWx1ZSlcbiAgICAgICAgICBjb25zdCBoID0gYmFzZWxpbmUgLSB5XG4gICAgICAgICAgY29uc3QgZmlsbCA9IGQuY29sb3IgPz8gQ09SX0NIQVJUX0NPTE9SU1tpICUgQ09SX0NIQVJUX0NPTE9SUy5sZW5ndGhdXG4gICAgICAgICAgY29uc3QgY3ggPSB4ICsgYmFyVyAvIDJcbiAgICAgICAgICBjb25zdCBseSA9IGJhc2VsaW5lICsgKHJvdGF0ZSA/IDE0IDogMTgpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxnIGtleT17ZC5sYWJlbH0+XG4gICAgICAgICAgICAgIDxyZWN0IHg9e3h9IHk9e3l9IHdpZHRoPXtiYXJXfSBoZWlnaHQ9e01hdGgubWF4KGgsIDApfSByeD17NH0gZmlsbD17ZmlsbH0+XG4gICAgICAgICAgICAgICAgPHRpdGxlPntgJHtkLmxhYmVsfTogJHtkLnZhbHVlfSR7dW5pdH1gfTwvdGl0bGU+XG4gICAgICAgICAgICAgIDwvcmVjdD5cbiAgICAgICAgICAgICAgPHRleHRcbiAgICAgICAgICAgICAgICB4PXtjeH1cbiAgICAgICAgICAgICAgICB5PXtseX1cbiAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yPXtyb3RhdGUgPyAnZW5kJyA6ICdtaWRkbGUnfVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybT17cm90YXRlID8gYHJvdGF0ZSgtMzIgJHtjeH0gJHtseX0pYCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MTF9XG4gICAgICAgICAgICAgICAgZmlsbD17Q09SX0NPTE9SUy50ZXh0fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RydW5jYXRlKGQubGFiZWwsIGxhYmVsQ2FwKX1cbiAgICAgICAgICAgICAgICA8dGl0bGU+e2QubGFiZWx9PC90aXRsZT5cbiAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAg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
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
import { COR_COLORS, COR_CHART_COLORS } from './MAIAViz.types';
|
|
6
|
+
import { normalizeSeries } from './MAIAViz.parse';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
var SIZE = 200;
|
|
9
|
+
var STROKE = 34;
|
|
10
|
+
var R = (SIZE - STROKE) / 2;
|
|
11
|
+
var CENTER = SIZE / 2;
|
|
12
|
+
var polar = function polar(angleDeg) {
|
|
13
|
+
var rad = (angleDeg - 90) * Math.PI / 180;
|
|
14
|
+
return [CENTER + R * Math.cos(rad), CENTER + R * Math.sin(rad)];
|
|
15
|
+
};
|
|
16
|
+
var arcPath = function arcPath(startAngle, endAngle) {
|
|
17
|
+
var _polar = polar(startAngle),
|
|
18
|
+
_polar2 = _slicedToArray(_polar, 2),
|
|
19
|
+
x1 = _polar2[0],
|
|
20
|
+
y1 = _polar2[1];
|
|
21
|
+
var _polar3 = polar(endAngle),
|
|
22
|
+
_polar4 = _slicedToArray(_polar3, 2),
|
|
23
|
+
x2 = _polar4[0],
|
|
24
|
+
y2 = _polar4[1];
|
|
25
|
+
var largeArc = endAngle - startAngle > 180 ? 1 : 0;
|
|
26
|
+
return "M ".concat(x1, " ").concat(y1, " A ").concat(R, " ").concat(R, " 0 ").concat(largeArc, " 1 ").concat(x2, " ").concat(y2);
|
|
27
|
+
};
|
|
28
|
+
export var MAIAVizDonut = function MAIAVizDonut(_ref) {
|
|
29
|
+
var _spec$title;
|
|
30
|
+
var spec = _ref.spec;
|
|
31
|
+
var data = normalizeSeries(spec.data);
|
|
32
|
+
var total = data.reduce(function (sum, d) {
|
|
33
|
+
return sum + d.value;
|
|
34
|
+
}, 0);
|
|
35
|
+
if (!data.length || total <= 0) return null;
|
|
36
|
+
var cursor = 0;
|
|
37
|
+
var segments = data.map(function (d, i) {
|
|
38
|
+
var _d$color;
|
|
39
|
+
var start = cursor / total * 360;
|
|
40
|
+
cursor += d.value;
|
|
41
|
+
var end = cursor / total * 360;
|
|
42
|
+
return _objectSpread(_objectSpread({}, d), {}, {
|
|
43
|
+
color: (_d$color = d.color) !== null && _d$color !== void 0 ? _d$color : COR_CHART_COLORS[i % COR_CHART_COLORS.length],
|
|
44
|
+
pct: Math.round(d.value / total * 100),
|
|
45
|
+
// Evita el arco completo de 360° (no se dibuja); lo recortamos apenas.
|
|
46
|
+
path: arcPath(start, end >= 360 ? 359.99 : end)
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
return /*#__PURE__*/_jsxs("figure", {
|
|
50
|
+
className: "MAIAViz-figure",
|
|
51
|
+
children: [spec.title && /*#__PURE__*/_jsx("figcaption", {
|
|
52
|
+
className: "MAIAViz-caption",
|
|
53
|
+
children: spec.title
|
|
54
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
55
|
+
className: "MAIAViz-donut",
|
|
56
|
+
children: [/*#__PURE__*/_jsxs("svg", {
|
|
57
|
+
viewBox: "0 0 ".concat(SIZE, " ").concat(SIZE),
|
|
58
|
+
width: SIZE,
|
|
59
|
+
height: SIZE,
|
|
60
|
+
role: "img",
|
|
61
|
+
"aria-label": (_spec$title = spec.title) !== null && _spec$title !== void 0 ? _spec$title : 'Gráfico de dona',
|
|
62
|
+
children: [segments.map(function (s) {
|
|
63
|
+
return /*#__PURE__*/_jsx("path", {
|
|
64
|
+
d: s.path,
|
|
65
|
+
fill: "none",
|
|
66
|
+
stroke: s.color,
|
|
67
|
+
strokeWidth: STROKE,
|
|
68
|
+
strokeLinecap: "butt",
|
|
69
|
+
children: /*#__PURE__*/_jsx("title", {
|
|
70
|
+
children: "".concat(s.label, ": ").concat(s.pct, "%")
|
|
71
|
+
})
|
|
72
|
+
}, s.label);
|
|
73
|
+
}), /*#__PURE__*/_jsx("text", {
|
|
74
|
+
x: CENTER,
|
|
75
|
+
y: CENTER - 4,
|
|
76
|
+
textAnchor: "middle",
|
|
77
|
+
fontSize: 22,
|
|
78
|
+
fontWeight: 600,
|
|
79
|
+
fill: COR_COLORS.text,
|
|
80
|
+
children: total
|
|
81
|
+
}), /*#__PURE__*/_jsx("text", {
|
|
82
|
+
x: CENTER,
|
|
83
|
+
y: CENTER + 16,
|
|
84
|
+
textAnchor: "middle",
|
|
85
|
+
fontSize: 11,
|
|
86
|
+
fill: COR_COLORS.textMuted,
|
|
87
|
+
children: "Total"
|
|
88
|
+
})]
|
|
89
|
+
}), /*#__PURE__*/_jsx("ul", {
|
|
90
|
+
className: "MAIAViz-legend",
|
|
91
|
+
children: segments.map(function (s) {
|
|
92
|
+
return /*#__PURE__*/_jsxs("li", {
|
|
93
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
94
|
+
className: "MAIAViz-legend-dot",
|
|
95
|
+
style: {
|
|
96
|
+
backgroundColor: s.color
|
|
97
|
+
}
|
|
98
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
99
|
+
className: "MAIAViz-legend-label",
|
|
100
|
+
children: s.label
|
|
101
|
+
}), /*#__PURE__*/_jsxs("span", {
|
|
102
|
+
className: "MAIAViz-legend-value",
|
|
103
|
+
children: [s.pct, "%"]
|
|
104
|
+
})]
|
|
105
|
+
}, s.label);
|
|
106
|
+
})
|
|
107
|
+
})]
|
|
108
|
+
})]
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ09MT1JTIiwiQ09SX0NIQVJUX0NPTE9SUyIsIm5vcm1hbGl6ZVNlcmllcyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTSVpFIiwiU1RST0tFIiwiUiIsIkNFTlRFUiIsInBvbGFyIiwiYW5nbGVEZWciLCJyYWQiLCJNYXRoIiwiUEkiLCJjb3MiLCJzaW4iLCJhcmNQYXRoIiwic3RhcnRBbmdsZSIsImVuZEFuZ2xlIiwiX3BvbGFyIiwiX3BvbGFyMiIsIl9zbGljZWRUb0FycmF5IiwieDEiLCJ5MSIsIl9wb2xhcjMiLCJfcG9sYXI0IiwieDIiLCJ5MiIsImxhcmdlQXJjIiwiY29uY2F0IiwiTUFJQVZpekRvbnV0IiwiX3JlZiIsIl9zcGVjJHRpdGxlIiwic3BlYyIsImRhdGEiLCJ0b3RhbCIsInJlZHVjZSIsInN1bSIsImQiLCJ2YWx1ZSIsImxlbmd0aCIsImN1cnNvciIsInNlZ21lbnRzIiwibWFwIiwiaSIsIl9kJGNvbG9yIiwic3RhcnQiLCJlbmQiLCJfb2JqZWN0U3ByZWFkIiwiY29sb3IiLCJwY3QiLCJyb3VuZCIsInBhdGgiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsInRpdGxlIiwidmlld0JveCIsIndpZHRoIiwiaGVpZ2h0Iiwicm9sZSIsInMiLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwibGFiZWwiLCJ4IiwieSIsInRleHRBbmNob3IiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJ0ZXh0IiwidGV4dE11dGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBVml6L01BSUFWaXpEb251dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9udXRTcGVjLCBDT1JfQ09MT1JTLCBDT1JfQ0hBUlRfQ09MT1JTIH0gZnJvbSAnLi9NQUlBVml6LnR5cGVzJ1xuaW1wb3J0IHsgbm9ybWFsaXplU2VyaWVzIH0gZnJvbSAnLi9NQUlBVml6LnBhcnNlJ1xuXG50eXBlIE1BSUFWaXpEb251dFByb3BzID0ge1xuICBzcGVjOiBEb251dFNwZWNcbn1cblxuY29uc3QgU0laRSA9IDIwMFxuY29uc3QgU1RST0tFID0gMzRcbmNvbnN0IFIgPSAoU0laRSAtIFNUUk9LRSkgLyAyXG5jb25zdCBDRU5URVIgPSBTSVpFIC8gMlxuXG5jb25zdCBwb2xhciA9IChhbmdsZURlZzogbnVtYmVyKTogW251bWJlciwgbnVtYmVyXSA9PiB7XG4gIGNvbnN0IHJhZCA9ICgoYW5nbGVEZWcgLSA5MCkgKiBNYXRoLlBJKSAvIDE4MFxuICByZXR1cm4gW0NFTlRFUiArIFIgKiBNYXRoLmNvcyhyYWQpLCBDRU5URVIgKyBSICogTWF0aC5zaW4ocmFkKV1cbn1cblxuY29uc3QgYXJjUGF0aCA9IChzdGFydEFuZ2xlOiBudW1iZXIsIGVuZEFuZ2xlOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBbeDEsIHkxXSA9IHBvbGFyKHN0YXJ0QW5nbGUpXG4gIGNvbnN0IFt4MiwgeTJdID0gcG9sYXIoZW5kQW5nbGUpXG4gIGNvbnN0IGxhcmdlQXJjID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlID4gMTgwID8gMSA6IDBcbiAgcmV0dXJuIGBNICR7eDF9ICR7eTF9IEEgJHtSfSAke1J9IDAgJHtsYXJnZUFyY30gMSAke3gyfSAke3kyfWBcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFWaXpEb251dCA9ICh7IHNwZWMgfTogTUFJQVZpekRvbnV0UHJvcHMpID0+IHtcbiAgY29uc3QgZGF0YSA9IG5vcm1hbGl6ZVNlcmllcyhzcGVjLmRhdGEpXG4gIGNvbnN0IHRvdGFsID0gZGF0YS5yZWR1Y2UoKHN1bSwgZCkgPT4gc3VtICsgZC52YWx1ZSwgMClcbiAgaWYgKCFkYXRhLmxlbmd0aCB8fCB0b3RhbCA8PSAwKSByZXR1cm4gbnVsbFxuXG4gIGxldCBjdXJzb3IgPSAwXG4gIGNvbnN0IHNlZ21lbnRzID0gZGF0YS5tYXAoKGQsIGkpID0+IHtcbiAgICBjb25zdCBzdGFydCA9IChjdXJzb3IgLyB0b3RhbCkgKiAzNjBcbiAgICBjdXJzb3IgKz0gZC52YWx1ZVxuICAgIGNvbnN0IGVuZCA9IChjdXJzb3IgLyB0b3RhbCkgKiAzNjBcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZCxcbiAgICAgIGNvbG9yOiBkLmNvbG9yID8/IENPUl9DSEFSVF9DT0xPUlNbaSAlIENPUl9DSEFSVF9DT0xPUlMubGVuZ3RoXSxcbiAgICAgIHBjdDogTWF0aC5yb3VuZCgoZC52YWx1ZSAvIHRvdGFsKSAqIDEwMCksXG4gICAgICAvLyBFdml0YSBlbCBhcmNvIGNvbXBsZXRvIGRlIDM2MMKwIChubyBzZSBkaWJ1amEpOyBsbyByZWNvcnRhbW9zIGFwZW5hcy5cbiAgICAgIHBhdGg6IGFyY1BhdGgoc3RhcnQsIGVuZCA+PSAzNjAgPyAzNTkuOTkgOiBlbmQpLFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxmaWd1cmUgY2xhc3NOYW1lPVwiTUFJQVZpei1maWd1cmVcIj5cbiAgICAgIHtzcGVjLnRpdGxlICYmIDxmaWdjYXB0aW9uIGNsYXNzTmFtZT1cIk1BSUFWaXotY2FwdGlvblwiPntzcGVjLnRpdGxlfTwvZmlnY2FwdGlvbj59XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIk1BSUFWaXotZG9udXRcIj5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHZpZXdCb3g9e2AwIDAgJHtTSVpFfSAke1NJWkV9YH1cbiAgICAgICAgICB3aWR0aD17U0laRX1cbiAgICAgICAgICBoZWlnaHQ9e1NJWkV9XG4gICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD17c3BlYy50aXRsZSA/PyAnR3LDoWZpY28gZGUgZG9uYSd9XG4gICAgICAgID5cbiAgICAgICAgICB7c2VnbWVudHMubWFwKHMgPT4gKFxuICAgICAgICAgICAgPHBhdGgga2V5PXtzLmxhYmVsfSBkPXtzLnBhdGh9IGZpbGw9XCJub25lXCIgc3Ryb2tlPXtzLmNvbG9yfSBzdHJva2VXaWR0aD17U1RST0tFfSBzdHJva2VMaW5lY2FwPVwiYnV0dFwiPlxuICAgICAgICAgICAgICA8dGl0bGU+e2Ake3MubGFiZWx9OiAke3MucGN0fSVgfTwvdGl0bGU+XG4gICAgICAgICAgICA8L3BhdGg+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPHRleHQgeD17Q0VOVEVSfSB5PXtDRU5URVIgLSA0fSB0ZXh0QW5jaG9yPVwibWlkZGxlXCIgZm9udFNpemU9ezIyfSBmb250V2VpZ2h0PXs2MDB9IGZpbGw9e0NPUl9DT0xPUlMudGV4dH0+XG4gICAgICAgICAgICB7dG90YWx9XG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHg9e0NFTlRFUn0geT17Q0VOVEVSICsgMTZ9IHRleHRBbmNob3I9XCJtaWRkbGVcIiBmb250U2l6ZT17MTF9IGZpbGw9e0NPUl9DT0xPUlMudGV4dE11dGVkfT5cbiAgICAgICAgICAgIFRvdGFsXG4gICAgICAgICAgPC90ZXh0PlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cIk1BSUFWaXotbGVnZW5kXCI+XG4gICAgICAgICAge3NlZ21lbnRzLm1hcChzID0+IChcbiAgICAgICAgICAgIDxsaSBrZXk9e3MubGFiZWx9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJNQUlBVml6LWxlZ2VuZC1kb3RcIiBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IHMuY29sb3IgfX0gLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiTUFJQVZpei1sZWdlbmQtbGFiZWxcIj57cy5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIk1BSUFWaXotbGVnZW5kLXZhbHVlXCI+e3MucGN0fSU8L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9maWd1cmU+XG4gIClcbn1cbiJdLCJtYXBw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QUFBLGVBQ25HcEQsSUFBQTtjQUFBb0QsUUFBQSxLQUFBekIsTUFBQSxDQUFXK0IsQ0FBQyxDQUFDSyxLQUFLLFFBQUFwQyxNQUFBLENBQUsrQixDQUFDLENBQUNWLEdBQUc7WUFBQSxDQUFXO1VBQUMsR0FEL0JVLENBQUMsQ0FBQ0ssS0FFUCxDQUFDO1FBQUEsQ0FDUixDQUFDLGVBQ0YvRCxJQUFBO1VBQU1nRSxDQUFDLEVBQUUxRCxNQUFPO1VBQUMyRCxDQUFDLEVBQUUzRCxNQUFNLEdBQUcsQ0FBRTtVQUFDNEQsVUFBVSxFQUFDLFFBQVE7VUFBQ0MsUUFBUSxFQUFFLEVBQUc7VUFBQ0MsVUFBVSxFQUFFLEdBQUk7VUFBQ1QsSUFBSSxFQUFFL0QsVUFBVSxDQUFDeUUsSUFBSztVQUFBakIsUUFBQSxFQUN0R25CO1FBQUssQ0FDRixDQUFDLGVBQ1BqQyxJQUFBO1VBQU1nRSxDQUFDLEVBQUUxRCxNQUFPO1VBQUMyRCxDQUFDLEVBQUUzRCxNQUFNLEdBQUcsRUFBRztVQUFDNEQsVUFBVSxFQUFDLFFBQVE7VUFBQ0MsUUFBUSxFQUFFLEVBQUc7VUFBQ1IsSUFBSSxFQUFFL0QsVUFBVSxDQUFDMEUsU0FBVTtVQUFBbEIsUUFBQSxFQUFDO1FBRS9GLENBQU0sQ0FBQztNQUFBLENBQ0osQ0FBQyxlQUNOcEQsSUFBQTtRQUFJbUQsU0FBUyxFQUFDLGdCQUFnQjtRQUFBQyxRQUFBLEVBQzNCWixRQUFRLENBQUNDLEdBQUcsQ0FBQyxVQUFBaUIsQ0FBQztVQUFBLG9CQUNieEQsS0FBQTtZQUFBa0QsUUFBQSxnQkFDRXBELElBQUE7Y0FBTW1ELFNBQVMsRUFBQyxvQkFBb0I7Y0FBQ29CLEtBQUssRUFBRTtnQkFBRUMsZUFBZSxFQUFFZCxDQUFDLENBQUNYO2NBQU07WUFBRSxDQUFFLENBQUMsZUFDNUUvQyxJQUFBO2NBQU1tRCxTQUFTLEVBQUMsc0JBQXNCO2NBQUFDLFFBQUEsRUFBRU0sQ0FBQyxDQUFDSztZQUFLLENBQU8sQ0FBQyxlQUN2RDdELEtBQUE7Y0FBTWlELFNBQVMsRUFBQyxzQkFBc0I7Y0FBQUMsUUFBQSxHQUFFTSxDQUFDLENBQUNWLEdBQUcsRUFBQyxHQUFDO1lBQUEsQ0FBTSxDQUFDO1VBQUEsR0FIL0NVLENBQUMsQ0FBQ0ssS0FJUCxDQUFDO1FBQUEsQ0FDTjtNQUFDLENBQ0EsQ0FBQztJQUFBLENBQ0YsQ0FBQztFQUFBLENBQ0EsQ0FBQztBQUViLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { COR_COLORS } from './MAIAViz.types';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
var deltaColor = function deltaColor(trend) {
|
|
4
|
+
if (trend === 'up') return COR_COLORS.positive;
|
|
5
|
+
if (trend === 'down') return COR_COLORS.negative;
|
|
6
|
+
return COR_COLORS.neutral;
|
|
7
|
+
};
|
|
8
|
+
export var MAIAVizKpis = function MAIAVizKpis(_ref) {
|
|
9
|
+
var spec = _ref.spec;
|
|
10
|
+
var items = Array.isArray(spec.items) ? spec.items : [];
|
|
11
|
+
if (!items.length) return null;
|
|
12
|
+
return /*#__PURE__*/_jsx("div", {
|
|
13
|
+
className: "MAIAViz-kpis",
|
|
14
|
+
children: items.map(function (item) {
|
|
15
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
16
|
+
className: "MAIAViz-kpi-card",
|
|
17
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
18
|
+
className: "MAIAViz-kpi-label",
|
|
19
|
+
children: item.label
|
|
20
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
21
|
+
className: "MAIAViz-kpi-value",
|
|
22
|
+
children: item.value
|
|
23
|
+
}), item.delta && /*#__PURE__*/_jsx("span", {
|
|
24
|
+
className: "MAIAViz-kpi-delta",
|
|
25
|
+
style: {
|
|
26
|
+
color: deltaColor(item.trend)
|
|
27
|
+
},
|
|
28
|
+
children: item.delta
|
|
29
|
+
})]
|
|
30
|
+
}, item.label);
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfQ09MT1JTIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsImRlbHRhQ29sb3IiLCJ0cmVuZCIsInBvc2l0aXZlIiwibmVnYXRpdmUiLCJuZXV0cmFsIiwiTUFJQVZpektwaXMiLCJfcmVmIiwic3BlYyIsIml0ZW1zIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJtYXAiLCJpdGVtIiwibGFiZWwiLCJ2YWx1ZSIsImRlbHRhIiwic3R5bGUiLCJjb2xvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2F0b21zL01BSUFWaXovTUFJQVZpektwaXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtwaXNTcGVjLCBDT1JfQ09MT1JTLCBUcmVuZCB9IGZyb20gJy4vTUFJQVZpei50eXBlcydcblxudHlwZSBNQUlBVml6S3Bpc1Byb3BzID0ge1xuICBzcGVjOiBLcGlzU3BlY1xufVxuXG5jb25zdCBkZWx0YUNvbG9yID0gKHRyZW5kPzogVHJlbmQpOiBzdHJpbmcgPT4ge1xuICBpZiAodHJlbmQgPT09ICd1cCcpIHJldHVybiBDT1JfQ09MT1JTLnBvc2l0aXZlXG4gIGlmICh0cmVuZCA9PT0gJ2Rvd24nKSByZXR1cm4gQ09SX0NPTE9SUy5uZWdhdGl2ZVxuICByZXR1cm4gQ09SX0NPTE9SUy5uZXV0cmFsXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBVml6S3BpcyA9ICh7IHNwZWMgfTogTUFJQVZpektwaXNQcm9wcykgPT4ge1xuICBjb25zdCBpdGVtcyA9IEFycmF5LmlzQXJyYXkoc3BlYy5pdGVtcykgPyBzcGVjLml0ZW1zIDogW11cbiAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIk1BSUFWaXota3Bpc1wiPlxuICAgICAge2l0ZW1zLm1hcChpdGVtID0+IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJNQUlBVml6LWtwaS1jYXJkXCIga2V5PXtpdGVtLmxhYmVsfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJNQUlBVml6LWtwaS1sYWJlbFwiPntpdGVtLmxhYmVsfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJNQUlBVml6LWtwaS12YWx1ZVwiPntpdGVtLnZhbHVlfTwvc3Bhbj5cbiAgICAgICAgICB7aXRlbS5kZWx0YSAmJiAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJNQUlBVml6LWtwaS1kZWx0YVwiIHN0eWxlPXt7IGNvbG9yOiBkZWx0YUNvbG9yKGl0ZW0udHJlbmQpIH19PlxuICAgICAgICAgICAgICB7aXRlbS5kZWx0YX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQW1CQSxVQUFVLFFBQWUsaUJBQWlCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQU03RCxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBVUEsQ0FBSUMsS0FBYSxFQUFhO0VBQzVDLElBQUlBLEtBQUssS0FBSyxJQUFJLEVBQUUsT0FBT04sVUFBVSxDQUFDTyxRQUFRO0VBQzlDLElBQUlELEtBQUssS0FBSyxNQUFNLEVBQUUsT0FBT04sVUFBVSxDQUFDUSxRQUFRO0VBQ2hELE9BQU9SLFVBQVUsQ0FBQ1MsT0FBTztBQUMzQixDQUFDO0FBRUQsT0FBTyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQUMsSUFBQSxFQUFtQztFQUFBLElBQTdCQyxJQUFJLEdBQUFELElBQUEsQ0FBSkMsSUFBSTtFQUNoQyxJQUFNQyxLQUFLLEdBQUdDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHRCxJQUFJLENBQUNDLEtBQUssR0FBRyxFQUFFO0VBQ3pELElBQUksQ0FBQ0EsS0FBSyxDQUFDRyxNQUFNLEVBQUUsT0FBTyxJQUFJO0VBRTlCLG9CQUNFZCxJQUFBO0lBQUtlLFNBQVMsRUFBQyxjQUFjO0lBQUFDLFFBQUEsRUFDMUJMLEtBQUssQ0FBQ00sR0FBRyxDQUFDLFVBQUFDLElBQUk7TUFBQSxvQkFDYmhCLEtBQUE7UUFBS2EsU0FBUyxFQUFDLGtCQUFrQjtRQUFBQyxRQUFBLGdCQUMvQmhCLElBQUE7VUFBTWUsU0FBUyxFQUFDLG1CQUFtQjtVQUFBQyxRQUFBLEVBQUVFLElBQUksQ0FBQ0M7UUFBSyxDQUFPLENBQUMsZUFDdkRuQixJQUFBO1VBQU1lLFNBQVMsRUFBQyxtQkFBbUI7VUFBQUMsUUFBQSxFQUFFRSxJQUFJLENBQUNFO1FBQUssQ0FBTyxDQUFDLEVBQ3RERixJQUFJLENBQUNHLEtBQUssaUJBQ1RyQixJQUFBO1VBQU1lLFNBQVMsRUFBQyxtQkFBbUI7VUFBQ08sS0FBSyxFQUFFO1lBQUVDLEtBQUssRUFBRXBCLFVBQVUsQ0FBQ2UsSUFBSSxDQUFDZCxLQUFLO1VBQUUsQ0FBRTtVQUFBWSxRQUFBLEVBQzFFRSxJQUFJLENBQUNHO1FBQUssQ0FDUCxDQUNQO01BQUEsR0FQb0NILElBQUksQ0FBQ0MsS0FRdkMsQ0FBQztJQUFBLENBQ1A7RUFBQyxDQUNDLENBQUM7QUFFVixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# MAIAViz — PoC de visualizaciones inline en el chat
|
|
2
|
+
|
|
3
|
+
Renderiza KPIs, gráficos de barras y donas dentro de los mensajes de MAIA, igual
|
|
4
|
+
que Claude renderiza cuadros y gráficos. **El modelo no genera HTML ni SVG**: solo
|
|
5
|
+
emite datos en JSON dentro de un bloque de código ` ```maia-viz `. El render lo hace
|
|
6
|
+
el cliente (estos componentes), por lo que es seguro y no pasa por la sanitización
|
|
7
|
+
de HTML de Streamdown.
|
|
8
|
+
|
|
9
|
+
## Cómo funciona
|
|
10
|
+
|
|
11
|
+
Streamdown expone `plugins.renderers` (el mismo mecanismo con el que integra Mermaid).
|
|
12
|
+
Registramos un `CustomRenderer` para el lenguaje `maia-viz`:
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
// maiaStreamdownRenderers.tsx
|
|
16
|
+
export const MAIA_STREAMDOWN_RENDERERS = [{ language: 'maia-viz', component: MAIAViz }]
|
|
17
|
+
|
|
18
|
+
// MAIAMessage.tsx
|
|
19
|
+
<Streamdown plugins={{ code, renderers: MAIA_STREAMDOWN_RENDERERS }}>{message}</Streamdown>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Cuando el stream contiene un fence ` ```maia-viz `, Streamdown llama a `MAIAViz`
|
|
23
|
+
con `{ code, isIncomplete, language, meta }`. Mientras `isIncomplete` es `true`
|
|
24
|
+
(JSON parcial durante el streaming) mostramos un skeleton; al cerrarse el fence,
|
|
25
|
+
parseamos el JSON y dibujamos la visualización.
|
|
26
|
+
|
|
27
|
+
## Contrato de datos
|
|
28
|
+
|
|
29
|
+
Un bloque `maia-viz` contiene **un** objeto JSON. Tipos soportados:
|
|
30
|
+
|
|
31
|
+
### `kpis` — tarjetas de indicadores
|
|
32
|
+
```maia-viz
|
|
33
|
+
{ "type": "kpis", "items": [
|
|
34
|
+
{ "label": "Ingresos", "value": "$184.6M", "delta": "+18.3% vs 2024", "trend": "up" },
|
|
35
|
+
{ "label": "Margen EBITDA", "value": "21.4%", "delta": "+2.1 pts", "trend": "up" }
|
|
36
|
+
] }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### `bar` — gráfico de barras
|
|
40
|
+
```maia-viz
|
|
41
|
+
{ "type": "bar", "title": "Ingresos por trimestre", "unit": "M USD", "data": [
|
|
42
|
+
{ "label": "Q1", "value": 40 }, { "label": "Q2", "value": 44 },
|
|
43
|
+
{ "label": "Q3", "value": 47 }, { "label": "Q4", "value": 52 }
|
|
44
|
+
] }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### `donut` — distribución porcentual
|
|
48
|
+
```maia-viz
|
|
49
|
+
{ "type": "donut", "title": "Mix de ingresos", "data": [
|
|
50
|
+
{ "label": "Last-mile", "value": 52 }, { "label": "Freight", "value": 28 },
|
|
51
|
+
{ "label": "Warehousing", "value": 13 }, { "label": "Otros", "value": 7 }
|
|
52
|
+
] }
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### `report` — reporte compuesto (varios bloques)
|
|
56
|
+
```maia-viz
|
|
57
|
+
{ "type": "report", "title": "Nordvik Logistics — KPIs anuales",
|
|
58
|
+
"subtitle": "Año fiscal 2025 · Logística",
|
|
59
|
+
"blocks": [
|
|
60
|
+
{ "type": "kpis", "items": [ ... ] },
|
|
61
|
+
{ "type": "bar", "title": "Ingresos por trimestre", "unit": "M USD", "data": [ ... ] },
|
|
62
|
+
{ "type": "donut", "title": "Mix de ingresos", "data": [ ... ] }
|
|
63
|
+
] }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Campos: `delta` y `trend` (`up`/`down`/`flat`) son opcionales; `trend` colorea el
|
|
67
|
+
delta (verde/rojo/gris). `color` (HEX) es opcional por punto; si no, se usa la
|
|
68
|
+
paleta de COR por índice (navy → blue → teal → green → purple → ...).
|
|
69
|
+
|
|
70
|
+
## Snippet para el system prompt del agente
|
|
71
|
+
|
|
72
|
+
> Cuando presentes métricas, KPIs, distribuciones o series numéricas, podés
|
|
73
|
+
> renderizar una visualización emitiendo un bloque de código con el lenguaje
|
|
74
|
+
> `maia-viz` que contenga **un único objeto JSON válido** con el contrato
|
|
75
|
+
> documentado (tipos: `kpis`, `bar`, `donut`, `report`). No incluyas texto
|
|
76
|
+
> dentro del bloque, solo JSON. Usá una visualización solo cuando aporte valor
|
|
77
|
+
> sobre el texto; el resto del mensaje sigue siendo Markdown normal. Si no estás
|
|
78
|
+
> seguro de los datos, no inventes un gráfico.
|
|
79
|
+
|
|
80
|
+
## Extensión
|
|
81
|
+
|
|
82
|
+
Agregar un tipo nuevo (p. ej. `line`): crear `MAIAVizLine.tsx`, sumarlo al
|
|
83
|
+
discriminador en `MAIAViz.tsx` (`renderBlock`) y al contrato en `MAIAViz.types.ts`.
|
|
84
|
+
Para charts más complejos/interactivos se puede reemplazar el SVG por Recharts sin
|
|
85
|
+
cambiar el contrato ni el cableado de Streamdown.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { MAIAViz } from './MAIAViz';
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNQUlBVml6Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQVZpei9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBNQUlBVml6IH0gZnJvbSAnLi9NQUlBVml6J1xuZXhwb3J0IHR5cGUge1xuICBNYWlhVml6U3BlYyxcbiAgS3Bpc1NwZWMsXG4gIEJhclNwZWMsXG4gIERvbnV0U3BlYyxcbiAgUmVwb3J0U3BlYyxcbiAgUmVwb3J0QmxvY2ssXG4gIEtwaUl0ZW0sXG4gIFNlcmllc1BvaW50LFxufSBmcm9tICcuL01BSUFWaXoudHlwZXMnXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sUUFBUSxXQUFXIiwiaWdub3JlTGlzdCI6W119
|