StructV2/src/options.ts

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;
}