@lytjs/plugin-chart 5.0.1 → 6.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.
package/dist/index.js DELETED
@@ -1,433 +0,0 @@
1
- // Lyt.js 图表插件
2
- //
3
- // 用法:
4
- // import { createChart } from '@lytjs/plugin-chart'
5
- // const chart = createChart(document.getElementById('chart'), {
6
- // type: 'bar',
7
- // data: {
8
- // labels: ['一月', '二月', '三月', '四月', '五月'],
9
- // datasets: [
10
- // { label: '销售额', data: [120, 200, 150, 80, 170], color: '#42b883' },
11
- // ],
12
- // },
13
- // options: {
14
- // title: '月度销售统计',
15
- // width: 600,
16
- // height: 400,
17
- // },
18
- // })
19
- // // 更新数据:chart.update(newData)
20
- // // 销毁图表:chart.destroy()
21
- // ======================== 默认配置 ========================
22
- const DEFAULT_COLORS = [
23
- '#42b883', '#3b82f6', '#f59e0b', '#ef4444', '#8b5cf6',
24
- '#ec4899', '#14b8a6', '#f97316', '#06b6d4', '#84cc16',
25
- ];
26
- const DEFAULT_OPTIONS = {
27
- title: '',
28
- width: 600,
29
- height: 400,
30
- showGrid: true,
31
- showLegend: true,
32
- showValues: false,
33
- animationDuration: 500,
34
- padding: { top: 40, right: 30, bottom: 50, left: 60 },
35
- yMax: 0,
36
- yMin: 0,
37
- };
38
- // ======================== 工具函数 ========================
39
- /**
40
- * 获取设备像素比,用于高清屏适配
41
- */
42
- function getDevicePixelRatio() {
43
- return typeof window !== 'undefined' ? (window.devicePixelRatio || 1) : 1;
44
- }
45
- /**
46
- * 计算合适的 Y 轴刻度
47
- */
48
- function calculateYTicks(max, min, tickCount = 5) {
49
- const range = max - min;
50
- if (range === 0)
51
- return [min - 1, min, min + 1];
52
- const rawStep = range / (tickCount - 1);
53
- const magnitude = Math.pow(10, Math.floor(Math.log10(rawStep)));
54
- const normalized = rawStep / magnitude;
55
- let step;
56
- if (normalized <= 1)
57
- step = magnitude;
58
- else if (normalized <= 2)
59
- step = 2 * magnitude;
60
- else if (normalized <= 5)
61
- step = 5 * magnitude;
62
- else
63
- step = 10 * magnitude;
64
- const ticks = [];
65
- let tick = Math.floor(min / step) * step;
66
- while (tick <= max + step * 0.5) {
67
- ticks.push(Math.round(tick * 1e10) / 1e10);
68
- tick += step;
69
- }
70
- return ticks;
71
- }
72
- /**
73
- * 格式化数值显示
74
- */
75
- function formatNumber(n) {
76
- if (n >= 1e6)
77
- return (n / 1e6).toFixed(1) + 'M';
78
- if (n >= 1e3)
79
- return (n / 1e3).toFixed(1) + 'K';
80
- return String(Math.round(n * 100) / 100);
81
- }
82
- // ======================== 核心绘制 ========================
83
- /**
84
- * 绘制柱状图
85
- */
86
- function drawBarChart(ctx, data, options, progress) {
87
- const { width, height, padding, showGrid, showLegend, showValues, title } = options;
88
- const plotWidth = width - padding.left - padding.right;
89
- const plotHeight = height - padding.top - padding.bottom;
90
- // 计算数据范围
91
- let allValues = [];
92
- for (const ds of data.datasets) {
93
- allValues = allValues.concat(ds.data);
94
- }
95
- const dataMax = options.yMax || Math.max(...allValues, 0);
96
- const dataMin = options.yMin || Math.min(...allValues, 0);
97
- const yTicks = calculateYTicks(dataMax, dataMin);
98
- const yMin = yTicks[0];
99
- const yMax = yTicks[yTicks.length - 1];
100
- const yRange = yMax - yMin || 1;
101
- // 清空画布
102
- ctx.clearRect(0, 0, width, height);
103
- // 绘制标题
104
- if (title) {
105
- ctx.fillStyle = '#2c3e50';
106
- ctx.font = 'bold 16px -apple-system, BlinkMacSystemFont, sans-serif';
107
- ctx.textAlign = 'center';
108
- ctx.fillText(title, width / 2, 24);
109
- }
110
- // 绘制网格线和 Y 轴刻度
111
- if (showGrid) {
112
- ctx.strokeStyle = '#e5e7eb';
113
- ctx.lineWidth = 1;
114
- ctx.fillStyle = '#95a5a6';
115
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
116
- ctx.textAlign = 'right';
117
- for (const tick of yTicks) {
118
- const y = padding.top + plotHeight - ((tick - yMin) / yRange) * plotHeight;
119
- ctx.beginPath();
120
- ctx.moveTo(padding.left, y);
121
- ctx.lineTo(width - padding.right, y);
122
- ctx.stroke();
123
- ctx.fillText(formatNumber(tick), padding.left - 8, y + 4);
124
- }
125
- }
126
- // 绘制柱状图
127
- const groupCount = data.labels.length;
128
- const barGroupWidth = plotWidth / groupCount;
129
- const barWidth = Math.min(barGroupWidth * 0.6 / data.datasets.length, 50);
130
- const groupPadding = (barGroupWidth - barWidth * data.datasets.length) / 2;
131
- for (let d = 0; d < data.datasets.length; d++) {
132
- const ds = data.datasets[d];
133
- const color = ds.color || DEFAULT_COLORS[d % DEFAULT_COLORS.length];
134
- for (let i = 0; i < ds.data.length; i++) {
135
- const value = ds.data[i] * progress;
136
- const x = padding.left + i * barGroupWidth + groupPadding + d * barWidth;
137
- const barHeight = ((value - yMin) / yRange) * plotHeight;
138
- const y = padding.top + plotHeight - barHeight;
139
- // 绘制柱子
140
- ctx.fillStyle = color;
141
- ctx.beginPath();
142
- const radius = Math.min(4, barWidth / 4);
143
- const bh = Math.max(0, barHeight);
144
- if (bh > radius * 2) {
145
- ctx.moveTo(x, y + radius);
146
- ctx.arcTo(x, y, x + radius, y, radius);
147
- ctx.arcTo(x + barWidth, y, x + barWidth, y + radius, radius);
148
- ctx.lineTo(x + barWidth, padding.top + plotHeight);
149
- ctx.lineTo(x, padding.top + plotHeight);
150
- }
151
- else {
152
- ctx.rect(x, y, barWidth, bh);
153
- }
154
- ctx.fill();
155
- // 绘制数值标签
156
- if (showValues && progress >= 1) {
157
- ctx.fillStyle = '#2c3e50';
158
- ctx.font = '11px -apple-system, BlinkMacSystemFont, sans-serif';
159
- ctx.textAlign = 'center';
160
- ctx.fillText(formatNumber(ds.data[i]), x + barWidth / 2, y - 6);
161
- }
162
- }
163
- }
164
- // 绘制 X 轴标签
165
- ctx.fillStyle = '#6c757d';
166
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
167
- ctx.textAlign = 'center';
168
- for (let i = 0; i < data.labels.length; i++) {
169
- const x = padding.left + i * barGroupWidth + barGroupWidth / 2;
170
- ctx.fillText(data.labels[i], x, height - padding.bottom + 20);
171
- }
172
- // 绘制图例
173
- if (showLegend && data.datasets.length > 1) {
174
- const legendY = padding.top - 10;
175
- let legendX = width / 2 - (data.datasets.length * 80) / 2;
176
- for (let d = 0; d < data.datasets.length; d++) {
177
- const ds = data.datasets[d];
178
- const color = ds.color || DEFAULT_COLORS[d % DEFAULT_COLORS.length];
179
- ctx.fillStyle = color;
180
- ctx.fillRect(legendX, legendY - 8, 12, 12);
181
- ctx.fillStyle = '#2c3e50';
182
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
183
- ctx.textAlign = 'left';
184
- ctx.fillText(ds.label, legendX + 16, legendY + 2);
185
- legendX += ctx.measureText(ds.label).width + 36;
186
- }
187
- }
188
- }
189
- /**
190
- * 绘制折线图
191
- */
192
- function drawLineChart(ctx, data, options, progress) {
193
- const { width, height, padding, showGrid, showLegend, showValues, title } = options;
194
- const plotWidth = width - padding.left - padding.right;
195
- const plotHeight = height - padding.top - padding.bottom;
196
- // 计算数据范围
197
- let allValues = [];
198
- for (const ds of data.datasets) {
199
- allValues = allValues.concat(ds.data);
200
- }
201
- const dataMax = options.yMax || Math.max(...allValues, 0);
202
- const dataMin = options.yMin || Math.min(...allValues, 0);
203
- const yTicks = calculateYTicks(dataMax, dataMin);
204
- const yMin = yTicks[0];
205
- const yMax = yTicks[yTicks.length - 1];
206
- const yRange = yMax - yMin || 1;
207
- // 清空画布
208
- ctx.clearRect(0, 0, width, height);
209
- // 绘制标题
210
- if (title) {
211
- ctx.fillStyle = '#2c3e50';
212
- ctx.font = 'bold 16px -apple-system, BlinkMacSystemFont, sans-serif';
213
- ctx.textAlign = 'center';
214
- ctx.fillText(title, width / 2, 24);
215
- }
216
- // 绘制网格线和 Y 轴刻度
217
- if (showGrid) {
218
- ctx.strokeStyle = '#e5e7eb';
219
- ctx.lineWidth = 1;
220
- ctx.fillStyle = '#95a5a6';
221
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
222
- ctx.textAlign = 'right';
223
- for (const tick of yTicks) {
224
- const y = padding.top + plotHeight - ((tick - yMin) / yRange) * plotHeight;
225
- ctx.beginPath();
226
- ctx.moveTo(padding.left, y);
227
- ctx.lineTo(width - padding.right, y);
228
- ctx.stroke();
229
- ctx.fillText(formatNumber(tick), padding.left - 8, y + 4);
230
- }
231
- }
232
- // 绘制折线
233
- const pointSpacing = data.labels.length > 1 ? plotWidth / (data.labels.length - 1) : 0;
234
- for (let d = 0; d < data.datasets.length; d++) {
235
- const ds = data.datasets[d];
236
- const color = ds.color || DEFAULT_COLORS[d % DEFAULT_COLORS.length];
237
- // 绘制填充区域
238
- ctx.beginPath();
239
- ctx.moveTo(padding.left, padding.top + plotHeight);
240
- for (let i = 0; i < ds.data.length; i++) {
241
- const value = ds.data[i] * progress;
242
- const x = padding.left + i * pointSpacing;
243
- const y = padding.top + plotHeight - ((value - yMin) / yRange) * plotHeight;
244
- if (i === 0)
245
- ctx.lineTo(x, y);
246
- else
247
- ctx.lineTo(x, y);
248
- }
249
- ctx.lineTo(padding.left + (ds.data.length - 1) * pointSpacing, padding.top + plotHeight);
250
- ctx.closePath();
251
- ctx.fillStyle = color + '15';
252
- ctx.fill();
253
- // 绘制线条
254
- ctx.beginPath();
255
- ctx.strokeStyle = color;
256
- ctx.lineWidth = 2.5;
257
- ctx.lineJoin = 'round';
258
- ctx.lineCap = 'round';
259
- for (let i = 0; i < ds.data.length; i++) {
260
- const value = ds.data[i] * progress;
261
- const x = padding.left + i * pointSpacing;
262
- const y = padding.top + plotHeight - ((value - yMin) / yRange) * plotHeight;
263
- if (i === 0)
264
- ctx.moveTo(x, y);
265
- else
266
- ctx.lineTo(x, y);
267
- }
268
- ctx.stroke();
269
- // 绘制数据点
270
- for (let i = 0; i < ds.data.length; i++) {
271
- const value = ds.data[i] * progress;
272
- const x = padding.left + i * pointSpacing;
273
- const y = padding.top + plotHeight - ((value - yMin) / yRange) * plotHeight;
274
- ctx.beginPath();
275
- ctx.arc(x, y, 4, 0, Math.PI * 2);
276
- ctx.fillStyle = '#fff';
277
- ctx.fill();
278
- ctx.strokeStyle = color;
279
- ctx.lineWidth = 2;
280
- ctx.stroke();
281
- // 数值标签
282
- if (showValues && progress >= 1) {
283
- ctx.fillStyle = '#2c3e50';
284
- ctx.font = '11px -apple-system, BlinkMacSystemFont, sans-serif';
285
- ctx.textAlign = 'center';
286
- ctx.fillText(formatNumber(ds.data[i]), x, y - 10);
287
- }
288
- }
289
- }
290
- // 绘制 X 轴标签
291
- ctx.fillStyle = '#6c757d';
292
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
293
- ctx.textAlign = 'center';
294
- for (let i = 0; i < data.labels.length; i++) {
295
- const x = padding.left + i * pointSpacing;
296
- ctx.fillText(data.labels[i], x, height - padding.bottom + 20);
297
- }
298
- // 绘制图例
299
- if (showLegend && data.datasets.length > 1) {
300
- const legendY = padding.top - 10;
301
- let legendX = width / 2 - (data.datasets.length * 80) / 2;
302
- for (let d = 0; d < data.datasets.length; d++) {
303
- const ds = data.datasets[d];
304
- const color = ds.color || DEFAULT_COLORS[d % DEFAULT_COLORS.length];
305
- ctx.strokeStyle = color;
306
- ctx.lineWidth = 2.5;
307
- ctx.beginPath();
308
- ctx.moveTo(legendX, legendY - 2);
309
- ctx.lineTo(legendX + 16, legendY - 2);
310
- ctx.stroke();
311
- ctx.fillStyle = '#2c3e50';
312
- ctx.font = '12px -apple-system, BlinkMacSystemFont, sans-serif';
313
- ctx.textAlign = 'left';
314
- ctx.fillText(ds.label, legendX + 22, legendY + 2);
315
- legendX += ctx.measureText(ds.label).width + 42;
316
- }
317
- }
318
- }
319
- // ======================== 图表创建 ========================
320
- /**
321
- * 创建图表实例
322
- *
323
- * @param container - 容器元素或 Canvas 元素
324
- * @param config - 图表配置
325
- * @returns 图表实例
326
- */
327
- function createChart(container, config) {
328
- // 获取或创建 Canvas
329
- let canvas;
330
- if (container instanceof HTMLCanvasElement) {
331
- canvas = container;
332
- }
333
- else {
334
- canvas = document.createElement('canvas');
335
- container.appendChild(canvas);
336
- }
337
- const ctx = canvas.getContext('2d');
338
- // 合并选项(逐个合并可选属性以确保非 undefined)
339
- const userOpts = config.options;
340
- const userPadding = userOpts?.padding;
341
- const opts = {
342
- title: userOpts?.title ?? DEFAULT_OPTIONS.title,
343
- width: userOpts?.width ?? DEFAULT_OPTIONS.width,
344
- height: userOpts?.height ?? DEFAULT_OPTIONS.height,
345
- showGrid: userOpts?.showGrid ?? DEFAULT_OPTIONS.showGrid,
346
- showLegend: userOpts?.showLegend ?? DEFAULT_OPTIONS.showLegend,
347
- showValues: userOpts?.showValues ?? DEFAULT_OPTIONS.showValues,
348
- animationDuration: userOpts?.animationDuration ?? DEFAULT_OPTIONS.animationDuration,
349
- padding: {
350
- top: userPadding?.top ?? DEFAULT_OPTIONS.padding.top,
351
- right: userPadding?.right ?? DEFAULT_OPTIONS.padding.right,
352
- bottom: userPadding?.bottom ?? DEFAULT_OPTIONS.padding.bottom,
353
- left: userPadding?.left ?? DEFAULT_OPTIONS.padding.left,
354
- },
355
- yMax: userOpts?.yMax ?? DEFAULT_OPTIONS.yMax,
356
- yMin: userOpts?.yMin ?? DEFAULT_OPTIONS.yMin,
357
- };
358
- // 设置 Canvas 尺寸(高清屏适配)
359
- const dpr = getDevicePixelRatio();
360
- let currentWidth = opts.width;
361
- let currentHeight = opts.height;
362
- let currentData = config.data;
363
- function setupCanvas() {
364
- canvas.width = currentWidth * dpr;
365
- canvas.height = currentHeight * dpr;
366
- canvas.style.width = currentWidth + 'px';
367
- canvas.style.height = currentHeight + 'px';
368
- ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
369
- }
370
- // 动画绘制
371
- let animationId = null;
372
- function draw(progress) {
373
- if (config.type === 'bar') {
374
- drawBarChart(ctx, currentData, opts, progress);
375
- }
376
- else {
377
- drawLineChart(ctx, currentData, opts, progress);
378
- }
379
- }
380
- function animate() {
381
- if (animationId !== null) {
382
- cancelAnimationFrame(animationId);
383
- }
384
- const startTime = performance.now();
385
- const duration = opts.animationDuration;
386
- function frame(now) {
387
- const elapsed = now - startTime;
388
- const progress = Math.min(elapsed / duration, 1);
389
- // easeOutCubic
390
- const eased = 1 - Math.pow(1 - progress, 3);
391
- draw(eased);
392
- if (progress < 1) {
393
- animationId = requestAnimationFrame(frame);
394
- }
395
- else {
396
- animationId = null;
397
- }
398
- }
399
- animationId = requestAnimationFrame(frame);
400
- }
401
- // 初始绘制
402
- setupCanvas();
403
- animate();
404
- // 返回图表实例
405
- return {
406
- update(data) {
407
- currentData = data;
408
- setupCanvas();
409
- animate();
410
- },
411
- resize(width, height) {
412
- currentWidth = width;
413
- currentHeight = height;
414
- setupCanvas();
415
- draw(1);
416
- },
417
- destroy() {
418
- if (animationId !== null) {
419
- cancelAnimationFrame(animationId);
420
- animationId = null;
421
- }
422
- ctx.clearRect(0, 0, currentWidth, currentHeight);
423
- if (canvas.parentElement && container instanceof HTMLElement && canvas !== container) {
424
- container.removeChild(canvas);
425
- }
426
- },
427
- getContext() {
428
- return ctx;
429
- },
430
- };
431
- }
432
- export { createChart };
433
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}