mviz 1.4.2

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 (194) hide show
  1. package/README.md +174 -0
  2. package/dist/charts/area.d.ts +14 -0
  3. package/dist/charts/area.d.ts.map +1 -0
  4. package/dist/charts/area.js +137 -0
  5. package/dist/charts/area.js.map +1 -0
  6. package/dist/charts/bar.d.ts +14 -0
  7. package/dist/charts/bar.d.ts.map +1 -0
  8. package/dist/charts/bar.js +191 -0
  9. package/dist/charts/bar.js.map +1 -0
  10. package/dist/charts/boxplot.d.ts +14 -0
  11. package/dist/charts/boxplot.d.ts.map +1 -0
  12. package/dist/charts/boxplot.js +79 -0
  13. package/dist/charts/boxplot.js.map +1 -0
  14. package/dist/charts/bubble.d.ts +14 -0
  15. package/dist/charts/bubble.d.ts.map +1 -0
  16. package/dist/charts/bubble.js +127 -0
  17. package/dist/charts/bubble.js.map +1 -0
  18. package/dist/charts/calendar.d.ts +14 -0
  19. package/dist/charts/calendar.d.ts.map +1 -0
  20. package/dist/charts/calendar.js +94 -0
  21. package/dist/charts/calendar.js.map +1 -0
  22. package/dist/charts/combo.d.ts +14 -0
  23. package/dist/charts/combo.d.ts.map +1 -0
  24. package/dist/charts/combo.js +163 -0
  25. package/dist/charts/combo.js.map +1 -0
  26. package/dist/charts/dumbbell.d.ts +17 -0
  27. package/dist/charts/dumbbell.d.ts.map +1 -0
  28. package/dist/charts/dumbbell.js +368 -0
  29. package/dist/charts/dumbbell.js.map +1 -0
  30. package/dist/charts/funnel.d.ts +14 -0
  31. package/dist/charts/funnel.d.ts.map +1 -0
  32. package/dist/charts/funnel.js +145 -0
  33. package/dist/charts/funnel.js.map +1 -0
  34. package/dist/charts/heatmap.d.ts +14 -0
  35. package/dist/charts/heatmap.d.ts.map +1 -0
  36. package/dist/charts/heatmap.js +202 -0
  37. package/dist/charts/heatmap.js.map +1 -0
  38. package/dist/charts/histogram.d.ts +14 -0
  39. package/dist/charts/histogram.d.ts.map +1 -0
  40. package/dist/charts/histogram.js +103 -0
  41. package/dist/charts/histogram.js.map +1 -0
  42. package/dist/charts/index.d.ts +40 -0
  43. package/dist/charts/index.d.ts.map +1 -0
  44. package/dist/charts/index.js +42 -0
  45. package/dist/charts/index.js.map +1 -0
  46. package/dist/charts/line.d.ts +14 -0
  47. package/dist/charts/line.d.ts.map +1 -0
  48. package/dist/charts/line.js +134 -0
  49. package/dist/charts/line.js.map +1 -0
  50. package/dist/charts/pie.d.ts +14 -0
  51. package/dist/charts/pie.d.ts.map +1 -0
  52. package/dist/charts/pie.js +75 -0
  53. package/dist/charts/pie.js.map +1 -0
  54. package/dist/charts/registry.d.ts +36 -0
  55. package/dist/charts/registry.d.ts.map +1 -0
  56. package/dist/charts/registry.js +55 -0
  57. package/dist/charts/registry.js.map +1 -0
  58. package/dist/charts/sankey.d.ts +14 -0
  59. package/dist/charts/sankey.d.ts.map +1 -0
  60. package/dist/charts/sankey.js +74 -0
  61. package/dist/charts/sankey.js.map +1 -0
  62. package/dist/charts/scatter.d.ts +14 -0
  63. package/dist/charts/scatter.d.ts.map +1 -0
  64. package/dist/charts/scatter.js +130 -0
  65. package/dist/charts/scatter.js.map +1 -0
  66. package/dist/charts/sparkline.d.ts +19 -0
  67. package/dist/charts/sparkline.d.ts.map +1 -0
  68. package/dist/charts/sparkline.js +154 -0
  69. package/dist/charts/sparkline.js.map +1 -0
  70. package/dist/charts/waterfall.d.ts +14 -0
  71. package/dist/charts/waterfall.d.ts.map +1 -0
  72. package/dist/charts/waterfall.js +232 -0
  73. package/dist/charts/waterfall.js.map +1 -0
  74. package/dist/charts/xmr.d.ts +14 -0
  75. package/dist/charts/xmr.d.ts.map +1 -0
  76. package/dist/charts/xmr.js +456 -0
  77. package/dist/charts/xmr.js.map +1 -0
  78. package/dist/cli.d.ts +12 -0
  79. package/dist/cli.d.ts.map +1 -0
  80. package/dist/cli.js +120 -0
  81. package/dist/cli.js.map +1 -0
  82. package/dist/components/alert.d.ts +10 -0
  83. package/dist/components/alert.d.ts.map +1 -0
  84. package/dist/components/alert.js +65 -0
  85. package/dist/components/alert.js.map +1 -0
  86. package/dist/components/big_value.d.ts +10 -0
  87. package/dist/components/big_value.d.ts.map +1 -0
  88. package/dist/components/big_value.js +78 -0
  89. package/dist/components/big_value.js.map +1 -0
  90. package/dist/components/delta.d.ts +10 -0
  91. package/dist/components/delta.d.ts.map +1 -0
  92. package/dist/components/delta.js +83 -0
  93. package/dist/components/delta.js.map +1 -0
  94. package/dist/components/empty_space.d.ts +10 -0
  95. package/dist/components/empty_space.d.ts.map +1 -0
  96. package/dist/components/empty_space.js +29 -0
  97. package/dist/components/empty_space.js.map +1 -0
  98. package/dist/components/index.d.ts +21 -0
  99. package/dist/components/index.d.ts.map +1 -0
  100. package/dist/components/index.js +23 -0
  101. package/dist/components/index.js.map +1 -0
  102. package/dist/components/note.d.ts +10 -0
  103. package/dist/components/note.d.ts.map +1 -0
  104. package/dist/components/note.js +66 -0
  105. package/dist/components/note.js.map +1 -0
  106. package/dist/components/registry.d.ts +24 -0
  107. package/dist/components/registry.d.ts.map +1 -0
  108. package/dist/components/registry.js +36 -0
  109. package/dist/components/registry.js.map +1 -0
  110. package/dist/components/table.d.ts +90 -0
  111. package/dist/components/table.d.ts.map +1 -0
  112. package/dist/components/table.js +610 -0
  113. package/dist/components/table.js.map +1 -0
  114. package/dist/components/text.d.ts +10 -0
  115. package/dist/components/text.d.ts.map +1 -0
  116. package/dist/components/text.js +46 -0
  117. package/dist/components/text.js.map +1 -0
  118. package/dist/components/textarea.d.ts +10 -0
  119. package/dist/components/textarea.d.ts.map +1 -0
  120. package/dist/components/textarea.js +79 -0
  121. package/dist/components/textarea.js.map +1 -0
  122. package/dist/core/colors.d.ts +45 -0
  123. package/dist/core/colors.d.ts.map +1 -0
  124. package/dist/core/colors.js +93 -0
  125. package/dist/core/colors.js.map +1 -0
  126. package/dist/core/css.d.ts +20 -0
  127. package/dist/core/css.d.ts.map +1 -0
  128. package/dist/core/css.js +97 -0
  129. package/dist/core/css.js.map +1 -0
  130. package/dist/core/exceptions.d.ts +59 -0
  131. package/dist/core/exceptions.d.ts.map +1 -0
  132. package/dist/core/exceptions.js +100 -0
  133. package/dist/core/exceptions.js.map +1 -0
  134. package/dist/core/formatting.d.ts +53 -0
  135. package/dist/core/formatting.d.ts.map +1 -0
  136. package/dist/core/formatting.js +491 -0
  137. package/dist/core/formatting.js.map +1 -0
  138. package/dist/core/index.d.ts +10 -0
  139. package/dist/core/index.d.ts.map +1 -0
  140. package/dist/core/index.js +10 -0
  141. package/dist/core/index.js.map +1 -0
  142. package/dist/core/serializer.d.ts +29 -0
  143. package/dist/core/serializer.d.ts.map +1 -0
  144. package/dist/core/serializer.js +84 -0
  145. package/dist/core/serializer.js.map +1 -0
  146. package/dist/core/themes.d.ts +138 -0
  147. package/dist/core/themes.d.ts.map +1 -0
  148. package/dist/core/themes.js +484 -0
  149. package/dist/core/themes.js.map +1 -0
  150. package/dist/core/version-check.d.ts +23 -0
  151. package/dist/core/version-check.d.ts.map +1 -0
  152. package/dist/core/version-check.js +163 -0
  153. package/dist/core/version-check.js.map +1 -0
  154. package/dist/generate_test_harness.d.ts +13 -0
  155. package/dist/generate_test_harness.d.ts.map +1 -0
  156. package/dist/generate_test_harness.js +35 -0
  157. package/dist/generate_test_harness.js.map +1 -0
  158. package/dist/index.d.ts +17 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +19 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/layout/converter.d.ts +22 -0
  163. package/dist/layout/converter.d.ts.map +1 -0
  164. package/dist/layout/converter.js +46 -0
  165. package/dist/layout/converter.js.map +1 -0
  166. package/dist/layout/csv.d.ts +15 -0
  167. package/dist/layout/csv.d.ts.map +1 -0
  168. package/dist/layout/csv.js +88 -0
  169. package/dist/layout/csv.js.map +1 -0
  170. package/dist/layout/dispatcher.d.ts +13 -0
  171. package/dist/layout/dispatcher.d.ts.map +1 -0
  172. package/dist/layout/dispatcher.js +47 -0
  173. package/dist/layout/dispatcher.js.map +1 -0
  174. package/dist/layout/index.d.ts +8 -0
  175. package/dist/layout/index.d.ts.map +1 -0
  176. package/dist/layout/index.js +8 -0
  177. package/dist/layout/index.js.map +1 -0
  178. package/dist/layout/parser.d.ts +19 -0
  179. package/dist/layout/parser.d.ts.map +1 -0
  180. package/dist/layout/parser.js +888 -0
  181. package/dist/layout/parser.js.map +1 -0
  182. package/dist/layout/templates.d.ts +32 -0
  183. package/dist/layout/templates.d.ts.map +1 -0
  184. package/dist/layout/templates.js +1016 -0
  185. package/dist/layout/templates.js.map +1 -0
  186. package/dist/types.d.ts +144 -0
  187. package/dist/types.d.ts.map +1 -0
  188. package/dist/types.js +5 -0
  189. package/dist/types.js.map +1 -0
  190. package/dist/vitest.config.d.ts +3 -0
  191. package/dist/vitest.config.d.ts.map +1 -0
  192. package/dist/vitest.config.js +14 -0
  193. package/dist/vitest.config.js.map +1 -0
  194. package/package.json +79 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Bubble chart generator
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a bubble chart
7
+ */
8
+ export declare function buildBubbleOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a bubble chart with JS function for symbol size
11
+ */
12
+ declare function generateBubble(spec: ChartSpec): string;
13
+ export { generateBubble };
14
+ //# sourceMappingURL=bubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble.d.ts","sourceRoot":"","sources":["../../charts/bubble.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAI/D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyE3E;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA0C/C;AAMD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Bubble chart generator
3
+ */
4
+ import { COLORS, FONT_SIZE_TINY, ECHARTS_CDN, FONT_STACK, getThemeColors, getPalette } from '../core/themes.js';
5
+ import { registerChart, registerOptions } from './registry.js';
6
+ /**
7
+ * Build ECharts options for a bubble chart
8
+ */
9
+ export function buildBubbleOptions(spec) {
10
+ const data = (spec.data ?? []);
11
+ const xField = spec.x ?? 'x';
12
+ const yField = spec.y ?? 'y';
13
+ const sizeField = spec.size ?? 'size';
14
+ const theme = (spec.theme ?? 'light');
15
+ const colors = getThemeColors(theme);
16
+ const palette = getPalette(theme);
17
+ // Find min/max for size scaling
18
+ const sizes = data.map((d) => (typeof d[sizeField] === 'number' ? d[sizeField] : 1));
19
+ const minSize = sizes.length > 0 ? Math.min(...sizes) : 1;
20
+ const maxSize = sizes.length > 0 ? Math.max(...sizes) : 1;
21
+ const sizeRange = maxSize - minSize || 1;
22
+ // Build bubble data with scaled sizes
23
+ const bubbleData = data.map((d) => {
24
+ const s = typeof d[sizeField] === 'number' ? d[sizeField] : 1;
25
+ const scaledSize = 10 + ((s - minSize) / sizeRange) * 40;
26
+ return [d[xField] ?? 0, d[yField] ?? 0, s, scaledSize];
27
+ });
28
+ return {
29
+ backgroundColor: 'transparent',
30
+ animation: false,
31
+ color: palette,
32
+ tooltip: {
33
+ trigger: 'item',
34
+ backgroundColor: colors.paper,
35
+ borderColor: colors.border,
36
+ textStyle: { color: colors.text },
37
+ },
38
+ grid: {
39
+ left: '6%',
40
+ right: '8%',
41
+ top: '12%',
42
+ bottom: '14%',
43
+ containLabel: true,
44
+ },
45
+ xAxis: {
46
+ type: 'value',
47
+ name: xField,
48
+ nameLocation: 'middle',
49
+ nameGap: 24,
50
+ nameTextStyle: { color: colors.textSecondary, fontSize: FONT_SIZE_TINY },
51
+ scale: true,
52
+ axisLine: { show: false },
53
+ axisTick: { show: false },
54
+ axisLabel: { color: colors.textSecondary },
55
+ splitLine: { lineStyle: { color: colors.border, type: [2, 3], opacity: 0.6 } },
56
+ },
57
+ yAxis: {
58
+ type: 'value',
59
+ name: yField,
60
+ nameLocation: 'middle',
61
+ nameGap: 32,
62
+ nameTextStyle: { color: colors.textSecondary, fontSize: FONT_SIZE_TINY },
63
+ scale: true,
64
+ axisLine: { show: false },
65
+ axisTick: { show: false },
66
+ axisLabel: { color: colors.textSecondary },
67
+ splitLine: { lineStyle: { color: colors.border, type: [2, 3], opacity: 0.6 } },
68
+ },
69
+ series: [
70
+ {
71
+ type: 'scatter',
72
+ data: bubbleData,
73
+ symbolSize: '__SYMBOL_SIZE_FUNC__',
74
+ itemStyle: { color: palette[0], opacity: 0.55 },
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ /**
80
+ * Generate a bubble chart with JS function for symbol size
81
+ */
82
+ function generateBubble(spec) {
83
+ const option = buildBubbleOptions(spec);
84
+ const title = spec.title ?? '';
85
+ const theme = (spec.theme ?? 'light');
86
+ const colors = getThemeColors(theme);
87
+ // Convert to JSON and inject the symbolSize function
88
+ let optionJson = JSON.stringify(option, null, 2);
89
+ optionJson = optionJson.replace('"__SYMBOL_SIZE_FUNC__"', 'function(val) { return val[3] || 20; }');
90
+ return `<!DOCTYPE html>
91
+ <html lang="en">
92
+ <head>
93
+ <meta charset="utf-8">
94
+ <title>${title}</title>
95
+ <script src="${ECHARTS_CDN}"></script>
96
+ <style>
97
+ * { box-sizing: border-box; }
98
+ html, body {
99
+ margin: 0; padding: 0; width: 100%; height: 100%;
100
+ background-color: ${colors.background}; font-family: ${FONT_STACK};
101
+ }
102
+ .container { padding: 20px; width: 100%; height: 100%; display: flex; flex-direction: column; }
103
+ .red-line { width: 100%; height: 3px; background-color: ${COLORS.ERROR_RED}; margin-bottom: 12px; }
104
+ h2 { font-family: ${FONT_STACK}; color: ${colors.text}; font-size: 18px; font-weight: 900; margin: 0 0 4px 0; }
105
+ #chart { width: 100%; flex: 1; min-height: 300px; }
106
+ </style>
107
+ </head>
108
+ <body>
109
+ <div class="container">
110
+ <div class="red-line"></div>
111
+ <h2>${title}</h2>
112
+ <div id="chart"></div>
113
+ </div>
114
+ <script>
115
+ var chart = echarts.init(document.getElementById('chart'));
116
+ var option = ${optionJson};
117
+ chart.setOption(option);
118
+ window.addEventListener('resize', function() { chart.resize(); });
119
+ </script>
120
+ </body>
121
+ </html>`;
122
+ }
123
+ // Register the chart
124
+ registerChart('bubble')(generateBubble);
125
+ registerOptions('bubble')(buildBubbleOptions);
126
+ export { generateBubble };
127
+ //# sourceMappingURL=bubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble.js","sourceRoot":"","sources":["../../charts/bubble.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Calendar heatmap chart generator
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a calendar heatmap
7
+ */
8
+ export declare function buildCalendarOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a calendar heatmap chart
11
+ */
12
+ declare function generateCalendar(spec: ChartSpec): string;
13
+ export { generateCalendar };
14
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../charts/calendar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAK/D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6E7E;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAGjD;AAMD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Calendar heatmap chart generator
3
+ */
4
+ import { PALETTE, FONT_SIZE_MICRO, getThemeColors } from '../core/themes.js';
5
+ import { wrapHtml } from '../core/serializer.js';
6
+ import { registerChart, registerOptions } from './registry.js';
7
+ /**
8
+ * Build ECharts options for a calendar heatmap
9
+ */
10
+ export function buildCalendarOptions(spec) {
11
+ const data = (spec.data ?? []);
12
+ const theme = (spec.theme ?? 'light');
13
+ const year = typeof spec.year === 'number' ? spec.year : 2024;
14
+ const colors = getThemeColors(theme);
15
+ // Convert data to [date, value] format
16
+ let calData;
17
+ if (data.length > 0 && typeof data[0] === 'object') {
18
+ calData = data.map((d) => [String(d.date ?? ''), (d.value ?? 0)]);
19
+ }
20
+ else {
21
+ calData = data;
22
+ }
23
+ const values = calData.map((d) => d[1]);
24
+ const maxVal = values.length > 0 ? Math.max(...values) : 100;
25
+ // Color range depends on theme
26
+ const colorRange = theme === 'dark'
27
+ ? [colors.background, PALETTE[0], '#FFFFFF']
28
+ : [colors.border, PALETTE[1] ?? PALETTE[0], PALETTE[0]];
29
+ return {
30
+ backgroundColor: 'transparent',
31
+ animation: false,
32
+ tooltip: {
33
+ trigger: 'item',
34
+ backgroundColor: colors.paper,
35
+ borderColor: colors.border,
36
+ textStyle: { color: colors.text },
37
+ },
38
+ visualMap: {
39
+ min: 0,
40
+ max: maxVal,
41
+ show: false,
42
+ inRange: { color: colorRange },
43
+ },
44
+ calendar: {
45
+ top: '15%',
46
+ left: '5%',
47
+ right: '2%',
48
+ bottom: '5%',
49
+ cellSize: [14, 14],
50
+ range: String(year),
51
+ itemStyle: {
52
+ borderWidth: 1,
53
+ borderColor: colors.background,
54
+ },
55
+ splitLine: {
56
+ show: true,
57
+ lineStyle: { color: colors.border, width: 1 },
58
+ },
59
+ yearLabel: { show: false },
60
+ dayLabel: {
61
+ show: true,
62
+ firstDay: 0,
63
+ color: colors.textSecondary,
64
+ fontSize: FONT_SIZE_MICRO,
65
+ nameMap: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
66
+ margin: 5,
67
+ },
68
+ monthLabel: {
69
+ show: true,
70
+ color: colors.textSecondary,
71
+ fontSize: FONT_SIZE_MICRO,
72
+ },
73
+ },
74
+ series: [
75
+ {
76
+ type: 'heatmap',
77
+ coordinateSystem: 'calendar',
78
+ data: calData,
79
+ },
80
+ ],
81
+ };
82
+ }
83
+ /**
84
+ * Generate a calendar heatmap chart
85
+ */
86
+ function generateCalendar(spec) {
87
+ const height = typeof spec.height === 'number' ? spec.height : 200;
88
+ return wrapHtml('chart', buildCalendarOptions(spec), '', '100%', height);
89
+ }
90
+ // Register the chart
91
+ registerChart('calendar')(generateCalendar);
92
+ registerOptions('calendar')(buildCalendarOptions);
93
+ export { generateCalendar };
94
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../charts/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Combo chart generator (bar + line with optional dual axis)
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a combo chart (bar + line with optional dual axis)
7
+ */
8
+ export declare function buildComboOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a combo chart
11
+ */
12
+ declare function generateCombo(spec: ChartSpec): string;
13
+ export { generateCombo };
14
+ //# sourceMappingURL=combo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combo.d.ts","sourceRoot":"","sources":["../../charts/combo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAgC,MAAM,aAAa,CAAC;AAc3E;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+J1E;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAG9C;AAMD,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Combo chart generator (bar + line with optional dual axis)
3
+ */
4
+ import { FONT_SIZE_XXS, BAR_MAX_WIDTH, LEGEND_ITEM_WIDTH, LEGEND_ITEM_HEIGHT, LEGEND_ITEM_GAP, getThemeColors, getPalette, } from '../core/themes.js';
5
+ import { wrapHtml } from '../core/serializer.js';
6
+ import { inferAxisType, inferFormat, getAxisFormatterJs } from '../core/formatting.js';
7
+ import { registerChart, registerOptions } from './registry.js';
8
+ /**
9
+ * Build ECharts options for a combo chart (bar + line with optional dual axis)
10
+ */
11
+ export function buildComboOptions(spec) {
12
+ const data = (spec.data ?? []);
13
+ const x = spec.x ?? 'name';
14
+ const barFields = spec.bar;
15
+ const lineFields = spec.line;
16
+ const theme = (spec.theme ?? 'light');
17
+ const dualAxis = spec.dualAxis ?? false;
18
+ const colors = getThemeColors(theme);
19
+ const palette = getPalette(theme);
20
+ const barKeys = Array.isArray(barFields) ? barFields : barFields ? [barFields] : [];
21
+ const lineKeys = Array.isArray(lineFields) ? lineFields : lineFields ? [lineFields] : [];
22
+ const categories = data.map((d) => d[x]);
23
+ // Infer format for primary y-axis (bars)
24
+ const barSample = data.length > 0 && data[0] && barKeys[0] ? data[0][barKeys[0]] ?? 0 : 0;
25
+ const primaryFormat = spec.format ?? inferFormat(barKeys[0] ?? 'value', barSample);
26
+ const primaryAxisFormatter = getAxisFormatterJs(primaryFormat);
27
+ // Infer format for secondary y-axis (line if dual axis)
28
+ const lineSample = data.length > 0 && data[0] && lineKeys[0] ? data[0][lineKeys[0]] ?? 0 : 0;
29
+ const secondaryFormat = spec.secondaryFormat ?? inferFormat(lineKeys[0] ?? 'value', lineSample);
30
+ const secondaryAxisFormatter = getAxisFormatterJs(secondaryFormat);
31
+ // Detect x-axis type
32
+ const xAxisType = inferAxisType(categories);
33
+ // Get axis label config based on axis type
34
+ const xAxisLabelConfig = xAxisType === 'category'
35
+ ? { interval: 0, rotate: 45, overflow: 'truncate', ellipsis: '...', width: 100 }
36
+ : xAxisType === 'time'
37
+ ? {
38
+ hideOverlap: true,
39
+ formatter: {
40
+ _js_: `function(value) {
41
+ var d = new Date(value);
42
+ var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
43
+ return months[d.getMonth()] + ' ' + d.getDate();
44
+ }`,
45
+ },
46
+ }
47
+ : { hideOverlap: true };
48
+ const series = [];
49
+ // Add bar series
50
+ barKeys.forEach((key, i) => {
51
+ const seriesData = xAxisType === 'time' || xAxisType === 'value'
52
+ ? data.map((d) => [d[x] ?? '', d[key] ?? 0])
53
+ : data.map((d) => d[key] ?? 0);
54
+ series.push({
55
+ name: key,
56
+ type: 'bar',
57
+ data: seriesData,
58
+ barMaxWidth: BAR_MAX_WIDTH,
59
+ itemStyle: {
60
+ color: palette[i % palette.length],
61
+ },
62
+ });
63
+ });
64
+ // Add line series
65
+ lineKeys.forEach((key, i) => {
66
+ const seriesData = xAxisType === 'time' || xAxisType === 'value'
67
+ ? data.map((d) => [d[x] ?? '', d[key] ?? 0])
68
+ : data.map((d) => d[key] ?? 0);
69
+ const lineSeries = {
70
+ name: key,
71
+ type: 'line',
72
+ data: seriesData,
73
+ smooth: false,
74
+ symbol: 'none',
75
+ lineStyle: { width: 2 },
76
+ itemStyle: { color: palette[(barKeys.length + i) % palette.length] },
77
+ };
78
+ if (dualAxis) {
79
+ lineSeries.yAxisIndex = 1;
80
+ }
81
+ series.push(lineSeries);
82
+ });
83
+ const yAxis = [
84
+ {
85
+ type: 'value',
86
+ axisLine: { show: false },
87
+ axisTick: { show: false },
88
+ axisLabel: {
89
+ color: colors.textSecondary,
90
+ ...(primaryAxisFormatter && { formatter: primaryAxisFormatter }),
91
+ },
92
+ splitLine: { lineStyle: { color: colors.border, type: [2, 3], opacity: 0.6 } },
93
+ },
94
+ ];
95
+ // Apply yMin/yMax to primary y-axis
96
+ if (spec.yMin !== undefined) {
97
+ yAxis[0].min = spec.yMin;
98
+ }
99
+ if (spec.yMax !== undefined) {
100
+ yAxis[0].max = spec.yMax;
101
+ }
102
+ if (dualAxis) {
103
+ yAxis.push({
104
+ type: 'value',
105
+ axisLine: { show: false },
106
+ axisTick: { show: false },
107
+ axisLabel: {
108
+ color: colors.textSecondary,
109
+ ...(secondaryAxisFormatter && { formatter: secondaryAxisFormatter }),
110
+ },
111
+ splitLine: { show: false }, // Hide gridlines on secondary axis
112
+ });
113
+ }
114
+ return {
115
+ backgroundColor: 'transparent',
116
+ animation: false,
117
+ tooltip: {
118
+ trigger: 'axis',
119
+ backgroundColor: colors.paper,
120
+ borderColor: colors.border,
121
+ textStyle: { color: colors.text },
122
+ },
123
+ grid: {
124
+ left: '2%',
125
+ right: dualAxis ? '5%' : '2%',
126
+ top: '14%',
127
+ bottom: '8%',
128
+ containLabel: true,
129
+ },
130
+ legend: {
131
+ data: [...barKeys, ...lineKeys],
132
+ top: 0,
133
+ textStyle: { color: colors.textSecondary, fontSize: FONT_SIZE_XXS },
134
+ itemWidth: LEGEND_ITEM_WIDTH,
135
+ itemHeight: LEGEND_ITEM_HEIGHT,
136
+ itemGap: LEGEND_ITEM_GAP,
137
+ },
138
+ xAxis: {
139
+ type: xAxisType,
140
+ data: xAxisType === 'category' ? categories.map(String) : undefined,
141
+ axisLine: { show: false },
142
+ axisTick: { show: false },
143
+ axisLabel: {
144
+ color: colors.textSecondary,
145
+ ...xAxisLabelConfig,
146
+ },
147
+ },
148
+ yAxis,
149
+ series,
150
+ };
151
+ }
152
+ /**
153
+ * Generate a combo chart
154
+ */
155
+ function generateCombo(spec) {
156
+ const height = typeof spec.height === 'number' ? spec.height : 300;
157
+ return wrapHtml('chart', buildComboOptions(spec), '', '100%', height);
158
+ }
159
+ // Register the chart
160
+ registerChart('combo')(generateCombo);
161
+ registerOptions('combo')(buildComboOptions);
162
+ export { generateCombo };
163
+ //# sourceMappingURL=combo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combo.js","sourceRoot":"","sources":["../../charts/combo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Dumbbell chart generator
3
+ *
4
+ * Dumbbell plots show comparisons between two values for each category,
5
+ * connected by a line with directional color-coding.
6
+ */
7
+ import type { ChartSpec } from '../types.js';
8
+ /**
9
+ * Build ECharts options for a dumbbell plot with directional coloring
10
+ */
11
+ export declare function buildDumbbellOptions(spec: ChartSpec): Record<string, unknown>;
12
+ /**
13
+ * Generate a dumbbell chart
14
+ */
15
+ declare function generateDumbbell(spec: ChartSpec): string;
16
+ export { generateDumbbell };
17
+ //# sourceMappingURL=dumbbell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dumbbell.d.ts","sourceRoot":"","sources":["../../charts/dumbbell.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAgD/D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqT7E;AAsBD;;GAEG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAIjD;AAMD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}