bpmn-js 17.6.1 → 17.6.2

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 (338) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +93 -93
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +25393 -25381
  5. package/dist/bpmn-modeler.production.min.js +2 -2
  6. package/dist/bpmn-navigated-viewer.development.js +21134 -21134
  7. package/dist/bpmn-navigated-viewer.production.min.js +1 -1
  8. package/dist/bpmn-viewer.development.js +21059 -21059
  9. package/dist/bpmn-viewer.production.min.js +1 -1
  10. package/index.js +2 -2
  11. package/lib/BaseModeler.d.ts +15 -15
  12. package/lib/BaseModeler.js +79 -79
  13. package/lib/BaseViewer.d.ts +352 -352
  14. package/lib/BaseViewer.js +858 -858
  15. package/lib/Modeler.d.ts +86 -86
  16. package/lib/Modeler.js +204 -204
  17. package/lib/NavigatedViewer.d.ts +11 -11
  18. package/lib/NavigatedViewer.js +37 -37
  19. package/lib/Viewer.d.ts +47 -47
  20. package/lib/Viewer.js +78 -78
  21. package/lib/core/index.d.ts +10 -10
  22. package/lib/core/index.js +8 -8
  23. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  24. package/lib/draw/BpmnRenderUtil.js +256 -256
  25. package/lib/draw/BpmnRenderer.d.ts +114 -114
  26. package/lib/draw/BpmnRenderer.js +2340 -2340
  27. package/lib/draw/PathMap.d.ts +330 -330
  28. package/lib/draw/PathMap.js +478 -478
  29. package/lib/draw/TextRenderer.d.ts +74 -74
  30. package/lib/draw/TextRenderer.js +136 -136
  31. package/lib/draw/index.d.ts +10 -10
  32. package/lib/draw/index.js +11 -11
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  34. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  35. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  36. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  37. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  38. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  39. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  40. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  41. package/lib/features/align-elements/index.d.ts +11 -11
  42. package/lib/features/align-elements/index.js +23 -23
  43. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  44. package/lib/features/append-preview/AppendPreview.js +108 -108
  45. package/lib/features/append-preview/index.d.ts +16 -16
  46. package/lib/features/append-preview/index.js +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.d.ts +13 -13
  48. package/lib/features/auto-place/BpmnAutoPlace.js +20 -20
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +47 -47
  50. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +225 -225
  51. package/lib/features/auto-place/index.d.ts +7 -7
  52. package/lib/features/auto-place/index.js +8 -8
  53. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  54. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  56. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  57. package/lib/features/auto-resize/index.d.ts +8 -8
  58. package/lib/features/auto-resize/index.js +12 -12
  59. package/lib/features/context-pad/ContextPadProvider.d.ts +73 -73
  60. package/lib/features/context-pad/ContextPadProvider.js +591 -591
  61. package/lib/features/context-pad/index.d.ts +7 -7
  62. package/lib/features/context-pad/index.js +22 -22
  63. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  64. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  65. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  66. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  67. package/lib/features/copy-paste/index.d.ts +9 -9
  68. package/lib/features/copy-paste/index.js +13 -13
  69. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  70. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  71. package/lib/features/di-ordering/index.d.ts +6 -6
  72. package/lib/features/di-ordering/index.js +7 -7
  73. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  74. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  75. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  76. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  78. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  79. package/lib/features/distribute-elements/index.d.ts +9 -9
  80. package/lib/features/distribute-elements/index.js +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  82. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  83. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  84. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  86. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  87. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  88. package/lib/features/drilldown/SubprocessCompatibility.js +268 -268
  89. package/lib/features/drilldown/index.d.ts +13 -13
  90. package/lib/features/drilldown/index.js +16 -16
  91. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  92. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  93. package/lib/features/editor-actions/index.d.ts +6 -6
  94. package/lib/features/editor-actions/index.js +10 -10
  95. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  96. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  98. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  99. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  100. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  101. package/lib/features/grid-snapping/index.d.ts +11 -11
  102. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  103. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  104. package/lib/features/interaction-events/index.d.ts +6 -6
  105. package/lib/features/interaction-events/index.js +5 -5
  106. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  107. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  108. package/lib/features/keyboard/index.d.ts +7 -7
  109. package/lib/features/keyboard/index.js +11 -11
  110. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  111. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  112. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  113. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  114. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  115. package/lib/features/label-editing/LabelUtil.js +4 -4
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  117. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  118. package/lib/features/label-editing/index.d.ts +9 -9
  119. package/lib/features/label-editing/index.js +21 -21
  120. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  121. package/lib/features/modeling/BpmnFactory.js +180 -180
  122. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  123. package/lib/features/modeling/BpmnLayouter.js +481 -481
  124. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  125. package/lib/features/modeling/BpmnUpdater.js +837 -837
  126. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  127. package/lib/features/modeling/ElementFactory.js +406 -406
  128. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  129. package/lib/features/modeling/Modeling.d.ts +150 -150
  130. package/lib/features/modeling/Modeling.js +307 -307
  131. package/lib/features/modeling/Modeling.test.ts +147 -147
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  133. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  134. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  135. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  136. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  137. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  140. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  142. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  143. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  144. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  146. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  148. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  150. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  151. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  154. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  155. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  157. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  159. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  160. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  161. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  162. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  163. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  164. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  165. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  166. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  167. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  168. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  169. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  170. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  171. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  172. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  173. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  174. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  175. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  176. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  177. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  178. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  179. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +54 -54
  180. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  181. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  182. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  183. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  184. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  185. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  186. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  188. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  190. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  192. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  194. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  196. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  198. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  200. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  202. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  204. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  206. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  207. package/lib/features/modeling/behavior/index.d.ts +2 -2
  208. package/lib/features/modeling/behavior/index.js +128 -128
  209. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  210. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  212. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  213. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  215. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  216. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  217. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  219. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  220. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  221. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  223. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  224. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  225. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  226. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  227. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  228. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  230. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  231. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  232. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  233. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  235. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  237. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  239. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  241. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  242. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  243. package/lib/features/modeling/index.d.ts +27 -27
  244. package/lib/features/modeling/index.js +45 -45
  245. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  246. package/lib/features/modeling/util/LaneUtil.js +188 -188
  247. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  248. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  249. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  250. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  251. package/lib/features/modeling-feedback/index.d.ts +7 -7
  252. package/lib/features/modeling-feedback/index.js +12 -12
  253. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  254. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  255. package/lib/features/ordering/index.d.ts +6 -6
  256. package/lib/features/ordering/index.js +5 -5
  257. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  258. package/lib/features/outline/OutlineProvider.js +179 -179
  259. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  260. package/lib/features/outline/OutlineUtil.js +31 -31
  261. package/lib/features/outline/index.d.ts +7 -7
  262. package/lib/features/outline/index.js +10 -10
  263. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  264. package/lib/features/palette/PaletteProvider.js +214 -214
  265. package/lib/features/palette/index.d.ts +9 -9
  266. package/lib/features/palette/index.js +23 -23
  267. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  268. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  269. package/lib/features/popup-menu/index.d.ts +11 -11
  270. package/lib/features/popup-menu/index.js +16 -16
  271. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  272. package/lib/features/popup-menu/util/Icons.js +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  274. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  275. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  276. package/lib/features/replace/BpmnReplace.js +382 -382
  277. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  278. package/lib/features/replace/ReplaceOptions.js +919 -919
  279. package/lib/features/replace/index.d.ts +9 -9
  280. package/lib/features/replace/index.js +14 -14
  281. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  282. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  283. package/lib/features/replace-preview/index.d.ts +7 -7
  284. package/lib/features/replace-preview/index.js +11 -11
  285. package/lib/features/rules/BpmnRules.d.ts +181 -181
  286. package/lib/features/rules/BpmnRules.js +1191 -1191
  287. package/lib/features/rules/index.d.ts +7 -7
  288. package/lib/features/rules/index.js +11 -11
  289. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  290. package/lib/features/search/BpmnSearchProvider.js +136 -136
  291. package/lib/features/search/index.d.ts +7 -7
  292. package/lib/features/search/index.js +12 -12
  293. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  295. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  296. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  297. package/lib/features/snapping/index.d.ts +9 -9
  298. package/lib/features/snapping/index.js +12 -12
  299. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  300. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  301. package/lib/features/space-tool/index.d.ts +6 -6
  302. package/lib/features/space-tool/index.js +7 -7
  303. package/lib/import/BpmnImporter.d.ts +51 -51
  304. package/lib/import/BpmnImporter.js +363 -363
  305. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  306. package/lib/import/BpmnTreeWalker.js +453 -453
  307. package/lib/import/Importer.d.ts +25 -25
  308. package/lib/import/Importer.js +217 -217
  309. package/lib/import/Util.d.ts +1 -1
  310. package/lib/import/Util.js +6 -6
  311. package/lib/import/index.d.ts +6 -6
  312. package/lib/import/index.js +9 -9
  313. package/lib/model/Types.d.ts +25 -25
  314. package/lib/model/Types.ts +40 -40
  315. package/lib/util/CompatibilityUtil.d.ts +8 -8
  316. package/lib/util/CompatibilityUtil.js +29 -29
  317. package/lib/util/DiUtil.d.ts +60 -60
  318. package/lib/util/DiUtil.js +122 -122
  319. package/lib/util/DrilldownUtil.d.ts +39 -39
  320. package/lib/util/DrilldownUtil.js +69 -69
  321. package/lib/util/LabelUtil.d.ts +83 -83
  322. package/lib/util/LabelUtil.js +262 -262
  323. package/lib/util/ModelUtil.d.ts +40 -40
  324. package/lib/util/ModelUtil.js +58 -58
  325. package/lib/util/PoweredByUtil.d.ts +8 -8
  326. package/lib/util/PoweredByUtil.js +99 -99
  327. package/lib/util/Types.js +4 -4
  328. package/lib/util/Types.ts +3 -3
  329. package/package.json +132 -132
  330. package/test/helper/TranslationCollector.js +15 -15
  331. package/test/helper/index.js +313 -313
  332. package/test/matchers/BoundsMatchers.js +252 -252
  333. package/test/matchers/ConnectionMatchers.js +165 -165
  334. package/test/matchers/JSONMatcher.js +19 -19
  335. package/test/util/KeyEvents.js +22 -22
  336. package/test/util/MockEvents.js +61 -61
  337. package/test/util/custom-rules/CustomRules.js +16 -16
  338. package/test/util/custom-rules/index.js +6 -6
@@ -1,680 +1,680 @@
1
- import {
2
- getBusinessObject,
3
- is
4
- } from '../../util/ModelUtil';
5
-
6
- import {
7
- isEventSubProcess,
8
- isExpanded
9
- } from '../../util/DiUtil';
10
-
11
- import {
12
- isDifferentType
13
- } from './util/TypeUtil';
14
-
15
- import {
16
- forEach,
17
- filter,
18
- isArray
19
- } from 'min-dash';
20
-
21
- import * as replaceOptions from '../replace/ReplaceOptions';
22
- import { canBeNonInterrupting, getInterruptingProperty } from '../modeling/behavior/util/NonInterruptingUtil';
23
- import Icons from './util/Icons';
24
-
25
- /**
26
- * @typedef {import('../modeling/BpmnFactory').default} BpmnFactory
27
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu
28
- * @typedef {import('../modeling/Modeling').default} Modeling
29
- * @typedef {import('../replace/BpmnReplace').default} BpmnReplace
30
- * @typedef {import('diagram-js/lib/features/Rules').default} Rules
31
- * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
32
- * @typedef {import('../copy-paste/ModdleCopy').default} ModdleCopy
33
- *
34
- * @typedef {import('../../model/Types').Element} Element
35
- * @typedef {import('../../model/Types').Moddle} Moddle
36
- *
37
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntries} PopupMenuEntries
38
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntry} PopupMenuEntry
39
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntryAction} PopupMenuEntryAction
40
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuHeaderEntries} PopupMenuHeaderEntries
41
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').default} PopupMenuProvider
42
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget
43
- *
44
- * @typedef {import('./ReplaceOptions').ReplaceOption} ReplaceOption
45
- */
46
-
47
- /**
48
- * A BPMN-specific popup menu provider.
49
- *
50
- * @implements {PopupMenuProvider}
51
- *
52
- * @param {BpmnFactory} bpmnFactory
53
- * @param {PopupMenu} popupMenu
54
- * @param {Modeling} modeling
55
- * @param {Moddle} moddle
56
- * @param {BpmnReplace} bpmnReplace
57
- * @param {Rules} rules
58
- * @param {Translate} translate
59
- * @param {ModdleCopy} moddleCopy
60
- */
61
- export default function ReplaceMenuProvider(
62
- bpmnFactory, popupMenu, modeling, moddle,
63
- bpmnReplace, rules, translate, moddleCopy) {
64
-
65
- this._bpmnFactory = bpmnFactory;
66
- this._popupMenu = popupMenu;
67
- this._modeling = modeling;
68
- this._moddle = moddle;
69
- this._bpmnReplace = bpmnReplace;
70
- this._rules = rules;
71
- this._translate = translate;
72
- this._moddleCopy = moddleCopy;
73
-
74
- this._register();
75
- }
76
-
77
- ReplaceMenuProvider.$inject = [
78
- 'bpmnFactory',
79
- 'popupMenu',
80
- 'modeling',
81
- 'moddle',
82
- 'bpmnReplace',
83
- 'rules',
84
- 'translate',
85
- 'moddleCopy'
86
- ];
87
-
88
- ReplaceMenuProvider.prototype._register = function() {
89
- this._popupMenu.registerProvider('bpmn-replace', this);
90
- };
91
-
92
- /**
93
- * @param {PopupMenuTarget} target
94
- *
95
- * @return {PopupMenuEntries}
96
- */
97
- ReplaceMenuProvider.prototype.getPopupMenuEntries = function(target) {
98
-
99
- var businessObject = target.businessObject;
100
-
101
- var rules = this._rules;
102
-
103
- var filteredReplaceOptions = [];
104
-
105
- if (isArray(target) || !rules.allowed('shape.replace', { element: target })) {
106
- return {};
107
- }
108
-
109
- var differentType = isDifferentType(target);
110
-
111
- if (is(businessObject, 'bpmn:DataObjectReference')) {
112
- return this._createEntries(target, replaceOptions.DATA_OBJECT_REFERENCE);
113
- }
114
-
115
- if (is(businessObject, 'bpmn:DataStoreReference') && !is(target.parent, 'bpmn:Collaboration')) {
116
- return this._createEntries(target, replaceOptions.DATA_STORE_REFERENCE);
117
- }
118
-
119
- // start events outside sub processes
120
- if (is(businessObject, 'bpmn:StartEvent') && !is(businessObject.$parent, 'bpmn:SubProcess')) {
121
-
122
- filteredReplaceOptions = filter(replaceOptions.START_EVENT, differentType);
123
-
124
- return this._createEntries(target, filteredReplaceOptions);
125
- }
126
-
127
- // expanded/collapsed pools
128
- if (is(businessObject, 'bpmn:Participant')) {
129
-
130
- filteredReplaceOptions = filter(replaceOptions.PARTICIPANT, function(replaceOption) {
131
- return isExpanded(target) !== replaceOption.target.isExpanded;
132
- });
133
-
134
- return this._createEntries(target, filteredReplaceOptions);
135
- }
136
-
137
- // start events inside event sub processes
138
- if (is(businessObject, 'bpmn:StartEvent') && isEventSubProcess(businessObject.$parent)) {
139
- filteredReplaceOptions = filter(replaceOptions.EVENT_SUB_PROCESS_START_EVENT, function(replaceOption) {
140
-
141
- var target = replaceOption.target;
142
-
143
- var isInterrupting = target.isInterrupting !== false;
144
-
145
- var isInterruptingEqual = businessObject.isInterrupting === isInterrupting;
146
-
147
- // filters elements which types and event definition are equal but have have different interrupting types
148
- return differentType(replaceOption) || !differentType(replaceOption) && !isInterruptingEqual;
149
-
150
- });
151
-
152
- return this._createEntries(target, filteredReplaceOptions);
153
- }
154
-
155
- // start events inside sub processes
156
- if (is(businessObject, 'bpmn:StartEvent') && !isEventSubProcess(businessObject.$parent)
157
- && is(businessObject.$parent, 'bpmn:SubProcess')) {
158
- filteredReplaceOptions = filter(replaceOptions.START_EVENT_SUB_PROCESS, differentType);
159
-
160
- return this._createEntries(target, filteredReplaceOptions);
161
- }
162
-
163
- // end events
164
- if (is(businessObject, 'bpmn:EndEvent')) {
165
-
166
- filteredReplaceOptions = filter(replaceOptions.END_EVENT, function(replaceOption) {
167
- var target = replaceOption.target;
168
-
169
- // hide cancel end events outside transactions
170
- if (target.eventDefinitionType == 'bpmn:CancelEventDefinition' && !is(businessObject.$parent, 'bpmn:Transaction')) {
171
- return false;
172
- }
173
-
174
- return differentType(replaceOption);
175
- });
176
-
177
- return this._createEntries(target, filteredReplaceOptions);
178
- }
179
-
180
- // boundary events
181
- if (is(businessObject, 'bpmn:BoundaryEvent')) {
182
-
183
- filteredReplaceOptions = filter(replaceOptions.BOUNDARY_EVENT, function(replaceOption) {
184
-
185
- var target = replaceOption.target;
186
-
187
- if (target.eventDefinitionType == 'bpmn:CancelEventDefinition' &&
188
- !is(businessObject.attachedToRef, 'bpmn:Transaction')) {
189
- return false;
190
- }
191
- var cancelActivity = target.cancelActivity !== false;
192
-
193
- var isCancelActivityEqual = businessObject.cancelActivity == cancelActivity;
194
-
195
- return differentType(replaceOption) || !differentType(replaceOption) && !isCancelActivityEqual;
196
- });
197
-
198
- return this._createEntries(target, filteredReplaceOptions);
199
- }
200
-
201
- // intermediate events
202
- if (is(businessObject, 'bpmn:IntermediateCatchEvent') ||
203
- is(businessObject, 'bpmn:IntermediateThrowEvent')) {
204
-
205
- filteredReplaceOptions = filter(replaceOptions.INTERMEDIATE_EVENT, differentType);
206
-
207
- return this._createEntries(target, filteredReplaceOptions);
208
- }
209
-
210
- // gateways
211
- if (is(businessObject, 'bpmn:Gateway')) {
212
-
213
- filteredReplaceOptions = filter(replaceOptions.GATEWAY, differentType);
214
-
215
- return this._createEntries(target, filteredReplaceOptions);
216
- }
217
-
218
- // transactions
219
- if (is(businessObject, 'bpmn:Transaction')) {
220
-
221
- filteredReplaceOptions = filter(replaceOptions.TRANSACTION, differentType);
222
-
223
- return this._createEntries(target, filteredReplaceOptions);
224
- }
225
-
226
- // expanded event sub processes
227
- if (isEventSubProcess(businessObject) && isExpanded(target)) {
228
-
229
- filteredReplaceOptions = filter(replaceOptions.EVENT_SUB_PROCESS, differentType);
230
-
231
- return this._createEntries(target, filteredReplaceOptions);
232
- }
233
-
234
- // expanded sub processes
235
- if (is(businessObject, 'bpmn:SubProcess') && isExpanded(target)) {
236
-
237
- filteredReplaceOptions = filter(replaceOptions.SUBPROCESS_EXPANDED, differentType);
238
-
239
- return this._createEntries(target, filteredReplaceOptions);
240
- }
241
-
242
- // collapsed ad hoc sub processes
243
- if (is(businessObject, 'bpmn:AdHocSubProcess') && !isExpanded(target)) {
244
-
245
- filteredReplaceOptions = filter(replaceOptions.TASK, function(replaceOption) {
246
-
247
- var target = replaceOption.target;
248
-
249
- var isTargetSubProcess = target.type === 'bpmn:SubProcess';
250
-
251
- var isTargetExpanded = target.isExpanded === true;
252
-
253
- return isDifferentType(target, target) && (!isTargetSubProcess || isTargetExpanded);
254
- });
255
-
256
- return this._createEntries(target, filteredReplaceOptions);
257
- }
258
-
259
- // sequence flows
260
- if (is(businessObject, 'bpmn:SequenceFlow')) {
261
- return this._createSequenceFlowEntries(target, replaceOptions.SEQUENCE_FLOW);
262
- }
263
-
264
- // flow nodes
265
- if (is(businessObject, 'bpmn:FlowNode')) {
266
- filteredReplaceOptions = filter(replaceOptions.TASK, differentType);
267
-
268
- // collapsed sub process cannot be replaced with itself
269
- if (is(businessObject, 'bpmn:SubProcess') && !isExpanded(target)) {
270
- filteredReplaceOptions = filter(filteredReplaceOptions, function(replaceOption) {
271
- return replaceOption.label !== 'Sub-process (collapsed)';
272
- });
273
- }
274
-
275
- return this._createEntries(target, filteredReplaceOptions);
276
- }
277
-
278
- return {};
279
- };
280
-
281
- /**
282
- * @param {PopupMenuTarget} target
283
- *
284
- * @return {PopupMenuHeaderEntries}
285
- */
286
- ReplaceMenuProvider.prototype.getPopupMenuHeaderEntries = function(target) {
287
-
288
- var headerEntries = {};
289
-
290
- if (is(target, 'bpmn:Activity') && !isEventSubProcess(target)) {
291
- headerEntries = {
292
- ...headerEntries,
293
- ...this._getLoopCharacteristicsHeaderEntries(target)
294
- };
295
- }
296
-
297
- if (is(target, 'bpmn:DataObjectReference')) {
298
- headerEntries = {
299
- ...headerEntries,
300
- ...this._getCollectionHeaderEntries(target)
301
- };
302
- }
303
-
304
- if (is(target, 'bpmn:Participant')) {
305
- headerEntries = {
306
- ...headerEntries,
307
- ...this._getParticipantMultiplicityHeaderEntries(target)
308
- };
309
- }
310
-
311
- if (is(target, 'bpmn:SubProcess') &&
312
- !is(target, 'bpmn:Transaction') &&
313
- !isEventSubProcess(target)) {
314
- headerEntries = {
315
- ...headerEntries,
316
- ...this._getAdHocHeaderEntries(target)
317
- };
318
- }
319
-
320
- if (canBeNonInterrupting(target)) {
321
- headerEntries = {
322
- ...headerEntries,
323
- ...this._getNonInterruptingHeaderEntries(target)
324
- };
325
- }
326
-
327
- return headerEntries;
328
- };
329
-
330
-
331
- /**
332
- * Create popup menu entries for the given target.
333
- *
334
- * @param {PopupMenuTarget} target
335
- * @param {ReplaceOption[]} replaceOptions
336
- *
337
- * @return {PopupMenuEntries}
338
- */
339
- ReplaceMenuProvider.prototype._createEntries = function(target, replaceOptions) {
340
- var entries = {};
341
-
342
- var self = this;
343
-
344
- forEach(replaceOptions, function(replaceOption) {
345
- entries[ replaceOption.actionName ] = self._createEntry(replaceOption, target);
346
- });
347
-
348
- return entries;
349
- };
350
-
351
- /**
352
- * Creates popup menu entries for the given sequence flow.
353
- *
354
- * @param {PopupMenuTarget} target
355
- * @param {ReplaceOption[]} replaceOptions
356
- *
357
- * @return {PopupMenuEntries}
358
- */
359
- ReplaceMenuProvider.prototype._createSequenceFlowEntries = function(target, replaceOptions) {
360
-
361
- var businessObject = getBusinessObject(target);
362
-
363
- var entries = {};
364
-
365
- var modeling = this._modeling,
366
- moddle = this._moddle;
367
-
368
- var self = this;
369
-
370
- forEach(replaceOptions, function(replaceOption) {
371
-
372
- switch (replaceOption.actionName) {
373
- case 'replace-with-default-flow':
374
- if (businessObject.sourceRef.default !== businessObject &&
375
- (is(businessObject.sourceRef, 'bpmn:ExclusiveGateway') ||
376
- is(businessObject.sourceRef, 'bpmn:InclusiveGateway') ||
377
- is(businessObject.sourceRef, 'bpmn:ComplexGateway') ||
378
- is(businessObject.sourceRef, 'bpmn:Activity'))) {
379
-
380
- entries = {
381
- ...entries,
382
- [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
383
- modeling.updateProperties(target.source, { default: businessObject });
384
- })
385
- };
386
- }
387
- break;
388
- case 'replace-with-conditional-flow':
389
- if (!businessObject.conditionExpression && is(businessObject.sourceRef, 'bpmn:Activity')) {
390
-
391
- entries = {
392
- ...entries,
393
- [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
394
- var conditionExpression = moddle.create('bpmn:FormalExpression', { body: '' });
395
-
396
- modeling.updateProperties(target, { conditionExpression: conditionExpression });
397
- })
398
- };
399
- }
400
- break;
401
- default:
402
-
403
- // conditional flow -> sequence flow
404
- if (is(businessObject.sourceRef, 'bpmn:Activity') && businessObject.conditionExpression) {
405
- entries = {
406
- ...entries,
407
- [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
408
- modeling.updateProperties(target, { conditionExpression: undefined });
409
- })
410
- };
411
- }
412
-
413
- // default flow -> sequence flow
414
- if ((is(businessObject.sourceRef, 'bpmn:ExclusiveGateway') ||
415
- is(businessObject.sourceRef, 'bpmn:InclusiveGateway') ||
416
- is(businessObject.sourceRef, 'bpmn:ComplexGateway') ||
417
- is(businessObject.sourceRef, 'bpmn:Activity')) &&
418
- businessObject.sourceRef.default === businessObject) {
419
- entries = {
420
- ...entries,
421
- [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
422
- modeling.updateProperties(target.source, { default: undefined });
423
- })
424
- };
425
- }
426
- }
427
- });
428
-
429
- return entries;
430
- };
431
-
432
- /**
433
- * Create a popup menu entry for the given replace option.
434
- *
435
- * @param {ReplaceOption} replaceOption
436
- * @param {PopupMenuTarget} target
437
- * @param {PopupMenuEntryAction} [action]
438
- *
439
- * @return {PopupMenuEntry}
440
- */
441
- ReplaceMenuProvider.prototype._createEntry = function(replaceOption, target, action) {
442
- var translate = this._translate;
443
- var replaceElement = this._bpmnReplace.replaceElement;
444
-
445
- var replaceAction = function() {
446
- return replaceElement(target, replaceOption.target);
447
- };
448
-
449
- var label = replaceOption.label;
450
- if (label && typeof label === 'function') {
451
- label = label(target);
452
- }
453
-
454
- action = action || replaceAction;
455
-
456
- return {
457
- label: translate(label),
458
- className: replaceOption.className,
459
- action: action
460
- };
461
- };
462
-
463
- /**
464
- * Get popup menu header entries for the loop characteristics of the given BPMN element.
465
- *
466
- * @param {PopupMenuTarget} target
467
- *
468
- * @return {PopupMenuHeaderEntries}
469
- */
470
- ReplaceMenuProvider.prototype._getLoopCharacteristicsHeaderEntries = function(target) {
471
-
472
- var self = this;
473
- var translate = this._translate;
474
-
475
- function toggleLoopEntry(event, entry) {
476
-
477
- // remove
478
- if (entry.active) {
479
- self._modeling.updateProperties(target, { loopCharacteristics: undefined });
480
- return;
481
- }
482
-
483
- const currentLoopCharacteristics = target.businessObject.get('loopCharacteristics'),
484
- newLoopCharacteristics = self._moddle.create(entry.options.loopCharacteristics);
485
-
486
- // copy old properties
487
- if (currentLoopCharacteristics) {
488
- self._moddleCopy.copyElement(currentLoopCharacteristics, newLoopCharacteristics);
489
- }
490
-
491
- // update `isSequential` property
492
- newLoopCharacteristics.set('isSequential', entry.options.isSequential);
493
-
494
- self._modeling.updateProperties(target, { loopCharacteristics: newLoopCharacteristics });
495
- }
496
-
497
- var businessObject = getBusinessObject(target),
498
- loopCharacteristics = businessObject.loopCharacteristics;
499
-
500
- var isSequential,
501
- isLoop,
502
- isParallel;
503
-
504
- if (loopCharacteristics) {
505
- isSequential = loopCharacteristics.isSequential;
506
- isLoop = loopCharacteristics.isSequential === undefined;
507
- isParallel = loopCharacteristics.isSequential !== undefined && !loopCharacteristics.isSequential;
508
- }
509
-
510
-
511
- return {
512
- 'toggle-parallel-mi' : {
513
- className: 'bpmn-icon-parallel-mi-marker',
514
- title: translate('Parallel multi-instance'),
515
- active: isParallel,
516
- action: toggleLoopEntry,
517
- options: {
518
- loopCharacteristics: 'bpmn:MultiInstanceLoopCharacteristics',
519
- isSequential: false
520
- }
521
- },
522
- 'toggle-sequential-mi': {
523
- className: 'bpmn-icon-sequential-mi-marker',
524
- title: translate('Sequential multi-instance'),
525
- active: isSequential,
526
- action: toggleLoopEntry,
527
- options: {
528
- loopCharacteristics: 'bpmn:MultiInstanceLoopCharacteristics',
529
- isSequential: true
530
- }
531
- },
532
- 'toggle-loop': {
533
- className: 'bpmn-icon-loop-marker',
534
- title: translate('Loop'),
535
- active: isLoop,
536
- action: toggleLoopEntry,
537
- options: {
538
- loopCharacteristics: 'bpmn:StandardLoopCharacteristics'
539
- }
540
- }
541
- };
542
- };
543
-
544
- /**
545
- * Get popup menu header entries for the collection property of the given BPMN element.
546
- *
547
- * @param {PopupMenuTarget} target
548
- *
549
- * @return {PopupMenuHeaderEntries}
550
- */
551
- ReplaceMenuProvider.prototype._getCollectionHeaderEntries = function(target) {
552
-
553
- var self = this;
554
- var translate = this._translate;
555
-
556
- var dataObject = target.businessObject.dataObjectRef;
557
-
558
- if (!dataObject) {
559
- return {};
560
- }
561
-
562
- function toggleIsCollection(event, entry) {
563
- self._modeling.updateModdleProperties(
564
- target,
565
- dataObject,
566
- { isCollection: !entry.active });
567
- }
568
-
569
- var isCollection = dataObject.isCollection;
570
-
571
- return {
572
- 'toggle-is-collection': {
573
- className: 'bpmn-icon-parallel-mi-marker',
574
- title: translate('Collection'),
575
- active: isCollection,
576
- action: toggleIsCollection,
577
- }
578
- };
579
- };
580
-
581
- /**
582
- * Get popup menu header entries for the participant multiplicity property of the given BPMN element.
583
- *
584
- * @param {PopupMenuTarget} target
585
- *
586
- * @return {PopupMenuHeaderEntries}
587
- */
588
- ReplaceMenuProvider.prototype._getParticipantMultiplicityHeaderEntries = function(target) {
589
-
590
- var self = this;
591
- var bpmnFactory = this._bpmnFactory;
592
- var translate = this._translate;
593
-
594
- function toggleParticipantMultiplicity(event, entry) {
595
- var isActive = entry.active;
596
- var participantMultiplicity;
597
-
598
- if (!isActive) {
599
- participantMultiplicity = bpmnFactory.create('bpmn:ParticipantMultiplicity');
600
- }
601
-
602
- self._modeling.updateProperties(
603
- target,
604
- { participantMultiplicity: participantMultiplicity });
605
- }
606
-
607
- var participantMultiplicity = target.businessObject.participantMultiplicity;
608
-
609
- return {
610
- 'toggle-participant-multiplicity': {
611
- className: 'bpmn-icon-parallel-mi-marker',
612
- title: translate('Participant multiplicity'),
613
- active: !!participantMultiplicity,
614
- action: toggleParticipantMultiplicity,
615
- }
616
- };
617
- };
618
-
619
- /**
620
- * Get popup menu header entries for the ad-hoc property of the given BPMN element.
621
- *
622
- * @param {PopupMenuTarget} element
623
- *
624
- * @return {PopupMenuHeaderEntries}
625
- */
626
- ReplaceMenuProvider.prototype._getAdHocHeaderEntries = function(element) {
627
- var translate = this._translate;
628
- var businessObject = getBusinessObject(element);
629
-
630
- var isAdHoc = is(businessObject, 'bpmn:AdHocSubProcess');
631
-
632
- var replaceElement = this._bpmnReplace.replaceElement;
633
-
634
- return {
635
- 'toggle-adhoc': {
636
- className: 'bpmn-icon-ad-hoc-marker',
637
- title: translate('Ad-hoc'),
638
- active: isAdHoc,
639
- action: function(event, entry) {
640
- if (isAdHoc) {
641
- return replaceElement(element, { type: 'bpmn:SubProcess' }, {
642
- autoResize: false,
643
- layoutConnection: false
644
- });
645
- } else {
646
- return replaceElement(element, { type: 'bpmn:AdHocSubProcess' }, {
647
- autoResize: false,
648
- layoutConnection: false
649
- });
650
- }
651
- }
652
- }
653
- };
654
- };
655
-
656
-
657
- ReplaceMenuProvider.prototype._getNonInterruptingHeaderEntries = function(element) {
658
- const translate = this._translate;
659
- const businessObject = getBusinessObject(element);
660
- const self = this;
661
-
662
- const interruptingProperty = getInterruptingProperty(element);
663
-
664
- const icon = is(element, 'bpmn:BoundaryEvent') ? Icons['intermediate-event-non-interrupting'] : Icons['start-event-non-interrupting'];
665
-
666
- const isNonInterrupting = !businessObject[interruptingProperty];
667
-
668
- return {
669
- 'toggle-non-interrupting': {
670
- imageHtml: icon,
671
- title: translate('Toggle non-interrupting'),
672
- active: isNonInterrupting,
673
- action: function() {
674
- self._modeling.updateProperties(element, {
675
- [interruptingProperty]: !!isNonInterrupting
676
- });
677
- }
678
- }
679
- };
1
+ import {
2
+ getBusinessObject,
3
+ is
4
+ } from '../../util/ModelUtil';
5
+
6
+ import {
7
+ isEventSubProcess,
8
+ isExpanded
9
+ } from '../../util/DiUtil';
10
+
11
+ import {
12
+ isDifferentType
13
+ } from './util/TypeUtil';
14
+
15
+ import {
16
+ forEach,
17
+ filter,
18
+ isArray
19
+ } from 'min-dash';
20
+
21
+ import * as replaceOptions from '../replace/ReplaceOptions';
22
+ import { canBeNonInterrupting, getInterruptingProperty } from '../modeling/behavior/util/NonInterruptingUtil';
23
+ import Icons from './util/Icons';
24
+
25
+ /**
26
+ * @typedef {import('../modeling/BpmnFactory').default} BpmnFactory
27
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu
28
+ * @typedef {import('../modeling/Modeling').default} Modeling
29
+ * @typedef {import('../replace/BpmnReplace').default} BpmnReplace
30
+ * @typedef {import('diagram-js/lib/features/Rules').default} Rules
31
+ * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
32
+ * @typedef {import('../copy-paste/ModdleCopy').default} ModdleCopy
33
+ *
34
+ * @typedef {import('../../model/Types').Element} Element
35
+ * @typedef {import('../../model/Types').Moddle} Moddle
36
+ *
37
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntries} PopupMenuEntries
38
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntry} PopupMenuEntry
39
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuEntryAction} PopupMenuEntryAction
40
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').PopupMenuHeaderEntries} PopupMenuHeaderEntries
41
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenuProvider').default} PopupMenuProvider
42
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').PopupMenuTarget} PopupMenuTarget
43
+ *
44
+ * @typedef {import('./ReplaceOptions').ReplaceOption} ReplaceOption
45
+ */
46
+
47
+ /**
48
+ * A BPMN-specific popup menu provider.
49
+ *
50
+ * @implements {PopupMenuProvider}
51
+ *
52
+ * @param {BpmnFactory} bpmnFactory
53
+ * @param {PopupMenu} popupMenu
54
+ * @param {Modeling} modeling
55
+ * @param {Moddle} moddle
56
+ * @param {BpmnReplace} bpmnReplace
57
+ * @param {Rules} rules
58
+ * @param {Translate} translate
59
+ * @param {ModdleCopy} moddleCopy
60
+ */
61
+ export default function ReplaceMenuProvider(
62
+ bpmnFactory, popupMenu, modeling, moddle,
63
+ bpmnReplace, rules, translate, moddleCopy) {
64
+
65
+ this._bpmnFactory = bpmnFactory;
66
+ this._popupMenu = popupMenu;
67
+ this._modeling = modeling;
68
+ this._moddle = moddle;
69
+ this._bpmnReplace = bpmnReplace;
70
+ this._rules = rules;
71
+ this._translate = translate;
72
+ this._moddleCopy = moddleCopy;
73
+
74
+ this._register();
75
+ }
76
+
77
+ ReplaceMenuProvider.$inject = [
78
+ 'bpmnFactory',
79
+ 'popupMenu',
80
+ 'modeling',
81
+ 'moddle',
82
+ 'bpmnReplace',
83
+ 'rules',
84
+ 'translate',
85
+ 'moddleCopy'
86
+ ];
87
+
88
+ ReplaceMenuProvider.prototype._register = function() {
89
+ this._popupMenu.registerProvider('bpmn-replace', this);
90
+ };
91
+
92
+ /**
93
+ * @param {PopupMenuTarget} target
94
+ *
95
+ * @return {PopupMenuEntries}
96
+ */
97
+ ReplaceMenuProvider.prototype.getPopupMenuEntries = function(target) {
98
+
99
+ var businessObject = target.businessObject;
100
+
101
+ var rules = this._rules;
102
+
103
+ var filteredReplaceOptions = [];
104
+
105
+ if (isArray(target) || !rules.allowed('shape.replace', { element: target })) {
106
+ return {};
107
+ }
108
+
109
+ var differentType = isDifferentType(target);
110
+
111
+ if (is(businessObject, 'bpmn:DataObjectReference')) {
112
+ return this._createEntries(target, replaceOptions.DATA_OBJECT_REFERENCE);
113
+ }
114
+
115
+ if (is(businessObject, 'bpmn:DataStoreReference') && !is(target.parent, 'bpmn:Collaboration')) {
116
+ return this._createEntries(target, replaceOptions.DATA_STORE_REFERENCE);
117
+ }
118
+
119
+ // start events outside sub processes
120
+ if (is(businessObject, 'bpmn:StartEvent') && !is(businessObject.$parent, 'bpmn:SubProcess')) {
121
+
122
+ filteredReplaceOptions = filter(replaceOptions.START_EVENT, differentType);
123
+
124
+ return this._createEntries(target, filteredReplaceOptions);
125
+ }
126
+
127
+ // expanded/collapsed pools
128
+ if (is(businessObject, 'bpmn:Participant')) {
129
+
130
+ filteredReplaceOptions = filter(replaceOptions.PARTICIPANT, function(replaceOption) {
131
+ return isExpanded(target) !== replaceOption.target.isExpanded;
132
+ });
133
+
134
+ return this._createEntries(target, filteredReplaceOptions);
135
+ }
136
+
137
+ // start events inside event sub processes
138
+ if (is(businessObject, 'bpmn:StartEvent') && isEventSubProcess(businessObject.$parent)) {
139
+ filteredReplaceOptions = filter(replaceOptions.EVENT_SUB_PROCESS_START_EVENT, function(replaceOption) {
140
+
141
+ var target = replaceOption.target;
142
+
143
+ var isInterrupting = target.isInterrupting !== false;
144
+
145
+ var isInterruptingEqual = businessObject.isInterrupting === isInterrupting;
146
+
147
+ // filters elements which types and event definition are equal but have have different interrupting types
148
+ return differentType(replaceOption) || !differentType(replaceOption) && !isInterruptingEqual;
149
+
150
+ });
151
+
152
+ return this._createEntries(target, filteredReplaceOptions);
153
+ }
154
+
155
+ // start events inside sub processes
156
+ if (is(businessObject, 'bpmn:StartEvent') && !isEventSubProcess(businessObject.$parent)
157
+ && is(businessObject.$parent, 'bpmn:SubProcess')) {
158
+ filteredReplaceOptions = filter(replaceOptions.START_EVENT_SUB_PROCESS, differentType);
159
+
160
+ return this._createEntries(target, filteredReplaceOptions);
161
+ }
162
+
163
+ // end events
164
+ if (is(businessObject, 'bpmn:EndEvent')) {
165
+
166
+ filteredReplaceOptions = filter(replaceOptions.END_EVENT, function(replaceOption) {
167
+ var target = replaceOption.target;
168
+
169
+ // hide cancel end events outside transactions
170
+ if (target.eventDefinitionType == 'bpmn:CancelEventDefinition' && !is(businessObject.$parent, 'bpmn:Transaction')) {
171
+ return false;
172
+ }
173
+
174
+ return differentType(replaceOption);
175
+ });
176
+
177
+ return this._createEntries(target, filteredReplaceOptions);
178
+ }
179
+
180
+ // boundary events
181
+ if (is(businessObject, 'bpmn:BoundaryEvent')) {
182
+
183
+ filteredReplaceOptions = filter(replaceOptions.BOUNDARY_EVENT, function(replaceOption) {
184
+
185
+ var target = replaceOption.target;
186
+
187
+ if (target.eventDefinitionType == 'bpmn:CancelEventDefinition' &&
188
+ !is(businessObject.attachedToRef, 'bpmn:Transaction')) {
189
+ return false;
190
+ }
191
+ var cancelActivity = target.cancelActivity !== false;
192
+
193
+ var isCancelActivityEqual = businessObject.cancelActivity == cancelActivity;
194
+
195
+ return differentType(replaceOption) || !differentType(replaceOption) && !isCancelActivityEqual;
196
+ });
197
+
198
+ return this._createEntries(target, filteredReplaceOptions);
199
+ }
200
+
201
+ // intermediate events
202
+ if (is(businessObject, 'bpmn:IntermediateCatchEvent') ||
203
+ is(businessObject, 'bpmn:IntermediateThrowEvent')) {
204
+
205
+ filteredReplaceOptions = filter(replaceOptions.INTERMEDIATE_EVENT, differentType);
206
+
207
+ return this._createEntries(target, filteredReplaceOptions);
208
+ }
209
+
210
+ // gateways
211
+ if (is(businessObject, 'bpmn:Gateway')) {
212
+
213
+ filteredReplaceOptions = filter(replaceOptions.GATEWAY, differentType);
214
+
215
+ return this._createEntries(target, filteredReplaceOptions);
216
+ }
217
+
218
+ // transactions
219
+ if (is(businessObject, 'bpmn:Transaction')) {
220
+
221
+ filteredReplaceOptions = filter(replaceOptions.TRANSACTION, differentType);
222
+
223
+ return this._createEntries(target, filteredReplaceOptions);
224
+ }
225
+
226
+ // expanded event sub processes
227
+ if (isEventSubProcess(businessObject) && isExpanded(target)) {
228
+
229
+ filteredReplaceOptions = filter(replaceOptions.EVENT_SUB_PROCESS, differentType);
230
+
231
+ return this._createEntries(target, filteredReplaceOptions);
232
+ }
233
+
234
+ // expanded sub processes
235
+ if (is(businessObject, 'bpmn:SubProcess') && isExpanded(target)) {
236
+
237
+ filteredReplaceOptions = filter(replaceOptions.SUBPROCESS_EXPANDED, differentType);
238
+
239
+ return this._createEntries(target, filteredReplaceOptions);
240
+ }
241
+
242
+ // collapsed ad hoc sub processes
243
+ if (is(businessObject, 'bpmn:AdHocSubProcess') && !isExpanded(target)) {
244
+
245
+ filteredReplaceOptions = filter(replaceOptions.TASK, function(replaceOption) {
246
+
247
+ var target = replaceOption.target;
248
+
249
+ var isTargetSubProcess = target.type === 'bpmn:SubProcess';
250
+
251
+ var isTargetExpanded = target.isExpanded === true;
252
+
253
+ return isDifferentType(target, target) && (!isTargetSubProcess || isTargetExpanded);
254
+ });
255
+
256
+ return this._createEntries(target, filteredReplaceOptions);
257
+ }
258
+
259
+ // sequence flows
260
+ if (is(businessObject, 'bpmn:SequenceFlow')) {
261
+ return this._createSequenceFlowEntries(target, replaceOptions.SEQUENCE_FLOW);
262
+ }
263
+
264
+ // flow nodes
265
+ if (is(businessObject, 'bpmn:FlowNode')) {
266
+ filteredReplaceOptions = filter(replaceOptions.TASK, differentType);
267
+
268
+ // collapsed sub process cannot be replaced with itself
269
+ if (is(businessObject, 'bpmn:SubProcess') && !isExpanded(target)) {
270
+ filteredReplaceOptions = filter(filteredReplaceOptions, function(replaceOption) {
271
+ return replaceOption.label !== 'Sub-process (collapsed)';
272
+ });
273
+ }
274
+
275
+ return this._createEntries(target, filteredReplaceOptions);
276
+ }
277
+
278
+ return {};
279
+ };
280
+
281
+ /**
282
+ * @param {PopupMenuTarget} target
283
+ *
284
+ * @return {PopupMenuHeaderEntries}
285
+ */
286
+ ReplaceMenuProvider.prototype.getPopupMenuHeaderEntries = function(target) {
287
+
288
+ var headerEntries = {};
289
+
290
+ if (is(target, 'bpmn:Activity') && !isEventSubProcess(target)) {
291
+ headerEntries = {
292
+ ...headerEntries,
293
+ ...this._getLoopCharacteristicsHeaderEntries(target)
294
+ };
295
+ }
296
+
297
+ if (is(target, 'bpmn:DataObjectReference')) {
298
+ headerEntries = {
299
+ ...headerEntries,
300
+ ...this._getCollectionHeaderEntries(target)
301
+ };
302
+ }
303
+
304
+ if (is(target, 'bpmn:Participant')) {
305
+ headerEntries = {
306
+ ...headerEntries,
307
+ ...this._getParticipantMultiplicityHeaderEntries(target)
308
+ };
309
+ }
310
+
311
+ if (is(target, 'bpmn:SubProcess') &&
312
+ !is(target, 'bpmn:Transaction') &&
313
+ !isEventSubProcess(target)) {
314
+ headerEntries = {
315
+ ...headerEntries,
316
+ ...this._getAdHocHeaderEntries(target)
317
+ };
318
+ }
319
+
320
+ if (canBeNonInterrupting(target)) {
321
+ headerEntries = {
322
+ ...headerEntries,
323
+ ...this._getNonInterruptingHeaderEntries(target)
324
+ };
325
+ }
326
+
327
+ return headerEntries;
328
+ };
329
+
330
+
331
+ /**
332
+ * Create popup menu entries for the given target.
333
+ *
334
+ * @param {PopupMenuTarget} target
335
+ * @param {ReplaceOption[]} replaceOptions
336
+ *
337
+ * @return {PopupMenuEntries}
338
+ */
339
+ ReplaceMenuProvider.prototype._createEntries = function(target, replaceOptions) {
340
+ var entries = {};
341
+
342
+ var self = this;
343
+
344
+ forEach(replaceOptions, function(replaceOption) {
345
+ entries[ replaceOption.actionName ] = self._createEntry(replaceOption, target);
346
+ });
347
+
348
+ return entries;
349
+ };
350
+
351
+ /**
352
+ * Creates popup menu entries for the given sequence flow.
353
+ *
354
+ * @param {PopupMenuTarget} target
355
+ * @param {ReplaceOption[]} replaceOptions
356
+ *
357
+ * @return {PopupMenuEntries}
358
+ */
359
+ ReplaceMenuProvider.prototype._createSequenceFlowEntries = function(target, replaceOptions) {
360
+
361
+ var businessObject = getBusinessObject(target);
362
+
363
+ var entries = {};
364
+
365
+ var modeling = this._modeling,
366
+ moddle = this._moddle;
367
+
368
+ var self = this;
369
+
370
+ forEach(replaceOptions, function(replaceOption) {
371
+
372
+ switch (replaceOption.actionName) {
373
+ case 'replace-with-default-flow':
374
+ if (businessObject.sourceRef.default !== businessObject &&
375
+ (is(businessObject.sourceRef, 'bpmn:ExclusiveGateway') ||
376
+ is(businessObject.sourceRef, 'bpmn:InclusiveGateway') ||
377
+ is(businessObject.sourceRef, 'bpmn:ComplexGateway') ||
378
+ is(businessObject.sourceRef, 'bpmn:Activity'))) {
379
+
380
+ entries = {
381
+ ...entries,
382
+ [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
383
+ modeling.updateProperties(target.source, { default: businessObject });
384
+ })
385
+ };
386
+ }
387
+ break;
388
+ case 'replace-with-conditional-flow':
389
+ if (!businessObject.conditionExpression && is(businessObject.sourceRef, 'bpmn:Activity')) {
390
+
391
+ entries = {
392
+ ...entries,
393
+ [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
394
+ var conditionExpression = moddle.create('bpmn:FormalExpression', { body: '' });
395
+
396
+ modeling.updateProperties(target, { conditionExpression: conditionExpression });
397
+ })
398
+ };
399
+ }
400
+ break;
401
+ default:
402
+
403
+ // conditional flow -> sequence flow
404
+ if (is(businessObject.sourceRef, 'bpmn:Activity') && businessObject.conditionExpression) {
405
+ entries = {
406
+ ...entries,
407
+ [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
408
+ modeling.updateProperties(target, { conditionExpression: undefined });
409
+ })
410
+ };
411
+ }
412
+
413
+ // default flow -> sequence flow
414
+ if ((is(businessObject.sourceRef, 'bpmn:ExclusiveGateway') ||
415
+ is(businessObject.sourceRef, 'bpmn:InclusiveGateway') ||
416
+ is(businessObject.sourceRef, 'bpmn:ComplexGateway') ||
417
+ is(businessObject.sourceRef, 'bpmn:Activity')) &&
418
+ businessObject.sourceRef.default === businessObject) {
419
+ entries = {
420
+ ...entries,
421
+ [ replaceOption.actionName ]: self._createEntry(replaceOption, target, function() {
422
+ modeling.updateProperties(target.source, { default: undefined });
423
+ })
424
+ };
425
+ }
426
+ }
427
+ });
428
+
429
+ return entries;
430
+ };
431
+
432
+ /**
433
+ * Create a popup menu entry for the given replace option.
434
+ *
435
+ * @param {ReplaceOption} replaceOption
436
+ * @param {PopupMenuTarget} target
437
+ * @param {PopupMenuEntryAction} [action]
438
+ *
439
+ * @return {PopupMenuEntry}
440
+ */
441
+ ReplaceMenuProvider.prototype._createEntry = function(replaceOption, target, action) {
442
+ var translate = this._translate;
443
+ var replaceElement = this._bpmnReplace.replaceElement;
444
+
445
+ var replaceAction = function() {
446
+ return replaceElement(target, replaceOption.target);
447
+ };
448
+
449
+ var label = replaceOption.label;
450
+ if (label && typeof label === 'function') {
451
+ label = label(target);
452
+ }
453
+
454
+ action = action || replaceAction;
455
+
456
+ return {
457
+ label: translate(label),
458
+ className: replaceOption.className,
459
+ action: action
460
+ };
461
+ };
462
+
463
+ /**
464
+ * Get popup menu header entries for the loop characteristics of the given BPMN element.
465
+ *
466
+ * @param {PopupMenuTarget} target
467
+ *
468
+ * @return {PopupMenuHeaderEntries}
469
+ */
470
+ ReplaceMenuProvider.prototype._getLoopCharacteristicsHeaderEntries = function(target) {
471
+
472
+ var self = this;
473
+ var translate = this._translate;
474
+
475
+ function toggleLoopEntry(event, entry) {
476
+
477
+ // remove
478
+ if (entry.active) {
479
+ self._modeling.updateProperties(target, { loopCharacteristics: undefined });
480
+ return;
481
+ }
482
+
483
+ const currentLoopCharacteristics = target.businessObject.get('loopCharacteristics'),
484
+ newLoopCharacteristics = self._moddle.create(entry.options.loopCharacteristics);
485
+
486
+ // copy old properties
487
+ if (currentLoopCharacteristics) {
488
+ self._moddleCopy.copyElement(currentLoopCharacteristics, newLoopCharacteristics);
489
+ }
490
+
491
+ // update `isSequential` property
492
+ newLoopCharacteristics.set('isSequential', entry.options.isSequential);
493
+
494
+ self._modeling.updateProperties(target, { loopCharacteristics: newLoopCharacteristics });
495
+ }
496
+
497
+ var businessObject = getBusinessObject(target),
498
+ loopCharacteristics = businessObject.loopCharacteristics;
499
+
500
+ var isSequential,
501
+ isLoop,
502
+ isParallel;
503
+
504
+ if (loopCharacteristics) {
505
+ isSequential = loopCharacteristics.isSequential;
506
+ isLoop = loopCharacteristics.isSequential === undefined;
507
+ isParallel = loopCharacteristics.isSequential !== undefined && !loopCharacteristics.isSequential;
508
+ }
509
+
510
+
511
+ return {
512
+ 'toggle-parallel-mi' : {
513
+ className: 'bpmn-icon-parallel-mi-marker',
514
+ title: translate('Parallel multi-instance'),
515
+ active: isParallel,
516
+ action: toggleLoopEntry,
517
+ options: {
518
+ loopCharacteristics: 'bpmn:MultiInstanceLoopCharacteristics',
519
+ isSequential: false
520
+ }
521
+ },
522
+ 'toggle-sequential-mi': {
523
+ className: 'bpmn-icon-sequential-mi-marker',
524
+ title: translate('Sequential multi-instance'),
525
+ active: isSequential,
526
+ action: toggleLoopEntry,
527
+ options: {
528
+ loopCharacteristics: 'bpmn:MultiInstanceLoopCharacteristics',
529
+ isSequential: true
530
+ }
531
+ },
532
+ 'toggle-loop': {
533
+ className: 'bpmn-icon-loop-marker',
534
+ title: translate('Loop'),
535
+ active: isLoop,
536
+ action: toggleLoopEntry,
537
+ options: {
538
+ loopCharacteristics: 'bpmn:StandardLoopCharacteristics'
539
+ }
540
+ }
541
+ };
542
+ };
543
+
544
+ /**
545
+ * Get popup menu header entries for the collection property of the given BPMN element.
546
+ *
547
+ * @param {PopupMenuTarget} target
548
+ *
549
+ * @return {PopupMenuHeaderEntries}
550
+ */
551
+ ReplaceMenuProvider.prototype._getCollectionHeaderEntries = function(target) {
552
+
553
+ var self = this;
554
+ var translate = this._translate;
555
+
556
+ var dataObject = target.businessObject.dataObjectRef;
557
+
558
+ if (!dataObject) {
559
+ return {};
560
+ }
561
+
562
+ function toggleIsCollection(event, entry) {
563
+ self._modeling.updateModdleProperties(
564
+ target,
565
+ dataObject,
566
+ { isCollection: !entry.active });
567
+ }
568
+
569
+ var isCollection = dataObject.isCollection;
570
+
571
+ return {
572
+ 'toggle-is-collection': {
573
+ className: 'bpmn-icon-parallel-mi-marker',
574
+ title: translate('Collection'),
575
+ active: isCollection,
576
+ action: toggleIsCollection,
577
+ }
578
+ };
579
+ };
580
+
581
+ /**
582
+ * Get popup menu header entries for the participant multiplicity property of the given BPMN element.
583
+ *
584
+ * @param {PopupMenuTarget} target
585
+ *
586
+ * @return {PopupMenuHeaderEntries}
587
+ */
588
+ ReplaceMenuProvider.prototype._getParticipantMultiplicityHeaderEntries = function(target) {
589
+
590
+ var self = this;
591
+ var bpmnFactory = this._bpmnFactory;
592
+ var translate = this._translate;
593
+
594
+ function toggleParticipantMultiplicity(event, entry) {
595
+ var isActive = entry.active;
596
+ var participantMultiplicity;
597
+
598
+ if (!isActive) {
599
+ participantMultiplicity = bpmnFactory.create('bpmn:ParticipantMultiplicity');
600
+ }
601
+
602
+ self._modeling.updateProperties(
603
+ target,
604
+ { participantMultiplicity: participantMultiplicity });
605
+ }
606
+
607
+ var participantMultiplicity = target.businessObject.participantMultiplicity;
608
+
609
+ return {
610
+ 'toggle-participant-multiplicity': {
611
+ className: 'bpmn-icon-parallel-mi-marker',
612
+ title: translate('Participant multiplicity'),
613
+ active: !!participantMultiplicity,
614
+ action: toggleParticipantMultiplicity,
615
+ }
616
+ };
617
+ };
618
+
619
+ /**
620
+ * Get popup menu header entries for the ad-hoc property of the given BPMN element.
621
+ *
622
+ * @param {PopupMenuTarget} element
623
+ *
624
+ * @return {PopupMenuHeaderEntries}
625
+ */
626
+ ReplaceMenuProvider.prototype._getAdHocHeaderEntries = function(element) {
627
+ var translate = this._translate;
628
+ var businessObject = getBusinessObject(element);
629
+
630
+ var isAdHoc = is(businessObject, 'bpmn:AdHocSubProcess');
631
+
632
+ var replaceElement = this._bpmnReplace.replaceElement;
633
+
634
+ return {
635
+ 'toggle-adhoc': {
636
+ className: 'bpmn-icon-ad-hoc-marker',
637
+ title: translate('Ad-hoc'),
638
+ active: isAdHoc,
639
+ action: function(event, entry) {
640
+ if (isAdHoc) {
641
+ return replaceElement(element, { type: 'bpmn:SubProcess' }, {
642
+ autoResize: false,
643
+ layoutConnection: false
644
+ });
645
+ } else {
646
+ return replaceElement(element, { type: 'bpmn:AdHocSubProcess' }, {
647
+ autoResize: false,
648
+ layoutConnection: false
649
+ });
650
+ }
651
+ }
652
+ }
653
+ };
654
+ };
655
+
656
+
657
+ ReplaceMenuProvider.prototype._getNonInterruptingHeaderEntries = function(element) {
658
+ const translate = this._translate;
659
+ const businessObject = getBusinessObject(element);
660
+ const self = this;
661
+
662
+ const interruptingProperty = getInterruptingProperty(element);
663
+
664
+ const icon = is(element, 'bpmn:BoundaryEvent') ? Icons['intermediate-event-non-interrupting'] : Icons['start-event-non-interrupting'];
665
+
666
+ const isNonInterrupting = !businessObject[interruptingProperty];
667
+
668
+ return {
669
+ 'toggle-non-interrupting': {
670
+ imageHtml: icon,
671
+ title: translate('Toggle non-interrupting'),
672
+ active: isNonInterrupting,
673
+ action: function() {
674
+ self._modeling.updateProperties(element, {
675
+ [interruptingProperty]: !!isNonInterrupting
676
+ });
677
+ }
678
+ }
679
+ };
680
680
  };