@agions/taroviz 1.6.0 → 1.9.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.
Files changed (35) hide show
  1. package/README.md +30 -21
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/esm/index.js +49471 -2199
  4. package/package.json +2 -1
  5. package/src/adapters/__tests__/index.test.ts +4 -2
  6. package/src/adapters/h5/index.ts +16 -0
  7. package/src/adapters/types.ts +28 -120
  8. package/src/charts/common/BaseChartWrapper.tsx +193 -32
  9. package/src/charts/index.ts +5 -1
  10. package/src/charts/liquid/index.tsx +227 -0
  11. package/src/charts/liquid/types.ts +130 -0
  12. package/src/charts/tree/index.tsx +117 -0
  13. package/src/charts/tree/types.ts +174 -0
  14. package/src/charts/types.ts +1 -1
  15. package/src/components/DataFilter/index.tsx +587 -0
  16. package/src/core/animation/AnimationManager.ts +69 -42
  17. package/src/core/components/BaseChart.tsx +72 -9
  18. package/src/core/types/common.ts +21 -110
  19. package/src/core/types/index.ts +4 -135
  20. package/src/core/types/platform.ts +38 -230
  21. package/src/core/utils/drillDown.ts +643 -0
  22. package/src/core/utils/export/ExportUtils.ts +10 -1
  23. package/src/core/utils/performance/PerformanceAnalyzer.ts +21 -1
  24. package/src/core/utils/performance/types.ts +5 -0
  25. package/src/hooks/__tests__/index.test.tsx +7 -5
  26. package/src/hooks/index.ts +41 -2
  27. package/src/hooks/useAnimation.ts +427 -0
  28. package/src/hooks/useChartConnect.ts +362 -0
  29. package/src/hooks/useChartDownload.ts +692 -0
  30. package/src/hooks/useDataZoom.ts +323 -0
  31. package/src/hooks/usePerformance.ts +291 -0
  32. package/src/index.ts +25 -2
  33. package/src/themes/__tests__/index.test.ts +7 -13
  34. package/src/themes/index.ts +3 -0
  35. package/src/themes/useAutoTheme.ts +66 -0
@@ -10,14 +10,12 @@ export * from './chart';
10
10
  import type { EChartsType } from 'echarts';
11
11
 
12
12
  import { ChartOptions } from './chart';
13
+ import { ChartEventParams } from './common';
13
14
 
14
15
  /**
15
16
  * TaroViz核心类型定义
16
17
  */
17
18
 
18
- /**
19
- * ECharts类型定义
20
- */
21
19
  export { EChartsType };
22
20
 
23
21
  // 导出动画相关类型
@@ -72,7 +70,7 @@ export type RendererType = 'canvas' | 'svg';
72
70
  /**
73
71
  * 图表事件回调类型
74
72
  */
75
- export type ChartEventCallback = (params: any) => void;
73
+ export type ChartEventCallback = (params: ChartEventParams) => void;
76
74
 
77
75
  /**
78
76
  * 图表事件处理器映射
@@ -122,160 +120,31 @@ export interface ThemeType {
122
120
  fontSize?: number;
123
121
  };
124
122
  };
125
- [key: string]: any;
123
+ [key: string]: unknown;
126
124
  }
127
125
 
128
126
  /**
129
127
  * 渲染性能优化配置
130
128
  */
131
129
  export interface RenderOptimizationConfig {
132
- /**
133
- * 是否开启渐进式渲染
134
- */
135
130
  progressive?: boolean;
136
-
137
- /**
138
- * 渐进式渲染的阈值
139
- */
140
131
  progressiveThreshold?: number;
141
-
142
- /**
143
- * 是否启用懒更新
144
- */
145
132
  lazyUpdate?: boolean;
146
-
147
- /**
148
- * 是否启用动画
149
- */
150
133
  animation?: boolean;
151
-
152
- /**
153
- * 是否启用硬件加速
154
- */
155
134
  hardwareAcceleration?: boolean;
156
-
157
- /**
158
- * 帧率限制
159
- */
160
135
  frameRate?: number;
161
136
  }
162
137
 
163
- /**
164
- * 适配器接口定义
165
- */
166
- export interface Adapter {
167
- /**
168
- * 初始化图表
169
- */
170
- init(options?: any): EChartsType;
171
-
172
- /**
173
- * 设置图表配置
174
- */
175
- setOption(option: any, notMerge?: boolean): void;
176
-
177
- /**
178
- * 获取图表实例
179
- */
180
- getInstance(): EChartsType | null;
181
-
182
- /**
183
- * 设置组件实例
184
- */
185
- setComponent?(component: any): void;
186
-
187
- /**
188
- * 绑定事件
189
- */
190
- on(eventName: string, handler: (params: any) => void): void;
191
-
192
- /**
193
- * 解绑事件
194
- */
195
- off(eventName: string, handler?: (params: any) => void): void;
196
-
197
- /**
198
- * 调整图表大小
199
- */
200
- resize(): void;
201
-
202
- /**
203
- * 显示加载中
204
- */
205
- showLoading(options?: any): void;
206
-
207
- /**
208
- * 隐藏加载中
209
- */
210
- hideLoading(): void;
211
-
212
- /**
213
- * 清空图表
214
- */
215
- clear(): void;
216
-
217
- /**
218
- * 销毁图表
219
- */
220
- dispose(): void;
221
-
222
- /**
223
- * 获取DataURL
224
- */
225
- getDataURL?(opts?: any): string | undefined;
226
-
227
- /**
228
- * 转换为DataURL
229
- */
230
- convertToDataURL?(opts?: any): string | undefined;
231
-
232
- /**
233
- * 渲染图表(仅 H5 环境需要,小程序适配器不需要)
234
- */
235
- render?(): JSX.Element | null;
236
- }
237
-
238
138
  /**
239
139
  * 适配器配置选项
240
140
  */
241
141
  export interface AdapterConfig {
242
- /**
243
- * 平台类型
244
- */
245
142
  platformType?: string;
246
-
247
- /**
248
- * 目标canvas元素ID
249
- */
250
143
  canvasId?: string;
251
-
252
- /**
253
- * 图表主题
254
- */
255
144
  theme?: string;
256
-
257
- /**
258
- * 渲染器类型
259
- */
260
145
  renderer?: 'canvas' | 'svg';
261
-
262
- /**
263
- * 设备像素比
264
- */
265
146
  devicePixelRatio?: number;
266
-
267
- /**
268
- * 宽度
269
- */
270
147
  width?: number;
271
-
272
- /**
273
- * 高度
274
- */
275
148
  height?: number;
276
-
277
- /**
278
- * 额外选项
279
- */
280
- [key: string]: any;
149
+ [key: string]: unknown;
281
150
  }
@@ -1,96 +1,49 @@
1
1
  /**
2
2
  * 支持的平台类型
3
3
  */
4
+ import type {
5
+ EChartsType,
6
+ EChartsOption,
7
+ } from 'echarts';
8
+ import type { CSSProperties } from 'react';
9
+ import type { ChartEventParams } from './common';
10
+
4
11
  export enum PlatformType {
5
12
  H5 = 'h5',
6
- WEAPP = 'weapp', // 微信小程序
7
- ALIPAY = 'alipay', // 支付宝小程序
8
- SWAN = 'swan', // 百度小程序
9
- TT = 'tt', // 字节跳动小程序
10
- QQ = 'qq', // QQ小程序
11
- JD = 'jd', // 京东小程序
12
- HARMONY = 'harmony', // 鸿蒙OS
13
- DD = 'dd', // 钉钉小程序
14
- QYWX = 'qywx', // 企业微信小程序
15
- LARK = 'lark', // 飞书小程序
16
- KWAI = 'kwai', // 快手小程序
13
+ WEAPP = 'weapp',
14
+ ALIPAY = 'alipay',
15
+ SWAN = 'swan',
16
+ TT = 'tt',
17
+ QQ = 'qq',
18
+ JD = 'jd',
19
+ HARMONY = 'harmony',
20
+ DD = 'dd',
21
+ QYWX = 'qywx',
22
+ LARK = 'lark',
23
+ KWAI = 'kwai',
17
24
  }
18
25
 
19
- // 导出平台类型字符串联合类型
20
26
  export type Platform = `${PlatformType}` | 'web' | 'ks';
21
27
 
22
- /**
23
- * 事件处理器类型
24
- */
25
- export type EventHandler = (params: any) => void;
28
+ /** 图表事件处理器 */
29
+ export type EventHandler = (params: ChartEventParams) => void;
26
30
 
27
31
  /**
28
32
  * 适配器通用选项
29
33
  */
30
34
  export interface AdapterOptions {
31
- /**
32
- * 平台类型
33
- */
34
35
  platform?: Platform;
35
-
36
- /**
37
- * 画布ID
38
- */
39
36
  canvasId?: string;
40
-
41
- /**
42
- * 宽度
43
- */
44
37
  width?: number | string;
45
-
46
- /**
47
- * 高度
48
- */
49
38
  height?: number | string;
50
-
51
- /**
52
- * 主题
53
- */
54
39
  theme?: string | object;
55
-
56
- /**
57
- * 是否自动调整大小
58
- */
59
40
  autoResize?: boolean;
60
-
61
- /**
62
- * 设备像素比
63
- */
64
41
  devicePixelRatio?: number;
65
-
66
- /**
67
- * 初始化回调
68
- */
69
- onInit?: (instance: any) => void;
70
-
71
- /**
72
- * 容器引用
73
- */
74
- containerRef?: any;
75
-
76
- /**
77
- * 图表选项
78
- */
79
- option?: any;
80
-
81
- /**
82
- * 渲染器类型
83
- */
42
+ onInit?: (instance: EChartsType) => void;
43
+ containerRef?: HTMLElement | { current: HTMLElement | null };
44
+ option?: EChartsOption;
84
45
  renderer?: 'canvas' | 'svg';
85
-
86
- /**
87
- * 样式对象
88
- */
89
- style?: any;
90
-
91
- /**
92
- * CSS类名
93
- */
46
+ style?: CSSProperties;
94
47
  className?: string;
95
48
  }
96
49
 
@@ -98,39 +51,12 @@ export interface AdapterOptions {
98
51
  * H5环境适配器选项
99
52
  */
100
53
  export interface H5AdapterOptions extends AdapterOptions {
101
- /**
102
- * 容器引用
103
- */
104
- containerRef?: React.RefObject<HTMLDivElement>;
105
-
106
- /**
107
- * 图表选项
108
- */
109
- option?: any;
110
-
111
- /**
112
- * 是否不合并选项
113
- */
54
+ containerRef?: HTMLElement | { current: HTMLElement | null };
55
+ option?: EChartsOption;
114
56
  notMerge?: boolean;
115
-
116
- /**
117
- * 是否延迟更新
118
- */
119
57
  lazyUpdate?: boolean;
120
-
121
- /**
122
- * 样式
123
- */
124
- style?: React.CSSProperties;
125
-
126
- /**
127
- * 类名
128
- */
58
+ style?: CSSProperties;
129
59
  className?: string;
130
-
131
- /**
132
- * 渲染器类型
133
- */
134
60
  renderer?: 'canvas' | 'svg';
135
61
  }
136
62
 
@@ -138,48 +64,19 @@ export interface H5AdapterOptions extends AdapterOptions {
138
64
  * 小程序适配器基础选项
139
65
  */
140
66
  export interface MiniAppAdapterOptions extends AdapterOptions {
141
- /**
142
- * 小程序组件实例
143
- */
144
- componentInstance?: any;
145
-
146
- /**
147
- * 是否禁用touch事件
148
- */
67
+ componentInstance?: object;
149
68
  disableTouch?: boolean;
150
-
151
- /**
152
- * 渲染模式
153
- */
154
69
  renderMode?: '2d' | 'webgl';
155
-
156
- /**
157
- * 图表配置选项
158
- */
159
- option?: any;
160
-
161
- /**
162
- * 样式属性
163
- */
164
- style?: React.CSSProperties;
70
+ option?: EChartsOption;
71
+ style?: CSSProperties;
165
72
  }
166
73
 
167
74
  /**
168
75
  * 微信小程序适配器选项
169
76
  */
170
77
  export interface WeappAdapterOptions extends MiniAppAdapterOptions {
171
- /**
172
- * 微信特有选项
173
- */
174
78
  weappOptions?: {
175
- /**
176
- * 是否启用右侧菜单
177
- */
178
79
  enableContextMenu?: boolean;
179
-
180
- /**
181
- * 是否启用跨端同层渲染
182
- */
183
80
  enableCrossPageTransfer?: boolean;
184
81
  };
185
82
  }
@@ -188,13 +85,7 @@ export interface WeappAdapterOptions extends MiniAppAdapterOptions {
188
85
  * 支付宝小程序适配器选项
189
86
  */
190
87
  export interface AlipayAdapterOptions extends MiniAppAdapterOptions {
191
- /**
192
- * 支付宝特有选项
193
- */
194
88
  alipayOptions?: {
195
- /**
196
- * 是否启用离屏渲染
197
- */
198
89
  enableOffscreenRendering?: boolean;
199
90
  };
200
91
  }
@@ -203,18 +94,8 @@ export interface AlipayAdapterOptions extends MiniAppAdapterOptions {
203
94
  * 百度小程序适配器选项
204
95
  */
205
96
  export interface SwanAdapterOptions extends MiniAppAdapterOptions {
206
- /**
207
- * 百度智能小程序特有选项
208
- */
209
97
  swanOptions?: {
210
- /**
211
- * 是否启用复杂交互
212
- */
213
98
  enableComplexInteraction?: boolean;
214
-
215
- /**
216
- * 是否启用性能优化
217
- */
218
99
  enablePerformanceOptimization?: boolean;
219
100
  };
220
101
  }
@@ -223,13 +104,7 @@ export interface SwanAdapterOptions extends MiniAppAdapterOptions {
223
104
  * 鸿蒙OS适配器选项
224
105
  */
225
106
  export interface HarmonyAdapterOptions extends AdapterOptions {
226
- /**
227
- * 鸿蒙特有选项
228
- */
229
107
  harmonyOptions?: {
230
- /**
231
- * 是否启用硬件加速
232
- */
233
108
  enableHardwareAcceleration?: boolean;
234
109
  };
235
110
  }
@@ -238,88 +113,21 @@ export interface HarmonyAdapterOptions extends AdapterOptions {
238
113
  * 适配器接口
239
114
  */
240
115
  export interface Adapter {
241
- /**
242
- * 初始化图表
243
- */
244
- init(): any;
245
-
246
- /**
247
- * 获取图表实例
248
- */
249
- getInstance(): any;
250
-
251
- /**
252
- * 设置图表配置项
253
- */
254
- setOption(option: any, opts?: any): void;
255
-
256
- /**
257
- * 获取图表宽度
258
- */
116
+ init(options?: object): EChartsType;
117
+ getInstance(): EChartsType | null;
118
+ setOption(option: EChartsOption, opts?: object): void;
259
119
  getWidth(): number;
260
-
261
- /**
262
- * 获取图表高度
263
- */
264
120
  getHeight(): number;
265
-
266
- /**
267
- * 获取DOM元素
268
- */
269
121
  getDom(): HTMLElement | null;
270
-
271
- /**
272
- * 调整图表大小
273
- */
274
- resize(opts?: any): void;
275
-
276
- /**
277
- * 触发图表行为
278
- */
279
- dispatchAction(payload: any): void;
280
-
281
- /**
282
- * 转换为DataURL
283
- */
284
- convertToDataURL(opts?: any): string | undefined;
285
-
286
- /**
287
- * 清空图表
288
- */
122
+ resize(opts?: object): void;
123
+ dispatchAction(payload: object): void;
124
+ convertToDataURL(opts?: object): string | undefined;
289
125
  clear(): void;
290
-
291
- /**
292
- * 获取DataURL
293
- */
294
- getDataURL(opts?: any): string | undefined;
295
-
296
- /**
297
- * 绑定事件
298
- */
126
+ getDataURL(opts?: object): string | undefined;
299
127
  on(eventName: string, handler: EventHandler, context?: object): void;
300
-
301
- /**
302
- * 解绑事件
303
- */
304
128
  off(eventName: string, handler?: EventHandler): void;
305
-
306
- /**
307
- * 显示加载动画
308
- */
309
129
  showLoading(opts?: object): void;
310
-
311
- /**
312
- * 隐藏加载动画
313
- */
314
130
  hideLoading(): void;
315
-
316
- /**
317
- * 销毁图表实例
318
- */
319
131
  dispose(): void;
320
-
321
- /**
322
- * 渲染图表
323
- */
324
- render(): JSX.Element;
132
+ render?(): JSX.Element | null;
325
133
  }