bpmn-js 18.1.2 → 18.2.0

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