@agions/taroviz 1.2.0 → 1.3.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/README.md +53 -41
- package/dist/cjs/index.js +1 -0
- package/dist/esm/index.js +9103 -0
- package/package.json +99 -10
- package/src/adapters/__tests__/index.test.ts +2 -2
- package/src/adapters/h5/index.ts +1 -1
- package/src/adapters/index.ts +99 -167
- package/src/charts/bar/index.tsx +2 -11
- package/src/charts/common/BaseChartWrapper.tsx +2 -2
- package/src/charts/funnel/index.tsx +2 -17
- package/src/charts/gauge/index.tsx +2 -17
- package/src/charts/heatmap/index.tsx +2 -17
- package/src/charts/index.ts +6 -1
- package/src/charts/line/index.tsx +2 -11
- package/src/charts/pie/index.tsx +3 -6
- package/src/charts/radar/index.tsx +2 -17
- package/src/charts/sankey/index.tsx +18 -0
- package/src/charts/scatter/index.tsx +2 -17
- package/src/charts/sunburst/index.tsx +18 -0
- package/src/charts/treemap/index.tsx +18 -0
- package/src/charts/types.ts +761 -30
- package/src/charts/utils.ts +1 -1
- package/src/core/__tests__/platform.test.ts +1 -1
- package/src/core/animation/AnimationManager.ts +2 -2
- package/src/core/components/Annotation.tsx +346 -0
- package/src/core/components/BaseChart.tsx +12 -18
- package/src/core/components/ErrorBoundary.tsx +153 -0
- package/src/core/components/LazyChart.tsx +200 -0
- package/src/core/echarts.ts +80 -0
- package/src/core/index.ts +4 -1
- package/src/core/themes/ThemeManager.ts +628 -0
- package/src/core/utils/__tests__/common.test.ts +1 -1
- package/src/core/utils/chartInstances.ts +2 -2
- package/src/core/utils/codeGenerator/CodeGenerator.ts +2 -2
- package/src/core/utils/codeGenerator/types.ts +0 -2
- package/src/core/utils/configGenerator/ConfigGenerator.ts +12 -12
- package/src/core/utils/debug/DebugPanel.tsx +1 -1
- package/src/core/utils/debug/debugger.ts +1 -1
- package/src/core/utils/export/ExportUtils.ts +385 -0
- package/src/core/utils/index.ts +1 -1
- package/src/core/utils/performance/PerformanceAnalyzer.ts +5 -5
- package/src/editor/ThemeEditor.tsx +9 -9
- package/src/hooks/index.ts +441 -61
- package/src/index.ts +72 -4
- package/src/main.tsx +1 -1
- package/src/themes/index.ts +651 -256
- package/dist/index.esm.js +0 -68685
package/src/charts/types.ts
CHANGED
|
@@ -1,146 +1,877 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TaroViz Charts 类型定义
|
|
2
|
+
* TaroViz Charts 类型定义 - 增强版
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
4
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
5
|
+
import type { EChartsOption, ECharts } from 'echarts';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// 基础类型定义
|
|
9
|
+
// ============================================================================
|
|
10
|
+
|
|
11
|
+
/** 尺寸类型 */
|
|
12
|
+
export type SizeValue = number | string | 'auto';
|
|
13
|
+
|
|
14
|
+
/** 尺寸配置 */
|
|
15
|
+
export interface SizeConfig {
|
|
16
|
+
width?: SizeValue;
|
|
17
|
+
height?: SizeValue;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** 主题配置 */
|
|
21
|
+
export interface ThemeConfig {
|
|
22
|
+
/** 主题名称 */
|
|
23
|
+
name?: string;
|
|
24
|
+
/** 主题对象 */
|
|
25
|
+
theme?: Record<string, unknown>;
|
|
26
|
+
/** 是否为暗色主题 */
|
|
27
|
+
isDark?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** 渲染器类型 */
|
|
31
|
+
export type RendererType = 'canvas' | 'svg';
|
|
32
|
+
|
|
33
|
+
/** 图表加载状态 */
|
|
34
|
+
export interface LoadingState {
|
|
35
|
+
/** 是否显示加载 */
|
|
36
|
+
show: boolean;
|
|
37
|
+
/** 加载文本 */
|
|
38
|
+
text?: string;
|
|
39
|
+
/** 加载动画配置 */
|
|
40
|
+
options?: LoadingOptions;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** 加载动画配置 */
|
|
44
|
+
export interface LoadingOptions {
|
|
45
|
+
/** 动画效果 */
|
|
46
|
+
effect?: 'spin' | 'circle' | 'rect' | 'triangle' | 'dotted';
|
|
47
|
+
/** 颜色 */
|
|
48
|
+
color?: string;
|
|
49
|
+
/** 背景色 */
|
|
50
|
+
backgroundColor?: string;
|
|
51
|
+
/** 文字颜色 */
|
|
52
|
+
textColor?: string;
|
|
53
|
+
/** 文字大小 */
|
|
54
|
+
textFontSize?: number;
|
|
55
|
+
/** 动画时长 */
|
|
56
|
+
duration?: number;
|
|
57
|
+
/** 遮罩层颜色 */
|
|
58
|
+
maskColor?: string;
|
|
59
|
+
/** 是否显示遮罩 */
|
|
60
|
+
showMask?: boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// 事件回调类型
|
|
65
|
+
// ============================================================================
|
|
66
|
+
|
|
67
|
+
/** 图表初始化回调 */
|
|
68
|
+
export type ChartInitCallback = (chart: ECharts) => void;
|
|
69
|
+
|
|
70
|
+
/** 图表就绪回调 */
|
|
71
|
+
export type ChartReadyCallback = (chart: ECharts) => void;
|
|
72
|
+
|
|
73
|
+
/** 图表事件回调 */
|
|
74
|
+
export type ChartEventCallback<T = unknown> = (params: T) => void;
|
|
75
|
+
|
|
76
|
+
/** 图表事件映射 */
|
|
77
|
+
export interface ChartEvents {
|
|
78
|
+
/** 点击事件 */
|
|
79
|
+
click?: ChartEventCallback;
|
|
80
|
+
/** 双击事件 */
|
|
81
|
+
dblclick?: ChartEventCallback;
|
|
82
|
+
/** 右键菜单事件 */
|
|
83
|
+
contextmenu?: ChartEventCallback;
|
|
84
|
+
/** 鼠标按下事件 */
|
|
85
|
+
mousedown?: ChartEventCallback;
|
|
86
|
+
/** 鼠标释放事件 */
|
|
87
|
+
mouseup?: ChartEventCallback;
|
|
88
|
+
/** 鼠标悬停事件 */
|
|
89
|
+
mouseover?: ChartEventCallback;
|
|
90
|
+
/** 鼠标离开事件 */
|
|
91
|
+
mouseout?: ChartEventCallback;
|
|
92
|
+
/** 数据范围改变事件 */
|
|
93
|
+
datazoom?: ChartEventCallback;
|
|
94
|
+
/** 图例选择变化事件 */
|
|
95
|
+
legendselectchanged?: ChartEventCallback;
|
|
96
|
+
/** 图例悬停事件 */
|
|
97
|
+
legendhoverlink?: ChartEventCallback;
|
|
98
|
+
/** 序列数据项高亮 */
|
|
99
|
+
highlight?: ChartEventCallback;
|
|
100
|
+
/** 序列数据项取消高亮 */
|
|
101
|
+
downplay?: ChartEventCallback;
|
|
102
|
+
/** 工具提示触发事件 */
|
|
103
|
+
showtip?: ChartEventCallback;
|
|
104
|
+
/** 隐藏工具提示事件 */
|
|
105
|
+
hidetip?: ChartEventCallback;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// 响应式配置
|
|
110
|
+
// ============================================================================
|
|
111
|
+
|
|
112
|
+
/** 响应式断点 */
|
|
113
|
+
export interface ResponsiveBreakpoints {
|
|
114
|
+
/** 小屏幕 (< 576px) */
|
|
115
|
+
sm?: Partial<BaseChartProps>;
|
|
116
|
+
/** 中等屏幕 (≥ 576px) */
|
|
117
|
+
md?: Partial<BaseChartProps>;
|
|
118
|
+
/** 大屏幕 (≥ 992px) */
|
|
119
|
+
lg?: Partial<BaseChartProps>;
|
|
120
|
+
/** 超大屏幕 (≥ 1200px) */
|
|
121
|
+
xl?: Partial<BaseChartProps>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** 响应式配置 */
|
|
125
|
+
export interface ResponsiveConfig {
|
|
126
|
+
/** 是否启用响应式 */
|
|
127
|
+
enabled?: boolean;
|
|
128
|
+
/** 断点配置 */
|
|
129
|
+
breakpoints?: ResponsiveBreakpoints;
|
|
130
|
+
/** 切换去抖延迟 (ms) */
|
|
131
|
+
debounceDelay?: number;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// 数据类型
|
|
136
|
+
// ============================================================================
|
|
137
|
+
|
|
138
|
+
/** 数据系列 */
|
|
139
|
+
export interface DataSeries<T = unknown> {
|
|
140
|
+
/** 系列名称 */
|
|
141
|
+
name: string;
|
|
142
|
+
/** 系列数据 */
|
|
143
|
+
data: T[];
|
|
144
|
+
/** 系列类型 */
|
|
145
|
+
type?: string;
|
|
146
|
+
/** 系列样式 */
|
|
147
|
+
style?: Record<string, unknown>;
|
|
148
|
+
/** 是否禁用 */
|
|
149
|
+
disabled?: boolean;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** 图表数据 */
|
|
153
|
+
export interface ChartData {
|
|
154
|
+
/** 类别轴数据 (用于折线图、柱状图等) */
|
|
155
|
+
categories?: (string | number)[];
|
|
156
|
+
/** 数据系列 */
|
|
157
|
+
series?: DataSeries[];
|
|
158
|
+
/** 原始数据 (用于饼图、散点图等) */
|
|
159
|
+
values?: unknown[];
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// 动画配置
|
|
164
|
+
// ============================================================================
|
|
165
|
+
|
|
166
|
+
/** 动画配置 */
|
|
167
|
+
export interface AnimationConfig {
|
|
168
|
+
/** 是否启用动画 */
|
|
169
|
+
enabled?: boolean;
|
|
170
|
+
/** 动画时长 (ms) */
|
|
171
|
+
duration?: number;
|
|
172
|
+
/** 动画缓动函数 */
|
|
173
|
+
easing?: string;
|
|
174
|
+
/** 动画延迟 (ms) */
|
|
175
|
+
delay?: number;
|
|
176
|
+
/** 是否在渲染时使用动画 */
|
|
177
|
+
animate?: boolean;
|
|
178
|
+
/** 是否在数据更新时使用动画 */
|
|
179
|
+
animateUpdate?: boolean;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// 基础图表属性
|
|
184
|
+
// ============================================================================
|
|
7
185
|
|
|
8
186
|
/**
|
|
9
187
|
* 图表组件基本属性
|
|
10
188
|
*/
|
|
11
189
|
export interface BaseChartProps {
|
|
190
|
+
// ---------- 核心配置 ----------
|
|
191
|
+
|
|
12
192
|
/**
|
|
13
|
-
* 图表配置项
|
|
193
|
+
* 图表配置项 (EChartsOption)
|
|
194
|
+
* 支持所有 ECharts 配置项
|
|
14
195
|
*/
|
|
15
|
-
option
|
|
196
|
+
option?: EChartsOption;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* 简化的数据配置
|
|
200
|
+
* 用于快速配置图表数据
|
|
201
|
+
*/
|
|
202
|
+
data?: ChartData;
|
|
203
|
+
|
|
204
|
+
// ---------- 尺寸配置 ----------
|
|
16
205
|
|
|
17
206
|
/**
|
|
18
207
|
* 宽度
|
|
208
|
+
* @default '100%'
|
|
19
209
|
*/
|
|
20
|
-
width?:
|
|
210
|
+
width?: SizeValue;
|
|
21
211
|
|
|
22
212
|
/**
|
|
23
213
|
* 高度
|
|
214
|
+
* @default 400
|
|
24
215
|
*/
|
|
25
|
-
height?:
|
|
216
|
+
height?: SizeValue;
|
|
26
217
|
|
|
27
218
|
/**
|
|
28
|
-
*
|
|
219
|
+
* 最小宽度
|
|
29
220
|
*/
|
|
30
|
-
|
|
221
|
+
minWidth?: SizeValue;
|
|
31
222
|
|
|
32
223
|
/**
|
|
33
|
-
*
|
|
224
|
+
* 最小高度
|
|
34
225
|
*/
|
|
35
|
-
|
|
226
|
+
minHeight?: SizeValue;
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* 最大宽度
|
|
230
|
+
*/
|
|
231
|
+
maxWidth?: SizeValue;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* 最大高度
|
|
235
|
+
*/
|
|
236
|
+
maxHeight?: SizeValue;
|
|
237
|
+
|
|
238
|
+
// ---------- 主题配置 ----------
|
|
36
239
|
|
|
37
240
|
/**
|
|
38
|
-
*
|
|
241
|
+
* 主题名称或主题对象
|
|
242
|
+
* 可使用内置主题: 'default', 'dark', 'light', 'vintage', 'macarons', 'infographic'
|
|
243
|
+
* 或自定义主题对象
|
|
244
|
+
*/
|
|
245
|
+
theme?: string | Record<string, unknown>;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* 暗色模式
|
|
249
|
+
* @default false
|
|
250
|
+
*/
|
|
251
|
+
darkMode?: boolean;
|
|
252
|
+
|
|
253
|
+
// ---------- 样式配置 ----------
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* 容器样式
|
|
257
|
+
*/
|
|
258
|
+
style?: CSSProperties;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* 容器类名
|
|
39
262
|
*/
|
|
40
263
|
className?: string;
|
|
41
264
|
|
|
265
|
+
/**
|
|
266
|
+
* 容器 ID
|
|
267
|
+
*/
|
|
268
|
+
id?: string;
|
|
269
|
+
|
|
270
|
+
// ---------- 响应式配置 ----------
|
|
271
|
+
|
|
42
272
|
/**
|
|
43
273
|
* 是否自动调整大小
|
|
274
|
+
* @default true
|
|
44
275
|
*/
|
|
45
276
|
autoResize?: boolean;
|
|
46
277
|
|
|
278
|
+
/**
|
|
279
|
+
* 响应式配置
|
|
280
|
+
*/
|
|
281
|
+
responsive?: ResponsiveConfig;
|
|
282
|
+
|
|
283
|
+
// ---------- 加载状态 ----------
|
|
284
|
+
|
|
47
285
|
/**
|
|
48
286
|
* 是否显示加载动画
|
|
287
|
+
* @default false
|
|
49
288
|
*/
|
|
50
289
|
loading?: boolean;
|
|
51
290
|
|
|
52
291
|
/**
|
|
53
292
|
* 加载动画配置
|
|
54
293
|
*/
|
|
55
|
-
loadingOption?:
|
|
294
|
+
loadingOption?: LoadingOptions;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* 加载状态文本
|
|
298
|
+
*/
|
|
299
|
+
loadingText?: string;
|
|
300
|
+
|
|
301
|
+
// ---------- 回调函数 ----------
|
|
56
302
|
|
|
57
303
|
/**
|
|
58
|
-
*
|
|
304
|
+
* 图表实例初始化完成回调
|
|
59
305
|
*/
|
|
60
|
-
onChartInit?:
|
|
306
|
+
onChartInit?: ChartInitCallback;
|
|
61
307
|
|
|
62
308
|
/**
|
|
63
|
-
*
|
|
309
|
+
* 图表渲染完成回调
|
|
64
310
|
*/
|
|
65
|
-
onChartReady?:
|
|
311
|
+
onChartReady?: ChartReadyCallback;
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* 图表事件回调
|
|
315
|
+
*/
|
|
316
|
+
onEvents?: ChartEvents;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* 错误回调
|
|
320
|
+
*/
|
|
321
|
+
onError?: (error: Error) => void;
|
|
322
|
+
|
|
323
|
+
// ---------- 渲染配置 ----------
|
|
66
324
|
|
|
67
325
|
/**
|
|
68
326
|
* 渲染器类型
|
|
327
|
+
* @default 'canvas'
|
|
328
|
+
*/
|
|
329
|
+
renderer?: RendererType;
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* 设备像素比
|
|
333
|
+
* 默认自动获取
|
|
334
|
+
*/
|
|
335
|
+
devicePixelRatio?: number;
|
|
336
|
+
|
|
337
|
+
// ---------- 动画配置 ----------
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* 全局动画配置
|
|
341
|
+
*/
|
|
342
|
+
animation?: AnimationConfig;
|
|
343
|
+
|
|
344
|
+
// ---------- 标题配置 ----------
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* 图表标题
|
|
69
348
|
*/
|
|
70
|
-
|
|
349
|
+
title?: string | { text: string; subtext?: string; [key: string]: unknown };
|
|
71
350
|
|
|
72
351
|
/**
|
|
73
|
-
*
|
|
352
|
+
* 是否显示标题
|
|
353
|
+
* @default true
|
|
74
354
|
*/
|
|
75
|
-
|
|
355
|
+
showTitle?: boolean;
|
|
356
|
+
|
|
357
|
+
// ---------- 图例配置 ----------
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* 是否显示图例
|
|
361
|
+
* @default true
|
|
362
|
+
*/
|
|
363
|
+
showLegend?: boolean;
|
|
364
|
+
|
|
365
|
+
// ---------- 工具提示配置 ----------
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* 是否显示工具提示
|
|
369
|
+
* @default true
|
|
370
|
+
*/
|
|
371
|
+
showTooltip?: boolean;
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* 工具提示配置
|
|
375
|
+
*/
|
|
376
|
+
tooltip?: Record<string, unknown>;
|
|
76
377
|
}
|
|
77
378
|
|
|
379
|
+
// ============================================================================
|
|
380
|
+
// 特定图表类型属性
|
|
381
|
+
// ============================================================================
|
|
382
|
+
|
|
78
383
|
/**
|
|
79
384
|
* 折线图属性
|
|
80
385
|
*/
|
|
81
386
|
export interface LineChartProps extends BaseChartProps {
|
|
82
|
-
|
|
387
|
+
/** 图表类型 */
|
|
388
|
+
type?: 'line' | 'area' | 'stacked' | 'percent';
|
|
389
|
+
|
|
390
|
+
/** 是否平滑曲线 */
|
|
391
|
+
smooth?: boolean;
|
|
392
|
+
|
|
393
|
+
/** 是否显示面积 */
|
|
394
|
+
showArea?: boolean;
|
|
395
|
+
|
|
396
|
+
/** 是否显示数据点 */
|
|
397
|
+
showSymbol?: boolean;
|
|
398
|
+
|
|
399
|
+
/** 面积样式 */
|
|
400
|
+
areaStyle?: Record<string, unknown>;
|
|
401
|
+
|
|
402
|
+
/** 线条样式 */
|
|
403
|
+
lineStyle?: Record<string, unknown>;
|
|
404
|
+
|
|
405
|
+
/** 标记点样式 */
|
|
406
|
+
itemStyle?: Record<string, unknown>;
|
|
83
407
|
}
|
|
84
408
|
|
|
85
409
|
/**
|
|
86
410
|
* 柱状图属性
|
|
87
411
|
*/
|
|
88
412
|
export interface BarChartProps extends BaseChartProps {
|
|
89
|
-
|
|
413
|
+
/** 图表类型 */
|
|
414
|
+
type?: 'bar' | 'stacked' | 'percent' | 'group';
|
|
415
|
+
|
|
416
|
+
/** 柱条方向 */
|
|
417
|
+
orientation?: 'vertical' | 'horizontal';
|
|
418
|
+
|
|
419
|
+
/** 柱条宽度 */
|
|
420
|
+
barWidth?: number | string;
|
|
421
|
+
|
|
422
|
+
/** 柱条最大宽度 */
|
|
423
|
+
barMaxWidth?: number | string;
|
|
424
|
+
|
|
425
|
+
/** 柱条最小高度 */
|
|
426
|
+
barMinHeight?: number;
|
|
427
|
+
|
|
428
|
+
/** 圆角 */
|
|
429
|
+
borderRadius?: number | number[];
|
|
90
430
|
}
|
|
91
431
|
|
|
92
432
|
/**
|
|
93
433
|
* 饼图属性
|
|
94
434
|
*/
|
|
95
435
|
export interface PieChartProps extends BaseChartProps {
|
|
96
|
-
|
|
436
|
+
/** 饼图类型 */
|
|
437
|
+
type?: 'pie' | 'ring' | 'rose' | 'nightingale';
|
|
438
|
+
|
|
439
|
+
/** 饼图半径 */
|
|
440
|
+
radius?: number | string | [number | string, number | string];
|
|
441
|
+
|
|
442
|
+
/** 中心点 */
|
|
443
|
+
center?: [number | string, number | string];
|
|
444
|
+
|
|
445
|
+
/** 是否显示标签 */
|
|
446
|
+
showLabel?: boolean;
|
|
447
|
+
|
|
448
|
+
/** 标签位置 */
|
|
449
|
+
labelPosition?: 'outside' | 'inside' | 'center';
|
|
450
|
+
|
|
451
|
+
/** 最小角度 */
|
|
452
|
+
minAngle?: number;
|
|
97
453
|
}
|
|
98
454
|
|
|
99
455
|
/**
|
|
100
456
|
* 散点图属性
|
|
101
457
|
*/
|
|
102
458
|
export interface ScatterChartProps extends BaseChartProps {
|
|
103
|
-
|
|
459
|
+
/** 符号类型 */
|
|
460
|
+
symbol?: string;
|
|
461
|
+
|
|
462
|
+
/** 符号大小 */
|
|
463
|
+
symbolSize?: number | ((value: number[]) => number);
|
|
464
|
+
|
|
465
|
+
/** 大量数据优化 */
|
|
466
|
+
large?: boolean;
|
|
467
|
+
|
|
468
|
+
/** 大数据阈值 */
|
|
469
|
+
largeThreshold?: number;
|
|
104
470
|
}
|
|
105
471
|
|
|
106
472
|
/**
|
|
107
473
|
* 雷达图属性
|
|
108
474
|
*/
|
|
109
475
|
export interface RadarChartProps extends BaseChartProps {
|
|
110
|
-
|
|
476
|
+
/** 雷达图指示器 */
|
|
477
|
+
indicators?: Array<{ name: string; max?: number; color?: string }>;
|
|
478
|
+
|
|
479
|
+
/** 雷达图形状 */
|
|
480
|
+
shape?: 'polygon' | 'circle';
|
|
481
|
+
|
|
482
|
+
/** 中心点 */
|
|
483
|
+
center?: [number | string, number | string];
|
|
484
|
+
|
|
485
|
+
/** 半径 */
|
|
486
|
+
radius?: number | string;
|
|
111
487
|
}
|
|
112
488
|
|
|
113
489
|
/**
|
|
114
490
|
* 漏斗图属性
|
|
115
491
|
*/
|
|
116
492
|
export interface FunnelChartProps extends BaseChartProps {
|
|
117
|
-
|
|
493
|
+
/** 漏斗排序方式 */
|
|
494
|
+
sort?: 'ascending' | 'descending' | 'none';
|
|
495
|
+
|
|
496
|
+
/** 漏斗对齐方式 */
|
|
497
|
+
align?: 'left' | 'center' | 'right';
|
|
498
|
+
|
|
499
|
+
/** 间隙 */
|
|
500
|
+
gap?: number;
|
|
501
|
+
|
|
502
|
+
/** 最小高度 */
|
|
503
|
+
min?: number;
|
|
504
|
+
|
|
505
|
+
/** 最大高度 */
|
|
506
|
+
max?: number;
|
|
118
507
|
}
|
|
119
508
|
|
|
120
509
|
/**
|
|
121
510
|
* 仪表盘属性
|
|
122
511
|
*/
|
|
123
512
|
export interface GaugeChartProps extends BaseChartProps {
|
|
124
|
-
|
|
513
|
+
/** 最小值 */
|
|
514
|
+
min?: number;
|
|
515
|
+
|
|
516
|
+
/** 最大值 */
|
|
517
|
+
max?: number;
|
|
518
|
+
|
|
519
|
+
/** 当前值 */
|
|
520
|
+
value?: number;
|
|
521
|
+
|
|
522
|
+
/** 刻度分段数 */
|
|
523
|
+
splitNumber?: number;
|
|
524
|
+
|
|
525
|
+
/** 半径 */
|
|
526
|
+
radius?: number | string;
|
|
527
|
+
|
|
528
|
+
/** 起始角度 */
|
|
529
|
+
startAngle?: number;
|
|
530
|
+
|
|
531
|
+
/** 结束角度 */
|
|
532
|
+
endAngle?: number;
|
|
533
|
+
|
|
534
|
+
/** 进度显示 */
|
|
535
|
+
showProgress?: boolean;
|
|
125
536
|
}
|
|
126
537
|
|
|
127
538
|
/**
|
|
128
539
|
* 热力图属性
|
|
129
540
|
*/
|
|
130
541
|
export interface HeatmapChartProps extends BaseChartProps {
|
|
131
|
-
|
|
542
|
+
/** X 轴数据 */
|
|
543
|
+
xAxisData?: (string | number)[];
|
|
544
|
+
|
|
545
|
+
/** Y 轴数据 */
|
|
546
|
+
yAxisData?: (string | number)[];
|
|
547
|
+
|
|
548
|
+
/** 视觉映射配置 */
|
|
549
|
+
visualMap?: Record<string, unknown>;
|
|
132
550
|
}
|
|
133
551
|
|
|
134
552
|
/**
|
|
135
553
|
* 树图属性
|
|
136
554
|
*/
|
|
137
555
|
export interface TreeChartProps extends BaseChartProps {
|
|
138
|
-
|
|
556
|
+
/** 树方向 */
|
|
557
|
+
orient?: 'orthogonal' | 'radial';
|
|
558
|
+
|
|
559
|
+
/** 展开层级 */
|
|
560
|
+
initialTreeDepth?: number;
|
|
561
|
+
|
|
562
|
+
/** 节点标签位置 */
|
|
563
|
+
labelPosition?: 'left' | 'right' | 'top' | 'bottom';
|
|
564
|
+
|
|
565
|
+
/** 是否显示连接线 */
|
|
566
|
+
showLine?: boolean;
|
|
139
567
|
}
|
|
140
568
|
|
|
141
569
|
/**
|
|
142
570
|
* 旭日图属性
|
|
143
571
|
*/
|
|
144
572
|
export interface SunburstChartProps extends BaseChartProps {
|
|
145
|
-
|
|
573
|
+
/** 半径 */
|
|
574
|
+
radius?: number | string | [number | string, number | string];
|
|
575
|
+
|
|
576
|
+
/** 起始角度 */
|
|
577
|
+
startAngle?: number;
|
|
578
|
+
|
|
579
|
+
/** 最小角度 */
|
|
580
|
+
minAngle?: number;
|
|
581
|
+
|
|
582
|
+
/** 层级间隔 */
|
|
583
|
+
levelGap?: number;
|
|
146
584
|
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* 矩形树图属性
|
|
588
|
+
* 用于展示带有层级结构的数据,通过矩形面积表示数据大小
|
|
589
|
+
*/
|
|
590
|
+
export interface TreeMapChartProps extends BaseChartProps {
|
|
591
|
+
/** 矩形树图类型 */
|
|
592
|
+
type?: 'treemap' | 'quasitree';
|
|
593
|
+
|
|
594
|
+
/** 父节点名称 */
|
|
595
|
+
name?: string;
|
|
596
|
+
|
|
597
|
+
/** 数据值 */
|
|
598
|
+
value?: number;
|
|
599
|
+
|
|
600
|
+
/** 子节点数据 */
|
|
601
|
+
children?: TreeMapChartProps[];
|
|
602
|
+
|
|
603
|
+
/** 是否显示标签 */
|
|
604
|
+
showLabel?: boolean;
|
|
605
|
+
|
|
606
|
+
/** 标签位置 */
|
|
607
|
+
labelPosition?: 'inside' | 'top' | 'left' | 'bottom' | 'right';
|
|
608
|
+
|
|
609
|
+
/** 标签格式化 */
|
|
610
|
+
labelFormatter?: Record<string, unknown>;
|
|
611
|
+
|
|
612
|
+
/** 上限阈值 */
|
|
613
|
+
upperLabel?: Record<string, unknown>;
|
|
614
|
+
|
|
615
|
+
/** 视觉映射配置 */
|
|
616
|
+
visualMin?: number;
|
|
617
|
+
visualMax?: number;
|
|
618
|
+
visualRange?: number[];
|
|
619
|
+
|
|
620
|
+
/** 节点间隙 */
|
|
621
|
+
gap?: number;
|
|
622
|
+
|
|
623
|
+
/** 层级间距 */
|
|
624
|
+
levelGap?: number;
|
|
625
|
+
|
|
626
|
+
/** 是否可视化 */
|
|
627
|
+
visual?: boolean;
|
|
628
|
+
|
|
629
|
+
/** 是否显示breadcrumb */
|
|
630
|
+
showBreadcrumb?: boolean;
|
|
631
|
+
|
|
632
|
+
/** itemStyle配置 */
|
|
633
|
+
itemStyle?: Record<string, unknown>;
|
|
634
|
+
|
|
635
|
+
/** emphasis配置 */
|
|
636
|
+
emphasis?: Record<string, unknown>;
|
|
637
|
+
|
|
638
|
+
/** 区域样式 */
|
|
639
|
+
areaColor?: string | string[];
|
|
640
|
+
|
|
641
|
+
/** 渐变区域颜色 */
|
|
642
|
+
colorSaturation?: number;
|
|
643
|
+
|
|
644
|
+
/** 最小扇区角度 */
|
|
645
|
+
minSectorAngle?: number;
|
|
646
|
+
|
|
647
|
+
/** 最小叶子节点面积比例 */
|
|
648
|
+
minLeafNodeAreaRatio?: number;
|
|
649
|
+
|
|
650
|
+
/** 视口配置 */
|
|
651
|
+
leafDepth?: number;
|
|
652
|
+
drillDown?: boolean;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* 桑基图属性
|
|
657
|
+
* 用于展示数据流向和转移关系
|
|
658
|
+
*/
|
|
659
|
+
export interface SankeyChartProps extends BaseChartProps {
|
|
660
|
+
/** 桑基图节点数据 */
|
|
661
|
+
nodes?: Array<{
|
|
662
|
+
name: string;
|
|
663
|
+
[key: string]: unknown;
|
|
664
|
+
}>;
|
|
665
|
+
|
|
666
|
+
/** 桑基图链接/边数据 */
|
|
667
|
+
links?: Array<{
|
|
668
|
+
source: string | number;
|
|
669
|
+
target: string | number;
|
|
670
|
+
value: number;
|
|
671
|
+
[key: string]: unknown;
|
|
672
|
+
}>;
|
|
673
|
+
|
|
674
|
+
/** 节点对齐方式 */
|
|
675
|
+
nodeAlign?: 'left' | 'right' | 'justify' | 'center';
|
|
676
|
+
|
|
677
|
+
/** 节点间距 */
|
|
678
|
+
nodeGap?: number;
|
|
679
|
+
|
|
680
|
+
/** 节点宽度 */
|
|
681
|
+
nodeWidth?: number;
|
|
682
|
+
|
|
683
|
+
/** 节点排序方式 */
|
|
684
|
+
nodeSort?: 'ascending' | 'descending' | 'none' | ((a: any, b: any) => number);
|
|
685
|
+
|
|
686
|
+
/** 边的曲度 */
|
|
687
|
+
linkCurveness?: number;
|
|
688
|
+
|
|
689
|
+
/** 边方向 */
|
|
690
|
+
orient?: 'horizontal' | 'vertical';
|
|
691
|
+
|
|
692
|
+
/** 是否显示标签 */
|
|
693
|
+
showLabel?: boolean;
|
|
694
|
+
|
|
695
|
+
/** 标签配置 */
|
|
696
|
+
label?: Record<string, unknown>;
|
|
697
|
+
|
|
698
|
+
/** 节点样式 */
|
|
699
|
+
nodeStyle?: Record<string, unknown>;
|
|
700
|
+
|
|
701
|
+
/** 边样式 */
|
|
702
|
+
linkStyle?: Record<string, unknown>;
|
|
703
|
+
|
|
704
|
+
/** 强调状态配置 */
|
|
705
|
+
emphasis?: {
|
|
706
|
+
focus?: 'adjacency' | 'ancestor' | 'descendant' | string;
|
|
707
|
+
itemStyle?: Record<string, unknown>;
|
|
708
|
+
lineStyle?: Record<string, unknown>;
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* 箱线图属性
|
|
714
|
+
* 用于展示数据的分布情况
|
|
715
|
+
*/
|
|
716
|
+
export interface BoxplotChartProps extends BaseChartProps {
|
|
717
|
+
/** 图表类型 */
|
|
718
|
+
type?: 'boxplot';
|
|
719
|
+
|
|
720
|
+
/** 数据数组,每个箱子由5个数字组成 [min, Q1, median, Q3, max] */
|
|
721
|
+
data?: number[][];
|
|
722
|
+
|
|
723
|
+
/** 数据的维度索引 */
|
|
724
|
+
dimensions?: string[];
|
|
725
|
+
|
|
726
|
+
/** 批量数据 */
|
|
727
|
+
batchData?: Array<{
|
|
728
|
+
name: string;
|
|
729
|
+
data: number[][];
|
|
730
|
+
}>;
|
|
731
|
+
|
|
732
|
+
/** 柱条宽度 */
|
|
733
|
+
boxWidth?: number | [number, number];
|
|
734
|
+
|
|
735
|
+
/** 异常值配置 */
|
|
736
|
+
outlier?: Record<string, unknown>;
|
|
737
|
+
|
|
738
|
+
/** 是否平滑 */
|
|
739
|
+
smooth?: boolean;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
/**
|
|
743
|
+
* K线图/股票图属性
|
|
744
|
+
* 用于展示股票、外汇等金融数据
|
|
745
|
+
*/
|
|
746
|
+
export interface CandlestickChartProps extends BaseChartProps {
|
|
747
|
+
/** K线数据数组,每项为 [open, close, lowest, highest] */
|
|
748
|
+
data?: number[][];
|
|
749
|
+
|
|
750
|
+
/** X轴数据 */
|
|
751
|
+
xAxisData?: (string | number)[];
|
|
752
|
+
|
|
753
|
+
/** 数据对应的维度名 */
|
|
754
|
+
dimensions?: string[];
|
|
755
|
+
|
|
756
|
+
/** 批量数据 */
|
|
757
|
+
batchData?: Array<{
|
|
758
|
+
name: string;
|
|
759
|
+
data: number[][];
|
|
760
|
+
}>;
|
|
761
|
+
|
|
762
|
+
/** K线柱条样式 */
|
|
763
|
+
itemStyle?: Record<string, unknown>;
|
|
764
|
+
|
|
765
|
+
/** 强调状态 */
|
|
766
|
+
emphasis?: Record<string, unknown>;
|
|
767
|
+
|
|
768
|
+
/** 是否平滑曲线 */
|
|
769
|
+
smooth?: boolean;
|
|
770
|
+
|
|
771
|
+
/** 是否显示MA线 */
|
|
772
|
+
ma?: Array<{
|
|
773
|
+
period: number;
|
|
774
|
+
color?: string;
|
|
775
|
+
}>;
|
|
776
|
+
|
|
777
|
+
/** 是否显示成交量 */
|
|
778
|
+
showVolume?: boolean;
|
|
779
|
+
|
|
780
|
+
/** 成交量柱子样式 */
|
|
781
|
+
volumeBar?: Record<string, unknown>;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* 关系图属性
|
|
786
|
+
* 用于展示节点之间的关系
|
|
787
|
+
*/
|
|
788
|
+
export interface GraphChartProps extends BaseChartProps {
|
|
789
|
+
/** 关系图节点数据 */
|
|
790
|
+
nodes?: Array<{
|
|
791
|
+
id: string | number;
|
|
792
|
+
name: string;
|
|
793
|
+
value?: number | number[];
|
|
794
|
+
category?: number;
|
|
795
|
+
symbol?: string;
|
|
796
|
+
symbolSize?: number | number[];
|
|
797
|
+
[key: string]: unknown;
|
|
798
|
+
}>;
|
|
799
|
+
|
|
800
|
+
/** 关系图边/链接数据 */
|
|
801
|
+
links?: Array<{
|
|
802
|
+
source: string | number;
|
|
803
|
+
target: string | number;
|
|
804
|
+
value?: number;
|
|
805
|
+
lineStyle?: Record<string, unknown>;
|
|
806
|
+
[key: string]: unknown;
|
|
807
|
+
}>;
|
|
808
|
+
|
|
809
|
+
/** 关系图类型 */
|
|
810
|
+
layout?: 'none' | 'circular' | 'force';
|
|
811
|
+
|
|
812
|
+
/** 力导向布局配置 */
|
|
813
|
+
force?: Record<string, unknown>;
|
|
814
|
+
|
|
815
|
+
/** 是否启用draggable */
|
|
816
|
+
draggable?: boolean;
|
|
817
|
+
|
|
818
|
+
/** 类别数据 */
|
|
819
|
+
categories?: Array<{
|
|
820
|
+
name: string;
|
|
821
|
+
itemStyle?: Record<string, unknown>;
|
|
822
|
+
}>;
|
|
823
|
+
|
|
824
|
+
/** 是否显示标签 */
|
|
825
|
+
showLabel?: boolean;
|
|
826
|
+
|
|
827
|
+
/** 标签配置 */
|
|
828
|
+
label?: Record<string, unknown>;
|
|
829
|
+
|
|
830
|
+
/** 边标签配置 */
|
|
831
|
+
edgeLabel?: Record<string, unknown>;
|
|
832
|
+
|
|
833
|
+
/** 箭头配置 */
|
|
834
|
+
arrow?: Record<string, unknown>;
|
|
835
|
+
|
|
836
|
+
/** 强调状态 */
|
|
837
|
+
emphasis?: {
|
|
838
|
+
focus?: 'adjacency' | 'ancestor' | 'descendant';
|
|
839
|
+
itemStyle?: Record<string, unknown>;
|
|
840
|
+
lineStyle?: Record<string, unknown>;
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// ============================================================================
|
|
845
|
+
// 组件Slots (用于 React 19+)
|
|
846
|
+
// ============================================================================
|
|
847
|
+
|
|
848
|
+
/** 图表内部插槽 */
|
|
849
|
+
export interface ChartSlots {
|
|
850
|
+
/** 标题区域 */
|
|
851
|
+
title?: ReactNode;
|
|
852
|
+
/** 图例区域 */
|
|
853
|
+
legend?: ReactNode;
|
|
854
|
+
/** 工具提示 */
|
|
855
|
+
tooltip?: ReactNode;
|
|
856
|
+
/** 自定义加载 */
|
|
857
|
+
loading?: ReactNode;
|
|
858
|
+
/** 错误提示 */
|
|
859
|
+
error?: ReactNode;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
// ============================================================================
|
|
863
|
+
// 工具类型
|
|
864
|
+
// ============================================================================
|
|
865
|
+
|
|
866
|
+
/** 图表配置构建器选项 */
|
|
867
|
+
export interface ChartBuilderOptions<T extends BaseChartProps = BaseChartProps> {
|
|
868
|
+
/** 初始属性 */
|
|
869
|
+
props?: Partial<T>;
|
|
870
|
+
/** 主题 */
|
|
871
|
+
theme?: string;
|
|
872
|
+
/** 是否启用动画 */
|
|
873
|
+
animation?: boolean;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// 重新导出 ECharts 类型
|
|
877
|
+
export type { EChartsOption, ECharts, EChartsCoreOption };
|