bpmn-js 17.6.1 → 17.6.2

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