@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.
Files changed (180) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +13 -0
  4. package/assets/favicon.ico +0 -0
  5. package/assets/images/spinner.png +0 -0
  6. package/db.sqlite +0 -0
  7. package/dist/base/bpmn-activity.d.ts +5 -0
  8. package/dist/base/bpmn-activity.js +23 -0
  9. package/dist/base/bpmn-activity.js.map +1 -0
  10. package/dist/base/bpmn-container-base.d.ts +36 -0
  11. package/dist/base/bpmn-container-base.js +167 -0
  12. package/dist/base/bpmn-container-base.js.map +1 -0
  13. package/dist/base/bpmn-control-base.d.ts +36 -0
  14. package/dist/base/bpmn-control-base.js +167 -0
  15. package/dist/base/bpmn-control-base.js.map +1 -0
  16. package/dist/bpmn-call-activity.d.ts +11 -0
  17. package/dist/bpmn-call-activity.js +19 -0
  18. package/dist/bpmn-call-activity.js.map +1 -0
  19. package/dist/bpmn-comment.d.ts +14 -0
  20. package/dist/bpmn-comment.js +53 -0
  21. package/dist/bpmn-comment.js.map +1 -0
  22. package/dist/bpmn-data-object.d.ts +25 -0
  23. package/dist/bpmn-data-object.js +106 -0
  24. package/dist/bpmn-data-object.js.map +1 -0
  25. package/dist/bpmn-data-store.d.ts +11 -0
  26. package/dist/bpmn-data-store.js +36 -0
  27. package/dist/bpmn-data-store.js.map +1 -0
  28. package/dist/bpmn-event.d.ts +25 -0
  29. package/dist/bpmn-event.js +421 -0
  30. package/dist/bpmn-event.js.map +1 -0
  31. package/dist/bpmn-flow.d.ts +19 -0
  32. package/dist/bpmn-flow.js +26 -0
  33. package/dist/bpmn-flow.js.map +1 -0
  34. package/dist/bpmn-gateway.d.ts +25 -0
  35. package/dist/bpmn-gateway.js +146 -0
  36. package/dist/bpmn-gateway.js.map +1 -0
  37. package/dist/bpmn-group.d.ts +11 -0
  38. package/dist/bpmn-group.js +35 -0
  39. package/dist/bpmn-group.js.map +1 -0
  40. package/dist/bpmn-lane.d.ts +15 -0
  41. package/dist/bpmn-lane.js +25 -0
  42. package/dist/bpmn-lane.js.map +1 -0
  43. package/dist/bpmn-pool.d.ts +14 -0
  44. package/dist/bpmn-pool.js +22 -0
  45. package/dist/bpmn-pool.js.map +1 -0
  46. package/dist/bpmn-subprocess.d.ts +19 -0
  47. package/dist/bpmn-subprocess.js +146 -0
  48. package/dist/bpmn-subprocess.js.map +1 -0
  49. package/dist/bpmn-task.d.ts +32 -0
  50. package/dist/bpmn-task.js +311 -0
  51. package/dist/bpmn-task.js.map +1 -0
  52. package/dist/editors/index.d.ts +0 -0
  53. package/dist/editors/index.js +2 -0
  54. package/dist/editors/index.js.map +1 -0
  55. package/dist/groups/index.d.ts +7 -0
  56. package/dist/groups/index.js +3 -0
  57. package/dist/groups/index.js.map +1 -0
  58. package/dist/groups/process.d.ts +6 -0
  59. package/dist/groups/process.js +48 -0
  60. package/dist/groups/process.js.map +1 -0
  61. package/dist/index.d.ts +12 -0
  62. package/dist/index.js +13 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/templates/bpmn-call-activity.d.ts +17 -0
  65. package/dist/templates/bpmn-call-activity.js +18 -0
  66. package/dist/templates/bpmn-call-activity.js.map +1 -0
  67. package/dist/templates/bpmn-comment.d.ts +19 -0
  68. package/dist/templates/bpmn-comment.js +20 -0
  69. package/dist/templates/bpmn-comment.js.map +1 -0
  70. package/dist/templates/bpmn-data-object.d.ts +19 -0
  71. package/dist/templates/bpmn-data-object.js +20 -0
  72. package/dist/templates/bpmn-data-object.js.map +1 -0
  73. package/dist/templates/bpmn-data-store.d.ts +17 -0
  74. package/dist/templates/bpmn-data-store.js +18 -0
  75. package/dist/templates/bpmn-data-store.js.map +1 -0
  76. package/dist/templates/bpmn-event.d.ts +17 -0
  77. package/dist/templates/bpmn-event.js +18 -0
  78. package/dist/templates/bpmn-event.js.map +1 -0
  79. package/dist/templates/bpmn-flow.d.ts +15 -0
  80. package/dist/templates/bpmn-flow.js +16 -0
  81. package/dist/templates/bpmn-flow.js.map +1 -0
  82. package/dist/templates/bpmn-gateway.d.ts +17 -0
  83. package/dist/templates/bpmn-gateway.js +18 -0
  84. package/dist/templates/bpmn-gateway.js.map +1 -0
  85. package/dist/templates/bpmn-group.d.ts +15 -0
  86. package/dist/templates/bpmn-group.js +16 -0
  87. package/dist/templates/bpmn-group.js.map +1 -0
  88. package/dist/templates/bpmn-lane.d.ts +17 -0
  89. package/dist/templates/bpmn-lane.js +18 -0
  90. package/dist/templates/bpmn-lane.js.map +1 -0
  91. package/dist/templates/bpmn-pool.d.ts +15 -0
  92. package/dist/templates/bpmn-pool.js +16 -0
  93. package/dist/templates/bpmn-pool.js.map +1 -0
  94. package/dist/templates/bpmn-subprocess.d.ts +17 -0
  95. package/dist/templates/bpmn-subprocess.js +18 -0
  96. package/dist/templates/bpmn-subprocess.js.map +1 -0
  97. package/dist/templates/bpmn-task.d.ts +17 -0
  98. package/dist/templates/bpmn-task.js +18 -0
  99. package/dist/templates/bpmn-task.js.map +1 -0
  100. package/dist/templates/index.d.ts +15 -0
  101. package/dist/templates/index.js +28 -0
  102. package/dist/templates/index.js.map +1 -0
  103. package/helps/bpmn/gateway/complex-decision-gateway-example.png +0 -0
  104. package/helps/bpmn/gateway/complex-decision-gateway.png +0 -0
  105. package/helps/bpmn/gateway/event-based-gateway-example.webp +0 -0
  106. package/helps/bpmn/gateway/exclusive-event-based-gateway-example.png +0 -0
  107. package/helps/bpmn/gateway/exclusive-event-based-gateway.webp +0 -0
  108. package/helps/bpmn/gateway/exclusive-gateway-example.webp +0 -0
  109. package/helps/bpmn/gateway/exclusive-gateway.png +0 -0
  110. package/helps/bpmn/gateway/gateway-types.webp +0 -0
  111. package/helps/bpmn/gateway/gateway.md +111 -0
  112. package/helps/bpmn/gateway/inclusive-gateway-example.webp +0 -0
  113. package/helps/bpmn/gateway/inclusive-gateway.png +0 -0
  114. package/helps/bpmn/gateway/parallel-event-based-gateway-example.png +0 -0
  115. package/helps/bpmn/gateway/parallel-event-based-gateway.png +0 -0
  116. package/helps/bpmn/gateway/parallel-gateway-example.webp +0 -0
  117. package/helps/bpmn/gateway/parallel-gateway.png +0 -0
  118. package/icons/bpmn-group.png +0 -0
  119. package/icons/bpmn-lane.png +0 -0
  120. package/icons/bpmn-pool.png +0 -0
  121. package/icons/icon-bpmn-association-flow.png +0 -0
  122. package/icons/icon-bpmn-call-activity.png +0 -0
  123. package/icons/icon-bpmn-comment.png +0 -0
  124. package/icons/icon-bpmn-data-object.png +0 -0
  125. package/icons/icon-bpmn-data-store.png +0 -0
  126. package/icons/icon-bpmn-event.png +0 -0
  127. package/icons/icon-bpmn-flow.png +0 -0
  128. package/icons/icon-bpmn-gateway.png +0 -0
  129. package/icons/icon-bpmn-group.png +0 -0
  130. package/icons/icon-bpmn-lane.png +0 -0
  131. package/icons/icon-bpmn-message-flow.png +0 -0
  132. package/icons/icon-bpmn-pool.png +0 -0
  133. package/icons/icon-bpmn-subprocess.png +0 -0
  134. package/icons/icon-bpmn-task.png +0 -0
  135. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +20 -0
  136. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +20 -0
  137. package/logs/application-2022-11-03-10.log +22 -0
  138. package/logs/application-2022-11-03-11.log +18 -0
  139. package/logs/connections-2022-11-03-10.log +70 -0
  140. package/logs/connections-2022-11-03-11.log +105 -0
  141. package/package.json +60 -0
  142. package/src/base/bpmn-activity.ts +32 -0
  143. package/src/base/bpmn-container-base.ts +201 -0
  144. package/src/base/bpmn-control-base.ts +201 -0
  145. package/src/bpmn-call-activity.ts +22 -0
  146. package/src/bpmn-comment.ts +65 -0
  147. package/src/bpmn-data-object.ts +127 -0
  148. package/src/bpmn-data-store.ts +47 -0
  149. package/src/bpmn-event.ts +442 -0
  150. package/src/bpmn-flow.ts +28 -0
  151. package/src/bpmn-gateway.ts +165 -0
  152. package/src/bpmn-group.ts +39 -0
  153. package/src/bpmn-lane.ts +46 -0
  154. package/src/bpmn-pool.ts +25 -0
  155. package/src/bpmn-subprocess.ts +165 -0
  156. package/src/bpmn-task.ts +340 -0
  157. package/src/editors/index.ts +0 -0
  158. package/src/groups/index.ts +3 -0
  159. package/src/groups/process.ts +48 -0
  160. package/src/index.ts +12 -0
  161. package/src/templates/bpmn-call-activity.ts +18 -0
  162. package/src/templates/bpmn-comment.ts +20 -0
  163. package/src/templates/bpmn-data-object.ts +20 -0
  164. package/src/templates/bpmn-data-store.ts +18 -0
  165. package/src/templates/bpmn-event.ts +18 -0
  166. package/src/templates/bpmn-flow.ts +16 -0
  167. package/src/templates/bpmn-gateway.ts +18 -0
  168. package/src/templates/bpmn-group.ts +16 -0
  169. package/src/templates/bpmn-lane.ts +18 -0
  170. package/src/templates/bpmn-pool.ts +16 -0
  171. package/src/templates/bpmn-subprocess.ts +18 -0
  172. package/src/templates/bpmn-task.ts +18 -0
  173. package/src/templates/index.ts +29 -0
  174. package/things-scene.config.js +7 -0
  175. package/translations/en.json +11 -0
  176. package/translations/ko.json +11 -0
  177. package/translations/ms.json +11 -0
  178. package/translations/zh.json +11 -0
  179. package/tsconfig.json +22 -0
  180. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,442 @@
1
+ import { Component, Properties } from '@hatiolab/things-scene'
2
+
3
+ import BPMNControlBase from './base/bpmn-control-base'
4
+
5
+ enum BEHAVIOR {
6
+ catching,
7
+ throwing
8
+ }
9
+
10
+ const NATURE = {
11
+ mutable: false,
12
+ resizable: false,
13
+ rotatable: false,
14
+ properties: [
15
+ {
16
+ type: 'select',
17
+ name: 'eventType',
18
+ label: 'event-type',
19
+ property: {
20
+ options: [
21
+ {
22
+ display: 'start',
23
+ value: 'start'
24
+ },
25
+ {
26
+ display: 'intermediate',
27
+ value: 'intermediate'
28
+ },
29
+ {
30
+ display: 'end',
31
+ value: 'end'
32
+ }
33
+ ]
34
+ }
35
+ },
36
+ {
37
+ type: 'select',
38
+ name: 'marker',
39
+ label: 'marker',
40
+ property: {
41
+ options: [
42
+ {
43
+ display: 'message',
44
+ value: 'message'
45
+ },
46
+ {
47
+ display: 'timer',
48
+ value: 'timer'
49
+ },
50
+ {
51
+ display: 'error',
52
+ value: 'error'
53
+ },
54
+ {
55
+ display: 'escalation',
56
+ value: 'escalation'
57
+ },
58
+ {
59
+ display: 'cancel',
60
+ value: 'cancel'
61
+ },
62
+ {
63
+ display: 'compensation',
64
+ value: 'compensation'
65
+ },
66
+ {
67
+ display: 'conditional',
68
+ value: 'conditional'
69
+ },
70
+ {
71
+ display: 'link',
72
+ value: 'link'
73
+ },
74
+ {
75
+ display: 'signal',
76
+ value: 'signal'
77
+ },
78
+ {
79
+ display: 'terminate',
80
+ value: 'terminate'
81
+ },
82
+ {
83
+ display: 'multiple',
84
+ value: 'multiple'
85
+ },
86
+ {
87
+ display: 'parallel multiple',
88
+ value: 'parallel-multiple'
89
+ }
90
+ ]
91
+ }
92
+ }
93
+ ],
94
+ help: '/eipatterns/bpmn-event/bpmn-event'
95
+ }
96
+
97
+ export default class BPMNEvent extends BPMNControlBase {
98
+ private imageElement?: HTMLImageElement
99
+
100
+ static get nature() {
101
+ return NATURE
102
+ }
103
+
104
+ render(ctx: CanvasRenderingContext2D) {
105
+ const { left, top, width, height } = this.bounds
106
+ const { lineWidth } = this.state
107
+ const { eventType } = this.state
108
+ const cx = width / 2
109
+ const cy = height / 2
110
+
111
+ ctx.translate(left, top)
112
+ ctx.beginPath()
113
+
114
+ switch (eventType) {
115
+ case 'intermediate':
116
+ this.setState('lineWidth', 2)
117
+
118
+ ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI)
119
+ ctx.moveTo(width / 2 + width / 2.5, height / 2)
120
+ ctx.ellipse(cx, cy, width / 2.5, height / 2.5, 0, 0, 2 * Math.PI)
121
+ break
122
+ case 'end':
123
+ this.setState('lineWidth', 6)
124
+ ctx.ellipse(cx, cy, width / 2 - 1.5, height / 2 - 1.5, 0, 0, 2 * Math.PI)
125
+ break
126
+ case 'start':
127
+ default:
128
+ this.setState('lineWidth', 2)
129
+ ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI)
130
+ break
131
+ }
132
+
133
+ this.drawFill(ctx)
134
+ this.drawStroke(ctx)
135
+
136
+ ctx.beginPath()
137
+
138
+ this.setState('lineWidth', lineWidth)
139
+
140
+ const image = this.getImageElement()
141
+ if (image) {
142
+ this.drawImage(ctx, image, width / 6, height / 6, (width * 2) / 3, (height * 2) / 3)
143
+ }
144
+
145
+ ctx.translate(-left, -top)
146
+ }
147
+
148
+ onchange(after: Properties, before: Properties) {
149
+ if ('marker' in after || 'strokeStyle' in after) {
150
+ delete this.imageElement
151
+ }
152
+ }
153
+
154
+ getImageElement(): HTMLImageElement | undefined {
155
+ if (!this.imageElement) {
156
+ const { marker, strokeStyle } = this.state
157
+
158
+ if (!marker) {
159
+ return
160
+ }
161
+
162
+ const src = IMAGES[marker]
163
+ if (!src) {
164
+ return
165
+ }
166
+
167
+ this.imageElement = new Image()
168
+ this.imageElement.src =
169
+ 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(src.replace(/{{strokeColor}}/g, strokeStyle))
170
+ }
171
+
172
+ return this.imageElement
173
+ }
174
+ }
175
+
176
+ Component.register('bpmn-event', BPMNEvent)
177
+
178
+ const IMAGES: { [type: string]: string } = {
179
+ message: `
180
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
181
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
182
+ <style type="text/css">
183
+ .st0{fill:{{strokeColor}};}
184
+ </style>
185
+ <path class="st0" d="M29.5,10.3c0-1.3-1.1-2.4-2.4-2.4H7.9c-1.3,0-2.4,1.1-2.4,2.4v14.4c0,1.3,1.1,2.4,2.4,2.4h19.2c1.3,0,2.4-1.1,2.4-2.4V10.3z
186
+ M27.1,9.3l-9.6,7l-9.6-7H27.1z M28.1,25.7H6.9v-16l10.6,8l10.6-8V25.7z"/>
187
+ </svg>
188
+ `,
189
+ 'message-fill': `
190
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
191
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
192
+ <style type="text/css">
193
+ .st0{fill:{{strokeColor}};}
194
+ </style>
195
+ <path d="M27.1,7.9H7.9c-1.3,0-2.4,1.1-2.4,2.4l0,14.4c0,1.3,1.1,2.4,2.4,2.4h19.2c1.3,0,2.4-1.1,2.4-2.4V10.3
196
+ C29.5,9,28.4,7.9,27.1,7.9z M27.1,12.7l-9.6,6l-9.6-6v-2.4l9.6,6l9.6-6V12.7z"/>
197
+ </svg>
198
+ `,
199
+ timer: `
200
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
201
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
202
+ <style type="text/css">
203
+ .st0{fill:{{strokeColor}};}
204
+ </style>
205
+ <g>
206
+ <g id="XMLID_807_">
207
+ <path class="st0" d="M17.5,9.6c0.3,0,0.6-0.3,0.6-0.6V7.2c0-0.3-0.3-0.6-0.6-0.6c-0.3,0-0.6,0.3-0.6,0.6V9C16.9,9.3,17.2,9.6,17.5,9.6z"/>
208
+ </g>
209
+ <g>
210
+ <path class="st0" d="M7.4,18.2h1.8c0.3,0,0.6-0.3,0.6-0.6c0-0.3-0.3-0.6-0.6-0.6H7.4c-0.3,0-0.6,0.3-0.6,0.6C6.8,18,7,18.2,7.4,18.2z"/>
211
+ </g>
212
+ <g>
213
+ <path class="st0" d="M17.5,28.5c0.3,0,0.6-0.3,0.6-0.6v-1.8c0-0.3-0.3-0.6-0.6-0.6c-0.3,0-0.6,0.3-0.6,0.6v1.8C16.9,28.2,17.2,28.5,17.5,28.5z
214
+ "/>
215
+ </g>
216
+ <g>
217
+ <path class="st0" d="M25.9,18.2h1.8c0.3,0,0.6-0.3,0.6-0.6c0-0.3-0.3-0.6-0.6-0.6h-1.8c-0.3,0-0.6,0.3-0.6,0.6C25.3,18,25.5,18.2,25.9,18.2z"
218
+ />
219
+ </g>
220
+ <g>
221
+ <path class="st0" d="M13.2,10.9c0.1,0,0.2,0,0.3-0.1c0.3-0.2,0.4-0.5,0.2-0.8l-0.9-1.5c-0.2-0.3-0.5-0.4-0.8-0.2c-0.3,0.2-0.4,0.5-0.2,0.8
222
+ l0.9,1.5C12.8,10.8,13,10.9,13.2,10.9z"/>
223
+ </g>
224
+ <g>
225
+ <path class="st0" d="M9,23.5c0.1,0,0.2,0,0.3-0.1l1.5-0.9c0.3-0.2,0.4-0.5,0.2-0.8c-0.2-0.3-0.5-0.4-0.8-0.2l-1.5,0.9
226
+ c-0.3,0.2-0.4,0.5-0.2,0.8C8.6,23.4,8.8,23.5,9,23.5z"/>
227
+ </g>
228
+ <g>
229
+ <path class="st0" d="M22.6,27.2c0.1,0,0.2,0,0.3-0.1c0.3-0.2,0.4-0.5,0.2-0.8l-0.9-1.5c-0.2-0.3-0.5-0.4-0.8-0.2c-0.3,0.2-0.4,0.5-0.2,0.8
230
+ l0.9,1.5C22.2,27.1,22.4,27.2,22.6,27.2z"/>
231
+ </g>
232
+ <g>
233
+ <path class="st0" d="M25.1,14.5c0.1,0,0.2,0,0.3-0.1l1.5-0.9c0.3-0.2,0.4-0.5,0.2-0.8c-0.2-0.3-0.5-0.4-0.8-0.2l-1.5,0.9
234
+ c-0.3,0.2-0.4,0.5-0.2,0.8C24.7,14.4,24.9,14.5,25.1,14.5z"/>
235
+ </g>
236
+ <g>
237
+ <path class="st0" d="M10,13.8c0.2,0,0.4-0.1,0.5-0.3c0.2-0.3,0.1-0.7-0.2-0.8l-1.5-0.9c-0.3-0.2-0.7-0.1-0.8,0.2c-0.2,0.3-0.1,0.7,0.2,0.8
238
+ l1.5,0.9C9.8,13.8,9.9,13.8,10,13.8z"/>
239
+ </g>
240
+ <g>
241
+ <path class="st0" d="M12.4,27.1c0.2,0,0.4-0.1,0.5-0.3l0.9-1.5c0.2-0.3,0.1-0.7-0.2-0.8c-0.3-0.2-0.7-0.1-0.8,0.2l-0.9,1.5
242
+ c-0.2,0.3-0.1,0.7,0.2,0.8C12.2,27.1,12.3,27.1,12.4,27.1z"/>
243
+ </g>
244
+ <g>
245
+ <path class="st0" d="M26,23.5c0.2,0,0.4-0.1,0.5-0.3c0.2-0.3,0.1-0.7-0.2-0.8l-1.5-0.9c-0.3-0.2-0.7-0.1-0.8,0.2c-0.2,0.3-0.1,0.7,0.2,0.8
246
+ l1.5,0.9C25.8,23.5,25.9,23.5,26,23.5z"/>
247
+ </g>
248
+ <g>
249
+ <path class="st0" d="M21.8,10.8c0.2,0,0.4-0.1,0.5-0.3L23.2,9c0.2-0.3,0.1-0.7-0.2-0.8c-0.3-0.2-0.7-0.1-0.8,0.2l-0.9,1.5
250
+ c-0.2,0.3-0.1,0.7,0.2,0.8C21.6,10.8,21.7,10.8,21.8,10.8z"/>
251
+ </g>
252
+ <g id="XMLID_806_">
253
+ <path class="st0" d="M17.5,17.7c0.4,0,0.7-0.3,0.7-0.7v-5.6c0-0.4-0.3-0.7-0.7-0.7c-0.4,0-0.7,0.3-0.7,0.7V17C16.8,17.4,17.1,17.7,17.5,17.7z"
254
+ />
255
+ </g>
256
+ <g id="XMLID_805_">
257
+ <path class="st0" d="M17.5,18.3h3.9c0.4,0,0.7-0.3,0.7-0.7c0-0.4-0.3-0.7-0.7-0.7h-3.9c-0.4,0-0.7,0.3-0.7,0.7C16.8,17.9,17.1,18.3,17.5,18.3z
258
+ "/>
259
+ </g>
260
+ <g>
261
+ <path class="st0" d="M17.5,7.2c5.7,0,10.2,4.6,10.2,10.2s-4.6,10.2-10.2,10.2S7.2,23.2,7.2,17.5S11.8,7.2,17.5,7.2 M17.5,6.5
262
+ c-6.1,0-11,4.9-11,11s4.9,11,11,11s11-4.9,11-11S23.6,6.5,17.5,6.5L17.5,6.5z"/>
263
+ </g>
264
+ </g>
265
+ </svg>
266
+ `,
267
+ error: `
268
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
269
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
270
+ <style type="text/css">
271
+ .st0{fill:{{strokeColor}};}
272
+ </style>
273
+ <g>
274
+ <path class="st0" d="M9.7,10.3l11.1,6.1c0.2,0.1,0.5,0.2,0.7,0.2c0.4,0,0.7-0.1,1-0.4l4.9-4.3l-2,12.7l-10.1-6c-0.2-0.1-0.5-0.2-0.8-0.2
275
+ c-0.3,0-0.7,0.1-0.9,0.3l-6,4.7L9.7,10.3 M29.5,8l-8,7.1L8.5,8l-3,19l9-7.1l12,7.1L29.5,8L29.5,8z"/>
276
+ </g>
277
+ </svg>
278
+ `,
279
+ 'error-fill': `
280
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
281
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
282
+ <style type="text/css">
283
+ .st0{fill:{{strokeColor}};}
284
+ </style>
285
+ <g>
286
+ <polygon class="st0" points="26.5,27 29.5,8 21.5,15.1 8.5,8 5.5,27 14.5,19.9 "/>
287
+ </g>
288
+ </svg>
289
+ `,
290
+ escalation: `
291
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
292
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
293
+ <style type="text/css">
294
+ .st0{fill:none;stroke:{{strokeColor}};stroke-miterlimit:10;}
295
+ </style>
296
+ <polygon class="st0" points="17.5,19.9 7.5,27 17.5,8 27.5,27 "/>
297
+ </svg>
298
+ `,
299
+ 'escalation-fill': `
300
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
301
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
302
+ <style type="text/css">
303
+ .st0{fill:{{strokeColor}};}
304
+ </style>
305
+ <polygon class="st0" points="17.5,19.9 7.5,27 17.5,8 27.5,27 "/>
306
+ </svg>
307
+ `,
308
+ cancel: `
309
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
310
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
311
+ <style type="text/css">
312
+ .st0{fill:{{strokeColor}};}
313
+ </style>
314
+ <path class="st0" d="M24.4,8.8l1.8,1.8l-6.9,6.9l6.9,6.9l-1.8,1.8l-6.9-6.9l-6.9,6.9l-1.8-1.8l6.9-6.9l-6.9-6.9l1.8-1.8l6.9,6.9L24.4,8.8
315
+ M24.4,7.4l-0.7,0.7l-6.2,6.2l-6.2-6.2l-0.7-0.7L9.9,8.1L8.1,9.9l-0.7,0.7l0.7,0.7l6.2,6.2l-6.2,6.2l-0.7,0.7l0.7,0.7l1.8,1.8
316
+ l0.7,0.7l0.7-0.7l6.2-6.2l6.2,6.2l0.7,0.7l0.7-0.7l1.8-1.8l0.7-0.7l-0.7-0.7l-6.2-6.2l6.2-6.2l0.7-0.7l-0.7-0.7l-1.8-1.8L24.4,7.4
317
+ L24.4,7.4z"/>
318
+ </svg>
319
+ `,
320
+ 'cancel-fill': `
321
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
322
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
323
+ <style type="text/css">
324
+ .st0{fill:{{strokeColor}};}
325
+ </style>
326
+ <g>
327
+ <rect class="st0" x="6.5" y="16.3" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -7.2487 17.5)" width="22" height="2.5"/>
328
+ </g>
329
+ <g>
330
+ <rect class="st0" x="16.2" y="6.5" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -7.2487 17.5)" width="2.5" height="22"/>
331
+ </g>
332
+ </svg>
333
+ `,
334
+ compensation: `
335
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
336
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
337
+ <style type="text/css">
338
+ .st0{fill:{{strokeColor}};}
339
+ </style>
340
+ <path class="st0" d="M17,10.4v14.2l-7.1-7.1L17,10.4 M18,8l-9.5,9.5L18,27V8L18,8z M8.5,17.5L8.5,17.5L8.5,17.5L8.5,17.5L8.5,17.5z"/>
341
+ <path class="st0" d="M25.5,10.4v14.2l-7.1-7.1L25.5,10.4 M26.5,8L17,17.5l9.5,9.5V8L26.5,8z M17,17.5L17,17.5L17,17.5L17,17.5L17,17.5z"/>
342
+ </svg>
343
+ `,
344
+ 'compensation-fill': `
345
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
346
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
347
+ <style type="text/css">
348
+ .st0{fill:{{strokeColor}};}
349
+ </style>
350
+ <polygon class="st0" points="8.5,17.5 18,8 18,27 8.5,17.5 "/>
351
+ <polygon class="st0" points="17,17.5 26.5,8 26.5,27 17,17.5 "/>
352
+ </svg>
353
+ `,
354
+ conditional: `
355
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
356
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
357
+ <style type="text/css">
358
+ .st0{fill:{{strokeColor}};}
359
+ </style>
360
+ <g>
361
+ <path class="st0" d="M28.6,11.1v14.8H6.5V11.1h20.3 M26.8,8H8.2c-1.5,0-2.7,1-2.7,2.1v15.8c0,1.2,1.2,1.1,2.7,1.1h18.7c1.5,0,2.7,0.1,2.7-1.1
362
+ V10.1C29.5,8.9,28.3,8,26.8,8L26.8,8z"/>
363
+ </g>
364
+ <path class="st0" d="M27.5,23.5h-20v-1h20V23.5z M27.5,17.8h-20v-1h20V17.8z M27.5,14.9h-20v-1h20V14.9z M27.5,20.6h-20v-1h20V20.6z"/>
365
+ </svg>
366
+ `,
367
+ link: `
368
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
369
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
370
+ <style type="text/css">
371
+ .st0{fill:none;stroke:{{strokeColor}};stroke-miterlimit:10;}
372
+ </style>
373
+ <path class="st0" d="M19,13.8V8l9.5,9.5L19,27v-5.8H6.5v-7.5H19z"/>
374
+ </svg>
375
+ `,
376
+ 'link-fill': `
377
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
378
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
379
+ <style type="text/css">
380
+ .st0{fill:{{strokeColor}};}
381
+ </style>
382
+ <path class="st0" d="M19,13.8V8l9.5,9.5L19,27v-5.8H6.5v-7.5H19z"/>
383
+ </svg>
384
+ `,
385
+ signal: `
386
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
387
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
388
+ <style type="text/css">
389
+ .st0{fill:none;stroke:{{strokeColor}};stroke-miterlimit:10;}
390
+ </style>
391
+ <polygon class="st0" points="17.5,26.9 7.5,27 17.5,8 27.5,27 "/>
392
+ </svg>
393
+ `,
394
+ 'signal-fill': `
395
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
396
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
397
+ <style type="text/css">
398
+ .st0{fill:{{strokeColor}};}
399
+ </style>
400
+ <polygon class="st0" points="17.5,26.9 7.5,27 17.5,8 27.5,27 "/>
401
+ </svg>
402
+ `,
403
+ terminate: `
404
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
405
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
406
+ <style type="text/css">
407
+ .st0{fill:{{strokeColor}};}
408
+ </style>
409
+ <circle class="st0" cx="17.5" cy="17.5" r="11.5"/>
410
+ </svg>
411
+ `,
412
+ multiple: `
413
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
414
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
415
+ <style type="text/css">
416
+ .st0{stroke:{{strokeColor}};}
417
+ </style>
418
+ <path class="st0" d="M17.5,9.2l8.8,6.4L23,26H12L8.7,15.6L17.5,9.2 M17.5,8l-10,7.3L11.3,27h12.4l3.8-11.8L17.5,8L17.5,8z"/>
419
+ </svg>
420
+ `,
421
+ 'multiple-fill': `
422
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
423
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
424
+ <style type="text/css">
425
+ .st0{fill:{{strokeColor}};}
426
+ </style>
427
+ <polygon class="st0" points="17.5,8 7.5,15.3 11.3,27 23.7,27 27.5,15.3 "/>
428
+ </svg>
429
+ `,
430
+ 'parallel-multiple': `
431
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
432
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
433
+ <style type="text/css">
434
+ .st0{fill:none;stroke:{{strokeColor}};stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
435
+ .st1{fill:{{strokeColor}};}
436
+ </style>
437
+ <path class="st1" d="M18.4,10v6.6H25l0,1.7h-6.6V25h-1.7l0-6.6H10v-1.7h6.6V10H18.4 M19.4,9h-1h-1.7h-1v1v5.6H10H9v1v1.7v1h1h5.6l0,5.6v1h1h1.7
438
+ h1v-1v-5.6H25h1l0-1l0-1.7l0-1h-1h-5.6V10V9L19.4,9z"/>
439
+ <circle class="st0" cx="17.5" cy="17.5" r="12"/>
440
+ </svg>
441
+ `
442
+ }
@@ -0,0 +1,28 @@
1
+ import { Component, OrthoLine } from '@hatiolab/things-scene'
2
+
3
+ const NATURE = {
4
+ mutable: false,
5
+ resizable: false,
6
+ rotatable: false,
7
+ properties: [
8
+ {
9
+ type: 'number',
10
+ label: 'round',
11
+ name: 'round',
12
+ property: {
13
+ min: 0,
14
+ max: 100,
15
+ step: 1
16
+ }
17
+ }
18
+ ],
19
+ help: 'scene/component/bpmn-flow'
20
+ }
21
+
22
+ export default class BPMNFlow extends OrthoLine {
23
+ get nature() {
24
+ return NATURE
25
+ }
26
+ }
27
+
28
+ Component.register('bpmn-flow', BPMNFlow)
@@ -0,0 +1,165 @@
1
+ import { Component, Properties } from '@hatiolab/things-scene'
2
+
3
+ import BPMNControlBase from './base/bpmn-control-base'
4
+
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: false,
8
+ rotatable: false,
9
+ properties: [
10
+ {
11
+ type: 'select',
12
+ label: 'gateway-type',
13
+ name: 'gatewayType',
14
+ property: {
15
+ options: [
16
+ {
17
+ display: '',
18
+ value: ''
19
+ },
20
+ {
21
+ display: 'exclusive',
22
+ value: 'exclusive'
23
+ },
24
+ {
25
+ display: 'inclusive',
26
+ value: 'inclusive'
27
+ },
28
+ {
29
+ display: 'complex',
30
+ value: 'complex'
31
+ },
32
+ {
33
+ display: 'event based',
34
+ value: 'event-based'
35
+ },
36
+ {
37
+ display: 'parallel',
38
+ value: 'parallel'
39
+ }
40
+ ]
41
+ }
42
+ }
43
+ ],
44
+ help: '/eipatterns/bpmn-gateway/bpmn-gateway'
45
+ }
46
+
47
+ export default class BPMNGateway extends BPMNControlBase {
48
+ private imageElement?: HTMLImageElement
49
+
50
+ static get nature() {
51
+ return NATURE
52
+ }
53
+
54
+ render(ctx: CanvasRenderingContext2D) {
55
+ var { left, top, width, height } = this.bounds
56
+
57
+ ctx.translate(left, top)
58
+ ctx.beginPath()
59
+
60
+ ctx.moveTo(width / 2, 0)
61
+ ctx.lineTo(width, height / 2)
62
+ ctx.lineTo(width / 2, height)
63
+ ctx.lineTo(0, height / 2)
64
+ ctx.lineTo(width / 2, 0)
65
+
66
+ this.drawFill(ctx)
67
+ this.drawStroke(ctx)
68
+
69
+ ctx.beginPath()
70
+
71
+ const image = this.getImageElement()
72
+ if (image) {
73
+ this.drawImage(ctx, image, width / 6, height / 6, (width * 2) / 3, (height * 2) / 3)
74
+ }
75
+
76
+ ctx.translate(-left, -top)
77
+ }
78
+
79
+ onchange(after: Properties, before: Properties) {
80
+ if ('gatewayType' in after || 'strokeStyle' in after) {
81
+ delete this.imageElement
82
+ }
83
+ }
84
+
85
+ getImageElement(): HTMLImageElement | undefined {
86
+ if (!this.imageElement) {
87
+ const { gatewayType, strokeStyle } = this.state
88
+
89
+ if (!gatewayType) {
90
+ return
91
+ }
92
+
93
+ const src = IMAGES[gatewayType]
94
+ if (!src) {
95
+ return
96
+ }
97
+
98
+ this.imageElement = new Image()
99
+ this.imageElement.src =
100
+ 'data:image/svg+xml;charset=UTF-8;base64,' + btoa(src.replace(/{{strokeColor}}/g, strokeStyle))
101
+ }
102
+
103
+ return this.imageElement
104
+ }
105
+ }
106
+
107
+ Component.register('bpmn-gateway', BPMNGateway)
108
+
109
+ const IMAGES: { [type: string]: string } = {
110
+ inclusive: `
111
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
112
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
113
+ <style type="text/css">
114
+ .st0{fill:{{strokeColor}};}
115
+ </style>
116
+ <path class="st0" d="M17.5,8.5c5,0,9,4,9,9s-4,9-9,9s-9-4-9-9S12.5,8.5,17.5,8.5 M17.5,6C11.1,6,6,11.1,6,17.5S11.1,29,17.5,29S29,23.9,29,17.5
117
+ S23.9,6,17.5,6L17.5,6z"/>
118
+ </svg>
119
+ `,
120
+ exclusive: `
121
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
122
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
123
+ <style type="text/css">
124
+ .st0{fill:{{strokeColor}};}
125
+ </style>
126
+ <rect class="st0" x="6.5" y="15.8" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -7.2487 17.5)" width="22" height="3.5"/>
127
+ <rect class="st0" x="15.8" y="6.5" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -7.2487 17.5)" width="3.5" height="22"/>
128
+ </svg>
129
+ `,
130
+ parallel: `
131
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
132
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
133
+ <style type="text/css">
134
+ .st0{fill:{{strokeColor}};}
135
+ </style>
136
+ <rect class="st0" x="16.3" y="6.5" width="3.5" height="22"/>
137
+ <rect class="st0" x="6.5" y="16.2" width="22" height="3.5"/>
138
+ </svg>
139
+ `,
140
+ complex: `
141
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
142
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
143
+ <style type="text/css">
144
+ .st0{fill:{{strokeColor}};}
145
+ </style>
146
+ <rect class="st0" x="16.2" y="6.5" width="3.5" height="22"/>
147
+ <rect class="st0" x="6.5" y="16.2" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -7.2487 17.5)" width="22" height="3.5"/>
148
+ <rect class="st0" x="16.2" y="6.5" transform="matrix(0.7072 -0.707 0.707 0.7072 -7.2487 17.4966)" width="3.5" height="22"/>
149
+ <rect class="st0" x="6.5" y="16.2" width="22" height="3.5"/>
150
+ </svg>
151
+ `,
152
+ 'event-based': `
153
+ <svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
154
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
155
+ <style type="text/css">
156
+ .st0{fill:{{strokeColor}};}
157
+ </style>
158
+ <path class="st0" d="M17.5,6.2c6.2,0,11.2,5,11.2,11.2s-5,11.2-11.2,11.2s-11.2-5-11.2-11.2S11.3,6.2,17.5,6.2 M17.5,5.5c-6.6,0-12,5.4-12,12
159
+ s5.4,12,12,12s12-5.4,12-12S24.1,5.5,17.5,5.5L17.5,5.5z"/>
160
+ <path class="st0" d="M17.5,8.2c5.1,0,9.2,4.1,9.2,9.2s-4.1,9.2-9.2,9.2s-9.2-4.1-9.2-9.2S12.4,8.2,17.5,8.2 M17.5,7.5c-5.5,0-10,4.5-10,10
161
+ s4.5,10,10,10s10-4.5,10-10S23,7.5,17.5,7.5L17.5,7.5z"/>
162
+ <path class="st0" d="M17.5,11.7l5.7,4.1L21,22.5h-7l-2.2-6.7L17.5,11.7 M17.5,10l-7.3,5.3l2.8,8.6h9l2.8-8.6L17.5,10L17.5,10z"/>
163
+ </svg>
164
+ `
165
+ }
@@ -0,0 +1,39 @@
1
+ import { Component } from '@hatiolab/things-scene'
2
+
3
+ import BPMNControlBase, { DIRECTION, INOUT, NODE, FLOW } from './base/bpmn-control-base'
4
+
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: false,
9
+ properties: [],
10
+ help: '/eipatterns/bpmn-group/bpmn-group'
11
+ }
12
+
13
+ export default class BPMNGroup extends BPMNControlBase {
14
+ static get nature() {
15
+ return NATURE
16
+ }
17
+
18
+ get nodes(): NODE[] {
19
+ return [
20
+ {
21
+ name: 'In',
22
+ description: 'Message inlet',
23
+ inout: INOUT.IN,
24
+ type: FLOW.MESSAGE,
25
+ direction: DIRECTION.WEST,
26
+ multiplicity: 1
27
+ },
28
+ {
29
+ name: 'Out',
30
+ description: 'Message outlet',
31
+ inout: INOUT.OUT,
32
+ type: FLOW.MESSAGE,
33
+ direction: DIRECTION.EAST
34
+ }
35
+ ]
36
+ }
37
+ }
38
+
39
+ Component.register('bpmn-group', BPMNGroup)