bpmn-js 17.6.0 → 17.6.2

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