@operato/scene-bpmn 1.1.1
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 +20 -0
- package/LICENSE +21 -0
- package/README.md +13 -0
- package/assets/favicon.ico +0 -0
- package/assets/images/spinner.png +0 -0
- package/db.sqlite +0 -0
- package/dist/base/bpmn-activity.d.ts +5 -0
- package/dist/base/bpmn-activity.js +23 -0
- package/dist/base/bpmn-activity.js.map +1 -0
- package/dist/base/bpmn-container-base.d.ts +36 -0
- package/dist/base/bpmn-container-base.js +167 -0
- package/dist/base/bpmn-container-base.js.map +1 -0
- package/dist/base/bpmn-control-base.d.ts +36 -0
- package/dist/base/bpmn-control-base.js +167 -0
- package/dist/base/bpmn-control-base.js.map +1 -0
- package/dist/bpmn-call-activity.d.ts +11 -0
- package/dist/bpmn-call-activity.js +19 -0
- package/dist/bpmn-call-activity.js.map +1 -0
- package/dist/bpmn-comment.d.ts +14 -0
- package/dist/bpmn-comment.js +53 -0
- package/dist/bpmn-comment.js.map +1 -0
- package/dist/bpmn-data-object.d.ts +25 -0
- package/dist/bpmn-data-object.js +106 -0
- package/dist/bpmn-data-object.js.map +1 -0
- package/dist/bpmn-data-store.d.ts +11 -0
- package/dist/bpmn-data-store.js +36 -0
- package/dist/bpmn-data-store.js.map +1 -0
- package/dist/bpmn-event.d.ts +25 -0
- package/dist/bpmn-event.js +421 -0
- package/dist/bpmn-event.js.map +1 -0
- package/dist/bpmn-flow.d.ts +19 -0
- package/dist/bpmn-flow.js +26 -0
- package/dist/bpmn-flow.js.map +1 -0
- package/dist/bpmn-gateway.d.ts +25 -0
- package/dist/bpmn-gateway.js +146 -0
- package/dist/bpmn-gateway.js.map +1 -0
- package/dist/bpmn-group.d.ts +11 -0
- package/dist/bpmn-group.js +35 -0
- package/dist/bpmn-group.js.map +1 -0
- package/dist/bpmn-lane.d.ts +15 -0
- package/dist/bpmn-lane.js +25 -0
- package/dist/bpmn-lane.js.map +1 -0
- package/dist/bpmn-pool.d.ts +14 -0
- package/dist/bpmn-pool.js +22 -0
- package/dist/bpmn-pool.js.map +1 -0
- package/dist/bpmn-subprocess.d.ts +19 -0
- package/dist/bpmn-subprocess.js +146 -0
- package/dist/bpmn-subprocess.js.map +1 -0
- package/dist/bpmn-task.d.ts +32 -0
- package/dist/bpmn-task.js +311 -0
- package/dist/bpmn-task.js.map +1 -0
- package/dist/editors/index.d.ts +0 -0
- package/dist/editors/index.js +2 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/groups/index.d.ts +7 -0
- package/dist/groups/index.js +3 -0
- package/dist/groups/index.js.map +1 -0
- package/dist/groups/process.d.ts +6 -0
- package/dist/groups/process.js +48 -0
- package/dist/groups/process.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/bpmn-call-activity.d.ts +17 -0
- package/dist/templates/bpmn-call-activity.js +18 -0
- package/dist/templates/bpmn-call-activity.js.map +1 -0
- package/dist/templates/bpmn-comment.d.ts +19 -0
- package/dist/templates/bpmn-comment.js +20 -0
- package/dist/templates/bpmn-comment.js.map +1 -0
- package/dist/templates/bpmn-data-object.d.ts +19 -0
- package/dist/templates/bpmn-data-object.js +20 -0
- package/dist/templates/bpmn-data-object.js.map +1 -0
- package/dist/templates/bpmn-data-store.d.ts +17 -0
- package/dist/templates/bpmn-data-store.js +18 -0
- package/dist/templates/bpmn-data-store.js.map +1 -0
- package/dist/templates/bpmn-event.d.ts +17 -0
- package/dist/templates/bpmn-event.js +18 -0
- package/dist/templates/bpmn-event.js.map +1 -0
- package/dist/templates/bpmn-flow.d.ts +15 -0
- package/dist/templates/bpmn-flow.js +16 -0
- package/dist/templates/bpmn-flow.js.map +1 -0
- package/dist/templates/bpmn-gateway.d.ts +17 -0
- package/dist/templates/bpmn-gateway.js +18 -0
- package/dist/templates/bpmn-gateway.js.map +1 -0
- package/dist/templates/bpmn-group.d.ts +15 -0
- package/dist/templates/bpmn-group.js +16 -0
- package/dist/templates/bpmn-group.js.map +1 -0
- package/dist/templates/bpmn-lane.d.ts +17 -0
- package/dist/templates/bpmn-lane.js +18 -0
- package/dist/templates/bpmn-lane.js.map +1 -0
- package/dist/templates/bpmn-pool.d.ts +15 -0
- package/dist/templates/bpmn-pool.js +16 -0
- package/dist/templates/bpmn-pool.js.map +1 -0
- package/dist/templates/bpmn-subprocess.d.ts +17 -0
- package/dist/templates/bpmn-subprocess.js +18 -0
- package/dist/templates/bpmn-subprocess.js.map +1 -0
- package/dist/templates/bpmn-task.d.ts +17 -0
- package/dist/templates/bpmn-task.js +18 -0
- package/dist/templates/bpmn-task.js.map +1 -0
- package/dist/templates/index.d.ts +15 -0
- package/dist/templates/index.js +28 -0
- package/dist/templates/index.js.map +1 -0
- package/helps/bpmn/gateway/complex-decision-gateway-example.png +0 -0
- package/helps/bpmn/gateway/complex-decision-gateway.png +0 -0
- package/helps/bpmn/gateway/event-based-gateway-example.webp +0 -0
- package/helps/bpmn/gateway/exclusive-event-based-gateway-example.png +0 -0
- package/helps/bpmn/gateway/exclusive-event-based-gateway.webp +0 -0
- package/helps/bpmn/gateway/exclusive-gateway-example.webp +0 -0
- package/helps/bpmn/gateway/exclusive-gateway.png +0 -0
- package/helps/bpmn/gateway/gateway-types.webp +0 -0
- package/helps/bpmn/gateway/gateway.md +111 -0
- package/helps/bpmn/gateway/inclusive-gateway-example.webp +0 -0
- package/helps/bpmn/gateway/inclusive-gateway.png +0 -0
- package/helps/bpmn/gateway/parallel-event-based-gateway-example.png +0 -0
- package/helps/bpmn/gateway/parallel-event-based-gateway.png +0 -0
- package/helps/bpmn/gateway/parallel-gateway-example.webp +0 -0
- package/helps/bpmn/gateway/parallel-gateway.png +0 -0
- package/icons/bpmn-group.png +0 -0
- package/icons/bpmn-lane.png +0 -0
- package/icons/bpmn-pool.png +0 -0
- package/icons/icon-bpmn-association-flow.png +0 -0
- package/icons/icon-bpmn-call-activity.png +0 -0
- package/icons/icon-bpmn-comment.png +0 -0
- package/icons/icon-bpmn-data-object.png +0 -0
- package/icons/icon-bpmn-data-store.png +0 -0
- package/icons/icon-bpmn-event.png +0 -0
- package/icons/icon-bpmn-flow.png +0 -0
- package/icons/icon-bpmn-gateway.png +0 -0
- package/icons/icon-bpmn-group.png +0 -0
- package/icons/icon-bpmn-lane.png +0 -0
- package/icons/icon-bpmn-message-flow.png +0 -0
- package/icons/icon-bpmn-pool.png +0 -0
- package/icons/icon-bpmn-subprocess.png +0 -0
- package/icons/icon-bpmn-task.png +0 -0
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +20 -0
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +20 -0
- package/logs/application-2022-11-03-10.log +22 -0
- package/logs/application-2022-11-03-11.log +18 -0
- package/logs/connections-2022-11-03-10.log +70 -0
- package/logs/connections-2022-11-03-11.log +105 -0
- package/package.json +60 -0
- package/src/base/bpmn-activity.ts +32 -0
- package/src/base/bpmn-container-base.ts +201 -0
- package/src/base/bpmn-control-base.ts +201 -0
- package/src/bpmn-call-activity.ts +22 -0
- package/src/bpmn-comment.ts +65 -0
- package/src/bpmn-data-object.ts +127 -0
- package/src/bpmn-data-store.ts +47 -0
- package/src/bpmn-event.ts +442 -0
- package/src/bpmn-flow.ts +28 -0
- package/src/bpmn-gateway.ts +165 -0
- package/src/bpmn-group.ts +39 -0
- package/src/bpmn-lane.ts +46 -0
- package/src/bpmn-pool.ts +25 -0
- package/src/bpmn-subprocess.ts +165 -0
- package/src/bpmn-task.ts +340 -0
- package/src/editors/index.ts +0 -0
- package/src/groups/index.ts +3 -0
- package/src/groups/process.ts +48 -0
- package/src/index.ts +12 -0
- package/src/templates/bpmn-call-activity.ts +18 -0
- package/src/templates/bpmn-comment.ts +20 -0
- package/src/templates/bpmn-data-object.ts +20 -0
- package/src/templates/bpmn-data-store.ts +18 -0
- package/src/templates/bpmn-event.ts +18 -0
- package/src/templates/bpmn-flow.ts +16 -0
- package/src/templates/bpmn-gateway.ts +18 -0
- package/src/templates/bpmn-group.ts +16 -0
- package/src/templates/bpmn-lane.ts +18 -0
- package/src/templates/bpmn-pool.ts +16 -0
- package/src/templates/bpmn-subprocess.ts +18 -0
- package/src/templates/bpmn-task.ts +18 -0
- package/src/templates/index.ts +29 -0
- package/things-scene.config.js +7 -0
- package/translations/en.json +11 -0
- package/translations/ko.json +11 -0
- package/translations/ms.json +11 -0
- package/translations/zh.json +11 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
### [1.1.1](https://github.com/things-scene/operato-scene/compare/v1.1.0...v1.1.1) (2022-11-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* typo ([c4758b9](https://github.com/things-scene/operato-scene/commit/c4758b9d66e4edb15ee4b805117fd9b18ef92737))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## [1.1.0](https://github.com/things-scene/operato-scene/compare/v1.0.7...v1.1.0) (2022-11-03)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### :rocket: New Features
|
|
19
|
+
|
|
20
|
+
* add bpmn and eipatterns ([6f5e74c](https://github.com/things-scene/operato-scene/commit/6f5e74c9e45ff61324c080f9b2828f1a69fddc5a))
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) hatiolab.com
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## build
|
|
2
|
+
|
|
3
|
+
`$ yarn build`
|
|
4
|
+
|
|
5
|
+
| type | filename | for | tested |
|
|
6
|
+
| ---- | ----------------------------- | -------------- | ------ |
|
|
7
|
+
| UMD | things-scene-eipatterns.js | modern browser | O |
|
|
8
|
+
| UMD | things-scene-eipatterns-ie.js | ie 11 | O |
|
|
9
|
+
| ESM | things-scene-eipatterns.mjs | modern browser | O |
|
|
10
|
+
|
|
11
|
+
## publish
|
|
12
|
+
|
|
13
|
+
`$ yarn publish`
|
|
Binary file
|
|
Binary file
|
package/db.sqlite
ADDED
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import BPMNControlBase from './bpmn-control-base';
|
|
2
|
+
export default class BPMNActivity extends BPMNControlBase {
|
|
3
|
+
render(ctx) {
|
|
4
|
+
var { left, top, width, height } = this.bounds;
|
|
5
|
+
ctx.translate(left, top);
|
|
6
|
+
ctx.beginPath();
|
|
7
|
+
var radius = 9;
|
|
8
|
+
ctx.moveTo(radius, 0);
|
|
9
|
+
ctx.arcTo(width, 0, width, height, radius);
|
|
10
|
+
ctx.arcTo(width, height, 0, height, radius);
|
|
11
|
+
ctx.arcTo(0, height, 0, 0, radius);
|
|
12
|
+
ctx.arcTo(0, 0, width, 0, radius);
|
|
13
|
+
this.drawFill(ctx);
|
|
14
|
+
this.drawStroke(ctx);
|
|
15
|
+
ctx.beginPath();
|
|
16
|
+
const image = this.getImageElement();
|
|
17
|
+
if (image) {
|
|
18
|
+
this.drawImage(ctx, image, 0, 0, 24, 24);
|
|
19
|
+
}
|
|
20
|
+
ctx.translate(-left, -top);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=bpmn-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-activity.js","sourceRoot":"","sources":["../../src/base/bpmn-activity.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,qBAAqB,CAAA;AAEjD,MAAM,CAAC,OAAO,OAAgB,YAAa,SAAQ,eAAe;IAGhE,MAAM,CAAC,GAA6B;QAClC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE9C,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACxB,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrB,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC1C,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QAC3C,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;QAClC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;QAEjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAClB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAEpB,GAAG,CAAC,SAAS,EAAE,CAAA;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QACpC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;SACzC;QAED,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;CACF","sourcesContent":["import BPMNControlBase from './bpmn-control-base'\n\nexport default abstract class BPMNActivity extends BPMNControlBase {\n abstract getImageElement(): HTMLImageElement | null | undefined\n\n render(ctx: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n ctx.translate(left, top)\n ctx.beginPath()\n\n var radius = 9\n\n ctx.moveTo(radius, 0)\n ctx.arcTo(width, 0, width, height, radius)\n ctx.arcTo(width, height, 0, height, radius)\n ctx.arcTo(0, height, 0, 0, radius)\n ctx.arcTo(0, 0, width, 0, radius)\n\n this.drawFill(ctx)\n this.drawStroke(ctx)\n\n ctx.beginPath()\n\n const image = this.getImageElement()\n if (image) {\n this.drawImage(ctx, image, 0, 0, 24, 24)\n }\n\n ctx.translate(-left, -top)\n }\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Anchor, Container } from '@hatiolab/things-scene';
|
|
2
|
+
export declare enum DIRECTION {
|
|
3
|
+
NORTH = "N",
|
|
4
|
+
EAST = "E",
|
|
5
|
+
SOUTH = "S",
|
|
6
|
+
WEST = "W"
|
|
7
|
+
}
|
|
8
|
+
export declare enum INOUT {
|
|
9
|
+
IN = "in",
|
|
10
|
+
OUT = "out",
|
|
11
|
+
INOUT = "inout"
|
|
12
|
+
}
|
|
13
|
+
export declare enum FLOW {
|
|
14
|
+
MESSAGE = "message",
|
|
15
|
+
SEQUENCE = "sequence",
|
|
16
|
+
ASSOCIATION = "association"
|
|
17
|
+
}
|
|
18
|
+
export declare type NODE = {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
inout: INOUT;
|
|
22
|
+
type: FLOW;
|
|
23
|
+
direction: DIRECTION;
|
|
24
|
+
multiplicity?: number;
|
|
25
|
+
};
|
|
26
|
+
declare const BPMNContainerBase_base: (new (...args: any[]) => {
|
|
27
|
+
findOutletLines(anchorName: string): import("@hatiolab/things-scene").Line[];
|
|
28
|
+
findOutletEnds(anchorName: string): import("@hatiolab/things-scene").Component[];
|
|
29
|
+
findInletLines(anchorName: string): import("@hatiolab/things-scene").Line[];
|
|
30
|
+
findInletEnds(anchorName: string): import("@hatiolab/things-scene").Component[];
|
|
31
|
+
}) & typeof Container;
|
|
32
|
+
export default abstract class BPMNContainerBase extends BPMNContainerBase_base {
|
|
33
|
+
get anchors(): Array<Anchor>;
|
|
34
|
+
get nodes(): NODE[];
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Container, Connectable } from '@hatiolab/things-scene';
|
|
2
|
+
export var DIRECTION;
|
|
3
|
+
(function (DIRECTION) {
|
|
4
|
+
DIRECTION["NORTH"] = "N";
|
|
5
|
+
DIRECTION["EAST"] = "E";
|
|
6
|
+
DIRECTION["SOUTH"] = "S";
|
|
7
|
+
DIRECTION["WEST"] = "W";
|
|
8
|
+
})(DIRECTION || (DIRECTION = {}));
|
|
9
|
+
export var INOUT;
|
|
10
|
+
(function (INOUT) {
|
|
11
|
+
INOUT["IN"] = "in";
|
|
12
|
+
INOUT["OUT"] = "out";
|
|
13
|
+
INOUT["INOUT"] = "inout";
|
|
14
|
+
})(INOUT || (INOUT = {}));
|
|
15
|
+
export var FLOW;
|
|
16
|
+
(function (FLOW) {
|
|
17
|
+
FLOW["MESSAGE"] = "message";
|
|
18
|
+
FLOW["SEQUENCE"] = "sequence";
|
|
19
|
+
FLOW["ASSOCIATION"] = "association";
|
|
20
|
+
})(FLOW || (FLOW = {}));
|
|
21
|
+
const STYLE_MAP = {
|
|
22
|
+
message: {
|
|
23
|
+
strokeStyle: 'navy',
|
|
24
|
+
fillStyle: 'navy'
|
|
25
|
+
},
|
|
26
|
+
sequence: {
|
|
27
|
+
strokeStyle: 'red',
|
|
28
|
+
fillStyle: 'red',
|
|
29
|
+
lineDash: 'long-dash-dot'
|
|
30
|
+
},
|
|
31
|
+
association: {
|
|
32
|
+
strokeStyle: 'yellow',
|
|
33
|
+
fillStyle: 'yellow',
|
|
34
|
+
lineDash: 'dash',
|
|
35
|
+
begin: 'none',
|
|
36
|
+
beginSize: 'size1',
|
|
37
|
+
end: 'none',
|
|
38
|
+
endSize: 'size1'
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const ANCHOR_LENGTH = 8;
|
|
42
|
+
const TEMPLATE = {
|
|
43
|
+
type: 'bpmn-flow',
|
|
44
|
+
lineWidth: 2,
|
|
45
|
+
strokeStyle: 'black',
|
|
46
|
+
begin: 'none',
|
|
47
|
+
beginSize: 'size1',
|
|
48
|
+
end: 'arrow',
|
|
49
|
+
endSize: 'size9',
|
|
50
|
+
round: 10
|
|
51
|
+
};
|
|
52
|
+
function linkFilter(counterEnd) {
|
|
53
|
+
if (!counterEnd) {
|
|
54
|
+
return this.inout !== 'in';
|
|
55
|
+
}
|
|
56
|
+
const { component, anchor } = counterEnd || {};
|
|
57
|
+
/* FIXME remove !anchor.type condition */
|
|
58
|
+
return !(anchor === null || anchor === void 0 ? void 0 : anchor.type) || anchor.type === this.type;
|
|
59
|
+
}
|
|
60
|
+
export default class BPMNContainerBase extends Connectable(Container) {
|
|
61
|
+
get anchors() {
|
|
62
|
+
var allNodes = this.nodes;
|
|
63
|
+
var { left, top, width, height } = this.bounds;
|
|
64
|
+
var right = left + width;
|
|
65
|
+
var bottom = top + height;
|
|
66
|
+
const dirs = [DIRECTION.NORTH, DIRECTION.EAST, DIRECTION.SOUTH, DIRECTION.WEST].map(direction => {
|
|
67
|
+
const nodes = allNodes.filter(node => node.direction === direction);
|
|
68
|
+
if (nodes.length === 0) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
var dx = 0;
|
|
72
|
+
var dy = 0;
|
|
73
|
+
var sx = 0;
|
|
74
|
+
var sy = 0;
|
|
75
|
+
switch (direction) {
|
|
76
|
+
case DIRECTION.NORTH:
|
|
77
|
+
sx = left;
|
|
78
|
+
sy = top;
|
|
79
|
+
dx = width / (nodes.length + 1);
|
|
80
|
+
dy = 0;
|
|
81
|
+
break;
|
|
82
|
+
case DIRECTION.EAST:
|
|
83
|
+
sx = right;
|
|
84
|
+
sy = top;
|
|
85
|
+
dx = 0;
|
|
86
|
+
dy = height / (nodes.length + 1);
|
|
87
|
+
break;
|
|
88
|
+
case DIRECTION.SOUTH:
|
|
89
|
+
sx = left;
|
|
90
|
+
sy = bottom;
|
|
91
|
+
dx = width / (nodes.length + 1);
|
|
92
|
+
dy = 0;
|
|
93
|
+
break;
|
|
94
|
+
case DIRECTION.WEST:
|
|
95
|
+
sx = left;
|
|
96
|
+
sy = top;
|
|
97
|
+
dx = 0;
|
|
98
|
+
dy = height / (nodes.length + 1);
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
}
|
|
102
|
+
return nodes.map((node, idx) => {
|
|
103
|
+
const x = sx + dx * (idx + 1);
|
|
104
|
+
const y = sy + dy * (idx + 1);
|
|
105
|
+
return {
|
|
106
|
+
type: node.type,
|
|
107
|
+
name: node.name,
|
|
108
|
+
inout: node.inout,
|
|
109
|
+
position: {
|
|
110
|
+
x,
|
|
111
|
+
y
|
|
112
|
+
},
|
|
113
|
+
bounds: {
|
|
114
|
+
left: x - ANCHOR_LENGTH / 2,
|
|
115
|
+
top: y - ANCHOR_LENGTH / 2,
|
|
116
|
+
width: ANCHOR_LENGTH,
|
|
117
|
+
height: ANCHOR_LENGTH
|
|
118
|
+
},
|
|
119
|
+
filter: linkFilter,
|
|
120
|
+
template: {
|
|
121
|
+
...TEMPLATE,
|
|
122
|
+
...(STYLE_MAP[node.type || 'message'] || STYLE_MAP['message'])
|
|
123
|
+
},
|
|
124
|
+
multiplicity: node.multiplicity
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
return dirs.flat();
|
|
129
|
+
}
|
|
130
|
+
get nodes() {
|
|
131
|
+
return [
|
|
132
|
+
{
|
|
133
|
+
name: 'Left',
|
|
134
|
+
description: 'Left side message inout',
|
|
135
|
+
inout: INOUT.INOUT,
|
|
136
|
+
type: FLOW.MESSAGE,
|
|
137
|
+
direction: DIRECTION.WEST,
|
|
138
|
+
multiplicity: 1
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'Top',
|
|
142
|
+
description: 'Top side message inout',
|
|
143
|
+
inout: INOUT.INOUT,
|
|
144
|
+
type: FLOW.MESSAGE,
|
|
145
|
+
direction: DIRECTION.NORTH,
|
|
146
|
+
multiplicity: 1
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'Right',
|
|
150
|
+
description: 'Right side message inout',
|
|
151
|
+
inout: INOUT.INOUT,
|
|
152
|
+
type: FLOW.MESSAGE,
|
|
153
|
+
direction: DIRECTION.EAST,
|
|
154
|
+
multiplicity: 1
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'Down',
|
|
158
|
+
description: 'Down side message inout',
|
|
159
|
+
inout: INOUT.INOUT,
|
|
160
|
+
type: FLOW.MESSAGE,
|
|
161
|
+
direction: DIRECTION.SOUTH,
|
|
162
|
+
multiplicity: 1
|
|
163
|
+
}
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=bpmn-container-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-container-base.js","sourceRoot":"","sources":["../../src/base/bpmn-container-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { Anchor, BOUNDS, Container, Connectable, LinkEnd } from '@hatiolab/things-scene'\n\nexport enum DIRECTION {\n NORTH = 'N',\n EAST = 'E',\n SOUTH = 'S',\n WEST = 'W'\n}\n\nexport enum INOUT {\n IN = 'in',\n OUT = 'out',\n INOUT = 'inout'\n}\n\nexport enum FLOW {\n MESSAGE = 'message',\n SEQUENCE = 'sequence',\n ASSOCIATION = 'association'\n}\n\nexport type NODE = {\n name: string\n description: string\n inout: INOUT\n type: FLOW\n direction: DIRECTION\n multiplicity?: number\n}\n\nconst STYLE_MAP = {\n message: {\n strokeStyle: 'navy',\n fillStyle: 'navy'\n },\n sequence: {\n strokeStyle: 'red',\n fillStyle: 'red',\n lineDash: 'long-dash-dot'\n },\n association: {\n strokeStyle: 'yellow',\n fillStyle: 'yellow',\n lineDash: 'dash',\n begin: 'none',\n beginSize: 'size1',\n end: 'none',\n endSize: 'size1'\n }\n}\n\ntype FILTER_FUNCTION = (this: Anchor, counterEnd?: LinkEnd) => boolean\n\nconst ANCHOR_LENGTH = 8\n\nconst TEMPLATE = {\n type: 'bpmn-flow',\n lineWidth: 2,\n strokeStyle: 'black',\n begin: 'none',\n beginSize: 'size1',\n end: 'arrow',\n endSize: 'size9',\n round: 10\n}\n\nfunction linkFilter(this: Anchor, counterEnd?: LinkEnd) {\n if (!counterEnd) {\n return this.inout !== 'in'\n }\n\n const { component, anchor } = counterEnd || {}\n /* FIXME remove !anchor.type condition */\n return !anchor?.type || anchor.type === this.type\n}\n\nexport default abstract class BPMNContainerBase extends Connectable(Container) {\n get anchors(): Array<Anchor> {\n var allNodes = this.nodes\n var { left, top, width, height } = this.bounds\n\n var right = left + width\n var bottom = top + height\n\n const dirs: Array<Array<Anchor>> = [DIRECTION.NORTH, DIRECTION.EAST, DIRECTION.SOUTH, DIRECTION.WEST].map(\n direction => {\n const nodes = allNodes.filter(node => node.direction === direction)\n if (nodes.length === 0) {\n return []\n }\n\n var dx = 0\n var dy = 0\n var sx = 0\n var sy = 0\n\n switch (direction) {\n case DIRECTION.NORTH:\n sx = left\n sy = top\n dx = width / (nodes.length + 1)\n dy = 0\n\n break\n\n case DIRECTION.EAST:\n sx = right\n sy = top\n dx = 0\n dy = height / (nodes.length + 1)\n\n break\n\n case DIRECTION.SOUTH:\n sx = left\n sy = bottom\n dx = width / (nodes.length + 1)\n dy = 0\n\n break\n\n case DIRECTION.WEST:\n sx = left\n sy = top\n dx = 0\n dy = height / (nodes.length + 1)\n\n break\n\n default:\n }\n\n return nodes.map((node, idx) => {\n const x = sx + dx * (idx + 1)\n const y = sy + dy * (idx + 1)\n\n return {\n type: node.type as string,\n name: node.name,\n inout: node.inout,\n position: {\n x,\n y\n },\n bounds: {\n left: x - ANCHOR_LENGTH / 2,\n top: y - ANCHOR_LENGTH / 2,\n width: ANCHOR_LENGTH,\n height: ANCHOR_LENGTH\n },\n filter: linkFilter,\n template: {\n ...TEMPLATE,\n ...(STYLE_MAP[node.type || 'message'] || STYLE_MAP['message'])\n },\n multiplicity: node.multiplicity\n }\n })\n }\n )\n\n return dirs.flat()\n }\n\n get nodes(): NODE[] {\n return [\n {\n name: 'Left',\n description: 'Left side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.WEST,\n multiplicity: 1\n },\n {\n name: 'Top',\n description: 'Top side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.NORTH,\n multiplicity: 1\n },\n {\n name: 'Right',\n description: 'Right side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.EAST,\n multiplicity: 1\n },\n {\n name: 'Down',\n description: 'Down side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.SOUTH,\n multiplicity: 1\n }\n ]\n }\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Anchor, Component, Shape } from '@hatiolab/things-scene';
|
|
2
|
+
export declare enum DIRECTION {
|
|
3
|
+
NORTH = "N",
|
|
4
|
+
EAST = "E",
|
|
5
|
+
SOUTH = "S",
|
|
6
|
+
WEST = "W"
|
|
7
|
+
}
|
|
8
|
+
export declare enum INOUT {
|
|
9
|
+
IN = "in",
|
|
10
|
+
OUT = "out",
|
|
11
|
+
INOUT = "inout"
|
|
12
|
+
}
|
|
13
|
+
export declare enum FLOW {
|
|
14
|
+
MESSAGE = "message",
|
|
15
|
+
SEQUENCE = "sequence",
|
|
16
|
+
ASSOCIATION = "association"
|
|
17
|
+
}
|
|
18
|
+
export declare type NODE = {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
inout: INOUT;
|
|
22
|
+
type: FLOW;
|
|
23
|
+
direction: DIRECTION;
|
|
24
|
+
multiplicity?: number;
|
|
25
|
+
};
|
|
26
|
+
declare const BPMNControlBase_base: (new (...args: any[]) => {
|
|
27
|
+
findOutletLines(anchorName: string): import("@hatiolab/things-scene").Line[];
|
|
28
|
+
findOutletEnds(anchorName: string): Component[];
|
|
29
|
+
findInletLines(anchorName: string): import("@hatiolab/things-scene").Line[];
|
|
30
|
+
findInletEnds(anchorName: string): Component[];
|
|
31
|
+
}) & typeof Shape;
|
|
32
|
+
export default abstract class BPMNControlBase extends BPMNControlBase_base {
|
|
33
|
+
get anchors(): Array<Anchor>;
|
|
34
|
+
get nodes(): NODE[];
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Connectable, RectPath, Shape } from '@hatiolab/things-scene';
|
|
2
|
+
export var DIRECTION;
|
|
3
|
+
(function (DIRECTION) {
|
|
4
|
+
DIRECTION["NORTH"] = "N";
|
|
5
|
+
DIRECTION["EAST"] = "E";
|
|
6
|
+
DIRECTION["SOUTH"] = "S";
|
|
7
|
+
DIRECTION["WEST"] = "W";
|
|
8
|
+
})(DIRECTION || (DIRECTION = {}));
|
|
9
|
+
export var INOUT;
|
|
10
|
+
(function (INOUT) {
|
|
11
|
+
INOUT["IN"] = "in";
|
|
12
|
+
INOUT["OUT"] = "out";
|
|
13
|
+
INOUT["INOUT"] = "inout";
|
|
14
|
+
})(INOUT || (INOUT = {}));
|
|
15
|
+
export var FLOW;
|
|
16
|
+
(function (FLOW) {
|
|
17
|
+
FLOW["MESSAGE"] = "message";
|
|
18
|
+
FLOW["SEQUENCE"] = "sequence";
|
|
19
|
+
FLOW["ASSOCIATION"] = "association";
|
|
20
|
+
})(FLOW || (FLOW = {}));
|
|
21
|
+
const STYLE_MAP = {
|
|
22
|
+
message: {
|
|
23
|
+
strokeStyle: 'navy',
|
|
24
|
+
fillStyle: 'navy'
|
|
25
|
+
},
|
|
26
|
+
sequence: {
|
|
27
|
+
strokeStyle: 'red',
|
|
28
|
+
fillStyle: 'red',
|
|
29
|
+
lineDash: 'long-dash-dot'
|
|
30
|
+
},
|
|
31
|
+
association: {
|
|
32
|
+
strokeStyle: 'yellow',
|
|
33
|
+
fillStyle: 'yellow',
|
|
34
|
+
lineDash: 'dash',
|
|
35
|
+
begin: 'none',
|
|
36
|
+
beginSize: 'size1',
|
|
37
|
+
end: 'none',
|
|
38
|
+
endSize: 'size1'
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const ANCHOR_LENGTH = 8;
|
|
42
|
+
const TEMPLATE = {
|
|
43
|
+
type: 'bpmn-flow',
|
|
44
|
+
lineWidth: 2,
|
|
45
|
+
strokeStyle: 'black',
|
|
46
|
+
begin: 'none',
|
|
47
|
+
beginSize: 'size1',
|
|
48
|
+
end: 'arrow',
|
|
49
|
+
endSize: 'size9',
|
|
50
|
+
round: 10
|
|
51
|
+
};
|
|
52
|
+
function linkFilter(counterEnd) {
|
|
53
|
+
if (!counterEnd) {
|
|
54
|
+
return this.inout !== 'in';
|
|
55
|
+
}
|
|
56
|
+
const { component, anchor } = counterEnd || {};
|
|
57
|
+
/* FIXME remove !anchor.type condition */
|
|
58
|
+
return !(anchor === null || anchor === void 0 ? void 0 : anchor.type) || anchor.type === this.type;
|
|
59
|
+
}
|
|
60
|
+
export default class BPMNControlBase extends Connectable(RectPath(Shape)) {
|
|
61
|
+
get anchors() {
|
|
62
|
+
var allNodes = this.nodes;
|
|
63
|
+
var { left, top, width, height } = this.bounds;
|
|
64
|
+
var right = left + width;
|
|
65
|
+
var bottom = top + height;
|
|
66
|
+
const dirs = [DIRECTION.NORTH, DIRECTION.EAST, DIRECTION.SOUTH, DIRECTION.WEST].map(direction => {
|
|
67
|
+
const nodes = allNodes.filter(node => node.direction === direction);
|
|
68
|
+
if (nodes.length === 0) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
var dx = 0;
|
|
72
|
+
var dy = 0;
|
|
73
|
+
var sx = 0;
|
|
74
|
+
var sy = 0;
|
|
75
|
+
switch (direction) {
|
|
76
|
+
case DIRECTION.NORTH:
|
|
77
|
+
sx = left;
|
|
78
|
+
sy = top;
|
|
79
|
+
dx = width / (nodes.length + 1);
|
|
80
|
+
dy = 0;
|
|
81
|
+
break;
|
|
82
|
+
case DIRECTION.EAST:
|
|
83
|
+
sx = right;
|
|
84
|
+
sy = top;
|
|
85
|
+
dx = 0;
|
|
86
|
+
dy = height / (nodes.length + 1);
|
|
87
|
+
break;
|
|
88
|
+
case DIRECTION.SOUTH:
|
|
89
|
+
sx = left;
|
|
90
|
+
sy = bottom;
|
|
91
|
+
dx = width / (nodes.length + 1);
|
|
92
|
+
dy = 0;
|
|
93
|
+
break;
|
|
94
|
+
case DIRECTION.WEST:
|
|
95
|
+
sx = left;
|
|
96
|
+
sy = top;
|
|
97
|
+
dx = 0;
|
|
98
|
+
dy = height / (nodes.length + 1);
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
}
|
|
102
|
+
return nodes.map((node, idx) => {
|
|
103
|
+
const x = sx + dx * (idx + 1);
|
|
104
|
+
const y = sy + dy * (idx + 1);
|
|
105
|
+
return {
|
|
106
|
+
type: node.type,
|
|
107
|
+
name: node.name,
|
|
108
|
+
inout: node.inout,
|
|
109
|
+
position: {
|
|
110
|
+
x,
|
|
111
|
+
y
|
|
112
|
+
},
|
|
113
|
+
bounds: {
|
|
114
|
+
left: x - ANCHOR_LENGTH / 2,
|
|
115
|
+
top: y - ANCHOR_LENGTH / 2,
|
|
116
|
+
width: ANCHOR_LENGTH,
|
|
117
|
+
height: ANCHOR_LENGTH
|
|
118
|
+
},
|
|
119
|
+
filter: linkFilter,
|
|
120
|
+
template: {
|
|
121
|
+
...TEMPLATE,
|
|
122
|
+
...(STYLE_MAP[node.type || 'message'] || STYLE_MAP['message'])
|
|
123
|
+
},
|
|
124
|
+
multiplicity: node.multiplicity
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
return dirs.flat();
|
|
129
|
+
}
|
|
130
|
+
get nodes() {
|
|
131
|
+
return [
|
|
132
|
+
{
|
|
133
|
+
name: 'Left',
|
|
134
|
+
description: 'Left side message inout',
|
|
135
|
+
inout: INOUT.INOUT,
|
|
136
|
+
type: FLOW.MESSAGE,
|
|
137
|
+
direction: DIRECTION.WEST,
|
|
138
|
+
multiplicity: 1
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'Top',
|
|
142
|
+
description: 'Top side message inout',
|
|
143
|
+
inout: INOUT.INOUT,
|
|
144
|
+
type: FLOW.MESSAGE,
|
|
145
|
+
direction: DIRECTION.NORTH,
|
|
146
|
+
multiplicity: 1
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'Right',
|
|
150
|
+
description: 'Right side message inout',
|
|
151
|
+
inout: INOUT.INOUT,
|
|
152
|
+
type: FLOW.MESSAGE,
|
|
153
|
+
direction: DIRECTION.EAST,
|
|
154
|
+
multiplicity: 1
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'Down',
|
|
158
|
+
description: 'Down side message inout',
|
|
159
|
+
inout: INOUT.INOUT,
|
|
160
|
+
type: FLOW.MESSAGE,
|
|
161
|
+
direction: DIRECTION.SOUTH,
|
|
162
|
+
multiplicity: 1
|
|
163
|
+
}
|
|
164
|
+
];
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=bpmn-control-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-control-base.js","sourceRoot":"","sources":["../../src/base/bpmn-control-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { Anchor, BOUNDS, Component, Connectable, LinkEnd, RectPath, Shape } from '@hatiolab/things-scene'\n\nexport enum DIRECTION {\n NORTH = 'N',\n EAST = 'E',\n SOUTH = 'S',\n WEST = 'W'\n}\n\nexport enum INOUT {\n IN = 'in',\n OUT = 'out',\n INOUT = 'inout'\n}\n\nexport enum FLOW {\n MESSAGE = 'message',\n SEQUENCE = 'sequence',\n ASSOCIATION = 'association'\n}\n\nexport type NODE = {\n name: string\n description: string\n inout: INOUT\n type: FLOW\n direction: DIRECTION\n multiplicity?: number\n}\n\nconst STYLE_MAP = {\n message: {\n strokeStyle: 'navy',\n fillStyle: 'navy'\n },\n sequence: {\n strokeStyle: 'red',\n fillStyle: 'red',\n lineDash: 'long-dash-dot'\n },\n association: {\n strokeStyle: 'yellow',\n fillStyle: 'yellow',\n lineDash: 'dash',\n begin: 'none',\n beginSize: 'size1',\n end: 'none',\n endSize: 'size1'\n }\n}\n\ntype FILTER_FUNCTION = (this: Anchor, counterEnd?: LinkEnd) => boolean\n\nconst ANCHOR_LENGTH = 8\n\nconst TEMPLATE = {\n type: 'bpmn-flow',\n lineWidth: 2,\n strokeStyle: 'black',\n begin: 'none',\n beginSize: 'size1',\n end: 'arrow',\n endSize: 'size9',\n round: 10\n}\n\nfunction linkFilter(this: Anchor, counterEnd?: LinkEnd) {\n if (!counterEnd) {\n return this.inout !== 'in'\n }\n\n const { component, anchor } = counterEnd || {}\n /* FIXME remove !anchor.type condition */\n return !anchor?.type || anchor.type === this.type\n}\n\nexport default abstract class BPMNControlBase extends Connectable(RectPath(Shape)) {\n get anchors(): Array<Anchor> {\n var allNodes = this.nodes\n var { left, top, width, height } = this.bounds\n\n var right = left + width\n var bottom = top + height\n\n const dirs: Array<Array<Anchor>> = [DIRECTION.NORTH, DIRECTION.EAST, DIRECTION.SOUTH, DIRECTION.WEST].map(\n direction => {\n const nodes = allNodes.filter(node => node.direction === direction)\n if (nodes.length === 0) {\n return []\n }\n\n var dx = 0\n var dy = 0\n var sx = 0\n var sy = 0\n\n switch (direction) {\n case DIRECTION.NORTH:\n sx = left\n sy = top\n dx = width / (nodes.length + 1)\n dy = 0\n\n break\n\n case DIRECTION.EAST:\n sx = right\n sy = top\n dx = 0\n dy = height / (nodes.length + 1)\n\n break\n\n case DIRECTION.SOUTH:\n sx = left\n sy = bottom\n dx = width / (nodes.length + 1)\n dy = 0\n\n break\n\n case DIRECTION.WEST:\n sx = left\n sy = top\n dx = 0\n dy = height / (nodes.length + 1)\n\n break\n\n default:\n }\n\n return nodes.map((node, idx) => {\n const x = sx + dx * (idx + 1)\n const y = sy + dy * (idx + 1)\n\n return {\n type: node.type as string,\n name: node.name,\n inout: node.inout,\n position: {\n x,\n y\n },\n bounds: {\n left: x - ANCHOR_LENGTH / 2,\n top: y - ANCHOR_LENGTH / 2,\n width: ANCHOR_LENGTH,\n height: ANCHOR_LENGTH\n },\n filter: linkFilter,\n template: {\n ...TEMPLATE,\n ...(STYLE_MAP[node.type || 'message'] || STYLE_MAP['message'])\n },\n multiplicity: node.multiplicity\n }\n })\n }\n )\n\n return dirs.flat()\n }\n\n get nodes(): NODE[] {\n return [\n {\n name: 'Left',\n description: 'Left side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.WEST,\n multiplicity: 1\n },\n {\n name: 'Top',\n description: 'Top side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.NORTH,\n multiplicity: 1\n },\n {\n name: 'Right',\n description: 'Right side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.EAST,\n multiplicity: 1\n },\n {\n name: 'Down',\n description: 'Down side message inout',\n inout: INOUT.INOUT,\n type: FLOW.MESSAGE,\n direction: DIRECTION.SOUTH,\n multiplicity: 1\n }\n ]\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import BPMNActivity from './base/bpmn-activity';
|
|
2
|
+
export default class BPMNCallActivity extends BPMNActivity {
|
|
3
|
+
static get nature(): {
|
|
4
|
+
mutable: boolean;
|
|
5
|
+
resizable: boolean;
|
|
6
|
+
rotatable: boolean;
|
|
7
|
+
properties: never[];
|
|
8
|
+
help: string;
|
|
9
|
+
};
|
|
10
|
+
getImageElement(): HTMLImageElement | undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component } from '@hatiolab/things-scene';
|
|
2
|
+
import BPMNActivity from './base/bpmn-activity';
|
|
3
|
+
const NATURE = {
|
|
4
|
+
mutable: false,
|
|
5
|
+
resizable: true,
|
|
6
|
+
rotatable: false,
|
|
7
|
+
properties: [],
|
|
8
|
+
help: '/eipatterns/bpmn-call-activity/bpmn-call-activity'
|
|
9
|
+
};
|
|
10
|
+
export default class BPMNCallActivity extends BPMNActivity {
|
|
11
|
+
static get nature() {
|
|
12
|
+
return NATURE;
|
|
13
|
+
}
|
|
14
|
+
getImageElement() {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
Component.register('bpmn-call-activity', BPMNCallActivity);
|
|
19
|
+
//# sourceMappingURL=bpmn-call-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-call-activity.js","sourceRoot":"","sources":["../src/bpmn-call-activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,YAAY,MAAM,sBAAsB,CAAA;AAE/C,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,mDAAmD;CAC1D,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,YAAY;IACxD,MAAM,KAAK,MAAM;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,eAAe;QACb,OAAM;IACR,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAA","sourcesContent":["import { Component } from '@hatiolab/things-scene'\nimport BPMNActivity from './base/bpmn-activity'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: false,\n properties: [],\n help: '/eipatterns/bpmn-call-activity/bpmn-call-activity'\n}\n\nexport default class BPMNCallActivity extends BPMNActivity {\n static get nature() {\n return NATURE\n }\n\n getImageElement(): HTMLImageElement | undefined {\n return\n }\n}\n\nComponent.register('bpmn-call-activity', BPMNCallActivity)\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BOUNDS } from '@hatiolab/things-scene';
|
|
2
|
+
import BPMNControlBase, { NODE } from './base/bpmn-control-base';
|
|
3
|
+
export default class BPMNComment extends BPMNControlBase {
|
|
4
|
+
static get nature(): {
|
|
5
|
+
mutable: boolean;
|
|
6
|
+
resizable: boolean;
|
|
7
|
+
rotatable: boolean;
|
|
8
|
+
properties: never[];
|
|
9
|
+
help: string;
|
|
10
|
+
};
|
|
11
|
+
get nodes(): NODE[];
|
|
12
|
+
render(ctx: CanvasRenderingContext2D): void;
|
|
13
|
+
get textBounds(): BOUNDS;
|
|
14
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Component } from '@hatiolab/things-scene';
|
|
2
|
+
import BPMNControlBase, { DIRECTION, INOUT, FLOW } from './base/bpmn-control-base';
|
|
3
|
+
const NATURE = {
|
|
4
|
+
mutable: false,
|
|
5
|
+
resizable: true,
|
|
6
|
+
rotatable: false,
|
|
7
|
+
properties: [],
|
|
8
|
+
help: '/eipatterns/bpmn-comment/bpmn-comment'
|
|
9
|
+
};
|
|
10
|
+
export default class BPMNComment extends BPMNControlBase {
|
|
11
|
+
static get nature() {
|
|
12
|
+
return NATURE;
|
|
13
|
+
}
|
|
14
|
+
get nodes() {
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
name: 'Left',
|
|
18
|
+
description: 'Left side message inout',
|
|
19
|
+
inout: INOUT.INOUT,
|
|
20
|
+
type: FLOW.MESSAGE,
|
|
21
|
+
direction: DIRECTION.WEST,
|
|
22
|
+
multiplicity: 1
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
render(ctx) {
|
|
27
|
+
const { left, top, width, height } = this.bounds;
|
|
28
|
+
const bracket = height / 3;
|
|
29
|
+
ctx.translate(left, top);
|
|
30
|
+
ctx.beginPath();
|
|
31
|
+
ctx.moveTo(bracket, 0);
|
|
32
|
+
ctx.lineTo(0, 0);
|
|
33
|
+
ctx.lineTo(0, height);
|
|
34
|
+
ctx.lineTo(bracket, height);
|
|
35
|
+
this.drawStroke(ctx);
|
|
36
|
+
ctx.beginPath();
|
|
37
|
+
ctx.rect(0, 0, width, height);
|
|
38
|
+
this.drawFill(ctx);
|
|
39
|
+
ctx.beginPath();
|
|
40
|
+
ctx.translate(-left, -top);
|
|
41
|
+
}
|
|
42
|
+
get textBounds() {
|
|
43
|
+
var { left, top, width, height } = this.bounds;
|
|
44
|
+
return {
|
|
45
|
+
left: left + 10,
|
|
46
|
+
top: top + 10,
|
|
47
|
+
width: width - 10,
|
|
48
|
+
height: height - 10
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
Component.register('bpmn-comment', BPMNComment);
|
|
53
|
+
//# sourceMappingURL=bpmn-comment.js.map
|