@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.
- package/CHANGELOG.md +1727 -0
- package/cjs/NodeResize/Control/Control.js +35 -49
- package/cjs/bpmn/getBpmnId.js +25 -2
- package/cjs/bpmn-elements/index.js +102 -0
- package/cjs/bpmn-elements/presets/Event/EndEventFactory.js +134 -0
- package/cjs/bpmn-elements/presets/Event/IntermediateCatchEvent.js +118 -0
- package/cjs/bpmn-elements/presets/Event/IntermediateThrowEvent.js +119 -0
- package/cjs/bpmn-elements/presets/Event/StartEventFactory.js +133 -0
- package/cjs/bpmn-elements/presets/Event/boundaryEventFactory.js +125 -0
- package/cjs/bpmn-elements/presets/Event/index.js +16 -0
- package/cjs/bpmn-elements/presets/Flow/index.js +9 -0
- package/cjs/bpmn-elements/presets/Flow/sequenceFlow.js +78 -0
- package/cjs/bpmn-elements/presets/Gateway/gateway.js +109 -0
- package/cjs/bpmn-elements/presets/Gateway/index.js +14 -0
- package/cjs/bpmn-elements/presets/Task/index.js +134 -0
- package/cjs/bpmn-elements/presets/Task/subProcess.js +190 -0
- package/cjs/bpmn-elements/presets/Task/task.js +190 -0
- package/cjs/bpmn-elements/presets/icons.js +116 -0
- package/cjs/bpmn-elements/utils.js +45 -0
- package/cjs/bpmn-elements-adapter/constant.js +69 -0
- package/cjs/bpmn-elements-adapter/index.js +1066 -0
- package/cjs/bpmn-elements-adapter/json2xml.js +91 -0
- package/cjs/bpmn-elements-adapter/xml2json.js +554 -0
- package/cjs/components/control/index.js +1 -1
- package/cjs/components/menu/index.js +76 -7
- package/cjs/index.js +3 -1
- package/cjs/materials/group/index.js +16 -7
- package/cjs/tools/snapshot/index.js +14 -0
- package/es/NodeResize/Control/Control.d.ts +1 -0
- package/es/NodeResize/Control/Control.js +36 -50
- package/es/bpmn/getBpmnId.js +25 -2
- package/es/bpmn-elements/index.d.ts +16 -0
- package/es/bpmn-elements/index.js +88 -0
- package/es/bpmn-elements/presets/Event/EndEventFactory.d.ts +5 -0
- package/es/bpmn-elements/presets/Event/EndEventFactory.js +130 -0
- package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.d.ts +5 -0
- package/es/bpmn-elements/presets/Event/IntermediateCatchEvent.js +114 -0
- package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.d.ts +5 -0
- package/es/bpmn-elements/presets/Event/IntermediateThrowEvent.js +115 -0
- package/es/bpmn-elements/presets/Event/StartEventFactory.d.ts +5 -0
- package/es/bpmn-elements/presets/Event/StartEventFactory.js +129 -0
- package/es/bpmn-elements/presets/Event/boundaryEventFactory.d.ts +5 -0
- package/es/bpmn-elements/presets/Event/boundaryEventFactory.js +121 -0
- package/es/bpmn-elements/presets/Event/index.d.ts +2 -0
- package/es/bpmn-elements/presets/Event/index.js +12 -0
- package/es/bpmn-elements/presets/Flow/index.d.ts +7 -0
- package/es/bpmn-elements/presets/Flow/index.js +5 -0
- package/es/bpmn-elements/presets/Flow/sequenceFlow.d.ts +5 -0
- package/es/bpmn-elements/presets/Flow/sequenceFlow.js +74 -0
- package/es/bpmn-elements/presets/Gateway/gateway.d.ts +17 -0
- package/es/bpmn-elements/presets/Gateway/gateway.js +105 -0
- package/es/bpmn-elements/presets/Gateway/index.d.ts +2 -0
- package/es/bpmn-elements/presets/Gateway/index.js +10 -0
- package/es/bpmn-elements/presets/Task/index.d.ts +2 -0
- package/es/bpmn-elements/presets/Task/index.js +130 -0
- package/es/bpmn-elements/presets/Task/subProcess.d.ts +5 -0
- package/es/bpmn-elements/presets/Task/subProcess.js +186 -0
- package/es/bpmn-elements/presets/Task/task.d.ts +12 -0
- package/es/bpmn-elements/presets/Task/task.js +186 -0
- package/es/bpmn-elements/presets/icons.d.ts +25 -0
- package/es/bpmn-elements/presets/icons.js +113 -0
- package/es/bpmn-elements/utils.d.ts +2 -0
- package/es/bpmn-elements/utils.js +40 -0
- package/{types/bpmn → es/bpmn-elements-adapter}/constant.d.ts +20 -0
- package/es/bpmn-elements-adapter/constant.js +66 -0
- package/es/bpmn-elements-adapter/index.d.ts +103 -0
- package/es/bpmn-elements-adapter/index.js +1060 -0
- package/es/bpmn-elements-adapter/json2xml.d.ts +3 -0
- package/es/bpmn-elements-adapter/json2xml.js +87 -0
- package/es/bpmn-elements-adapter/xml2json.js +551 -0
- package/es/components/control/index.js +1 -1
- package/es/components/menu/index.js +76 -7
- package/es/index.d.ts +3 -1
- package/es/index.js +3 -1
- package/es/materials/group/index.js +16 -7
- package/es/tools/snapshot/index.js +14 -0
- package/lib/AutoLayout.js +1 -1
- package/lib/BpmnAdapter.js +1 -1
- package/lib/BpmnElement.js +1 -1
- package/lib/ContextMenu.js +1 -1
- package/lib/Control.js +1 -1
- package/lib/CurvedEdge.js +1 -1
- package/lib/DndPanel.js +1 -1
- package/lib/FlowPath.js +1 -1
- package/lib/Group.js +1 -1
- package/lib/Highlight.js +1 -1
- package/lib/InsertNodeInPolyline.js +1 -1
- package/lib/Menu.js +1 -1
- package/lib/MiniMap.js +1 -1
- package/lib/NodeResize.js +1 -1
- package/lib/RectLabelNode.js +1 -1
- package/lib/SelectionSelect.js +1 -1
- package/lib/Snapshot.js +1 -1
- package/lib/TurboAdapter.js +1 -1
- package/lib/lfJson2Xml.js +1 -1
- package/lib/lfXml2Json.js +1 -1
- package/package.json +3 -3
- package/types/NodeResize/BasicShape/Polygon.d.ts +0 -10
- package/types/NodeResize/BasicShape/Rect.d.ts +0 -17
- package/types/NodeResize/Control/Control.d.ts +0 -65
- package/types/NodeResize/Control/ControlGroup.d.ts +0 -13
- package/types/NodeResize/Control/Util.d.ts +0 -33
- package/types/NodeResize/Node/DiamondResize.d.ts +0 -30
- package/types/NodeResize/Node/EllipseResize.d.ts +0 -30
- package/types/NodeResize/Node/HtmlResize.d.ts +0 -30
- package/types/NodeResize/Node/RectResize.d.ts +0 -32
- package/types/NodeResize/index.d.ts +0 -11
- package/types/bpmn/events/EndEvent.d.ts +0 -21
- package/types/bpmn/events/StartEvent.d.ts +0 -17
- package/types/bpmn/flow/SequenceFlow.d.ts +0 -15
- package/types/bpmn/gateways/ExclusiveGateway.d.ts +0 -16
- package/types/bpmn/getBpmnId.d.ts +0 -1
- package/types/bpmn/index.d.ts +0 -13
- package/types/bpmn/tasks/ServiceTask.d.ts +0 -17
- package/types/bpmn/tasks/UserTask.d.ts +0 -17
- package/types/bpmn-adapter/bpmnIds.d.ts +0 -1
- package/types/bpmn-adapter/index.d.ts +0 -63
- package/types/bpmn-adapter/json2xml.d.ts +0 -3
- package/types/components/context-menu/index.d.ts +0 -34
- package/types/components/control/index.d.ts +0 -26
- package/types/components/dnd-panel/index.d.ts +0 -25
- package/types/components/highlight/index.d.ts +0 -21
- package/types/components/menu/index.d.ts +0 -50
- package/types/components/mini-map/index.d.ts +0 -88
- package/types/components/selection-select/index.d.ts +0 -42
- package/types/index.d.ts +0 -19
- package/types/insert-node-in-polyline/edge.d.ts +0 -31
- package/types/insert-node-in-polyline/index.d.ts +0 -28
- package/types/locale/en-locale/en.d.ts +0 -19
- package/types/locale/en-locale/index.d.ts +0 -9
- package/types/locale/locale.d.ts +0 -6
- package/types/materials/curved-edge/index.d.ts +0 -8
- package/types/materials/curved-edge/searchMiddleIndex.d.ts +0 -1
- package/types/materials/group/GroupNode.d.ts +0 -125
- package/types/materials/group/index.d.ts +0 -56
- package/types/tools/auto-layout/index.d.ts +0 -40
- package/types/tools/flow-path/index.d.ts +0 -47
- package/types/tools/snapshot/index.d.ts +0 -25
- package/types/turbo-adapter/index.d.ts +0 -21
- package/types/type/index.d.ts +0 -6
- /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
|
-
|
|
210
|
-
|
|
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
|
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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);
|
package/es/bpmn/getBpmnId.js
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
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,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
|
+
}
|