@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
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
26
|
+
import { PolygonNode, PolygonNodeModel, h, } from '@logicflow/core';
|
|
27
|
+
import { genBpmnId, groupRule } from '../../utils';
|
|
28
|
+
var gateway = {
|
|
29
|
+
exclusive: 0,
|
|
30
|
+
inclusive: 1,
|
|
31
|
+
parallel: 2,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* index 0 排他网关
|
|
35
|
+
* index 1 包容网关
|
|
36
|
+
* index 2 并行网关
|
|
37
|
+
*/
|
|
38
|
+
export var gatewayComposable = [
|
|
39
|
+
[1, 1, 0],
|
|
40
|
+
[0, 0, 1],
|
|
41
|
+
[0, 1, 1],
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* @param type 网关节点的type, 对应其XML定义中的节点名,如<bpmn:inclusiveGateway /> 其type为bpmn:inclusiveGateway
|
|
45
|
+
* @param icon 网关节点左上角的图标,可以是svg path,也可以是h函数生成的svg
|
|
46
|
+
* @param props (可选) 网关节点的属性
|
|
47
|
+
* @returns { type: string, model: any, view: any }
|
|
48
|
+
*/
|
|
49
|
+
export function GatewayNodeFactory(type, icon, props) {
|
|
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.getShape = function () {
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
var model = this.props.model;
|
|
58
|
+
var x = model.x, y = model.y, width = model.width, height = model.height, points = model.points;
|
|
59
|
+
var style = model.getNodeStyle();
|
|
60
|
+
return h('g', {
|
|
61
|
+
transform: "matrix(1 0 0 1 " + (x - width / 2) + " " + (y - height / 2) + ")",
|
|
62
|
+
}, h('polygon', __assign(__assign({}, style), { x: x,
|
|
63
|
+
y: y,
|
|
64
|
+
points: points })), typeof icon === 'string'
|
|
65
|
+
? h('path', __assign(__assign({ d: icon }, style), { fill: 'rgb(34, 36, 42)', strokeWidth: 1 }))
|
|
66
|
+
: icon);
|
|
67
|
+
};
|
|
68
|
+
return view;
|
|
69
|
+
}(PolygonNode));
|
|
70
|
+
var model = /** @class */ (function (_super) {
|
|
71
|
+
__extends(model, _super);
|
|
72
|
+
function model(data, graphModel) {
|
|
73
|
+
var _this = this;
|
|
74
|
+
if (!data.id) {
|
|
75
|
+
data.id = "Gateway_" + genBpmnId();
|
|
76
|
+
}
|
|
77
|
+
if (!data.text) {
|
|
78
|
+
data.text = '';
|
|
79
|
+
}
|
|
80
|
+
if (data.text && typeof data.text === 'string') {
|
|
81
|
+
data.text = {
|
|
82
|
+
value: data.text,
|
|
83
|
+
x: data.x,
|
|
84
|
+
y: data.y + 40,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
data.properties = __assign(__assign({}, (props || {})), data.properties);
|
|
88
|
+
_this = _super.call(this, data, graphModel) || this;
|
|
89
|
+
_this.points = [
|
|
90
|
+
[25, 0],
|
|
91
|
+
[50, 25],
|
|
92
|
+
[25, 50],
|
|
93
|
+
[0, 25],
|
|
94
|
+
];
|
|
95
|
+
groupRule.call(_this);
|
|
96
|
+
return _this;
|
|
97
|
+
}
|
|
98
|
+
return model;
|
|
99
|
+
}(PolygonNodeModel));
|
|
100
|
+
return {
|
|
101
|
+
type: type,
|
|
102
|
+
view: view,
|
|
103
|
+
model: model,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { exclusiveIcon, parallelIcon, inclusiveIcon } from '../icons';
|
|
2
|
+
import { GatewayNodeFactory } from './gateway';
|
|
3
|
+
export function registerGatewayNodes(lf) {
|
|
4
|
+
var ExclusiveGateway = GatewayNodeFactory('bpmn:exclusiveGateway', exclusiveIcon);
|
|
5
|
+
var ParallelGateway = GatewayNodeFactory('bpmn:parallelGateway', parallelIcon);
|
|
6
|
+
var InclusiveGateway = GatewayNodeFactory('bpmn:inclusiveGateway', inclusiveIcon);
|
|
7
|
+
lf.register(ExclusiveGateway);
|
|
8
|
+
lf.register(InclusiveGateway);
|
|
9
|
+
lf.register(ParallelGateway);
|
|
10
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
12
|
+
import { serviceTaskIcon, userTaskIcon } from '../icons';
|
|
13
|
+
import { TaskNodeFactory } from './task';
|
|
14
|
+
import { SubProcessFactory } from './subProcess';
|
|
15
|
+
function boundaryEvent(lf) {
|
|
16
|
+
lf.on('node:drag,node:dnd-drag', checkAppendBoundaryEvent);
|
|
17
|
+
lf.on('node:drop,node:dnd-add', appendBoundaryEvent);
|
|
18
|
+
lf.graphModel.addNodeMoveRules(function (model, deltaX, deltaY) {
|
|
19
|
+
if (model.isTaskNode) {
|
|
20
|
+
// 如果移动的是分组,那么分组的子节点也跟着移动。
|
|
21
|
+
var nodeIds = model.boundaryEvents;
|
|
22
|
+
lf.graphModel.moveNodes(nodeIds, deltaX, deltaY, true);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
});
|
|
27
|
+
function appendBoundaryEvent(_a) {
|
|
28
|
+
var e_1, _b;
|
|
29
|
+
var data = _a.data;
|
|
30
|
+
var type = data.type, id = data.id;
|
|
31
|
+
if (type !== 'bpmn:boundaryEvent') {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
var nodes = lf.graphModel.nodes;
|
|
35
|
+
try {
|
|
36
|
+
for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
|
|
37
|
+
var node = nodes_1_1.value;
|
|
38
|
+
if (node.isTaskNode) {
|
|
39
|
+
var nodeId = null;
|
|
40
|
+
if ((nodeId = isBoundaryEventCloseToTask(node, data)) !== null) {
|
|
41
|
+
var eventModel = lf.graphModel.getNodeModelById(id);
|
|
42
|
+
var nodeModel = lf.graphModel.getNodeModelById(nodeId);
|
|
43
|
+
var attachedToRef = eventModel.properties.attachedToRef;
|
|
44
|
+
if (attachedToRef && attachedToRef !== nodeId) {
|
|
45
|
+
lf.graphModel.getNodeModelById(attachedToRef).deleteBoundaryEvent(id);
|
|
46
|
+
}
|
|
47
|
+
nodeModel.addBoundaryEvent(id);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
54
|
+
finally {
|
|
55
|
+
try {
|
|
56
|
+
if (nodes_1_1 && !nodes_1_1.done && (_b = nodes_1.return)) _b.call(nodes_1);
|
|
57
|
+
}
|
|
58
|
+
finally { if (e_1) throw e_1.error; }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 判断此节点是否在某个节点的边界上
|
|
62
|
+
// 如果在,且这个节点model存在属性isTaskNode,则调用这个方法
|
|
63
|
+
function checkAppendBoundaryEvent(_a) {
|
|
64
|
+
var e_2, _b;
|
|
65
|
+
var data = _a.data;
|
|
66
|
+
var type = data.type;
|
|
67
|
+
if (type !== 'bpmn:boundaryEvent') {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var nodes = lf.graphModel.nodes;
|
|
71
|
+
try {
|
|
72
|
+
for (var nodes_2 = __values(nodes), nodes_2_1 = nodes_2.next(); !nodes_2_1.done; nodes_2_1 = nodes_2.next()) {
|
|
73
|
+
var node = nodes_2_1.value;
|
|
74
|
+
if (node.isTaskNode) {
|
|
75
|
+
if (isBoundaryEventCloseToTask(node, data)) {
|
|
76
|
+
// 同时只允许在一个节点的边界上
|
|
77
|
+
node.setTouching(true);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
node.setTouching(false);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
86
|
+
finally {
|
|
87
|
+
try {
|
|
88
|
+
if (nodes_2_1 && !nodes_2_1.done && (_b = nodes_2.return)) _b.call(nodes_2);
|
|
89
|
+
}
|
|
90
|
+
finally { if (e_2) throw e_2.error; }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function isBoundaryEventCloseToTask(task, event) {
|
|
94
|
+
var offset = 5;
|
|
95
|
+
var tx = task.x, ty = task.y, twidth = task.width, theight = task.height, id = task.id;
|
|
96
|
+
var bbox = {
|
|
97
|
+
minX: tx - twidth / 2,
|
|
98
|
+
maxX: tx + twidth / 2,
|
|
99
|
+
minY: ty - theight / 2,
|
|
100
|
+
maxY: ty + theight / 2,
|
|
101
|
+
};
|
|
102
|
+
var bx = event.x, by = event.y;
|
|
103
|
+
var outerBBox = {
|
|
104
|
+
minX: bbox.minX - offset,
|
|
105
|
+
maxX: bbox.maxX + offset,
|
|
106
|
+
minY: bbox.minY - offset,
|
|
107
|
+
maxY: bbox.maxY + offset,
|
|
108
|
+
};
|
|
109
|
+
var innerBBox = {
|
|
110
|
+
minX: bbox.minX + offset,
|
|
111
|
+
maxX: bbox.maxX - offset,
|
|
112
|
+
minY: bbox.minY + offset,
|
|
113
|
+
maxY: bbox.maxX - offset,
|
|
114
|
+
};
|
|
115
|
+
if (bx > outerBBox.minX && bx < outerBBox.maxX && by > outerBBox.minY && by < outerBBox.maxY) {
|
|
116
|
+
if (!(bx > innerBBox.minX && bx < innerBBox.maxX && by > innerBBox.minY && by < innerBBox.maxY)) {
|
|
117
|
+
return id;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export function registerTaskNodes(lf) {
|
|
124
|
+
var ServiceTask = TaskNodeFactory('bpmn:serviceTask', serviceTaskIcon);
|
|
125
|
+
var UserTask = TaskNodeFactory('bpmn:userTask', userTaskIcon);
|
|
126
|
+
lf.register(ServiceTask);
|
|
127
|
+
lf.register(UserTask);
|
|
128
|
+
lf.register(SubProcessFactory());
|
|
129
|
+
boundaryEvent(lf);
|
|
130
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
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
|
+
/* eslint-disable no-shadow */
|
|
26
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
27
|
+
import { h } from '@logicflow/core';
|
|
28
|
+
import { GroupNode } from '../../../materials/group/index';
|
|
29
|
+
export function SubProcessFactory() {
|
|
30
|
+
var view = /** @class */ (function (_super) {
|
|
31
|
+
__extends(view, _super);
|
|
32
|
+
function view() {
|
|
33
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
34
|
+
}
|
|
35
|
+
view.prototype.getFoldIcon = function () {
|
|
36
|
+
var model = this.props.model;
|
|
37
|
+
var x = model.x, y = model.y, width = model.width, height = model.height, properties = model.properties, foldable = model.foldable;
|
|
38
|
+
var foldX = model.x - model.width / 2 + 5;
|
|
39
|
+
var foldY = model.y - model.height / 2 + 5;
|
|
40
|
+
if (!foldable)
|
|
41
|
+
return null;
|
|
42
|
+
var iconIcon = h('path', {
|
|
43
|
+
fill: 'none',
|
|
44
|
+
stroke: '#818281',
|
|
45
|
+
strokeWidth: 2,
|
|
46
|
+
'pointer-events': 'none',
|
|
47
|
+
d: properties.isFolded
|
|
48
|
+
? "M " + (foldX + 3) + "," + (foldY + 6) + " " + (foldX + 11) + "," + (foldY + 6) + " M" + (foldX + 7) + "," + (foldY + 2) + " " + (foldX + 7) + "," + (foldY + 10)
|
|
49
|
+
: "M " + (foldX + 3) + "," + (foldY + 6) + " " + (foldX + 11) + "," + (foldY + 6) + " ",
|
|
50
|
+
});
|
|
51
|
+
return h('g', {}, [
|
|
52
|
+
h('rect', {
|
|
53
|
+
height: 12,
|
|
54
|
+
width: 14,
|
|
55
|
+
rx: 2,
|
|
56
|
+
ry: 2,
|
|
57
|
+
strokeWidth: 1,
|
|
58
|
+
fill: '#F4F5F6',
|
|
59
|
+
stroke: '#CECECE',
|
|
60
|
+
cursor: 'pointer',
|
|
61
|
+
x: x - width / 2 + 5,
|
|
62
|
+
y: y - height / 2 + 5,
|
|
63
|
+
onClick: function (e) {
|
|
64
|
+
e.stopPropagation();
|
|
65
|
+
model.foldGroup(!properties.isFolded);
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
iconIcon,
|
|
69
|
+
]);
|
|
70
|
+
};
|
|
71
|
+
view.prototype.getResizeShape = function () {
|
|
72
|
+
var model = this.props.model;
|
|
73
|
+
var x = model.x, y = model.y, width = model.width, height = model.height;
|
|
74
|
+
var style = model.getNodeStyle();
|
|
75
|
+
var foldRectAttrs = __assign(__assign({}, style), { x: x - width / 2, y: y - height / 2, width: width,
|
|
76
|
+
height: height, stroke: 'black', strokeWidth: 2, strokeDasharray: '0 0' });
|
|
77
|
+
return h('g', {}, [
|
|
78
|
+
// this.getAddAbleShape(),
|
|
79
|
+
h('rect', __assign({}, foldRectAttrs)),
|
|
80
|
+
this.getFoldIcon(),
|
|
81
|
+
]);
|
|
82
|
+
};
|
|
83
|
+
return view;
|
|
84
|
+
}(GroupNode.view));
|
|
85
|
+
var model = /** @class */ (function (_super) {
|
|
86
|
+
__extends(model, _super);
|
|
87
|
+
function model() {
|
|
88
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
89
|
+
}
|
|
90
|
+
model.prototype.initNodeData = function (data) {
|
|
91
|
+
_super.prototype.initNodeData.call(this, data);
|
|
92
|
+
this.foldable = true;
|
|
93
|
+
// this.isFolded = true;
|
|
94
|
+
this.resizable = true;
|
|
95
|
+
this.width = 400;
|
|
96
|
+
this.height = 200;
|
|
97
|
+
// 根据 properties中的配置重设 宽高
|
|
98
|
+
this.resetWidthHeight();
|
|
99
|
+
this.isTaskNode = true; // 标识此节点是任务节点,可以被附件边界事件
|
|
100
|
+
this.boundaryEvents = []; // 记录自己附加的边界事件
|
|
101
|
+
};
|
|
102
|
+
// 自定义根据properties.iniProp
|
|
103
|
+
model.prototype.resetWidthHeight = function () {
|
|
104
|
+
var _a, _b;
|
|
105
|
+
var width = (_a = this.properties.iniProp) === null || _a === void 0 ? void 0 : _a.width;
|
|
106
|
+
var height = (_b = this.properties.iniProp) === null || _b === void 0 ? void 0 : _b.height;
|
|
107
|
+
width && (this.width = width);
|
|
108
|
+
height && (this.height = height);
|
|
109
|
+
};
|
|
110
|
+
model.prototype.getNodeStyle = function () {
|
|
111
|
+
var style = _super.prototype.getNodeStyle.call(this);
|
|
112
|
+
style.stroke = '#989891';
|
|
113
|
+
style.strokeWidth = 1;
|
|
114
|
+
style.strokeDasharray = '3 3';
|
|
115
|
+
if (this.isSelected) {
|
|
116
|
+
style.stroke = 'rgb(124, 15, 255)';
|
|
117
|
+
}
|
|
118
|
+
// isBoundaryEventTouchingTask属性用于标识拖动边界节点是否靠近此节点
|
|
119
|
+
// 如果靠近,则高亮提示
|
|
120
|
+
// style.fill = 'rgb(255, 230, 204)';
|
|
121
|
+
var isBoundaryEventTouchingTask = this.properties.isBoundaryEventTouchingTask;
|
|
122
|
+
if (isBoundaryEventTouchingTask) {
|
|
123
|
+
style.stroke = '#00acff';
|
|
124
|
+
style.strokeWidth = 2;
|
|
125
|
+
}
|
|
126
|
+
return style;
|
|
127
|
+
};
|
|
128
|
+
model.prototype.addChild = function (id) {
|
|
129
|
+
var model = this.graphModel.getElement(id);
|
|
130
|
+
model.setProperties({
|
|
131
|
+
parent: this.id,
|
|
132
|
+
});
|
|
133
|
+
_super.prototype.addChild.call(this, id);
|
|
134
|
+
};
|
|
135
|
+
// 隐藏锚点而不是设置锚点数为0
|
|
136
|
+
// 因为分组内部节点与外部节点相连时,
|
|
137
|
+
// 如果折叠分组,需要分组代替内部节点与外部节点相连。
|
|
138
|
+
model.prototype.getAnchorStyle = function () {
|
|
139
|
+
var style = _super.prototype.getAnchorStyle.call(this, {});
|
|
140
|
+
style.stroke = '#000';
|
|
141
|
+
style.fill = '#fff';
|
|
142
|
+
style.hover.stroke = 'transparent';
|
|
143
|
+
return style;
|
|
144
|
+
};
|
|
145
|
+
model.prototype.getOutlineStyle = function () {
|
|
146
|
+
var style = _super.prototype.getOutlineStyle.call(this);
|
|
147
|
+
style.stroke = 'transparent';
|
|
148
|
+
!style.hover && (style.hover = {});
|
|
149
|
+
style.hover.stroke = 'transparent';
|
|
150
|
+
return style;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* 提供方法给插件在判断此节点被拖动边界事件节点靠近时调用,从而触发高亮
|
|
154
|
+
*/
|
|
155
|
+
model.prototype.setTouching = function (flag) {
|
|
156
|
+
this.setProperty('isBoundaryEventTouchingTask', flag);
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* 附加后记录被附加的边界事件节点Id
|
|
160
|
+
*/
|
|
161
|
+
model.prototype.addBoundaryEvent = function (nodeId) {
|
|
162
|
+
this.setTouching(false);
|
|
163
|
+
if (this.boundaryEvents.find(function (item) { return item === nodeId; })) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
var boundaryEvent = this.graphModel.getNodeModelById(nodeId);
|
|
167
|
+
boundaryEvent === null || boundaryEvent === void 0 ? void 0 : boundaryEvent.setProperties({
|
|
168
|
+
attachedToRef: this.id,
|
|
169
|
+
});
|
|
170
|
+
this.boundaryEvents.push(nodeId);
|
|
171
|
+
return true;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* 被附加的边界事件节点被删除时,移除记录
|
|
175
|
+
*/
|
|
176
|
+
model.prototype.deleteBoundaryEvent = function (nodeId) {
|
|
177
|
+
this.boundaryEvents = this.boundaryEvents.filter(function (item) { return item !== nodeId; });
|
|
178
|
+
};
|
|
179
|
+
return model;
|
|
180
|
+
}(GroupNode.model));
|
|
181
|
+
return {
|
|
182
|
+
type: 'bpmn:subProcess',
|
|
183
|
+
view: view,
|
|
184
|
+
model: model,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const multiInstanceIcon: any;
|
|
2
|
+
/**
|
|
3
|
+
* @param type 任务节点的type, 对应其XML定义中的节点名,如<bpmn:userTask /> 其type为bpmn:userTask
|
|
4
|
+
* @param icon 任务节点左上角的图标,可以是svg path,也可以是h函数生成的svg
|
|
5
|
+
* @param props (可选) 任务节点的属性
|
|
6
|
+
* @returns { type: string, model: any, view: any }
|
|
7
|
+
*/
|
|
8
|
+
export declare function TaskNodeFactory(type: string, icon: string | any[], props?: any): {
|
|
9
|
+
type: string;
|
|
10
|
+
model: any;
|
|
11
|
+
view: any;
|
|
12
|
+
};
|
|
@@ -0,0 +1,186 @@
|
|
|
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 { RectNode, RectNodeModel, h, } from '@logicflow/core';
|
|
47
|
+
import { parallelMarker, sequentialMarker, loopMarker } from '../icons';
|
|
48
|
+
import { genBpmnId, groupRule } from '../../utils';
|
|
49
|
+
export var multiInstanceIcon = {
|
|
50
|
+
parallel: parallelMarker,
|
|
51
|
+
sequential: sequentialMarker,
|
|
52
|
+
loop: loopMarker,
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* @param type 任务节点的type, 对应其XML定义中的节点名,如<bpmn:userTask /> 其type为bpmn:userTask
|
|
56
|
+
* @param icon 任务节点左上角的图标,可以是svg path,也可以是h函数生成的svg
|
|
57
|
+
* @param props (可选) 任务节点的属性
|
|
58
|
+
* @returns { type: string, model: any, view: any }
|
|
59
|
+
*/
|
|
60
|
+
export function TaskNodeFactory(type, icon, props) {
|
|
61
|
+
var view = /** @class */ (function (_super) {
|
|
62
|
+
__extends(view, _super);
|
|
63
|
+
function view() {
|
|
64
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
65
|
+
}
|
|
66
|
+
view.prototype.getLabelShape = function () {
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
var model = this.props.model;
|
|
69
|
+
var x = model.x, y = model.y, width = model.width, height = model.height;
|
|
70
|
+
var style = model.getNodeStyle();
|
|
71
|
+
var i = Array.isArray(icon)
|
|
72
|
+
? h.apply(void 0, __spread(['g', {
|
|
73
|
+
transform: "matrix(1 0 0 1 " + (x - width / 2) + " " + (y - height / 2) + ")",
|
|
74
|
+
}], icon)) : h('path', {
|
|
75
|
+
fill: style.stroke,
|
|
76
|
+
d: icon,
|
|
77
|
+
});
|
|
78
|
+
return h('svg', {
|
|
79
|
+
x: x - width / 2 + 5,
|
|
80
|
+
y: y - height / 2 + 5,
|
|
81
|
+
width: 25,
|
|
82
|
+
height: 25,
|
|
83
|
+
viewBox: '0 0 1274 1024',
|
|
84
|
+
}, i);
|
|
85
|
+
};
|
|
86
|
+
view.prototype.getShape = function () {
|
|
87
|
+
// @ts-ignore
|
|
88
|
+
var model = this.props.model;
|
|
89
|
+
var x = model.x, y = model.y, width = model.width, height = model.height, radius = model.radius, properties = model.properties;
|
|
90
|
+
var style = model.getNodeStyle();
|
|
91
|
+
return h('g', {}, [
|
|
92
|
+
h('rect', __assign(__assign({}, style), { x: x - width / 2, y: y - height / 2, rx: radius, ry: radius, width: width,
|
|
93
|
+
height: height, opacity: 0.95 })),
|
|
94
|
+
this.getLabelShape(),
|
|
95
|
+
h('g', {
|
|
96
|
+
transform: "matrix(1 0 0 1 " + (x - width / 2) + " " + (y - height / 2) + ")",
|
|
97
|
+
}, h('path', {
|
|
98
|
+
fill: 'white',
|
|
99
|
+
strokeLinecap: 'round',
|
|
100
|
+
strokeLinejoin: 'round',
|
|
101
|
+
stroke: 'rgb(34, 36, 42)',
|
|
102
|
+
strokeWidth: '2',
|
|
103
|
+
d: multiInstanceIcon[properties.multiInstanceType] || '',
|
|
104
|
+
})),
|
|
105
|
+
]);
|
|
106
|
+
};
|
|
107
|
+
return view;
|
|
108
|
+
}(RectNode));
|
|
109
|
+
var model = /** @class */ (function (_super) {
|
|
110
|
+
__extends(model, _super);
|
|
111
|
+
function model(data, graphModel) {
|
|
112
|
+
var _a;
|
|
113
|
+
var _this = this;
|
|
114
|
+
if (!data.id) {
|
|
115
|
+
data.id = "Activity_" + genBpmnId();
|
|
116
|
+
}
|
|
117
|
+
var properties = __assign(__assign({}, (props || {})), data.properties);
|
|
118
|
+
data.properties = properties;
|
|
119
|
+
_this = _super.call(this, data, graphModel) || this;
|
|
120
|
+
(_a = properties === null || properties === void 0 ? void 0 : properties.boundaryEvents) === null || _a === void 0 ? void 0 : _a.forEach(function (id) {
|
|
121
|
+
_this.addBoundaryEvent(id);
|
|
122
|
+
});
|
|
123
|
+
_this.deleteProperty('boundaryEvents');
|
|
124
|
+
groupRule.call(_this);
|
|
125
|
+
return _this;
|
|
126
|
+
}
|
|
127
|
+
model.prototype.initNodeData = function (data) {
|
|
128
|
+
_super.prototype.initNodeData.call(this, data);
|
|
129
|
+
this.isTaskNode = true; // 标识此节点是任务节点,可以被附件边界事件
|
|
130
|
+
this.boundaryEvents = []; // 记录自己附加的边界事件
|
|
131
|
+
};
|
|
132
|
+
model.prototype.getNodeStyle = function () {
|
|
133
|
+
var style = _super.prototype.getNodeStyle.call(this);
|
|
134
|
+
// isBoundaryEventTouchingTask属性用于标识拖动边界节点是否靠近此节点
|
|
135
|
+
// 如果靠近,则高亮提示
|
|
136
|
+
// style.fill = 'rgb(255, 230, 204)';
|
|
137
|
+
var isBoundaryEventTouchingTask = this.properties.isBoundaryEventTouchingTask;
|
|
138
|
+
if (isBoundaryEventTouchingTask) {
|
|
139
|
+
style.stroke = '#00acff';
|
|
140
|
+
style.strokeWidth = 2;
|
|
141
|
+
}
|
|
142
|
+
return style;
|
|
143
|
+
};
|
|
144
|
+
model.prototype.getOutlineStyle = function () {
|
|
145
|
+
var style = _super.prototype.getOutlineStyle.call(this);
|
|
146
|
+
style.stroke = 'transparent';
|
|
147
|
+
!style.hover && (style.hover = {});
|
|
148
|
+
style.hover.stroke = 'transparent';
|
|
149
|
+
return style;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* 提供方法给插件在判断此节点被拖动边界事件节点靠近时调用,从而触发高亮
|
|
153
|
+
*/
|
|
154
|
+
model.prototype.setTouching = function (flag) {
|
|
155
|
+
this.setProperty('isBoundaryEventTouchingTask', flag);
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* 附加后记录被附加的边界事件节点Id
|
|
159
|
+
*/
|
|
160
|
+
model.prototype.addBoundaryEvent = function (nodeId) {
|
|
161
|
+
this.setTouching(false);
|
|
162
|
+
if (this.boundaryEvents.find(function (item) { return item === nodeId; })) {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
var boundaryEvent = this.graphModel.getNodeModelById(nodeId);
|
|
166
|
+
boundaryEvent === null || boundaryEvent === void 0 ? void 0 : boundaryEvent.setProperties({
|
|
167
|
+
attachedToRef: this.id,
|
|
168
|
+
});
|
|
169
|
+
this.boundaryEvents.push(nodeId);
|
|
170
|
+
return true;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* 被附加的边界事件节点被删除时,移除记录
|
|
174
|
+
*/
|
|
175
|
+
model.prototype.deleteBoundaryEvent = function (nodeId) {
|
|
176
|
+
this.boundaryEvents = this.boundaryEvents.filter(function (item) { return item !== nodeId; });
|
|
177
|
+
};
|
|
178
|
+
return model;
|
|
179
|
+
}(RectNodeModel));
|
|
180
|
+
// @ts-ignore
|
|
181
|
+
return {
|
|
182
|
+
type: type,
|
|
183
|
+
view: view,
|
|
184
|
+
model: model,
|
|
185
|
+
};
|
|
186
|
+
}
|