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,202 @@
1
+ /**
2
+ * Heatmap chart generator
3
+ */
4
+ import { PALETTE, FONT_SIZE_XXS, getThemeColors } from '../core/themes.js';
5
+ import { wrapHtml } from '../core/serializer.js';
6
+ import { registerChart, registerOptions } from './registry.js';
7
+ import { inferFormat } from '../core/formatting.js';
8
+ /**
9
+ * Parse a formatted string value like "1.9k" or "$2.5m" to a number.
10
+ * Returns the original value if parsing fails.
11
+ */
12
+ function parseFormattedValue(value) {
13
+ if (typeof value === 'number') {
14
+ return value;
15
+ }
16
+ if (typeof value === 'string') {
17
+ // Remove currency symbols and whitespace
18
+ const cleaned = value.replace(/[$,\s]/g, '').toLowerCase();
19
+ // Match number with optional suffix (k, m, b)
20
+ const match = cleaned.match(/^(-?\d+\.?\d*)(k|m|b)?$/);
21
+ if (match) {
22
+ const num = parseFloat(match[1]);
23
+ const suffix = match[2];
24
+ if (suffix === 'k')
25
+ return num * 1000;
26
+ if (suffix === 'm')
27
+ return num * 1000000;
28
+ if (suffix === 'b')
29
+ return num * 1000000000;
30
+ return num;
31
+ }
32
+ }
33
+ return 0;
34
+ }
35
+ /**
36
+ * Generate a label formatter for heatmap cells.
37
+ * Heatmap data is [x, y, value], so we access params.value[2].
38
+ */
39
+ function getHeatmapLabelFormatter(fmt) {
40
+ if (fmt === null || fmt === undefined) {
41
+ return null;
42
+ }
43
+ // Smart auto-formatting for heatmap labels
44
+ if (fmt === 'auto' || fmt === 'usd_auto') {
45
+ const isCurrency = fmt === 'usd_auto' ? 'true' : 'false';
46
+ return {
47
+ _js_: `function(params) {
48
+ var v = params.value[2];
49
+ if (v == null) return '';
50
+ var abs = Math.abs(v);
51
+ var neg = v < 0;
52
+ var p = ${isCurrency} ? '$' : '';
53
+ var r;
54
+ if (abs >= 1e9) {
55
+ var s = abs / 1e9;
56
+ r = s >= 100 ? p + s.toFixed(1) + 'b' : s >= 10 ? p + s.toFixed(2) + 'b' : p + s.toFixed(3) + 'b';
57
+ } else if (abs >= 1e6) {
58
+ var s = abs / 1e6;
59
+ r = s >= 100 ? p + s.toFixed(1) + 'm' : s >= 10 ? p + s.toFixed(2) + 'm' : p + s.toFixed(3) + 'm';
60
+ } else if (abs >= 1e4) {
61
+ var s = abs / 1e3;
62
+ r = s >= 100 ? p + s.toFixed(1) + 'k' : p + s.toFixed(2) + 'k';
63
+ } else if (abs >= 1e3) {
64
+ r = p + abs.toLocaleString('en-US', {maximumFractionDigits: 0});
65
+ } else {
66
+ r = abs === Math.floor(abs) ? p + abs : p + abs.toFixed(2);
67
+ }
68
+ return neg ? '(' + r + ')' : r;
69
+ }`,
70
+ };
71
+ }
72
+ // Format-specific formatters
73
+ const formatExprs = {
74
+ usd: "'$' + params.value[2].toLocaleString()",
75
+ usd0k: "'$' + (params.value[2]/1000).toFixed(0) + 'k'",
76
+ usd0m: "'$' + (params.value[2]/1000000).toFixed(1) + 'm'",
77
+ pct: "(params.value[2] * 100).toFixed(1) + '%'",
78
+ pct0: "(params.value[2] * 100).toFixed(0) + '%'",
79
+ pct1: "(params.value[2] * 100).toFixed(1) + '%'",
80
+ num0: "params.value[2].toLocaleString()",
81
+ num1: "params.value[2].toFixed(1)",
82
+ num0k: "(params.value[2]/1000).toFixed(0) + 'k'",
83
+ num0m: "(params.value[2]/1000000).toFixed(1) + 'm'",
84
+ };
85
+ const expr = formatExprs[fmt];
86
+ if (expr) {
87
+ return { _js_: `function(params) { return ${expr}; }` };
88
+ }
89
+ return null;
90
+ }
91
+ /**
92
+ * Build ECharts options for a heatmap
93
+ */
94
+ export function buildHeatmapOptions(spec) {
95
+ const data = (spec.data ?? []);
96
+ const xCategories = spec.xCategories ?? [];
97
+ const yCategories = spec.yCategories ?? [];
98
+ const theme = (spec.theme ?? 'light');
99
+ const colors = getThemeColors(theme);
100
+ // Convert data to [x, y, value] format
101
+ // Data can be: [[x, y, value], ...] array format or [{x, y, value}, ...] object format
102
+ // Values may be pre-formatted strings like "1.9k" which need parsing
103
+ let heatmapData;
104
+ if (data.length > 0 && !Array.isArray(data[0]) && typeof data[0] === 'object') {
105
+ // Object format: {x, y, value}
106
+ heatmapData = data.map((d) => [
107
+ (d.x ?? 0),
108
+ (d.y ?? 0),
109
+ parseFormattedValue(d.value),
110
+ ]);
111
+ }
112
+ else {
113
+ // Array format: [x, y, value] - parse the value in case it's a string
114
+ heatmapData = data.map((d) => [
115
+ d[0],
116
+ d[1],
117
+ parseFormattedValue(d[2]),
118
+ ]);
119
+ }
120
+ const values = heatmapData.map((d) => d[2]);
121
+ const minVal = values.length > 0 ? Math.min(...values) : 0;
122
+ const maxVal = values.length > 0 ? Math.max(...values) : 100;
123
+ // Calculate left margin based on longest y-axis label
124
+ const maxLabelLen = yCategories.reduce((max, label) => Math.max(max, String(label).length), 0);
125
+ const leftMarginPx = Math.max(60, maxLabelLen * 7 + 16);
126
+ // Infer format for labels
127
+ const sampleValue = values[0] ?? 0;
128
+ const valueFormat = spec.format ?? inferFormat('value', sampleValue);
129
+ const labelFormatter = getHeatmapLabelFormatter(valueFormat);
130
+ // Build label config
131
+ const labelConfig = { show: true, color: colors.text };
132
+ if (labelFormatter) {
133
+ labelConfig.formatter = labelFormatter;
134
+ }
135
+ return {
136
+ backgroundColor: 'transparent',
137
+ animation: false,
138
+ tooltip: {
139
+ trigger: 'item',
140
+ position: 'top',
141
+ backgroundColor: colors.paper,
142
+ borderColor: colors.border,
143
+ textStyle: { color: colors.text },
144
+ },
145
+ grid: {
146
+ left: leftMarginPx,
147
+ right: '4%',
148
+ top: '8%',
149
+ bottom: '15%',
150
+ },
151
+ xAxis: {
152
+ type: 'category',
153
+ data: xCategories,
154
+ splitArea: { show: true },
155
+ axisLine: { show: false },
156
+ axisTick: { show: false },
157
+ axisLabel: { color: colors.text, fontSize: FONT_SIZE_XXS },
158
+ },
159
+ yAxis: {
160
+ type: 'category',
161
+ data: yCategories,
162
+ splitArea: { show: true },
163
+ axisLine: { show: false },
164
+ axisTick: { show: false },
165
+ axisLabel: { color: colors.text, fontSize: FONT_SIZE_XXS },
166
+ },
167
+ visualMap: {
168
+ min: minVal,
169
+ max: maxVal,
170
+ show: false,
171
+ inRange: {
172
+ color: [colors.background, PALETTE[0]],
173
+ },
174
+ },
175
+ series: [
176
+ {
177
+ type: 'heatmap',
178
+ data: heatmapData,
179
+ label: labelConfig,
180
+ itemStyle: {
181
+ borderColor: theme === 'light' ? '#e8e8e8' : '#333333',
182
+ borderWidth: 1,
183
+ },
184
+ emphasis: {
185
+ itemStyle: { shadowBlur: 10, shadowColor: 'rgba(0, 0, 0, 0.5)' },
186
+ },
187
+ },
188
+ ],
189
+ };
190
+ }
191
+ /**
192
+ * Generate a heatmap chart
193
+ */
194
+ function generateHeatmap(spec) {
195
+ const height = typeof spec.height === 'number' ? spec.height : 450;
196
+ return wrapHtml('chart', buildHeatmapOptions(spec), '', '100%', height);
197
+ }
198
+ // Register the chart
199
+ registerChart('heatmap')(generateHeatmap);
200
+ registerOptions('heatmap')(buildHeatmapOptions);
201
+ export { generateHeatmap };
202
+ //# sourceMappingURL=heatmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap.js","sourceRoot":"","sources":["../../charts/heatmap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Histogram chart generator
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a histogram
7
+ */
8
+ export declare function buildHistogramOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a histogram chart
11
+ */
12
+ declare function generateHistogram(spec: ChartSpec): string;
13
+ export { generateHistogram };
14
+ //# sourceMappingURL=histogram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram.d.ts","sourceRoot":"","sources":["../../charts/histogram.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAK/D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuF9E;AAED;;GAEG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAGlD;AAMD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Histogram chart generator
3
+ */
4
+ import { DEFAULT_CHART_HEIGHT, getThemeColors, getPalette } 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 histogram
9
+ */
10
+ export function buildHistogramOptions(spec) {
11
+ const data = (spec.data ?? []);
12
+ const valueField = spec.value ?? 'value';
13
+ const bins = typeof spec.bins === 'number' ? spec.bins : 10;
14
+ const theme = (spec.theme ?? 'light');
15
+ const colors = getThemeColors(theme);
16
+ const palette = getPalette(theme);
17
+ // Extract values
18
+ const values = data.map((d) => {
19
+ if (typeof d === 'number')
20
+ return d;
21
+ return typeof d[valueField] === 'number' ? d[valueField] : 0;
22
+ });
23
+ if (values.length === 0) {
24
+ return {
25
+ backgroundColor: 'transparent',
26
+ series: [],
27
+ };
28
+ }
29
+ // Calculate histogram bins
30
+ const minVal = Math.min(...values);
31
+ const maxVal = Math.max(...values);
32
+ const binWidth = (maxVal - minVal) / bins || 1;
33
+ const histogram = new Array(bins).fill(0);
34
+ for (const v of values) {
35
+ const binIdx = Math.min(Math.floor((v - minVal) / binWidth), bins - 1);
36
+ if (histogram[binIdx] !== undefined) {
37
+ histogram[binIdx]++;
38
+ }
39
+ }
40
+ const binLabels = Array.from({ length: bins }, (_, i) => (minVal + i * binWidth).toFixed(1));
41
+ return {
42
+ backgroundColor: 'transparent',
43
+ animation: false,
44
+ color: palette,
45
+ tooltip: {
46
+ trigger: 'axis',
47
+ axisPointer: { type: 'shadow' },
48
+ backgroundColor: colors.paper,
49
+ borderColor: colors.border,
50
+ textStyle: { color: colors.text },
51
+ },
52
+ grid: {
53
+ left: '2%',
54
+ right: '2%',
55
+ top: '6%',
56
+ bottom: '8%',
57
+ containLabel: true,
58
+ },
59
+ xAxis: {
60
+ type: 'category',
61
+ data: binLabels,
62
+ axisLine: { show: false },
63
+ axisTick: { show: false },
64
+ axisLabel: {
65
+ color: colors.textSecondary,
66
+ interval: 0,
67
+ rotate: 45,
68
+ overflow: 'truncate',
69
+ ellipsis: '...',
70
+ width: 100,
71
+ hideOverlap: true,
72
+ },
73
+ },
74
+ yAxis: {
75
+ type: 'value',
76
+ axisLine: { show: false },
77
+ axisTick: { show: false },
78
+ axisLabel: { color: colors.textSecondary },
79
+ splitLine: { lineStyle: { color: colors.border, type: [2, 3], opacity: 0.6 } },
80
+ },
81
+ series: [
82
+ {
83
+ type: 'bar',
84
+ data: histogram,
85
+ barWidth: '95%',
86
+ barGap: '0%',
87
+ itemStyle: { color: palette[0] },
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ /**
93
+ * Generate a histogram chart
94
+ */
95
+ function generateHistogram(spec) {
96
+ const height = typeof spec.height === 'number' ? spec.height : DEFAULT_CHART_HEIGHT;
97
+ return wrapHtml('chart', buildHistogramOptions(spec), '', '100%', height);
98
+ }
99
+ // Register the chart
100
+ registerChart('histogram')(generateHistogram);
101
+ registerOptions('histogram')(buildHistogramOptions);
102
+ export { generateHistogram };
103
+ //# sourceMappingURL=histogram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"histogram.js","sourceRoot":"","sources":["../../charts/histogram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Charts module exports
3
+ */
4
+ export * from './registry.js';
5
+ export { getOptionsBuilder } from './registry.js';
6
+ import './bar.js';
7
+ import './line.js';
8
+ import './pie.js';
9
+ import './scatter.js';
10
+ import './area.js';
11
+ import './sparkline.js';
12
+ import './histogram.js';
13
+ import './heatmap.js';
14
+ import './bubble.js';
15
+ import './boxplot.js';
16
+ import './calendar.js';
17
+ import './funnel.js';
18
+ import './sankey.js';
19
+ import './combo.js';
20
+ import './waterfall.js';
21
+ import './xmr.js';
22
+ import './dumbbell.js';
23
+ export { buildBarOptions, generateBarChart } from './bar.js';
24
+ export { buildLineOptions, generateLineChart } from './line.js';
25
+ export { buildPieOptions, generatePieChart } from './pie.js';
26
+ export { buildScatterOptions, generateScatterChart } from './scatter.js';
27
+ export { buildAreaOptions, generateAreaChart } from './area.js';
28
+ export { buildSparklineOptions, generateSparkline, generatePctBar } from './sparkline.js';
29
+ export { buildHistogramOptions, generateHistogram } from './histogram.js';
30
+ export { buildHeatmapOptions, generateHeatmap } from './heatmap.js';
31
+ export { buildBubbleOptions, generateBubble } from './bubble.js';
32
+ export { buildBoxplotOptions, generateBoxplot } from './boxplot.js';
33
+ export { buildCalendarOptions, generateCalendar } from './calendar.js';
34
+ export { buildFunnelOptions, generateFunnel } from './funnel.js';
35
+ export { buildSankeyOptions, generateSankey } from './sankey.js';
36
+ export { buildComboOptions, generateCombo } from './combo.js';
37
+ export { buildWaterfallOptions, generateWaterfall } from './waterfall.js';
38
+ export { buildXmrOptions, generateXmr } from './xmr.js';
39
+ export { buildDumbbellOptions, generateDumbbell } from './dumbbell.js';
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../charts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,UAAU,CAAC;AAClB,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AACnB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,aAAa,CAAC;AACrB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,YAAY,CAAC;AACpB,OAAO,gBAAgB,CAAC;AACxB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AAGvB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Charts module exports
3
+ */
4
+ export * from './registry.js';
5
+ export { getOptionsBuilder } from './registry.js';
6
+ // Import chart modules to trigger registration
7
+ import './bar.js';
8
+ import './line.js';
9
+ import './pie.js';
10
+ import './scatter.js';
11
+ import './area.js';
12
+ import './sparkline.js';
13
+ import './histogram.js';
14
+ import './heatmap.js';
15
+ import './bubble.js';
16
+ import './boxplot.js';
17
+ import './calendar.js';
18
+ import './funnel.js';
19
+ import './sankey.js';
20
+ import './combo.js';
21
+ import './waterfall.js';
22
+ import './xmr.js';
23
+ import './dumbbell.js';
24
+ // Re-export chart builders for direct use
25
+ export { buildBarOptions, generateBarChart } from './bar.js';
26
+ export { buildLineOptions, generateLineChart } from './line.js';
27
+ export { buildPieOptions, generatePieChart } from './pie.js';
28
+ export { buildScatterOptions, generateScatterChart } from './scatter.js';
29
+ export { buildAreaOptions, generateAreaChart } from './area.js';
30
+ export { buildSparklineOptions, generateSparkline, generatePctBar } from './sparkline.js';
31
+ export { buildHistogramOptions, generateHistogram } from './histogram.js';
32
+ export { buildHeatmapOptions, generateHeatmap } from './heatmap.js';
33
+ export { buildBubbleOptions, generateBubble } from './bubble.js';
34
+ export { buildBoxplotOptions, generateBoxplot } from './boxplot.js';
35
+ export { buildCalendarOptions, generateCalendar } from './calendar.js';
36
+ export { buildFunnelOptions, generateFunnel } from './funnel.js';
37
+ export { buildSankeyOptions, generateSankey } from './sankey.js';
38
+ export { buildComboOptions, generateCombo } from './combo.js';
39
+ export { buildWaterfallOptions, generateWaterfall } from './waterfall.js';
40
+ export { buildXmrOptions, generateXmr } from './xmr.js';
41
+ export { buildDumbbellOptions, generateDumbbell } from './dumbbell.js';
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../charts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,+CAA+C;AAC/C,OAAO,UAAU,CAAC;AAClB,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AACnB,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,aAAa,CAAC;AACrB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,YAAY,CAAC;AACpB,OAAO,gBAAgB,CAAC;AACxB,OAAO,UAAU,CAAC;AAClB,OAAO,eAAe,CAAC;AAEvB,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Line chart generator
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a line chart
7
+ */
8
+ export declare function buildLineOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a line chart
11
+ */
12
+ declare function generateLineChart(spec: ChartSpec): string;
13
+ export { generateLineChart };
14
+ //# sourceMappingURL=line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line.d.ts","sourceRoot":"","sources":["../../charts/line.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAgC,MAAM,aAAa,CAAC;AAY3E;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyHzE;AAED;;GAEG;AACH,iBAAS,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAGlD;AAMD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Line chart generator
3
+ */
4
+ import { FONT_SIZE_TINY, DEFAULT_CHART_HEIGHT, getThemeColors, getPalette, } from '../core/themes.js';
5
+ import { wrapHtml } from '../core/serializer.js';
6
+ import { registerChart, registerOptions } from './registry.js';
7
+ import { inferFormat, getAxisFormatterJs, inferAxisType } from '../core/formatting.js';
8
+ /**
9
+ * Build ECharts options for a line chart
10
+ */
11
+ export function buildLineOptions(spec) {
12
+ const data = (spec.data ?? []);
13
+ const x = spec.x ?? 'name';
14
+ const y = spec.y ?? 'value';
15
+ const theme = (spec.theme ?? 'light');
16
+ const smooth = spec.smooth === true;
17
+ const colors = getThemeColors(theme);
18
+ const yKeys = Array.isArray(y) ? y : [y];
19
+ const categories = data.map((d) => d[x]);
20
+ const palette = getPalette(theme);
21
+ // Infer format for value axis based on first y field name
22
+ const firstYKey = yKeys[0] ?? 'value';
23
+ const sampleValue = data.length > 0 && data[0] ? data[0][firstYKey] ?? 0 : 0;
24
+ const valueFormat = spec.format ?? inferFormat(firstYKey, sampleValue);
25
+ const axisFormatter = getAxisFormatterJs(valueFormat);
26
+ // Detect x-axis type: time, value, or category
27
+ // User can override with xAxisType in spec
28
+ const xAxisType = spec.xAxisType ?? inferAxisType(categories);
29
+ // More right margin needed for end labels on multi-series
30
+ const hasEndLabels = yKeys.length > 1;
31
+ // Get axis label config based on axis type
32
+ const xAxisLabelConfig = xAxisType === 'category'
33
+ ? { interval: 0, rotate: 45, overflow: 'truncate', ellipsis: '...', width: 100 }
34
+ : xAxisType === 'time'
35
+ ? {
36
+ hideOverlap: true,
37
+ formatter: {
38
+ _js_: `function(value) {
39
+ var d = new Date(value);
40
+ var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
41
+ return months[d.getMonth()] + ' ' + d.getDate();
42
+ }`,
43
+ },
44
+ }
45
+ : { hideOverlap: true };
46
+ const option = {
47
+ backgroundColor: 'transparent',
48
+ animation: false,
49
+ color: palette,
50
+ tooltip: {
51
+ trigger: 'axis',
52
+ backgroundColor: colors.paper,
53
+ borderColor: colors.border,
54
+ textStyle: { color: colors.text },
55
+ },
56
+ grid: {
57
+ left: '2%',
58
+ right: hasEndLabels ? '18%' : '2%',
59
+ top: '6%',
60
+ bottom: '8%',
61
+ containLabel: true,
62
+ },
63
+ xAxis: {
64
+ type: xAxisType,
65
+ // Only set data array for category axes; time/value axes get data in series
66
+ data: xAxisType === 'category' ? categories.map(String) : undefined,
67
+ boundaryGap: false,
68
+ axisLine: { show: false },
69
+ axisTick: { show: false },
70
+ axisLabel: {
71
+ color: colors.textSecondary,
72
+ ...xAxisLabelConfig,
73
+ },
74
+ },
75
+ yAxis: {
76
+ type: 'value',
77
+ axisLine: { show: false },
78
+ axisTick: { show: false },
79
+ axisLabel: {
80
+ color: colors.textSecondary,
81
+ ...(axisFormatter && { formatter: axisFormatter }),
82
+ },
83
+ splitLine: { lineStyle: { color: colors.border, type: [2, 3], opacity: 0.6 } },
84
+ },
85
+ series: [],
86
+ };
87
+ // Apply yMin/yMax
88
+ if (spec.yMin !== undefined) {
89
+ option.yAxis.min = spec.yMin;
90
+ }
91
+ if (spec.yMax !== undefined) {
92
+ option.yAxis.max = spec.yMax;
93
+ }
94
+ // Build series
95
+ for (let i = 0; i < yKeys.length; i++) {
96
+ const key = yKeys[i];
97
+ // Format series data based on axis type
98
+ const seriesData = xAxisType === 'category'
99
+ ? data.map((d) => d[key] ?? 0) // Category axis: just y values
100
+ : data.map((d) => [d[x], d[key] ?? 0]); // Time/value axes: [x, y] pairs
101
+ option.series.push({
102
+ name: key,
103
+ type: 'line',
104
+ data: seriesData,
105
+ smooth,
106
+ symbol: 'none',
107
+ lineStyle: { width: 2 },
108
+ itemStyle: { color: palette[i % palette.length] },
109
+ endLabel: {
110
+ show: yKeys.length > 1,
111
+ formatter: '{a}',
112
+ color: palette[i % palette.length],
113
+ fontSize: FONT_SIZE_TINY,
114
+ offset: [5, 0],
115
+ },
116
+ labelLayout: {
117
+ moveOverlap: 'shiftY',
118
+ },
119
+ });
120
+ }
121
+ return option;
122
+ }
123
+ /**
124
+ * Generate a line chart
125
+ */
126
+ function generateLineChart(spec) {
127
+ const height = typeof spec.height === 'number' ? spec.height : DEFAULT_CHART_HEIGHT;
128
+ return wrapHtml('chart', buildLineOptions(spec), '', '100%', height);
129
+ }
130
+ // Register the chart
131
+ registerChart('line')(generateLineChart);
132
+ registerOptions('line')(buildLineOptions);
133
+ export { generateLineChart };
134
+ //# sourceMappingURL=line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line.js","sourceRoot":"","sources":["../../charts/line.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Pie chart generator
3
+ */
4
+ import type { ChartSpec } from '../types.js';
5
+ /**
6
+ * Build ECharts options for a pie or donut chart
7
+ */
8
+ export declare function buildPieOptions(spec: ChartSpec): Record<string, unknown>;
9
+ /**
10
+ * Generate a pie chart
11
+ */
12
+ declare function generatePieChart(spec: ChartSpec): string;
13
+ export { generatePieChart };
14
+ //# sourceMappingURL=pie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pie.d.ts","sourceRoot":"","sources":["../../charts/pie.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAC;AAK/D;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDxE;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAGjD;AAMD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}