@logicflow/extension 1.2.9 → 1.2.11

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 (141) hide show
  1. package/CHANGELOG.md +1727 -0
  2. package/cjs/NodeResize/Control/Control.js +35 -49
  3. package/cjs/bpmn/getBpmnId.js +25 -2
  4. package/cjs/bpmn-elements/index.js +102 -0
  5. package/cjs/bpmn-elements/presets/Event/EndEventFactory.js +134 -0
  6. package/cjs/bpmn-elements/presets/Event/IntermediateCatchEvent.js +118 -0
  7. package/cjs/bpmn-elements/presets/Event/IntermediateThrowEvent.js +119 -0
  8. package/cjs/bpmn-elements/presets/Event/StartEventFactory.js +133 -0
  9. package/cjs/bpmn-elements/presets/Event/boundaryEventFactory.js +125 -0
  10. package/cjs/bpmn-elements/presets/Event/index.js +16 -0
  11. package/cjs/bpmn-elements/presets/Flow/index.js +9 -0
  12. package/cjs/bpmn-elements/presets/Flow/sequenceFlow.js +78 -0
  13. package/cjs/bpmn-elements/presets/Gateway/gateway.js +109 -0
  14. package/cjs/bpmn-elements/presets/Gateway/index.js +14 -0
  15. package/cjs/bpmn-elements/presets/Task/index.js +134 -0
  16. package/cjs/bpmn-elements/presets/Task/subProcess.js +190 -0
  17. package/cjs/bpmn-elements/presets/Task/task.js +190 -0
  18. package/cjs/bpmn-elements/presets/icons.js +116 -0
  19. package/cjs/bpmn-elements/utils.js +45 -0
  20. package/cjs/bpmn-elements-adapter/constant.js +69 -0
  21. package/cjs/bpmn-elements-adapter/index.js +1066 -0
  22. package/cjs/bpmn-elements-adapter/json2xml.js +91 -0
  23. package/cjs/bpmn-elements-adapter/xml2json.js +554 -0
  24. package/cjs/components/control/index.js +1 -1
  25. package/cjs/components/menu/index.js +76 -7
  26. package/cjs/index.js +3 -1
  27. package/cjs/materials/group/index.js +16 -7
  28. package/cjs/tools/snapshot/index.js +14 -0
  29. package/es/NodeResize/Control/Control.d.ts +1 -0
  30. package/es/NodeResize/Control/Control.js +36 -50
  31. package/es/bpmn/getBpmnId.js +25 -2
  32. package/es/bpmn-elements/index.d.ts +16 -0
  33. package/es/bpmn-elements/index.js +88 -0
  34. package/es/bpmn-elements/presets/Event/EndEventFactory.d.ts +5 -0
  35. package/es/bpmn-elements/presets/Event/EndEventFactory.js +130 -0
  36. package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.d.ts +5 -0
  37. package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.js +114 -0
  38. package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.d.ts +5 -0
  39. package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.js +115 -0
  40. package/es/bpmn-elements/presets/Event/StartEventFactory.d.ts +5 -0
  41. package/es/bpmn-elements/presets/Event/StartEventFactory.js +129 -0
  42. package/es/bpmn-elements/presets/Event/boundaryEventFactory.d.ts +5 -0
  43. package/es/bpmn-elements/presets/Event/boundaryEventFactory.js +121 -0
  44. package/es/bpmn-elements/presets/Event/index.d.ts +2 -0
  45. package/es/bpmn-elements/presets/Event/index.js +12 -0
  46. package/es/bpmn-elements/presets/Flow/index.d.ts +7 -0
  47. package/es/bpmn-elements/presets/Flow/index.js +5 -0
  48. package/es/bpmn-elements/presets/Flow/sequenceFlow.d.ts +5 -0
  49. package/es/bpmn-elements/presets/Flow/sequenceFlow.js +74 -0
  50. package/es/bpmn-elements/presets/Gateway/gateway.d.ts +17 -0
  51. package/es/bpmn-elements/presets/Gateway/gateway.js +105 -0
  52. package/es/bpmn-elements/presets/Gateway/index.d.ts +2 -0
  53. package/es/bpmn-elements/presets/Gateway/index.js +10 -0
  54. package/es/bpmn-elements/presets/Task/index.d.ts +2 -0
  55. package/es/bpmn-elements/presets/Task/index.js +130 -0
  56. package/es/bpmn-elements/presets/Task/subProcess.d.ts +5 -0
  57. package/es/bpmn-elements/presets/Task/subProcess.js +186 -0
  58. package/es/bpmn-elements/presets/Task/task.d.ts +12 -0
  59. package/es/bpmn-elements/presets/Task/task.js +186 -0
  60. package/es/bpmn-elements/presets/icons.d.ts +25 -0
  61. package/es/bpmn-elements/presets/icons.js +113 -0
  62. package/es/bpmn-elements/utils.d.ts +2 -0
  63. package/es/bpmn-elements/utils.js +40 -0
  64. package/{types/bpmn → es/bpmn-elements-adapter}/constant.d.ts +20 -0
  65. package/es/bpmn-elements-adapter/constant.js +66 -0
  66. package/es/bpmn-elements-adapter/index.d.ts +103 -0
  67. package/es/bpmn-elements-adapter/index.js +1060 -0
  68. package/es/bpmn-elements-adapter/json2xml.d.ts +3 -0
  69. package/es/bpmn-elements-adapter/json2xml.js +87 -0
  70. package/es/bpmn-elements-adapter/xml2json.js +551 -0
  71. package/es/components/control/index.js +1 -1
  72. package/es/components/menu/index.js +76 -7
  73. package/es/index.d.ts +3 -1
  74. package/es/index.js +3 -1
  75. package/es/materials/group/index.js +16 -7
  76. package/es/tools/snapshot/index.js +14 -0
  77. package/lib/AutoLayout.js +1 -1
  78. package/lib/BpmnAdapter.js +1 -1
  79. package/lib/BpmnElement.js +1 -1
  80. package/lib/ContextMenu.js +1 -1
  81. package/lib/Control.js +1 -1
  82. package/lib/CurvedEdge.js +1 -1
  83. package/lib/DndPanel.js +1 -1
  84. package/lib/FlowPath.js +1 -1
  85. package/lib/Group.js +1 -1
  86. package/lib/Highlight.js +1 -1
  87. package/lib/InsertNodeInPolyline.js +1 -1
  88. package/lib/Menu.js +1 -1
  89. package/lib/MiniMap.js +1 -1
  90. package/lib/NodeResize.js +1 -1
  91. package/lib/RectLabelNode.js +1 -1
  92. package/lib/SelectionSelect.js +1 -1
  93. package/lib/Snapshot.js +1 -1
  94. package/lib/TurboAdapter.js +1 -1
  95. package/lib/lfJson2Xml.js +1 -1
  96. package/lib/lfXml2Json.js +1 -1
  97. package/package.json +3 -3
  98. package/types/NodeResize/BasicShape/Polygon.d.ts +0 -10
  99. package/types/NodeResize/BasicShape/Rect.d.ts +0 -17
  100. package/types/NodeResize/Control/Control.d.ts +0 -65
  101. package/types/NodeResize/Control/ControlGroup.d.ts +0 -13
  102. package/types/NodeResize/Control/Util.d.ts +0 -33
  103. package/types/NodeResize/Node/DiamondResize.d.ts +0 -30
  104. package/types/NodeResize/Node/EllipseResize.d.ts +0 -30
  105. package/types/NodeResize/Node/HtmlResize.d.ts +0 -30
  106. package/types/NodeResize/Node/RectResize.d.ts +0 -32
  107. package/types/NodeResize/index.d.ts +0 -11
  108. package/types/bpmn/events/EndEvent.d.ts +0 -21
  109. package/types/bpmn/events/StartEvent.d.ts +0 -17
  110. package/types/bpmn/flow/SequenceFlow.d.ts +0 -15
  111. package/types/bpmn/gateways/ExclusiveGateway.d.ts +0 -16
  112. package/types/bpmn/getBpmnId.d.ts +0 -1
  113. package/types/bpmn/index.d.ts +0 -13
  114. package/types/bpmn/tasks/ServiceTask.d.ts +0 -17
  115. package/types/bpmn/tasks/UserTask.d.ts +0 -17
  116. package/types/bpmn-adapter/bpmnIds.d.ts +0 -1
  117. package/types/bpmn-adapter/index.d.ts +0 -63
  118. package/types/bpmn-adapter/json2xml.d.ts +0 -3
  119. package/types/components/context-menu/index.d.ts +0 -34
  120. package/types/components/control/index.d.ts +0 -26
  121. package/types/components/dnd-panel/index.d.ts +0 -25
  122. package/types/components/highlight/index.d.ts +0 -21
  123. package/types/components/menu/index.d.ts +0 -50
  124. package/types/components/mini-map/index.d.ts +0 -88
  125. package/types/components/selection-select/index.d.ts +0 -42
  126. package/types/index.d.ts +0 -19
  127. package/types/insert-node-in-polyline/edge.d.ts +0 -31
  128. package/types/insert-node-in-polyline/index.d.ts +0 -28
  129. package/types/locale/en-locale/en.d.ts +0 -19
  130. package/types/locale/en-locale/index.d.ts +0 -9
  131. package/types/locale/locale.d.ts +0 -6
  132. package/types/materials/curved-edge/index.d.ts +0 -8
  133. package/types/materials/curved-edge/searchMiddleIndex.d.ts +0 -1
  134. package/types/materials/group/GroupNode.d.ts +0 -125
  135. package/types/materials/group/index.d.ts +0 -56
  136. package/types/tools/auto-layout/index.d.ts +0 -40
  137. package/types/tools/flow-path/index.d.ts +0 -47
  138. package/types/tools/snapshot/index.d.ts +0 -25
  139. package/types/turbo-adapter/index.d.ts +0 -21
  140. package/types/type/index.d.ts +0 -6
  141. /package/{types/bpmn-adapter → es/bpmn-elements-adapter}/xml2json.d.ts +0 -0
@@ -128,7 +128,7 @@ var Menu = /** @class */ (function () {
128
128
  }, true);
129
129
  // 通过事件控制菜单的显示和隐藏
130
130
  this.lf.on('node:contextmenu', function (_a) {
131
- var data = _a.data, position = _a.position;
131
+ var data = _a.data, position = _a.position, e = _a.e;
132
132
  var _b = position.domOverlayPosition, x = _b.x, y = _b.y;
133
133
  var id = data.id;
134
134
  var model = _this.lf.graphModel.getNodeModelById(id);
@@ -145,10 +145,15 @@ var Menu = /** @class */ (function () {
145
145
  menuList = _this.menuTypeMap.get(DefaultNodeMenuKey);
146
146
  }
147
147
  _this.__currentData = data;
148
- _this.showMenu(x, y, menuList);
148
+ _this.showMenu(x, y, menuList, {
149
+ width: model.width,
150
+ height: model.height,
151
+ clientX: e.clientX,
152
+ clientY: e.clientY,
153
+ });
149
154
  });
150
155
  this.lf.on('edge:contextmenu', function (_a) {
151
- var data = _a.data, position = _a.position;
156
+ var data = _a.data, position = _a.position, e = _a.e;
152
157
  var _b = position.domOverlayPosition, x = _b.x, y = _b.y;
153
158
  var id = data.id;
154
159
  var model = _this.lf.graphModel.getEdgeModelById(id);
@@ -165,7 +170,12 @@ var Menu = /** @class */ (function () {
165
170
  menuList = _this.menuTypeMap.get(DefaultEdgeMenuKey);
166
171
  }
167
172
  _this.__currentData = data;
168
- _this.showMenu(x, y, menuList);
173
+ _this.showMenu(x, y, menuList, {
174
+ width: model.width,
175
+ height: model.height,
176
+ clientX: e.clientX,
177
+ clientY: e.clientY,
178
+ });
169
179
  });
170
180
  this.lf.on('blank:contextmenu', function (_a) {
171
181
  var position = _a.position;
@@ -195,7 +205,7 @@ var Menu = /** @class */ (function () {
195
205
  (_a = this === null || this === void 0 ? void 0 : this.__container) === null || _a === void 0 ? void 0 : _a.removeChild(this.__menuDOM);
196
206
  this.__menuDOM = null;
197
207
  };
198
- Menu.prototype.showMenu = function (x, y, menuList) {
208
+ Menu.prototype.showMenu = function (x, y, menuList, options) {
199
209
  if (!menuList || !menuList.length)
200
210
  return;
201
211
  var menu = this.__menuDOM;
@@ -206,8 +216,67 @@ var Menu = /** @class */ (function () {
206
216
  if (!menu.children.length)
207
217
  return;
208
218
  menu.style.display = 'block';
209
- menu.style.top = y + "px";
210
- menu.style.left = x + "px";
219
+ if (!options) {
220
+ menu.style.top = y + "px";
221
+ menu.style.left = x + "px";
222
+ return;
223
+ }
224
+ // https://github.com/didi/LogicFlow/issues/1019
225
+ // 根据边界判断菜单的left 和 top
226
+ var width = options.width, height = options.height, clientX = options.clientX, clientY = options.clientY;
227
+ var graphModel = this.lf.graphModel;
228
+ var menuWidth = menu.offsetWidth;
229
+ var menuIsRightShow = true;
230
+ // ======先进行可视屏幕范围的判断=======
231
+ // 浏览器窗口可视区域兼容性写法
232
+ // eslint-disable-next-line max-len
233
+ var windowMaxX = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
234
+ var rightDistance = windowMaxX - clientX;
235
+ // ======先进行可视屏幕范围的判断=======
236
+ // ========再进行画布范围的判断========
237
+ var graphRect = graphModel.rootEl.getBoundingClientRect();
238
+ var graphMaxX = graphRect.left + graphRect.width;
239
+ if (graphMaxX < windowMaxX) {
240
+ // 画布右边小于可视屏幕范围的最右边,取画布右边作为极限值,计算出当前触摸点距离右边极限值的距离
241
+ rightDistance = graphMaxX - clientX;
242
+ }
243
+ // ========再进行画布范围的判断========
244
+ // 根据当前触摸点距离右边的距离 跟 menuWidth进行比较
245
+ if (rightDistance < menuWidth) {
246
+ // 空间不足够,显示在左边
247
+ menuIsRightShow = false;
248
+ }
249
+ if (menuIsRightShow) {
250
+ menu.style.left = x + "px";
251
+ }
252
+ else {
253
+ menu.style.left = (x - width) + "px";
254
+ }
255
+ var menuHeight = menu.offsetHeight;
256
+ var menuIsBottomShow = true;
257
+ // ======先进行可视屏幕范围的判断=======
258
+ // 浏览器窗口可视区域兼容性写法
259
+ // eslint-disable-next-line max-len
260
+ var windowMaxY = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
261
+ var bottomDistance = windowMaxY - clientY;
262
+ // ======先进行可视屏幕范围的判断=======
263
+ // ========再进行画布范围的判断========
264
+ var graphMaxY = graphRect.top + graphRect.height;
265
+ if (graphMaxY < windowMaxY) {
266
+ // 画布底部小于可视屏幕范围的最底边,取画布底部作为极限值,计算出当前触摸点距离底部极限值的距离
267
+ bottomDistance = graphMaxY - clientY;
268
+ }
269
+ // ========再进行画布范围的判断========
270
+ if (bottomDistance < menuHeight) {
271
+ // 如果下边距离太小,无法显示menu,则向上显示
272
+ menuIsBottomShow = false;
273
+ }
274
+ if (menuIsBottomShow) {
275
+ menu.style.top = y + "px";
276
+ }
277
+ else {
278
+ menu.style.top = (y - height) + "px";
279
+ }
211
280
  };
212
281
  /**
213
282
  * 设置指定类型元素的菜单
package/cjs/index.js CHANGED
@@ -11,9 +11,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./bpmn"), exports);
14
+ __exportStar(require("./bpmn-adapter"), exports);
15
+ __exportStar(require("./bpmn-elements"), exports);
16
+ __exportStar(require("./bpmn-elements-adapter"), exports);
14
17
  // export * from './~mindmap';
15
18
  __exportStar(require("./tools/snapshot"), exports);
16
- __exportStar(require("./bpmn-adapter"), exports);
17
19
  __exportStar(require("./turbo-adapter"), exports);
18
20
  __exportStar(require("./insert-node-in-polyline"), exports);
19
21
  __exportStar(require("./components/control"), exports);
@@ -37,6 +37,22 @@ var Group = /** @class */ (function () {
37
37
  var nodeModel = _this.lf.getNodeModelById(data.id);
38
38
  var bounds = nodeModel.getBounds();
39
39
  var group = _this.getGroup(bounds, data);
40
+ // https://github.com/didi/LogicFlow/issues/1261
41
+ // 当使用SelectionSelect框选后触发lf.addNode(Group)
42
+ // 会触发appendNodeToGroup()的执行
43
+ // 由于this.getGroup()会判断node.id !== nodeData.id
44
+ // 因此当addNode是Group类型时,this.getGroup()会一直返回空
45
+ // 导致了下面这段代码无法执行,也就是无法将当前添加的Group添加到this.nodeGroupMap中
46
+ // 这导致了折叠分组时触发的foldEdge()无法正确通过getNodeGroup()拿到正确的groupId
47
+ // 从而导致折叠分组时一直都会创建一个虚拟边
48
+ // 而初始化分组时由于正确设置了nodeGroupMap的数据,因此不会产生虚拟边的错误情况
49
+ if (nodeModel.isGroup) {
50
+ // 如果这个节点是分组,那么将其子节点也记录下来
51
+ data.children.forEach(function (nodeId) {
52
+ _this.nodeGroupMap.set(nodeId, data.id);
53
+ });
54
+ _this.nodeSelected({ data: data, isSelected: false, isMultiple: false });
55
+ }
40
56
  if (!group)
41
57
  return;
42
58
  var isAllowAppendIn = group.isAllowAppendIn(data);
@@ -50,13 +66,6 @@ var Group = /** @class */ (function () {
50
66
  group.addChild(data.id);
51
67
  _this.nodeGroupMap.set(data.id, group.id);
52
68
  group.setAllowAppendChild(false);
53
- // 如果这个节点是分组,那么将其子节点也记录下来
54
- if (nodeModel.isGroup) {
55
- data.children.forEach(function (nodeId) {
56
- _this.nodeGroupMap.set(nodeId, data.id);
57
- });
58
- _this.nodeSelected({ data: data, isSelected: false, isMultiple: false });
59
- }
60
69
  };
61
70
  this.deleteGroupChild = function (_a) {
62
71
  var data = _a.data;
@@ -137,6 +137,20 @@ var Snapshot = /** @class */ (function () {
137
137
  }
138
138
  }
139
139
  var dpr = window.devicePixelRatio || 1;
140
+ if (dpr < 1) {
141
+ // https://github.com/didi/LogicFlow/issues/1222
142
+ // canvas.width = bboxWidth * dpr配合ctx.scale(dpr, dpr)是为了解决绘制模糊
143
+ // 比如dpr=2,先让canvas.width放大到等同于屏幕的物理像素宽高,然后自适应缩放适配canvas.style.width
144
+ // 由于所有元素都缩放了一半,因此需要ctx.scale(dpr, dpr)放大2倍整体绘制的内容
145
+ // 当用户缩放浏览器时,window.devicePixelRatio会随着变小
146
+ // 当window.devicePixelRatio变小到一定程度,会导致canvas.width<canvas.style.width
147
+ // 由于导出图片的svg的大小是canvas.style.width+canvas.style.height
148
+ // 因此会导致导出的svg图片无法完整绘制到canvas(因为canvas.width小于svg的宽)
149
+ // 从而导致canvas导出图片是缺失的svg
150
+ // 而dpr>=1就能保证canvas.width>=canvas.style.width
151
+ // 当dpr小于1的时候,我们强制转化为1,并不会产生绘制模糊等问题
152
+ dpr = 1;
153
+ }
140
154
  var canvas = document.createElement('canvas');
141
155
  /*
142
156
  为了计算真实宽高需要取图的真实dom
@@ -36,6 +36,7 @@ declare class Control extends Component<IProps> {
36
36
  deltaX: any;
37
37
  deltaY: any;
38
38
  };
39
+ updateEdgePointByAnchors: () => void;
39
40
  updateRect: ({ deltaX, deltaY }: {
40
41
  deltaX: any;
41
42
  deltaY: any;
@@ -41,7 +41,7 @@ var __read = (this && this.__read) || function (o, n) {
41
41
  import { h, Component } from 'preact';
42
42
  import { LogicFlowUtil } from '@logicflow/core';
43
43
  import Rect from '../BasicShape/Rect';
44
- import { getDiamondResizeEdgePoint, getEllipseResizeEdgePoint, getRectResizeEdgePoint, ModelType } from './Util';
44
+ import { ModelType } from './Util';
45
45
  var StepDrag = LogicFlowUtil.StepDrag;
46
46
  var Control = /** @class */ (function (_super) {
47
47
  __extends(Control, _super);
@@ -137,6 +137,35 @@ var Control = /** @class */ (function (_super) {
137
137
  }
138
138
  return resize;
139
139
  };
140
+ _this.updateEdgePointByAnchors = function () {
141
+ // https://github.com/didi/LogicFlow/issues/807
142
+ // https://github.com/didi/LogicFlow/issues/875
143
+ // 之前的做法,比如Rect是使用getRectResizeEdgePoint()计算边的point缩放后的位置
144
+ // getRectResizeEdgePoint()考虑了瞄点在四条边以及在4个圆角的情况
145
+ // 使用的是一种等比例缩放的模式,比如:
146
+ // const pct = (y - beforeNode.y) / (beforeNode.height / 2 - radius)
147
+ // afterPoint.y = afterNode.y + (afterNode.height / 2 - radius) * pct
148
+ // 但是用户自定义的getDefaultAnchor()不一定是按照比例编写的
149
+ // 它可能是 x: x + 20:每次缩放都会保持在x右边20的位置,因此用户自定义瞄点时,然后产生无法跟随的问题
150
+ // 现在的做法是:直接获取用户自定义瞄点的位置,然后用这个位置作为边的新的起点,而不是自己进行计算
151
+ var _a = _this.nodeModel, id = _a.id, anchors = _a.anchors;
152
+ var edges = _this.getNodeEdges(id);
153
+ // 更新边
154
+ edges.sourceEdges.forEach(function (item) {
155
+ var anchorItem = anchors.find(function (anchor) { return anchor.id === item.sourceAnchorId; });
156
+ item.updateStartPoint({
157
+ x: anchorItem.x,
158
+ y: anchorItem.y,
159
+ });
160
+ });
161
+ edges.targetEdges.forEach(function (item) {
162
+ var anchorItem = anchors.find(function (anchor) { return anchor.id === item.targetAnchorId; });
163
+ item.updateEndPoint({
164
+ x: anchorItem.x,
165
+ y: anchorItem.y,
166
+ });
167
+ });
168
+ };
140
169
  // 矩形更新
141
170
  _this.updateRect = function (_a) {
142
171
  var deltaX = _a.deltaX, deltaY = _a.deltaY;
@@ -187,23 +216,8 @@ var Control = /** @class */ (function (_super) {
187
216
  height: _this.nodeModel.height,
188
217
  radius: radius,
189
218
  };
190
- var params = {
191
- point: '',
192
- beforeNode: beforeNode,
193
- afterNode: afterNode,
194
- };
195
219
  // 更新边
196
- var afterPoint;
197
- edges.sourceEdges.forEach(function (item) {
198
- params.point = item.startPoint;
199
- afterPoint = getRectResizeEdgePoint(params);
200
- item.updateStartPoint(afterPoint);
201
- });
202
- edges.targetEdges.forEach(function (item) {
203
- params.point = item.endPoint;
204
- afterPoint = getRectResizeEdgePoint(params);
205
- item.updateEndPoint(afterPoint);
206
- });
220
+ _this.updateEdgePointByAnchors();
207
221
  _this.eventEmit({ beforeNode: beforeNode, afterNode: afterNode });
208
222
  };
209
223
  // 椭圆更新
@@ -252,23 +266,8 @@ var Control = /** @class */ (function (_super) {
252
266
  x: _this.nodeModel.x,
253
267
  y: _this.nodeModel.y,
254
268
  };
255
- var params = {
256
- point: {},
257
- beforeNode: beforeNode,
258
- afterNode: afterNode,
259
- };
260
269
  // 更新边
261
- var afterPoint;
262
- edges.sourceEdges.forEach(function (item) {
263
- params.point = item.startPoint;
264
- afterPoint = getEllipseResizeEdgePoint(params);
265
- item.updateStartPoint(afterPoint);
266
- });
267
- edges.targetEdges.forEach(function (item) {
268
- params.point = item.endPoint;
269
- afterPoint = getEllipseResizeEdgePoint(params);
270
- item.updateEndPoint(afterPoint);
271
- });
270
+ _this.updateEdgePointByAnchors();
272
271
  _this.eventEmit({ beforeNode: __assign(__assign({}, beforeNode), { rx: rx, ry: ry }), afterNode: afterNode });
273
272
  };
274
273
  // 菱形更新
@@ -316,24 +315,8 @@ var Control = /** @class */ (function (_super) {
316
315
  x: _this.nodeModel.x,
317
316
  y: _this.nodeModel.y,
318
317
  };
319
- var params = {
320
- point: {},
321
- beforeNode: beforeNode,
322
- afterNode: afterNode,
323
- };
324
318
  // 更新边
325
- var afterPoint;
326
- var edges = _this.getNodeEdges(id);
327
- edges.sourceEdges.forEach(function (item) {
328
- params.point = item.startPoint;
329
- afterPoint = getDiamondResizeEdgePoint(params);
330
- item.updateStartPoint(afterPoint);
331
- });
332
- edges.targetEdges.forEach(function (item) {
333
- params.point = item.endPoint;
334
- afterPoint = getDiamondResizeEdgePoint(params);
335
- item.updateEndPoint(afterPoint);
336
- });
319
+ _this.updateEdgePointByAnchors();
337
320
  _this.eventEmit({ beforeNode: beforeNode, afterNode: afterNode });
338
321
  };
339
322
  _this.eventEmit = function (_a) {
@@ -365,6 +348,9 @@ var Control = /** @class */ (function (_super) {
365
348
  * 由于将拖拽放大缩小改成丝滑模式,这个时候需要在拖拽结束的时候,将节点的位置更新到grid上.
366
349
  */
367
350
  _this.onDragEnd = function () {
351
+ // 先触发onDragging()->更新边->再触发用户自定义的getDefaultAnchor(),所以onDragging()拿到的anchors是滞后的
352
+ // 为了正确设置最终的位置,应该在拖拽结束的时候,再设置一次边的Point位置,此时拿到的anchors是最新的
353
+ _this.updateEdgePointByAnchors();
368
354
  var _a = _this.graphModel.gridSize, gridSize = _a === void 0 ? 1 : _a;
369
355
  var x = gridSize * Math.round(_this.nodeModel.x / gridSize);
370
356
  var y = gridSize * Math.round(_this.nodeModel.y / gridSize);
@@ -1,5 +1,28 @@
1
- import Ids from 'ids';
2
- var ids = new Ids([32, 32, 1]);
1
+ /* eslint-disable no-bitwise */
2
+ var IDS = /** @class */ (function () {
3
+ function IDS() {
4
+ globalThis._ids = this;
5
+ this._ids = new Set();
6
+ }
7
+ IDS.prototype.generateId = function () {
8
+ var id = 'xxxxxxxx'.replace(/[x]/g, function (c) {
9
+ var r = (Math.random() * 16) | 0;
10
+ var v = c === 'x' ? r : (r & 0x3) | 0x8;
11
+ return v.toString(16);
12
+ });
13
+ return id;
14
+ };
15
+ IDS.prototype.next = function () {
16
+ var id = this.generateId();
17
+ while (this._ids.has(id)) {
18
+ id = this.generateId();
19
+ }
20
+ this._ids.add(id);
21
+ return id;
22
+ };
23
+ return IDS;
24
+ }());
25
+ var ids = (globalThis === null || globalThis === void 0 ? void 0 : globalThis._ids) || new IDS();
3
26
  export function getBpmnId() {
4
27
  return ids.next();
5
28
  }
@@ -0,0 +1,16 @@
1
+ export declare function useDefinition(definition: any): () => any[];
2
+ export declare class BPMNElements {
3
+ static pluginName: string;
4
+ constructor({ lf }: any);
5
+ }
6
+ export * from './presets/Event/EndEventFactory';
7
+ export * from './presets/Event/IntermediateCatchEvent';
8
+ export * from './presets/Event/StartEventFactory';
9
+ export * from './presets/Event/boundaryEventFactory';
10
+ export * from './presets/Event/IntermediateThrowEvent';
11
+ export * from './presets/Flow/sequenceFlow';
12
+ export * from './presets/Task/task';
13
+ export * from './presets/Task/subProcess';
14
+ export * from './presets/Gateway/gateway';
15
+ export * as icons from './presets/icons';
16
+ export * as bpmnUtils from './utils';
@@ -0,0 +1,88 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ /* eslint-disable @typescript-eslint/naming-convention */
18
+ /* eslint-disable react-hooks/rules-of-hooks */
19
+ import { registerEventNodes } from './presets/Event';
20
+ import { registerGatewayNodes } from './presets/Gateway';
21
+ import { registerTaskNodes } from './presets/Task';
22
+ // import { registerPoolNodes } from './presets/Pool';
23
+ import { registerFlows } from './presets/Flow';
24
+ import { timerIcon } from './presets/icons';
25
+ var definitionConfig = [
26
+ {
27
+ nodes: ['startEvent', 'intermediateCatchEvent', 'boundaryEvent'],
28
+ definition: [
29
+ {
30
+ type: 'bpmn:timerEventDefinition',
31
+ icon: timerIcon,
32
+ properties: {
33
+ definitionType: 'bpmn:timerEventDefinition',
34
+ timerValue: '',
35
+ timerType: '',
36
+ },
37
+ },
38
+ ],
39
+ },
40
+ ];
41
+ export function useDefinition(definition) {
42
+ function setDefinition(config) {
43
+ function set(nodes, definitions) {
44
+ nodes.forEach(function (name) {
45
+ if (!(definition === null || definition === void 0 ? void 0 : definition[name])) {
46
+ definition[name] = new Map();
47
+ }
48
+ var map = definition === null || definition === void 0 ? void 0 : definition[name];
49
+ definitions.forEach(function (define) {
50
+ map.set(define.type, define);
51
+ });
52
+ });
53
+ return definition;
54
+ }
55
+ config.forEach(function (define) {
56
+ set(define.nodes, define.definition);
57
+ });
58
+ }
59
+ return function () { return [definition, setDefinition]; };
60
+ }
61
+ var BPMNElements = /** @class */ (function () {
62
+ function BPMNElements(_a) {
63
+ var lf = _a.lf;
64
+ lf.definition = {};
65
+ lf.useDefinition = useDefinition(lf.definition);
66
+ var _b = __read(lf.useDefinition(), 2), _definition = _b[0], setDefinition = _b[1];
67
+ setDefinition(definitionConfig);
68
+ registerEventNodes(lf);
69
+ registerGatewayNodes(lf);
70
+ registerFlows(lf);
71
+ registerTaskNodes(lf);
72
+ lf.setDefaultEdgeType('bpmn:sequenceFlow');
73
+ }
74
+ BPMNElements.pluginName = 'BpmnElementsPlugin';
75
+ return BPMNElements;
76
+ }());
77
+ export { BPMNElements };
78
+ export * from './presets/Event/EndEventFactory';
79
+ export * from './presets/Event/IntermediateCatchEvent';
80
+ export * from './presets/Event/StartEventFactory';
81
+ export * from './presets/Event/boundaryEventFactory';
82
+ export * from './presets/Event/IntermediateThrowEvent';
83
+ export * from './presets/Flow/sequenceFlow';
84
+ export * from './presets/Task/task';
85
+ export * from './presets/Task/subProcess';
86
+ export * from './presets/Gateway/gateway';
87
+ export * as icons from './presets/icons';
88
+ export * as bpmnUtils from './utils';
@@ -0,0 +1,5 @@
1
+ export declare function EndEventFactory(lf: any): {
2
+ type: string;
3
+ model: any;
4
+ view: any;
5
+ };
@@ -0,0 +1,130 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ var __assign = (this && this.__assign) || function () {
15
+ __assign = Object.assign || function(t) {
16
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
17
+ s = arguments[i];
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19
+ t[p] = s[p];
20
+ }
21
+ return t;
22
+ };
23
+ return __assign.apply(this, arguments);
24
+ };
25
+ var __read = (this && this.__read) || function (o, n) {
26
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
27
+ if (!m) return o;
28
+ var i = m.call(o), r, ar = [], e;
29
+ try {
30
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
31
+ }
32
+ catch (error) { e = { error: error }; }
33
+ finally {
34
+ try {
35
+ if (r && !r.done && (m = i["return"])) m.call(i);
36
+ }
37
+ finally { if (e) throw e.error; }
38
+ }
39
+ return ar;
40
+ };
41
+ var __spread = (this && this.__spread) || function () {
42
+ for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
43
+ return ar;
44
+ };
45
+ /* eslint-disable @typescript-eslint/naming-convention */
46
+ import { CircleNode, CircleNodeModel, h, } from '@logicflow/core';
47
+ import { genBpmnId, groupRule } from '../../utils';
48
+ export function EndEventFactory(lf) {
49
+ var _a = __read(lf.useDefinition(), 1), definition = _a[0];
50
+ var view = /** @class */ (function (_super) {
51
+ __extends(view, _super);
52
+ function view() {
53
+ return _super !== null && _super.apply(this, arguments) || this;
54
+ }
55
+ view.prototype.getAnchorStyle = function () {
56
+ return {
57
+ visibility: 'hidden',
58
+ };
59
+ };
60
+ view.prototype.getShape = function () {
61
+ var _a;
62
+ var model = this.props.model;
63
+ var style = model.getNodeStyle();
64
+ var x = model.x, y = model.y, r = model.r, width = model.width, height = model.height, properties = model.properties;
65
+ var outCircle = _super.prototype.getShape.call(this);
66
+ var definitionType = properties.definitionType;
67
+ var icon = (((_a = definition.endEvent) === null || _a === void 0 ? void 0 : _a.get(definitionType)) || {}).icon;
68
+ var i = Array.isArray(icon)
69
+ ? h.apply(void 0, __spread(['g', {
70
+ transform: "matrix(1 0 0 1 " + (x - width / 2) + " " + (y - height / 2) + ")",
71
+ }], icon)) : h('path', {
72
+ transform: "matrix(1 0 0 1 " + (x - width / 2) + " " + (y - height / 2) + ")",
73
+ d: icon,
74
+ style: 'fill: black; stroke-linecap: round; stroke-linejoin: round; stroke: white; stroke-width: 1px;',
75
+ });
76
+ return h('g', {}, outCircle, h('circle', __assign(__assign({}, style), { strokeWidth: 2, cx: x, cy: y, r: r - 2 })), i);
77
+ };
78
+ return view;
79
+ }(CircleNode));
80
+ var model = /** @class */ (function (_super) {
81
+ __extends(model, _super);
82
+ function model(data, graphModel) {
83
+ var _a, _b, _c;
84
+ var _this = this;
85
+ if (!data.id) {
86
+ data.id = "Event_" + genBpmnId();
87
+ }
88
+ if (!data.text) {
89
+ data.text = '';
90
+ }
91
+ if (data.text && typeof data.text === 'string') {
92
+ data.text = {
93
+ value: data.text,
94
+ x: data.x,
95
+ y: data.y + 40,
96
+ };
97
+ }
98
+ var _d = (((_a = definition.endEvent) === null || _a === void 0 ? void 0 : _a.get((_b = data.properties) === null || _b === void 0 ? void 0 : _b.definitionType)) || {}).properties, properties = _d === void 0 ? {} : _d;
99
+ data.properties = __assign(__assign({}, properties), data.properties);
100
+ ((_c = data.properties) === null || _c === void 0 ? void 0 : _c.definitionType) && (data.properties.definitionId = "Definition_" + genBpmnId());
101
+ _this = _super.call(this, data, graphModel) || this;
102
+ groupRule.call(_this);
103
+ return _this;
104
+ }
105
+ model.prototype.setAttributes = function () {
106
+ this.r = 18;
107
+ };
108
+ model.prototype.getConnectedSourceRules = function () {
109
+ var _this = this;
110
+ var rules = _super.prototype.getConnectedSourceRules.call(this);
111
+ var notAsSource = {
112
+ message: '结束节点不能作为边的起点',
113
+ validate: function (source, _target) {
114
+ if (source === _this) {
115
+ return false;
116
+ }
117
+ return true;
118
+ },
119
+ };
120
+ rules.push(notAsSource);
121
+ return rules;
122
+ };
123
+ return model;
124
+ }(CircleNodeModel));
125
+ return {
126
+ type: 'bpmn:endEvent',
127
+ view: view,
128
+ model: model,
129
+ };
130
+ }
@@ -0,0 +1,5 @@
1
+ export declare function IntermediateCatchEventFactory(lf: any): {
2
+ type: string;
3
+ model: any;
4
+ view: any;
5
+ };