@logicflow/core 0.3.6 → 0.4.1-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +171 -0
  2. package/dist/logic-flow-cjs.js +2 -0
  3. package/dist/logic-flow-cjs.js.LICENSE.txt +23 -0
  4. package/dist/logic-flow.js +2 -2
  5. package/dist/logic-flow.js.LICENSE.txt +23 -0
  6. package/dist/style/index.css +124 -8
  7. package/es/index.js +69 -0
  8. package/package.json +22 -7
  9. package/types/LogicFlow.d.ts +74 -47
  10. package/types/constant/DefaultTheme.d.ts +12 -0
  11. package/types/constant/constant.d.ts +13 -2
  12. package/types/event/eventEmitter.d.ts +8 -8
  13. package/types/index.d.ts +5 -1
  14. package/types/model/BaseModel.d.ts +60 -1
  15. package/types/model/EditConfigModel.d.ts +74 -2
  16. package/types/model/GraphModel.d.ts +34 -6
  17. package/types/model/TransformModel.d.ts +16 -3
  18. package/types/model/edge/BaseEdgeModel.d.ts +19 -1
  19. package/types/model/edge/BezierEdgeModel.d.ts +11 -1
  20. package/types/model/edge/LineEdgeModel.d.ts +1 -1
  21. package/types/model/edge/PolylineEdgeModel.d.ts +23 -13
  22. package/types/model/node/BaseNodeModel.d.ts +71 -23
  23. package/types/model/node/CircleNodeModel.d.ts +5 -2
  24. package/types/model/node/HtmlNodeModel.d.ts +11 -0
  25. package/types/model/node/PolygonNodeModel.d.ts +5 -0
  26. package/types/model/node/index.d.ts +1 -0
  27. package/types/options.d.ts +80 -10
  28. package/types/tool/MultipleSelectTool.d.ts +2 -2
  29. package/types/tool/TextEditTool.d.ts +3 -4
  30. package/types/tool/index.d.ts +1 -0
  31. package/types/type/index.d.ts +87 -5
  32. package/types/util/drag.d.ts +2 -0
  33. package/types/util/edge.d.ts +2 -1
  34. package/types/util/graph.d.ts +4 -0
  35. package/types/util/index.d.ts +2 -0
  36. package/types/util/node.d.ts +20 -2
  37. package/types/util/theme.d.ts +12 -0
  38. package/types/util/uuid.d.ts +5 -0
  39. package/types/util/zIndex.d.ts +2 -0
  40. package/types/view/Anchor.d.ts +6 -4
  41. package/types/view/Graph.d.ts +0 -4
  42. package/types/view/basic-shape/LinearGradient.d.ts +1 -0
  43. package/types/view/basic-shape/Polygon.d.ts +1 -9
  44. package/types/view/behavior/DnD.d.ts +3 -1
  45. package/types/view/edge/AdjustPoint.d.ts +43 -0
  46. package/types/view/edge/BaseEdge.d.ts +3 -1
  47. package/types/view/edge/PolylineEdge.d.ts +1 -0
  48. package/types/view/node/BaseNode.d.ts +13 -8
  49. package/types/view/node/CircleNode.d.ts +3 -1
  50. package/types/view/node/DiamondNode.d.ts +3 -1
  51. package/types/view/node/EllipseNode.d.ts +3 -1
  52. package/types/view/node/HtmlNode.d.ts +11 -0
  53. package/types/view/node/PolygonNode.d.ts +3 -1
  54. package/types/view/node/RectNode.d.ts +3 -1
  55. package/types/view/node/TextNode.d.ts +1 -0
  56. package/types/view/node/index.d.ts +2 -1
  57. package/types/view/overlay/CanvasOverlay.d.ts +30 -2
  58. package/types/view/overlay/Grid.d.ts +10 -0
  59. package/types/view/overlay/HtmlOverlay.d.ts +5 -46
  60. package/types/view/overlay/ModificationOverlay.d.ts +9 -0
  61. package/types/view/overlay/OutlineOverlay.d.ts +1 -1
  62. package/CHANGELOG.md +0 -366
  63. package/LICENSE +0 -433
  64. package/dist/style/background.css +0 -8
  65. package/dist/style/html-overlay.css +0 -33
  66. package/dist/style/tool.css +0 -29
@@ -1,14 +1,73 @@
1
1
  import { ElementState } from '../constant/constant';
2
2
  import { TextConfig, AdditionData } from '../type';
3
3
  interface IBaseModel {
4
- readonly id: string;
4
+ /**
5
+ * 节点或者连线的id.
6
+ * 默认情况下,使用uuidv4生成。
7
+ * 如果想要自定义,可以重写createId生成。
8
+ */
9
+ id: string;
10
+ /**
11
+ * 不可自定义
12
+ * model对应的图形外观类型(eg: 圆形、矩形、多边形等)
13
+ * 用于logicflow内部计算使用。
14
+ */
5
15
  modelType: string;
16
+ /**
17
+ * 请勿直接修改属性,如果想要将一个节点类型修改为另一个类型。请使用
18
+ * `lf.graphModel.changeEdgeType`和`lf.graphModel.changeNodeType`
19
+ *
20
+ * 流程图元素类型,自定义元素时对应的标识。
21
+ * 在logicflow/core中对应着rect、circle、polyline这种。
22
+ * 在实际项目中,我们会基于业务类型进行自定义type.
23
+ * 例如BPMN应用场景,我们会定义开始节点的类型为bpmn:start-event
24
+ *
25
+ * 和modelType的区别是,type更多的是业务上的类型,而modelType则是外观上的类型。
26
+ * 例如bpmnjs的开始节点和结束节点type分别为'bpmn:start-event'和'bpmn:end-event'。
27
+ * 但是他们的modelType都是circle-node, 因为他们外观都是基于圆形自定义而来。
28
+ */
6
29
  type: string;
30
+ /**
31
+ * 元素状态
32
+ * 不同的状态对应着元素显示效果。
33
+ * 请勿直接修改。
34
+ * logicflow内部将元素状态分为5种:
35
+ * DEFAULT = 1 默认显示
36
+ * TEXT_EDIT = 2 此元素正在进行文本编辑
37
+ * SHOW_MENU = 3, 显示菜单,废弃请使用菜单插件
38
+ * ALLOW_CONNECT = 4, 此元素允许作为当前连线的目标节点
39
+ * NOT_ALLOW_CONNECT = 5, 此元素不允许作为当前连线的目标节点
40
+ */
7
41
  state: ElementState;
8
42
  additionStateData: AdditionData;
43
+ /**
44
+ * 元素上的文本
45
+ * logicflow中存在两种文本
46
+ * 一种是脱离连线和节点单独存在的文本
47
+ * 一种是必须和连线、节点关联的文本。
48
+ * 此属性控制的是第二种。
49
+ * 节点和连线删除、调整的时候,其关联的文本也会对应删除、调整。
50
+ */
9
51
  text: TextConfig;
52
+ /**
53
+ * 元素是否被选中
54
+ */
10
55
  isSelected: boolean;
56
+ /**
57
+ * 元素堆叠是层级,默认情况下节点zIndex值为1,连线zIndex为0。
58
+ * todo:写完善
59
+ */
11
60
  zIndex: number;
61
+ /**
62
+ * 创建节点ID
63
+ * 默认情况下,logicflow内部使用uuidv4生成id。
64
+ * 在自定义节点的时候,可以重写此方法基于自己的规则生成id。
65
+ * 注意,此方法必须是同步的。
66
+ * 如果想要异步修改Id,建议删除此节点后再同一位置创建一个新的节点。
67
+ * @overridable 可以重写
68
+ * @returns string
69
+ */
70
+ createId(): string;
12
71
  move(deltaX: number, deltaY: number): void;
13
72
  moveText(deltaX: number, deltaY: number): void;
14
73
  updateText(value: string): void;
@@ -1,14 +1,80 @@
1
1
  export interface EditConfigInterface {
2
+ /**
3
+ * 是否为静默模式
4
+ */
5
+ isSilentMode?: boolean;
6
+ /**
7
+ * 禁止缩放画布
8
+ */
2
9
  stopZoomGraph?: boolean;
10
+ /**
11
+ * 禁止鼠标滚动移动画布
12
+ */
3
13
  stopScrollGraph?: boolean;
14
+ /**
15
+ * 禁止拖动画布
16
+ */
4
17
  stopMoveGraph?: boolean;
18
+ /**
19
+ * 允许调整连线
20
+ */
5
21
  adjustEdge?: boolean;
22
+ /**
23
+ * 允许调整连线起点和终点
24
+ */
25
+ adjustEdgeStartAndEnd?: boolean;
26
+ /**
27
+ * 允许拖动节点
28
+ */
6
29
  adjustNodePosition?: boolean;
30
+ /**
31
+ * 隐藏节点所有锚点
32
+ */
7
33
  hideAnchors?: boolean;
34
+ /**
35
+ * 显示节点悬浮时的外框
36
+ */
37
+ hoverOutline?: boolean;
38
+ /**
39
+ * 节点被选中时是否显示outline
40
+ */
41
+ nodeSelectedOutline?: boolean;
42
+ /**
43
+ * 连线被选中时是否显示outline
44
+ */
45
+ edgeSelectedOutline?: boolean;
46
+ /**
47
+ * 允许节点文本可以编辑
48
+ */
8
49
  nodeTextEdit?: boolean;
50
+ /**
51
+ * 允许连线文本可以编辑
52
+ */
9
53
  edgeTextEdit?: boolean;
54
+ /**
55
+ * 允许文本编辑
56
+ */
57
+ textEdit?: boolean;
58
+ /**
59
+ * 允许节点文本可以拖拽
60
+ */
10
61
  nodeTextDraggable?: boolean;
62
+ /**
63
+ * 允许连线文本可以拖拽
64
+ */
11
65
  edgeTextDraggable?: boolean;
66
+ /**
67
+ * 允许meta多选元素
68
+ */
69
+ metaKeyMultipleSelected?: boolean;
70
+ /**
71
+ * 多选按键, 支持meta(cmd)、shift、alt
72
+ * 不支持ctrl,ctrl会出发contextmenu
73
+ */
74
+ multipleSelectKey?: string;
75
+ /**
76
+ * 外部传入的额外配置, 待优化,这里不够易用。
77
+ */
12
78
  extraConf?: Record<string, string | number | object | boolean>;
13
79
  }
14
80
  /**
@@ -19,18 +85,24 @@ export default class EditConfigModel {
19
85
  stopScrollGraph: boolean;
20
86
  stopMoveGraph: boolean;
21
87
  adjustEdge: boolean;
88
+ adjustEdgeMiddle: boolean;
89
+ adjustEdgeStartAndEnd: boolean;
22
90
  adjustNodePosition: boolean;
23
91
  hideAnchors: boolean;
24
92
  hoverOutline: boolean;
93
+ nodeSelectedOutline: boolean;
94
+ edgeSelectedOutline: boolean;
25
95
  nodeTextEdit: boolean;
26
96
  edgeTextEdit: boolean;
27
97
  nodeTextDraggable: boolean;
28
98
  edgeTextDraggable: boolean;
29
99
  metaKeyMultipleSelected: boolean;
100
+ multipleSelectKey: string;
30
101
  extraConf: {};
31
- keys: string[];
32
- constructor(data: any);
102
+ defaultConfig: {};
103
+ constructor(config: EditConfigInterface);
33
104
  updateEditConfig(config: any): void;
105
+ getConfigDetail(config: any): Pick<any, string>;
34
106
  getConfig(): Partial<this>;
35
107
  }
36
108
  export { EditConfigModel };
@@ -4,7 +4,7 @@ import EditConfigModel from './EditConfigModel';
4
4
  import TransfromModel from './TransformModel';
5
5
  import { IBaseModel } from './BaseModel';
6
6
  import { ElementState, ModelType, ElementType } from '../constant/constant';
7
- import { AdditionData, Point, NodeConfig, EdgeConfig, Style } from '../type';
7
+ import { AdditionData, Point, NodeConfig, EdgeConfig, Style, NodeMoveRule } from '../type';
8
8
  import EventEmitter from '../event/eventEmitter';
9
9
  declare type BaseNodeModelId = string;
10
10
  declare type ElementModeId = string;
@@ -19,8 +19,8 @@ declare class GraphModel {
19
19
  height: number;
20
20
  topElement: BaseNodeModel | BaseEdgeModel;
21
21
  selectElement: BaseNodeModel | BaseEdgeModel;
22
- selectElements: Map<string, BaseNodeModel | BaseEdgeModel>;
23
- selectElementSize: number;
22
+ idGenerator: (type?: string) => number | string;
23
+ nodeMoveRules: NodeMoveRule[];
24
24
  edgeType: string;
25
25
  nodes: BaseNodeModel[];
26
26
  activeElement: IBaseModel;
@@ -29,6 +29,7 @@ declare class GraphModel {
29
29
  additionStateData: AdditionData;
30
30
  edges: BaseEdgeModel[];
31
31
  isSlient: boolean;
32
+ overlapMode: number;
32
33
  plugins: any[];
33
34
  tools: any[];
34
35
  background: any;
@@ -55,6 +56,7 @@ declare class GraphModel {
55
56
  * 当前编辑的元素,低频操作,先循环找吧。
56
57
  */
57
58
  get textEditElement(): BaseNodeModel | BaseEdgeModel;
59
+ get selectElements(): Map<any, any>;
58
60
  /**
59
61
  * 获取指定区域内的所有元素
60
62
  */
@@ -101,11 +103,17 @@ declare class GraphModel {
101
103
  edges: any[];
102
104
  };
103
105
  updateAttributes(id: string, attributes: object): void;
106
+ /**
107
+ * 修改指定节点id
108
+ */
109
+ changeNodeId<T extends string>(oldId: any, newId?: T | string): false | T | string;
110
+ changeEdgeId<T extends string>(oldId: string, newId?: string): false | T | string;
104
111
  setFakerNode(nodeModel: BaseNodeModel): void;
105
112
  removeFakerNode(): void;
106
113
  setModel(type: string, ModelClass: any): Map<any, any>;
107
114
  updateEdgeByIndex(index: any, data: any): void;
108
115
  toFront(id: any): void;
116
+ setElementZIndex(id: any, zIndex: any): void;
109
117
  deleteNode(id: any): void;
110
118
  addNode(nodeConfig: NodeConfig): any;
111
119
  /**
@@ -114,12 +122,20 @@ declare class GraphModel {
114
122
  */
115
123
  cloneNode(nodeId: string): BaseNodeModel;
116
124
  /**
117
- * 移动节点
125
+ * 移动节点-相对位置
118
126
  * @param nodeModel 节点Id
119
127
  * @param deltaX X轴移动距离
120
128
  * @param deltaY Y轴移动距离
129
+ * @param isignoreRule 是否忽略移动规则限制
130
+ */
131
+ moveNode(nodeId: BaseNodeModelId, deltaX: number, deltaY: number, isignoreRule?: boolean): void;
132
+ /**
133
+ * 移动节点-绝对位置
134
+ * @param nodeModel 节点Id
135
+ * @param x X轴目标位置
136
+ * @param y Y轴目标位置
121
137
  */
122
- moveNode(nodeId: BaseNodeModelId, deltaX: number, deltaY: number): void;
138
+ moveNode2Coordinate(nodeId: BaseNodeModelId, x: number, y: number): void;
123
139
  setTextEditable(id: ElementModeId): void;
124
140
  createEdge(edgeConfig: EdgeConfig): EdgeConfig;
125
141
  moveEdge(nodeId: BaseNodeModelId, deltaX: number, deltaY: number): void;
@@ -141,8 +157,20 @@ declare class GraphModel {
141
157
  moveElements(elements: {
142
158
  nodes: NodeConfig[];
143
159
  }, deltaX: number, deltaY: number): void;
144
- changeEdgeType(type: string): void;
160
+ /**
161
+ * 批量移动节点,节点移动的时候,会动态计算所有节点与未移动节点的连线位置
162
+ * 移动的节点直接的连线会保持相对位置
163
+ */
164
+ moveNodes(nodeIds: any, deltaX: any, deltaY: any, isignoreRule?: boolean): void;
165
+ /**
166
+ * 添加节点移动限制规则,在节点移动的时候触发。
167
+ * 如果方法返回false, 则会阻止节点移动。
168
+ * @param fn function
169
+ */
170
+ addNodeMoveRules(fn: NodeMoveRule): void;
171
+ setDefaultEdgeType(type: string): void;
145
172
  changeNodeType(id: any, type: string): void;
173
+ changeEdgeType(id: any, type: any): void;
146
174
  setTheme(style: Style): void;
147
175
  clearData(): void;
148
176
  }
@@ -1,4 +1,5 @@
1
- import { PointTuple } from '../type';
1
+ import EventEmitter from '../event/eventEmitter';
2
+ import { PointTuple, ZoomParam } from '../type';
2
3
  export interface TransfromInterface {
3
4
  SCALE_X: number;
4
5
  SKEW_Y: number;
@@ -9,10 +10,13 @@ export interface TransfromInterface {
9
10
  ZOOM_SIZE: number;
10
11
  MINI_SCALE_SIZE: number;
11
12
  MAX_SCALE_SIZE: number;
12
- zoom: (isZoomout: boolean) => boolean;
13
+ zoom: (isZoomout: ZoomParam) => boolean;
13
14
  HtmlPointToCanvasPoint: (point: PointTuple) => PointTuple;
14
15
  CanvasPointToHtmlPoint: (point: PointTuple) => PointTuple;
15
16
  moveCanvasPointByHtml: (point: PointTuple, x: number, y: number) => PointTuple;
17
+ getTransformStyle: () => {
18
+ transform: string;
19
+ };
16
20
  }
17
21
  export default class TransfromModel implements TransfromInterface {
18
22
  MINI_SCALE_SIZE: number;
@@ -24,6 +28,8 @@ export default class TransfromModel implements TransfromInterface {
24
28
  TRANSLATE_X: number;
25
29
  TRANSLATE_Y: number;
26
30
  ZOOM_SIZE: number;
31
+ eventCenter: EventEmitter;
32
+ constructor(eventCenter: any);
27
33
  setZoomMiniSize(size: number): void;
28
34
  setZoomMaxSize(size: number): void;
29
35
  /**
@@ -50,7 +56,14 @@ export default class TransfromModel implements TransfromInterface {
50
56
  * @param deltaY y轴距离变化
51
57
  */
52
58
  fixDeltaXY(deltaX: number, deltaY: number): PointTuple;
53
- zoom(isZoomIn?: boolean, point?: PointTuple): boolean;
59
+ /**
60
+ * 基于当前的缩放,获取画布渲染样式transform值
61
+ */
62
+ getTransformStyle(): {
63
+ transform: string;
64
+ };
65
+ zoom(zoomSize?: ZoomParam, point?: PointTuple): boolean;
66
+ private emitGraphTransform;
54
67
  resetZoom(): void;
55
68
  translate(x: number, y: number): void;
56
69
  /**
@@ -3,13 +3,17 @@ import GraphModel from '../GraphModel';
3
3
  import { Point, AdditionData, EdgeAttribute, EdgeData, MenuConfig, EdgeConfig } from '../../type/index';
4
4
  import { ElementState, ModelType, ElementType } from '../../constant/constant';
5
5
  declare class BaseEdgeModel implements IBaseModel {
6
- readonly id: string;
6
+ id: string;
7
7
  readonly BaseType = ElementType.EDGE;
8
8
  state: number;
9
9
  modelType: ModelType;
10
10
  additionStateData: AdditionData;
11
+ [propName: string]: any;
11
12
  graphModel: GraphModel;
12
13
  menu?: MenuConfig[];
14
+ sourceAnchorId: string;
15
+ targetAnchorId: string;
16
+ customTextPosition: boolean;
13
17
  text: {
14
18
  value: string;
15
19
  x: number;
@@ -27,6 +31,7 @@ declare class BaseEdgeModel implements IBaseModel {
27
31
  stroke: string;
28
32
  strokeDashArray: string;
29
33
  outlineColor: string;
34
+ hideOutline: boolean;
30
35
  outlineStrokeDashArray: string;
31
36
  strokeOpacity: number;
32
37
  zIndex: number;
@@ -40,10 +45,16 @@ declare class BaseEdgeModel implements IBaseModel {
40
45
  draggable: boolean;
41
46
  constructor(data: EdgeConfig, graphModel: GraphModel, type: any);
42
47
  initEdgeData(data: any): void;
48
+ createId(): any;
43
49
  setAttributes(): void;
44
50
  get sourceNode(): import("..").BaseNodeModel;
45
51
  get targetNode(): import("..").BaseNodeModel;
46
52
  get textPosition(): Point;
53
+ /**
54
+ * @override 重新自定义文本位置
55
+ * @returns 文本位置
56
+ */
57
+ getTextPosition(): Point;
47
58
  move(): void;
48
59
  getBeginAnchor(sourceNode: any, targetNode: any): Point;
49
60
  getEndAnchor(targetNode: any): Point;
@@ -53,6 +64,7 @@ declare class BaseEdgeModel implements IBaseModel {
53
64
  setProperties(properties: any): void;
54
65
  updateData(edgeAttribute: EdgeAttribute): void;
55
66
  formatText(data: any): void;
67
+ resetTextPosition(): void;
56
68
  moveText(deltaX: number, deltaY: number): void;
57
69
  setText(textConfig: any): void;
58
70
  updateText(value: string): void;
@@ -69,6 +81,12 @@ declare class BaseEdgeModel implements IBaseModel {
69
81
  setZIndex(zindex?: number): void;
70
82
  initPoints(): void;
71
83
  updateAttributes(attributes: any): void;
84
+ getAdjustStart(): any;
85
+ getAdjustEnd(): any;
86
+ updateAfterAdjustStartAndEnd({ startPoint, endPoint }: {
87
+ startPoint: any;
88
+ endPoint: any;
89
+ }): void;
72
90
  }
73
91
  export { BaseEdgeModel };
74
92
  export default BaseEdgeModel;
@@ -7,7 +7,7 @@ export default class BezierEdgeModel extends BaseEdgeModel {
7
7
  offset: number;
8
8
  path: string;
9
9
  constructor(data: any, graphModel: any);
10
- get textPosition(): Point;
10
+ getTextPosition(): Point;
11
11
  getData(): {
12
12
  pointsList: {
13
13
  x: any;
@@ -21,12 +21,22 @@ export default class BezierEdgeModel extends BaseEdgeModel {
21
21
  endPoint: Point;
22
22
  text?: import("../../type").TextConfig;
23
23
  properties: Record<string, unknown>;
24
+ zIndex?: number;
24
25
  };
25
26
  private getControls;
26
27
  private getPath;
27
28
  initPoints(): void;
28
29
  updatePoints(): void;
30
+ updatePath(): void;
29
31
  updateStartPoint(anchor: any): void;
30
32
  updateEndPoint(anchor: any): void;
31
33
  updateAdjustAnchor(anchor: Point, type: string): void;
34
+ getAdjustStart(): any;
35
+ getAdjustEnd(): any;
36
+ updateAfterAdjustStartAndEnd({ startPoint, endPoint, sourceNode, targetNode }: {
37
+ startPoint: any;
38
+ endPoint: any;
39
+ sourceNode: any;
40
+ targetNode: any;
41
+ }): void;
32
42
  }
@@ -5,5 +5,5 @@ export { LineEdgeModel };
5
5
  export default class LineEdgeModel extends BaseEdgeModel {
6
6
  modelType: ModelType;
7
7
  constructor(data: any, graphModel: any);
8
- get textPosition(): Point;
8
+ getTextPosition(): Point;
9
9
  }
@@ -9,31 +9,33 @@ export default class PolylineEdgeModel extends BaseEdgeModel {
9
9
  draginngPointList: any;
10
10
  dbClickPosition: Point;
11
11
  constructor(data: any, graphModel: GraphModel);
12
- get textPosition(): Point;
12
+ getTextPosition(): {
13
+ x: number;
14
+ y: number;
15
+ };
13
16
  getAfterAnchor(direction: any, position: any, anchorList: any): any;
14
17
  getCorssPoint(direction: any, start: any, end: any): any;
15
- removeCrossPoints(startIndex: any, endIndex: any, pointList: any): any[];
16
- getDragingPoints(direction: any, positioType: any, position: any, anchorList: any, draginngPointList: any): any[];
17
- updateCrossPoints(pointList: any): any[];
18
- getData(): {
18
+ removeCrossPoints(startIndex: any, endIndex: any, pointList: any): any;
19
+ getDragingPoints(direction: any, positioType: any, position: any, anchorList: any, draginngPointList: any): any;
20
+ updateCrossPoints(pointList: any): any;
21
+ getData(): import("../../type").EdgeData & {
19
22
  pointsList: {
20
23
  x: any;
21
24
  y: any;
22
25
  }[];
23
- id: string;
24
- type: string;
25
- sourceNodeId: string;
26
- startPoint: Point;
27
- targetNodeId: string;
28
- endPoint: Point;
29
- text?: import("../../type").TextConfig;
30
- properties: Record<string, unknown>;
31
26
  };
32
27
  initPoints(): void;
33
28
  updatePoints(): void;
34
29
  updateStartPoint(anchor: any): void;
35
30
  updateEndPoint(anchor: any): void;
36
31
  dragAppendStart(): void;
32
+ dragAppendSimple(appendInfo: any, dragInfo: any): {
33
+ start: any;
34
+ end: any;
35
+ startIndex: any;
36
+ endIndex: any;
37
+ direction: any;
38
+ };
37
39
  dragAppend(appendInfo: any, dragInfo: any): {
38
40
  start: any;
39
41
  end: any;
@@ -43,4 +45,12 @@ export default class PolylineEdgeModel extends BaseEdgeModel {
43
45
  };
44
46
  dragAppendEnd(): void;
45
47
  updatePointsAfterDrage(pointsList: any): void;
48
+ getAdjustStart(): any;
49
+ getAdjustEnd(): any;
50
+ updateAfterAdjustStartAndEnd({ startPoint, endPoint, sourceNode, targetNode }: {
51
+ startPoint: any;
52
+ endPoint: any;
53
+ sourceNode: any;
54
+ targetNode: any;
55
+ }): void;
46
56
  }
@@ -1,31 +1,39 @@
1
1
  import { ElementState, ModelType, ElementType } from '../../constant/constant';
2
- import { AdditionData, NodeData, MenuConfig, NodeAttribute, NodeConfig } from '../../type';
2
+ import { AdditionData, NodeData, NodeAttribute, NodeConfig, NodeMoveRule, Bounds, AnchorConfig, PointAnchor, AnchorsOffsetItem } from '../../type';
3
3
  import GraphModel from '../GraphModel';
4
4
  import { IBaseModel } from '../BaseModel';
5
5
  export declare type ConnectRule = {
6
6
  message: string;
7
- validate: (source: BaseNodeModel, target: BaseNodeModel) => boolean;
7
+ validate: (source: BaseNodeModel, target: BaseNodeModel, sourceAnchor: AnchorConfig, targetAnchor: AnchorConfig) => boolean;
8
8
  };
9
9
  export declare type ConnectRuleResult = {
10
10
  isAllPass: boolean;
11
11
  msg?: string;
12
12
  };
13
+ interface IBaseNodeModel extends IBaseModel {
14
+ /**
15
+ * model基础类型,固定为node
16
+ */
17
+ readonly BaseType: ElementType.NODE;
18
+ }
13
19
  export { BaseNodeModel };
14
- export default class BaseNodeModel implements IBaseModel {
15
- readonly id: string;
20
+ export default class BaseNodeModel implements IBaseNodeModel {
21
+ id: string;
16
22
  readonly BaseType = ElementType.NODE;
17
23
  modelType: ModelType;
18
24
  additionStateData: AdditionData;
19
- menu?: MenuConfig[];
25
+ [propName: string]: any;
20
26
  targetRules: ConnectRule[];
21
27
  sourceRules: ConnectRule[];
28
+ moveRules: NodeMoveRule[];
22
29
  hasSetTargetRules: boolean;
23
30
  hasSetSourceRules: boolean;
24
- properties: {};
31
+ properties: Record<string, any>;
25
32
  type: string;
26
33
  x: number;
27
34
  y: number;
28
35
  private _width;
36
+ graphModel: GraphModel;
29
37
  get width(): number;
30
38
  set width(value: number);
31
39
  private _height;
@@ -38,6 +46,7 @@ export default class BaseNodeModel implements IBaseModel {
38
46
  strokeOpacity: number;
39
47
  opacity: number;
40
48
  outlineColor: string;
49
+ hideOutline: boolean;
41
50
  hoverOutlineColor: string;
42
51
  outlineStrokeDashArray: string;
43
52
  hoverOutlineStrokeDashArray: string;
@@ -45,7 +54,7 @@ export default class BaseNodeModel implements IBaseModel {
45
54
  isHovered: boolean;
46
55
  isHitable: boolean;
47
56
  zIndex: number;
48
- anchorsOffset: any[];
57
+ anchorsOffset: AnchorsOffsetItem[];
49
58
  state: number;
50
59
  text: {
51
60
  value: string;
@@ -56,18 +65,46 @@ export default class BaseNodeModel implements IBaseModel {
56
65
  };
57
66
  draggable: boolean;
58
67
  constructor(data: NodeConfig, graphModel: GraphModel, type: any);
59
- initNodeData(data: any): void;
60
- formatText(data: any): void;
68
+ /**
69
+ * 初始化节点数据,不建议重写
70
+ * 可以重写setAttributes来实现修改初始化功能
71
+ * initNodeData和setAttributes的区别在于
72
+ * initNodeData需要
73
+ */
74
+ protected initNodeData(data: any): void;
75
+ /**
76
+ * @overridable 支持重新
77
+ * @returns string
78
+ */
79
+ createId(): string;
80
+ /**
81
+ * 初始化文本属性,对
82
+ */
83
+ private formatText;
84
+ /**
85
+ * 设置model初始化属性
86
+ * 例如设置节点的宽度
87
+ * @example
88
+ *
89
+ * setAttributes () {
90
+ * this.width = 300
91
+ * this.height = 200
92
+ * }
93
+ *
94
+ * @overridable 支持重写
95
+ */
61
96
  setAttributes(): void;
62
97
  /**
63
- * 保存时获取的数据
98
+ * 获取被保存时返回的数据
99
+ * @overridable 支持重写
100
+ * @returns NodeData
64
101
  */
65
102
  getData(): NodeData;
66
- getProperties(): {};
103
+ getProperties(): Record<string, any>;
67
104
  /**
68
105
  * 在连线的时候,是否允许这个节点为source节点,连线到target节点。
69
106
  */
70
- isAllowConnectedAsSource(target: BaseNodeModel): ConnectRuleResult;
107
+ isAllowConnectedAsSource(target: BaseNodeModel, soureAnchor: AnchorConfig, targetAnchor: AnchorConfig): ConnectRuleResult | Boolean;
71
108
  /**
72
109
  * 获取当前节点作为连接的起始节点规则。
73
110
  */
@@ -75,18 +112,29 @@ export default class BaseNodeModel implements IBaseModel {
75
112
  /**
76
113
  * 在连线的时候,是否允许这个节点未target节点
77
114
  */
78
- isAllowConnectedAsTarget(source: BaseNodeModel): ConnectRuleResult;
115
+ isAllowConnectedAsTarget(source: BaseNodeModel, soureAnchor: AnchorConfig, targetAnchor: AnchorConfig): ConnectRuleResult | Boolean;
116
+ /**
117
+ * 是否允许移动节点到新的位置
118
+ */
119
+ isAllowMoveNode(deltaX: any, deltaY: any): boolean;
79
120
  getConnectedTargetRules(): ConnectRule[];
80
- getAnchorsByOffset(): {
81
- x: any;
82
- y: any;
83
- }[];
84
- get anchors(): {
85
- x: any;
86
- y: any;
87
- }[];
88
- move(deltaX: any, deltaY: any): void;
89
- moveTo(x: any, y: any): void;
121
+ /**
122
+ * @overridable 子类重写此方法设置锚点
123
+ * @returns Point[] 锚点坐标构成的数组
124
+ */
125
+ getAnchorsByOffset(): PointAnchor[];
126
+ /**
127
+ * 获取节点默认情况下的锚点
128
+ */
129
+ getDetaultAnchor(): PointAnchor[];
130
+ /**
131
+ * 获取节点BBox
132
+ */
133
+ getBounds(): Bounds;
134
+ get anchors(): PointAnchor[];
135
+ addNodeMoveRules(fn: NodeMoveRule): void;
136
+ move(deltaX: any, deltaY: any, isignoreRule?: boolean): void;
137
+ moveTo(x: any, y: any, isignoreRule?: boolean): void;
90
138
  moveText(deltaX: any, deltaY: any): void;
91
139
  updateText(value: string): void;
92
140
  setSelected(flag?: boolean): void;
@@ -1,4 +1,3 @@
1
- import { Point } from '../../type';
2
1
  import BaseNodeModel from './BaseNodeModel';
3
2
  import { ModelType } from '../../constant/constant';
4
3
  import GraphModel from '../GraphModel';
@@ -8,7 +7,11 @@ declare class CircleNodeModel extends BaseNodeModel {
8
7
  constructor(data: any, graphModel: GraphModel);
9
8
  get width(): number;
10
9
  get height(): number;
11
- get anchors(): Point[];
10
+ getDetaultAnchor(): {
11
+ x: number;
12
+ y: number;
13
+ id: string;
14
+ }[];
12
15
  }
13
16
  export { CircleNodeModel };
14
17
  export default CircleNodeModel;
@@ -0,0 +1,11 @@
1
+ import { Point } from '../../type';
2
+ import BaseNodeModel from './BaseNodeModel';
3
+ import { ModelType } from '../../constant/constant';
4
+ import GraphModel from '../GraphModel';
5
+ declare class HtmlNodeModel extends BaseNodeModel {
6
+ modelType: ModelType;
7
+ constructor(data: any, graphModel: GraphModel);
8
+ get anchors(): Point[];
9
+ }
10
+ export { HtmlNodeModel };
11
+ export default HtmlNodeModel;
@@ -6,6 +6,11 @@ declare class PolygonNodeModel extends BaseNodeModel {
6
6
  modelType: ModelType;
7
7
  points: PointTuple[];
8
8
  constructor(data: any, graphModel: GraphModel);
9
+ /**
10
+ * 由于大多数情况下,我们初始化拿到的多边形坐标都是基于原点的(例如绘图工具到处的svg)。
11
+ * 在logicflow中对多边形进行移动,我们不需要去更新points,
12
+ * 而是去更新多边形中心点即可。
13
+ */
9
14
  get pointsPosition(): Point[];
10
15
  get width(): number;
11
16
  get height(): number;