@20syldev/api 4.9.0 → 5.0.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.
@@ -0,0 +1,379 @@
1
+ import { MAX_CHART_DATASETS, MAX_CHART_LABELS } from '../../constants.js';
2
+ import { normalizeColor } from '../../utils/colors.js';
3
+ const DEFAULT_COLORS = [
4
+ '#4e79a7',
5
+ '#f28e2b',
6
+ '#e15759',
7
+ '#76b7b2',
8
+ '#59a14f',
9
+ '#edc948',
10
+ '#b07aa1',
11
+ '#ff9da7',
12
+ '#9c755f',
13
+ '#bab0ac',
14
+ ];
15
+ const DEFAULT_W = 600;
16
+ const DEFAULT_H = 400;
17
+ const MARGIN = { top: 30, right: 40, bottom: 40, left: 50 };
18
+ const TITLE_HEIGHT = 30;
19
+ const LEGEND_ROW_H = 18;
20
+ function escapeXml(str) {
21
+ return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
22
+ }
23
+ function parseDisplaySize(v, name) {
24
+ if (v === undefined || v === null)
25
+ return null;
26
+ const n = Number(v);
27
+ if (!isFinite(n) || n <= 0)
28
+ throw new Error(`'${name}' must be a positive number`);
29
+ return Math.floor(n);
30
+ }
31
+ function getColors(colors, n) {
32
+ const result = [];
33
+ if (Array.isArray(colors)) {
34
+ for (const c of colors) {
35
+ result.push(normalizeColor(String(c), DEFAULT_COLORS[result.length % DEFAULT_COLORS.length]));
36
+ }
37
+ }
38
+ while (result.length < n) {
39
+ result.push(DEFAULT_COLORS[result.length % DEFAULT_COLORS.length]);
40
+ }
41
+ return result;
42
+ }
43
+ function svgOpen(bg, renderW, renderH, displayW, displayH) {
44
+ const wAttr = displayW !== null ? ` width="${displayW}"` : '';
45
+ const hAttr = displayH !== null ? ` height="${displayH}"` : '';
46
+ return `<svg xmlns="http://www.w3.org/2000/svg"${wAttr}${hAttr} viewBox="0 0 ${renderW} ${renderH}">\n <rect width="${renderW}" height="${renderH}" fill="${bg}"/>\n`;
47
+ }
48
+ function validateBarLine(data) {
49
+ if (!data || typeof data !== 'object')
50
+ throw new Error("'data' is required");
51
+ const d = data;
52
+ if (!Array.isArray(d['labels']) || d['labels'].length === 0)
53
+ throw new Error("'data.labels' must be a non-empty array");
54
+ if (!Array.isArray(d['datasets']) || d['datasets'].length === 0)
55
+ throw new Error("'data.datasets' must be a non-empty array");
56
+ if (d['labels'].length > MAX_CHART_LABELS)
57
+ throw new Error(`Cannot exceed ${MAX_CHART_LABELS} labels`);
58
+ if (d['datasets'].length > MAX_CHART_DATASETS)
59
+ throw new Error(`Cannot exceed ${MAX_CHART_DATASETS} datasets`);
60
+ for (const ds of d['datasets']) {
61
+ const dataset = ds;
62
+ if (!Array.isArray(dataset['values']) || dataset['values'].length !== d['labels'].length) {
63
+ throw new Error("Each dataset's 'values' length must match 'labels' length");
64
+ }
65
+ for (const v of dataset['values']) {
66
+ if (typeof v !== 'number' || !isFinite(v))
67
+ throw new Error('Dataset values must be finite numbers');
68
+ }
69
+ }
70
+ return {
71
+ labels: d['labels'].map(String),
72
+ datasets: d['datasets'].map((ds) => ({
73
+ label: String(ds['label'] ?? ''),
74
+ values: ds['values'],
75
+ })),
76
+ };
77
+ }
78
+ function validatePieDonut(data) {
79
+ if (!data || typeof data !== 'object')
80
+ throw new Error("'data' is required");
81
+ const d = data;
82
+ if (!Array.isArray(d['labels']) || d['labels'].length === 0)
83
+ throw new Error("'data.labels' must be a non-empty array");
84
+ if (!Array.isArray(d['values']) || d['values'].length === 0)
85
+ throw new Error("'data.values' must be a non-empty array");
86
+ if (d['labels'].length !== d['values'].length)
87
+ throw new Error("'data.labels' and 'data.values' must have the same length");
88
+ if (d['labels'].length > MAX_CHART_LABELS)
89
+ throw new Error(`Cannot exceed ${MAX_CHART_LABELS} labels`);
90
+ for (const v of d['values']) {
91
+ if (typeof v !== 'number' || !isFinite(v) || v < 0)
92
+ throw new Error('Pie/donut values must be non-negative finite numbers');
93
+ }
94
+ const total = d['values'].reduce((s, v) => s + v, 0);
95
+ if (total <= 0)
96
+ throw new Error('At least one pie/donut value must be positive');
97
+ return {
98
+ labels: d['labels'].map(String),
99
+ values: d['values'],
100
+ };
101
+ }
102
+ function yScale(values) {
103
+ const dataMax = Math.max(...values, 0);
104
+ const dataMin = Math.min(...values, 0);
105
+ const range = dataMax - dataMin || 1;
106
+ const rawStep = range / 5;
107
+ const magnitude = Math.pow(10, Math.floor(Math.log10(rawStep)));
108
+ const step = Math.ceil(rawStep / magnitude) * magnitude;
109
+ const min = Math.floor(dataMin / step) * step;
110
+ const max = Math.ceil(dataMax / step) * step;
111
+ const gridCount = Math.round((max - min) / step);
112
+ return { min, max, gridCount };
113
+ }
114
+ function toY(value, min, max, chartH) {
115
+ return chartH - ((value - min) / (max - min)) * chartH;
116
+ }
117
+ function parseOptions(options) {
118
+ const displayW = parseDisplaySize(options.width, 'width');
119
+ const displayH = parseDisplaySize(options.height, 'height');
120
+ return {
121
+ renderW: displayW ?? DEFAULT_W,
122
+ renderH: displayH ?? DEFAULT_H,
123
+ displayW,
124
+ displayH,
125
+ bg: normalizeColor(typeof options.bg === 'string' ? options.bg : undefined, '#ffffff'),
126
+ title: typeof options.title === 'string' && options.title ? options.title : '',
127
+ showLegend: options.legend !== false,
128
+ mode: options.mode === 'data' ? 'data' : 'svg',
129
+ };
130
+ }
131
+ // ─── Bar chart ───
132
+ /**
133
+ * Renders a bar chart as SVG or returns its raw data.
134
+ *
135
+ * @param data - Chart data with labels and one or more datasets (each with a name and values array)
136
+ * @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
137
+ * @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
138
+ * @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
139
+ */
140
+ export function bar(data, options) {
141
+ const d = validateBarLine(data);
142
+ const { renderW, renderH, displayW, displayH, bg, title, showLegend, mode } = parseOptions(options);
143
+ const colors = getColors(options.colors, d.datasets.length);
144
+ const allValues = d.datasets.flatMap((ds) => ds.values);
145
+ const { min, max, gridCount } = yScale(allValues);
146
+ if (mode === 'data') {
147
+ return {
148
+ contentType: 'application/json',
149
+ body: {
150
+ type: 'bar',
151
+ labels: d.labels,
152
+ datasets: d.datasets,
153
+ scale: { min, max, gridCount },
154
+ },
155
+ };
156
+ }
157
+ const marginTop = MARGIN.top + (title ? TITLE_HEIGHT : 0);
158
+ const legendH = showLegend && d.datasets.some((ds) => ds.label) ? LEGEND_ROW_H + 10 : 0;
159
+ const chartW = renderW - MARGIN.left - MARGIN.right;
160
+ const chartH = renderH - marginTop - MARGIN.bottom - legendH;
161
+ const groupW = chartW / d.labels.length;
162
+ const barW = (groupW * 0.8) / d.datasets.length;
163
+ const groupPad = groupW * 0.1;
164
+ let svg = svgOpen(bg, renderW, renderH, displayW, displayH);
165
+ if (title)
166
+ svg += ` <text x="${renderW / 2}" y="${MARGIN.top}" text-anchor="middle" font-family="sans-serif" font-size="14" font-weight="bold" fill="#333">${escapeXml(title)}</text>\n`;
167
+ // Grid lines + Y labels
168
+ for (let i = 0; i <= gridCount; i++) {
169
+ const val = min + i * ((max - min) / gridCount);
170
+ const y = marginTop + toY(val, min, max, chartH);
171
+ svg += ` <line x1="${MARGIN.left}" y1="${y.toFixed(1)}" x2="${MARGIN.left + chartW}" y2="${y.toFixed(1)}" stroke="#e0e0e0" stroke-width="1"/>\n`;
172
+ svg += ` <text x="${MARGIN.left - 6}" y="${(y + 4).toFixed(1)}" text-anchor="end" font-family="sans-serif" font-size="11" fill="#666">${Number(val.toFixed(4))}</text>\n`;
173
+ }
174
+ // Bars
175
+ d.datasets.forEach((ds, di) => {
176
+ ds.values.forEach((val, li) => {
177
+ const x = MARGIN.left + groupPad + li * groupW + di * barW;
178
+ const bH = Math.abs(toY(val, min, max, chartH) - toY(0, min, max, chartH));
179
+ const y = marginTop + Math.min(toY(val, min, max, chartH), toY(0, min, max, chartH));
180
+ svg += ` <rect x="${x.toFixed(1)}" y="${y.toFixed(1)}" width="${barW.toFixed(1)}" height="${bH.toFixed(1)}" fill="${colors[di]}"/>\n`;
181
+ });
182
+ });
183
+ // X axis labels
184
+ d.labels.forEach((label, i) => {
185
+ const x = MARGIN.left + groupPad + i * groupW + (groupW * 0.8) / 2;
186
+ svg += ` <text x="${x.toFixed(1)}" y="${(marginTop + chartH + 20).toFixed(1)}" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#666">${escapeXml(label)}</text>\n`;
187
+ });
188
+ // Axes
189
+ svg += ` <line x1="${MARGIN.left}" y1="${marginTop}" x2="${MARGIN.left}" y2="${marginTop + chartH}" stroke="#999" stroke-width="1"/>\n`;
190
+ svg += ` <line x1="${MARGIN.left}" y1="${marginTop + chartH}" x2="${MARGIN.left + chartW}" y2="${marginTop + chartH}" stroke="#999" stroke-width="1"/>\n`;
191
+ // Legend
192
+ if (showLegend && d.datasets.some((ds) => ds.label)) {
193
+ const legendY = marginTop + chartH + 38;
194
+ let lx = MARGIN.left;
195
+ d.datasets.forEach((ds, di) => {
196
+ svg += ` <rect x="${lx}" y="${legendY - 10}" width="12" height="12" fill="${colors[di]}"/>\n`;
197
+ svg += ` <text x="${lx + 16}" y="${legendY}" font-family="sans-serif" font-size="11" fill="#666">${escapeXml(ds.label)}</text>\n`;
198
+ lx += 16 + ds.label.length * 7 + 12;
199
+ });
200
+ }
201
+ svg += '</svg>';
202
+ return { contentType: 'image/svg+xml', body: svg };
203
+ }
204
+ // ─── Line chart ───
205
+ /**
206
+ * Renders a line chart as SVG or returns its raw data.
207
+ *
208
+ * @param data - Chart data with labels and one or more datasets (each with a name and values array)
209
+ * @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
210
+ * @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
211
+ * @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
212
+ */
213
+ export function line(data, options) {
214
+ const d = validateBarLine(data);
215
+ const { renderW, renderH, displayW, displayH, bg, title, showLegend, mode } = parseOptions(options);
216
+ const colors = getColors(options.colors, d.datasets.length);
217
+ const allValues = d.datasets.flatMap((ds) => ds.values);
218
+ const { min, max, gridCount } = yScale(allValues);
219
+ if (mode === 'data') {
220
+ return {
221
+ contentType: 'application/json',
222
+ body: {
223
+ type: 'line',
224
+ labels: d.labels,
225
+ datasets: d.datasets,
226
+ scale: { min, max, gridCount },
227
+ },
228
+ };
229
+ }
230
+ const marginTop = MARGIN.top + (title ? TITLE_HEIGHT : 0);
231
+ const legendH = showLegend && d.datasets.some((ds) => ds.label) ? LEGEND_ROW_H + 10 : 0;
232
+ const chartW = renderW - MARGIN.left - MARGIN.right;
233
+ const chartH = renderH - marginTop - MARGIN.bottom - legendH;
234
+ const xStep = chartW / Math.max(d.labels.length - 1, 1);
235
+ let svg = svgOpen(bg, renderW, renderH, displayW, displayH);
236
+ if (title)
237
+ svg += ` <text x="${renderW / 2}" y="${MARGIN.top}" text-anchor="middle" font-family="sans-serif" font-size="14" font-weight="bold" fill="#333">${escapeXml(title)}</text>\n`;
238
+ // Grid lines + Y labels
239
+ for (let i = 0; i <= gridCount; i++) {
240
+ const val = min + i * ((max - min) / gridCount);
241
+ const y = marginTop + toY(val, min, max, chartH);
242
+ svg += ` <line x1="${MARGIN.left}" y1="${y.toFixed(1)}" x2="${MARGIN.left + chartW}" y2="${y.toFixed(1)}" stroke="#e0e0e0" stroke-width="1"/>\n`;
243
+ svg += ` <text x="${MARGIN.left - 6}" y="${(y + 4).toFixed(1)}" text-anchor="end" font-family="sans-serif" font-size="11" fill="#666">${Number(val.toFixed(4))}</text>\n`;
244
+ }
245
+ // Axes (drawn before data so points appear on top)
246
+ svg += ` <line x1="${MARGIN.left}" y1="${marginTop}" x2="${MARGIN.left}" y2="${marginTop + chartH}" stroke="#999" stroke-width="1"/>\n`;
247
+ svg += ` <line x1="${MARGIN.left}" y1="${marginTop + chartH}" x2="${MARGIN.left + chartW}" y2="${marginTop + chartH}" stroke="#999" stroke-width="1"/>\n`;
248
+ // Lines + points
249
+ d.datasets.forEach((ds, di) => {
250
+ const points = ds.values
251
+ .map((val, i) => {
252
+ const x = MARGIN.left + i * (d.labels.length > 1 ? xStep : chartW / 2);
253
+ const y = marginTop + toY(val, min, max, chartH);
254
+ return `${x.toFixed(1)},${y.toFixed(1)}`;
255
+ })
256
+ .join(' ');
257
+ svg += ` <polyline points="${points}" fill="none" stroke="${colors[di]}" stroke-width="2" stroke-linejoin="round"/>\n`;
258
+ ds.values.forEach((val, i) => {
259
+ const x = MARGIN.left + i * (d.labels.length > 1 ? xStep : chartW / 2);
260
+ const y = marginTop + toY(val, min, max, chartH);
261
+ svg += ` <circle cx="${x.toFixed(1)}" cy="${y.toFixed(1)}" r="3" fill="${colors[di]}"/>\n`;
262
+ });
263
+ });
264
+ // X axis labels
265
+ d.labels.forEach((label, i) => {
266
+ const x = MARGIN.left + i * (d.labels.length > 1 ? xStep : chartW / 2);
267
+ svg += ` <text x="${x.toFixed(1)}" y="${(marginTop + chartH + 20).toFixed(1)}" text-anchor="middle" font-family="sans-serif" font-size="11" fill="#666">${escapeXml(label)}</text>\n`;
268
+ });
269
+ // Legend
270
+ if (showLegend && d.datasets.some((ds) => ds.label)) {
271
+ const legendY = marginTop + chartH + 38;
272
+ let lx = MARGIN.left;
273
+ d.datasets.forEach((ds, di) => {
274
+ svg += ` <rect x="${lx}" y="${legendY - 10}" width="12" height="12" fill="${colors[di]}"/>\n`;
275
+ svg += ` <text x="${lx + 16}" y="${legendY}" font-family="sans-serif" font-size="11" fill="#666">${escapeXml(ds.label)}</text>\n`;
276
+ lx += 16 + ds.label.length * 7 + 12;
277
+ });
278
+ }
279
+ svg += '</svg>';
280
+ return { contentType: 'image/svg+xml', body: svg };
281
+ }
282
+ // ─── Pie / Donut ───
283
+ function pieArc(cx, cy, r, startAngle, endAngle, innerR = 0) {
284
+ const start = { x: cx + r * Math.cos(startAngle), y: cy + r * Math.sin(startAngle) };
285
+ const end = { x: cx + r * Math.cos(endAngle), y: cy + r * Math.sin(endAngle) };
286
+ const largeArc = endAngle - startAngle > Math.PI ? 1 : 0;
287
+ if (innerR === 0) {
288
+ return [
289
+ `M ${cx.toFixed(2)} ${cy.toFixed(2)}`,
290
+ `L ${start.x.toFixed(2)} ${start.y.toFixed(2)}`,
291
+ `A ${r} ${r} 0 ${largeArc} 1 ${end.x.toFixed(2)} ${end.y.toFixed(2)}`,
292
+ 'Z',
293
+ ].join(' ');
294
+ }
295
+ const innerStart = { x: cx + innerR * Math.cos(endAngle), y: cy + innerR * Math.sin(endAngle) };
296
+ const innerEnd = { x: cx + innerR * Math.cos(startAngle), y: cy + innerR * Math.sin(startAngle) };
297
+ return [
298
+ `M ${start.x.toFixed(2)} ${start.y.toFixed(2)}`,
299
+ `A ${r} ${r} 0 ${largeArc} 1 ${end.x.toFixed(2)} ${end.y.toFixed(2)}`,
300
+ `L ${innerStart.x.toFixed(2)} ${innerStart.y.toFixed(2)}`,
301
+ `A ${innerR} ${innerR} 0 ${largeArc} 0 ${innerEnd.x.toFixed(2)} ${innerEnd.y.toFixed(2)}`,
302
+ 'Z',
303
+ ].join(' ');
304
+ }
305
+ function renderPieDonut(type, data, options, isDonut) {
306
+ const d = validatePieDonut(data);
307
+ const { renderW, renderH, displayW, displayH, bg, title, showLegend, mode } = parseOptions(options);
308
+ const colors = getColors(options.colors, d.labels.length);
309
+ const total = d.values.reduce((s, v) => s + v, 0);
310
+ if (mode === 'data') {
311
+ return {
312
+ contentType: 'application/json',
313
+ body: {
314
+ type,
315
+ total,
316
+ slices: d.labels.map((label, i) => ({
317
+ label,
318
+ value: d.values[i],
319
+ percentage: Number(((d.values[i] / total) * 100).toFixed(2)),
320
+ })),
321
+ },
322
+ };
323
+ }
324
+ const titleOffset = title ? TITLE_HEIGHT : 0;
325
+ const legendH = showLegend ? d.labels.length * LEGEND_ROW_H + 10 : 0;
326
+ const chartAreaH = renderH - titleOffset - MARGIN.top - legendH - (showLegend ? 10 : 0);
327
+ const cx = renderW / 2;
328
+ const cy = titleOffset + MARGIN.top + chartAreaH / 2;
329
+ const r = Math.max(10, Math.min(cx - MARGIN.left, chartAreaH / 2 - 10));
330
+ const innerR = isDonut ? r * 0.55 : 0;
331
+ let svg = svgOpen(bg, renderW, renderH, displayW, displayH);
332
+ if (title)
333
+ svg += ` <text x="${renderW / 2}" y="${MARGIN.top + titleOffset - 10}" text-anchor="middle" font-family="sans-serif" font-size="14" font-weight="bold" fill="#333">${escapeXml(title)}</text>\n`;
334
+ let startAngle = -Math.PI / 2;
335
+ d.values.forEach((val, i) => {
336
+ if (val === 0)
337
+ return;
338
+ const sweep = (val / total) * 2 * Math.PI;
339
+ const endAngle = startAngle + sweep;
340
+ const path = pieArc(cx, cy, r, startAngle, endAngle, innerR);
341
+ svg += ` <path d="${path}" fill="${colors[i]}" stroke="${bg}" stroke-width="1.5"/>\n`;
342
+ startAngle = endAngle;
343
+ });
344
+ // Legend
345
+ if (showLegend) {
346
+ const legendStartY = titleOffset + MARGIN.top + chartAreaH + 10;
347
+ d.labels.forEach((label, i) => {
348
+ const pct = ((d.values[i] / total) * 100).toFixed(1);
349
+ const y = legendStartY + i * LEGEND_ROW_H;
350
+ svg += ` <rect x="${MARGIN.left}" y="${y - 10}" width="12" height="12" fill="${colors[i]}"/>\n`;
351
+ svg += ` <text x="${MARGIN.left + 18}" y="${y}" font-family="sans-serif" font-size="11" fill="#666">${escapeXml(label)} (${pct}%)</text>\n`;
352
+ });
353
+ }
354
+ svg += '</svg>';
355
+ return { contentType: 'image/svg+xml', body: svg };
356
+ }
357
+ /**
358
+ * Renders a pie chart as SVG or returns its raw data.
359
+ *
360
+ * @param data - Chart data with labels and a single dataset (each with a name and values array)
361
+ * @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
362
+ * @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
363
+ * @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
364
+ */
365
+ export function pie(data, options) {
366
+ return renderPieDonut('pie', data, options, false);
367
+ }
368
+ /**
369
+ * Renders a donut chart as SVG or returns its raw data.
370
+ *
371
+ * @param data - Chart data with labels and a single dataset (each with a name and values array)
372
+ * @param options - Chart options: title, width, height, colors, bg, legend (default true), mode ("svg" or "data")
373
+ * @returns ChartOutput with contentType image/svg+xml (SVG string) or application/json (raw data) depending on mode
374
+ * @throws Error if data is missing, malformed, or exceeds the maximum number of labels or datasets
375
+ */
376
+ export function donut(data, options) {
377
+ return renderPieDonut('donut', data, options, true);
378
+ }
379
+ //# sourceMappingURL=chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../src/modules/v5/chart.ts"],"names":[],"mappings":"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"}