bpmn-js 18.1.2 → 18.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/LICENSE +23 -23
  2. package/README.md +95 -95
  3. package/dist/assets/bpmn-js.css +145 -145
  4. package/dist/bpmn-modeler.development.js +38666 -38635
  5. package/dist/bpmn-modeler.production.min.js +4 -4
  6. package/dist/bpmn-navigated-viewer.development.js +20798 -20798
  7. package/dist/bpmn-navigated-viewer.production.min.js +3 -3
  8. package/dist/bpmn-viewer.development.js +20735 -20735
  9. package/dist/bpmn-viewer.production.min.js +3 -3
  10. package/lib/BaseModeler.d.ts +15 -15
  11. package/lib/BaseModeler.js +79 -79
  12. package/lib/BaseViewer.d.ts +352 -352
  13. package/lib/BaseViewer.js +858 -858
  14. package/lib/Modeler.d.ts +86 -86
  15. package/lib/Modeler.js +206 -206
  16. package/lib/NavigatedViewer.d.ts +11 -11
  17. package/lib/NavigatedViewer.js +37 -37
  18. package/lib/Viewer.d.ts +47 -47
  19. package/lib/Viewer.js +76 -76
  20. package/lib/core/index.d.ts +10 -10
  21. package/lib/core/index.js +8 -8
  22. package/lib/draw/BpmnRenderUtil.d.ts +123 -123
  23. package/lib/draw/BpmnRenderUtil.js +256 -256
  24. package/lib/draw/BpmnRenderer.d.ts +116 -116
  25. package/lib/draw/BpmnRenderer.js +2339 -2339
  26. package/lib/draw/PathMap.d.ts +330 -330
  27. package/lib/draw/PathMap.js +478 -478
  28. package/lib/draw/TextRenderer.d.ts +74 -74
  29. package/lib/draw/TextRenderer.js +136 -136
  30. package/lib/draw/index.d.ts +10 -10
  31. package/lib/draw/index.js +11 -11
  32. package/lib/features/align-elements/AlignElementsContextPadProvider.d.ts +32 -32
  33. package/lib/features/align-elements/AlignElementsContextPadProvider.js +105 -105
  34. package/lib/features/align-elements/AlignElementsIcons.d.ts +10 -10
  35. package/lib/features/align-elements/AlignElementsIcons.js +43 -43
  36. package/lib/features/align-elements/AlignElementsMenuProvider.d.ts +32 -32
  37. package/lib/features/align-elements/AlignElementsMenuProvider.js +100 -100
  38. package/lib/features/align-elements/BpmnAlignElements.d.ts +9 -9
  39. package/lib/features/align-elements/BpmnAlignElements.js +45 -45
  40. package/lib/features/align-elements/index.d.ts +11 -11
  41. package/lib/features/align-elements/index.js +23 -23
  42. package/lib/features/append-preview/AppendPreview.d.ts +36 -36
  43. package/lib/features/append-preview/AppendPreview.js +108 -108
  44. package/lib/features/append-preview/index.d.ts +16 -16
  45. package/lib/features/append-preview/index.js +15 -15
  46. package/lib/features/auto-place/BpmnAutoPlace.d.ts +15 -15
  47. package/lib/features/auto-place/BpmnAutoPlace.js +22 -22
  48. package/lib/features/auto-place/BpmnAutoPlaceUtil.d.ts +52 -52
  49. package/lib/features/auto-place/BpmnAutoPlaceUtil.js +226 -226
  50. package/lib/features/auto-place/index.d.ts +7 -7
  51. package/lib/features/auto-place/index.js +8 -8
  52. package/lib/features/auto-resize/BpmnAutoResize.d.ts +25 -25
  53. package/lib/features/auto-resize/BpmnAutoResize.js +45 -45
  54. package/lib/features/auto-resize/BpmnAutoResizeProvider.d.ts +26 -26
  55. package/lib/features/auto-resize/BpmnAutoResizeProvider.js +69 -69
  56. package/lib/features/auto-resize/index.d.ts +8 -8
  57. package/lib/features/auto-resize/index.js +12 -12
  58. package/lib/features/context-pad/ContextPadProvider.d.ts +62 -62
  59. package/lib/features/context-pad/ContextPadProvider.js +582 -582
  60. package/lib/features/context-pad/index.d.ts +7 -7
  61. package/lib/features/context-pad/index.js +22 -22
  62. package/lib/features/copy-paste/BpmnCopyPaste.d.ts +17 -17
  63. package/lib/features/copy-paste/BpmnCopyPaste.js +192 -192
  64. package/lib/features/copy-paste/ModdleCopy.d.ts +45 -45
  65. package/lib/features/copy-paste/index.d.ts +9 -9
  66. package/lib/features/copy-paste/index.js +13 -13
  67. package/lib/features/di-ordering/BpmnDiOrdering.d.ts +11 -11
  68. package/lib/features/di-ordering/BpmnDiOrdering.js +48 -48
  69. package/lib/features/di-ordering/index.d.ts +6 -6
  70. package/lib/features/di-ordering/index.js +7 -7
  71. package/lib/features/distribute-elements/BpmnDistributeElements.d.ts +10 -10
  72. package/lib/features/distribute-elements/BpmnDistributeElements.js +60 -60
  73. package/lib/features/distribute-elements/DistributeElementsIcons.d.ts +5 -5
  74. package/lib/features/distribute-elements/DistributeElementsIcons.js +18 -18
  75. package/lib/features/distribute-elements/DistributeElementsMenuProvider.d.ts +32 -32
  76. package/lib/features/distribute-elements/DistributeElementsMenuProvider.js +92 -92
  77. package/lib/features/distribute-elements/index.d.ts +9 -9
  78. package/lib/features/distribute-elements/index.js +19 -19
  79. package/lib/features/drilldown/DrilldownBreadcrumbs.d.ts +19 -19
  80. package/lib/features/drilldown/DrilldownBreadcrumbs.js +138 -138
  81. package/lib/features/drilldown/DrilldownCentering.d.ts +17 -17
  82. package/lib/features/drilldown/DrilldownCentering.js +122 -122
  83. package/lib/features/drilldown/DrilldownOverlayBehavior.d.ts +20 -20
  84. package/lib/features/drilldown/DrilldownOverlayBehavior.js +218 -218
  85. package/lib/features/drilldown/SubprocessCompatibility.d.ts +21 -21
  86. package/lib/features/drilldown/SubprocessCompatibility.js +266 -266
  87. package/lib/features/drilldown/index.d.ts +13 -13
  88. package/lib/features/drilldown/index.js +16 -16
  89. package/lib/features/editor-actions/BpmnEditorActions.d.ts +13 -13
  90. package/lib/features/editor-actions/BpmnEditorActions.js +187 -187
  91. package/lib/features/editor-actions/index.d.ts +6 -6
  92. package/lib/features/editor-actions/index.js +10 -10
  93. package/lib/features/grid-snapping/BpmnGridSnapping.d.ts +9 -9
  94. package/lib/features/grid-snapping/behavior/GridSnappingAutoPlaceBehavior.d.ts +14 -14
  95. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.d.ts +27 -27
  96. package/lib/features/grid-snapping/behavior/GridSnappingLayoutConnectionBehavior.js +155 -155
  97. package/lib/features/grid-snapping/behavior/GridSnappingParticipantBehavior.d.ts +13 -13
  98. package/lib/features/grid-snapping/behavior/index.d.ts +10 -10
  99. package/lib/features/grid-snapping/index.d.ts +11 -11
  100. package/lib/features/interaction-events/BpmnInteractionEvents.d.ts +18 -18
  101. package/lib/features/interaction-events/BpmnInteractionEvents.js +146 -146
  102. package/lib/features/interaction-events/index.d.ts +6 -6
  103. package/lib/features/interaction-events/index.js +5 -5
  104. package/lib/features/keyboard/BpmnKeyboardBindings.d.ts +15 -15
  105. package/lib/features/keyboard/BpmnKeyboardBindings.js +179 -179
  106. package/lib/features/keyboard/index.d.ts +7 -7
  107. package/lib/features/keyboard/index.js +11 -11
  108. package/lib/features/label-editing/LabelEditingPreview.d.ts +13 -13
  109. package/lib/features/label-editing/LabelEditingPreview.js +145 -145
  110. package/lib/features/label-editing/LabelEditingProvider.d.ts +62 -62
  111. package/lib/features/label-editing/LabelEditingProvider.js +519 -519
  112. package/lib/features/label-editing/LabelUtil.d.ts +1 -1
  113. package/lib/features/label-editing/LabelUtil.js +4 -4
  114. package/lib/features/label-editing/cmd/UpdateLabelHandler.d.ts +22 -22
  115. package/lib/features/label-editing/cmd/UpdateLabelHandler.js +149 -149
  116. package/lib/features/label-editing/index.d.ts +9 -9
  117. package/lib/features/label-editing/index.js +21 -21
  118. package/lib/features/modeling/BpmnFactory.d.ts +73 -73
  119. package/lib/features/modeling/BpmnFactory.js +180 -180
  120. package/lib/features/modeling/BpmnLayouter.d.ts +30 -30
  121. package/lib/features/modeling/BpmnLayouter.js +488 -488
  122. package/lib/features/modeling/BpmnUpdater.d.ts +90 -90
  123. package/lib/features/modeling/BpmnUpdater.js +818 -818
  124. package/lib/features/modeling/ElementFactory.d.ts +117 -117
  125. package/lib/features/modeling/ElementFactory.js +412 -412
  126. package/lib/features/modeling/ElementFactory.test.ts +132 -132
  127. package/lib/features/modeling/Modeling.d.ts +150 -150
  128. package/lib/features/modeling/Modeling.js +309 -309
  129. package/lib/features/modeling/Modeling.test.ts +147 -147
  130. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.d.ts +19 -19
  131. package/lib/features/modeling/behavior/AdaptiveLabelPositioningBehavior.js +288 -288
  132. package/lib/features/modeling/behavior/AppendBehavior.d.ts +6 -6
  133. package/lib/features/modeling/behavior/AppendBehavior.js +42 -42
  134. package/lib/features/modeling/behavior/AssociationBehavior.d.ts +11 -11
  135. package/lib/features/modeling/behavior/AttachEventBehavior.d.ts +15 -15
  136. package/lib/features/modeling/behavior/AttachEventBehavior.js +106 -106
  137. package/lib/features/modeling/behavior/BoundaryEventBehavior.d.ts +15 -15
  138. package/lib/features/modeling/behavior/BoundaryEventBehavior.js +74 -74
  139. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.d.ts +17 -17
  140. package/lib/features/modeling/behavior/CompensateBoundaryEventBehavior.js +222 -222
  141. package/lib/features/modeling/behavior/CreateBehavior.d.ts +9 -9
  142. package/lib/features/modeling/behavior/CreateBehavior.js +33 -33
  143. package/lib/features/modeling/behavior/CreateDataObjectBehavior.d.ts +15 -15
  144. package/lib/features/modeling/behavior/CreateDataObjectBehavior.js +43 -43
  145. package/lib/features/modeling/behavior/CreateParticipantBehavior.d.ts +19 -19
  146. package/lib/features/modeling/behavior/CreateParticipantBehavior.js +237 -237
  147. package/lib/features/modeling/behavior/DataInputAssociationBehavior.d.ts +21 -21
  148. package/lib/features/modeling/behavior/DataInputAssociationBehavior.js +162 -162
  149. package/lib/features/modeling/behavior/DataStoreBehavior.d.ts +19 -19
  150. package/lib/features/modeling/behavior/DeleteLaneBehavior.d.ts +15 -15
  151. package/lib/features/modeling/behavior/DeleteLaneBehavior.js +162 -162
  152. package/lib/features/modeling/behavior/DetachEventBehavior.d.ts +15 -15
  153. package/lib/features/modeling/behavior/DetachEventBehavior.js +101 -101
  154. package/lib/features/modeling/behavior/DropOnFlowBehavior.d.ts +13 -13
  155. package/lib/features/modeling/behavior/DropOnFlowBehavior.js +221 -221
  156. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.d.ts +11 -11
  157. package/lib/features/modeling/behavior/EventBasedGatewayBehavior.js +110 -110
  158. package/lib/features/modeling/behavior/FixHoverBehavior.d.ts +17 -17
  159. package/lib/features/modeling/behavior/GroupBehavior.d.ts +26 -26
  160. package/lib/features/modeling/behavior/ImportDockingFix.d.ts +13 -13
  161. package/lib/features/modeling/behavior/ImportDockingFix.js +83 -83
  162. package/lib/features/modeling/behavior/IsHorizontalFix.d.ts +10 -10
  163. package/lib/features/modeling/behavior/IsHorizontalFix.js +54 -54
  164. package/lib/features/modeling/behavior/LabelBehavior.d.ts +56 -56
  165. package/lib/features/modeling/behavior/LabelBehavior.js +364 -364
  166. package/lib/features/modeling/behavior/LayoutConnectionBehavior.d.ts +16 -16
  167. package/lib/features/modeling/behavior/LayoutConnectionBehavior.js +121 -121
  168. package/lib/features/modeling/behavior/MessageFlowBehavior.d.ts +15 -15
  169. package/lib/features/modeling/behavior/NonInterruptingBehavior.d.ts +4 -4
  170. package/lib/features/modeling/behavior/NonInterruptingBehavior.js +41 -41
  171. package/lib/features/modeling/behavior/RemoveElementBehavior.d.ts +13 -13
  172. package/lib/features/modeling/behavior/RemoveElementBehavior.js +91 -91
  173. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.d.ts +16 -16
  174. package/lib/features/modeling/behavior/RemoveEmbeddedLabelBoundsBehavior.js +41 -41
  175. package/lib/features/modeling/behavior/RemoveParticipantBehavior.d.ts +15 -15
  176. package/lib/features/modeling/behavior/RemoveParticipantBehavior.js +59 -59
  177. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.d.ts +15 -15
  178. package/lib/features/modeling/behavior/ReplaceConnectionBehavior.js +194 -194
  179. package/lib/features/modeling/behavior/ReplaceElementBehaviour.d.ts +23 -23
  180. package/lib/features/modeling/behavior/ReplaceElementBehaviour.js +144 -144
  181. package/lib/features/modeling/behavior/ResizeBehavior.d.ts +64 -64
  182. package/lib/features/modeling/behavior/ResizeBehavior.js +265 -265
  183. package/lib/features/modeling/behavior/ResizeLaneBehavior.d.ts +16 -16
  184. package/lib/features/modeling/behavior/ResizeLaneBehavior.js +70 -70
  185. package/lib/features/modeling/behavior/RootElementReferenceBehavior.d.ts +25 -25
  186. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.d.ts +16 -16
  187. package/lib/features/modeling/behavior/SetCompensationActivityAfterPasteBehavior.js +66 -66
  188. package/lib/features/modeling/behavior/SpaceToolBehavior.d.ts +10 -10
  189. package/lib/features/modeling/behavior/SpaceToolBehavior.js +207 -207
  190. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.d.ts +28 -28
  191. package/lib/features/modeling/behavior/SubProcessPlaneBehavior.js +588 -588
  192. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.d.ts +15 -15
  193. package/lib/features/modeling/behavior/SubProcessStartEventBehavior.js +55 -55
  194. package/lib/features/modeling/behavior/TextAnnotationBehavior.d.ts +6 -6
  195. package/lib/features/modeling/behavior/TextAnnotationBehavior.js +42 -42
  196. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.d.ts +14 -14
  197. package/lib/features/modeling/behavior/ToggleCollapseConnectionBehaviour.js +87 -87
  198. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.d.ts +13 -13
  199. package/lib/features/modeling/behavior/ToggleElementCollapseBehaviour.js +156 -156
  200. package/lib/features/modeling/behavior/UnclaimIdBehavior.d.ts +19 -19
  201. package/lib/features/modeling/behavior/UnclaimIdBehavior.js +64 -64
  202. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.d.ts +16 -16
  203. package/lib/features/modeling/behavior/UnsetDefaultFlowBehavior.js +59 -59
  204. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.d.ts +15 -15
  205. package/lib/features/modeling/behavior/UpdateFlowNodeRefsBehavior.js +157 -157
  206. package/lib/features/modeling/behavior/index.d.ts +2 -2
  207. package/lib/features/modeling/behavior/index.js +131 -131
  208. package/lib/features/modeling/behavior/util/CategoryUtil.d.ts +49 -49
  209. package/lib/features/modeling/behavior/util/CategoryUtil.js +86 -86
  210. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.d.ts +19 -19
  211. package/lib/features/modeling/behavior/util/ConnectionLayoutUtil.js +22 -22
  212. package/lib/features/modeling/behavior/util/GeometricUtil.d.ts +1 -1
  213. package/lib/features/modeling/behavior/util/LabelLayoutUtil.d.ts +32 -32
  214. package/lib/features/modeling/behavior/util/LabelLayoutUtil.js +41 -41
  215. package/lib/features/modeling/behavior/util/LayoutUtil.d.ts +48 -48
  216. package/lib/features/modeling/behavior/util/LayoutUtil.js +259 -259
  217. package/lib/features/modeling/behavior/util/LineAttachmentUtil.d.ts +37 -37
  218. package/lib/features/modeling/behavior/util/LineAttachmentUtil.js +241 -241
  219. package/lib/features/modeling/behavior/util/LineIntersect.d.ts +13 -13
  220. package/lib/features/modeling/behavior/util/LineIntersect.js +39 -39
  221. package/lib/features/modeling/behavior/util/NonInterruptingUtil.d.ts +3 -3
  222. package/lib/features/modeling/behavior/util/NonInterruptingUtil.js +32 -32
  223. package/lib/features/modeling/behavior/util/ResizeUtil.d.ts +1 -1
  224. package/lib/features/modeling/cmd/AddLaneHandler.d.ts +22 -22
  225. package/lib/features/modeling/cmd/AddLaneHandler.js +187 -187
  226. package/lib/features/modeling/cmd/IdClaimHandler.d.ts +22 -22
  227. package/lib/features/modeling/cmd/IdClaimHandler.js +51 -51
  228. package/lib/features/modeling/cmd/ResizeLaneHandler.d.ts +39 -39
  229. package/lib/features/modeling/cmd/ResizeLaneHandler.js +146 -146
  230. package/lib/features/modeling/cmd/SetColorHandler.d.ts +18 -18
  231. package/lib/features/modeling/cmd/SplitLaneHandler.d.ts +20 -20
  232. package/lib/features/modeling/cmd/SplitLaneHandler.js +99 -99
  233. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.d.ts +20 -20
  234. package/lib/features/modeling/cmd/UpdateCanvasRootHandler.js +99 -99
  235. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.d.ts +21 -21
  236. package/lib/features/modeling/cmd/UpdateFlowNodeRefsHandler.js +218 -218
  237. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.d.ts +20 -20
  238. package/lib/features/modeling/cmd/UpdateModdlePropertiesHandler.js +107 -107
  239. package/lib/features/modeling/cmd/UpdatePropertiesHandler.d.ts +58 -58
  240. package/lib/features/modeling/cmd/UpdatePropertiesHandler.js +260 -260
  241. package/lib/features/modeling/cmd/UpdateSemanticParentHandler.d.ts +18 -18
  242. package/lib/features/modeling/index.d.ts +27 -27
  243. package/lib/features/modeling/index.js +45 -45
  244. package/lib/features/modeling/util/LaneUtil.d.ts +46 -46
  245. package/lib/features/modeling/util/LaneUtil.js +188 -188
  246. package/lib/features/modeling/util/ModelingUtil.d.ts +23 -23
  247. package/lib/features/modeling/util/ModelingUtil.js +88 -88
  248. package/lib/features/modeling-feedback/ModelingFeedback.d.ts +13 -13
  249. package/lib/features/modeling-feedback/ModelingFeedback.js +46 -46
  250. package/lib/features/modeling-feedback/index.d.ts +7 -7
  251. package/lib/features/modeling-feedback/index.js +12 -12
  252. package/lib/features/ordering/BpmnOrderingProvider.d.ts +19 -19
  253. package/lib/features/ordering/BpmnOrderingProvider.js +191 -191
  254. package/lib/features/ordering/index.d.ts +6 -6
  255. package/lib/features/ordering/index.js +5 -5
  256. package/lib/features/outline/OutlineProvider.d.ts +39 -39
  257. package/lib/features/outline/OutlineProvider.js +189 -189
  258. package/lib/features/outline/OutlineUtil.d.ts +23 -23
  259. package/lib/features/outline/OutlineUtil.js +35 -35
  260. package/lib/features/outline/index.d.ts +7 -7
  261. package/lib/features/outline/index.js +10 -10
  262. package/lib/features/palette/PaletteProvider.d.ts +34 -34
  263. package/lib/features/palette/PaletteProvider.js +214 -214
  264. package/lib/features/palette/index.d.ts +9 -9
  265. package/lib/features/palette/index.js +23 -23
  266. package/lib/features/popup-menu/ReplaceMenuProvider.d.ts +52 -52
  267. package/lib/features/popup-menu/ReplaceMenuProvider.js +629 -677
  268. package/lib/features/popup-menu/index.d.ts +11 -11
  269. package/lib/features/popup-menu/index.js +16 -16
  270. package/lib/features/popup-menu/util/Icons.d.ts +5 -5
  271. package/lib/features/popup-menu/util/Icons.js +14 -14
  272. package/lib/features/popup-menu/util/TypeUtil.d.ts +14 -14
  273. package/lib/features/popup-menu/util/TypeUtil.js +52 -52
  274. package/lib/features/replace/BpmnReplace.d.ts +45 -45
  275. package/lib/features/replace/BpmnReplace.js +391 -391
  276. package/lib/features/replace/ReplaceOptions.d.ts +79 -75
  277. package/lib/features/replace/ReplaceOptions.js +998 -919
  278. package/lib/features/replace/index.d.ts +9 -9
  279. package/lib/features/replace/index.js +14 -14
  280. package/lib/features/replace-preview/BpmnReplacePreview.d.ts +17 -17
  281. package/lib/features/replace-preview/BpmnReplacePreview.js +139 -139
  282. package/lib/features/replace-preview/index.d.ts +7 -7
  283. package/lib/features/replace-preview/index.js +11 -11
  284. package/lib/features/rules/BpmnRules.d.ts +181 -181
  285. package/lib/features/rules/BpmnRules.js +1191 -1191
  286. package/lib/features/rules/index.d.ts +7 -7
  287. package/lib/features/rules/index.js +11 -11
  288. package/lib/features/search/BpmnSearchProvider.d.ts +34 -34
  289. package/lib/features/search/BpmnSearchProvider.js +91 -91
  290. package/lib/features/search/index.d.ts +7 -7
  291. package/lib/features/search/index.js +14 -14
  292. package/lib/features/snapping/BpmnConnectSnapping.d.ts +17 -17
  293. package/lib/features/snapping/BpmnCreateMoveSnapping.d.ts +41 -41
  294. package/lib/features/snapping/BpmnCreateMoveSnapping.js +289 -289
  295. package/lib/features/snapping/BpmnSnappingUtil.d.ts +11 -11
  296. package/lib/features/snapping/index.d.ts +9 -9
  297. package/lib/features/snapping/index.js +12 -12
  298. package/lib/features/space-tool/BpmnSpaceTool.d.ts +21 -21
  299. package/lib/features/space-tool/BpmnSpaceTool.js +69 -69
  300. package/lib/features/space-tool/index.d.ts +6 -6
  301. package/lib/features/space-tool/index.js +7 -7
  302. package/lib/import/BpmnImporter.d.ts +51 -51
  303. package/lib/import/BpmnImporter.js +363 -363
  304. package/lib/import/BpmnTreeWalker.d.ts +20 -20
  305. package/lib/import/BpmnTreeWalker.js +453 -453
  306. package/lib/import/Importer.d.ts +25 -25
  307. package/lib/import/Importer.js +222 -222
  308. package/lib/import/Util.d.ts +1 -1
  309. package/lib/import/Util.js +6 -6
  310. package/lib/import/index.d.ts +6 -6
  311. package/lib/import/index.js +9 -9
  312. package/lib/index.d.ts +1 -1
  313. package/lib/index.js +2 -2
  314. package/lib/model/Types.d.ts +25 -25
  315. package/lib/model/Types.ts +40 -40
  316. package/lib/util/CompatibilityUtil.d.ts +8 -8
  317. package/lib/util/CompatibilityUtil.js +29 -29
  318. package/lib/util/DiUtil.d.ts +60 -60
  319. package/lib/util/DiUtil.js +122 -122
  320. package/lib/util/DrilldownUtil.d.ts +39 -39
  321. package/lib/util/DrilldownUtil.js +69 -69
  322. package/lib/util/LabelUtil.d.ts +83 -83
  323. package/lib/util/LabelUtil.js +266 -266
  324. package/lib/util/ModelUtil.d.ts +40 -40
  325. package/lib/util/ModelUtil.js +58 -58
  326. package/lib/util/PoweredByUtil.d.ts +8 -8
  327. package/lib/util/PoweredByUtil.js +99 -99
  328. package/lib/util/Types.js +4 -4
  329. package/lib/util/Types.ts +3 -3
  330. package/package.json +131 -131
  331. package/test/helper/TranslationCollector.js +15 -15
  332. package/test/helper/index.js +313 -313
  333. package/test/matchers/BoundsMatchers.js +252 -252
  334. package/test/matchers/ConnectionMatchers.js +165 -165
  335. package/test/matchers/JSONMatcher.js +19 -19
  336. package/test/util/KeyEvents.js +22 -22
  337. package/test/util/MockEvents.js +61 -61
  338. package/test/util/custom-rules/CustomRules.js +16 -16
  339. package/test/util/custom-rules/index.js +6 -6
package/lib/BaseViewer.js CHANGED
@@ -1,858 +1,858 @@
1
- /**
2
- * The code in the <project-logo></project-logo> area
3
- * must not be changed.
4
- *
5
- * @see http://bpmn.io/license for more information.
6
- */
7
- import {
8
- assign,
9
- find,
10
- isNumber,
11
- omit
12
- } from 'min-dash';
13
-
14
- import {
15
- domify,
16
- assignStyle,
17
- query as domQuery,
18
- remove as domRemove
19
- } from 'min-dom';
20
-
21
- import {
22
- innerSVG
23
- } from 'tiny-svg';
24
-
25
- import Diagram from 'diagram-js';
26
- import BpmnModdle from 'bpmn-moddle';
27
-
28
- import inherits from 'inherits-browser';
29
-
30
- import {
31
- importBpmnDiagram
32
- } from './import/Importer';
33
-
34
- /**
35
- * @template T
36
- *
37
- * @typedef { import('diagram-js/lib/core/EventBus').default<T> } EventBus
38
- */
39
-
40
- /**
41
- * @template T
42
- *
43
- * @typedef {import('diagram-js/lib/core/EventBus').EventBusEventCallback<T>} EventBusEventCallback
44
- */
45
-
46
- /**
47
- * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration
48
- *
49
- * @typedef {import('./model/Types').Moddle} Moddle
50
- * @typedef {import('./model/Types').ModdleElement} ModdleElement
51
- * @typedef {import('./model/Types').ModdleExtension} ModdleExtension
52
- *
53
- * @typedef { {
54
- * width?: number|string;
55
- * height?: number|string;
56
- * position?: string;
57
- * container?: string|HTMLElement;
58
- * moddleExtensions?: ModdleExtensions;
59
- * additionalModules?: ModuleDeclaration[];
60
- * } & Record<string, any> } BaseViewerOptions
61
- *
62
- * @typedef {Record<string, ModdleElement>} ModdleElementsById
63
- *
64
- * @typedef { {
65
- * [key: string]: ModdleExtension;
66
- * } } ModdleExtensions
67
- *
68
- * @typedef { {
69
- * warnings: string[];
70
- * } } ImportXMLResult
71
- *
72
- * @typedef {ImportXMLResult & Error} ImportXMLError
73
- *
74
- * @typedef {ImportXMLResult} ImportDefinitionsResult
75
- *
76
- * @typedef {ImportXMLError} ImportDefinitionsError
77
- *
78
- * @typedef {ImportXMLResult} OpenResult
79
- *
80
- * @typedef {ImportXMLError} OpenError
81
- *
82
- * @typedef { {
83
- * format?: boolean;
84
- * preamble?: boolean;
85
- * } } SaveXMLOptions
86
- *
87
- * @typedef { {
88
- * xml?: string;
89
- * error?: Error;
90
- * } } SaveXMLResult
91
- *
92
- * @typedef { {
93
- * svg: string;
94
- * } } SaveSVGResult
95
- *
96
- * @typedef { {
97
- * xml: string;
98
- * } } ImportParseStartEvent
99
- *
100
- * @typedef { {
101
- * error?: ImportXMLError;
102
- * definitions?: ModdleElement;
103
- * elementsById?: ModdleElementsById;
104
- * references?: ModdleElement[];
105
- * warnings: string[];
106
- * } } ImportParseCompleteEvent
107
- *
108
- * @typedef { {
109
- * error?: ImportXMLError;
110
- * warnings: string[];
111
- * } } ImportDoneEvent
112
- *
113
- * @typedef { {
114
- * definitions: ModdleElement;
115
- * } } SaveXMLStartEvent
116
- *
117
- * @typedef {SaveXMLResult} SaveXMLDoneEvent
118
- *
119
- * @typedef { {
120
- * error?: Error;
121
- * svg: string;
122
- * } } SaveSVGDoneEvent
123
- */
124
-
125
- /**
126
- * @template Type
127
- *
128
- * @typedef { Type extends { eventBus: EventBus<infer X> } ? X : never } EventMap
129
- */
130
-
131
- /**
132
- * A base viewer for BPMN 2.0 diagrams.
133
- *
134
- * Have a look at {@link bpmn-js/lib/Viewer}, {@link bpmn-js/lib/NavigatedViewer} or {@link bpmn-js/lib/Modeler} for
135
- * bundles that include actual features.
136
- *
137
- * @template [ServiceMap=null]
138
- *
139
- * @extends Diagram<ServiceMap>
140
- *
141
- * @param {BaseViewerOptions} [options] The options to configure the viewer.
142
- */
143
- export default function BaseViewer(options) {
144
-
145
- /**
146
- * @type {BaseViewerOptions}
147
- */
148
- options = assign({}, DEFAULT_OPTIONS, options);
149
-
150
- /**
151
- * @type {Moddle}
152
- */
153
- this._moddle = this._createModdle(options);
154
-
155
- /**
156
- * @type {HTMLElement}
157
- */
158
- this._container = this._createContainer(options);
159
-
160
- /* <project-logo> */
161
-
162
- addProjectLogo(this._container);
163
-
164
- /* </project-logo> */
165
-
166
- this._init(this._container, this._moddle, options);
167
- }
168
-
169
- inherits(BaseViewer, Diagram);
170
-
171
- /**
172
- * Parse and render a BPMN 2.0 diagram.
173
- *
174
- * Once finished the viewer reports back the result to the
175
- * provided callback function with (err, warnings).
176
- *
177
- * ## Life-Cycle Events
178
- *
179
- * During import the viewer will fire life-cycle events:
180
- *
181
- * * import.parse.start (about to read model from XML)
182
- * * import.parse.complete (model read; may have worked or not)
183
- * * import.render.start (graphical import start)
184
- * * import.render.complete (graphical import finished)
185
- * * import.done (everything done)
186
- *
187
- * You can use these events to hook into the life-cycle.
188
- *
189
- * @throws {ImportXMLError} An error thrown during the import of the XML.
190
- *
191
- * @fires BaseViewer#ImportParseStartEvent
192
- * @fires BaseViewer#ImportParseCompleteEvent
193
- * @fires Importer#ImportRenderStartEvent
194
- * @fires Importer#ImportRenderCompleteEvent
195
- * @fires BaseViewer#ImportDoneEvent
196
- *
197
- * @param {string} xml The BPMN 2.0 XML to be imported.
198
- * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or Id of the BPMN diagram to open.
199
- *
200
- * @return {Promise<ImportXMLResult>} A promise resolving with warnings that were produced during the import.
201
- */
202
- BaseViewer.prototype.importXML = async function importXML(xml, bpmnDiagram) {
203
-
204
- const self = this;
205
-
206
- function ParseCompleteEvent(data) {
207
- return self.get('eventBus').createEvent(data);
208
- }
209
-
210
- let aggregatedWarnings = [];
211
- try {
212
-
213
- // hook in pre-parse listeners +
214
- // allow xml manipulation
215
-
216
- /**
217
- * A `import.parse.start` event.
218
- *
219
- * @event BaseViewer#ImportParseStartEvent
220
- * @type {ImportParseStartEvent}
221
- */
222
- xml = this._emit('import.parse.start', { xml: xml }) || xml;
223
-
224
- let parseResult;
225
- try {
226
- parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');
227
- } catch (error) {
228
- this._emit('import.parse.complete', {
229
- error
230
- });
231
-
232
- throw error;
233
- }
234
-
235
- let definitions = parseResult.rootElement;
236
- const references = parseResult.references;
237
- const parseWarnings = parseResult.warnings;
238
- const elementsById = parseResult.elementsById;
239
-
240
- aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);
241
-
242
- // hook in post parse listeners +
243
- // allow definitions manipulation
244
-
245
- /**
246
- * A `import.parse.complete` event.
247
- *
248
- * @event BaseViewer#ImportParseCompleteEvent
249
- * @type {ImportParseCompleteEvent}
250
- */
251
- definitions = this._emit('import.parse.complete', ParseCompleteEvent({
252
- error: null,
253
- definitions: definitions,
254
- elementsById: elementsById,
255
- references: references,
256
- warnings: aggregatedWarnings
257
- })) || definitions;
258
-
259
- const importResult = await this.importDefinitions(definitions, bpmnDiagram);
260
-
261
- aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);
262
-
263
- /**
264
- * A `import.parse.complete` event.
265
- *
266
- * @event BaseViewer#ImportDoneEvent
267
- * @type {ImportDoneEvent}
268
- */
269
- this._emit('import.done', { error: null, warnings: aggregatedWarnings });
270
-
271
- return { warnings: aggregatedWarnings };
272
- } catch (err) {
273
- let error = err;
274
- aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);
275
- addWarningsToError(error, aggregatedWarnings);
276
-
277
- error = checkValidationError(error);
278
-
279
- this._emit('import.done', { error, warnings: error.warnings });
280
-
281
- throw error;
282
- }
283
- };
284
-
285
-
286
- /**
287
- * Import parsed definitions and render a BPMN 2.0 diagram.
288
- *
289
- * Once finished the viewer reports back the result to the
290
- * provided callback function with (err, warnings).
291
- *
292
- * ## Life-Cycle Events
293
- *
294
- * During import the viewer will fire life-cycle events:
295
- *
296
- * * import.render.start (graphical import start)
297
- * * import.render.complete (graphical import finished)
298
- *
299
- * You can use these events to hook into the life-cycle.
300
- *
301
- * @throws {ImportDefinitionsError} An error thrown during the import of the definitions.
302
- *
303
- * @param {ModdleElement} definitions The definitions.
304
- * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or ID of the BPMN diagram to open.
305
- *
306
- * @return {Promise<ImportDefinitionsResult>} A promise resolving with warnings that were produced during the import.
307
- */
308
- BaseViewer.prototype.importDefinitions = async function importDefinitions(definitions, bpmnDiagram) {
309
- this._setDefinitions(definitions);
310
- const result = await this.open(bpmnDiagram);
311
-
312
- return { warnings: result.warnings };
313
- };
314
-
315
-
316
- /**
317
- * Open diagram of previously imported XML.
318
- *
319
- * Once finished the viewer reports back the result to the
320
- * provided callback function with (err, warnings).
321
- *
322
- * ## Life-Cycle Events
323
- *
324
- * During switch the viewer will fire life-cycle events:
325
- *
326
- * * import.render.start (graphical import start)
327
- * * import.render.complete (graphical import finished)
328
- *
329
- * You can use these events to hook into the life-cycle.
330
- *
331
- * @throws {OpenError} An error thrown during opening.
332
- *
333
- * @param {ModdleElement|string} bpmnDiagramOrId The diagram or Id of the BPMN diagram to open.
334
- *
335
- * @return {Promise<OpenResult>} A promise resolving with warnings that were produced during opening.
336
- */
337
- BaseViewer.prototype.open = async function open(bpmnDiagramOrId) {
338
-
339
- const definitions = this._definitions;
340
- let bpmnDiagram = bpmnDiagramOrId;
341
-
342
- if (!definitions) {
343
- const error = new Error('no XML imported');
344
- addWarningsToError(error, []);
345
-
346
- throw error;
347
- }
348
-
349
- if (typeof bpmnDiagramOrId === 'string') {
350
- bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);
351
-
352
- if (!bpmnDiagram) {
353
- const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');
354
- addWarningsToError(error, []);
355
-
356
- throw error;
357
- }
358
- }
359
-
360
- // clear existing rendered diagram
361
- // catch synchronous exceptions during #clear()
362
- try {
363
- this.clear();
364
- } catch (error) {
365
- addWarningsToError(error, []);
366
-
367
- throw error;
368
- }
369
-
370
- // perform graphical import
371
- const { warnings } = await importBpmnDiagram(this, definitions, bpmnDiagram);
372
-
373
- return { warnings };
374
- };
375
-
376
- /**
377
- * Export the currently displayed BPMN 2.0 diagram as
378
- * a BPMN 2.0 XML document.
379
- *
380
- * ## Life-Cycle Events
381
- *
382
- * During XML saving the viewer will fire life-cycle events:
383
- *
384
- * * saveXML.start (before serialization)
385
- * * saveXML.serialized (after xml generation)
386
- * * saveXML.done (everything done)
387
- *
388
- * You can use these events to hook into the life-cycle.
389
- *
390
- * @throws {Error} An error thrown during export.
391
- *
392
- * @fires BaseViewer#SaveXMLStart
393
- * @fires BaseViewer#SaveXMLDone
394
- *
395
- * @param {SaveXMLOptions} [options] The options.
396
- *
397
- * @return {Promise<SaveXMLResult>} A promise resolving with the XML.
398
- */
399
- BaseViewer.prototype.saveXML = async function saveXML(options) {
400
-
401
- options = options || {};
402
-
403
- let definitions = this._definitions,
404
- error, xml;
405
-
406
- try {
407
- if (!definitions) {
408
- throw new Error('no definitions loaded');
409
- }
410
-
411
- // allow to fiddle around with definitions
412
-
413
- /**
414
- * A `saveXML.start` event.
415
- *
416
- * @event BaseViewer#SaveXMLStartEvent
417
- * @type {SaveXMLStartEvent}
418
- */
419
- definitions = this._emit('saveXML.start', {
420
- definitions
421
- }) || definitions;
422
-
423
- const result = await this._moddle.toXML(definitions, options);
424
- xml = result.xml;
425
-
426
- xml = this._emit('saveXML.serialized', {
427
- xml
428
- }) || xml;
429
- } catch (err) {
430
- error = err;
431
- }
432
-
433
- const result = error ? { error } : { xml };
434
-
435
- /**
436
- * A `saveXML.done` event.
437
- *
438
- * @event BaseViewer#SaveXMLDoneEvent
439
- * @type {SaveXMLDoneEvent}
440
- */
441
- this._emit('saveXML.done', result);
442
-
443
- if (error) {
444
- throw error;
445
- }
446
-
447
- return result;
448
- };
449
-
450
-
451
- /**
452
- * Export the currently displayed BPMN 2.0 diagram as
453
- * an SVG image.
454
- *
455
- * ## Life-Cycle Events
456
- *
457
- * During SVG saving the viewer will fire life-cycle events:
458
- *
459
- * * saveSVG.start (before serialization)
460
- * * saveSVG.done (everything done)
461
- *
462
- * You can use these events to hook into the life-cycle.
463
- *
464
- * @throws {Error} An error thrown during export.
465
- *
466
- * @fires BaseViewer#SaveSVGDone
467
- *
468
- * @return {Promise<SaveSVGResult>} A promise resolving with the SVG.
469
- */
470
- BaseViewer.prototype.saveSVG = async function saveSVG() {
471
- this._emit('saveSVG.start');
472
-
473
- let svg, err;
474
-
475
- try {
476
- const canvas = this.get('canvas');
477
-
478
- const contentNode = canvas.getActiveLayer(),
479
- defsNode = domQuery(':scope > defs', canvas._svg);
480
-
481
- const contents = innerSVG(contentNode),
482
- defs = defsNode ? '<defs>' + innerSVG(defsNode) + '</defs>' : '';
483
-
484
- const bbox = contentNode.getBBox();
485
-
486
- svg =
487
- '<?xml version="1.0" encoding="utf-8"?>\n' +
488
- '<!-- created with bpmn-js / http://bpmn.io -->\n' +
489
- '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
490
- '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
491
- 'width="' + bbox.width + '" height="' + bbox.height + '" ' +
492
- 'viewBox="' + bbox.x + ' ' + bbox.y + ' ' + bbox.width + ' ' + bbox.height + '" version="1.1">' +
493
- defs + contents +
494
- '</svg>';
495
- } catch (e) {
496
- err = e;
497
- }
498
-
499
- /**
500
- * A `saveSVG.done` event.
501
- *
502
- * @event BaseViewer#SaveSVGDoneEvent
503
- * @type {SaveSVGDoneEvent}
504
- */
505
- this._emit('saveSVG.done', {
506
- error: err,
507
- svg: svg
508
- });
509
-
510
- if (err) {
511
- throw err;
512
- }
513
-
514
- return { svg };
515
- };
516
-
517
- BaseViewer.prototype._setDefinitions = function(definitions) {
518
- this._definitions = definitions;
519
- };
520
-
521
- /**
522
- * Return modules to instantiate with.
523
- *
524
- * @return {ModuleDeclaration[]} The modules.
525
- */
526
- BaseViewer.prototype.getModules = function() {
527
- return this._modules;
528
- };
529
-
530
- /**
531
- * Remove all drawn elements from the viewer.
532
- *
533
- * After calling this method the viewer can still be reused for opening another
534
- * diagram.
535
- */
536
- BaseViewer.prototype.clear = function() {
537
- if (!this.getDefinitions()) {
538
-
539
- // no diagram to clear
540
- return;
541
- }
542
-
543
- // remove drawn elements
544
- Diagram.prototype.clear.call(this);
545
- };
546
-
547
- /**
548
- * Destroy the viewer instance and remove all its remainders from the document
549
- * tree.
550
- */
551
- BaseViewer.prototype.destroy = function() {
552
-
553
- // diagram destroy
554
- Diagram.prototype.destroy.call(this);
555
-
556
- // dom detach
557
- domRemove(this._container);
558
- };
559
-
560
- /**
561
- * @overlord
562
- *
563
- * Register an event listener for events with the given name.
564
- *
565
- * The callback will be invoked with `event, ...additionalArguments`
566
- * that have been passed to {@link EventBus#fire}.
567
- *
568
- * Returning false from a listener will prevent the events default action
569
- * (if any is specified). To stop an event from being processed further in
570
- * other listeners execute {@link Event#stopPropagation}.
571
- *
572
- * Returning anything but `undefined` from a listener will stop the listener propagation.
573
- *
574
- * @template T
575
- *
576
- * @param {string|string[]} events The event(s) to listen to.
577
- * @param {number} [priority] The priority with which to listen.
578
- * @param {EventBusEventCallback<T>} callback The callback.
579
- * @param {any} [that] Value of `this` the callback will be called with.
580
- */
581
- /**
582
- * Register an event listener for events with the given name.
583
- *
584
- * The callback will be invoked with `event, ...additionalArguments`
585
- * that have been passed to {@link EventBus#fire}.
586
- *
587
- * Returning false from a listener will prevent the events default action
588
- * (if any is specified). To stop an event from being processed further in
589
- * other listeners execute {@link Event#stopPropagation}.
590
- *
591
- * Returning anything but `undefined` from a listener will stop the listener propagation.
592
- *
593
- * @template {keyof EventMap<ServiceMap>} EventName
594
- *
595
- * @param {EventName} events to subscribe to
596
- * @param {number} [priority=1000] listen priority
597
- * @param {EventBusEventCallback<(EventMap<ServiceMap>)[EventName]>} callback
598
- * @param {any} [that] callback context
599
- */
600
- BaseViewer.prototype.on = function(events, priority, callback, that) {
601
- return this.get('eventBus').on(events, priority, callback, that);
602
- };
603
-
604
- /**
605
- * Remove an event listener.
606
- *
607
- * @param {string|string[]} events The event(s).
608
- * @param {Function} [callback] The callback.
609
- */
610
- BaseViewer.prototype.off = function(events, callback) {
611
- this.get('eventBus').off(events, callback);
612
- };
613
-
614
- /**
615
- * Attach the viewer to an HTML element.
616
- *
617
- * @param {HTMLElement} parentNode The parent node to attach to.
618
- */
619
- BaseViewer.prototype.attachTo = function(parentNode) {
620
-
621
- if (!parentNode) {
622
- throw new Error('parentNode required');
623
- }
624
-
625
- // ensure we detach from the
626
- // previous, old parent
627
- this.detach();
628
-
629
- // unwrap jQuery if provided
630
- if (parentNode.get && parentNode.constructor.prototype.jquery) {
631
- parentNode = parentNode.get(0);
632
- }
633
-
634
- if (typeof parentNode === 'string') {
635
- parentNode = domQuery(parentNode);
636
- }
637
-
638
- parentNode.appendChild(this._container);
639
-
640
- this._emit('attach', {});
641
-
642
- this.get('canvas').resized();
643
- };
644
-
645
- /**
646
- * Get the definitions model element.
647
- *
648
- * @return {ModdleElement} The definitions model element.
649
- */
650
- BaseViewer.prototype.getDefinitions = function() {
651
- return this._definitions;
652
- };
653
-
654
- /**
655
- * Detach the viewer.
656
- *
657
- * @fires BaseViewer#DetachEvent
658
- */
659
- BaseViewer.prototype.detach = function() {
660
-
661
- const container = this._container,
662
- parentNode = container.parentNode;
663
-
664
- if (!parentNode) {
665
- return;
666
- }
667
-
668
- /**
669
- * A `detach` event.
670
- *
671
- * @event BaseViewer#DetachEvent
672
- * @type {Object}
673
- */
674
- this._emit('detach', {});
675
-
676
- parentNode.removeChild(container);
677
- };
678
-
679
- BaseViewer.prototype._init = function(container, moddle, options) {
680
-
681
- const baseModules = options.modules || this.getModules(options),
682
- additionalModules = options.additionalModules || [],
683
- staticModules = [
684
- {
685
- bpmnjs: [ 'value', this ],
686
- moddle: [ 'value', moddle ]
687
- }
688
- ];
689
-
690
- const diagramModules = [].concat(staticModules, baseModules, additionalModules);
691
-
692
- const diagramOptions = assign(omit(options, [ 'additionalModules' ]), {
693
- canvas: assign({}, options.canvas, { container: container }),
694
- modules: diagramModules
695
- });
696
-
697
- // invoke diagram constructor
698
- Diagram.call(this, diagramOptions);
699
-
700
- if (options && options.container) {
701
- this.attachTo(options.container);
702
- }
703
- };
704
-
705
- /**
706
- * Emit an event on the underlying {@link EventBus}
707
- *
708
- * @param {string} type
709
- * @param {Object} event
710
- *
711
- * @return {Object} The return value after calling all event listeners.
712
- */
713
- BaseViewer.prototype._emit = function(type, event) {
714
- return this.get('eventBus').fire(type, event);
715
- };
716
-
717
- /**
718
- * @param {BaseViewerOptions} options
719
- *
720
- * @return {HTMLElement}
721
- */
722
- BaseViewer.prototype._createContainer = function(options) {
723
-
724
- const container = domify('<div class="bjs-container"></div>');
725
-
726
- assignStyle(container, {
727
- width: ensureUnit(options.width),
728
- height: ensureUnit(options.height),
729
- position: options.position
730
- });
731
-
732
- return container;
733
- };
734
-
735
- /**
736
- * @param {BaseViewerOptions} options
737
- *
738
- * @return {Moddle}
739
- */
740
- BaseViewer.prototype._createModdle = function(options) {
741
- const moddleOptions = assign({}, this._moddleExtensions, options.moddleExtensions);
742
-
743
- return new BpmnModdle(moddleOptions);
744
- };
745
-
746
- BaseViewer.prototype._modules = [];
747
-
748
- // helpers ///////////////
749
-
750
- function addWarningsToError(err, warningsAry) {
751
- err.warnings = warningsAry;
752
- return err;
753
- }
754
-
755
- function checkValidationError(err) {
756
-
757
- // check if we can help the user by indicating wrong BPMN 2.0 xml
758
- // (in case he or the exporting tool did not get that right)
759
-
760
- const pattern = /unparsable content <([^>]+)> detected([\s\S]*)$/;
761
- const match = pattern.exec(err.message);
762
-
763
- if (match) {
764
- err.message =
765
- 'unparsable content <' + match[1] + '> detected; ' +
766
- 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];
767
- }
768
-
769
- return err;
770
- }
771
-
772
- const DEFAULT_OPTIONS = {
773
- width: '100%',
774
- height: '100%',
775
- position: 'relative'
776
- };
777
-
778
-
779
- /**
780
- * Ensure the passed argument is a proper unit (defaulting to px)
781
- */
782
- function ensureUnit(val) {
783
- return val + (isNumber(val) ? 'px' : '');
784
- }
785
-
786
-
787
- /**
788
- * Find BPMNDiagram in definitions by ID
789
- *
790
- * @param {ModdleElement<Definitions>} definitions
791
- * @param {string} diagramId
792
- *
793
- * @return {ModdleElement<BPMNDiagram>|null}
794
- */
795
- function findBPMNDiagram(definitions, diagramId) {
796
- if (!diagramId) {
797
- return null;
798
- }
799
-
800
- return find(definitions.diagrams, function(element) {
801
- return element.id === diagramId;
802
- }) || null;
803
- }
804
-
805
-
806
- /* <project-logo> */
807
-
808
- import {
809
- open as openPoweredBy,
810
- BPMNIO_IMG,
811
- LOGO_STYLES,
812
- LINK_STYLES
813
- } from './util/PoweredByUtil';
814
-
815
- import {
816
- event as domEvent
817
- } from 'min-dom';
818
-
819
- /**
820
- * Adds the project logo to the diagram container as
821
- * required by the bpmn.io license.
822
- *
823
- * @see http://bpmn.io/license
824
- *
825
- * @param {Element} container
826
- */
827
- function addProjectLogo(container) {
828
- const img = BPMNIO_IMG;
829
-
830
- const linkMarkup =
831
- '<a href="http://bpmn.io" ' +
832
- 'target="_blank" ' +
833
- 'class="bjs-powered-by" ' +
834
- 'title="Powered by bpmn.io" ' +
835
- '>' +
836
- img +
837
- '</a>';
838
-
839
- const linkElement = domify(linkMarkup);
840
-
841
- assignStyle(domQuery('svg', linkElement), LOGO_STYLES);
842
- assignStyle(linkElement, LINK_STYLES, {
843
- position: 'absolute',
844
- bottom: '15px',
845
- right: '15px',
846
- zIndex: '100'
847
- });
848
-
849
- container.appendChild(linkElement);
850
-
851
- domEvent.bind(linkElement, 'click', function(event) {
852
- openPoweredBy();
853
-
854
- event.preventDefault();
855
- });
856
- }
857
-
858
- /* </project-logo> */
1
+ /**
2
+ * The code in the <project-logo></project-logo> area
3
+ * must not be changed.
4
+ *
5
+ * @see http://bpmn.io/license for more information.
6
+ */
7
+ import {
8
+ assign,
9
+ find,
10
+ isNumber,
11
+ omit
12
+ } from 'min-dash';
13
+
14
+ import {
15
+ domify,
16
+ assignStyle,
17
+ query as domQuery,
18
+ remove as domRemove
19
+ } from 'min-dom';
20
+
21
+ import {
22
+ innerSVG
23
+ } from 'tiny-svg';
24
+
25
+ import Diagram from 'diagram-js';
26
+ import BpmnModdle from 'bpmn-moddle';
27
+
28
+ import inherits from 'inherits-browser';
29
+
30
+ import {
31
+ importBpmnDiagram
32
+ } from './import/Importer';
33
+
34
+ /**
35
+ * @template T
36
+ *
37
+ * @typedef { import('diagram-js/lib/core/EventBus').default<T> } EventBus
38
+ */
39
+
40
+ /**
41
+ * @template T
42
+ *
43
+ * @typedef {import('diagram-js/lib/core/EventBus').EventBusEventCallback<T>} EventBusEventCallback
44
+ */
45
+
46
+ /**
47
+ * @typedef {import('didi').ModuleDeclaration} ModuleDeclaration
48
+ *
49
+ * @typedef {import('./model/Types').Moddle} Moddle
50
+ * @typedef {import('./model/Types').ModdleElement} ModdleElement
51
+ * @typedef {import('./model/Types').ModdleExtension} ModdleExtension
52
+ *
53
+ * @typedef { {
54
+ * width?: number|string;
55
+ * height?: number|string;
56
+ * position?: string;
57
+ * container?: string|HTMLElement;
58
+ * moddleExtensions?: ModdleExtensions;
59
+ * additionalModules?: ModuleDeclaration[];
60
+ * } & Record<string, any> } BaseViewerOptions
61
+ *
62
+ * @typedef {Record<string, ModdleElement>} ModdleElementsById
63
+ *
64
+ * @typedef { {
65
+ * [key: string]: ModdleExtension;
66
+ * } } ModdleExtensions
67
+ *
68
+ * @typedef { {
69
+ * warnings: string[];
70
+ * } } ImportXMLResult
71
+ *
72
+ * @typedef {ImportXMLResult & Error} ImportXMLError
73
+ *
74
+ * @typedef {ImportXMLResult} ImportDefinitionsResult
75
+ *
76
+ * @typedef {ImportXMLError} ImportDefinitionsError
77
+ *
78
+ * @typedef {ImportXMLResult} OpenResult
79
+ *
80
+ * @typedef {ImportXMLError} OpenError
81
+ *
82
+ * @typedef { {
83
+ * format?: boolean;
84
+ * preamble?: boolean;
85
+ * } } SaveXMLOptions
86
+ *
87
+ * @typedef { {
88
+ * xml?: string;
89
+ * error?: Error;
90
+ * } } SaveXMLResult
91
+ *
92
+ * @typedef { {
93
+ * svg: string;
94
+ * } } SaveSVGResult
95
+ *
96
+ * @typedef { {
97
+ * xml: string;
98
+ * } } ImportParseStartEvent
99
+ *
100
+ * @typedef { {
101
+ * error?: ImportXMLError;
102
+ * definitions?: ModdleElement;
103
+ * elementsById?: ModdleElementsById;
104
+ * references?: ModdleElement[];
105
+ * warnings: string[];
106
+ * } } ImportParseCompleteEvent
107
+ *
108
+ * @typedef { {
109
+ * error?: ImportXMLError;
110
+ * warnings: string[];
111
+ * } } ImportDoneEvent
112
+ *
113
+ * @typedef { {
114
+ * definitions: ModdleElement;
115
+ * } } SaveXMLStartEvent
116
+ *
117
+ * @typedef {SaveXMLResult} SaveXMLDoneEvent
118
+ *
119
+ * @typedef { {
120
+ * error?: Error;
121
+ * svg: string;
122
+ * } } SaveSVGDoneEvent
123
+ */
124
+
125
+ /**
126
+ * @template Type
127
+ *
128
+ * @typedef { Type extends { eventBus: EventBus<infer X> } ? X : never } EventMap
129
+ */
130
+
131
+ /**
132
+ * A base viewer for BPMN 2.0 diagrams.
133
+ *
134
+ * Have a look at {@link bpmn-js/lib/Viewer}, {@link bpmn-js/lib/NavigatedViewer} or {@link bpmn-js/lib/Modeler} for
135
+ * bundles that include actual features.
136
+ *
137
+ * @template [ServiceMap=null]
138
+ *
139
+ * @extends Diagram<ServiceMap>
140
+ *
141
+ * @param {BaseViewerOptions} [options] The options to configure the viewer.
142
+ */
143
+ export default function BaseViewer(options) {
144
+
145
+ /**
146
+ * @type {BaseViewerOptions}
147
+ */
148
+ options = assign({}, DEFAULT_OPTIONS, options);
149
+
150
+ /**
151
+ * @type {Moddle}
152
+ */
153
+ this._moddle = this._createModdle(options);
154
+
155
+ /**
156
+ * @type {HTMLElement}
157
+ */
158
+ this._container = this._createContainer(options);
159
+
160
+ this._init(this._container, this._moddle, options);
161
+
162
+ /* <project-logo> */
163
+
164
+ addProjectLogo(this._container);
165
+
166
+ /* </project-logo> */
167
+ }
168
+
169
+ inherits(BaseViewer, Diagram);
170
+
171
+ /**
172
+ * Parse and render a BPMN 2.0 diagram.
173
+ *
174
+ * Once finished the viewer reports back the result to the
175
+ * provided callback function with (err, warnings).
176
+ *
177
+ * ## Life-Cycle Events
178
+ *
179
+ * During import the viewer will fire life-cycle events:
180
+ *
181
+ * * import.parse.start (about to read model from XML)
182
+ * * import.parse.complete (model read; may have worked or not)
183
+ * * import.render.start (graphical import start)
184
+ * * import.render.complete (graphical import finished)
185
+ * * import.done (everything done)
186
+ *
187
+ * You can use these events to hook into the life-cycle.
188
+ *
189
+ * @throws {ImportXMLError} An error thrown during the import of the XML.
190
+ *
191
+ * @fires BaseViewer#ImportParseStartEvent
192
+ * @fires BaseViewer#ImportParseCompleteEvent
193
+ * @fires Importer#ImportRenderStartEvent
194
+ * @fires Importer#ImportRenderCompleteEvent
195
+ * @fires BaseViewer#ImportDoneEvent
196
+ *
197
+ * @param {string} xml The BPMN 2.0 XML to be imported.
198
+ * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or Id of the BPMN diagram to open.
199
+ *
200
+ * @return {Promise<ImportXMLResult>} A promise resolving with warnings that were produced during the import.
201
+ */
202
+ BaseViewer.prototype.importXML = async function importXML(xml, bpmnDiagram) {
203
+
204
+ const self = this;
205
+
206
+ function ParseCompleteEvent(data) {
207
+ return self.get('eventBus').createEvent(data);
208
+ }
209
+
210
+ let aggregatedWarnings = [];
211
+ try {
212
+
213
+ // hook in pre-parse listeners +
214
+ // allow xml manipulation
215
+
216
+ /**
217
+ * A `import.parse.start` event.
218
+ *
219
+ * @event BaseViewer#ImportParseStartEvent
220
+ * @type {ImportParseStartEvent}
221
+ */
222
+ xml = this._emit('import.parse.start', { xml: xml }) || xml;
223
+
224
+ let parseResult;
225
+ try {
226
+ parseResult = await this._moddle.fromXML(xml, 'bpmn:Definitions');
227
+ } catch (error) {
228
+ this._emit('import.parse.complete', {
229
+ error
230
+ });
231
+
232
+ throw error;
233
+ }
234
+
235
+ let definitions = parseResult.rootElement;
236
+ const references = parseResult.references;
237
+ const parseWarnings = parseResult.warnings;
238
+ const elementsById = parseResult.elementsById;
239
+
240
+ aggregatedWarnings = aggregatedWarnings.concat(parseWarnings);
241
+
242
+ // hook in post parse listeners +
243
+ // allow definitions manipulation
244
+
245
+ /**
246
+ * A `import.parse.complete` event.
247
+ *
248
+ * @event BaseViewer#ImportParseCompleteEvent
249
+ * @type {ImportParseCompleteEvent}
250
+ */
251
+ definitions = this._emit('import.parse.complete', ParseCompleteEvent({
252
+ error: null,
253
+ definitions: definitions,
254
+ elementsById: elementsById,
255
+ references: references,
256
+ warnings: aggregatedWarnings
257
+ })) || definitions;
258
+
259
+ const importResult = await this.importDefinitions(definitions, bpmnDiagram);
260
+
261
+ aggregatedWarnings = aggregatedWarnings.concat(importResult.warnings);
262
+
263
+ /**
264
+ * A `import.parse.complete` event.
265
+ *
266
+ * @event BaseViewer#ImportDoneEvent
267
+ * @type {ImportDoneEvent}
268
+ */
269
+ this._emit('import.done', { error: null, warnings: aggregatedWarnings });
270
+
271
+ return { warnings: aggregatedWarnings };
272
+ } catch (err) {
273
+ let error = err;
274
+ aggregatedWarnings = aggregatedWarnings.concat(error.warnings || []);
275
+ addWarningsToError(error, aggregatedWarnings);
276
+
277
+ error = checkValidationError(error);
278
+
279
+ this._emit('import.done', { error, warnings: error.warnings });
280
+
281
+ throw error;
282
+ }
283
+ };
284
+
285
+
286
+ /**
287
+ * Import parsed definitions and render a BPMN 2.0 diagram.
288
+ *
289
+ * Once finished the viewer reports back the result to the
290
+ * provided callback function with (err, warnings).
291
+ *
292
+ * ## Life-Cycle Events
293
+ *
294
+ * During import the viewer will fire life-cycle events:
295
+ *
296
+ * * import.render.start (graphical import start)
297
+ * * import.render.complete (graphical import finished)
298
+ *
299
+ * You can use these events to hook into the life-cycle.
300
+ *
301
+ * @throws {ImportDefinitionsError} An error thrown during the import of the definitions.
302
+ *
303
+ * @param {ModdleElement} definitions The definitions.
304
+ * @param {ModdleElement|string} [bpmnDiagram] The optional diagram or ID of the BPMN diagram to open.
305
+ *
306
+ * @return {Promise<ImportDefinitionsResult>} A promise resolving with warnings that were produced during the import.
307
+ */
308
+ BaseViewer.prototype.importDefinitions = async function importDefinitions(definitions, bpmnDiagram) {
309
+ this._setDefinitions(definitions);
310
+ const result = await this.open(bpmnDiagram);
311
+
312
+ return { warnings: result.warnings };
313
+ };
314
+
315
+
316
+ /**
317
+ * Open diagram of previously imported XML.
318
+ *
319
+ * Once finished the viewer reports back the result to the
320
+ * provided callback function with (err, warnings).
321
+ *
322
+ * ## Life-Cycle Events
323
+ *
324
+ * During switch the viewer will fire life-cycle events:
325
+ *
326
+ * * import.render.start (graphical import start)
327
+ * * import.render.complete (graphical import finished)
328
+ *
329
+ * You can use these events to hook into the life-cycle.
330
+ *
331
+ * @throws {OpenError} An error thrown during opening.
332
+ *
333
+ * @param {ModdleElement|string} bpmnDiagramOrId The diagram or Id of the BPMN diagram to open.
334
+ *
335
+ * @return {Promise<OpenResult>} A promise resolving with warnings that were produced during opening.
336
+ */
337
+ BaseViewer.prototype.open = async function open(bpmnDiagramOrId) {
338
+
339
+ const definitions = this._definitions;
340
+ let bpmnDiagram = bpmnDiagramOrId;
341
+
342
+ if (!definitions) {
343
+ const error = new Error('no XML imported');
344
+ addWarningsToError(error, []);
345
+
346
+ throw error;
347
+ }
348
+
349
+ if (typeof bpmnDiagramOrId === 'string') {
350
+ bpmnDiagram = findBPMNDiagram(definitions, bpmnDiagramOrId);
351
+
352
+ if (!bpmnDiagram) {
353
+ const error = new Error('BPMNDiagram <' + bpmnDiagramOrId + '> not found');
354
+ addWarningsToError(error, []);
355
+
356
+ throw error;
357
+ }
358
+ }
359
+
360
+ // clear existing rendered diagram
361
+ // catch synchronous exceptions during #clear()
362
+ try {
363
+ this.clear();
364
+ } catch (error) {
365
+ addWarningsToError(error, []);
366
+
367
+ throw error;
368
+ }
369
+
370
+ // perform graphical import
371
+ const { warnings } = await importBpmnDiagram(this, definitions, bpmnDiagram);
372
+
373
+ return { warnings };
374
+ };
375
+
376
+ /**
377
+ * Export the currently displayed BPMN 2.0 diagram as
378
+ * a BPMN 2.0 XML document.
379
+ *
380
+ * ## Life-Cycle Events
381
+ *
382
+ * During XML saving the viewer will fire life-cycle events:
383
+ *
384
+ * * saveXML.start (before serialization)
385
+ * * saveXML.serialized (after xml generation)
386
+ * * saveXML.done (everything done)
387
+ *
388
+ * You can use these events to hook into the life-cycle.
389
+ *
390
+ * @throws {Error} An error thrown during export.
391
+ *
392
+ * @fires BaseViewer#SaveXMLStart
393
+ * @fires BaseViewer#SaveXMLDone
394
+ *
395
+ * @param {SaveXMLOptions} [options] The options.
396
+ *
397
+ * @return {Promise<SaveXMLResult>} A promise resolving with the XML.
398
+ */
399
+ BaseViewer.prototype.saveXML = async function saveXML(options) {
400
+
401
+ options = options || {};
402
+
403
+ let definitions = this._definitions,
404
+ error, xml;
405
+
406
+ try {
407
+ if (!definitions) {
408
+ throw new Error('no definitions loaded');
409
+ }
410
+
411
+ // allow to fiddle around with definitions
412
+
413
+ /**
414
+ * A `saveXML.start` event.
415
+ *
416
+ * @event BaseViewer#SaveXMLStartEvent
417
+ * @type {SaveXMLStartEvent}
418
+ */
419
+ definitions = this._emit('saveXML.start', {
420
+ definitions
421
+ }) || definitions;
422
+
423
+ const result = await this._moddle.toXML(definitions, options);
424
+ xml = result.xml;
425
+
426
+ xml = this._emit('saveXML.serialized', {
427
+ xml
428
+ }) || xml;
429
+ } catch (err) {
430
+ error = err;
431
+ }
432
+
433
+ const result = error ? { error } : { xml };
434
+
435
+ /**
436
+ * A `saveXML.done` event.
437
+ *
438
+ * @event BaseViewer#SaveXMLDoneEvent
439
+ * @type {SaveXMLDoneEvent}
440
+ */
441
+ this._emit('saveXML.done', result);
442
+
443
+ if (error) {
444
+ throw error;
445
+ }
446
+
447
+ return result;
448
+ };
449
+
450
+
451
+ /**
452
+ * Export the currently displayed BPMN 2.0 diagram as
453
+ * an SVG image.
454
+ *
455
+ * ## Life-Cycle Events
456
+ *
457
+ * During SVG saving the viewer will fire life-cycle events:
458
+ *
459
+ * * saveSVG.start (before serialization)
460
+ * * saveSVG.done (everything done)
461
+ *
462
+ * You can use these events to hook into the life-cycle.
463
+ *
464
+ * @throws {Error} An error thrown during export.
465
+ *
466
+ * @fires BaseViewer#SaveSVGDone
467
+ *
468
+ * @return {Promise<SaveSVGResult>} A promise resolving with the SVG.
469
+ */
470
+ BaseViewer.prototype.saveSVG = async function saveSVG() {
471
+ this._emit('saveSVG.start');
472
+
473
+ let svg, err;
474
+
475
+ try {
476
+ const canvas = this.get('canvas');
477
+
478
+ const contentNode = canvas.getActiveLayer(),
479
+ defsNode = domQuery(':scope > defs', canvas._svg);
480
+
481
+ const contents = innerSVG(contentNode),
482
+ defs = defsNode ? '<defs>' + innerSVG(defsNode) + '</defs>' : '';
483
+
484
+ const bbox = contentNode.getBBox();
485
+
486
+ svg =
487
+ '<?xml version="1.0" encoding="utf-8"?>\n' +
488
+ '<!-- created with bpmn-js / http://bpmn.io -->\n' +
489
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n' +
490
+ '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
491
+ 'width="' + bbox.width + '" height="' + bbox.height + '" ' +
492
+ 'viewBox="' + bbox.x + ' ' + bbox.y + ' ' + bbox.width + ' ' + bbox.height + '" version="1.1">' +
493
+ defs + contents +
494
+ '</svg>';
495
+ } catch (e) {
496
+ err = e;
497
+ }
498
+
499
+ /**
500
+ * A `saveSVG.done` event.
501
+ *
502
+ * @event BaseViewer#SaveSVGDoneEvent
503
+ * @type {SaveSVGDoneEvent}
504
+ */
505
+ this._emit('saveSVG.done', {
506
+ error: err,
507
+ svg: svg
508
+ });
509
+
510
+ if (err) {
511
+ throw err;
512
+ }
513
+
514
+ return { svg };
515
+ };
516
+
517
+ BaseViewer.prototype._setDefinitions = function(definitions) {
518
+ this._definitions = definitions;
519
+ };
520
+
521
+ /**
522
+ * Return modules to instantiate with.
523
+ *
524
+ * @return {ModuleDeclaration[]} The modules.
525
+ */
526
+ BaseViewer.prototype.getModules = function() {
527
+ return this._modules;
528
+ };
529
+
530
+ /**
531
+ * Remove all drawn elements from the viewer.
532
+ *
533
+ * After calling this method the viewer can still be reused for opening another
534
+ * diagram.
535
+ */
536
+ BaseViewer.prototype.clear = function() {
537
+ if (!this.getDefinitions()) {
538
+
539
+ // no diagram to clear
540
+ return;
541
+ }
542
+
543
+ // remove drawn elements
544
+ Diagram.prototype.clear.call(this);
545
+ };
546
+
547
+ /**
548
+ * Destroy the viewer instance and remove all its remainders from the document
549
+ * tree.
550
+ */
551
+ BaseViewer.prototype.destroy = function() {
552
+
553
+ // diagram destroy
554
+ Diagram.prototype.destroy.call(this);
555
+
556
+ // dom detach
557
+ domRemove(this._container);
558
+ };
559
+
560
+ /**
561
+ * @overlord
562
+ *
563
+ * Register an event listener for events with the given name.
564
+ *
565
+ * The callback will be invoked with `event, ...additionalArguments`
566
+ * that have been passed to {@link EventBus#fire}.
567
+ *
568
+ * Returning false from a listener will prevent the events default action
569
+ * (if any is specified). To stop an event from being processed further in
570
+ * other listeners execute {@link Event#stopPropagation}.
571
+ *
572
+ * Returning anything but `undefined` from a listener will stop the listener propagation.
573
+ *
574
+ * @template T
575
+ *
576
+ * @param {string|string[]} events The event(s) to listen to.
577
+ * @param {number} [priority] The priority with which to listen.
578
+ * @param {EventBusEventCallback<T>} callback The callback.
579
+ * @param {any} [that] Value of `this` the callback will be called with.
580
+ */
581
+ /**
582
+ * Register an event listener for events with the given name.
583
+ *
584
+ * The callback will be invoked with `event, ...additionalArguments`
585
+ * that have been passed to {@link EventBus#fire}.
586
+ *
587
+ * Returning false from a listener will prevent the events default action
588
+ * (if any is specified). To stop an event from being processed further in
589
+ * other listeners execute {@link Event#stopPropagation}.
590
+ *
591
+ * Returning anything but `undefined` from a listener will stop the listener propagation.
592
+ *
593
+ * @template {keyof EventMap<ServiceMap>} EventName
594
+ *
595
+ * @param {EventName} events to subscribe to
596
+ * @param {number} [priority=1000] listen priority
597
+ * @param {EventBusEventCallback<(EventMap<ServiceMap>)[EventName]>} callback
598
+ * @param {any} [that] callback context
599
+ */
600
+ BaseViewer.prototype.on = function(events, priority, callback, that) {
601
+ return this.get('eventBus').on(events, priority, callback, that);
602
+ };
603
+
604
+ /**
605
+ * Remove an event listener.
606
+ *
607
+ * @param {string|string[]} events The event(s).
608
+ * @param {Function} [callback] The callback.
609
+ */
610
+ BaseViewer.prototype.off = function(events, callback) {
611
+ this.get('eventBus').off(events, callback);
612
+ };
613
+
614
+ /**
615
+ * Attach the viewer to an HTML element.
616
+ *
617
+ * @param {HTMLElement} parentNode The parent node to attach to.
618
+ */
619
+ BaseViewer.prototype.attachTo = function(parentNode) {
620
+
621
+ if (!parentNode) {
622
+ throw new Error('parentNode required');
623
+ }
624
+
625
+ // ensure we detach from the
626
+ // previous, old parent
627
+ this.detach();
628
+
629
+ // unwrap jQuery if provided
630
+ if (parentNode.get && parentNode.constructor.prototype.jquery) {
631
+ parentNode = parentNode.get(0);
632
+ }
633
+
634
+ if (typeof parentNode === 'string') {
635
+ parentNode = domQuery(parentNode);
636
+ }
637
+
638
+ parentNode.appendChild(this._container);
639
+
640
+ this._emit('attach', {});
641
+
642
+ this.get('canvas').resized();
643
+ };
644
+
645
+ /**
646
+ * Get the definitions model element.
647
+ *
648
+ * @return {ModdleElement} The definitions model element.
649
+ */
650
+ BaseViewer.prototype.getDefinitions = function() {
651
+ return this._definitions;
652
+ };
653
+
654
+ /**
655
+ * Detach the viewer.
656
+ *
657
+ * @fires BaseViewer#DetachEvent
658
+ */
659
+ BaseViewer.prototype.detach = function() {
660
+
661
+ const container = this._container,
662
+ parentNode = container.parentNode;
663
+
664
+ if (!parentNode) {
665
+ return;
666
+ }
667
+
668
+ /**
669
+ * A `detach` event.
670
+ *
671
+ * @event BaseViewer#DetachEvent
672
+ * @type {Object}
673
+ */
674
+ this._emit('detach', {});
675
+
676
+ parentNode.removeChild(container);
677
+ };
678
+
679
+ BaseViewer.prototype._init = function(container, moddle, options) {
680
+
681
+ const baseModules = options.modules || this.getModules(options),
682
+ additionalModules = options.additionalModules || [],
683
+ staticModules = [
684
+ {
685
+ bpmnjs: [ 'value', this ],
686
+ moddle: [ 'value', moddle ]
687
+ }
688
+ ];
689
+
690
+ const diagramModules = [].concat(staticModules, baseModules, additionalModules);
691
+
692
+ const diagramOptions = assign(omit(options, [ 'additionalModules' ]), {
693
+ canvas: assign({}, options.canvas, { container: container }),
694
+ modules: diagramModules
695
+ });
696
+
697
+ // invoke diagram constructor
698
+ Diagram.call(this, diagramOptions);
699
+
700
+ if (options && options.container) {
701
+ this.attachTo(options.container);
702
+ }
703
+ };
704
+
705
+ /**
706
+ * Emit an event on the underlying {@link EventBus}
707
+ *
708
+ * @param {string} type
709
+ * @param {Object} event
710
+ *
711
+ * @return {Object} The return value after calling all event listeners.
712
+ */
713
+ BaseViewer.prototype._emit = function(type, event) {
714
+ return this.get('eventBus').fire(type, event);
715
+ };
716
+
717
+ /**
718
+ * @param {BaseViewerOptions} options
719
+ *
720
+ * @return {HTMLElement}
721
+ */
722
+ BaseViewer.prototype._createContainer = function(options) {
723
+
724
+ const container = domify('<div class="bjs-container"></div>');
725
+
726
+ assignStyle(container, {
727
+ width: ensureUnit(options.width),
728
+ height: ensureUnit(options.height),
729
+ position: options.position
730
+ });
731
+
732
+ return container;
733
+ };
734
+
735
+ /**
736
+ * @param {BaseViewerOptions} options
737
+ *
738
+ * @return {Moddle}
739
+ */
740
+ BaseViewer.prototype._createModdle = function(options) {
741
+ const moddleOptions = assign({}, this._moddleExtensions, options.moddleExtensions);
742
+
743
+ return new BpmnModdle(moddleOptions);
744
+ };
745
+
746
+ BaseViewer.prototype._modules = [];
747
+
748
+ // helpers ///////////////
749
+
750
+ function addWarningsToError(err, warningsAry) {
751
+ err.warnings = warningsAry;
752
+ return err;
753
+ }
754
+
755
+ function checkValidationError(err) {
756
+
757
+ // check if we can help the user by indicating wrong BPMN 2.0 xml
758
+ // (in case he or the exporting tool did not get that right)
759
+
760
+ const pattern = /unparsable content <([^>]+)> detected([\s\S]*)$/;
761
+ const match = pattern.exec(err.message);
762
+
763
+ if (match) {
764
+ err.message =
765
+ 'unparsable content <' + match[1] + '> detected; ' +
766
+ 'this may indicate an invalid BPMN 2.0 diagram file' + match[2];
767
+ }
768
+
769
+ return err;
770
+ }
771
+
772
+ const DEFAULT_OPTIONS = {
773
+ width: '100%',
774
+ height: '100%',
775
+ position: 'relative'
776
+ };
777
+
778
+
779
+ /**
780
+ * Ensure the passed argument is a proper unit (defaulting to px)
781
+ */
782
+ function ensureUnit(val) {
783
+ return val + (isNumber(val) ? 'px' : '');
784
+ }
785
+
786
+
787
+ /**
788
+ * Find BPMNDiagram in definitions by ID
789
+ *
790
+ * @param {ModdleElement<Definitions>} definitions
791
+ * @param {string} diagramId
792
+ *
793
+ * @return {ModdleElement<BPMNDiagram>|null}
794
+ */
795
+ function findBPMNDiagram(definitions, diagramId) {
796
+ if (!diagramId) {
797
+ return null;
798
+ }
799
+
800
+ return find(definitions.diagrams, function(element) {
801
+ return element.id === diagramId;
802
+ }) || null;
803
+ }
804
+
805
+
806
+ /* <project-logo> */
807
+
808
+ import {
809
+ open as openPoweredBy,
810
+ BPMNIO_IMG,
811
+ LOGO_STYLES,
812
+ LINK_STYLES
813
+ } from './util/PoweredByUtil';
814
+
815
+ import {
816
+ event as domEvent
817
+ } from 'min-dom';
818
+
819
+ /**
820
+ * Adds the project logo to the diagram container as
821
+ * required by the bpmn.io license.
822
+ *
823
+ * @see http://bpmn.io/license
824
+ *
825
+ * @param {Element} container
826
+ */
827
+ function addProjectLogo(container) {
828
+ const img = BPMNIO_IMG;
829
+
830
+ const linkMarkup =
831
+ '<a href="http://bpmn.io" ' +
832
+ 'target="_blank" ' +
833
+ 'class="bjs-powered-by" ' +
834
+ 'title="Powered by bpmn.io" ' +
835
+ '>' +
836
+ img +
837
+ '</a>';
838
+
839
+ const linkElement = domify(linkMarkup);
840
+
841
+ assignStyle(domQuery('svg', linkElement), LOGO_STYLES);
842
+ assignStyle(linkElement, LINK_STYLES, {
843
+ position: 'absolute',
844
+ bottom: '15px',
845
+ right: '15px',
846
+ zIndex: '100'
847
+ });
848
+
849
+ container.appendChild(linkElement);
850
+
851
+ domEvent.bind(linkElement, 'click', function(event) {
852
+ openPoweredBy();
853
+
854
+ event.preventDefault();
855
+ });
856
+ }
857
+
858
+ /* </project-logo> */