137 lines
3.2 KiB
TypeScript
137 lines
3.2 KiB
TypeScript
import { SVModel } from "./Model/SVModel";
|
|
import { SVNode } from "./Model/SVNode";
|
|
import { SourceNode } from "./sources";
|
|
|
|
|
|
export interface Style {
|
|
fill: string; // 填充颜色
|
|
text: string; // 图形文本
|
|
textFill: string; // 文本颜色
|
|
fontSize: number; // 字体大小
|
|
fontWeight: number; // 字重
|
|
stroke: string; // 描边样式
|
|
opacity: number; // 透明度
|
|
lineWidth: number; // 线宽
|
|
matrix: number[]; // 变换矩阵
|
|
};
|
|
|
|
|
|
export interface NodeLabelOption {
|
|
position: string;
|
|
offset: number;
|
|
style: Style;
|
|
};
|
|
|
|
|
|
export interface AddressLabelOption {
|
|
offset?: number;
|
|
style?: Style;
|
|
}
|
|
|
|
|
|
export interface IndexLabelOption extends NodeLabelOption {
|
|
position: 'top' | 'right' | 'bottom' | 'left';
|
|
}
|
|
|
|
|
|
export interface LinkLabelOption {
|
|
refX: number;
|
|
refY: number;
|
|
position: string;
|
|
autoRotate: boolean;
|
|
style: Style;
|
|
};
|
|
|
|
|
|
export interface ModelOption {
|
|
type: string;
|
|
style: Style;
|
|
}
|
|
|
|
|
|
export interface NodeOption extends ModelOption {
|
|
size: number | [number, number];
|
|
rotation: number;
|
|
label: string | string[];
|
|
anchorPoints: number[][];
|
|
labelOptions: NodeLabelOption;
|
|
}
|
|
|
|
|
|
export interface LinkOption extends ModelOption {
|
|
sourceAnchor: number | ((index: number) => number);
|
|
targetAnchor: number | ((index: number) => number);
|
|
label: string;
|
|
curveOffset: number;
|
|
labelOptions: LinkLabelOption;
|
|
}
|
|
|
|
|
|
export interface MarkerOption extends NodeOption {
|
|
type: 'pointer' | 'cursor' | 'clen-queue-pointer';
|
|
anchor: number;
|
|
offset: number;
|
|
labelOffset: number;
|
|
};
|
|
|
|
|
|
export interface LayoutOptions {
|
|
[key: string]: any;
|
|
};
|
|
|
|
|
|
export interface LayoutGroupOptions {
|
|
node: { [key: string]: NodeOption };
|
|
link?: { [key: string]: LinkOption };
|
|
marker?: { [key: string]: MarkerOption };
|
|
addressLabel?: AddressLabelOption;
|
|
indexLabel?: { [key: string]: IndexLabelOption };
|
|
layout?: LayoutOptions;
|
|
behavior?: {
|
|
dragNode: boolean | string[];
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
* -------------------------------------------------------------------------------------------------------------------------------------------
|
|
* ------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
export interface ViewOptions {
|
|
fitCenter: boolean;
|
|
groupPadding: number;
|
|
updateHighlight: string;
|
|
leakAreaHeight: number;
|
|
}
|
|
|
|
|
|
export interface AnimationOptions {
|
|
enable: boolean;
|
|
duration: number;
|
|
timingFunction: string;
|
|
};
|
|
|
|
|
|
export interface BehaviorOptions {
|
|
drag: boolean;
|
|
zoom: boolean;
|
|
}
|
|
|
|
export interface EngineOptions {
|
|
view?: ViewOptions;
|
|
animation?: AnimationOptions;
|
|
behavior?: BehaviorOptions;
|
|
};
|
|
|
|
|
|
export interface LayoutCreator {
|
|
defineOptions(sourceData: SourceNode[]): LayoutGroupOptions;
|
|
sourcesPreprocess?(sourceData: SourceNode[], options: LayoutGroupOptions): SourceNode[];
|
|
defineLeakRule?(models: SVNode[]): SVNode[];
|
|
layout(nodes: SVNode[], layoutOptions: LayoutOptions);
|
|
[key: string]: any;
|
|
}
|
|
|