UNPKG

78 kBPlain TextView Raw
1import { COMPONENT_TYPE, DIRECTION, LAYER } from './constant';
2import {
3 AxisLabelCfg,
4 AxisLineCfg,
5 AxisSubTickLineCfg,
6 AxisTickLineCfg,
7 AxisTitleCfg,
8 ContinueLegendHandlerCfg,
9 ContinueLegendLabelCfg,
10 ContinueLegendRailCfg,
11 ContinueLegendTrackCfg,
12 Coordinate,
13 CrosshairLineCfg,
14 CrosshairTextBackgroundCfg,
15 CrosshairTextCfg,
16 EnhancedTextCfg,
17 GridLineCfg,
18 GroupComponent,
19 HtmlComponent,
20 ICanvas,
21 IGroup,
22 IShape,
23 LegendBackgroundCfg,
24 LegendItemNameCfg,
25 LegendItemValueCfg,
26 LegendMarkerCfg,
27 LegendTitleCfg,
28 PathCommand,
29 Scale,
30 ScaleConfig,
31 ShapeAttrs,
32 LineAnnotationTextCfg,
33 TrendCfg,
34} from './dependents';
35
36import { View } from './chart';
37import { Facet } from './facet';
38import Element from './geometry/element';
39import { PaddingCalCtor } from './chart/layout/padding-cal';
40
41// ============================ 基础类型 ============================
42/** 通用对象 */
43export interface LooseObject {
44 [key: string]: any;
45}
46
47/** 一个点位置 */
48export interface Point {
49 readonly x: number;
50 readonly y: number;
51}
52
53/** 画布范围 */
54export interface Region {
55 readonly start: Point;
56 readonly end: Point;
57}
58
59/** 画布大小 */
60export interface Size {
61 readonly width: number;
62 readonly height: number;
63}
64
65/** 带范围的点结构 */
66export interface RangePoint {
67 readonly x?: number | number[];
68 readonly y?: number | number[];
69}
70
71/** 用户数据经过图形映射处理后的数据结构 */
72export interface MappingDatum {
73 /** 原始数据 */
74 _origin: Datum;
75 /** shape 的关键点信息 */
76 points?: ShapeVertices;
77 /** 相对于当前 shape 的下一个 shape 的关键点信息 */
78 nextPoints?: ShapeVertices;
79 /** x 轴的坐标 */
80 x?: number[] | number;
81 /** y 轴的坐标 */
82 y?: number[] | number;
83 /** 颜色 */
84 color?: string;
85 /** 渲染的 shape 类型 */
86 shape?: string | string[];
87 /** 大小 */
88 size?: number;
89}
90
91/** 绘制 Shape 需要的图形、样式、关键点等信息 */
92export interface ShapeInfo {
93 /** x 坐标 */
94 x: number | number[];
95 /** y 坐标 */
96 y: number | number[];
97 /** 映射的 shape 类型 */
98 shape?: string | string[];
99 /** size 映射值 */
100 size?: number;
101 /** 映射的颜色值 */
102 color?: string;
103 /** 用户设置的图形样式 */
104 style?: LooseObject;
105 /** 是否在极坐标下 */
106 isInCircle?: boolean;
107 /** 对应的原始数据记录 */
108 data?: Datum | Data;
109 /** 存储进行图形映射后的数据 */
110 mappingData?: MappingDatum | MappingDatum[];
111 /** 构成 shape 的关键点 */
112 points?: ShapeVertices;
113 /** 下一个数据集对应的关键点 */
114 nextPoints?: ShapeVertices;
115 /** Geometry.Text 需要 */
116 text?: string;
117 /** 数据是否发生层叠 */
118 isStack?: boolean;
119 /** 是否连接空值,只对 Path Line Area 这三种 Geometry 生效。 */
120 connectNulls?: boolean;
121 /** shape 背景,只对 Interval Geometry 生效,目前只对 interval-rect shape 生效。 */
122 background?: {
123 style?: ShapeAttrs;
124 };
125 /** 是否展示单个孤立的数据点,只对 Path Line Area 这三种 Geometry 生效。 */
126 showSinglePoint?: boolean;
127 /** 默认的 shape 样式 */
128 defaultStyle?: LooseObject;
129 /** 自定义的数据,传入到 shapeInfo 中 */
130 customInfo?: CustomOption;
131}
132
133/** 用户配置的动画,属性均可选 */
134export interface AnimateCfg {
135 /** 动画缓动函数 */
136 readonly easing?: string | AnimateEasingCallback;
137 /** 动画执行函数 */
138 readonly animation?: string;
139 /** 动画执行时间 */
140 readonly duration?: number | AnimateDurationCallback;
141 /** 动画延迟时间 */
142 readonly delay?: number | AnimateDelayCallback;
143 /** 动画执行结束后的回调函数 */
144 readonly callback?: () => any;
145}
146
147/** 传递给 G 的动画配置,duration 必须提供 */
148export interface GAnimateCfg {
149 /** 动画执行时间 */
150 readonly duration: number;
151 /** 动画缓动函数 */
152 readonly easing?: string;
153 /** 动画执行函数 */
154 readonly animation?: string;
155 /** 动画延迟时间 */
156 readonly delay?: number;
157 /** 动画执行结束后的回调函数 */
158 readonly callback?: () => any;
159}
160
161// ============================ Geometry 接口相关的类型定义 ============================
162/** 图形属性配置项定义,如 geometry.position({}) */
163export interface AttributeOption {
164 /** 映射的属性字段。 */
165 fields?: string[];
166 /** 回调函数。 */
167 callback?: (...args) => any;
168 /** 指定常量映射规则。 */
169 values?: any[];
170}
171
172/** 数据调整配置项定义,`geometry.adjust({})` */
173export interface AdjustOption {
174 /** 数据调整类型。 */
175 readonly type: AdjustType;
176 /**
177 * 该属性只对 'dodge' 类型生效,取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距。
178 *
179 * ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*ps3pToOg2nwAAAAAAAAAAABkARQnAQ)
180 */
181 readonly marginRatio?: number;
182 /**
183 * 该属性只对 'dodge' 类型生效,声明以哪个数据字段为分组依据。
184 */
185 readonly dodgeBy?: string;
186 /**
187 * 该属性只对 'stack' 类型生效,用于控制是否对数据进行反序操作。
188 */
189 readonly reverseOrder?: boolean;
190}
191
192/** `geometry.style({})` 样式配置定义 */
193export interface StyleOption {
194 /** 映射的字段。 */
195 readonly fields?: string[];
196 /** 回调函数。 */
197 readonly callback?: (...args) => LooseObject;
198 /** 图形样式配置。 */
199 readonly cfg?: LooseObject;
200}
201
202/** geometry.custom() custom 自定义的配置,可以传入任何数据 */
203export type CustomOption = any;
204
205/** `geometry.tooltip({})` Tooltip 配置定义 */
206export interface GeometryTooltipOption {
207 /** 参与映射的字段。 */
208 readonly fields: string[];
209 /** 回调函数。 */
210 readonly callback?: (...args) => LooseObject;
211}
212
213export interface GeometryLabelLayoutCfg {
214 /** label 布局类型。 */
215 type: string;
216 /** 各个布局函数开放给用户的配置。 */
217 cfg?: LooseObject;
218}
219
220/** geometry.label({}) 配置属性 */
221export interface GeometryLabelCfg {
222 /**
223 * 用于声明渲染的 label 类型。
224 * 当用户使用了自定义的 label 类型,需要声明具体的 type 类型,否则会使用默认的 label 类型渲染。
225 */
226 type?: string;
227 /** 相对数据点的偏移距离, polar 和 theta 坐标系下可使用百分比字符串。 */
228 offset?: number | string;
229 /** label 相对于数据点在 X 方向的偏移距离。 */
230 offsetX?: number;
231 /** label 相对于数据点在 Y 方向的偏移距离。 */
232 offsetY?: number;
233 /**
234 * 展示的文本内容,如果不声明则按照参与映射的第一字段的值进行显示。
235 * 当 content 为 IGroup 或者 IShape 类型时,请使用相对定位,即 x 和 y 坐标都设为 0,G2 内部会整体做最后的 label 进行定位的。
236 * 示例: https://g2.antv.vision/zh/examples/pie/basic#pie-custome-label
237 */
238 content?: string | IGroup | IShape | GeometryLabelContentCallback;
239 /** label 文本图形属性样式。 */
240 style?: LooseObject;
241 /** label 是否自动旋转,默认为 true。 */
242 autoRotate?: boolean;
243 /**
244 * 当且仅当 `autoRotate` 为 false 时生效,用于设置文本的旋转角度,**弧度制**。
245 */
246 rotate?: number;
247 /** 标签高度设置,仅当标签类型 type 为 pie 时生效;也可在主题中设置 pieLabels.labelHeight */
248 labelHeight?: number;
249 /**
250 * 用于设置文本连接线的样式属性,null 表示不展示。
251 */
252 labelLine?: null | boolean | { style?: object };
253 /** 只对极坐标下的文本生效,表示文本是否按照角度进行放射状显示,true 表示开启,false 表示关闭。 */
254 labelEmit?: boolean;
255 /**
256 * 文本布局类型,支持多种布局函数组合使用。
257 *
258 * 目前提供了三种:'overlap','fixedOverlap','limitInShape':
259 * 1. overlap: label 防遮挡,为了防止 label 之间相互覆盖,通过尝试向**四周偏移**来剔除放不下的 label。
260 * 2. fixed-overlap: 不改变 label 位置的情况下对相互重叠的 label 进行调整。
261 * 3. limit-in-shape: 剔除 shape 容纳不了的 label。
262 *
263 * @example
264 * ```ts
265 * layout: {
266 * type: 'overlap',
267 * },
268 * ```
269 */
270 layout?: GeometryLabelLayoutCfg | GeometryLabelLayoutCfg[];
271 /**
272 * 用于绘制 label 背景
273 */
274 background?: {
275 /**
276 * 背景框 图形属性配置
277 * - fill?: string; 背景框 填充色
278 * - stroke?: string; 背景框 描边色
279 * - lineWidth?: string; 背景框 描边宽度
280 * - radius?: number | number[]; 背景框圆角,支持整数或数组形式
281 */
282 style?: ShapeAttrs;
283 /** 背景框 内边距 */
284 padding?: number | number[];
285 };
286 /**
287 * 仅当 geometry 为 interval 时生效,指定当前 label 与当前图形的相对位置。
288 */
289 position?:
290 | ((data: Datum, mappingData: MappingDatum, index: number) => IntervalGeometryLabelPosition)
291 | IntervalGeometryLabelPosition;
292 /** 动画配置。 */
293 animate?: AnimateOption | false | null;
294}
295
296/** `geometry().label({})` 配置定义 */
297export interface LabelOption {
298 /** 映射的字段。 */
299 fields?: string[];
300 /** 回调函数。 */
301 callback?: LabelCallback;
302 cfg?: GeometryLabelCfg;
303}
304
305/** Geometry 下每个 state 的配置结构 */
306export interface StateCfg {
307 /** 状态样式配置。 */
308 style?: object | StateStyleCallback;
309}
310
311/** geometry.state({}) 配置定义 */
312export interface StateOption {
313 /** 默认状态样式。 */
314 default?: StateCfg;
315 /** active 状态配置。 */
316 active?: StateCfg;
317 /** inactive 状态配置。 */
318 inactive?: StateCfg;
319 /** selected 状态配置。 */
320 selected?: StateCfg;
321}
322
323/** interval label 的位置 */
324export type IntervalGeometryLabelPosition = 'top' | 'bottom' | 'middle' | 'left' | 'right';
325/** G2 提供的 adjust 类型 */
326export type AdjustType = 'stack' | 'jitter' | 'dodge' | 'symmetric';
327/** geometry.color() 图形属性回调函数定义 */
328export type ColorAttrCallback = (...args) => string;
329/** geometry.shape() 图形属性回调函数定义 */
330export type ShapeAttrCallback = (...args) => string | any[];
331/** geometry.size() 图形属性回调函数定义 */
332export type SizeAttrCallback = (...args) => number;
333/** geometry.tooltip() 接口回调函数定义 */
334export type TooltipCallback = (...args) => LooseObject;
335/** geometry.style() 接口回调函数定义 */
336export type StyleCallback = (...args) => LooseObject;
337/** geometry.label() 接口回调函数定义 */
338export type LabelCallback = (...args) => GeometryLabelCfg | null | undefined;
339/** geometry label 中 content 属性的回调函数类型定义 */
340export type GeometryLabelContentCallback = (
341 data: Datum,
342 mappingData: MappingDatum,
343 index: number
344) => string | IShape | IGroup;
345/** state 下 style 回调函数定义 */
346export type StateStyleCallback = (element: Element) => LooseObject;
347
348// ============================ Geometry Shape 接口相关的类型定义 ============================
349/** 获取 shape marker 时需要的信息 */
350export interface ShapeMarkerCfg {
351 /** 颜色。 */
352 color: string;
353 /** 是否是极坐标。 */
354 isInPolar: boolean;
355}
356
357/** 图形 marker 的配置信息。 */
358export interface ShapeMarkerAttrs {
359 /** marker 的形状。 */
360 symbol: string | ShapeMarkerSymbol;
361 /**
362 * marker 的样式,`ShapeAttrs` 属性结构如下:
363 *
364 * ```ts
365 * {
366 * // x 坐标
367 * x?: number;
368 * // y 坐标
369 * y?: number;
370 * // 圆半径
371 * r?: number;
372 * // 描边颜色
373 * stroke?: string | null;
374 * // 描边透明度
375 * strokeOpacity?: number;
376 * // 填充颜色
377 * fill?: string | null;
378 * // 填充透明度
379 * fillOpacity?: number;
380 * // 整体透明度
381 * opacity?: number;
382 * // 线宽
383 * lineWidth?: number;
384 * // 指定如何绘制每一条线段末端
385 * lineCap?: 'butt' | 'round' | 'square';
386 * // 用来设置2个长度不为0的相连部分(线段,圆弧,曲线)如何连接在一起的属性(长度为0的变形部分,其指定的末端和控制点在同一位置,会被忽略)
387 * lineJoin?: 'bevel' | 'round' | 'miter';
388 * // 设置线的虚线样式,可以指定一个数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。 如果数组元素的数量是奇数,数组的元素会被复制并重复。例如, [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。这个属性取决于浏览器是否支持 setLineDash() 函数。
389 * lineDash?: number[] | null;
390 * // Path 路径
391 * path?: string | object[];
392 * // 图形坐标点
393 * points?: object[];
394 * // 宽度
395 * width?: number;
396 * // 高度
397 * height?: number;
398 * // 阴影模糊效果程度
399 * shadowBlur?: number;
400 * // 阴影颜色
401 * shadowColor?: string | null;
402 * // 阴影 x 方向偏移量
403 * shadowOffsetX?: number;
404 * // 阴影 y 方向偏移量
405 * shadowOffsetY?: number;
406 * // 设置文本内容的当前对齐方式
407 * textAlign?: 'start' | 'center' | 'end' | 'left' | 'right';
408 * // 设置在绘制文本时使用的当前文本基线
409 * textBaseline?: 'top' | 'hanging' | 'middle' | 'alphabetic' | 'ideographic' | 'bottom';
410 * // 字体样式
411 * fontStyle?: 'normal' | 'italic' | 'oblique';
412 * // 文本字体大小
413 * fontSize?: number;
414 * // 文本字体
415 * fontFamily?: string;
416 * // 文本粗细
417 * fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number;
418 * // 字体变体
419 * fontVariant?: 'normal' | 'small-caps' | string;
420 * // 文本行高
421 * lineHeight?: number;
422 * [key: string]: any;
423 * }
424 * ```
425 *
426 * 详见 {@link https://github.com/antvis/g/blob/28e3178b616573e0fa6d59694f1aaca2baaa9766/packages/g-base/src/types.ts#L37|ShapeAttrs}
427 */
428 style: ShapeAttrs;
429}
430
431/** shape 关键点信息 */
432export interface ShapePoint {
433 /** 数据点映射后对应 x 的值。 */
434 readonly x: number | number[];
435 /** 数据点映射后对应 y 的值。 */
436 readonly y?: number | number[];
437 /** 数据在 y 方向的最小值。 */
438 readonly y0?: number;
439 size?: number;
440}
441
442/** 注册 ShapeFactory 需要实现的接口。 */
443export interface RegisterShapeFactory {
444 /** 默认的 shape 类型。 */
445 readonly defaultShapeType: string;
446 /** 返回绘制 shape 所有的关键点集合。 */
447 readonly getDefaultPoints?: (pointInfo: ShapePoint) => Point[];
448 /** 获取 shape 的默认绘制样式 */
449 readonly getDefaultStyle?: (geometryTheme: LooseObject) => LooseObject;
450 /** 获取 shape 对应的缩略图配置。 */
451 readonly getMarker?: (shapeType: string, markerCfg: ShapeMarkerCfg) => ShapeMarkerAttrs;
452 /** 创建具体的 G.Shape 实例。 */
453 readonly drawShape?: (shapeType: string, cfg: ShapeInfo, container: IGroup) => IShape | IGroup;
454}
455
456/** 注册具体 shape 需要实现的接口。 */
457export interface RegisterShape {
458 /** 计算绘制需要的关键点,在注册具体的 shape 时由开发者自己定义。 */
459 readonly getPoints?: (pointInfo: ShapePoint) => Point[];
460 /** 获取 shape 对应的缩略图样式配置,在注册具体的 shape 时由开发者自己定义。 */
461 readonly getMarker?: (markerCfg: ShapeMarkerCfg) => ShapeMarkerAttrs;
462 /** 绘制函数。 */
463 readonly draw: (cfg: ShapeInfo, container: IGroup) => IShape | IGroup | void;
464}
465
466/** Shape 接口定义。 */
467export interface Shape extends RegisterShape {
468 /** 坐标系对象。 */
469 coordinate: Coordinate;
470 /** 工具函数,将 0~1 path 转化成实际画布 path。 */
471 parsePath: (path: any) => PathCommand[];
472 /** 工具函数,0~1 的坐标点转换成实际画布坐标点。 */
473 parsePoint: (point: Point) => Point;
474 /** 工具函数,0~1 的坐标点集合转换成实际画布坐标点集合。 */
475 parsePoints: (points: Point[]) => Point[];
476}
477
478/** ShapeFactory 接口定义。 */
479export interface ShapeFactory extends RegisterShapeFactory {
480 /** 工厂名。 */
481 geometryType: string;
482 /** 坐标系对象。 */
483 coordinate: Coordinate;
484 /** ShapeFactory 下所有的主题样式。 */
485 theme: LooseObject;
486 /** 根据名称获取具体的 shape 对象。 */
487 getShape: (shapeType: string | string[]) => Shape;
488 /** 获取构成 shape 的关键点。 */
489 getShapePoints: (shapeType: string | string[], pointInfo: ShapePoint) => Point[];
490}
491
492/** 自定义 Shape marker 的函数 */
493export type ShapeMarkerSymbol = (x: number, y: number, r: number) => PathCommand[];
494
495// ============================ Annotation 类型定义 ============================
496/** Annotation position 回调函数 */
497export type AnnotationPositionCallback = (
498 xScales: Scale[] | Record<string, Scale>,
499 yScales: Scale[] | Record<string, Scale>
500) => [number | string, number | string];
501/** Annotation 位置相关属性的类型定义 */
502export type AnnotationPosition =
503 | [number | string, number | string]
504 | Record<string, number | string>
505 | AnnotationPositionCallback;
506
507/** Annotation 定义的通用属性,chart.annotation().line({}) */
508export interface AnnotationBaseOption {
509 readonly type?: string;
510 /** 指定 annotation 是否绘制在 canvas 最上层,默认为 false, 即绘制在最下层 */
511 readonly top?: boolean;
512 /** 是否进行动画 */
513 readonly animate?: boolean;
514 /** 动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。 */
515 readonly animateOption?: ComponentAnimateOption;
516 /** x 方向的偏移量 */
517 readonly offsetX?: number;
518 /** y 方向的偏移量 */
519 readonly offsetY?: number;
520}
521
522/** 使用 RegionPosition 定位的组件配置 */
523export interface RegionPositionBaseOption extends AnnotationBaseOption {
524 /** 起始位置 */
525 readonly start: AnnotationPosition;
526 /** 结束位置 */
527 readonly end: AnnotationPosition;
528 /** 图形样式属性 */
529 readonly style?: ShapeAttrs;
530}
531
532/** 使用 PointPosition 定位的组件配置 */
533export interface PointPositionBaseOption extends AnnotationBaseOption {
534 /** Point 定位位置 */
535 readonly position: AnnotationPosition;
536}
537
538/** 使用 Image Annotation 组件的配置定义 */
539export interface ImageOption extends RegionPositionBaseOption {
540 /** 图片路径 */
541 readonly src: string;
542}
543
544/** 使用 Line Annotation 组件的配置定义 */
545export interface LineOption extends RegionPositionBaseOption {
546 /** 文本配置定义 */
547 readonly text?: LineAnnotationTextCfg;
548}
549/** 使用 Arc Annotation 组件的配置定义 */
550export type ArcOption = RegionPositionBaseOption;
551/** 使用 Region Annotation 组件的配置定义 */
552export type RegionOption = RegionPositionBaseOption;
553/** 使用 Text Annotation 组件的配置定义 */
554export interface TextOption extends PointPositionBaseOption, Omit<EnhancedTextCfg, 'content'> {
555 content?: string | number | ((filteredData: object[]) => string | number);
556}
557/** 使用 DataMarker Annotation 组件的配置定义 */
558export interface DataMarkerOption extends PointPositionBaseOption {
559 /** point 设置 */
560 readonly point?: null | { style?: ShapeAttrs };
561 /** line 设置 */
562 readonly line?: null | { style?: ShapeAttrs; length?: number };
563 /** text 设置 */
564 readonly text: null | EnhancedTextCfg;
565 /** 文本超出绘制区域时,是否自动调节文本方向,默认为 true */
566 readonly autoAdjust?: boolean;
567 /** 朝向,默认为 upward,可选值为 'upward' 或者 'downward' */
568 readonly direction?: 'upward' | 'downward';
569}
570/** 使用 DataRegion Annotation 组件的配置定义 */
571export interface DataRegionOption extends RegionPositionBaseOption {
572 /** line长度,default为 0 */
573 readonly lineLength?: number;
574 /** 标注区间的配置 */
575 readonly region?: null | { style?: ShapeAttrs };
576 /** 文本的配置 */
577 readonly text?: null | EnhancedTextCfg;
578}
579/** 使用 RegionFilter Annotation 组件的配置定义 */
580export interface RegionFilterOption extends RegionPositionBaseOption {
581 /** 染色色值 */
582 readonly color: string;
583 /* 可选,设定regionFilter只对特定geom类型起作用,如apply:['area'] */
584 readonly apply?: string[];
585}
586
587/** Shape Annotation 的配置 */
588export interface ShapeAnnotationOption extends AnnotationBaseOption {
589 /** 自定义 Annotation 绘制函数 */
590 render: (
591 container: IGroup,
592 view: View,
593 helpers: { parsePosition: (position: [string | number, string | number] | Datum) => Point }
594 ) => void;
595}
596
597/**
598 * Html Annotation 配置
599 */
600export interface HtmlAnnotationOption extends PointPositionBaseOption {
601 /** 容器元素 */
602 container?: string | HTMLElement;
603 /** 自定义 HTML DOM 元素 */
604 html: string | HTMLElement | ((container: HTMLElement, view: View) => void | string | HTMLElement);
605 /** X 方向对齐 */
606 alignX?: 'left' | 'middle' | 'right';
607 /** Y 方向对齐 */
608 alignY?: 'top' | 'middle' | 'bottom';
609 /** X 方向偏移 */
610 offsetX?: number;
611 /** Y 方向偏移 */
612 offsetY?: number;
613}
614
615// ============================ Chart && View 上的类型定义 ============================
616/** Tooltip 内容框的 css 样式定义 */
617export interface TooltipDomStyles {
618 'g2-tooltip'?: LooseObject;
619 'g2-tooltip-title'?: LooseObject;
620 'g2-tooltip-list'?: LooseObject;
621 'g2-tooltip-list-item'?: LooseObject;
622 'g2-tooltip-marker'?: LooseObject;
623 'g2-tooltip-value'?: LooseObject;
624 'g2-tooltip-name'?: LooseObject;
625}
626
627/** 目前组件动画允许的参数配置 */
628export interface ComponentAnimateCfg {
629 /** 动画执行时间 */
630 readonly duration?: number;
631 /** 动画缓动函数 */
632 readonly easing?: string;
633 /** 动画延迟时间 */
634 readonly delay?: number;
635}
636/** 组件各个动画类型配置 */
637export interface ComponentAnimateOption {
638 /** 初入场动画配置 */
639 appear?: ComponentAnimateCfg;
640 /** 更新动画配置 */
641 update?: ComponentAnimateCfg;
642 /** 更新后新入场的动画配置 */
643 enter?: ComponentAnimateCfg;
644 /** 离场动画配置 */
645 leave?: ComponentAnimateCfg;
646}
647
648/** 列定义配置项 */
649export interface ScaleOption extends ScaleConfig {
650 /** 声明度量类型。 */
651 type?: ScaleType;
652 /**
653 * 同步 scale
654 *
655 * @example
656 * ```ts
657 * chart.scale({
658 * x: { sync: true },
659 * y: { sync: true },
660 * x1: { sync: 'x1' },
661 * x2: { sync: 'x1' },
662 * });
663 * ```
664 *
665 * 通过以上配置,我们会分别对 xy 两个字段,x1x2 两个字段进行同步度量操作。
666 */
667 sync?: boolean | string;
668 /**
669 * 只对 type: 'time' 的 scale 生效,强制显示最后的日期 tick
670 */
671 showLast?: boolean;
672 /**
673 * 用于声明使用数据记录中的哪些字段来组成一条数据的唯一 id(如有多个字段,则使用 '-' 连接)。
674 * 数据 id 用于标识 Element 图形元素,应用于 Geometry 中的图形元素 Element 更新。
675 * 默认 G2 内部会有一套 ID 生成规则,如果不能满足用户需求,用户既可以使用该属性配置 id
676 * @example
677 *
678 * 下面的例子中,声明了将 'x' 和 'y' 字段的数值来作为每条数据记录的 id,即下面数据两条数据的 id 分别为:'1-23' 和 '2-2'。
679 * ```ts
680 * const data = [
681 * { x: 1, y: 23, z: 'a' },
682 * { x: 2, y: 2, z: 'b' },
683 * ];
684 *
685 * chart.scale({
686 * x: { key: true },
687 * y: { key: true },
688 * });
689 * ```
690 */
691 key?: boolean;
692}
693
694/** Geometry 动画参数配置。geometry.animate() */
695export interface AnimateOption {
696 /** chart 初始化渲染时的入场动画,false/null 表示关闭入场动画。 */
697 appear?: AnimateCfg | false | null;
698 /** chart 发生更新时,新增元素的入场动画,false/null 表示关闭入场动画。 */
699 enter?: AnimateCfg | false | null;
700 /** 更新动画配置,false/null 表示关闭更新动画。 */
701 update?: AnimateCfg | false | null;
702 /** 销毁动画配置,false/null 表示关闭销毁动画。 */
703 leave?: AnimateCfg | false | null;
704}
705
706/** 用于配置项式声明交互行为 */
707export interface InteractionOption {
708 /** 交互名称 */
709 type: string;
710 /** 交互配置 */
711 cfg?: LooseObject;
712}
713
714/** 用于配置项式的 Geometry 创建方式 */
715export interface GeometryOption {
716 /** Geometry 的类型。 */
717 type?: 'interval' | 'line' | 'path' | 'point' | 'area' | 'polygon' | 'schema' | 'edge' | 'heatmap' | string;
718 /** position 通道映射规则,对应 `geometry.position()`。 */
719 position?: string | AttributeOption;
720 /** color 通道映射规则,对应 `geometry.color()`。 */
721 color?: string | AttributeOption;
722 /** shape 通道映射规则,对应 `geometry.shape()`。 */
723 shape?: string | AttributeOption;
724 /** size 通道映射规则,对应 `geometry.size()`。 */
725 size?: number | string | AttributeOption;
726 /** adjust 数据调整方式,对应 `geometry.adjust()`。 */
727 adjust?: string | string[] | AdjustOption | AdjustOption[];
728 /** style 样式配置,对应 `geometry.size()`。 */
729 style?: StyleOption | LooseObject;
730 /** tooltip 配置,对应 `geometry.tooltip()`。 */
731 tooltip?: GeometryTooltipOption | boolean | string;
732 /** Geometry 动画配置,对应 `geometry.animate()`。 */
733 animate?: AnimateOption | boolean;
734 /** Label 配置,对应 `geometry.label()`。 */
735 label?: LabelOption | false | string;
736 /** state 样式配置,对应 `geometry.state()`。 */
737 state?: StateOption;
738 /** 其他配置 */
739 cfg?: {
740 /** 是否对数据进行排序 */
741 sortable?: boolean;
742 /** 是否可见 */
743 visible?: boolean;
744 /** 是否连接空值,仅对 'line', 'area' 和 'path' 生效 */
745 connectNulls?: boolean;
746 };
747}
748
749/** 用于配置型式的 View 声明方式 */
750export interface ViewOption {
751 /** view 的唯一表示 ID */
752 readonly id?: string;
753 /** view 的绘制范围,起始点为左上角。 */
754 readonly region?: Region;
755 /**
756 * 设置图表的内边距,使用方式参考 CSS 盒模型。
757 * 下图黄色区域即为 padding 的范围。
758 * ![](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*pYwiQrdXGJ8AAAAAAAAAAABkARQnAQ)
759 *
760 * @example
761 * 1. padding: 20
762 * 2. padding: [ 10, 30, 30 ]
763 */
764 readonly padding?: ViewPadding;
765 /** 设置主题。 */
766 readonly theme?: LooseObject | string;
767 /** 是否可见。 */
768 readonly visible?: boolean;
769 /**
770 * 图表组件、图形映射等相关的配置。
771 */
772 readonly options?: Options;
773}
774
775/** Chart 构造方法的入参 */
776export interface ChartCfg
777 extends Omit<ViewCfg, 'parent' | 'canvas' | 'foregroundGroup' | 'middleGroup' | 'backgroundGroup' | 'region'> {
778 /** 指定 chart 绘制的 DOM,可以传入 DOM id,也可以直接传入 dom 实例。 */
779 readonly container: string | HTMLElement;
780 /** 图表宽度。 */
781 readonly width?: number;
782 /** 图表高度。 */
783 readonly height?: number;
784 /**
785 * 图表是否自适应容器宽高,默认为 false,用户需要手动设置 width 和 height。
786 * 当 `autoFit: true` 时,会自动取图表容器的宽高,如果用户设置了 height,那么会以用户设置的 height 为准。
787 */
788 readonly autoFit?: boolean;
789 /** 指定渲染引擎,默认使用 canvas。 */
790 readonly renderer?: Renderer;
791 /** 设置设备像素比,默认取浏览器的值 `window.devicePixelRatio`。 */
792 readonly pixelRatio?: number;
793 /**
794 * 是否开启局部刷新,默认开启。
795 */
796 readonly localRefresh?: boolean;
797 /** 支持 CSS transform,开启后图表的交互以及事件将在页面设置了 css transform 属性时生效,默认关闭。 */
798 readonly supportCSSTransform?: boolean;
799 /**
800 * 配置图表默认交互,仅支持字符串形式。
801 */
802 readonly defaultInteractions?: string[];
803}
804
805export type SyncViewPaddingFn = (chart: View, views: View[], PC: PaddingCalCtor) => void;
806
807/** View 构造参数 */
808export interface ViewCfg {
809 /** View id,可以由外部传入 */
810 readonly id?: string;
811 /** 当前 view 的父级 view。 */
812 readonly parent: View;
813 /** canvas 实例。 */
814 readonly canvas: ICanvas;
815 /** 前景层 */
816 readonly foregroundGroup: IGroup;
817 /** 中间层 */
818 readonly middleGroup: IGroup;
819 /** 背景层 */
820 readonly backgroundGroup: IGroup;
821 /** view 的绘制范围 */
822 readonly region?: Region;
823 /** 是否对超出坐标系范围的 Geometry 进行剪切 */
824 readonly limitInPlot?: boolean;
825 /**
826 * 设置图表的内边距,使用方式参考 CSS 盒模型。
827 * 下图黄色区域即为 padding 的范围。
828 * ![](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*pYwiQrdXGJ8AAAAAAAAAAABkARQnAQ)
829 *
830 * @example
831 * 1. padding: 20
832 * 2. padding: [ 10, 30, 30 ]
833 */
834 readonly padding?: ViewPadding;
835 /**
836 * 设置图表的内边距在padding的基础上增加appendPading的调整。
837 * @example
838 * 1. padding: 20
839 * 2. padding: [ 10, 30, 30 ]
840 */
841 readonly appendPadding?: ViewAppendPadding;
842 /**
843 * 是否同步子 view 的 padding,可以是 boolean / SyncViewPaddingFn
844 * 比如:
845 * view1 的 padding 10
846 * view2 的 padding 20
847 * 那么两个子 view 的 padding 统一变成最大的 20.
848 *
849 * 如果是 Funcion,则使用自定义的方式去计算子 view 的 padding,这个函数中去修改所有的 views autoPadding 值
850 */
851 readonly syncViewPadding?: boolean | SyncViewPaddingFn;
852 /** 设置 view 实例主题。 */
853 readonly theme?: LooseObject | string;
854 /**
855 * 图表组件、图形映射等相关的配置。
856 */
857 readonly options?: Options;
858 /** 是否可见。 */
859 readonly visible?: boolean;
860}
861
862/**
863 * @ignore
864 * 组件及布局的信息
865 */
866export interface ComponentOption {
867 readonly id?: string;
868 readonly component: GroupComponent | HtmlComponent;
869 readonly layer: LAYER;
870 direction: DIRECTION;
871 readonly type: COMPONENT_TYPE;
872 /* 其他的额外信息 */
873 readonly extra?: any;
874}
875
876/** Legend marker 的配置结构 */
877export interface MarkerCfg extends LegendMarkerCfg {
878 /** 配置图例 marker 的 symbol 形状。 */
879 symbol?: Marker | MarkerCallback;
880}
881
882/** Legend item 各个图例项的数据结构 */
883export interface LegendItem {
884 /**
885 * 唯一值,用于动画或者查找
886 */
887 id?: string;
888 /** 名称 */
889 name: string;
890 /** 值 */
891 value: any;
892 /** 图形标记 */
893 marker?: MarkerCfg;
894 /** 初始是否处于未激活状态 */
895 unchecked?: boolean;
896}
897
898export interface G2LegendTitleCfg extends LegendTitleCfg {
899 /** title 文本显示内容 */
900 text?: string;
901}
902
903/**
904 * 图例项配置
905 */
906export interface LegendCfg {
907 /**
908 * 是否为自定义图例,当该属性为 true 时,需要声明 items 属性。
909 */
910 readonly custom?: boolean;
911 /**
912 * 布局方式: horizontal,vertical
913 */
914 layout?: 'horizontal' | 'vertical';
915 /**
916 * 图例标题配置,默认不展示。
917 *
918 * 属性结构如下:
919 *
920 * ```ts
921 * {
922 * spacing?: number; // 标题同图例项的间距
923 * style?: ShapeAttrs; // 文本样式配置项
924 * }
925 * ```
926 *
927 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L639|LegendTitleCfg},
928 */
929 title?: G2LegendTitleCfg;
930 /**
931 * 背景框配置项。
932 *
933 * 属性结构如下:
934 *
935 * ```ts
936 * {
937 * padding?: number | number[]; // 背景的留白
938 * style?: ShapeAttrs; // 背景样式配置项
939 * }
940 * ```
941 *
942 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L652|LegendBackgroundCfg}
943 */
944 background?: LegendBackgroundCfg;
945 /** 图例的位置。 */
946 position?:
947 | 'top'
948 | 'top-left'
949 | 'top-right'
950 | 'right'
951 | 'right-top'
952 | 'right-bottom'
953 | 'left'
954 | 'left-top'
955 | 'left-bottom'
956 | 'bottom'
957 | 'bottom-left'
958 | 'bottom-right';
959 /** 动画开关,默认关闭。 */
960 animate?: boolean;
961 /** 动画参数配置,当且仅当 `animate` 属性为 true,即动画开启时生效。 */
962 animateOption?: ComponentAnimateOption;
963 /**
964 * **分类图例适用**,控制图例项水平方向的间距。
965 */
966 itemSpacing?: number;
967 /**
968 * **分类图例适用**,控制图例项垂直方向的间距。
969 */
970 itemMarginBottom?: number;
971 /**
972 * **分类图例适用**,图例项的最大宽度,超出则自动缩略。
973 * `maxItemWidth` 可以是像素值;
974 * 也可以是相对值(取 0 到 1 范围的数值),代表占图表宽度的多少
975 */
976 maxItemWidth?: number;
977 /**
978 * **分类图例适用**,图例项的宽度, 默认为 null,自动计算。
979 */
980 itemWidth?: number;
981 /**
982 * **分类图例适用**,图例的高度,默认为 null。
983 */
984 itemHeight?: number;
985 /**
986 * **分类图例适用**,图例项 name 文本的配置。
987 * 属性结构如下:
988 *
989 * ```ts
990 * {
991 * spacing?: number; // 图例项 name 同后面 value 的间距
992 * formatter?: (text: string, item: ListItem, index: number) => any; // 格式化文本函数
993 * style?: ShapeAttrs; // 文本配置项
994 * }
995 * ```
996 *
997 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L665|LegendItemNameCfg},
998 */
999 itemName?: LegendItemNameCfg;
1000 /**
1001 * **分类图例适用**,图例项 value 附加值的配置项。
1002 * 属性结构如下:
1003 *
1004 * ```ts
1005 * {
1006 * alignRight?: boolean; // 是否右对齐,默认为 false,仅当设置图例项宽度时生效
1007 * formatter?: (text: string, item: ListItem, index: number) => any; // 格式化文本函数
1008 * style?: ShapeAttrs; // 图例项附加值的配置
1009 * }
1010 * ```
1011 *
1012 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L685|LegendItemValueCfg},
1013 */
1014 itemValue?: LegendItemValueCfg;
1015 /**
1016 * **分类图例适用**,图例项最大宽度设置。
1017 */
1018 maxWidth?: number;
1019 /**
1020 * **分类图例适用**,图例项最大高度设置。
1021 */
1022 maxHeight?: number;
1023 /**
1024 * **分类图例适用**,图例项的 marker 图标的配置。
1025 */
1026 marker?: MarkerCfg;
1027 /**
1028 * **适用于分类图例**,当图例项过多时是否进行分页。
1029 */
1030 flipPage?: boolean;
1031 /**
1032 * **分类图例适用**,用户自己配置图例项的内容。
1033 */
1034 items?: LegendItem[];
1035 /**
1036 * **分类图例适用**,是否将图例项逆序展示。
1037 */
1038 reversed?: boolean;
1039
1040 /**
1041 * **连续图例适用**,选择范围的最小值。
1042 */
1043 min?: number;
1044 /**
1045 * **连续图例适用**,选择范围的最大值。
1046 */
1047 max?: number;
1048 /**
1049 * **连续图例适用**,选择的值。
1050 */
1051 value?: number[];
1052 /**
1053 * **连续图例适用**,选择范围的色块样式配置项。
1054 * 属性结构如下:
1055 *
1056 * ```ts
1057 * {
1058 * style?: ShapeAttrs; // 选定范围的样式
1059 * }
1060 * ```
1061 *
1062 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L574|ContinueLegendTrackCfg}
1063 */
1064 track?: ContinueLegendTrackCfg;
1065 /**
1066 * **连续图例适用**,图例滑轨(背景)的样式配置项。
1067 * 属性结构如下:
1068 *
1069 * ```ts
1070 * {
1071 * type?: string; // rail 的类型,color, size
1072 * size?: number; // 滑轨的宽度
1073 * defaultLength?: number; // 滑轨的默认长度,,当限制了 maxWidth,maxHeight 时,不会使用这个属性会自动计算长度
1074 * style?: ShapeAttrs; // 滑轨的样式
1075 * }
1076 * ```
1077 *
1078 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L595|ContinueLegendRailCfg},
1079 */
1080 rail?: ContinueLegendRailCfg;
1081 /**
1082 * **连续图例适用**,文本的配置项。
1083 * 属性结构如下:
1084 *
1085 * ```ts
1086 * {
1087 * // 文本同滑轨的对齐方式,有五种类型
1088 * // rail : 同滑轨对齐,在滑轨的两端
1089 * // top, bottom: 图例水平布局时有效
1090 * // left, right: 图例垂直布局时有效
1091 * align?: string;
1092 * spacing?: number; // 文本同滑轨的距离
1093 * style?: ShapeAttrs; // 文本样式
1094 * }
1095 * ```
1096 *
1097 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L618|ContinueLegendLabelCfg}
1098 */
1099 label?: ContinueLegendLabelCfg;
1100 /**
1101 * **连续图例适用**,滑块的配置项。
1102 * 属性结构如下:
1103 *
1104 * ```ts
1105 * {
1106 * size?: number; // 滑块的大小
1107 * style?: ShapeAttrs; // 滑块的样式设置
1108 * }
1109 * ```
1110 *
1111 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L582|ContinueLegendTrackCfg},
1112 */
1113 handler?: ContinueLegendHandlerCfg;
1114 /**
1115 * **连续图例适用**,滑块是否可以滑动。
1116 */
1117 slidable?: boolean;
1118 /** 图例 x 方向的偏移。 */
1119 offsetX?: number;
1120 /** 图例 y 方向的偏移。 */
1121 offsetY?: number;
1122 /** 图例在四个方向的偏移量 */
1123 padding?: number[];
1124}
1125
1126/**
1127 * Tooltip Crosshairs 的文本数据结构。
1128 */
1129export interface TooltipCrosshairsText extends CrosshairTextCfg {
1130 /** crosshairs 文本内容 */
1131 content?: string;
1132}
1133
1134/**
1135 * 辅助线文本回调函数
1136 * @param type 对应当前 crosshairs 的类型,值为 'x' 或者 'y'
1137 * @param defaultContent 对应当前 crosshairs 默认的文本内容
1138 * @param items 对应当前 tooltip 内容框中的数据
1139 * @param currentPoint 对应当前坐标点
1140 * @returns 返回当前 crosshairs 对应的辅助线文本配置
1141 */
1142export type TooltipCrosshairsTextCallback = (
1143 type: string,
1144 defaultContent: any,
1145 items: any[],
1146 currentPoint: Point
1147) => TooltipCrosshairsText;
1148/** Tooltip crosshairs 配置结构 */
1149export interface TooltipCrosshairs {
1150 /**
1151 * crosshairs 的类型: `x` 表示 x 轴上的辅助线,`y` 表示 y 轴上的辅助项。
1152 * 以下是在不同坐标系下,crosshairs 各个类型的表现:
1153 *
1154 * | 坐标系 | type = 'x' | type = 'xy' | type = 'y' |
1155 * | ------------ | ------------- | ------------- |
1156 * | 直角坐标系 | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*jmUBQ4nbtXsAAAAAAAAAAABkARQnAQ) | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*RpWXT76ZSQgAAAAAAAAAAABkARQnAQ) | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*Xjl8TLIJLuUAAAAAAAAAAABkARQnAQ) |
1157 * | 极坐标 | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*zbMVSoKTyFsAAAAAAAAAAABkARQnAQ) | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*k5EYRJspET0AAAAAAAAAAABkARQnAQ) | ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*n_TKQpUaXWEAAAAAAAAAAABkARQnAQ) |
1158 */
1159 type?: 'x' | 'y' | 'xy';
1160 /**
1161 * 辅助线的样式配置。
1162 * 属性结构如下:
1163 *
1164 * ```ts
1165 * {
1166 * style?: ShapeAttrs; // 线的样式配置
1167 * }
1168 * ```
1169 *
1170 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L1177|CrosshairLineCfg}
1171 */
1172 line?: CrosshairLineCfg;
1173 /**
1174 * 辅助线文本配置,支持回调。
1175 */
1176 text?: TooltipCrosshairsText | TooltipCrosshairsTextCallback;
1177 /**
1178 * 辅助线文本背景配置。
1179 * 属性结构如下:
1180 *
1181 * ```ts
1182 * {
1183 * padding?: number | number[]; // 文本背景周围的留白
1184 * style?: ShapeAttrs; // 文本背景的样式
1185 * }
1186 * ```
1187 *
1188 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L1185|CrosshairTextBackgroundCfg}
1189 */
1190 textBackground?: CrosshairTextBackgroundCfg;
1191 /** 辅助线是否跟随鼠标移动,默认为 false,即定位到数据点 */
1192 follow?: boolean;
1193}
1194
1195/** chart.tooltip() 接口配置属性 */
1196export interface TooltipCfg {
1197 /**
1198 * 设置 tooltip 内容框是否跟随鼠标移动。
1199 * 默认为 true,跟随鼠标移动,false 则固定位置不随鼠标移动。
1200 */
1201 follow?: boolean;
1202 /** tooltip 是否允许鼠标滑入,默认为 false,不允许 */
1203 enterable?: boolean;
1204 /** tooltip 显示延迟(ms),默认为 16ms,建议在 enterable = true 的时候才设置 */
1205 showDelay?: number;
1206 /** 是否展示 tooltip 标题。 */
1207 showTitle?: boolean;
1208 /**
1209 * 设置 tooltip 的标题内容:如果值为数据字段名,则会展示数据中对应该字段的数值,如果数据中不存在该字段,则直接展示 title 值。
1210 */
1211 title?: string;
1212 /** 设置 tooltip 的固定展示位置,相对于数据点。 */
1213 position?: 'top' | 'bottom' | 'left' | 'right';
1214 /** true 表示合并当前点对应的所有数据并展示,false 表示只展示离当前点最逼近的数据内容。 */
1215 shared?: boolean; // 是否只展示单条数据
1216 /** 是否展示 crosshairs。 */
1217 showCrosshairs?: boolean;
1218 /** 配置 tooltip 的 crosshairs,当且仅当 `showCrosshairs` 为 true 时生效。 */
1219 crosshairs?: TooltipCrosshairs;
1220 /** 是否渲染 tooltipMarkers。 */
1221 showMarkers?: boolean;
1222 /** tooltipMarker 的样式配置。 */
1223 marker?: object;
1224 /** 是否展示 tooltip 内容框 */
1225 showContent?: boolean;
1226 /** 自定义 tooltip 的容器。 */
1227 container?: string | HTMLElement;
1228 /** 用于指定图例容器的模板,自定义模板时必须包含各个 dom 节点的 class。 */
1229 containerTpl?: string;
1230 /** 每项记录的默认模板,自定义模板时必须包含各个 dom 节点的 class。 */
1231 itemTpl?: string;
1232 /** 传入各个 dom 的样式。 */
1233 domStyles?: TooltipDomStyles;
1234 /** tooltip 偏移量。 */
1235 offset?: number;
1236 /** 是否将 tooltip items 逆序 */
1237 reversed?: boolean;
1238 /** 支持自定义模板 */
1239 customContent?: (title: string, data: any[]) => string | HTMLElement;
1240}
1241
1242/** 坐标系配置 */
1243export interface CoordinateOption {
1244 /** 坐标系类型 */
1245 type?: 'polar' | 'theta' | 'rect' | 'cartesian' | 'helix';
1246 /** 坐标系配置项,目前常用于极坐标。 */
1247 cfg?: CoordinateCfg;
1248 /**
1249 * 坐标系变换操作:
1250 * 1. rotate 表示旋转,使用弧度制。
1251 * 2. scale 表示沿着 x 和 y 方向的缩放比率。
1252 * 3. reflect 表示沿 x 方向镜像或者沿 y 轴方向映射。
1253 * 4. transpose 表示 x,y 轴置换。
1254 */
1255 actions?: CoordinateActions[];
1256}
1257
1258/** 极坐标系支持的配置属性 */
1259export interface CoordinateCfg {
1260 /**
1261 * 用于极坐标,配置起始弧度。
1262 */
1263 startAngle?: number;
1264 /**
1265 * 用于极坐标,配置结束弧度。
1266 */
1267 endAngle?: number;
1268 /**
1269 * 用于极坐标,配置极坐标半径,0 - 1 范围的数值。
1270 */
1271 radius?: number;
1272 /**
1273 * 用于极坐标,极坐标内半径,0 -1 范围的数值。
1274 */
1275 innerRadius?: number;
1276}
1277
1278/** 坐标轴网格线的配置属性 */
1279export interface AxisGridCfg {
1280 /**
1281 * 线的样式。
1282 * 属性结构如下:
1283 *
1284 * ```ts
1285 * {
1286 * type?: string; // 栅格线的类型,'line' 或者 'circle'
1287 * style?: ShapeAttrs; // 栅格线的样式配置项
1288 * }
1289 * ```
1290 *
1291 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L407|GridLineCfg}
1292 */
1293 line?: GridLineCfg;
1294 /**
1295 * 两个栅格线间的填充色。
1296 */
1297 alternateColor?: string | string[];
1298 /**
1299 * 对于 circle 是否关闭 grid。
1300 */
1301 closed?: boolean;
1302 /**
1303 * 是否同刻度线对齐,如果值为 false,则会显示在两个刻度中间。
1304 * ![image](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*YX6fS4GTTvMAAAAAAAAAAABkARQnAQ)
1305 */
1306 alignTick?: boolean;
1307}
1308
1309/** 坐标轴配置属性,chart.axis() */
1310export interface AxisCfg {
1311 /**
1312 * 适用于直角坐标系,设置坐标轴的位置。
1313 */
1314 position?: 'top' | 'bottom' | 'right' | 'left';
1315 /**
1316 * 坐标轴线的配置项,null 表示不展示。
1317 * 属性结构如下:
1318 *
1319 * ```ts
1320 * {
1321 * style?: ShapeAttrs; // 坐标轴线的样式配置项
1322 * }
1323 * ```
1324 *
1325 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L91|AxisLineCfg}
1326 */
1327 line?: AxisLineCfg | null;
1328 /**
1329 * 坐标轴刻度线线的配置项,null 表示不展示。
1330 * 属性结构如下:
1331 *
1332 * ```ts
1333 * {
1334 * style?: ShapeAttrs; // 坐标轴刻度线的样式配置项
1335 * alignTick?: boolean; // 是否同 tick 对齐
1336 * length?: number; // 长度
1337 * }
1338 * ```
1339 *
1340 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L103|AxisTickLineCfg}
1341 */
1342 tickLine?: AxisTickLineCfg | null;
1343 /**
1344 * 坐标轴子刻度线的配置项,null 表示不展示。
1345 * 属性结构如下:
1346 *
1347 * ```ts
1348 * {
1349 * style?: ShapeAttrs; // 坐标轴刻度线的样式配置项
1350 * count?: number; // 子刻度个数
1351 * length?: number; // 子刻度线长度
1352 * }
1353 * ```
1354 *
1355 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L169|AxisSubTickLineCfg}
1356 */
1357 subTickLine?: AxisSubTickLineCfg | null;
1358 /**
1359 * 标题的配置项,null 表示不展示。
1360 * 属性结构如下:
1361 *
1362 * ```ts
1363 * {
1364 * offset?: number; // 标题距离坐标轴的距离
1365 * style?: ShapeAttrs; // 标题文本配置项
1366 * autoRotate?: boolean; // 是否自动旋转
1367 * }
1368 * ```
1369 *
1370 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L191|AxisTitleCfg}
1371 */
1372 title?: AxisTitleCfg | null;
1373 /**
1374 * 文本标签的配置项,null 表示不展示。
1375 * 属性结构如下:
1376 *
1377 * ```ts
1378 * {
1379 * // 坐标轴文本的样式
1380 * style?: ShapeAttrs;
1381 * // label 的偏移量
1382 * offset?: number;
1383 * // 文本旋转角度
1384 * rotate?: number;
1385 * // 格式化函数
1386 * formatter?: (text: string, item: ListItem, index: number) => any;
1387 * // 是否自动旋转,默认 false
1388 * autoRotate?: boolean | (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; | string;
1389 * // 是否自动隐藏,默认 true
1390 * autoHide?: boolean | (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; | string;
1391 * // 是否自动省略,默认 false
1392 * autoEllipsis?: boolean | (isVertical: boolean, labelGroup: IGroup, limitLength?: number) => boolean; | string;
1393 * }
1394 * ```
1395 *
1396 * 详见 {@link https://github.com/antvis/component/blob/81890719a431b3f9088e0c31c4d5d382ef0089df/src/types.ts#L127|AxisLabelCfg}
1397 */
1398 label?: AxisLabelCfg | null;
1399 /** 坐标轴网格线的配置项,null 表示不展示。 */
1400 grid?: AxisGridCfg | null;
1401 /** 动画开关,默认开启。 */
1402 animate?: boolean;
1403 /** 动画参数配置。 */
1404 animateOption?: ComponentAnimateOption;
1405 /** 标记坐标轴 label 的方向,左侧为 1,右侧为 -1。 */
1406 verticalFactor?: number;
1407 /**
1408 * 配置坐标轴垂直方向的最大限制长度,对文本自适应有很大影响。
1409 * 1. 可以直接设置像素值,如 100;
1410 * 2. 也可设置绝对值,如 0.2,如果是 x 轴,则相对于图表的高度,如果是 y 轴,则相对于图表的宽度
1411 *
1412 * 在 G2 中,x 轴的文本默认最大高度为图表高度的 1/2,y 轴的文本默认最大长度为图表宽度的 1/3
1413 */
1414 verticalLimitLength?: number;
1415}
1416
1417export interface SliderCfg {
1418 /** slider 高度 */
1419 readonly height?: number;
1420
1421 /** 滑块背景区域配置 */
1422 readonly trendCfg?: TrendCfg;
1423 /** 滑块背景样式 */
1424 readonly backgroundStyle?: any;
1425 /** 滑块前景样式 */
1426 readonly foregroundStyle?: any;
1427 /** 滑块两个操作块样式 */
1428 readonly handlerStyle?: any;
1429 /** 文本样式 */
1430 readonly textStyle?: any;
1431 /** 允许滑动位置的最小值 */
1432 readonly minLimit?: number;
1433 /** 允许滑动位置的最大值 */
1434 readonly maxLimit?: number;
1435 /** 滑块初始化的起始位置 */
1436 readonly start?: number;
1437 /** 滑块初始化的结束位置 */
1438 readonly end?: number;
1439 /** 布局的 padding */
1440 readonly padding?: number[];
1441 /** 滑块文本格式化函数 */
1442 formatter?: (val: any, datum: Datum, idx: number) => any;
1443}
1444
1445export type EventCallback = (event: LooseObject) => void;
1446/**
1447 * todo: 事件名可穷举,后续需要补充
1448 * 事件配置项
1449 */
1450export interface EventCfg {
1451 [key: string]: EventCallback;
1452}
1453
1454/**
1455 * 缩略轴的配置项
1456 */
1457export type SliderOption = SliderCfg | boolean;
1458
1459/** 滚动条组件配置项 */
1460export interface ScrollbarCfg {
1461 /** 滚动条类型,默认 horizontal */
1462 type?: 'horizontal' | 'vertical';
1463 /** 宽度,在 vertical 下生效 */
1464 width?: number;
1465 /** 高度,在 horizontal 下生效 */
1466 height?: number;
1467 /** 可选 padding */
1468 padding?: Padding;
1469 /** 对应水平滚动条,为 X 轴每个分类字段的宽度;对于垂直滚动条,为 X 轴每个分类字段的高度 */
1470 categorySize?: number;
1471 /** 滚动的时候是否开启动画,默认跟随 view 中 animate 配置 */
1472 animate?: boolean;
1473}
1474
1475/** 滚动条配置 */
1476export type ScrollbarOption = ScrollbarCfg | boolean;
1477
1478/** 配置项声明式 */
1479export interface Options {
1480 /** 数据源配置。 */
1481 readonly data?: Data;
1482 /** 设置数据过滤条件,以 data 中的数据属性为 key。 */
1483 readonly filters?: Record<string, FilterCondition>;
1484 /** 坐标轴配置,以 data 中的数据属性为 key。 */
1485 readonly axes?: Record<string, AxisOption> | boolean;
1486 /** 图例配置,以 data 中的数据属性为 key。 */
1487 readonly legends?: AllLegendsOptions;
1488 /** 列定义配置,用于配置数值的类型等,以 data 中的数据属性为 key。 */
1489 readonly scales?: Record<string, ScaleOption>;
1490 /** Tooltip 配置。 */
1491 readonly tooltip?: TooltipOption;
1492 /** 坐标系配置。 */
1493 readonly coordinate?: CoordinateOption;
1494 /** 静态辅助元素声明。 */
1495 readonly annotations?: (
1496 | ArcOption
1497 | RegionFilterOption
1498 | ImageOption
1499 | LineOption
1500 | TextOption
1501 | RegionOption
1502 | DataMarkerOption
1503 | DataRegionOption
1504 )[];
1505 /** Geometry 配置 */
1506 readonly geometries?: GeometryOption[];
1507 /** 开启/关闭动画,默认开启 */
1508 readonly animate?: boolean;
1509 /** 配置需要使用的交互行为 */
1510 readonly interactions?: InteractionOption[];
1511 /** 事件配置 */
1512 readonly events?: EventCfg;
1513
1514 /** 缩略轴的配置 */
1515 readonly slider?: SliderOption;
1516
1517 /** 滚动条配置 */
1518 readonly scrollbar?: ScrollbarOption;
1519
1520 /** 子 View */
1521 readonly views?: ViewOption[];
1522
1523 /** 分面 */
1524 readonly facets?: (RectCfg | MirrorCfg | CircleCfg | ListCfg | TreeCfg)[];
1525
1526 /** 其他自定义的 option */
1527 readonly [name: string]: any;
1528}
1529
1530/** 支持的 Marker 类型 */
1531export type Marker =
1532 | 'circle'
1533 | 'square'
1534 | 'diamond'
1535 | 'triangle'
1536 | 'triangle-down'
1537 | 'hexagon'
1538 | 'bowtie'
1539 | 'cross'
1540 | 'tick'
1541 | 'plus'
1542 | 'hyphen'
1543 | 'line';
1544/** 自定义 Marker 的回调函数定义 */
1545export type MarkerCallback = (x: number, y: number, r: number) => PathCommand;
1546/** chart.tooltip() 参数类型 */
1547export type TooltipOption = TooltipCfg | boolean;
1548/* 筛选器函数类型定义 */
1549export type FilterCondition = (value: any, datum: Datum, idx?: number) => boolean;
1550/** chart.axis() 参数类型 */
1551export type AxisOption = AxisCfg | boolean;
1552/** chart.legend() 参数类型 */
1553export type LegendOption = LegendCfg | boolean;
1554/** Options 中 legends 的配置定义 */
1555export type AllLegendsOptions = LegendCfg | Record<string, LegendOption> | boolean;
1556/** G2 支持的度量类型 */
1557export type ScaleType =
1558 | 'linear'
1559 | 'cat'
1560 | 'category'
1561 | 'identity'
1562 | 'log'
1563 | 'pow'
1564 | 'time'
1565 | 'timeCat'
1566 | 'quantize'
1567 | 'quantile';
1568
1569export type CoordinateRotate = ['rotate', number];
1570export type CoordinateReflect = ['reflect', 'x' | 'y'];
1571export type CoordinateScale = ['scale', number, number];
1572export type CoordinateTranspose = ['transpose'];
1573/** 坐标系支持的 action 配置 */
1574export type CoordinateActions = CoordinateRotate | CoordinateReflect | CoordinateScale | CoordinateTranspose;
1575
1576// ============================ Facet 分面相关类型定义 ============================
1577// 分面基类
1578export type FacetCtor = new (view: View, cfg: any) => Facet;
1579
1580export interface Condition {
1581 readonly field: string;
1582 readonly value: any;
1583 readonly values: any[];
1584}
1585
1586export type FacetDataFilter = (data: Datum[]) => boolean;
1587
1588/**
1589 * 默认的基础配置
1590 */
1591export interface FacetCfg<D> {
1592 /** 布局类型。 */
1593 readonly type?: string;
1594 /** view 创建回调。 */
1595 readonly eachView: (innerView: View, facet?: D) => any;
1596 /** facet view padding。 */
1597 readonly padding?: ViewPadding;
1598 /** 是否显示标题。 */
1599 readonly showTitle?: boolean;
1600 /** facet 数据划分维度。 */
1601 readonly fields: string[];
1602}
1603
1604/**
1605 * Facet title 配置项
1606 */
1607export interface FacetTitle {
1608 /** x 方向偏移。 */
1609 readonly offsetX?: number;
1610 /** y 方向偏移。 */
1611 readonly offsetY?: number;
1612 /** 文本样式。 */
1613 readonly style?: object;
1614 readonly formatter?: (val: any) => any;
1615}
1616
1617/**
1618 * 分面数据
1619 */
1620export interface FacetData {
1621 /** 分面类型。 */
1622 readonly type: string;
1623 /** 当前分面子 view 的数据。 */
1624 readonly data: object[];
1625 /** 当前分面子 view 的范围。 */
1626 readonly region: Region;
1627 /** 当前分面子 view 的 padding。 */
1628 readonly padding?: number;
1629 /** 当前 facet 对应生成的 view。 */
1630 view?: View;
1631
1632 // facet data
1633 /** 分面行字段。 */
1634 readonly rowField: string;
1635 /** 分面列字段。 */
1636 readonly columnField: string;
1637 /** 当前行分面的枚举值。 */
1638 readonly rowValue: string;
1639 /** 当前列分面的枚举值。 */
1640 readonly columnValue: string;
1641 /** 当前行索引。 */
1642 readonly rowIndex: number;
1643 /** 当前列索引。 */
1644 readonly columnIndex: number;
1645 /** 当前行字段的枚举值长度。 */
1646 readonly rowValuesLength: number;
1647 /** 当前列字段的枚举值长度。 */
1648 readonly columnValuesLength: number;
1649}
1650
1651// ===================== rect 相关类型定义 =====================
1652/** rect 分面类型配置 */
1653export interface RectCfg extends FacetCfg<RectData> {
1654 /** 行标题的样式。 */
1655 readonly columnTitle?: FacetTitle;
1656 /** 列标题的样式。 */
1657 readonly rowTitle?: FacetTitle;
1658}
1659
1660export interface RectData extends FacetData {}
1661
1662// ===================== mirror 相关类型定义 =====================
1663/** mirror 分面类型配置 */
1664export interface MirrorCfg extends FacetCfg<MirrorData> {
1665 /** 是否转置。 */
1666 readonly transpose?: boolean;
1667 /** 标题样式。 */
1668 readonly title?: FacetTitle;
1669}
1670
1671export interface MirrorData extends FacetData {}
1672
1673// ===================== list 相关类型定义 =====================
1674/** list 分面类型配置 */
1675export interface ListCfg extends FacetCfg<ListData> {
1676 /** 指定每行可显示分面的个数,超出时会自动换行。 */
1677 readonly cols?: number;
1678 /** 每个分面标题配置。 */
1679 readonly title?: FacetTitle;
1680}
1681
1682export interface ListData extends FacetData {
1683 readonly total: number;
1684}
1685
1686// ===================== matrix 相关类型定义 =====================
1687/** matrix 分面类型配置 */
1688export interface MatrixCfg extends FacetCfg<MirrorData> {
1689 /** 列标题的样式 */
1690 readonly columnTitle?: FacetTitle;
1691 /** 列标题的样式 */
1692 readonly rowTitle?: FacetTitle;
1693}
1694
1695export interface MatrixData extends FacetData {}
1696
1697// ===================== circle 相关类型定义 =====================
1698/** circle 分面类型配置 */
1699export interface CircleCfg extends FacetCfg<CircleData> {
1700 /** 分面标题配置。 */
1701 readonly title?: FacetTitle;
1702}
1703
1704export interface CircleData extends FacetData {}
1705
1706// ===================== tree 相关类型定义 =====================
1707
1708export interface Line {
1709 readonly style?: ShapeAttrs;
1710 readonly smooth?: boolean;
1711}
1712/** tree 分面类型配置 */
1713export interface TreeCfg extends FacetCfg<TreeData> {
1714 readonly line?: Line;
1715 readonly title?: FacetTitle;
1716}
1717
1718export interface TreeData extends FacetData {
1719 children?: TreeData[];
1720 originColIndex?: number;
1721}
1722
1723/**
1724 * facet object map
1725 */
1726export interface FacetCfgMap {
1727 /** rect 类型分面配置 */
1728 readonly rect: RectCfg;
1729 /** mirror 类型分面配置 */
1730 readonly mirror: MirrorCfg;
1731 /** list 类型分面配置 */
1732 readonly list: ListCfg;
1733 /** matrix 类型分面配置 */
1734 readonly matrix: MatrixCfg;
1735 /** circle 类型分面配置 */
1736 readonly circle: CircleCfg;
1737 /** tree 类型分面配置 */
1738 readonly tree: TreeCfg;
1739}
1740
1741// ============================ 主题样式表定义 ============================
1742export interface StyleSheet {
1743 /** 背景色 */
1744 backgroundColor?: string;
1745 /** 主题色 */
1746 brandColor?: string;
1747 /** 分类色板 1,在数据量小于等于 10 时使用 */
1748 paletteQualitative10?: string[];
1749 /** 分类色板 2,在数据量大于 10 时使用 */
1750 paletteQualitative20?: string[];
1751 /** 语义色 */
1752 paletteSemanticRed?: string;
1753 /** 语义色 */
1754 paletteSemanticGreen?: string;
1755 /** 语义色 */
1756 paletteSemanticYellow?: string;
1757 /** 字体 */
1758 fontFamily?: string;
1759
1760 // -------------------- 坐标轴 --------------------
1761 /** 坐标轴线颜色 */
1762 axisLineBorderColor?: string;
1763 /** 坐标轴线粗细 */
1764 axisLineBorder?: number;
1765 /** 坐标轴线 lineDash 设置 */
1766 axisLineDash?: number[];
1767
1768 /** 坐标轴标题颜色 */
1769 axisTitleTextFillColor?: string;
1770 /** 坐标轴标题文本字体大小 */
1771 axisTitleTextFontSize?: number;
1772 /** 坐标轴标题文本行高 */
1773 axisTitleTextLineHeight?: number;
1774 /** 坐标轴标题文本字体粗细 */
1775 axisTitleTextFontWeight?: number | string;
1776 /** 坐标轴标题距离坐标轴文本的间距 */
1777 axisTitleSpacing?: number;
1778
1779 /** 坐标轴刻度线颜色 */
1780 axisTickLineBorderColor?: string;
1781 /** 坐标轴刻度线长度 */
1782 axisTickLineLength?: number;
1783 /** 坐标轴刻度线粗细 */
1784 axisTickLineBorder?: number;
1785
1786 /** 坐标轴次刻度线颜色 */
1787 axisSubTickLineBorderColor?: string;
1788 /** 坐标轴次刻度线长度 */
1789 axisSubTickLineLength?: number;
1790 /** 坐标轴次刻度线粗细 */
1791 axisSubTickLineBorder?: number;
1792
1793 /** 坐标轴刻度文本颜色 */
1794 axisLabelFillColor?: string;
1795 /** 坐标轴刻度文本字体大小 */
1796 axisLabelFontSize?: number;
1797 /** 坐标轴刻度文本行高 */
1798 axisLabelLineHeight?: number;
1799 /** 坐标轴刻度文本字体粗细 */
1800 axisLabelFontWeight?: number | string;
1801 /** 坐标轴刻度文本距离坐标轴线的间距 */
1802 axisLabelOffset: number;
1803
1804 /** 坐标轴网格线颜色 */
1805 axisGridBorderColor?: string;
1806 /** 坐标轴网格线粗细 */
1807 axisGridBorder?: number;
1808 /** 坐标轴网格线虚线设置 */
1809 axisGridLineDash?: number[];
1810
1811 // -------------------- 图例 --------------------
1812 /** 图例标题颜色 */
1813 legendTitleTextFillColor?: string;
1814 /** 图例标题文本字体大小 */
1815 legendTitleTextFontSize?: number;
1816 /** 图例标题文本行高 */
1817 legendTitleTextLineHeight?: number;
1818 /** 图例标题文本字体粗细 */
1819 legendTitleTextFontWeight?: number | string;
1820
1821 /** 图例 marker 颜色 */
1822 legendMarkerColor?: string;
1823 /** 图例 marker 距离图例文本的间距 */
1824 legendMarkerSpacing?: number;
1825 /** 图例 marker 默认半径大小 */
1826 legendMarkerSize?: number;
1827 /** 图例 'circle' marker 半径 */
1828 legendCircleMarkerSize?: number;
1829 /** 图例 'square' marker 半径 */
1830 legendSquareMarkerSize?: number;
1831 /** 图例 'line' marker 半径 */
1832 legendLineMarkerSize?: number;
1833
1834 /** 图例项文本颜色 */
1835 legendItemNameFillColor?: string;
1836 /** 图例项文本字体大小 */
1837 legendItemNameFontSize?: number;
1838 /** 图例项文本行高 */
1839 legendItemNameLineHeight?: number;
1840 /** 图例项粗细 */
1841 legendItemNameFontWeight?: number | string;
1842 /** 图例项之间的水平间距 */
1843 legendItemSpacing?: number;
1844 /** 图例项垂直方向的间隔 */
1845 legendItemMarginBottom?: number;
1846 /** 图例与图表绘图区域的偏移距离 */
1847 legendPadding?: number[];
1848 /** 水平布局的图例与绘图区域偏移距离 */
1849 legendHorizontalPadding?: number[];
1850 /** 垂直布局的图例与绘图区域偏移距离 */
1851 legendVerticalPadding?: number[];
1852
1853 /** 连续图例滑块填充色 */
1854 sliderRailFillColor?: string;
1855 /** 连续图例滑块边框粗细 */
1856 sliderRailBorder?: number;
1857 /** 连续图例滑块边框颜色 */
1858 sliderRailBorderColor?: string;
1859 /** 连续图例滑块宽度 */
1860 sliderRailWidth?: number;
1861 /** 连续图例滑块高度 */
1862 sliderRailHeight?: number;
1863
1864 /** 连续图例文本颜色 */
1865 sliderLabelTextFillColor?: string;
1866 /** 连续图例文本字体大小 */
1867 sliderLabelTextFontSize?: number;
1868 /** 连续图例文本行高 */
1869 sliderLabelTextLineHeight?: number;
1870 /** 连续图例文本字体粗细 */
1871 sliderLabelTextFontWeight?: number | string;
1872
1873 /** 连续图例滑块颜色 */
1874 sliderHandlerFillColor?: string;
1875 /** 连续图例滑块宽度 */
1876 sliderHandlerWidth?: number;
1877 /** 连续图例滑块高度 */
1878 sliderHandlerHeight?: number;
1879 /** 连续图例滑块边框粗细 */
1880 sliderHandlerBorder?: number;
1881 /** 连续图例滑块边框颜色 */
1882 sliderHandlerBorderColor?: string;
1883
1884 // -------------------- Annotation,图形标注 --------------------
1885 /** arc 图形标注描边颜色 */
1886 annotationArcBorderColor?: string;
1887 /** arc 图形标注粗细 */
1888 annotationArcBorder?: number;
1889
1890 /** line 图形标注颜色 */
1891 annotationLineBorderColor?: string;
1892 /** line 图形标注粗细 */
1893 annotationLineBorder?: number;
1894 /** lube 图形标注的虚线间隔 */
1895 annotationLineDash?: number[];
1896
1897 /** text 图形标注文本颜色 */
1898 annotationTextFillColor?: string;
1899 /** text 图形标注文本字体大小 */
1900 annotationTextFontSize?: number;
1901 /** text 图形标注文本行高 */
1902 annotationTextLineHeight?: number;
1903 /** text 图形标注文本字体粗细 */
1904 annotationTextFontWeight?: number | string;
1905
1906 /** text 图形标注文本边框颜色 */
1907 annotationTextBorderColor?: string;
1908 /** text 图形标注文本边框粗细 */
1909 annotationTextBorder?: number;
1910
1911 /** region 图形标注填充颜色 */
1912 annotationRegionFillColor?: string;
1913 /** region 图形标注填充颜色透明色 */
1914 annotationRegionFillOpacity?: number;
1915 /** region 图形标注描边粗细 */
1916 annotationRegionBorder?: number;
1917 /** region 图形标注描边颜色 */
1918 annotationRegionBorderColor?: string;
1919
1920 /** dataMarker 图形标注的连接线长度 */
1921 annotationDataMarkerLineLength?: number;
1922
1923 // -------------------- Tooltip --------------------
1924 /** tooltip crosshairs 辅助线颜色 */
1925 tooltipCrosshairsBorderColor?: string;
1926 /** tooltip crosshairs 辅助线粗细 */
1927 tooltipCrosshairsBorder?: number;
1928 /** tooltip crosshairs 辅助线虚线间隔 */
1929 tooltipCrosshairsLineDash?: number[];
1930
1931 /** tooltip 内容框背景色 */
1932 tooltipContainerFillColor?: string;
1933 /** tooltip 内容框背景透明度 */
1934 tooltipContainerFillOpacity?: number;
1935 /** tooltip 内容框阴影 */
1936 tooltipContainerShadow?: string;
1937 /** tooltip 内容框圆角 */
1938 tooltipContainerBorderRadius?: number;
1939
1940 /** tooltip 文本颜色 */
1941 tooltipTextFillColor?: string;
1942 /** tooltip 文本字体大小 */
1943 tooltipTextFontSize?: number;
1944 /** tooltip 文本行高 */
1945 tooltipTextLineHeight?: number;
1946 /** tooltip 文本字体粗细 */
1947 tooltipTextFontWeight?: number | string;
1948
1949 // -------------------- Geometry labels --------------------
1950 /** Geometry label 文本颜色 */
1951 labelFillColor?: string;
1952 /** Geometry label 暗色文本颜色 */
1953 labelFillColorDark?: string;
1954 /** Geometry label 亮色文本颜色 */
1955 labelFillColorLight?: string;
1956 /** Geometry label 文本字体大小 */
1957 labelFontSize?: number;
1958 /** Geometry label 文本行高 */
1959 labelLineHeight?: number;
1960 /** Geometry label 文本字体粗细 */
1961 labelFontWeight?: number | string;
1962 /** Geometry label 文本描边颜色 */
1963 labelBorderColor?: string;
1964 /** Geometry label 文本描边粗细 */
1965 labelBorder?: number;
1966
1967 /** Geometry innerLabel 文本颜色 */
1968 innerLabelFillColor?: string;
1969 /** Geometry innerLabel 文本字体大小 */
1970 innerLabelFontSize?: number;
1971 /** Geometry innerLabel 文本行高 */
1972 innerLabelLineHeight?: number;
1973 /** Geometry innerLabel 文本字体粗细 */
1974 innerLabelFontWeight?: number | string;
1975 /** Geometry innerLabel 文本描边颜色 */
1976 innerLabelBorderColor?: string;
1977 /** Geometry innerLabel 文本描边粗细 */
1978 innerLabelBorder?: number;
1979
1980 /** Geometry overflowLabel 文本颜色 */
1981 overflowLabelFillColor?: string;
1982 /** Geometry overflowLabel 暗色文本颜色 */
1983 overflowLabelFillColorDark?: string;
1984 /** Geometry overflowLabel 亮色文本颜色 */
1985 overflowLabelFillColorLight?: string;
1986 /** Geometry overflowLabel 文本字体大小 */
1987 overflowLabelFontSize?: number;
1988 /** Geometry overflowLabel 文本行高 */
1989 overflowLabelLineHeight?: number;
1990 /** Geometry overflowLabel 文本字体粗细 */
1991 overflowLabelFontWeight?: number | string;
1992 /** Geometry overflowLabel 文本描边颜色 */
1993 overflowLabelBorderColor?: string;
1994 /** Geometry overflowLabel 文本描边粗细 */
1995 overflowLabelBorder?: number;
1996
1997 /** Geometry label 文本连接线粗细 */
1998 labelLineBorder?: number;
1999 /** Geometry label 文本连接线颜色 */
2000 labelLineBorderColor?: string;
2001
2002 // -------------------- Geometry 图形样式--------------------
2003 /** 点图的大小范围 */
2004 pointSizeRange?: [number, number];
2005 /** 点图填充颜色 */
2006 pointFillColor?: string;
2007 /** 点图填充颜色透明度 */
2008 pointFillOpacity?: number;
2009 /** 点图大小 */
2010 pointSize?: number;
2011 /** 点图描边粗细 */
2012 pointBorder?: number;
2013 /** 点图描边颜色 */
2014 pointBorderColor?: string;
2015 /** 点图描边透明度 */
2016 pointBorderOpacity?: number;
2017
2018 /** 点图 active 状态下填充颜色 */
2019 pointActiveFillColor?: string;
2020 /** 点图 active 状态下填充颜色透明度 */
2021 pointActiveFillOpacity?: number;
2022 /** 点图 active 状态下大小 */
2023 pointActiveSize?: number;
2024 /** 点图 active 状态下描边粗细 */
2025 pointActiveBorder?: number;
2026 /** 点图 active 状态下描边颜色 */
2027 pointActiveBorderColor?: string;
2028 /** 点图 active 状态下描边透明度 */
2029 pointActiveBorderOpacity?: number;
2030
2031 /** 点图 selected 状态下填充颜色 */
2032 pointSelectedFillColor?: string;
2033 /** 点图 selected 状态下填充颜色透明度 */
2034 pointSelectedFillOpacity?: number;
2035 /** 点图 selected 状态下大小 */
2036 pointSelectedSize?: number;
2037 /** 点图 selected 状态下描边粗细 */
2038 pointSelectedBorder?: number;
2039 /** 点图 selected 状态下描边颜色 */
2040 pointSelectedBorderColor?: string;
2041 /** 点图 selected 状态下描边透明度 */
2042 pointSelectedBorderOpacity?: number;
2043
2044 /** 点图 inactive 状态下填充颜色 */
2045 pointInactiveFillColor?: string;
2046 /** 点图 inactive 状态下填充颜色透明度 */
2047 pointInactiveFillOpacity?: number;
2048 /** 点图 inactive 状态下大小 */
2049 pointInactiveSize?: number;
2050 /** 点图 inactive 状态下描边粗细 */
2051 pointInactiveBorder?: number;
2052 /** 点图 inactive 状态下描边颜色 */
2053 pointInactiveBorderColor?: string;
2054 /** 点图 inactive 状态下描边透明度 */
2055 pointInactiveBorderOpacity?: number;
2056
2057 /** 描边点图大小 */
2058 hollowPointSize?: number;
2059 /** 描边点图描边粗细 */
2060 hollowPointBorder?: number;
2061 /** 描边点图描边颜色 */
2062 hollowPointBorderColor?: string;
2063 /** 描边点图描边透明度 */
2064 hollowPointBorderOpacity?: number;
2065 /** 描边点图填充颜色 */
2066 hollowPointFillColor?: string;
2067 /** 描边点图填充透明度 */
2068 hollowPointFillOpacity?: number;
2069
2070 /** 点 描边 active 状态下大小 */
2071 hollowPointActiveSize?: number;
2072 /** 点 描边 active 状态下描边粗细 */
2073 hollowPointActiveBorder?: number;
2074 /** 点 描边 active 状态下描边颜色 */
2075 hollowPointActiveBorderColor?: string;
2076 /** 点 描边 active 状态下描边透明度 */
2077 hollowPointActiveBorderOpacity?: number;
2078
2079 /** 点 描边 selected 状态下大小 */
2080 hollowPointSelectedSize?: number;
2081 /** 点 描边 selected 状态下描边粗细 */
2082 hollowPointSelectedBorder?: number;
2083 /** 点 描边 selected 状态下描边颜色 */
2084 hollowPointSelectedBorderColor?: string;
2085 /** 点 描边 selected 状态下描边透明度 */
2086 hollowPointSelectedBorderOpacity?: number;
2087
2088 /** 点 描边 inactive 状态下大小 */
2089 hollowPointInactiveSize?: number;
2090 /** 点 描边 inactive 状态下描边粗细 */
2091 hollowPointInactiveBorder?: number;
2092 /** 点 描边 inactive 状态下描边颜色 */
2093 hollowPointInactiveBorderColor?: string;
2094 /** 点 描边 inactive 状态下描边透明度 */
2095 hollowPointInactiveBorderOpacity?: number;
2096
2097 /** 线图粗细 */
2098 lineBorder?: number;
2099 /** 线图颜色 */
2100 lineBorderColor?: string;
2101 /** 线图透明度 */
2102 lineBorderOpacity?: number;
2103
2104 /** 线图 active 状态下粗细 */
2105 lineActiveBorder?: number;
2106 /** 线图 active 状态下颜色 */
2107 lineActiveBorderColor?: string;
2108 /** 线图 active 状态下透明度 */
2109 lineActiveBorderOpacity?: number;
2110
2111 /** 线图 selected 状态下粗细 */
2112 lineSelectedBorder?: number;
2113 /** 线图 selected 状态下颜色 */
2114 lineSelectedBorderColor?: string;
2115 /** 线图 selected 状态下透明度 */
2116 lineSelectedBorderOpacity?: number;
2117
2118 /** 线图 inactive 状态下粗细 */
2119 lineInactiveBorder?: number;
2120 /** 线图 inactive 状态下颜色 */
2121 lineInactiveBorderColor?: string;
2122 /** 线图 inactive 状态下透明度 */
2123 lineInactiveBorderOpacity?: number;
2124
2125 areaBorder?: number;
2126 /** area 边框颜色 */
2127 areaBorderColor?: string;
2128 /** area 边框透明度 */
2129 areaBorderOpacity?: number;
2130 /** area 填充颜色 */
2131 areaFillColor?: string;
2132 /** area 填充透明度 */
2133 areaFillOpacity?: number;
2134
2135 /** area Active 状态下边框粗细 */
2136 areaActiveBorder?: number;
2137 /** area Active 状态下边框颜色 */
2138 areaActiveBorderColor?: string;
2139 /** area Active 状态下边框透明度 */
2140 areaActiveBorderOpacity?: number;
2141 /** area Active 状态下填充颜色 */
2142 areaActiveFillColor?: string;
2143 /** area Active 状态下填充透明度 */
2144 areaActiveFillOpacity?: number;
2145
2146 /** area selected 状态下边框粗细 */
2147 areaSelectedBorder?: number;
2148 /** area selected 状态下边框颜色 */
2149 areaSelectedBorderColor?: string;
2150 /** area selected 状态下边框透明度 */
2151 areaSelectedBorderOpacity?: number;
2152 /** area selected 状态下填充颜色 */
2153 areaSelectedFillColor?: string;
2154 /** area selected 状态下填充透明度 */
2155 areaSelectedFillOpacity?: number;
2156
2157 /** area inactive 状态下边框粗细 */
2158 areaInactiveBorder?: number;
2159 /** area inactive 状态下边框颜色 */
2160 areaInactiveBorderColor?: string;
2161 /** area inactive 状态下边框透明度 */
2162 areaInactiveBorderOpacity?: number;
2163 /** area inactive 状态下填充颜色 */
2164 areaInactiveFillColor?: string;
2165 /** area inactive 状态下填充透明度 */
2166 areaInactiveFillOpacity?: number;
2167
2168 /** hollowArea 边框粗细 */
2169 hollowAreaBorder?: number;
2170 /** hollowArea 边框颜色 */
2171 hollowAreaBorderColor?: string;
2172 /** hollowArea 边框透明度 */
2173 hollowAreaBorderOpacity?: number;
2174
2175 /** hollowArea Active 状态下边框粗细 */
2176 hollowAreaActiveBorder?: number;
2177 /** hollowArea Active 状态下边框颜色 */
2178 hollowAreaActiveBorderColor?: string;
2179 /** hollowArea Active 状态下边框透明度 */
2180 hollowAreaActiveBorderOpacity?: number;
2181
2182 /** hollowArea selected 状态下边框粗细 */
2183 hollowAreaSelectedBorder?: number;
2184 /** hollowArea selected 状态下边框颜色 */
2185 hollowAreaSelectedBorderColor?: string;
2186 /** hollowArea selected 状态下边框透明度 */
2187 hollowAreaSelectedBorderOpacity?: number;
2188
2189 /** hollowArea inactive 状态下边框粗细 */
2190 hollowAreaInactiveBorder?: number;
2191 /** hollowArea inactive 状态下边框颜色 */
2192 hollowAreaInactiveBorderColor?: string;
2193 /** hollowArea inactive 状态下边框透明度 */
2194 hollowAreaInactiveBorderOpacity?: number;
2195
2196 /** interval 边框粗细 */
2197 intervalBorder?: number;
2198 /** interval 边框颜色 */
2199 intervalBorderColor?: string;
2200 /** interval 边框透明度 */
2201 intervalBorderOpacity?: number;
2202 /** interval 填充颜色 */
2203 intervalFillColor?: string;
2204 /** interval 填充透明度 */
2205 intervalFillOpacity?: number;
2206
2207 /** interval active 状态下边框粗细 */
2208 intervalActiveBorder?: number;
2209 /** interval active 状态下边框颜色 */
2210 intervalActiveBorderColor?: string;
2211 /** interval active 状态下边框透明度 */
2212 intervalActiveBorderOpacity?: number;
2213 /** interval active 状态下填充颜色 */
2214 intervalActiveFillColor?: string;
2215 /** interval active 状态下填充透明度 */
2216 intervalActiveFillOpacity?: number;
2217
2218 /** interval selected 状态下边框粗细 */
2219 intervalSelectedBorder?: number;
2220 /** interval selected 状态下边框颜色 */
2221 intervalSelectedBorderColor?: string;
2222 /** interval selected 状态下边框透明度 */
2223 intervalSelectedBorderOpacity?: number;
2224 /** interval selected 状态下填充颜色 */
2225 intervalSelectedFillColor?: string;
2226 /** interval selected 状态下填充透明度 */
2227 intervalSelectedFillOpacity?: number;
2228
2229 /** interval inactive 状态下边框粗细 */
2230 intervalInactiveBorder?: number;
2231 /** interval inactive 状态下边框颜色 */
2232 intervalInactiveBorderColor?: string;
2233 /** interval inactive 状态下边框透明度 */
2234 intervalInactiveBorderOpacity?: number;
2235 /** interval inactive 状态下填充颜色 */
2236 intervalInactiveFillColor?: string;
2237 /** interval inactive 状态下填充透明度 */
2238 intervalInactiveFillOpacity?: number;
2239
2240 /** hollowInterval 边框粗细 */
2241 hollowIntervalBorder?: number;
2242 /** hollowInterval 边框颜色 */
2243 hollowIntervalBorderColor?: string;
2244 /** hollowInterval 边框透明度 */
2245 hollowIntervalBorderOpacity?: number;
2246 /** hollowInterval 填充颜色 */
2247 hollowIntervalFillColor?: string;
2248 /** hollowInterval 填充透明度 */
2249 hollowIntervalFillOpacity?: number;
2250
2251 /** hollowInterval active 状态下边框粗细 */
2252 hollowIntervalActiveBorder?: number;
2253 /** hollowInterval active 状态下边框颜色 */
2254 hollowIntervalActiveBorderColor?: string;
2255 /** hollowInterval active 状态下边框透明度 */
2256 hollowIntervalActiveBorderOpacity?: number;
2257
2258 /** hollowInterval selected 状态下边框粗细 */
2259 hollowIntervalSelectedBorder?: number;
2260 /** hollowInterval selected 状态下边框颜色 */
2261 hollowIntervalSelectedBorderColor?: string;
2262 /** hollowInterval selected 状态下边框透明度 */
2263 hollowIntervalSelectedBorderOpacity?: number;
2264
2265 /** hollowInterval inactive 状态下边框粗细 */
2266 hollowIntervalInactiveBorder?: number;
2267 /** hollowInterval inactive 状态下边框颜色 */
2268 hollowIntervalInactiveBorderColor?: string;
2269 /** hollowInterval inactive 状态下边框透明度 */
2270 hollowIntervalInactiveBorderOpacity?: number;
2271}
2272
2273/** createTheme 主题样式表配置 */
2274export type StyleSheetCfg = Pick<
2275 StyleSheet,
2276 | 'backgroundColor'
2277 | 'brandColor'
2278 | 'paletteQualitative10'
2279 | 'paletteQualitative20'
2280 | 'paletteSemanticRed'
2281 | 'paletteSemanticGreen'
2282 | 'paletteSemanticYellow'
2283 | 'fontFamily'
2284>;
2285
2286// ============================ 交互相关的类型定义 ============================
2287/** 交互反馈的定义 */
2288export interface IAction {
2289 /**
2290 * 初始化
2291 */
2292 init();
2293 /**
2294 * 交互 action (反馈)的名称
2295 */
2296 name: string;
2297 /**
2298 * 上下文
2299 */
2300 context: IInteractionContext;
2301 /**
2302 * 销毁函数
2303 */
2304 destroy();
2305}
2306
2307/** 交互上下文的接口定义 */
2308export interface IInteractionContext extends LooseObject {
2309 /** 事件对象 */
2310 event: LooseObject;
2311 /**
2312 * 当前的 view
2313 */
2314 view: View;
2315 /** 交互相关的 Actions */
2316 actions: IAction[];
2317 /**
2318 * 缓存属性,用于上下文传递信息
2319 * @param key 键名
2320 * @param value 值
2321 */
2322 cache(key: string, value?: any);
2323 /**
2324 * 获取 action
2325 * @param name - action 的名称
2326 * @returns 指定 name 的 Action
2327 */
2328 getAction(name): IAction;
2329 /**
2330 * 获取当前的点
2331 * @returns 返回当前的点
2332 */
2333 getCurrentPoint(): Point;
2334 /**
2335 * 获取当前的图形
2336 */
2337 getCurrentShape(): IShape;
2338 /**
2339 * 添加 action
2340 * @param action 指定交互 action
2341 */
2342 addAction(action: IAction);
2343 /**
2344 * 移除 action
2345 * @param action 移除的 action
2346 */
2347 removeAction(action: IAction);
2348 /**
2349 * 事件触发时是否在 view 内部
2350 */
2351 isInPlot();
2352 /**
2353 * 是否在组件的包围盒内
2354 * @param name 组件名,可省略
2355 */
2356 isInComponent(name?: string);
2357 /**
2358 * 是否在指定的图形内
2359 * @param name shape 的名称
2360 */
2361 isInShape(name);
2362 /**
2363 * 销毁
2364 */
2365 destroy();
2366}
2367
2368/** G 的渲染类型 */
2369export type Renderer = 'svg' | 'canvas';
2370/** 数据的定义 */
2371export type Datum = Record<string, any>;
2372export type Data = Datum[];
2373export type ActionCallback = (context: IInteractionContext) => void;
2374export type Padding = [number, number, number, number];
2375export type ViewPadding = number | number[] | 'auto';
2376export type ViewAppendPadding = number | number[];
2377export type Position = [number, number];
2378export type AttributeType = 'position' | 'size' | 'color' | 'shape';
2379export type ShapeVertices = RangePoint[] | Point[] | Point[][];
2380/** easing 的回调函数, 入参 data 为对应的原始数据记录 */
2381export type AnimateEasingCallback = (data: Datum) => string;
2382/** delay 的回调函数, 入参 data 为对应的原始数据记录 */
2383export type AnimateDelayCallback = (data: Datum) => number;
2384/** duration 的回调函数, 入参 data 为对应的原始数据记录 */
2385export type AnimateDurationCallback = (data: Datum) => number;
2386
\No newline at end of file