bpmn-js 17.6.0 → 17.6.2

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