bpmn-js 17.7.0 → 17.7.1

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 (337) 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 +36730 -36727
  5. package/dist/bpmn-modeler.production.min.js +4 -4
  6. package/dist/bpmn-navigated-viewer.development.js +21139 -21136
  7. package/dist/bpmn-navigated-viewer.production.min.js +3 -3
  8. package/dist/bpmn-viewer.development.js +21054 -21051
  9. package/dist/bpmn-viewer.production.min.js +3 -3
  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/index.d.ts +7 -7
  61. package/lib/features/context-pad/index.js +22 -22
  62. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  63. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  64. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  65. package/lib/features/copy-paste/ModdleCopy.js +275 -275
  66. package/lib/features/copy-paste/index.d.ts +9 -9
  67. package/lib/features/copy-paste/index.js +13 -13
  68. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  69. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  70. package/lib/features/di-ordering/index.d.ts +6 -6
  71. package/lib/features/di-ordering/index.js +7 -7
  72. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  73. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  74. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  75. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  76. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  77. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  78. package/lib/features/distribute-elements/index.d.ts +9 -9
  79. package/lib/features/distribute-elements/index.js +19 -19
  80. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  81. package/lib/features/drilldown/DrilldownBreadcrumbs.js +131 -131
  82. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  83. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  84. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +18 -18
  85. package/lib/features/drilldown/DrilldownOverlayBehavior.js +210 -210
  86. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  87. package/lib/features/drilldown/SubprocessCompatibility.js +266 -268
  88. package/lib/features/drilldown/index.d.ts +13 -13
  89. package/lib/features/drilldown/index.js +16 -16
  90. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  91. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  92. package/lib/features/editor-actions/index.d.ts +6 -6
  93. package/lib/features/editor-actions/index.js +10 -10
  94. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  95. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +12 -12
  96. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  97. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  98. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  99. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  100. package/lib/features/grid-snapping/index.d.ts +11 -11
  101. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  102. package/lib/features/interaction-events/BpmnInteractionEvents.js +150 -150
  103. package/lib/features/interaction-events/index.d.ts +6 -6
  104. package/lib/features/interaction-events/index.js +5 -5
  105. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  106. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  107. package/lib/features/keyboard/index.d.ts +7 -7
  108. package/lib/features/keyboard/index.js +11 -11
  109. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  110. package/lib/features/label-editing/LabelEditingPreview.js +144 -144
  111. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  112. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  113. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  114. package/lib/features/label-editing/LabelUtil.js +4 -4
  115. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  116. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  117. package/lib/features/label-editing/index.d.ts +9 -9
  118. package/lib/features/label-editing/index.js +21 -21
  119. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  120. package/lib/features/modeling/BpmnFactory.js +180 -180
  121. package/lib/features/modeling/BpmnLayouter.d.ts +26 -26
  122. package/lib/features/modeling/BpmnLayouter.js +481 -481
  123. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  124. package/lib/features/modeling/BpmnUpdater.js +837 -837
  125. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  126. package/lib/features/modeling/ElementFactory.js +406 -406
  127. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  128. package/lib/features/modeling/Modeling.d.ts +150 -150
  129. package/lib/features/modeling/Modeling.js +307 -307
  130. package/lib/features/modeling/Modeling.test.ts +147 -147
  131. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +20 -20
  132. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +284 -284
  133. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  134. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  135. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  136. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  137. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  138. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  139. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  140. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  141. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  142. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  143. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  144. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  145. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  146. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  147. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  148. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  149. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  150. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  151. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  152. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  153. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  154. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  155. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  156. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  157. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  158. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  159. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  160. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  161. package/lib/features/modeling/behavior/GroupBehavior.js +332 -332
  162. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  163. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  164. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  165. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  166. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  167. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  168. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  169. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  170. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  171. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  172. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  173. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  174. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  175. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  176. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  177. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  178. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +54 -54
  179. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  180. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  181. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  182. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  183. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +67 -67
  184. package/lib/features/modeling/behavior/ResizeBehavior.js +262 -262
  185. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  186. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  187. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  188. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  190. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  192. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  194. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  196. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  198. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  200. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  202. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  204. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  206. package/lib/features/modeling/behavior/index.d.ts +2 -2
  207. package/lib/features/modeling/behavior/index.js +128 -128
  208. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  209. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  210. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  212. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  213. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  215. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  216. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  217. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  219. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  220. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  221. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  223. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  224. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  225. package/lib/features/modeling/cmd/AddLaneHandler.js +192 -192
  226. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  227. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  228. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  230. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  231. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  232. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  233. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  235. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  237. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  239. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  241. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  242. package/lib/features/modeling/index.d.ts +27 -27
  243. package/lib/features/modeling/index.js +45 -45
  244. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  245. package/lib/features/modeling/util/LaneUtil.js +188 -188
  246. package/lib/features/modeling/util/ModelingUtil.d.ts +21 -21
  247. package/lib/features/modeling/util/ModelingUtil.js +54 -54
  248. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  249. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  250. package/lib/features/modeling-feedback/index.d.ts +7 -7
  251. package/lib/features/modeling-feedback/index.js +12 -12
  252. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  253. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  254. package/lib/features/ordering/index.d.ts +6 -6
  255. package/lib/features/ordering/index.js +5 -5
  256. package/lib/features/outline/OutlineProvider.d.ts +34 -34
  257. package/lib/features/outline/OutlineProvider.js +179 -179
  258. package/lib/features/outline/OutlineUtil.d.ts +18 -18
  259. package/lib/features/outline/OutlineUtil.js +31 -31
  260. package/lib/features/outline/index.d.ts +7 -7
  261. package/lib/features/outline/index.js +10 -10
  262. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  263. package/lib/features/palette/PaletteProvider.js +214 -214
  264. package/lib/features/palette/index.d.ts +9 -9
  265. package/lib/features/palette/index.js +23 -23
  266. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  267. package/lib/features/popup-menu/ReplaceMenuProvider.js +679 -679
  268. package/lib/features/popup-menu/index.d.ts +11 -11
  269. package/lib/features/popup-menu/index.js +16 -16
  270. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  271. package/lib/features/popup-menu/util/Icons.js +14 -14
  272. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  274. package/lib/features/replace/BpmnReplace.d.ts +47 -47
  275. package/lib/features/replace/BpmnReplace.js +382 -382
  276. package/lib/features/replace/ReplaceOptions.d.ts +75 -75
  277. package/lib/features/replace/ReplaceOptions.js +919 -919
  278. package/lib/features/replace/index.d.ts +9 -9
  279. package/lib/features/replace/index.js +14 -14
  280. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  281. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  282. package/lib/features/replace-preview/index.d.ts +7 -7
  283. package/lib/features/replace-preview/index.js +11 -11
  284. package/lib/features/rules/BpmnRules.d.ts +181 -181
  285. package/lib/features/rules/BpmnRules.js +1191 -1191
  286. package/lib/features/rules/index.d.ts +7 -7
  287. package/lib/features/rules/index.js +11 -11
  288. package/lib/features/search/BpmnSearchProvider.d.ts +29 -29
  289. package/lib/features/search/BpmnSearchProvider.js +136 -136
  290. package/lib/features/search/index.d.ts +7 -7
  291. package/lib/features/search/index.js +12 -12
  292. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  293. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  295. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  296. package/lib/features/snapping/index.d.ts +9 -9
  297. package/lib/features/snapping/index.js +12 -12
  298. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  299. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  300. package/lib/features/space-tool/index.d.ts +6 -6
  301. package/lib/features/space-tool/index.js +7 -7
  302. package/lib/import/BpmnImporter.d.ts +51 -51
  303. package/lib/import/BpmnImporter.js +363 -363
  304. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  305. package/lib/import/BpmnTreeWalker.js +453 -453
  306. package/lib/import/Importer.d.ts +25 -25
  307. package/lib/import/Importer.js +222 -217
  308. package/lib/import/Util.d.ts +1 -1
  309. package/lib/import/Util.js +6 -6
  310. package/lib/import/index.d.ts +6 -6
  311. package/lib/import/index.js +9 -9
  312. package/lib/model/Types.d.ts +25 -25
  313. package/lib/model/Types.ts +40 -40
  314. package/lib/util/CompatibilityUtil.d.ts +8 -8
  315. package/lib/util/CompatibilityUtil.js +29 -29
  316. package/lib/util/DiUtil.d.ts +60 -60
  317. package/lib/util/DiUtil.js +122 -122
  318. package/lib/util/DrilldownUtil.d.ts +39 -39
  319. package/lib/util/DrilldownUtil.js +69 -69
  320. package/lib/util/LabelUtil.d.ts +83 -83
  321. package/lib/util/LabelUtil.js +262 -262
  322. package/lib/util/ModelUtil.d.ts +40 -40
  323. package/lib/util/ModelUtil.js +58 -58
  324. package/lib/util/PoweredByUtil.d.ts +8 -8
  325. package/lib/util/PoweredByUtil.js +99 -99
  326. package/lib/util/Types.js +4 -4
  327. package/lib/util/Types.ts +3 -3
  328. package/package.json +132 -132
  329. package/test/helper/TranslationCollector.js +15 -15
  330. package/test/helper/index.js +313 -313
  331. package/test/matchers/BoundsMatchers.js +252 -252
  332. package/test/matchers/ConnectionMatchers.js +165 -165
  333. package/test/matchers/JSONMatcher.js +19 -19
  334. package/test/util/KeyEvents.js +22 -22
  335. package/test/util/MockEvents.js +61 -61
  336. package/test/util/custom-rules/CustomRules.js +16 -16
  337. package/test/util/custom-rules/index.js +6 -6
@@ -1,481 +1,481 @@
1
- import inherits from 'inherits-browser';
2
-
3
- import {
4
- assign
5
- } from 'min-dash';
6
-
7
- import BaseLayouter from 'diagram-js/lib/layout/BaseLayouter';
8
-
9
- import {
10
- repairConnection,
11
- withoutRedundantPoints
12
- } from 'diagram-js/lib/layout/ManhattanLayout';
13
-
14
- import {
15
- getMid,
16
- getOrientation
17
- } from 'diagram-js/lib/layout/LayoutUtil';
18
-
19
- import {
20
- isExpanded
21
- } from '../../util/DiUtil';
22
-
23
- import { is } from '../../util/ModelUtil';
24
-
25
- import { isDirectionHorizontal } from './util/ModelingUtil';
26
-
27
- /**
28
- * @typedef {import('diagram-js/lib/util/Types').Point} Point
29
- *
30
- * @typedef {import('../../model/Types').Connection} Connection
31
- * @typedef {import('../../model/Types').Element} Element
32
- *
33
- * @typedef {import('diagram-js/lib/layout/BaseLayouter').LayoutConnectionHints} LayoutConnectionHints
34
- *
35
- * @typedef { {
36
- * source?: Element;
37
- * target?: Element;
38
- * waypoints?: Point[];
39
- * connectionStart?: Point;
40
- * connectionEnd?: Point;
41
- * } & LayoutConnectionHints } BpmnLayoutConnectionHints
42
- */
43
-
44
- var ATTACH_ORIENTATION_PADDING = -10,
45
- BOUNDARY_TO_HOST_THRESHOLD = 40;
46
-
47
- // layout all connection between flow elements h:h, except for
48
- // (1) outgoing of boundary events -> layout based on attach orientation and target orientation
49
- // (2) incoming/outgoing of gateways -> v:h for outgoing, h:v for incoming
50
- // (3) loops connect sides clockwise
51
- var PREFERRED_LAYOUTS_HORIZONTAL = {
52
- default: [ 'h:h' ],
53
- fromGateway: [ 'v:h' ],
54
- toGateway: [ 'h:v' ],
55
- loop: {
56
- fromTop: [ 't:r' ],
57
- fromRight: [ 'r:b' ],
58
- fromLeft: [ 'l:t' ],
59
- fromBottom: [ 'b:l' ]
60
- },
61
- boundaryLoop: {
62
- alternateHorizontalSide: 'b',
63
- alternateVerticalSide: 'l',
64
- default: 'v'
65
- },
66
- messageFlow: [ 'straight', 'v:v' ],
67
- subProcess: [ 'straight', 'h:h' ],
68
- isHorizontal: true
69
- };
70
-
71
- // for vertical layouts, switch h and v and loop counter-clockwise
72
- var PREFERRED_LAYOUTS_VERTICAL = {
73
- default: [ 'v:v' ],
74
- fromGateway: [ 'h:v' ],
75
- toGateway: [ 'v:h' ],
76
- loop: {
77
- fromTop: [ 't:l' ],
78
- fromRight: [ 'r:t' ],
79
- fromLeft: [ 'l:b' ],
80
- fromBottom: [ 'b:r' ]
81
- },
82
- boundaryLoop: {
83
- alternateHorizontalSide: 't',
84
- alternateVerticalSide: 'r',
85
- default: 'h'
86
- },
87
- messageFlow: [ 'straight', 'h:h' ],
88
- subProcess: [ 'straight', 'v:v' ],
89
- isHorizontal: false
90
- };
91
-
92
- var oppositeOrientationMapping = {
93
- 'top': 'bottom',
94
- 'top-right': 'bottom-left',
95
- 'top-left': 'bottom-right',
96
- 'right': 'left',
97
- 'bottom': 'top',
98
- 'bottom-right': 'top-left',
99
- 'bottom-left': 'top-right',
100
- 'left': 'right'
101
- };
102
-
103
- var orientationDirectionMapping = {
104
- top: 't',
105
- right: 'r',
106
- bottom: 'b',
107
- left: 'l'
108
- };
109
-
110
- export default function BpmnLayouter() {}
111
-
112
- inherits(BpmnLayouter, BaseLayouter);
113
-
114
- /**
115
- * Returns waypoints of laid out connection.
116
- *
117
- * @param {Connection} connection
118
- * @param {BpmnLayoutConnectionHints} [hints]
119
- *
120
- * @return {Point[]}
121
- */
122
- BpmnLayouter.prototype.layoutConnection = function(connection, hints) {
123
- if (!hints) {
124
- hints = {};
125
- }
126
-
127
- var source = hints.source || connection.source,
128
- target = hints.target || connection.target,
129
- waypoints = hints.waypoints || connection.waypoints,
130
- connectionStart = hints.connectionStart,
131
- connectionEnd = hints.connectionEnd;
132
-
133
- var manhattanOptions,
134
- updatedWaypoints;
135
-
136
- if (!connectionStart) {
137
- connectionStart = getConnectionDocking(waypoints && waypoints[ 0 ], source);
138
- }
139
-
140
- if (!connectionEnd) {
141
- connectionEnd = getConnectionDocking(waypoints && waypoints[ waypoints.length - 1 ], target);
142
- }
143
-
144
- if (is(connection, 'bpmn:Association') ||
145
- is(connection, 'bpmn:DataAssociation')) {
146
-
147
- if (waypoints && !isCompensationAssociation(source, target)) {
148
- return [].concat([ connectionStart ], waypoints.slice(1, -1), [ connectionEnd ]);
149
- }
150
- }
151
-
152
- var layout = isDirectionHorizontal(source) ? PREFERRED_LAYOUTS_HORIZONTAL : PREFERRED_LAYOUTS_VERTICAL;
153
-
154
- if (is(connection, 'bpmn:MessageFlow')) {
155
- manhattanOptions = getMessageFlowManhattanOptions(source, target, layout);
156
- } else if (is(connection, 'bpmn:SequenceFlow') || isCompensationAssociation(source, target)) {
157
-
158
- if (source === target) {
159
- manhattanOptions = {
160
- preferredLayouts: getLoopPreferredLayout(source, connection, layout)
161
- };
162
- } else if (is(source, 'bpmn:BoundaryEvent')) {
163
- manhattanOptions = {
164
- preferredLayouts: getBoundaryEventPreferredLayouts(source, target, connectionEnd, layout)
165
- };
166
- } else if (isExpandedSubProcess(source) || isExpandedSubProcess(target)) {
167
- manhattanOptions = {
168
- preferredLayouts: layout.subProcess,
169
- preserveDocking: getSubProcessPreserveDocking(source)
170
- };
171
- } else if (is(source, 'bpmn:Gateway')) {
172
- manhattanOptions = {
173
- preferredLayouts: layout.fromGateway
174
- };
175
- } else if (is(target, 'bpmn:Gateway')) {
176
- manhattanOptions = {
177
- preferredLayouts: layout.toGateway
178
- };
179
- } else {
180
- manhattanOptions = {
181
- preferredLayouts: layout.default
182
- };
183
- }
184
- }
185
-
186
- if (manhattanOptions) {
187
- manhattanOptions = assign(manhattanOptions, hints);
188
-
189
- updatedWaypoints = withoutRedundantPoints(repairConnection(
190
- source,
191
- target,
192
- connectionStart,
193
- connectionEnd,
194
- waypoints,
195
- manhattanOptions
196
- ));
197
- }
198
-
199
- return updatedWaypoints || [ connectionStart, connectionEnd ];
200
- };
201
-
202
-
203
- // helpers //////////
204
-
205
- function getAttachOrientation(attachedElement) {
206
- var hostElement = attachedElement.host;
207
-
208
- return getOrientation(getMid(attachedElement), hostElement, ATTACH_ORIENTATION_PADDING);
209
- }
210
-
211
- function getMessageFlowManhattanOptions(source, target, layout) {
212
- return {
213
- preferredLayouts: layout.messageFlow,
214
- preserveDocking: getMessageFlowPreserveDocking(source, target)
215
- };
216
- }
217
-
218
- function getMessageFlowPreserveDocking(source, target) {
219
-
220
- // (1) docking element connected to participant has precedence
221
- if (is(target, 'bpmn:Participant')) {
222
- return 'source';
223
- }
224
-
225
- if (is(source, 'bpmn:Participant')) {
226
- return 'target';
227
- }
228
-
229
- // (2) docking element connected to expanded sub-process has precedence
230
- if (isExpandedSubProcess(target)) {
231
- return 'source';
232
- }
233
-
234
- if (isExpandedSubProcess(source)) {
235
- return 'target';
236
- }
237
-
238
- // (3) docking event has precedence
239
- if (is(target, 'bpmn:Event')) {
240
- return 'target';
241
- }
242
-
243
- if (is(source, 'bpmn:Event')) {
244
- return 'source';
245
- }
246
-
247
- return null;
248
- }
249
-
250
- function getSubProcessPreserveDocking(source) {
251
- return isExpandedSubProcess(source) ? 'target' : 'source';
252
- }
253
-
254
- function getConnectionDocking(point, shape) {
255
- return point ? (point.original || point) : getMid(shape);
256
- }
257
-
258
- function isCompensationAssociation(source, target) {
259
- return is(target, 'bpmn:Activity') &&
260
- is(source, 'bpmn:BoundaryEvent') &&
261
- target.businessObject.isForCompensation;
262
- }
263
-
264
- function isExpandedSubProcess(element) {
265
- return is(element, 'bpmn:SubProcess') && isExpanded(element);
266
- }
267
-
268
- function isSame(a, b) {
269
- return a === b;
270
- }
271
-
272
- function isAnyOrientation(orientation, orientations) {
273
- return orientations.indexOf(orientation) !== -1;
274
- }
275
-
276
- function getHorizontalOrientation(orientation) {
277
- var matches = /right|left/.exec(orientation);
278
-
279
- return matches && matches[0];
280
- }
281
-
282
- function getVerticalOrientation(orientation) {
283
- var matches = /top|bottom/.exec(orientation);
284
-
285
- return matches && matches[0];
286
- }
287
-
288
- function isOppositeOrientation(a, b) {
289
- return oppositeOrientationMapping[a] === b;
290
- }
291
-
292
- function isOppositeHorizontalOrientation(a, b) {
293
- var horizontalOrientation = getHorizontalOrientation(a);
294
-
295
- var oppositeHorizontalOrientation = oppositeOrientationMapping[horizontalOrientation];
296
-
297
- return b.indexOf(oppositeHorizontalOrientation) !== -1;
298
- }
299
-
300
- function isOppositeVerticalOrientation(a, b) {
301
- var verticalOrientation = getVerticalOrientation(a);
302
-
303
- var oppositeVerticalOrientation = oppositeOrientationMapping[verticalOrientation];
304
-
305
- return b.indexOf(oppositeVerticalOrientation) !== -1;
306
- }
307
-
308
- function isHorizontalOrientation(orientation) {
309
- return orientation === 'right' || orientation === 'left';
310
- }
311
-
312
- function getLoopPreferredLayout(source, connection, layout) {
313
- var waypoints = connection.waypoints;
314
-
315
- var orientation = waypoints && waypoints.length && getOrientation(waypoints[0], source);
316
-
317
- if (orientation === 'top') {
318
- return layout.loop.fromTop;
319
- } else if (orientation === 'right') {
320
- return layout.loop.fromRight;
321
- } else if (orientation === 'left') {
322
- return layout.loop.fromLeft;
323
- }
324
-
325
- return layout.loop.fromBottom;
326
- }
327
-
328
- function getBoundaryEventPreferredLayouts(source, target, end, layout) {
329
- var sourceMid = getMid(source),
330
- targetMid = getMid(target),
331
- attachOrientation = getAttachOrientation(source),
332
- sourceLayout,
333
- targetLayout;
334
-
335
- var isLoop = isSame(source.host, target);
336
-
337
- var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
338
-
339
- var targetOrientation = getOrientation(targetMid, sourceMid, {
340
- x: source.width / 2 + target.width / 2,
341
- y: source.height / 2 + target.height / 2
342
- });
343
-
344
- if (isLoop) {
345
- return getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout);
346
- }
347
-
348
- // source layout
349
- sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
350
-
351
- // target layout
352
- targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
353
-
354
- return [ sourceLayout + ':' + targetLayout ];
355
- }
356
-
357
- function getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout) {
358
- var orientation = attachedToSide ? attachOrientation : layout.isHorizontal ? getVerticalOrientation(attachOrientation) : getHorizontalOrientation(attachOrientation),
359
- sourceLayout = orientationDirectionMapping[ orientation ],
360
- targetLayout;
361
-
362
- if (attachedToSide) {
363
- if (isHorizontalOrientation(attachOrientation)) {
364
- targetLayout = shouldConnectToSameSide('y', source, target, end) ? 'h' : layout.boundaryLoop.alternateHorizontalSide;
365
- } else {
366
- targetLayout = shouldConnectToSameSide('x', source, target, end) ? 'v' : layout.boundaryLoop.alternateVerticalSide;
367
- }
368
- } else {
369
- targetLayout = layout.boundaryLoop.default;
370
- }
371
-
372
- return [ sourceLayout + ':' + targetLayout ];
373
- }
374
-
375
- function shouldConnectToSameSide(axis, source, target, end) {
376
- var threshold = BOUNDARY_TO_HOST_THRESHOLD;
377
-
378
- return !(
379
- areCloseOnAxis(axis, end, target, threshold) ||
380
- areCloseOnAxis(axis, end, {
381
- x: target.x + target.width,
382
- y: target.y + target.height
383
- }, threshold) ||
384
- areCloseOnAxis(axis, end, getMid(source), threshold)
385
- );
386
- }
387
-
388
- function areCloseOnAxis(axis, a, b, threshold) {
389
- return Math.abs(a[ axis ] - b[ axis ]) < threshold;
390
- }
391
-
392
- function getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
393
-
394
- // attached to either top, right, bottom or left side
395
- if (attachedToSide) {
396
- return orientationDirectionMapping[ attachOrientation ];
397
- }
398
-
399
- // attached to either top-right, top-left, bottom-right or bottom-left corner
400
-
401
- var verticalAttachOrientation = getVerticalOrientation(attachOrientation),
402
- horizontalAttachOrientation = getHorizontalOrientation(attachOrientation),
403
- verticalTargetOrientation = getVerticalOrientation(targetOrientation),
404
- horizontalTargetOrientation = getHorizontalOrientation(targetOrientation);
405
-
406
- if (isHorizontal) {
407
-
408
- // same vertical or opposite horizontal orientation
409
- if (
410
- isSame(verticalAttachOrientation, verticalTargetOrientation) ||
411
- isOppositeOrientation(horizontalAttachOrientation, horizontalTargetOrientation)
412
- ) {
413
- return orientationDirectionMapping[ verticalAttachOrientation ];
414
- }
415
- } else {
416
-
417
- // same horizontal or opposite vertical orientation
418
- if (
419
- isSame(horizontalAttachOrientation, horizontalTargetOrientation) ||
420
- isOppositeOrientation(verticalAttachOrientation, verticalTargetOrientation)
421
- ) {
422
- return orientationDirectionMapping[ horizontalAttachOrientation ];
423
- }
424
- }
425
-
426
- // fallback
427
- return orientationDirectionMapping[ isHorizontal ? horizontalAttachOrientation : verticalAttachOrientation ];
428
- }
429
-
430
- function getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
431
-
432
- // attached to either top, right, bottom or left side
433
- if (attachedToSide) {
434
- if (isHorizontalOrientation(attachOrientation)) {
435
-
436
- // orientation is right or left
437
-
438
- // opposite horizontal orientation or same orientation
439
- if (
440
- isOppositeHorizontalOrientation(attachOrientation, targetOrientation) ||
441
- isSame(attachOrientation, targetOrientation)
442
- ) {
443
- return 'h';
444
- }
445
-
446
- // fallback
447
- return 'v';
448
- } else {
449
-
450
- // orientation is top or bottom
451
-
452
- // opposite vertical orientation or same orientation
453
- if (
454
- isOppositeVerticalOrientation(attachOrientation, targetOrientation) ||
455
- isSame(attachOrientation, targetOrientation)
456
- ) {
457
- return 'v';
458
- }
459
-
460
- // fallback
461
- return 'h';
462
- }
463
- }
464
-
465
- // attached to either top-right, top-left, bottom-right or bottom-left corner
466
- // and orientation is same on the counter-axis
467
-
468
- if (isHorizontal) {
469
- if (isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation))) {
470
- return 'h';
471
- } else {
472
- return 'v';
473
- }
474
- } else {
475
- if (isSame(getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation))) {
476
- return 'v';
477
- } else {
478
- return 'h';
479
- }
480
- }
481
- }
1
+ import inherits from 'inherits-browser';
2
+
3
+ import {
4
+ assign
5
+ } from 'min-dash';
6
+
7
+ import BaseLayouter from 'diagram-js/lib/layout/BaseLayouter';
8
+
9
+ import {
10
+ repairConnection,
11
+ withoutRedundantPoints
12
+ } from 'diagram-js/lib/layout/ManhattanLayout';
13
+
14
+ import {
15
+ getMid,
16
+ getOrientation
17
+ } from 'diagram-js/lib/layout/LayoutUtil';
18
+
19
+ import {
20
+ isExpanded
21
+ } from '../../util/DiUtil';
22
+
23
+ import { is } from '../../util/ModelUtil';
24
+
25
+ import { isDirectionHorizontal } from './util/ModelingUtil';
26
+
27
+ /**
28
+ * @typedef {import('diagram-js/lib/util/Types').Point} Point
29
+ *
30
+ * @typedef {import('../../model/Types').Connection} Connection
31
+ * @typedef {import('../../model/Types').Element} Element
32
+ *
33
+ * @typedef {import('diagram-js/lib/layout/BaseLayouter').LayoutConnectionHints} LayoutConnectionHints
34
+ *
35
+ * @typedef { {
36
+ * source?: Element;
37
+ * target?: Element;
38
+ * waypoints?: Point[];
39
+ * connectionStart?: Point;
40
+ * connectionEnd?: Point;
41
+ * } & LayoutConnectionHints } BpmnLayoutConnectionHints
42
+ */
43
+
44
+ var ATTACH_ORIENTATION_PADDING = -10,
45
+ BOUNDARY_TO_HOST_THRESHOLD = 40;
46
+
47
+ // layout all connection between flow elements h:h, except for
48
+ // (1) outgoing of boundary events -> layout based on attach orientation and target orientation
49
+ // (2) incoming/outgoing of gateways -> v:h for outgoing, h:v for incoming
50
+ // (3) loops connect sides clockwise
51
+ var PREFERRED_LAYOUTS_HORIZONTAL = {
52
+ default: [ 'h:h' ],
53
+ fromGateway: [ 'v:h' ],
54
+ toGateway: [ 'h:v' ],
55
+ loop: {
56
+ fromTop: [ 't:r' ],
57
+ fromRight: [ 'r:b' ],
58
+ fromLeft: [ 'l:t' ],
59
+ fromBottom: [ 'b:l' ]
60
+ },
61
+ boundaryLoop: {
62
+ alternateHorizontalSide: 'b',
63
+ alternateVerticalSide: 'l',
64
+ default: 'v'
65
+ },
66
+ messageFlow: [ 'straight', 'v:v' ],
67
+ subProcess: [ 'straight', 'h:h' ],
68
+ isHorizontal: true
69
+ };
70
+
71
+ // for vertical layouts, switch h and v and loop counter-clockwise
72
+ var PREFERRED_LAYOUTS_VERTICAL = {
73
+ default: [ 'v:v' ],
74
+ fromGateway: [ 'h:v' ],
75
+ toGateway: [ 'v:h' ],
76
+ loop: {
77
+ fromTop: [ 't:l' ],
78
+ fromRight: [ 'r:t' ],
79
+ fromLeft: [ 'l:b' ],
80
+ fromBottom: [ 'b:r' ]
81
+ },
82
+ boundaryLoop: {
83
+ alternateHorizontalSide: 't',
84
+ alternateVerticalSide: 'r',
85
+ default: 'h'
86
+ },
87
+ messageFlow: [ 'straight', 'h:h' ],
88
+ subProcess: [ 'straight', 'v:v' ],
89
+ isHorizontal: false
90
+ };
91
+
92
+ var oppositeOrientationMapping = {
93
+ 'top': 'bottom',
94
+ 'top-right': 'bottom-left',
95
+ 'top-left': 'bottom-right',
96
+ 'right': 'left',
97
+ 'bottom': 'top',
98
+ 'bottom-right': 'top-left',
99
+ 'bottom-left': 'top-right',
100
+ 'left': 'right'
101
+ };
102
+
103
+ var orientationDirectionMapping = {
104
+ top: 't',
105
+ right: 'r',
106
+ bottom: 'b',
107
+ left: 'l'
108
+ };
109
+
110
+ export default function BpmnLayouter() {}
111
+
112
+ inherits(BpmnLayouter, BaseLayouter);
113
+
114
+ /**
115
+ * Returns waypoints of laid out connection.
116
+ *
117
+ * @param {Connection} connection
118
+ * @param {BpmnLayoutConnectionHints} [hints]
119
+ *
120
+ * @return {Point[]}
121
+ */
122
+ BpmnLayouter.prototype.layoutConnection = function(connection, hints) {
123
+ if (!hints) {
124
+ hints = {};
125
+ }
126
+
127
+ var source = hints.source || connection.source,
128
+ target = hints.target || connection.target,
129
+ waypoints = hints.waypoints || connection.waypoints,
130
+ connectionStart = hints.connectionStart,
131
+ connectionEnd = hints.connectionEnd;
132
+
133
+ var manhattanOptions,
134
+ updatedWaypoints;
135
+
136
+ if (!connectionStart) {
137
+ connectionStart = getConnectionDocking(waypoints && waypoints[ 0 ], source);
138
+ }
139
+
140
+ if (!connectionEnd) {
141
+ connectionEnd = getConnectionDocking(waypoints && waypoints[ waypoints.length - 1 ], target);
142
+ }
143
+
144
+ if (is(connection, 'bpmn:Association') ||
145
+ is(connection, 'bpmn:DataAssociation')) {
146
+
147
+ if (waypoints && !isCompensationAssociation(source, target)) {
148
+ return [].concat([ connectionStart ], waypoints.slice(1, -1), [ connectionEnd ]);
149
+ }
150
+ }
151
+
152
+ var layout = isDirectionHorizontal(source) ? PREFERRED_LAYOUTS_HORIZONTAL : PREFERRED_LAYOUTS_VERTICAL;
153
+
154
+ if (is(connection, 'bpmn:MessageFlow')) {
155
+ manhattanOptions = getMessageFlowManhattanOptions(source, target, layout);
156
+ } else if (is(connection, 'bpmn:SequenceFlow') || isCompensationAssociation(source, target)) {
157
+
158
+ if (source === target) {
159
+ manhattanOptions = {
160
+ preferredLayouts: getLoopPreferredLayout(source, connection, layout)
161
+ };
162
+ } else if (is(source, 'bpmn:BoundaryEvent')) {
163
+ manhattanOptions = {
164
+ preferredLayouts: getBoundaryEventPreferredLayouts(source, target, connectionEnd, layout)
165
+ };
166
+ } else if (isExpandedSubProcess(source) || isExpandedSubProcess(target)) {
167
+ manhattanOptions = {
168
+ preferredLayouts: layout.subProcess,
169
+ preserveDocking: getSubProcessPreserveDocking(source)
170
+ };
171
+ } else if (is(source, 'bpmn:Gateway')) {
172
+ manhattanOptions = {
173
+ preferredLayouts: layout.fromGateway
174
+ };
175
+ } else if (is(target, 'bpmn:Gateway')) {
176
+ manhattanOptions = {
177
+ preferredLayouts: layout.toGateway
178
+ };
179
+ } else {
180
+ manhattanOptions = {
181
+ preferredLayouts: layout.default
182
+ };
183
+ }
184
+ }
185
+
186
+ if (manhattanOptions) {
187
+ manhattanOptions = assign(manhattanOptions, hints);
188
+
189
+ updatedWaypoints = withoutRedundantPoints(repairConnection(
190
+ source,
191
+ target,
192
+ connectionStart,
193
+ connectionEnd,
194
+ waypoints,
195
+ manhattanOptions
196
+ ));
197
+ }
198
+
199
+ return updatedWaypoints || [ connectionStart, connectionEnd ];
200
+ };
201
+
202
+
203
+ // helpers //////////
204
+
205
+ function getAttachOrientation(attachedElement) {
206
+ var hostElement = attachedElement.host;
207
+
208
+ return getOrientation(getMid(attachedElement), hostElement, ATTACH_ORIENTATION_PADDING);
209
+ }
210
+
211
+ function getMessageFlowManhattanOptions(source, target, layout) {
212
+ return {
213
+ preferredLayouts: layout.messageFlow,
214
+ preserveDocking: getMessageFlowPreserveDocking(source, target)
215
+ };
216
+ }
217
+
218
+ function getMessageFlowPreserveDocking(source, target) {
219
+
220
+ // (1) docking element connected to participant has precedence
221
+ if (is(target, 'bpmn:Participant')) {
222
+ return 'source';
223
+ }
224
+
225
+ if (is(source, 'bpmn:Participant')) {
226
+ return 'target';
227
+ }
228
+
229
+ // (2) docking element connected to expanded sub-process has precedence
230
+ if (isExpandedSubProcess(target)) {
231
+ return 'source';
232
+ }
233
+
234
+ if (isExpandedSubProcess(source)) {
235
+ return 'target';
236
+ }
237
+
238
+ // (3) docking event has precedence
239
+ if (is(target, 'bpmn:Event')) {
240
+ return 'target';
241
+ }
242
+
243
+ if (is(source, 'bpmn:Event')) {
244
+ return 'source';
245
+ }
246
+
247
+ return null;
248
+ }
249
+
250
+ function getSubProcessPreserveDocking(source) {
251
+ return isExpandedSubProcess(source) ? 'target' : 'source';
252
+ }
253
+
254
+ function getConnectionDocking(point, shape) {
255
+ return point ? (point.original || point) : getMid(shape);
256
+ }
257
+
258
+ function isCompensationAssociation(source, target) {
259
+ return is(target, 'bpmn:Activity') &&
260
+ is(source, 'bpmn:BoundaryEvent') &&
261
+ target.businessObject.isForCompensation;
262
+ }
263
+
264
+ function isExpandedSubProcess(element) {
265
+ return is(element, 'bpmn:SubProcess') && isExpanded(element);
266
+ }
267
+
268
+ function isSame(a, b) {
269
+ return a === b;
270
+ }
271
+
272
+ function isAnyOrientation(orientation, orientations) {
273
+ return orientations.indexOf(orientation) !== -1;
274
+ }
275
+
276
+ function getHorizontalOrientation(orientation) {
277
+ var matches = /right|left/.exec(orientation);
278
+
279
+ return matches && matches[0];
280
+ }
281
+
282
+ function getVerticalOrientation(orientation) {
283
+ var matches = /top|bottom/.exec(orientation);
284
+
285
+ return matches && matches[0];
286
+ }
287
+
288
+ function isOppositeOrientation(a, b) {
289
+ return oppositeOrientationMapping[a] === b;
290
+ }
291
+
292
+ function isOppositeHorizontalOrientation(a, b) {
293
+ var horizontalOrientation = getHorizontalOrientation(a);
294
+
295
+ var oppositeHorizontalOrientation = oppositeOrientationMapping[horizontalOrientation];
296
+
297
+ return b.indexOf(oppositeHorizontalOrientation) !== -1;
298
+ }
299
+
300
+ function isOppositeVerticalOrientation(a, b) {
301
+ var verticalOrientation = getVerticalOrientation(a);
302
+
303
+ var oppositeVerticalOrientation = oppositeOrientationMapping[verticalOrientation];
304
+
305
+ return b.indexOf(oppositeVerticalOrientation) !== -1;
306
+ }
307
+
308
+ function isHorizontalOrientation(orientation) {
309
+ return orientation === 'right' || orientation === 'left';
310
+ }
311
+
312
+ function getLoopPreferredLayout(source, connection, layout) {
313
+ var waypoints = connection.waypoints;
314
+
315
+ var orientation = waypoints && waypoints.length && getOrientation(waypoints[0], source);
316
+
317
+ if (orientation === 'top') {
318
+ return layout.loop.fromTop;
319
+ } else if (orientation === 'right') {
320
+ return layout.loop.fromRight;
321
+ } else if (orientation === 'left') {
322
+ return layout.loop.fromLeft;
323
+ }
324
+
325
+ return layout.loop.fromBottom;
326
+ }
327
+
328
+ function getBoundaryEventPreferredLayouts(source, target, end, layout) {
329
+ var sourceMid = getMid(source),
330
+ targetMid = getMid(target),
331
+ attachOrientation = getAttachOrientation(source),
332
+ sourceLayout,
333
+ targetLayout;
334
+
335
+ var isLoop = isSame(source.host, target);
336
+
337
+ var attachedToSide = isAnyOrientation(attachOrientation, [ 'top', 'right', 'bottom', 'left' ]);
338
+
339
+ var targetOrientation = getOrientation(targetMid, sourceMid, {
340
+ x: source.width / 2 + target.width / 2,
341
+ y: source.height / 2 + target.height / 2
342
+ });
343
+
344
+ if (isLoop) {
345
+ return getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout);
346
+ }
347
+
348
+ // source layout
349
+ sourceLayout = getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
350
+
351
+ // target layout
352
+ targetLayout = getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, layout.isHorizontal);
353
+
354
+ return [ sourceLayout + ':' + targetLayout ];
355
+ }
356
+
357
+ function getBoundaryEventLoopLayout(attachOrientation, attachedToSide, source, target, end, layout) {
358
+ var orientation = attachedToSide ? attachOrientation : layout.isHorizontal ? getVerticalOrientation(attachOrientation) : getHorizontalOrientation(attachOrientation),
359
+ sourceLayout = orientationDirectionMapping[ orientation ],
360
+ targetLayout;
361
+
362
+ if (attachedToSide) {
363
+ if (isHorizontalOrientation(attachOrientation)) {
364
+ targetLayout = shouldConnectToSameSide('y', source, target, end) ? 'h' : layout.boundaryLoop.alternateHorizontalSide;
365
+ } else {
366
+ targetLayout = shouldConnectToSameSide('x', source, target, end) ? 'v' : layout.boundaryLoop.alternateVerticalSide;
367
+ }
368
+ } else {
369
+ targetLayout = layout.boundaryLoop.default;
370
+ }
371
+
372
+ return [ sourceLayout + ':' + targetLayout ];
373
+ }
374
+
375
+ function shouldConnectToSameSide(axis, source, target, end) {
376
+ var threshold = BOUNDARY_TO_HOST_THRESHOLD;
377
+
378
+ return !(
379
+ areCloseOnAxis(axis, end, target, threshold) ||
380
+ areCloseOnAxis(axis, end, {
381
+ x: target.x + target.width,
382
+ y: target.y + target.height
383
+ }, threshold) ||
384
+ areCloseOnAxis(axis, end, getMid(source), threshold)
385
+ );
386
+ }
387
+
388
+ function areCloseOnAxis(axis, a, b, threshold) {
389
+ return Math.abs(a[ axis ] - b[ axis ]) < threshold;
390
+ }
391
+
392
+ function getBoundaryEventSourceLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
393
+
394
+ // attached to either top, right, bottom or left side
395
+ if (attachedToSide) {
396
+ return orientationDirectionMapping[ attachOrientation ];
397
+ }
398
+
399
+ // attached to either top-right, top-left, bottom-right or bottom-left corner
400
+
401
+ var verticalAttachOrientation = getVerticalOrientation(attachOrientation),
402
+ horizontalAttachOrientation = getHorizontalOrientation(attachOrientation),
403
+ verticalTargetOrientation = getVerticalOrientation(targetOrientation),
404
+ horizontalTargetOrientation = getHorizontalOrientation(targetOrientation);
405
+
406
+ if (isHorizontal) {
407
+
408
+ // same vertical or opposite horizontal orientation
409
+ if (
410
+ isSame(verticalAttachOrientation, verticalTargetOrientation) ||
411
+ isOppositeOrientation(horizontalAttachOrientation, horizontalTargetOrientation)
412
+ ) {
413
+ return orientationDirectionMapping[ verticalAttachOrientation ];
414
+ }
415
+ } else {
416
+
417
+ // same horizontal or opposite vertical orientation
418
+ if (
419
+ isSame(horizontalAttachOrientation, horizontalTargetOrientation) ||
420
+ isOppositeOrientation(verticalAttachOrientation, verticalTargetOrientation)
421
+ ) {
422
+ return orientationDirectionMapping[ horizontalAttachOrientation ];
423
+ }
424
+ }
425
+
426
+ // fallback
427
+ return orientationDirectionMapping[ isHorizontal ? horizontalAttachOrientation : verticalAttachOrientation ];
428
+ }
429
+
430
+ function getBoundaryEventTargetLayout(attachOrientation, targetOrientation, attachedToSide, isHorizontal) {
431
+
432
+ // attached to either top, right, bottom or left side
433
+ if (attachedToSide) {
434
+ if (isHorizontalOrientation(attachOrientation)) {
435
+
436
+ // orientation is right or left
437
+
438
+ // opposite horizontal orientation or same orientation
439
+ if (
440
+ isOppositeHorizontalOrientation(attachOrientation, targetOrientation) ||
441
+ isSame(attachOrientation, targetOrientation)
442
+ ) {
443
+ return 'h';
444
+ }
445
+
446
+ // fallback
447
+ return 'v';
448
+ } else {
449
+
450
+ // orientation is top or bottom
451
+
452
+ // opposite vertical orientation or same orientation
453
+ if (
454
+ isOppositeVerticalOrientation(attachOrientation, targetOrientation) ||
455
+ isSame(attachOrientation, targetOrientation)
456
+ ) {
457
+ return 'v';
458
+ }
459
+
460
+ // fallback
461
+ return 'h';
462
+ }
463
+ }
464
+
465
+ // attached to either top-right, top-left, bottom-right or bottom-left corner
466
+ // and orientation is same on the counter-axis
467
+
468
+ if (isHorizontal) {
469
+ if (isSame(getVerticalOrientation(attachOrientation), getVerticalOrientation(targetOrientation))) {
470
+ return 'h';
471
+ } else {
472
+ return 'v';
473
+ }
474
+ } else {
475
+ if (isSame(getHorizontalOrientation(attachOrientation), getHorizontalOrientation(targetOrientation))) {
476
+ return 'v';
477
+ } else {
478
+ return 'h';
479
+ }
480
+ }
481
+ }