bpmn-js 18.2.0 → 18.3.0

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 +95 -95
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +38704 -38477
  5. package/dist/bpmn-modeler.production.min.js +11 -11
  6. package/dist/bpmn-navigated-viewer.development.js +21139 -21139
  7. package/dist/bpmn-navigated-viewer.production.min.js +1 -1
  8. package/dist/bpmn-viewer.development.js +21080 -21080
  9. package/dist/bpmn-viewer.production.min.js +1 -1
  10. package/lib/BaseModeler.d.ts +15 -15
  11. package/lib/BaseModeler.js +79 -79
  12. package/lib/BaseViewer.d.ts +352 -352
  13. package/lib/BaseViewer.js +858 -858
  14. package/lib/Modeler.d.ts +86 -86
  15. package/lib/Modeler.js +206 -206
  16. package/lib/NavigatedViewer.d.ts +11 -11
  17. package/lib/NavigatedViewer.js +37 -37
  18. package/lib/Viewer.d.ts +47 -47
  19. package/lib/Viewer.js +76 -76
  20. package/lib/core/index.d.ts +10 -10
  21. package/lib/core/index.js +8 -8
  22. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  23. package/lib/draw/BpmnRenderUtil.js +256 -256
  24. package/lib/draw/BpmnRenderer.d.ts +116 -116
  25. package/lib/draw/BpmnRenderer.js +2339 -2339
  26. package/lib/draw/PathMap.d.ts +330 -330
  27. package/lib/draw/PathMap.js +478 -478
  28. package/lib/draw/TextRenderer.d.ts +74 -74
  29. package/lib/draw/TextRenderer.js +136 -136
  30. package/lib/draw/index.d.ts +10 -10
  31. package/lib/draw/index.js +11 -11
  32. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  34. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  35. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  36. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  37. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  38. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  39. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  40. package/lib/features/align-elements/index.d.ts +11 -11
  41. package/lib/features/align-elements/index.js +23 -23
  42. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  43. package/lib/features/append-preview/AppendPreview.js +108 -108
  44. package/lib/features/append-preview/index.d.ts +16 -16
  45. package/lib/features/append-preview/index.js +15 -15
  46. package/lib/features/auto-place/BpmnAutoPlace.d.ts +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.js +22 -22
  48. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +52 -52
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +226 -226
  50. package/lib/features/auto-place/index.d.ts +7 -7
  51. package/lib/features/auto-place/index.js +8 -8
  52. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  53. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  54. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  56. package/lib/features/auto-resize/index.d.ts +8 -8
  57. package/lib/features/auto-resize/index.js +12 -12
  58. package/lib/features/context-pad/ContextPadProvider.d.ts +62 -62
  59. package/lib/features/context-pad/ContextPadProvider.js +582 -582
  60. package/lib/features/context-pad/index.d.ts +7 -7
  61. package/lib/features/context-pad/index.js +22 -22
  62. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  63. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  64. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  65. package/lib/features/copy-paste/index.d.ts +9 -9
  66. package/lib/features/copy-paste/index.js +13 -13
  67. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  68. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  69. package/lib/features/di-ordering/index.d.ts +6 -6
  70. package/lib/features/di-ordering/index.js +7 -7
  71. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  72. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  73. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  74. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  75. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  76. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  77. package/lib/features/distribute-elements/index.d.ts +9 -9
  78. package/lib/features/distribute-elements/index.js +19 -19
  79. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  80. package/lib/features/drilldown/DrilldownBreadcrumbs.js +138 -138
  81. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  82. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  83. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +20 -20
  84. package/lib/features/drilldown/DrilldownOverlayBehavior.js +218 -218
  85. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  86. package/lib/features/drilldown/SubprocessCompatibility.js +266 -266
  87. package/lib/features/drilldown/index.d.ts +13 -13
  88. package/lib/features/drilldown/index.js +16 -16
  89. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  90. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  91. package/lib/features/editor-actions/index.d.ts +6 -6
  92. package/lib/features/editor-actions/index.js +10 -10
  93. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  94. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +14 -14
  95. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  96. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  97. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  98. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  99. package/lib/features/grid-snapping/index.d.ts +11 -11
  100. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  101. package/lib/features/interaction-events/BpmnInteractionEvents.js +146 -146
  102. package/lib/features/interaction-events/index.d.ts +6 -6
  103. package/lib/features/interaction-events/index.js +5 -5
  104. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  105. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  106. package/lib/features/keyboard/index.d.ts +7 -7
  107. package/lib/features/keyboard/index.js +11 -11
  108. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  109. package/lib/features/label-editing/LabelEditingPreview.js +145 -145
  110. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  111. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  112. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  113. package/lib/features/label-editing/LabelUtil.js +4 -4
  114. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  115. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  116. package/lib/features/label-editing/index.d.ts +9 -9
  117. package/lib/features/label-editing/index.js +21 -21
  118. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  119. package/lib/features/modeling/BpmnFactory.js +180 -180
  120. package/lib/features/modeling/BpmnLayouter.d.ts +30 -30
  121. package/lib/features/modeling/BpmnLayouter.js +488 -488
  122. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  123. package/lib/features/modeling/BpmnUpdater.js +818 -818
  124. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  125. package/lib/features/modeling/ElementFactory.js +412 -412
  126. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  127. package/lib/features/modeling/Modeling.d.ts +150 -150
  128. package/lib/features/modeling/Modeling.js +309 -309
  129. package/lib/features/modeling/Modeling.test.ts +147 -147
  130. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +19 -19
  131. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +288 -288
  132. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  133. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  134. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  135. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  136. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  137. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  139. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  140. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  141. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  142. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  143. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  144. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  145. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  146. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  147. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  148. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  149. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  150. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  151. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  152. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  154. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  155. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  156. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  157. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  158. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  159. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  160. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  161. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  162. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  163. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  164. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  165. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  166. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  167. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  168. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  169. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  170. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  171. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  172. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  173. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  174. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  175. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  176. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -59
  177. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  178. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  179. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  180. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  181. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +64 -64
  182. package/lib/features/modeling/behavior/ResizeBehavior.js +265 -265
  183. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  184. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  185. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  186. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.js +66 -66
  188. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  190. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  192. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  194. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  196. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  198. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  200. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  202. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  204. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  206. package/lib/features/modeling/behavior/index.d.ts +2 -2
  207. package/lib/features/modeling/behavior/index.js +131 -131
  208. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  209. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  210. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  212. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  213. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  215. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  216. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  217. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  219. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  220. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  221. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  223. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  224. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  225. package/lib/features/modeling/cmd/AddLaneHandler.js +187 -187
  226. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  227. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  228. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  230. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  231. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  232. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  233. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  235. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  237. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  239. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  241. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  242. package/lib/features/modeling/index.d.ts +27 -27
  243. package/lib/features/modeling/index.js +45 -45
  244. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  245. package/lib/features/modeling/util/LaneUtil.js +188 -188
  246. package/lib/features/modeling/util/ModelingUtil.d.ts +23 -23
  247. package/lib/features/modeling/util/ModelingUtil.js +88 -88
  248. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  249. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  250. package/lib/features/modeling-feedback/index.d.ts +7 -7
  251. package/lib/features/modeling-feedback/index.js +12 -12
  252. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  253. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  254. package/lib/features/ordering/index.d.ts +6 -6
  255. package/lib/features/ordering/index.js +5 -5
  256. package/lib/features/outline/OutlineProvider.d.ts +39 -39
  257. package/lib/features/outline/OutlineProvider.js +189 -189
  258. package/lib/features/outline/OutlineUtil.d.ts +23 -23
  259. package/lib/features/outline/OutlineUtil.js +35 -35
  260. package/lib/features/outline/index.d.ts +7 -7
  261. package/lib/features/outline/index.js +10 -10
  262. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  263. package/lib/features/palette/PaletteProvider.js +214 -214
  264. package/lib/features/palette/index.d.ts +9 -9
  265. package/lib/features/palette/index.js +23 -23
  266. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  267. package/lib/features/popup-menu/ReplaceMenuProvider.js +656 -629
  268. package/lib/features/popup-menu/index.d.ts +11 -11
  269. package/lib/features/popup-menu/index.js +16 -16
  270. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  271. package/lib/features/popup-menu/util/Icons.js +14 -14
  272. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  274. package/lib/features/replace/BpmnReplace.d.ts +45 -45
  275. package/lib/features/replace/BpmnReplace.js +391 -391
  276. package/lib/features/replace/ReplaceOptions.d.ts +85 -79
  277. package/lib/features/replace/ReplaceOptions.js +1198 -998
  278. package/lib/features/replace/index.d.ts +9 -9
  279. package/lib/features/replace/index.js +14 -14
  280. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  281. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  282. package/lib/features/replace-preview/index.d.ts +7 -7
  283. package/lib/features/replace-preview/index.js +11 -11
  284. package/lib/features/rules/BpmnRules.d.ts +181 -181
  285. package/lib/features/rules/BpmnRules.js +1191 -1191
  286. package/lib/features/rules/index.d.ts +7 -7
  287. package/lib/features/rules/index.js +11 -11
  288. package/lib/features/search/BpmnSearchProvider.d.ts +34 -34
  289. package/lib/features/search/BpmnSearchProvider.js +91 -91
  290. package/lib/features/search/index.d.ts +7 -7
  291. package/lib/features/search/index.js +14 -14
  292. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  293. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  295. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  296. package/lib/features/snapping/index.d.ts +9 -9
  297. package/lib/features/snapping/index.js +12 -12
  298. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  299. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  300. package/lib/features/space-tool/index.d.ts +6 -6
  301. package/lib/features/space-tool/index.js +7 -7
  302. package/lib/import/BpmnImporter.d.ts +51 -51
  303. package/lib/import/BpmnImporter.js +363 -363
  304. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  305. package/lib/import/BpmnTreeWalker.js +453 -453
  306. package/lib/import/Importer.d.ts +25 -25
  307. package/lib/import/Importer.js +222 -222
  308. package/lib/import/Util.d.ts +1 -1
  309. package/lib/import/Util.js +6 -6
  310. package/lib/import/index.d.ts +6 -6
  311. package/lib/import/index.js +9 -9
  312. package/lib/index.d.ts +1 -1
  313. package/lib/index.js +2 -2
  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 +266 -266
  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 +131 -131
  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,588 +1,588 @@
1
- import inherits from 'inherits-browser';
2
-
3
- import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
4
-
5
- import { find } from 'min-dash';
6
-
7
- import { isExpanded } from '../../../util/DiUtil';
8
-
9
- import { getBusinessObject, getDi, is } from '../../../util/ModelUtil';
10
-
11
- import { getMid } from 'diagram-js/lib/layout/LayoutUtil';
12
-
13
- import { getBBox } from 'diagram-js/lib/util/Elements';
14
-
15
- import {
16
- getPlaneIdFromShape,
17
- getShapeIdFromPlane,
18
- isPlane,
19
- toPlaneId
20
- } from '../../../util/DrilldownUtil';
21
-
22
- /**
23
- * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas
24
- * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
25
- * @typedef {import('../Modeling').default} Modeling
26
- * @typedef {import('../ElementFactory').default} ElementFactory
27
- * @typedef {import('../BpmnFactory').default} BpmnFactory
28
- * @typedef {import('../../../Modeler').default} Modeler
29
- * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry
30
- *
31
- * @typedef {import('../../../model/Types').Element} Element
32
- * @typedef {import('../../../model/Types').Root} Root
33
- * @typedef {import('../../../model/Types').ModdleElement} ModdleElement
34
- */
35
-
36
- var LOW_PRIORITY = 400;
37
- var HIGH_PRIORITY = 600;
38
-
39
- var DEFAULT_POSITION = {
40
- x: 180,
41
- y: 160
42
- };
43
-
44
-
45
- /**
46
- * Creates bpmndi:BPMNPlane elements and canvas planes when collapsed subprocesses are created.
47
- *
48
- * @param {Canvas} canvas
49
- * @param {EventBus} eventBus
50
- * @param {Modeling} modeling
51
- * @param {ElementFactory} elementFactory
52
- * @param {BpmnFactory} bpmnFactory
53
- * @param {Modeler} bpmnjs
54
- * @param {ElementRegistry} elementRegistry
55
- */
56
- export default function SubProcessPlaneBehavior(
57
- canvas, eventBus, modeling,
58
- elementFactory, bpmnFactory, bpmnjs, elementRegistry) {
59
-
60
- CommandInterceptor.call(this, eventBus);
61
-
62
- this._canvas = canvas;
63
- this._eventBus = eventBus;
64
- this._modeling = modeling;
65
- this._elementFactory = elementFactory;
66
- this._bpmnFactory = bpmnFactory;
67
- this._bpmnjs = bpmnjs;
68
- this._elementRegistry = elementRegistry;
69
-
70
- var self = this;
71
-
72
- function isCollapsedSubProcess(element) {
73
- return is(element, 'bpmn:SubProcess') && !isExpanded(element);
74
- }
75
-
76
- function createRoot(context) {
77
- var shape = context.shape,
78
- rootElement = context.newRootElement;
79
-
80
- var businessObject = getBusinessObject(shape);
81
-
82
- rootElement = self._addDiagram(rootElement || businessObject);
83
-
84
- context.newRootElement = canvas.addRootElement(rootElement);
85
- }
86
-
87
- function removeRoot(context) {
88
- var shape = context.shape;
89
-
90
- var businessObject = getBusinessObject(shape);
91
- self._removeDiagram(businessObject);
92
-
93
- var rootElement = context.newRootElement = elementRegistry.get(getPlaneIdFromShape(businessObject));
94
-
95
- canvas.removeRootElement(rootElement);
96
- }
97
-
98
- // add plane elements for newly created sub-processes
99
- // this ensures we can actually drill down into the element
100
- this.executed('shape.create', function(context) {
101
- var shape = context.shape;
102
- if (!isCollapsedSubProcess(shape)) {
103
- return;
104
- }
105
-
106
- createRoot(context);
107
- }, true);
108
-
109
-
110
- this.postExecuted('shape.create', function(context) {
111
- var shape = context.shape,
112
- rootElement = context.newRootElement;
113
-
114
- if (!rootElement || !shape.children) {
115
- return;
116
- }
117
-
118
- self._showRecursively(shape.children);
119
-
120
- self._moveChildrenToShape(shape, rootElement);
121
- }, true);
122
-
123
-
124
- this.reverted('shape.create', function(context) {
125
- var shape = context.shape;
126
- if (!isCollapsedSubProcess(shape)) {
127
- return;
128
- }
129
-
130
- removeRoot(context);
131
- }, true);
132
-
133
-
134
- this.preExecuted('shape.delete', function(context) {
135
- var shape = context.shape;
136
- if (!isCollapsedSubProcess(shape)) {
137
- return;
138
- }
139
-
140
- var attachedRoot = elementRegistry.get(getPlaneIdFromShape(shape));
141
-
142
- if (!attachedRoot) {
143
- return;
144
- }
145
-
146
- modeling.removeElements(attachedRoot.children.slice());
147
- }, true);
148
-
149
-
150
- this.executed('shape.delete', function(context) {
151
- var shape = context.shape;
152
- if (!isCollapsedSubProcess(shape)) {
153
- return;
154
- }
155
- removeRoot(context);
156
- }, true);
157
-
158
-
159
- this.reverted('shape.delete', function(context) {
160
- var shape = context.shape;
161
- if (!isCollapsedSubProcess(shape)) {
162
- return;
163
- }
164
-
165
- createRoot(context);
166
- }, true);
167
-
168
-
169
- this.preExecuted('shape.replace', function(context) {
170
- var oldShape = context.oldShape;
171
- var newShape = context.newShape;
172
-
173
- if (!isCollapsedSubProcess(oldShape) || !isCollapsedSubProcess(newShape)) {
174
- return;
175
- }
176
-
177
- // old plane could have content,
178
- // we remove it so it is not recursively deleted from 'shape.delete'
179
- context.oldRoot = canvas.removeRootElement(getPlaneIdFromShape(oldShape));
180
- }, true);
181
-
182
-
183
- this.postExecuted('shape.replace', function(context) {
184
- var newShape = context.newShape,
185
- source = context.oldRoot,
186
- target = canvas.findRoot(getPlaneIdFromShape(newShape));
187
-
188
- if (!source || !target) {
189
- return;
190
- }
191
- var elements = source.children;
192
-
193
- modeling.moveElements(elements, { x: 0, y: 0 }, target);
194
- }, true);
195
-
196
-
197
- // rename primary elements when the secondary element changes
198
- // this ensures rootElement.id = element.id + '_plane'
199
- this.executed('element.updateProperties', function(context) {
200
- var shape = context.element;
201
-
202
- if (!is(shape, 'bpmn:SubProcess')) {
203
- return;
204
- }
205
-
206
- var properties = context.properties;
207
- var oldProperties = context.oldProperties;
208
-
209
- var oldId = oldProperties.id,
210
- newId = properties.id;
211
-
212
- if (oldId === newId) {
213
- return;
214
- }
215
-
216
- if (isPlane(shape)) {
217
- elementRegistry.updateId(shape, toPlaneId(newId));
218
- elementRegistry.updateId(oldId, newId);
219
-
220
- return;
221
- }
222
-
223
- var planeElement = elementRegistry.get(toPlaneId(oldId));
224
-
225
- if (!planeElement) {
226
- return;
227
- }
228
-
229
- elementRegistry.updateId(toPlaneId(oldId), toPlaneId(newId));
230
- }, true);
231
-
232
-
233
- this.reverted('element.updateProperties', function(context) {
234
- var shape = context.element;
235
-
236
- if (!is(shape, 'bpmn:SubProcess')) {
237
- return;
238
- }
239
-
240
- var properties = context.properties;
241
- var oldProperties = context.oldProperties;
242
-
243
- var oldId = oldProperties.id,
244
- newId = properties.id;
245
-
246
- if (oldId === newId) {
247
- return;
248
- }
249
-
250
- if (isPlane(shape)) {
251
- elementRegistry.updateId(shape, toPlaneId(oldId));
252
- elementRegistry.updateId(newId, oldId);
253
-
254
- return;
255
- }
256
-
257
- var planeElement = elementRegistry.get(toPlaneId(newId));
258
-
259
- if (!planeElement) {
260
- return;
261
- }
262
-
263
- elementRegistry.updateId(planeElement, toPlaneId(oldId));
264
- }, true);
265
-
266
- // re-throw element.changed to re-render primary shape if associated plane has
267
- // changed (e.g. bpmn:name property has changed)
268
- eventBus.on('element.changed', function(context) {
269
- var element = context.element;
270
-
271
- if (!isPlane(element)) {
272
- return;
273
- }
274
-
275
- var plane = element;
276
-
277
- var primaryShape = elementRegistry.get(getShapeIdFromPlane(plane));
278
-
279
- // do not re-throw if no associated primary shape (e.g. bpmn:Process)
280
- if (!primaryShape || primaryShape === plane) {
281
- return;
282
- }
283
-
284
- eventBus.fire('element.changed', { element: primaryShape });
285
- });
286
-
287
-
288
- // create/remove plane for the subprocess
289
- this.executed('shape.toggleCollapse', LOW_PRIORITY, function(context) {
290
- var shape = context.shape;
291
-
292
- if (!is(shape, 'bpmn:SubProcess')) {
293
- return;
294
- }
295
-
296
- if (!isExpanded(shape)) {
297
- createRoot(context);
298
- self._showRecursively(shape.children);
299
- } else {
300
- removeRoot(context);
301
- }
302
-
303
- }, true);
304
-
305
-
306
- // create/remove plane for the subprocess
307
- this.reverted('shape.toggleCollapse', LOW_PRIORITY, function(context) {
308
- var shape = context.shape;
309
-
310
- if (!is(shape, 'bpmn:SubProcess')) {
311
- return;
312
- }
313
-
314
- if (!isExpanded(shape)) {
315
- createRoot(context);
316
- self._showRecursively(shape.children);
317
- } else {
318
- removeRoot(context);
319
- }
320
-
321
- }, true);
322
-
323
- // move elements between planes
324
- this.postExecuted('shape.toggleCollapse', HIGH_PRIORITY, function(context) {
325
- var shape = context.shape;
326
-
327
- if (!is(shape, 'bpmn:SubProcess')) {
328
- return;
329
- }
330
-
331
- var rootElement = context.newRootElement;
332
-
333
- if (!rootElement) {
334
- return;
335
- }
336
-
337
- if (!isExpanded(shape)) {
338
-
339
- // collapsed
340
- self._moveChildrenToShape(shape, rootElement);
341
-
342
- } else {
343
- self._moveChildrenToShape(rootElement, shape);
344
- }
345
- }, true);
346
-
347
-
348
- // copy-paste ///////////
349
-
350
- // add elements in plane to tree
351
- eventBus.on('copyPaste.createTree', function(context) {
352
- var element = context.element,
353
- children = context.children;
354
-
355
- if (!isCollapsedSubProcess(element)) {
356
- return;
357
- }
358
-
359
- var id = getPlaneIdFromShape(element);
360
- var parent = elementRegistry.get(id);
361
-
362
- if (parent) {
363
-
364
- // do not copy invisible root element
365
- children.push.apply(children, parent.children);
366
- }
367
- });
368
-
369
- // set plane children as direct children of collapsed shape
370
- eventBus.on('copyPaste.copyElement', function(context) {
371
- var descriptor = context.descriptor,
372
- element = context.element,
373
- elements = context.elements;
374
-
375
- var parent = element.parent;
376
-
377
- var isPlane = is(getDi(parent), 'bpmndi:BPMNPlane');
378
- if (!isPlane) {
379
- return;
380
- }
381
-
382
- var parentId = getShapeIdFromPlane(parent);
383
-
384
- var referencedShape = find(elements, function(element) {
385
- return element.id === parentId;
386
- });
387
-
388
- if (!referencedShape) {
389
- return;
390
- }
391
-
392
- descriptor.parent = referencedShape.id;
393
- });
394
-
395
- // hide children during pasting
396
- eventBus.on('copyPaste.pasteElement', function(context) {
397
- var descriptor = context.descriptor;
398
-
399
- if (!descriptor.parent) {
400
- return;
401
- }
402
-
403
- if (isCollapsedSubProcess(descriptor.parent) || descriptor.parent.hidden) {
404
- descriptor.hidden = true;
405
- }
406
- });
407
-
408
- }
409
-
410
- inherits(SubProcessPlaneBehavior, CommandInterceptor);
411
-
412
- /**
413
- * Moves the child elements from source to target.
414
- *
415
- * If the target is a plane, the children are moved to the top left corner.
416
- * Otherwise, the center of the target is used.
417
- *
418
- * @param {Root} source
419
- * @param {Root} target
420
- */
421
- SubProcessPlaneBehavior.prototype._moveChildrenToShape = function(source, target) {
422
- var modeling = this._modeling;
423
-
424
- var children = source.children;
425
- var offset;
426
-
427
- if (!children) {
428
- return;
429
- }
430
-
431
- // add external labels that weren't children of sub process
432
- children = children.concat(children.reduce(function(labels, child) {
433
- if (child.label && child.label.parent !== source) {
434
- return labels.concat(child.label);
435
- }
436
-
437
- return labels;
438
- }, []));
439
-
440
- // only change plane if there are no visible children, but don't move them
441
- var visibleChildren = children.filter(function(child) {
442
- return !child.hidden;
443
- });
444
-
445
- if (!visibleChildren.length) {
446
- modeling.moveElements(children, { x: 0, y: 0 }, target, { autoResize: false });
447
- return;
448
- }
449
-
450
- var childrenBounds = getBBox(visibleChildren);
451
-
452
- // target is a plane
453
- if (!target.x) {
454
- offset = {
455
- x: DEFAULT_POSITION.x - childrenBounds.x,
456
- y: DEFAULT_POSITION.y - childrenBounds.y
457
- };
458
- }
459
-
460
- // source is a plane
461
- else {
462
-
463
- // move relative to the center of the shape
464
- var targetMid = getMid(target);
465
- var childrenMid = getMid(childrenBounds);
466
-
467
- offset = {
468
- x: targetMid.x - childrenMid.x,
469
- y: targetMid.y - childrenMid.y
470
- };
471
- }
472
-
473
- modeling.moveElements(children, offset, target, { autoResize: false });
474
- };
475
-
476
- /**
477
- * Sets `hidden` property on all children of the given shape.
478
- *
479
- * @param {Element[]} elements
480
- * @param {boolean} [hidden=false]
481
- *
482
- * @return {Element[]}
483
- */
484
- SubProcessPlaneBehavior.prototype._showRecursively = function(elements, hidden) {
485
- var self = this;
486
-
487
- var result = [];
488
- elements.forEach(function(element) {
489
- element.hidden = !!hidden;
490
-
491
- result = result.concat(element);
492
-
493
- if (element.children) {
494
- result = result.concat(
495
- self._showRecursively(element.children, element.collapsed || hidden)
496
- );
497
- }
498
- });
499
-
500
- return result;
501
- };
502
-
503
- /**
504
- * Adds a given root element to the BPMNDI diagrams.
505
- *
506
- * @param {Root|ModdleElement} planeElement
507
- *
508
- * @return {Root}
509
- */
510
- SubProcessPlaneBehavior.prototype._addDiagram = function(planeElement) {
511
- var bpmnjs = this._bpmnjs;
512
- var diagrams = bpmnjs.getDefinitions().diagrams;
513
-
514
- if (!planeElement.businessObject) {
515
- planeElement = this._createNewDiagram(planeElement);
516
- }
517
-
518
- diagrams.push(planeElement.di.$parent);
519
-
520
- return planeElement;
521
- };
522
-
523
-
524
- /**
525
- * Creates a new plane element for the given sub process.
526
- *
527
- * @param {ModdleElement} bpmnElement
528
- *
529
- * @return {Root}
530
- */
531
- SubProcessPlaneBehavior.prototype._createNewDiagram = function(bpmnElement) {
532
- var bpmnFactory = this._bpmnFactory,
533
- elementFactory = this._elementFactory;
534
-
535
- var diPlane = bpmnFactory.create('bpmndi:BPMNPlane', {
536
- bpmnElement: bpmnElement
537
- });
538
-
539
- var diDiagram = bpmnFactory.create('bpmndi:BPMNDiagram', {
540
- plane: diPlane
541
- });
542
-
543
- diPlane.$parent = diDiagram;
544
-
545
- // add a virtual element (not being drawn),
546
- // a copy cat of our BpmnImporter code
547
- var planeElement = elementFactory.createRoot({
548
- id: getPlaneIdFromShape(bpmnElement),
549
- type: bpmnElement.$type,
550
- di: diPlane,
551
- businessObject: bpmnElement,
552
- collapsed: true
553
- });
554
-
555
- return planeElement;
556
- };
557
-
558
- /**
559
- * Removes the diagram for a given root element.
560
- *
561
- * @param {Root} rootElement
562
- *
563
- * @return {ModdleElement}
564
- */
565
- SubProcessPlaneBehavior.prototype._removeDiagram = function(rootElement) {
566
- var bpmnjs = this._bpmnjs;
567
-
568
- var diagrams = bpmnjs.getDefinitions().diagrams;
569
-
570
- var removedDiagram = find(diagrams, function(diagram) {
571
- return diagram.plane.bpmnElement.id === rootElement.id;
572
- });
573
-
574
- diagrams.splice(diagrams.indexOf(removedDiagram), 1);
575
-
576
- return removedDiagram;
577
- };
578
-
579
-
580
- SubProcessPlaneBehavior.$inject = [
581
- 'canvas',
582
- 'eventBus',
583
- 'modeling',
584
- 'elementFactory',
585
- 'bpmnFactory',
586
- 'bpmnjs',
587
- 'elementRegistry'
588
- ];
1
+ import inherits from 'inherits-browser';
2
+
3
+ import CommandInterceptor from 'diagram-js/lib/command/CommandInterceptor';
4
+
5
+ import { find } from 'min-dash';
6
+
7
+ import { isExpanded } from '../../../util/DiUtil';
8
+
9
+ import { getBusinessObject, getDi, is } from '../../../util/ModelUtil';
10
+
11
+ import { getMid } from 'diagram-js/lib/layout/LayoutUtil';
12
+
13
+ import { getBBox } from 'diagram-js/lib/util/Elements';
14
+
15
+ import {
16
+ getPlaneIdFromShape,
17
+ getShapeIdFromPlane,
18
+ isPlane,
19
+ toPlaneId
20
+ } from '../../../util/DrilldownUtil';
21
+
22
+ /**
23
+ * @typedef {import('diagram-js/lib/core/Canvas').default} Canvas
24
+ * @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
25
+ * @typedef {import('../Modeling').default} Modeling
26
+ * @typedef {import('../ElementFactory').default} ElementFactory
27
+ * @typedef {import('../BpmnFactory').default} BpmnFactory
28
+ * @typedef {import('../../../Modeler').default} Modeler
29
+ * @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry
30
+ *
31
+ * @typedef {import('../../../model/Types').Element} Element
32
+ * @typedef {import('../../../model/Types').Root} Root
33
+ * @typedef {import('../../../model/Types').ModdleElement} ModdleElement
34
+ */
35
+
36
+ var LOW_PRIORITY = 400;
37
+ var HIGH_PRIORITY = 600;
38
+
39
+ var DEFAULT_POSITION = {
40
+ x: 180,
41
+ y: 160
42
+ };
43
+
44
+
45
+ /**
46
+ * Creates bpmndi:BPMNPlane elements and canvas planes when collapsed subprocesses are created.
47
+ *
48
+ * @param {Canvas} canvas
49
+ * @param {EventBus} eventBus
50
+ * @param {Modeling} modeling
51
+ * @param {ElementFactory} elementFactory
52
+ * @param {BpmnFactory} bpmnFactory
53
+ * @param {Modeler} bpmnjs
54
+ * @param {ElementRegistry} elementRegistry
55
+ */
56
+ export default function SubProcessPlaneBehavior(
57
+ canvas, eventBus, modeling,
58
+ elementFactory, bpmnFactory, bpmnjs, elementRegistry) {
59
+
60
+ CommandInterceptor.call(this, eventBus);
61
+
62
+ this._canvas = canvas;
63
+ this._eventBus = eventBus;
64
+ this._modeling = modeling;
65
+ this._elementFactory = elementFactory;
66
+ this._bpmnFactory = bpmnFactory;
67
+ this._bpmnjs = bpmnjs;
68
+ this._elementRegistry = elementRegistry;
69
+
70
+ var self = this;
71
+
72
+ function isCollapsedSubProcess(element) {
73
+ return is(element, 'bpmn:SubProcess') && !isExpanded(element);
74
+ }
75
+
76
+ function createRoot(context) {
77
+ var shape = context.shape,
78
+ rootElement = context.newRootElement;
79
+
80
+ var businessObject = getBusinessObject(shape);
81
+
82
+ rootElement = self._addDiagram(rootElement || businessObject);
83
+
84
+ context.newRootElement = canvas.addRootElement(rootElement);
85
+ }
86
+
87
+ function removeRoot(context) {
88
+ var shape = context.shape;
89
+
90
+ var businessObject = getBusinessObject(shape);
91
+ self._removeDiagram(businessObject);
92
+
93
+ var rootElement = context.newRootElement = elementRegistry.get(getPlaneIdFromShape(businessObject));
94
+
95
+ canvas.removeRootElement(rootElement);
96
+ }
97
+
98
+ // add plane elements for newly created sub-processes
99
+ // this ensures we can actually drill down into the element
100
+ this.executed('shape.create', function(context) {
101
+ var shape = context.shape;
102
+ if (!isCollapsedSubProcess(shape)) {
103
+ return;
104
+ }
105
+
106
+ createRoot(context);
107
+ }, true);
108
+
109
+
110
+ this.postExecuted('shape.create', function(context) {
111
+ var shape = context.shape,
112
+ rootElement = context.newRootElement;
113
+
114
+ if (!rootElement || !shape.children) {
115
+ return;
116
+ }
117
+
118
+ self._showRecursively(shape.children);
119
+
120
+ self._moveChildrenToShape(shape, rootElement);
121
+ }, true);
122
+
123
+
124
+ this.reverted('shape.create', function(context) {
125
+ var shape = context.shape;
126
+ if (!isCollapsedSubProcess(shape)) {
127
+ return;
128
+ }
129
+
130
+ removeRoot(context);
131
+ }, true);
132
+
133
+
134
+ this.preExecuted('shape.delete', function(context) {
135
+ var shape = context.shape;
136
+ if (!isCollapsedSubProcess(shape)) {
137
+ return;
138
+ }
139
+
140
+ var attachedRoot = elementRegistry.get(getPlaneIdFromShape(shape));
141
+
142
+ if (!attachedRoot) {
143
+ return;
144
+ }
145
+
146
+ modeling.removeElements(attachedRoot.children.slice());
147
+ }, true);
148
+
149
+
150
+ this.executed('shape.delete', function(context) {
151
+ var shape = context.shape;
152
+ if (!isCollapsedSubProcess(shape)) {
153
+ return;
154
+ }
155
+ removeRoot(context);
156
+ }, true);
157
+
158
+
159
+ this.reverted('shape.delete', function(context) {
160
+ var shape = context.shape;
161
+ if (!isCollapsedSubProcess(shape)) {
162
+ return;
163
+ }
164
+
165
+ createRoot(context);
166
+ }, true);
167
+
168
+
169
+ this.preExecuted('shape.replace', function(context) {
170
+ var oldShape = context.oldShape;
171
+ var newShape = context.newShape;
172
+
173
+ if (!isCollapsedSubProcess(oldShape) || !isCollapsedSubProcess(newShape)) {
174
+ return;
175
+ }
176
+
177
+ // old plane could have content,
178
+ // we remove it so it is not recursively deleted from 'shape.delete'
179
+ context.oldRoot = canvas.removeRootElement(getPlaneIdFromShape(oldShape));
180
+ }, true);
181
+
182
+
183
+ this.postExecuted('shape.replace', function(context) {
184
+ var newShape = context.newShape,
185
+ source = context.oldRoot,
186
+ target = canvas.findRoot(getPlaneIdFromShape(newShape));
187
+
188
+ if (!source || !target) {
189
+ return;
190
+ }
191
+ var elements = source.children;
192
+
193
+ modeling.moveElements(elements, { x: 0, y: 0 }, target);
194
+ }, true);
195
+
196
+
197
+ // rename primary elements when the secondary element changes
198
+ // this ensures rootElement.id = element.id + '_plane'
199
+ this.executed('element.updateProperties', function(context) {
200
+ var shape = context.element;
201
+
202
+ if (!is(shape, 'bpmn:SubProcess')) {
203
+ return;
204
+ }
205
+
206
+ var properties = context.properties;
207
+ var oldProperties = context.oldProperties;
208
+
209
+ var oldId = oldProperties.id,
210
+ newId = properties.id;
211
+
212
+ if (oldId === newId) {
213
+ return;
214
+ }
215
+
216
+ if (isPlane(shape)) {
217
+ elementRegistry.updateId(shape, toPlaneId(newId));
218
+ elementRegistry.updateId(oldId, newId);
219
+
220
+ return;
221
+ }
222
+
223
+ var planeElement = elementRegistry.get(toPlaneId(oldId));
224
+
225
+ if (!planeElement) {
226
+ return;
227
+ }
228
+
229
+ elementRegistry.updateId(toPlaneId(oldId), toPlaneId(newId));
230
+ }, true);
231
+
232
+
233
+ this.reverted('element.updateProperties', function(context) {
234
+ var shape = context.element;
235
+
236
+ if (!is(shape, 'bpmn:SubProcess')) {
237
+ return;
238
+ }
239
+
240
+ var properties = context.properties;
241
+ var oldProperties = context.oldProperties;
242
+
243
+ var oldId = oldProperties.id,
244
+ newId = properties.id;
245
+
246
+ if (oldId === newId) {
247
+ return;
248
+ }
249
+
250
+ if (isPlane(shape)) {
251
+ elementRegistry.updateId(shape, toPlaneId(oldId));
252
+ elementRegistry.updateId(newId, oldId);
253
+
254
+ return;
255
+ }
256
+
257
+ var planeElement = elementRegistry.get(toPlaneId(newId));
258
+
259
+ if (!planeElement) {
260
+ return;
261
+ }
262
+
263
+ elementRegistry.updateId(planeElement, toPlaneId(oldId));
264
+ }, true);
265
+
266
+ // re-throw element.changed to re-render primary shape if associated plane has
267
+ // changed (e.g. bpmn:name property has changed)
268
+ eventBus.on('element.changed', function(context) {
269
+ var element = context.element;
270
+
271
+ if (!isPlane(element)) {
272
+ return;
273
+ }
274
+
275
+ var plane = element;
276
+
277
+ var primaryShape = elementRegistry.get(getShapeIdFromPlane(plane));
278
+
279
+ // do not re-throw if no associated primary shape (e.g. bpmn:Process)
280
+ if (!primaryShape || primaryShape === plane) {
281
+ return;
282
+ }
283
+
284
+ eventBus.fire('element.changed', { element: primaryShape });
285
+ });
286
+
287
+
288
+ // create/remove plane for the subprocess
289
+ this.executed('shape.toggleCollapse', LOW_PRIORITY, function(context) {
290
+ var shape = context.shape;
291
+
292
+ if (!is(shape, 'bpmn:SubProcess')) {
293
+ return;
294
+ }
295
+
296
+ if (!isExpanded(shape)) {
297
+ createRoot(context);
298
+ self._showRecursively(shape.children);
299
+ } else {
300
+ removeRoot(context);
301
+ }
302
+
303
+ }, true);
304
+
305
+
306
+ // create/remove plane for the subprocess
307
+ this.reverted('shape.toggleCollapse', LOW_PRIORITY, function(context) {
308
+ var shape = context.shape;
309
+
310
+ if (!is(shape, 'bpmn:SubProcess')) {
311
+ return;
312
+ }
313
+
314
+ if (!isExpanded(shape)) {
315
+ createRoot(context);
316
+ self._showRecursively(shape.children);
317
+ } else {
318
+ removeRoot(context);
319
+ }
320
+
321
+ }, true);
322
+
323
+ // move elements between planes
324
+ this.postExecuted('shape.toggleCollapse', HIGH_PRIORITY, function(context) {
325
+ var shape = context.shape;
326
+
327
+ if (!is(shape, 'bpmn:SubProcess')) {
328
+ return;
329
+ }
330
+
331
+ var rootElement = context.newRootElement;
332
+
333
+ if (!rootElement) {
334
+ return;
335
+ }
336
+
337
+ if (!isExpanded(shape)) {
338
+
339
+ // collapsed
340
+ self._moveChildrenToShape(shape, rootElement);
341
+
342
+ } else {
343
+ self._moveChildrenToShape(rootElement, shape);
344
+ }
345
+ }, true);
346
+
347
+
348
+ // copy-paste ///////////
349
+
350
+ // add elements in plane to tree
351
+ eventBus.on('copyPaste.createTree', function(context) {
352
+ var element = context.element,
353
+ children = context.children;
354
+
355
+ if (!isCollapsedSubProcess(element)) {
356
+ return;
357
+ }
358
+
359
+ var id = getPlaneIdFromShape(element);
360
+ var parent = elementRegistry.get(id);
361
+
362
+ if (parent) {
363
+
364
+ // do not copy invisible root element
365
+ children.push.apply(children, parent.children);
366
+ }
367
+ });
368
+
369
+ // set plane children as direct children of collapsed shape
370
+ eventBus.on('copyPaste.copyElement', function(context) {
371
+ var descriptor = context.descriptor,
372
+ element = context.element,
373
+ elements = context.elements;
374
+
375
+ var parent = element.parent;
376
+
377
+ var isPlane = is(getDi(parent), 'bpmndi:BPMNPlane');
378
+ if (!isPlane) {
379
+ return;
380
+ }
381
+
382
+ var parentId = getShapeIdFromPlane(parent);
383
+
384
+ var referencedShape = find(elements, function(element) {
385
+ return element.id === parentId;
386
+ });
387
+
388
+ if (!referencedShape) {
389
+ return;
390
+ }
391
+
392
+ descriptor.parent = referencedShape.id;
393
+ });
394
+
395
+ // hide children during pasting
396
+ eventBus.on('copyPaste.pasteElement', function(context) {
397
+ var descriptor = context.descriptor;
398
+
399
+ if (!descriptor.parent) {
400
+ return;
401
+ }
402
+
403
+ if (isCollapsedSubProcess(descriptor.parent) || descriptor.parent.hidden) {
404
+ descriptor.hidden = true;
405
+ }
406
+ });
407
+
408
+ }
409
+
410
+ inherits(SubProcessPlaneBehavior, CommandInterceptor);
411
+
412
+ /**
413
+ * Moves the child elements from source to target.
414
+ *
415
+ * If the target is a plane, the children are moved to the top left corner.
416
+ * Otherwise, the center of the target is used.
417
+ *
418
+ * @param {Root} source
419
+ * @param {Root} target
420
+ */
421
+ SubProcessPlaneBehavior.prototype._moveChildrenToShape = function(source, target) {
422
+ var modeling = this._modeling;
423
+
424
+ var children = source.children;
425
+ var offset;
426
+
427
+ if (!children) {
428
+ return;
429
+ }
430
+
431
+ // add external labels that weren't children of sub process
432
+ children = children.concat(children.reduce(function(labels, child) {
433
+ if (child.label && child.label.parent !== source) {
434
+ return labels.concat(child.label);
435
+ }
436
+
437
+ return labels;
438
+ }, []));
439
+
440
+ // only change plane if there are no visible children, but don't move them
441
+ var visibleChildren = children.filter(function(child) {
442
+ return !child.hidden;
443
+ });
444
+
445
+ if (!visibleChildren.length) {
446
+ modeling.moveElements(children, { x: 0, y: 0 }, target, { autoResize: false });
447
+ return;
448
+ }
449
+
450
+ var childrenBounds = getBBox(visibleChildren);
451
+
452
+ // target is a plane
453
+ if (!target.x) {
454
+ offset = {
455
+ x: DEFAULT_POSITION.x - childrenBounds.x,
456
+ y: DEFAULT_POSITION.y - childrenBounds.y
457
+ };
458
+ }
459
+
460
+ // source is a plane
461
+ else {
462
+
463
+ // move relative to the center of the shape
464
+ var targetMid = getMid(target);
465
+ var childrenMid = getMid(childrenBounds);
466
+
467
+ offset = {
468
+ x: targetMid.x - childrenMid.x,
469
+ y: targetMid.y - childrenMid.y
470
+ };
471
+ }
472
+
473
+ modeling.moveElements(children, offset, target, { autoResize: false });
474
+ };
475
+
476
+ /**
477
+ * Sets `hidden` property on all children of the given shape.
478
+ *
479
+ * @param {Element[]} elements
480
+ * @param {boolean} [hidden=false]
481
+ *
482
+ * @return {Element[]}
483
+ */
484
+ SubProcessPlaneBehavior.prototype._showRecursively = function(elements, hidden) {
485
+ var self = this;
486
+
487
+ var result = [];
488
+ elements.forEach(function(element) {
489
+ element.hidden = !!hidden;
490
+
491
+ result = result.concat(element);
492
+
493
+ if (element.children) {
494
+ result = result.concat(
495
+ self._showRecursively(element.children, element.collapsed || hidden)
496
+ );
497
+ }
498
+ });
499
+
500
+ return result;
501
+ };
502
+
503
+ /**
504
+ * Adds a given root element to the BPMNDI diagrams.
505
+ *
506
+ * @param {Root|ModdleElement} planeElement
507
+ *
508
+ * @return {Root}
509
+ */
510
+ SubProcessPlaneBehavior.prototype._addDiagram = function(planeElement) {
511
+ var bpmnjs = this._bpmnjs;
512
+ var diagrams = bpmnjs.getDefinitions().diagrams;
513
+
514
+ if (!planeElement.businessObject) {
515
+ planeElement = this._createNewDiagram(planeElement);
516
+ }
517
+
518
+ diagrams.push(planeElement.di.$parent);
519
+
520
+ return planeElement;
521
+ };
522
+
523
+
524
+ /**
525
+ * Creates a new plane element for the given sub process.
526
+ *
527
+ * @param {ModdleElement} bpmnElement
528
+ *
529
+ * @return {Root}
530
+ */
531
+ SubProcessPlaneBehavior.prototype._createNewDiagram = function(bpmnElement) {
532
+ var bpmnFactory = this._bpmnFactory,
533
+ elementFactory = this._elementFactory;
534
+
535
+ var diPlane = bpmnFactory.create('bpmndi:BPMNPlane', {
536
+ bpmnElement: bpmnElement
537
+ });
538
+
539
+ var diDiagram = bpmnFactory.create('bpmndi:BPMNDiagram', {
540
+ plane: diPlane
541
+ });
542
+
543
+ diPlane.$parent = diDiagram;
544
+
545
+ // add a virtual element (not being drawn),
546
+ // a copy cat of our BpmnImporter code
547
+ var planeElement = elementFactory.createRoot({
548
+ id: getPlaneIdFromShape(bpmnElement),
549
+ type: bpmnElement.$type,
550
+ di: diPlane,
551
+ businessObject: bpmnElement,
552
+ collapsed: true
553
+ });
554
+
555
+ return planeElement;
556
+ };
557
+
558
+ /**
559
+ * Removes the diagram for a given root element.
560
+ *
561
+ * @param {Root} rootElement
562
+ *
563
+ * @return {ModdleElement}
564
+ */
565
+ SubProcessPlaneBehavior.prototype._removeDiagram = function(rootElement) {
566
+ var bpmnjs = this._bpmnjs;
567
+
568
+ var diagrams = bpmnjs.getDefinitions().diagrams;
569
+
570
+ var removedDiagram = find(diagrams, function(diagram) {
571
+ return diagram.plane.bpmnElement.id === rootElement.id;
572
+ });
573
+
574
+ diagrams.splice(diagrams.indexOf(removedDiagram), 1);
575
+
576
+ return removedDiagram;
577
+ };
578
+
579
+
580
+ SubProcessPlaneBehavior.$inject = [
581
+ 'canvas',
582
+ 'eventBus',
583
+ 'modeling',
584
+ 'elementFactory',
585
+ 'bpmnFactory',
586
+ 'bpmnjs',
587
+ 'elementRegistry'
588
+ ];