@logicflow/core
Version:
LogicFlow, help you quickly create flowcharts
297 lines (296 loc) • 10.7 kB
TypeScript
import { GraphModel, Model } from '..';
import LogicFlow from '../../LogicFlow';
import { ElementState, ElementType, ModelType, TextMode } from '../../constant';
import { ResizeControl } from '../../view/Control';
import AnchorConfig = Model.AnchorConfig;
import GraphElements = LogicFlow.GraphElements;
import TextConfig = LogicFlow.TextConfig;
import NodeConfig = LogicFlow.NodeConfig;
import NodeData = LogicFlow.NodeData;
import Point = LogicFlow.Point;
import CommonTheme = LogicFlow.CommonTheme;
import PropertiesType = LogicFlow.PropertiesType;
import ResizeInfo = ResizeControl.ResizeInfo;
import ResizeNodeData = ResizeControl.ResizeNodeData;
import PCTResizeParams = ResizeControl.PCTResizeParams;
export interface IBaseNodeModel<P extends PropertiesType> extends Model.BaseModel<P> {
/**
* model基础类型,固定为node
*/
readonly BaseType: ElementType.NODE;
properties: P;
isDragging: boolean;
isShowAnchor: boolean;
getNodeStyle: () => CommonTheme;
getTextStyle: () => LogicFlow.TextNodeTheme;
setIsShowAnchor: (isShowAnchor: boolean) => void;
}
export declare class BaseNodeModel<P extends PropertiesType = PropertiesType> implements IBaseNodeModel<P> {
readonly BaseType = ElementType.NODE;
static BaseType: ElementType;
id: string;
readonly type = "";
x: number;
y: number;
textMode: TextMode;
text: TextConfig;
properties: P;
private _width;
get width(): number;
set width(value: number);
private _height;
get height(): number;
set height(value: number);
minWidth: number;
minHeight: number;
maxWidth: number;
maxHeight: number;
PCTResizeInfo?: PCTResizeParams;
anchorsOffset: BaseNodeModel.AnchorsOffsetItem[];
readonly virtual: boolean;
isSelected: boolean;
isHovered: boolean;
isShowAnchor: boolean;
isDragging: boolean;
isHitable: boolean;
isHittable: boolean;
draggable: boolean;
visible: boolean;
rotatable: boolean;
resizable: boolean;
graphModel: GraphModel;
zIndex: number;
state: ElementState;
autoToFront: boolean;
style: CommonTheme;
transform: string;
private _rotate;
get rotate(): number;
set rotate(value: number);
modelType: ModelType;
additionStateData?: Model.AdditionStateDataType;
targetRules: Model.ConnectRule[];
sourceRules: Model.ConnectRule[];
moveRules: Model.NodeMoveRule[];
resizeRules: Model.NodeResizeRule[];
hasSetTargetRules: boolean;
hasSetSourceRules: boolean;
[propName: string]: any;
constructor(data: NodeConfig<P>, graphModel: GraphModel);
/**
* 获取进入当前节点的边和节点
*/
get incoming(): GraphElements;
get outgoing(): GraphElements;
/**
* @overridable 可以重写
* 初始化节点数据
* initNodeData 和 setAttributes 的区别在于
* initNodeData 只在节点初始化的时候调用,用于初始化节点的所有属性。
* setAttributes 除了初始化调用外,还会在 properties 发生变化了调用。
*/
initNodeData(data: NodeConfig): void;
/**
* 设置model属性,每次properties发生变化会触发
* 例如设置节点的宽度
* @example
*
* setAttributes () {
* this.width = 300
* this.height = 200
* }
*
* @overridable 支持重写
*/
setAttributes(): void;
/**
* @overridable 支持重写,自定义此类型节点默认生成方式
* @returns string | null
*/
createId(): string | null;
/**
* 设置当前元素的文本模式
* @param mode
*/
setTextMode(mode: TextMode): void;
/**
* 始化文本属性
*/
private formatText;
/**
* @overridable 支持重写
* 计算节点 resize 时
*/
resize(resizeInfo: ResizeInfo): ResizeNodeData;
proportionalResize(): void;
/**
* 获取被保存时返回的数据
* @overridable 支持重写
*/
getData(): NodeData;
/**
* 用于在历史记录时获取节点数据,
* 在某些情况下,如果希望某个属性变化不引起history的变化,
* 可以重写此方法。
*/
getHistoryData(): NodeData;
/**
* 获取当前节点的properties
*/
getProperties(): P;
/**
* @overridable 支持重写
* 获取当前节点最外层g标签Attributes, 例如 className
* @returns 自定义节点样式
*/
getOuterGAttributes(): LogicFlow.DomAttributes;
/**
* @overridable 支持重写
* 获取当前节点样式
* @returns 自定义节点样式
*/
getNodeStyle(): CommonTheme;
/**
* @overridable 支持重写
* 获取当前节点文本样式
*/
getTextStyle(): {
[x: string]: unknown;
fill?: string | undefined;
stroke?: string | undefined;
strokeWidth?: number | undefined;
radius?: number | undefined;
rx?: number | undefined;
ry?: number | undefined;
width?: number | undefined;
height?: number | undefined;
path?: string | undefined;
overflowMode?: "default" | "autoWrap" | "ellipsis" | undefined;
textWidth?: number | undefined;
background?: LogicFlow.CommonTheme | undefined;
wrapPadding?: string | undefined;
color?: string | undefined;
fontSize: number;
lineHeight?: number | undefined;
textAnchor?: "middle" | "start" | "end" | undefined;
dominantBaseline?: "middle" | "central" | "auto" | "text-bottom" | "alphabetic" | "ideographic" | "mathematical" | "hanging" | "text-top" | undefined;
};
/**
* @overridable 支持重写
* 获取当前节点旋转控制点的样式
*/
getRotateControlStyle(): CommonTheme;
/**
* @overrideable 支持重写
* 获取当前节点缩放控制节点的样式
*/
getResizeControlStyle(): LogicFlow.CommonTheme;
getResizeOutlineStyle(): LogicFlow.CommonTheme;
/**
* @overridable 支持重写
* 获取当前节点锚点样式
* @returns 自定义样式
*/
getAnchorStyle(_anchorInfo?: Point): LogicFlow.AnchorTheme;
/**
* @overridable 支持重写
* 获取当前节点锚点拖出连线样式
* @returns 自定义锚点拖出样式
*/
getAnchorLineStyle(_anchorInfo?: Point): LogicFlow.AnchorLineTheme;
/**
* @overridable 支持重写
* 获取outline样式,重写可以定义此类型节点outline样式, 默认使用主题样式
* @returns 自定义outline样式
*/
getOutlineStyle(): LogicFlow.OutlineTheme;
/**
* @overridable 在连接边时,是否允许这个节点为 source 节点,边到 target 节点
* @param target 目标节点
* @param sourceAnchor 源锚点
* @param targetAnchor 目标锚点
* @param edgeId 调整后边的 id,在开启 adjustEdgeStartAndEnd 后调整边连接的节点时会传入
* 详见:https://github.com/didi/LogicFlow/issues/926#issuecomment-1371823306
*/
isAllowConnectedAsSource(target: BaseNodeModel, sourceAnchor?: Model.AnchorConfig, targetAnchor?: Model.AnchorConfig, edgeId?: string): Model.ConnectRuleResult;
/**
* 获取当前节点作为连接的起始节点规则。
*/
getConnectedSourceRules(): Model.ConnectRule[];
/**
* @overridable 在连线时,判断是否允许这个节点为 target 节点
* @param source 源节点
* @param sourceAnchor 源锚点
* @param targetAnchor 目标锚点
* @param edgeId 调整后边的 id,在开启 adjustEdgeStartAndEnd 后调整边连接的节点时会传入
* 详见:https://github.com/didi/LogicFlow/issues/926#issuecomment-1371823306
*/
isAllowConnectedAsTarget(source: BaseNodeModel, sourceAnchor?: Model.AnchorConfig, targetAnchor?: Model.AnchorConfig, edgeId?: string): Model.ConnectRuleResult;
/**
* 内部方法
* 是否允许移动节点到新的位置
*/
isAllowMoveNode(deltaX: number, deltaY: number): boolean | Model.IsAllowMove;
/**
* 获取作为连线终点时的所有规则。
*/
getConnectedTargetRules(): Model.ConnectRule[];
/**
* @returns Point[] 锚点坐标构成的数组
*/
getAnchorsByOffset(): Model.AnchorConfig[];
/**
* @overridable 子类重写此方法设置默认锚点
* 获取节点默认情况下的锚点
*/
getDefaultAnchor(): Model.AnchorConfig[];
/**
* @overridable 子类重写此方法获取手动连接边到节点时,需要连接的锚点
* 手动连接边到节点时,需要连接的锚点
*/
getTargetAnchor(position: Point): Model.AnchorInfo;
/**
* 获取节点BBox
*/
getBounds(): Model.BoxBoundsPoint;
get anchors(): Model.AnchorConfig[];
getAnchorInfo(anchorId: string | undefined): AnchorConfig | undefined;
addNodeMoveRules(fn: Model.NodeMoveRule): void;
isAllowMoveByXORY(deltaX: number, deltaY: number, isIgnoreRule: boolean): {
isAllowMoveX: boolean;
isAllowMoveY: boolean;
};
move(deltaX: number, deltaY: number, isIgnoreRule?: boolean): boolean;
getMoveDistance(deltaX: number, deltaY: number, isIgnoreRule?: boolean): [number, number];
moveTo(x: number, y: number, isIgnoreRule?: boolean): boolean;
moveText(deltaX: number, deltaY: number): void;
updateText(value: string): void;
addNodeResizeRules(fn: Model.NodeResizeRule): void;
/**
* 内部方法
* 是否允许resize节点到新的位置
*/
isAllowResizeNode(deltaX: number, deltaY: number, width: number, height: number): boolean;
setSelected(flag?: boolean): void;
setHovered(flag?: boolean): void;
setIsShowAnchor(flag?: boolean): void;
setRotatable(flag?: boolean): void;
setResizable(flag?: boolean): void;
setHitable(flag?: boolean): void;
setHittable(flag?: boolean): void;
setElementState(state: number, additionStateData?: Model.AdditionStateDataType): void;
private updateProperties;
setProperty(key: string, val: any): void;
setProperties(properties: Record<string, any>): void;
deleteProperty(key: string): void;
setStyle(key: string, val: any): void;
setStyles(styles: Record<string, any>): void;
updateStyles(styles: Record<string, any>): void;
setZIndex(zIndex?: number): void;
updateAttributes(attributes: any): void;
}
export declare namespace BaseNodeModel {
type PointTuple = [number, number];
type AnchorsOffsetItem = PointTuple | Point;
}
export default BaseNodeModel;