-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathinterface.ts
186 lines (166 loc) · 5.74 KB
/
interface.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import { Coordinate, IGroup, IShape, ScaleConfig } from './dependents';
import Element from './geometry/element';
/** G 的渲染类型 */
export type Renderer = 'svg' | 'canvas';
/** 数据的定义 */
export type Datum = Record<string, any>;
export type Data = Datum[];
/** 对象 */
export interface LooseObject {
[key: string]: any;
}
/** 列定义配置项 */
export interface ScaleDef extends ScaleConfig {
/** 声明数据类型 */
type?: ScaleType;
}
export interface ScaleOption {
[key: string]: ScaleDef;
}
/**
* 画布范围的类型定
*/
export interface Region {
readonly start: Point;
readonly end: Point;
}
/**
* 一个点位置
*/
export interface Point {
readonly x: number;
readonly y: number;
}
export interface AnimateCfg {
/** 动画缓动函数 */
readonly easing?: string;
/** 动画执行函数 */
readonly animation?: string;
/** 动画执行时间 */
readonly duration?: number;
/** 动画延迟时间 */
readonly delay?: number;
// TODO: 完善 callback 的类型定义
/** 动画执行结束后的回调函数 */
readonly callback?: (...args) => any;
}
export interface AnimateOption {
/** 入场动画配置,false/null 表示关闭入场动画 */
enter?: AnimateCfg | false | null;
/** 更新动画配置,false/null 表示关闭更新动画 */
update?: AnimateCfg | false | null;
/** 销毁动画配置,false/null 表示关闭销毁动画 */
leave?: AnimateCfg | false | null;
}
/**
* @todo 重命名
* 绘制 shape 时传入的信息
*/
export interface ShapeDrawCFG {
/** 映射的颜色值 */
color?: string | null | undefined;
/** 是否在极坐标下 */
isInCircle?: boolean | undefined;
/** x 坐标 */
x: number;
/** y 坐标 */
y: number | number[];
/** 映射的 shape 类型 */
shape?: string | undefined | null;
/** size 映射值 */
size?: number | undefined | null;
/** 对应的原始数据记录 */
data?: Datum;
/** 进行图形映射后的数据记录 */
origin?: Datum;
/** geometry 类型 */
geomType?: string;
/** 构成 shape 的关键点 */
points?: Point[];
/** 下一个数据集对应的关键点 */
nextPoints?: Point[];
splitedIndex?: number;
text?: string | null;
/** 样式 */
style?: LooseObject | null;
yIndex?: number;
constraint?: Array<[number, number]>;
/** area line 两类 Geometry 适用,当只有一个数据时是否以数据点的形式显示 */
showSinglePoint?: boolean;
/** area line 两类 Geometry 适用,是否连接空值 */
connectNulls?: boolean;
/** 数据是否发生了调整 */
isStack?: boolean;
/** 动画配置,false 表示关闭动画 */
// TODO
animate?: AnimateOption | AnimateCfg | boolean;
}
/** shape 关键点信息 */
export interface ShapePoint {
readonly x: number | number[];
readonly y: number | number[];
readonly y0?: number;
size?: number;
}
// Shape Module start
/** 注册 ShapeFactory 需要实现的接口 */
export interface RegisterShapeFactory {
/** 默认的 shape 类型 */
readonly defaultShapeType: string;
/** 返回绘制 shape 所有的关键点集合 */
readonly getDefaultPoints?: (pointInfo: ShapePoint) => Point[];
/** 获取 shape 对应的缩略图 */
readonly getMarker?: (shapeType: string, markerCfg: LooseObject) => IShape | IGroup;
/** 创建具体的 G.Shape 实例 */
readonly drawShape?: (shapeType: string, cfg: ShapeDrawCFG, element: Element) => IShape | IGroup;
/** 更新 shape */
readonly updateShape?: (shapeType: string, cfg: ShapeDrawCFG, element: Element) => void;
/** 设置 shape 状态 */
readonly setState?: (shapeType: string, stateName: string, stateStatus: boolean, element: Element) => void;
}
/** 注册具体 shape 需要实现的接口 */
export interface RegisterShape {
/** 计算绘制需要的关键点,在注册具体的 shape 时由开发者自己定义 */
readonly getPoints?: (pointInfo: ShapePoint) => Point[];
/** 获取 shape 对应的缩略图样式配置,在注册具体的 shape 时由开发者自己定义 */
readonly getMarker?: (markerCfg: LooseObject) => IShape | IGroup;
/** 绘制 */
readonly draw: (cfg: ShapeDrawCFG, container: Element) => IShape | IGroup;
/** 更新 shape */
readonly update: (cfg: ShapeDrawCFG, container: Element) => void;
/** todo 销毁 */
readonly destroy?: () => void;
/** 响应状态量 */
readonly setState?: (stateName: string, stateStatus: boolean, element: Element) => void;
}
/** Shape 接口定义 */
export interface Shape extends RegisterShape {
/** 坐标系对象 */
coordinate: Coordinate;
/** 获取坐标系对象 */
getCoordinate: () => Coordinate;
/** 工具函数,将 0~1 path 转化成实际画布 path */
parsePath: (path: any, islineToArc: boolean) => any[];
/** 工具函数,0~1 的坐标点转换成实际画布坐标点 */
parsePoint: (point: Point) => Point;
/** 工具函数,0~1 的坐标点集合转换成实际画布坐标点集合 */
parsePoints: (points: Point[]) => Point[];
}
/** ShapeFactory 接口定义 */
export interface ShapeFactory extends RegisterShapeFactory {
/** 坐标系对象 */
coordinate: Coordinate;
/** 设置坐标系 */
setCoordinate: (coord: Coordinate) => void;
/** 根据名称获取具体的 shape 对象 */
getShape: (shapeType: string | string[]) => Shape;
/** 获取构成 shape 的关键点 */
getShapePoints: (shapeType: string | string[], pointInfo: ShapePoint) => Point[];
/** 销毁 shape */
destroy: (shapeType: string) => void;
}
export type Padding = number | number[];
export type Position = [number, number];
export type AttributeType = 'position' | 'size' | 'color' | 'shape';
export type ScaleType = 'linear' | 'cat' | 'identity' | 'log' | 'pow' | 'time' | 'timeCat';
export type AdjustType = 'stack' | 'jitter' | 'dodge' | 'symmetric';