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