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