bpmn-js 17.6.0 → 17.6.2

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