bpmn-js 17.6.1 → 17.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +93 -93
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +25393 -25381
  5. package/dist/bpmn-modeler.production.min.js +2 -2
  6. package/dist/bpmn-navigated-viewer.development.js +21134 -21134
  7. package/dist/bpmn-navigated-viewer.production.min.js +1 -1
  8. package/dist/bpmn-viewer.development.js +21059 -21059
  9. package/dist/bpmn-viewer.production.min.js +1 -1
  10. package/index.js +2 -2
  11. package/lib/BaseModeler.d.ts +15 -15
  12. package/lib/BaseModeler.js +79 -79
  13. package/lib/BaseViewer.d.ts +352 -352
  14. package/lib/BaseViewer.js +858 -858
  15. package/lib/Modeler.d.ts +86 -86
  16. package/lib/Modeler.js +204 -204
  17. package/lib/NavigatedViewer.d.ts +11 -11
  18. package/lib/NavigatedViewer.js +37 -37
  19. package/lib/Viewer.d.ts +47 -47
  20. package/lib/Viewer.js +78 -78
  21. package/lib/core/index.d.ts +10 -10
  22. package/lib/core/index.js +8 -8
  23. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  24. package/lib/draw/BpmnRenderUtil.js +256 -256
  25. package/lib/draw/BpmnRenderer.d.ts +114 -114
  26. package/lib/draw/BpmnRenderer.js +2340 -2340
  27. package/lib/draw/PathMap.d.ts +330 -330
  28. package/lib/draw/PathMap.js +478 -478
  29. package/lib/draw/TextRenderer.d.ts +74 -74
  30. package/lib/draw/TextRenderer.js +136 -136
  31. package/lib/draw/index.d.ts +10 -10
  32. package/lib/draw/index.js +11 -11
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  34. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  35. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  36. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  37. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  38. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  39. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  40. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  41. package/lib/features/align-elements/index.d.ts +11 -11
  42. package/lib/features/align-elements/index.js +23 -23
  43. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  44. package/lib/features/append-preview/AppendPreview.js +108 -108
  45. package/lib/features/append-preview/index.d.ts +16 -16
  46. package/lib/features/append-preview/index.js +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.d.ts +13 -13
  48. package/lib/features/auto-place/BpmnAutoPlace.js +20 -20
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +47 -47
  50. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +225 -225
  51. package/lib/features/auto-place/index.d.ts +7 -7
  52. package/lib/features/auto-place/index.js +8 -8
  53. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  54. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  56. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  57. package/lib/features/auto-resize/index.d.ts +8 -8
  58. package/lib/features/auto-resize/index.js +12 -12
  59. package/lib/features/context-pad/ContextPadProvider.d.ts +73 -73
  60. package/lib/features/context-pad/ContextPadProvider.js +591 -591
  61. package/lib/features/context-pad/index.d.ts +7 -7
  62. package/lib/features/context-pad/index.js +22 -22
  63. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  64. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  65. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  66. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  67. package/lib/features/copy-paste/index.d.ts +9 -9
  68. package/lib/features/copy-paste/index.js +13 -13
  69. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  70. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  71. package/lib/features/di-ordering/index.d.ts +6 -6
  72. package/lib/features/di-ordering/index.js +7 -7
  73. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  74. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  75. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  76. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  78. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  79. package/lib/features/distribute-elements/index.d.ts +9 -9
  80. package/lib/features/distribute-elements/index.js +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  82. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  83. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  84. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  86. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  87. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  88. package/lib/features/drilldown/SubprocessCompatibility.js +268 -268
  89. package/lib/features/drilldown/index.d.ts +13 -13
  90. package/lib/features/drilldown/index.js +16 -16
  91. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  92. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  93. package/lib/features/editor-actions/index.d.ts +6 -6
  94. package/lib/features/editor-actions/index.js +10 -10
  95. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  96. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  98. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  99. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  100. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  101. package/lib/features/grid-snapping/index.d.ts +11 -11
  102. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  103. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  104. package/lib/features/interaction-events/index.d.ts +6 -6
  105. package/lib/features/interaction-events/index.js +5 -5
  106. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  107. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  108. package/lib/features/keyboard/index.d.ts +7 -7
  109. package/lib/features/keyboard/index.js +11 -11
  110. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  111. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  112. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  113. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  114. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  115. package/lib/features/label-editing/LabelUtil.js +4 -4
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  117. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  118. package/lib/features/label-editing/index.d.ts +9 -9
  119. package/lib/features/label-editing/index.js +21 -21
  120. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  121. package/lib/features/modeling/BpmnFactory.js +180 -180
  122. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  123. package/lib/features/modeling/BpmnLayouter.js +481 -481
  124. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  125. package/lib/features/modeling/BpmnUpdater.js +837 -837
  126. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  127. package/lib/features/modeling/ElementFactory.js +406 -406
  128. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  129. package/lib/features/modeling/Modeling.d.ts +150 -150
  130. package/lib/features/modeling/Modeling.js +307 -307
  131. package/lib/features/modeling/Modeling.test.ts +147 -147
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  133. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  134. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  135. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  136. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  137. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  140. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  142. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  143. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  144. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  146. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  148. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  150. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  151. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  154. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  155. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  157. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  159. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  160. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  161. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  162. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  163. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  164. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  165. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  166. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  167. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  168. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  169. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  170. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  171. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  172. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  173. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  174. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  175. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  176. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  177. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  178. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  179. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +54 -54
  180. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  181. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  182. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  183. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  184. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  185. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  186. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  188. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  190. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  192. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  194. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  196. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  198. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  200. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  202. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  204. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  206. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  207. package/lib/features/modeling/behavior/index.d.ts +2 -2
  208. package/lib/features/modeling/behavior/index.js +128 -128
  209. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  210. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  212. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  213. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  215. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  216. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  217. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  219. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  220. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  221. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  223. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  224. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  225. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  226. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  227. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  228. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  230. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  231. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  232. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  233. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  235. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  237. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  239. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  241. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  242. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  243. package/lib/features/modeling/index.d.ts +27 -27
  244. package/lib/features/modeling/index.js +45 -45
  245. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  246. package/lib/features/modeling/util/LaneUtil.js +188 -188
  247. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  248. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  249. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  250. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  251. package/lib/features/modeling-feedback/index.d.ts +7 -7
  252. package/lib/features/modeling-feedback/index.js +12 -12
  253. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  254. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  255. package/lib/features/ordering/index.d.ts +6 -6
  256. package/lib/features/ordering/index.js +5 -5
  257. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  258. package/lib/features/outline/OutlineProvider.js +179 -179
  259. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  260. package/lib/features/outline/OutlineUtil.js +31 -31
  261. package/lib/features/outline/index.d.ts +7 -7
  262. package/lib/features/outline/index.js +10 -10
  263. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  264. package/lib/features/palette/PaletteProvider.js +214 -214
  265. package/lib/features/palette/index.d.ts +9 -9
  266. package/lib/features/palette/index.js +23 -23
  267. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  268. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  269. package/lib/features/popup-menu/index.d.ts +11 -11
  270. package/lib/features/popup-menu/index.js +16 -16
  271. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  272. package/lib/features/popup-menu/util/Icons.js +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  274. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  275. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  276. package/lib/features/replace/BpmnReplace.js +382 -382
  277. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  278. package/lib/features/replace/ReplaceOptions.js +919 -919
  279. package/lib/features/replace/index.d.ts +9 -9
  280. package/lib/features/replace/index.js +14 -14
  281. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  282. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  283. package/lib/features/replace-preview/index.d.ts +7 -7
  284. package/lib/features/replace-preview/index.js +11 -11
  285. package/lib/features/rules/BpmnRules.d.ts +181 -181
  286. package/lib/features/rules/BpmnRules.js +1191 -1191
  287. package/lib/features/rules/index.d.ts +7 -7
  288. package/lib/features/rules/index.js +11 -11
  289. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  290. package/lib/features/search/BpmnSearchProvider.js +136 -136
  291. package/lib/features/search/index.d.ts +7 -7
  292. package/lib/features/search/index.js +12 -12
  293. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  295. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  296. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  297. package/lib/features/snapping/index.d.ts +9 -9
  298. package/lib/features/snapping/index.js +12 -12
  299. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  300. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  301. package/lib/features/space-tool/index.d.ts +6 -6
  302. package/lib/features/space-tool/index.js +7 -7
  303. package/lib/import/BpmnImporter.d.ts +51 -51
  304. package/lib/import/BpmnImporter.js +363 -363
  305. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  306. package/lib/import/BpmnTreeWalker.js +453 -453
  307. package/lib/import/Importer.d.ts +25 -25
  308. package/lib/import/Importer.js +217 -217
  309. package/lib/import/Util.d.ts +1 -1
  310. package/lib/import/Util.js +6 -6
  311. package/lib/import/index.d.ts +6 -6
  312. package/lib/import/index.js +9 -9
  313. package/lib/model/Types.d.ts +25 -25
  314. package/lib/model/Types.ts +40 -40
  315. package/lib/util/CompatibilityUtil.d.ts +8 -8
  316. package/lib/util/CompatibilityUtil.js +29 -29
  317. package/lib/util/DiUtil.d.ts +60 -60
  318. package/lib/util/DiUtil.js +122 -122
  319. package/lib/util/DrilldownUtil.d.ts +39 -39
  320. package/lib/util/DrilldownUtil.js +69 -69
  321. package/lib/util/LabelUtil.d.ts +83 -83
  322. package/lib/util/LabelUtil.js +262 -262
  323. package/lib/util/ModelUtil.d.ts +40 -40
  324. package/lib/util/ModelUtil.js +58 -58
  325. package/lib/util/PoweredByUtil.d.ts +8 -8
  326. package/lib/util/PoweredByUtil.js +99 -99
  327. package/lib/util/Types.js +4 -4
  328. package/lib/util/Types.ts +3 -3
  329. package/package.json +132 -132
  330. package/test/helper/TranslationCollector.js +15 -15
  331. package/test/helper/index.js +313 -313
  332. package/test/matchers/BoundsMatchers.js +252 -252
  333. package/test/matchers/ConnectionMatchers.js +165 -165
  334. package/test/matchers/JSONMatcher.js +19 -19
  335. package/test/util/KeyEvents.js +22 -22
  336. package/test/util/MockEvents.js +61 -61
  337. package/test/util/custom-rules/CustomRules.js +16 -16
  338. package/test/util/custom-rules/index.js +6 -6
@@ -1,592 +1,592 @@
1
- import {
2
- assign,
3
- forEach,
4
- isArray,
5
- every
6
- } from 'min-dash';
7
-
8
- import {
9
- is
10
- } from '../../util/ModelUtil';
11
-
12
- import {
13
- isExpanded,
14
- isHorizontal,
15
- isEventSubProcess
16
- } from '../../util/DiUtil';
17
-
18
- import {
19
- isAny
20
- } from '../modeling/util/ModelingUtil';
21
-
22
- import {
23
- getChildLanes
24
- } from '../modeling/util/LaneUtil';
25
-
26
- import {
27
- hasPrimaryModifier
28
- } from 'diagram-js/lib/util/Mouse';
29
-
30
- /**
31
- * @typedef {import('didi').Injector} Injector
32
- * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
33
- * @typedef {import('diagram-js/lib/features/context-pad/ContextPad').default} ContextPad
34
- * @typedef {import('../modeling/Modeling').default} Modeling
35
- * @typedef {import('../modeling/ElementFactory').default} ElementFactory
36
- * @typedef {import('diagram-js/lib/features/connect/Connect').default} Connect
37
- * @typedef {import('diagram-js/lib/features/create/Create').default} Create
38
- * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu
39
- * @typedef {import('diagram-js/lib/features/canvas/Canvas').default} Canvas
40
- * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules
41
- * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
42
- *
43
- * @typedef {import('../../model/Types').Element} Element
44
- * @typedef {import('../../model/Types').ModdleElement} ModdleElement
45
- *
46
- * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').default<Element>} BaseContextPadProvider
47
- * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntries} ContextPadEntries
48
- * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntry} ContextPadEntry
49
- *
50
- * @typedef { { autoPlace?: boolean; } } ContextPadConfig
51
- */
52
-
53
- /**
54
- * BPMN-specific context pad provider.
55
- *
56
- * @implements {BaseContextPadProvider}
57
- *
58
- * @param {ContextPadConfig} config
59
- * @param {Injector} injector
60
- * @param {EventBus} eventBus
61
- * @param {ContextPad} contextPad
62
- * @param {Modeling} modeling
63
- * @param {ElementFactory} elementFactory
64
- * @param {Connect} connect
65
- * @param {Create} create
66
- * @param {PopupMenu} popupMenu
67
- * @param {Canvas} canvas
68
- * @param {Rules} rules
69
- * @param {Translate} translate
70
- */
71
- export default function ContextPadProvider(
72
- config, injector, eventBus,
73
- contextPad, modeling, elementFactory,
74
- connect, create, popupMenu,
75
- canvas, rules, translate, appendPreview) {
76
-
77
- config = config || {};
78
-
79
- contextPad.registerProvider(this);
80
-
81
- this._contextPad = contextPad;
82
-
83
- this._modeling = modeling;
84
-
85
- this._elementFactory = elementFactory;
86
- this._connect = connect;
87
- this._create = create;
88
- this._popupMenu = popupMenu;
89
- this._canvas = canvas;
90
- this._rules = rules;
91
- this._translate = translate;
92
- this._eventBus = eventBus;
93
- this._appendPreview = appendPreview;
94
-
95
- if (config.autoPlace !== false) {
96
- this._autoPlace = injector.get('autoPlace', false);
97
- }
98
-
99
- eventBus.on('create.end', 250, function(event) {
100
- var context = event.context,
101
- shape = context.shape;
102
-
103
- if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
104
- return;
105
- }
106
-
107
- var entries = contextPad.getEntries(shape);
108
-
109
- if (entries.replace) {
110
- entries.replace.action.click(event, shape);
111
- }
112
- });
113
-
114
- eventBus.on('contextPad.close', function() {
115
- appendPreview.cleanUp();
116
- });
117
- }
118
-
119
- ContextPadProvider.$inject = [
120
- 'config.contextPad',
121
- 'injector',
122
- 'eventBus',
123
- 'contextPad',
124
- 'modeling',
125
- 'elementFactory',
126
- 'connect',
127
- 'create',
128
- 'popupMenu',
129
- 'canvas',
130
- 'rules',
131
- 'translate',
132
- 'appendPreview'
133
- ];
134
-
135
- /**
136
- * @param {Element[]} elements
137
- *
138
- * @return {ContextPadEntries}
139
- */
140
- ContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) {
141
- var modeling = this._modeling;
142
-
143
- var actions = {};
144
-
145
- if (this._isDeleteAllowed(elements)) {
146
- assign(actions, {
147
- 'delete': {
148
- group: 'edit',
149
- className: 'bpmn-icon-trash',
150
- title: this._translate('Delete'),
151
- action: {
152
- click: function(event, elements) {
153
- modeling.removeElements(elements.slice());
154
- }
155
- }
156
- }
157
- });
158
- }
159
-
160
- return actions;
161
- };
162
-
163
- /**
164
- * @param {Element[]} elements
165
- *
166
- * @return {boolean}
167
- */
168
- ContextPadProvider.prototype._isDeleteAllowed = function(elements) {
169
-
170
- var baseAllowed = this._rules.allowed('elements.delete', {
171
- elements: elements
172
- });
173
-
174
- if (isArray(baseAllowed)) {
175
- return every(baseAllowed, function(element) {
176
- return includes(baseAllowed, element);
177
- });
178
- }
179
-
180
- return baseAllowed;
181
- };
182
-
183
- /**
184
- * @param {Element} element
185
- *
186
- * @return {ContextPadEntries}
187
- */
188
- ContextPadProvider.prototype.getContextPadEntries = function(element) {
189
- var contextPad = this._contextPad,
190
- modeling = this._modeling,
191
- elementFactory = this._elementFactory,
192
- connect = this._connect,
193
- create = this._create,
194
- popupMenu = this._popupMenu,
195
- rules = this._rules,
196
- autoPlace = this._autoPlace,
197
- translate = this._translate,
198
- appendPreview = this._appendPreview;
199
-
200
- var actions = {};
201
-
202
- if (element.type === 'label') {
203
- return actions;
204
- }
205
-
206
- var businessObject = element.businessObject;
207
-
208
- function startConnect(event, element) {
209
- connect.start(event, element);
210
- }
211
-
212
- function removeElement(e, element) {
213
- modeling.removeElements([ element ]);
214
- }
215
-
216
- function getReplaceMenuPosition(element) {
217
-
218
- var Y_OFFSET = 5;
219
-
220
- var pad = contextPad.getPad(element).html;
221
-
222
- var padRect = pad.getBoundingClientRect();
223
-
224
- var pos = {
225
- x: padRect.left,
226
- y: padRect.bottom + Y_OFFSET
227
- };
228
-
229
- return pos;
230
- }
231
-
232
- /**
233
- * Create an append action.
234
- *
235
- * @param {string} type
236
- * @param {string} className
237
- * @param {string} title
238
- * @param {Object} [options]
239
- *
240
- * @return {ContextPadEntry}
241
- */
242
- function appendAction(type, className, title, options) {
243
-
244
- function appendStart(event, element) {
245
-
246
- var shape = elementFactory.createShape(assign({ type: type }, options));
247
-
248
- create.start(event, shape, {
249
- source: element
250
- });
251
- }
252
-
253
- var append = autoPlace ? function(_, element) {
254
- var shape = elementFactory.createShape(assign({ type: type }, options));
255
-
256
- autoPlace.append(element, shape);
257
- } : appendStart;
258
-
259
- var previewAppend = autoPlace ? function(_, element) {
260
-
261
- // mouseover
262
- appendPreview.create(element, type, options);
263
-
264
- return () => {
265
-
266
- // mouseout
267
- appendPreview.cleanUp();
268
- };
269
- } : null;
270
-
271
- return {
272
- group: 'model',
273
- className: className,
274
- title: title,
275
- action: {
276
- dragstart: appendStart,
277
- click: append,
278
- hover: previewAppend
279
- }
280
- };
281
- }
282
-
283
- function splitLaneHandler(count) {
284
-
285
- return function(_, element) {
286
-
287
- // actual split
288
- modeling.splitLane(element, count);
289
-
290
- // refresh context pad after split to
291
- // get rid of split icons
292
- contextPad.open(element, true);
293
- };
294
- }
295
-
296
-
297
- if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(element)) {
298
-
299
- var childLanes = getChildLanes(element);
300
-
301
- assign(actions, {
302
- 'lane-insert-above': {
303
- group: 'lane-insert-above',
304
- className: 'bpmn-icon-lane-insert-above',
305
- title: translate('Add lane above'),
306
- action: {
307
- click: function(event, element) {
308
- modeling.addLane(element, 'top');
309
- }
310
- }
311
- }
312
- });
313
-
314
- if (childLanes.length < 2) {
315
-
316
- if (isHorizontal(element) ? element.height >= 120 : element.width >= 120) {
317
- assign(actions, {
318
- 'lane-divide-two': {
319
- group: 'lane-divide',
320
- className: 'bpmn-icon-lane-divide-two',
321
- title: translate('Divide into two lanes'),
322
- action: {
323
- click: splitLaneHandler(2)
324
- }
325
- }
326
- });
327
- }
328
-
329
- if (isHorizontal(element) ? element.height >= 180 : element.width >= 180) {
330
- assign(actions, {
331
- 'lane-divide-three': {
332
- group: 'lane-divide',
333
- className: 'bpmn-icon-lane-divide-three',
334
- title: translate('Divide into three lanes'),
335
- action: {
336
- click: splitLaneHandler(3)
337
- }
338
- }
339
- });
340
- }
341
- }
342
-
343
- assign(actions, {
344
- 'lane-insert-below': {
345
- group: 'lane-insert-below',
346
- className: 'bpmn-icon-lane-insert-below',
347
- title: translate('Add lane below'),
348
- action: {
349
- click: function(event, element) {
350
- modeling.addLane(element, 'bottom');
351
- }
352
- }
353
- }
354
- });
355
-
356
- }
357
-
358
- if (is(businessObject, 'bpmn:FlowNode')) {
359
-
360
- if (is(businessObject, 'bpmn:EventBasedGateway')) {
361
-
362
- assign(actions, {
363
- 'append.receive-task': appendAction(
364
- 'bpmn:ReceiveTask',
365
- 'bpmn-icon-receive-task',
366
- translate('Append receive task')
367
- ),
368
- 'append.message-intermediate-event': appendAction(
369
- 'bpmn:IntermediateCatchEvent',
370
- 'bpmn-icon-intermediate-event-catch-message',
371
- translate('Append message intermediate catch event'),
372
- { eventDefinitionType: 'bpmn:MessageEventDefinition' }
373
- ),
374
- 'append.timer-intermediate-event': appendAction(
375
- 'bpmn:IntermediateCatchEvent',
376
- 'bpmn-icon-intermediate-event-catch-timer',
377
- translate('Append timer intermediate catch event'),
378
- { eventDefinitionType: 'bpmn:TimerEventDefinition' }
379
- ),
380
- 'append.condition-intermediate-event': appendAction(
381
- 'bpmn:IntermediateCatchEvent',
382
- 'bpmn-icon-intermediate-event-catch-condition',
383
- translate('Append conditional intermediate catch event'),
384
- { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }
385
- ),
386
- 'append.signal-intermediate-event': appendAction(
387
- 'bpmn:IntermediateCatchEvent',
388
- 'bpmn-icon-intermediate-event-catch-signal',
389
- translate('Append signal intermediate catch event'),
390
- { eventDefinitionType: 'bpmn:SignalEventDefinition' }
391
- )
392
- });
393
- } else
394
-
395
- if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {
396
-
397
- assign(actions, {
398
- 'append.compensation-activity':
399
- appendAction(
400
- 'bpmn:Task',
401
- 'bpmn-icon-task',
402
- translate('Append compensation activity'),
403
- {
404
- isForCompensation: true
405
- }
406
- )
407
- });
408
- } else
409
-
410
- if (!is(businessObject, 'bpmn:EndEvent') &&
411
- !businessObject.isForCompensation &&
412
- !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&
413
- !isEventSubProcess(businessObject)) {
414
-
415
- assign(actions, {
416
- 'append.end-event': appendAction(
417
- 'bpmn:EndEvent',
418
- 'bpmn-icon-end-event-none',
419
- translate('Append end event')
420
- ),
421
- 'append.gateway': appendAction(
422
- 'bpmn:ExclusiveGateway',
423
- 'bpmn-icon-gateway-none',
424
- translate('Append gateway')
425
- ),
426
- 'append.append-task': appendAction(
427
- 'bpmn:Task',
428
- 'bpmn-icon-task',
429
- translate('Append task')
430
- ),
431
- 'append.intermediate-event': appendAction(
432
- 'bpmn:IntermediateThrowEvent',
433
- 'bpmn-icon-intermediate-event-none',
434
- translate('Append intermediate/boundary event')
435
- )
436
- });
437
- }
438
- }
439
-
440
- if (!popupMenu.isEmpty(element, 'bpmn-replace')) {
441
-
442
- // Replace menu entry
443
- assign(actions, {
444
- 'replace': {
445
- group: 'edit',
446
- className: 'bpmn-icon-screw-wrench',
447
- title: translate('Change element'),
448
- action: {
449
- click: function(event, element) {
450
-
451
- var position = assign(getReplaceMenuPosition(element), {
452
- cursor: { x: event.x, y: event.y }
453
- });
454
-
455
- popupMenu.open(element, 'bpmn-replace', position, {
456
- title: translate('Change element'),
457
- width: 300,
458
- search: true
459
- });
460
- }
461
- }
462
- }
463
- });
464
- }
465
-
466
- if (is(businessObject, 'bpmn:SequenceFlow')) {
467
- assign(actions, {
468
- 'append.text-annotation': appendAction(
469
- 'bpmn:TextAnnotation',
470
- 'bpmn-icon-text-annotation',
471
- translate('Add text annotation')
472
- )
473
- });
474
- }
475
-
476
- if (
477
- isAny(businessObject, [
478
- 'bpmn:FlowNode',
479
- 'bpmn:InteractionNode',
480
- 'bpmn:DataObjectReference',
481
- 'bpmn:DataStoreReference',
482
- ])
483
- ) {
484
- assign(actions, {
485
- 'append.text-annotation': appendAction(
486
- 'bpmn:TextAnnotation',
487
- 'bpmn-icon-text-annotation',
488
- translate('Add text annotation')
489
- ),
490
- 'connect': {
491
- group: 'connect',
492
- className: 'bpmn-icon-connection-multi',
493
- title: translate('Connect to other element'),
494
- action: {
495
- click: startConnect,
496
- dragstart: startConnect,
497
- },
498
- },
499
- });
500
- }
501
-
502
- if (is(businessObject, 'bpmn:TextAnnotation')) {
503
- assign(actions, {
504
- 'connect': {
505
- group: 'connect',
506
- className: 'bpmn-icon-connection-multi',
507
- title: translate('Connect using association'),
508
- action: {
509
- click: startConnect,
510
- dragstart: startConnect,
511
- },
512
- },
513
- });
514
- }
515
-
516
- if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {
517
- assign(actions, {
518
- 'connect': {
519
- group: 'connect',
520
- className: 'bpmn-icon-connection-multi',
521
- title: translate('Connect using data input association'),
522
- action: {
523
- click: startConnect,
524
- dragstart: startConnect
525
- }
526
- }
527
- });
528
- }
529
-
530
- if (is(businessObject, 'bpmn:Group')) {
531
- assign(actions, {
532
- 'append.text-annotation': appendAction(
533
- 'bpmn:TextAnnotation',
534
- 'bpmn-icon-text-annotation',
535
- translate('Add text annotation')
536
- )
537
- });
538
- }
539
-
540
- // delete element entry, only show if allowed by rules
541
- var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });
542
-
543
- if (isArray(deleteAllowed)) {
544
-
545
- // was the element returned as a deletion candidate?
546
- deleteAllowed = deleteAllowed[0] === element;
547
- }
548
-
549
- if (deleteAllowed) {
550
- assign(actions, {
551
- 'delete': {
552
- group: 'edit',
553
- className: 'bpmn-icon-trash',
554
- title: translate('Delete'),
555
- action: {
556
- click: removeElement
557
- }
558
- }
559
- });
560
- }
561
-
562
- return actions;
563
- };
564
-
565
-
566
- // helpers /////////
567
-
568
- /**
569
- * @param {ModdleElement} businessObject
570
- * @param {string} type
571
- * @param {string} eventDefinitionType
572
- *
573
- * @return {boolean}
574
- */
575
- function isEventType(businessObject, type, eventDefinitionType) {
576
-
577
- var isType = businessObject.$instanceOf(type);
578
- var isDefinition = false;
579
-
580
- var definitions = businessObject.eventDefinitions || [];
581
- forEach(definitions, function(def) {
582
- if (def.$type === eventDefinitionType) {
583
- isDefinition = true;
584
- }
585
- });
586
-
587
- return isType && isDefinition;
588
- }
589
-
590
- function includes(array, item) {
591
- return array.indexOf(item) !== -1;
1
+ import {
2
+ assign,
3
+ forEach,
4
+ isArray,
5
+ every
6
+ } from 'min-dash';
7
+
8
+ import {
9
+ is
10
+ } from '../../util/ModelUtil';
11
+
12
+ import {
13
+ isExpanded,
14
+ isHorizontal,
15
+ isEventSubProcess
16
+ } from '../../util/DiUtil';
17
+
18
+ import {
19
+ isAny
20
+ } from '../modeling/util/ModelingUtil';
21
+
22
+ import {
23
+ getChildLanes
24
+ } from '../modeling/util/LaneUtil';
25
+
26
+ import {
27
+ hasPrimaryModifier
28
+ } from 'diagram-js/lib/util/Mouse';
29
+
30
+ /**
31
+ * @typedef {import('didi').Injector} Injector
32
+ * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
33
+ * @typedef {import('diagram-js/lib/features/context-pad/ContextPad').default} ContextPad
34
+ * @typedef {import('../modeling/Modeling').default} Modeling
35
+ * @typedef {import('../modeling/ElementFactory').default} ElementFactory
36
+ * @typedef {import('diagram-js/lib/features/connect/Connect').default} Connect
37
+ * @typedef {import('diagram-js/lib/features/create/Create').default} Create
38
+ * @typedef {import('diagram-js/lib/features/popup-menu/PopupMenu').default} PopupMenu
39
+ * @typedef {import('diagram-js/lib/features/canvas/Canvas').default} Canvas
40
+ * @typedef {import('diagram-js/lib/features/rules/Rules').default} Rules
41
+ * @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
42
+ *
43
+ * @typedef {import('../../model/Types').Element} Element
44
+ * @typedef {import('../../model/Types').ModdleElement} ModdleElement
45
+ *
46
+ * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').default<Element>} BaseContextPadProvider
47
+ * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntries} ContextPadEntries
48
+ * @typedef {import('diagram-js/lib/features/context-pad/ContextPadProvider').ContextPadEntry} ContextPadEntry
49
+ *
50
+ * @typedef { { autoPlace?: boolean; } } ContextPadConfig
51
+ */
52
+
53
+ /**
54
+ * BPMN-specific context pad provider.
55
+ *
56
+ * @implements {BaseContextPadProvider}
57
+ *
58
+ * @param {ContextPadConfig} config
59
+ * @param {Injector} injector
60
+ * @param {EventBus} eventBus
61
+ * @param {ContextPad} contextPad
62
+ * @param {Modeling} modeling
63
+ * @param {ElementFactory} elementFactory
64
+ * @param {Connect} connect
65
+ * @param {Create} create
66
+ * @param {PopupMenu} popupMenu
67
+ * @param {Canvas} canvas
68
+ * @param {Rules} rules
69
+ * @param {Translate} translate
70
+ */
71
+ export default function ContextPadProvider(
72
+ config, injector, eventBus,
73
+ contextPad, modeling, elementFactory,
74
+ connect, create, popupMenu,
75
+ canvas, rules, translate, appendPreview) {
76
+
77
+ config = config || {};
78
+
79
+ contextPad.registerProvider(this);
80
+
81
+ this._contextPad = contextPad;
82
+
83
+ this._modeling = modeling;
84
+
85
+ this._elementFactory = elementFactory;
86
+ this._connect = connect;
87
+ this._create = create;
88
+ this._popupMenu = popupMenu;
89
+ this._canvas = canvas;
90
+ this._rules = rules;
91
+ this._translate = translate;
92
+ this._eventBus = eventBus;
93
+ this._appendPreview = appendPreview;
94
+
95
+ if (config.autoPlace !== false) {
96
+ this._autoPlace = injector.get('autoPlace', false);
97
+ }
98
+
99
+ eventBus.on('create.end', 250, function(event) {
100
+ var context = event.context,
101
+ shape = context.shape;
102
+
103
+ if (!hasPrimaryModifier(event) || !contextPad.isOpen(shape)) {
104
+ return;
105
+ }
106
+
107
+ var entries = contextPad.getEntries(shape);
108
+
109
+ if (entries.replace) {
110
+ entries.replace.action.click(event, shape);
111
+ }
112
+ });
113
+
114
+ eventBus.on('contextPad.close', function() {
115
+ appendPreview.cleanUp();
116
+ });
117
+ }
118
+
119
+ ContextPadProvider.$inject = [
120
+ 'config.contextPad',
121
+ 'injector',
122
+ 'eventBus',
123
+ 'contextPad',
124
+ 'modeling',
125
+ 'elementFactory',
126
+ 'connect',
127
+ 'create',
128
+ 'popupMenu',
129
+ 'canvas',
130
+ 'rules',
131
+ 'translate',
132
+ 'appendPreview'
133
+ ];
134
+
135
+ /**
136
+ * @param {Element[]} elements
137
+ *
138
+ * @return {ContextPadEntries}
139
+ */
140
+ ContextPadProvider.prototype.getMultiElementContextPadEntries = function(elements) {
141
+ var modeling = this._modeling;
142
+
143
+ var actions = {};
144
+
145
+ if (this._isDeleteAllowed(elements)) {
146
+ assign(actions, {
147
+ 'delete': {
148
+ group: 'edit',
149
+ className: 'bpmn-icon-trash',
150
+ title: this._translate('Delete'),
151
+ action: {
152
+ click: function(event, elements) {
153
+ modeling.removeElements(elements.slice());
154
+ }
155
+ }
156
+ }
157
+ });
158
+ }
159
+
160
+ return actions;
161
+ };
162
+
163
+ /**
164
+ * @param {Element[]} elements
165
+ *
166
+ * @return {boolean}
167
+ */
168
+ ContextPadProvider.prototype._isDeleteAllowed = function(elements) {
169
+
170
+ var baseAllowed = this._rules.allowed('elements.delete', {
171
+ elements: elements
172
+ });
173
+
174
+ if (isArray(baseAllowed)) {
175
+ return every(baseAllowed, function(element) {
176
+ return includes(baseAllowed, element);
177
+ });
178
+ }
179
+
180
+ return baseAllowed;
181
+ };
182
+
183
+ /**
184
+ * @param {Element} element
185
+ *
186
+ * @return {ContextPadEntries}
187
+ */
188
+ ContextPadProvider.prototype.getContextPadEntries = function(element) {
189
+ var contextPad = this._contextPad,
190
+ modeling = this._modeling,
191
+ elementFactory = this._elementFactory,
192
+ connect = this._connect,
193
+ create = this._create,
194
+ popupMenu = this._popupMenu,
195
+ rules = this._rules,
196
+ autoPlace = this._autoPlace,
197
+ translate = this._translate,
198
+ appendPreview = this._appendPreview;
199
+
200
+ var actions = {};
201
+
202
+ if (element.type === 'label') {
203
+ return actions;
204
+ }
205
+
206
+ var businessObject = element.businessObject;
207
+
208
+ function startConnect(event, element) {
209
+ connect.start(event, element);
210
+ }
211
+
212
+ function removeElement(e, element) {
213
+ modeling.removeElements([ element ]);
214
+ }
215
+
216
+ function getReplaceMenuPosition(element) {
217
+
218
+ var Y_OFFSET = 5;
219
+
220
+ var pad = contextPad.getPad(element).html;
221
+
222
+ var padRect = pad.getBoundingClientRect();
223
+
224
+ var pos = {
225
+ x: padRect.left,
226
+ y: padRect.bottom + Y_OFFSET
227
+ };
228
+
229
+ return pos;
230
+ }
231
+
232
+ /**
233
+ * Create an append action.
234
+ *
235
+ * @param {string} type
236
+ * @param {string} className
237
+ * @param {string} title
238
+ * @param {Object} [options]
239
+ *
240
+ * @return {ContextPadEntry}
241
+ */
242
+ function appendAction(type, className, title, options) {
243
+
244
+ function appendStart(event, element) {
245
+
246
+ var shape = elementFactory.createShape(assign({ type: type }, options));
247
+
248
+ create.start(event, shape, {
249
+ source: element
250
+ });
251
+ }
252
+
253
+ var append = autoPlace ? function(_, element) {
254
+ var shape = elementFactory.createShape(assign({ type: type }, options));
255
+
256
+ autoPlace.append(element, shape);
257
+ } : appendStart;
258
+
259
+ var previewAppend = autoPlace ? function(_, element) {
260
+
261
+ // mouseover
262
+ appendPreview.create(element, type, options);
263
+
264
+ return () => {
265
+
266
+ // mouseout
267
+ appendPreview.cleanUp();
268
+ };
269
+ } : null;
270
+
271
+ return {
272
+ group: 'model',
273
+ className: className,
274
+ title: title,
275
+ action: {
276
+ dragstart: appendStart,
277
+ click: append,
278
+ hover: previewAppend
279
+ }
280
+ };
281
+ }
282
+
283
+ function splitLaneHandler(count) {
284
+
285
+ return function(_, element) {
286
+
287
+ // actual split
288
+ modeling.splitLane(element, count);
289
+
290
+ // refresh context pad after split to
291
+ // get rid of split icons
292
+ contextPad.open(element, true);
293
+ };
294
+ }
295
+
296
+
297
+ if (isAny(businessObject, [ 'bpmn:Lane', 'bpmn:Participant' ]) && isExpanded(element)) {
298
+
299
+ var childLanes = getChildLanes(element);
300
+
301
+ assign(actions, {
302
+ 'lane-insert-above': {
303
+ group: 'lane-insert-above',
304
+ className: 'bpmn-icon-lane-insert-above',
305
+ title: translate('Add lane above'),
306
+ action: {
307
+ click: function(event, element) {
308
+ modeling.addLane(element, 'top');
309
+ }
310
+ }
311
+ }
312
+ });
313
+
314
+ if (childLanes.length < 2) {
315
+
316
+ if (isHorizontal(element) ? element.height >= 120 : element.width >= 120) {
317
+ assign(actions, {
318
+ 'lane-divide-two': {
319
+ group: 'lane-divide',
320
+ className: 'bpmn-icon-lane-divide-two',
321
+ title: translate('Divide into two lanes'),
322
+ action: {
323
+ click: splitLaneHandler(2)
324
+ }
325
+ }
326
+ });
327
+ }
328
+
329
+ if (isHorizontal(element) ? element.height >= 180 : element.width >= 180) {
330
+ assign(actions, {
331
+ 'lane-divide-three': {
332
+ group: 'lane-divide',
333
+ className: 'bpmn-icon-lane-divide-three',
334
+ title: translate('Divide into three lanes'),
335
+ action: {
336
+ click: splitLaneHandler(3)
337
+ }
338
+ }
339
+ });
340
+ }
341
+ }
342
+
343
+ assign(actions, {
344
+ 'lane-insert-below': {
345
+ group: 'lane-insert-below',
346
+ className: 'bpmn-icon-lane-insert-below',
347
+ title: translate('Add lane below'),
348
+ action: {
349
+ click: function(event, element) {
350
+ modeling.addLane(element, 'bottom');
351
+ }
352
+ }
353
+ }
354
+ });
355
+
356
+ }
357
+
358
+ if (is(businessObject, 'bpmn:FlowNode')) {
359
+
360
+ if (is(businessObject, 'bpmn:EventBasedGateway')) {
361
+
362
+ assign(actions, {
363
+ 'append.receive-task': appendAction(
364
+ 'bpmn:ReceiveTask',
365
+ 'bpmn-icon-receive-task',
366
+ translate('Append receive task')
367
+ ),
368
+ 'append.message-intermediate-event': appendAction(
369
+ 'bpmn:IntermediateCatchEvent',
370
+ 'bpmn-icon-intermediate-event-catch-message',
371
+ translate('Append message intermediate catch event'),
372
+ { eventDefinitionType: 'bpmn:MessageEventDefinition' }
373
+ ),
374
+ 'append.timer-intermediate-event': appendAction(
375
+ 'bpmn:IntermediateCatchEvent',
376
+ 'bpmn-icon-intermediate-event-catch-timer',
377
+ translate('Append timer intermediate catch event'),
378
+ { eventDefinitionType: 'bpmn:TimerEventDefinition' }
379
+ ),
380
+ 'append.condition-intermediate-event': appendAction(
381
+ 'bpmn:IntermediateCatchEvent',
382
+ 'bpmn-icon-intermediate-event-catch-condition',
383
+ translate('Append conditional intermediate catch event'),
384
+ { eventDefinitionType: 'bpmn:ConditionalEventDefinition' }
385
+ ),
386
+ 'append.signal-intermediate-event': appendAction(
387
+ 'bpmn:IntermediateCatchEvent',
388
+ 'bpmn-icon-intermediate-event-catch-signal',
389
+ translate('Append signal intermediate catch event'),
390
+ { eventDefinitionType: 'bpmn:SignalEventDefinition' }
391
+ )
392
+ });
393
+ } else
394
+
395
+ if (isEventType(businessObject, 'bpmn:BoundaryEvent', 'bpmn:CompensateEventDefinition')) {
396
+
397
+ assign(actions, {
398
+ 'append.compensation-activity':
399
+ appendAction(
400
+ 'bpmn:Task',
401
+ 'bpmn-icon-task',
402
+ translate('Append compensation activity'),
403
+ {
404
+ isForCompensation: true
405
+ }
406
+ )
407
+ });
408
+ } else
409
+
410
+ if (!is(businessObject, 'bpmn:EndEvent') &&
411
+ !businessObject.isForCompensation &&
412
+ !isEventType(businessObject, 'bpmn:IntermediateThrowEvent', 'bpmn:LinkEventDefinition') &&
413
+ !isEventSubProcess(businessObject)) {
414
+
415
+ assign(actions, {
416
+ 'append.end-event': appendAction(
417
+ 'bpmn:EndEvent',
418
+ 'bpmn-icon-end-event-none',
419
+ translate('Append end event')
420
+ ),
421
+ 'append.gateway': appendAction(
422
+ 'bpmn:ExclusiveGateway',
423
+ 'bpmn-icon-gateway-none',
424
+ translate('Append gateway')
425
+ ),
426
+ 'append.append-task': appendAction(
427
+ 'bpmn:Task',
428
+ 'bpmn-icon-task',
429
+ translate('Append task')
430
+ ),
431
+ 'append.intermediate-event': appendAction(
432
+ 'bpmn:IntermediateThrowEvent',
433
+ 'bpmn-icon-intermediate-event-none',
434
+ translate('Append intermediate/boundary event')
435
+ )
436
+ });
437
+ }
438
+ }
439
+
440
+ if (!popupMenu.isEmpty(element, 'bpmn-replace')) {
441
+
442
+ // Replace menu entry
443
+ assign(actions, {
444
+ 'replace': {
445
+ group: 'edit',
446
+ className: 'bpmn-icon-screw-wrench',
447
+ title: translate('Change element'),
448
+ action: {
449
+ click: function(event, element) {
450
+
451
+ var position = assign(getReplaceMenuPosition(element), {
452
+ cursor: { x: event.x, y: event.y }
453
+ });
454
+
455
+ popupMenu.open(element, 'bpmn-replace', position, {
456
+ title: translate('Change element'),
457
+ width: 300,
458
+ search: true
459
+ });
460
+ }
461
+ }
462
+ }
463
+ });
464
+ }
465
+
466
+ if (is(businessObject, 'bpmn:SequenceFlow')) {
467
+ assign(actions, {
468
+ 'append.text-annotation': appendAction(
469
+ 'bpmn:TextAnnotation',
470
+ 'bpmn-icon-text-annotation',
471
+ translate('Add text annotation')
472
+ )
473
+ });
474
+ }
475
+
476
+ if (
477
+ isAny(businessObject, [
478
+ 'bpmn:FlowNode',
479
+ 'bpmn:InteractionNode',
480
+ 'bpmn:DataObjectReference',
481
+ 'bpmn:DataStoreReference',
482
+ ])
483
+ ) {
484
+ assign(actions, {
485
+ 'append.text-annotation': appendAction(
486
+ 'bpmn:TextAnnotation',
487
+ 'bpmn-icon-text-annotation',
488
+ translate('Add text annotation')
489
+ ),
490
+ 'connect': {
491
+ group: 'connect',
492
+ className: 'bpmn-icon-connection-multi',
493
+ title: translate('Connect to other element'),
494
+ action: {
495
+ click: startConnect,
496
+ dragstart: startConnect,
497
+ },
498
+ },
499
+ });
500
+ }
501
+
502
+ if (is(businessObject, 'bpmn:TextAnnotation')) {
503
+ assign(actions, {
504
+ 'connect': {
505
+ group: 'connect',
506
+ className: 'bpmn-icon-connection-multi',
507
+ title: translate('Connect using association'),
508
+ action: {
509
+ click: startConnect,
510
+ dragstart: startConnect,
511
+ },
512
+ },
513
+ });
514
+ }
515
+
516
+ if (isAny(businessObject, [ 'bpmn:DataObjectReference', 'bpmn:DataStoreReference' ])) {
517
+ assign(actions, {
518
+ 'connect': {
519
+ group: 'connect',
520
+ className: 'bpmn-icon-connection-multi',
521
+ title: translate('Connect using data input association'),
522
+ action: {
523
+ click: startConnect,
524
+ dragstart: startConnect
525
+ }
526
+ }
527
+ });
528
+ }
529
+
530
+ if (is(businessObject, 'bpmn:Group')) {
531
+ assign(actions, {
532
+ 'append.text-annotation': appendAction(
533
+ 'bpmn:TextAnnotation',
534
+ 'bpmn-icon-text-annotation',
535
+ translate('Add text annotation')
536
+ )
537
+ });
538
+ }
539
+
540
+ // delete element entry, only show if allowed by rules
541
+ var deleteAllowed = rules.allowed('elements.delete', { elements: [ element ] });
542
+
543
+ if (isArray(deleteAllowed)) {
544
+
545
+ // was the element returned as a deletion candidate?
546
+ deleteAllowed = deleteAllowed[0] === element;
547
+ }
548
+
549
+ if (deleteAllowed) {
550
+ assign(actions, {
551
+ 'delete': {
552
+ group: 'edit',
553
+ className: 'bpmn-icon-trash',
554
+ title: translate('Delete'),
555
+ action: {
556
+ click: removeElement
557
+ }
558
+ }
559
+ });
560
+ }
561
+
562
+ return actions;
563
+ };
564
+
565
+
566
+ // helpers /////////
567
+
568
+ /**
569
+ * @param {ModdleElement} businessObject
570
+ * @param {string} type
571
+ * @param {string} eventDefinitionType
572
+ *
573
+ * @return {boolean}
574
+ */
575
+ function isEventType(businessObject, type, eventDefinitionType) {
576
+
577
+ var isType = businessObject.$instanceOf(type);
578
+ var isDefinition = false;
579
+
580
+ var definitions = businessObject.eventDefinitions || [];
581
+ forEach(definitions, function(def) {
582
+ if (def.$type === eventDefinitionType) {
583
+ isDefinition = true;
584
+ }
585
+ });
586
+
587
+ return isType && isDefinition;
588
+ }
589
+
590
+ function includes(array, item) {
591
+ return array.indexOf(item) !== -1;
592
592
  }