bpmn-js 17.6.0 → 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 (339) 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/assets/diagram-js.css +966 -969
  5. package/dist/bpmn-modeler.development.js +59330 -59198
  6. package/dist/bpmn-modeler.production.min.js +8 -8
  7. package/dist/bpmn-navigated-viewer.development.js +22449 -22449
  8. package/dist/bpmn-navigated-viewer.production.min.js +1 -1
  9. package/dist/bpmn-viewer.development.js +21433 -21433
  10. package/dist/bpmn-viewer.production.min.js +1 -1
  11. package/index.js +2 -2
  12. package/lib/BaseModeler.d.ts +15 -15
  13. package/lib/BaseModeler.js +79 -79
  14. package/lib/BaseViewer.d.ts +352 -352
  15. package/lib/BaseViewer.js +858 -858
  16. package/lib/Modeler.d.ts +86 -86
  17. package/lib/Modeler.js +204 -204
  18. package/lib/NavigatedViewer.d.ts +11 -11
  19. package/lib/NavigatedViewer.js +37 -37
  20. package/lib/Viewer.d.ts +47 -47
  21. package/lib/Viewer.js +78 -78
  22. package/lib/core/index.d.ts +10 -10
  23. package/lib/core/index.js +8 -8
  24. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  25. package/lib/draw/BpmnRenderUtil.js +256 -256
  26. package/lib/draw/BpmnRenderer.d.ts +114 -114
  27. package/lib/draw/BpmnRenderer.js +2340 -2340
  28. package/lib/draw/PathMap.d.ts +330 -330
  29. package/lib/draw/PathMap.js +478 -478
  30. package/lib/draw/TextRenderer.d.ts +74 -74
  31. package/lib/draw/TextRenderer.js +136 -136
  32. package/lib/draw/index.d.ts +10 -10
  33. package/lib/draw/index.js +11 -11
  34. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  35. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  36. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  37. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  38. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  39. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  40. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  41. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  42. package/lib/features/align-elements/index.d.ts +11 -11
  43. package/lib/features/align-elements/index.js +23 -23
  44. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  45. package/lib/features/append-preview/AppendPreview.js +108 -108
  46. package/lib/features/append-preview/index.d.ts +16 -16
  47. package/lib/features/append-preview/index.js +15 -15
  48. package/lib/features/auto-place/BpmnAutoPlace.d.ts +13 -13
  49. package/lib/features/auto-place/BpmnAutoPlace.js +20 -20
  50. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +47 -47
  51. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +225 -225
  52. package/lib/features/auto-place/index.d.ts +7 -7
  53. package/lib/features/auto-place/index.js +8 -8
  54. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  55. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  56. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  57. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  58. package/lib/features/auto-resize/index.d.ts +8 -8
  59. package/lib/features/auto-resize/index.js +12 -12
  60. package/lib/features/context-pad/ContextPadProvider.d.ts +73 -73
  61. package/lib/features/context-pad/ContextPadProvider.js +591 -591
  62. package/lib/features/context-pad/index.d.ts +7 -7
  63. package/lib/features/context-pad/index.js +22 -22
  64. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  65. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  66. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  67. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  68. package/lib/features/copy-paste/index.d.ts +9 -9
  69. package/lib/features/copy-paste/index.js +13 -13
  70. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  71. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  72. package/lib/features/di-ordering/index.d.ts +6 -6
  73. package/lib/features/di-ordering/index.js +7 -7
  74. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  75. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  76. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  77. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  78. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  79. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  80. package/lib/features/distribute-elements/index.d.ts +9 -9
  81. package/lib/features/distribute-elements/index.js +19 -19
  82. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  83. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  84. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  85. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  86. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  87. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  88. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  89. package/lib/features/drilldown/SubprocessCompatibility.js +268 -268
  90. package/lib/features/drilldown/index.d.ts +13 -13
  91. package/lib/features/drilldown/index.js +16 -16
  92. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  93. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  94. package/lib/features/editor-actions/index.d.ts +6 -6
  95. package/lib/features/editor-actions/index.js +10 -10
  96. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  97. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  98. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  99. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  100. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  101. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  102. package/lib/features/grid-snapping/index.d.ts +11 -11
  103. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  104. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  105. package/lib/features/interaction-events/index.d.ts +6 -6
  106. package/lib/features/interaction-events/index.js +5 -5
  107. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  108. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  109. package/lib/features/keyboard/index.d.ts +7 -7
  110. package/lib/features/keyboard/index.js +11 -11
  111. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  112. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  113. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  114. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  115. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  116. package/lib/features/label-editing/LabelUtil.js +4 -4
  117. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  118. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  119. package/lib/features/label-editing/index.d.ts +9 -9
  120. package/lib/features/label-editing/index.js +21 -21
  121. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  122. package/lib/features/modeling/BpmnFactory.js +180 -180
  123. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  124. package/lib/features/modeling/BpmnLayouter.js +481 -481
  125. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  126. package/lib/features/modeling/BpmnUpdater.js +837 -837
  127. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  128. package/lib/features/modeling/ElementFactory.js +406 -406
  129. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  130. package/lib/features/modeling/Modeling.d.ts +150 -150
  131. package/lib/features/modeling/Modeling.js +307 -307
  132. package/lib/features/modeling/Modeling.test.ts +147 -147
  133. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  134. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  135. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  136. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  137. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  138. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  139. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  140. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  141. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  142. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  143. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  144. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  145. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  146. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  147. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  148. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  149. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  150. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  151. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  152. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  153. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  154. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  155. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  156. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  157. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  158. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  159. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  160. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  161. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  162. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  163. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  164. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  165. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  166. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  167. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  168. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  169. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  170. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  171. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  172. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  173. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  174. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  175. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  176. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  177. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  178. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  179. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  180. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +54 -54
  181. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  182. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  183. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  184. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  185. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  186. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  187. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  188. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  189. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  190. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  191. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  192. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  193. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  194. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  195. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  196. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  197. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  198. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  199. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  200. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  201. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  202. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  203. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  204. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  205. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  206. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  207. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  208. package/lib/features/modeling/behavior/index.d.ts +2 -2
  209. package/lib/features/modeling/behavior/index.js +128 -128
  210. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  211. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  212. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  213. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  214. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  215. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  216. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  217. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  218. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  219. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  220. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  221. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  222. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  223. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  224. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  225. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  226. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  227. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  228. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  229. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  230. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  231. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  232. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  233. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  234. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  235. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  236. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  237. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  238. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  239. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  240. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  241. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  242. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  243. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  244. package/lib/features/modeling/index.d.ts +27 -27
  245. package/lib/features/modeling/index.js +45 -45
  246. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  247. package/lib/features/modeling/util/LaneUtil.js +188 -188
  248. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  249. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  250. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  251. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  252. package/lib/features/modeling-feedback/index.d.ts +7 -7
  253. package/lib/features/modeling-feedback/index.js +12 -12
  254. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  255. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  256. package/lib/features/ordering/index.d.ts +6 -6
  257. package/lib/features/ordering/index.js +5 -5
  258. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  259. package/lib/features/outline/OutlineProvider.js +179 -179
  260. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  261. package/lib/features/outline/OutlineUtil.js +31 -31
  262. package/lib/features/outline/index.d.ts +7 -7
  263. package/lib/features/outline/index.js +10 -10
  264. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  265. package/lib/features/palette/PaletteProvider.js +214 -214
  266. package/lib/features/palette/index.d.ts +9 -9
  267. package/lib/features/palette/index.js +23 -23
  268. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  269. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  270. package/lib/features/popup-menu/index.d.ts +11 -11
  271. package/lib/features/popup-menu/index.js +16 -16
  272. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  273. package/lib/features/popup-menu/util/Icons.js +14 -14
  274. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  275. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  276. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  277. package/lib/features/replace/BpmnReplace.js +382 -382
  278. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  279. package/lib/features/replace/ReplaceOptions.js +919 -919
  280. package/lib/features/replace/index.d.ts +9 -9
  281. package/lib/features/replace/index.js +14 -14
  282. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  283. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  284. package/lib/features/replace-preview/index.d.ts +7 -7
  285. package/lib/features/replace-preview/index.js +11 -11
  286. package/lib/features/rules/BpmnRules.d.ts +181 -181
  287. package/lib/features/rules/BpmnRules.js +1191 -1191
  288. package/lib/features/rules/index.d.ts +7 -7
  289. package/lib/features/rules/index.js +11 -11
  290. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  291. package/lib/features/search/BpmnSearchProvider.js +136 -136
  292. package/lib/features/search/index.d.ts +7 -7
  293. package/lib/features/search/index.js +12 -12
  294. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  295. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  296. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  297. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  298. package/lib/features/snapping/index.d.ts +9 -9
  299. package/lib/features/snapping/index.js +12 -12
  300. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  301. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  302. package/lib/features/space-tool/index.d.ts +6 -6
  303. package/lib/features/space-tool/index.js +7 -7
  304. package/lib/import/BpmnImporter.d.ts +51 -51
  305. package/lib/import/BpmnImporter.js +363 -363
  306. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  307. package/lib/import/BpmnTreeWalker.js +453 -453
  308. package/lib/import/Importer.d.ts +25 -25
  309. package/lib/import/Importer.js +217 -217
  310. package/lib/import/Util.d.ts +1 -1
  311. package/lib/import/Util.js +6 -6
  312. package/lib/import/index.d.ts +6 -6
  313. package/lib/import/index.js +9 -9
  314. package/lib/model/Types.d.ts +25 -25
  315. package/lib/model/Types.ts +40 -40
  316. package/lib/util/CompatibilityUtil.d.ts +8 -8
  317. package/lib/util/CompatibilityUtil.js +29 -29
  318. package/lib/util/DiUtil.d.ts +60 -60
  319. package/lib/util/DiUtil.js +122 -122
  320. package/lib/util/DrilldownUtil.d.ts +39 -39
  321. package/lib/util/DrilldownUtil.js +69 -69
  322. package/lib/util/LabelUtil.d.ts +83 -83
  323. package/lib/util/LabelUtil.js +262 -262
  324. package/lib/util/ModelUtil.d.ts +40 -40
  325. package/lib/util/ModelUtil.js +58 -58
  326. package/lib/util/PoweredByUtil.d.ts +8 -8
  327. package/lib/util/PoweredByUtil.js +99 -99
  328. package/lib/util/Types.js +4 -4
  329. package/lib/util/Types.ts +3 -3
  330. package/package.json +132 -132
  331. package/test/helper/TranslationCollector.js +15 -15
  332. package/test/helper/index.js +313 -313
  333. package/test/matchers/BoundsMatchers.js +252 -252
  334. package/test/matchers/ConnectionMatchers.js +165 -165
  335. package/test/matchers/JSONMatcher.js +19 -19
  336. package/test/util/KeyEvents.js +22 -22
  337. package/test/util/MockEvents.js +61 -61
  338. package/test/util/custom-rules/CustomRules.js +16 -16
  339. 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
  };