@eclipse-glsp/client 0.9.0-rc-01 → 0.10.0-next.bb1c2fd.157

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 (582) hide show
  1. package/LICENSE +642 -277
  2. package/README.md +4 -2
  3. package/css/command-palette.css +9 -5
  4. package/css/decoration.css +3 -2
  5. package/css/glsp-sprotty.css +16 -7
  6. package/css/tool-palette.css +44 -27
  7. package/lib/base/action-dispatcher.d.ts +19 -3
  8. package/lib/base/action-dispatcher.d.ts.map +1 -1
  9. package/lib/base/action-dispatcher.js +47 -65
  10. package/lib/base/action-dispatcher.js.map +1 -1
  11. package/lib/base/actions/focus-change-action.d.ts +1 -1
  12. package/lib/base/actions/focus-change-action.d.ts.map +1 -1
  13. package/lib/base/actions/focus-change-action.js +4 -5
  14. package/lib/base/actions/focus-change-action.js.map +1 -1
  15. package/lib/base/{args.d.ts → argumentable.d.ts} +3 -5
  16. package/lib/base/argumentable.d.ts.map +1 -0
  17. package/lib/base/{args.js → argumentable.js} +1 -1
  18. package/lib/base/argumentable.js.map +1 -0
  19. package/lib/base/auto-complete/auto-complete-actions.d.ts +1 -1
  20. package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -1
  21. package/lib/base/auto-complete/auto-complete-widget.d.ts +3 -3
  22. package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
  23. package/lib/base/auto-complete/auto-complete-widget.js +119 -153
  24. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
  25. package/lib/base/auto-complete/validation-decorator.d.ts +3 -18
  26. package/lib/base/auto-complete/validation-decorator.d.ts.map +1 -1
  27. package/lib/base/auto-complete/validation-decorator.js +44 -65
  28. package/lib/base/auto-complete/validation-decorator.js.map +1 -1
  29. package/lib/base/command-stack.d.ts.map +1 -1
  30. package/lib/base/command-stack.js +19 -37
  31. package/lib/base/command-stack.js.map +1 -1
  32. package/lib/base/container-modules.d.ts +40 -0
  33. package/lib/base/container-modules.d.ts.map +1 -0
  34. package/lib/base/container-modules.js +100 -0
  35. package/lib/base/container-modules.js.map +1 -0
  36. package/lib/base/di.config.d.ts +12 -2
  37. package/lib/base/di.config.d.ts.map +1 -1
  38. package/lib/base/di.config.js +43 -27
  39. package/lib/base/di.config.js.map +1 -1
  40. package/lib/base/drag-aware-mouse-listener.d.ts +3 -2
  41. package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -1
  42. package/lib/base/drag-aware-mouse-listener.js +23 -62
  43. package/lib/base/drag-aware-mouse-listener.js.map +1 -1
  44. package/lib/base/{editor-context.d.ts → editor-context-service.d.ts} +18 -22
  45. package/lib/base/editor-context-service.d.ts.map +1 -0
  46. package/lib/base/editor-context-service.js +109 -0
  47. package/lib/base/editor-context-service.js.map +1 -0
  48. package/lib/base/focus-tracker.d.ts +17 -1
  49. package/lib/base/focus-tracker.d.ts.map +1 -1
  50. package/lib/base/focus-tracker.js +19 -39
  51. package/lib/base/focus-tracker.js.map +1 -1
  52. package/lib/base/model/model-registry.js +10 -28
  53. package/lib/base/model/model-registry.js.map +1 -1
  54. package/lib/base/model/update-model-command.d.ts +19 -5
  55. package/lib/base/model/update-model-command.d.ts.map +1 -1
  56. package/lib/base/model/update-model-command.js +69 -94
  57. package/lib/base/model/update-model-command.js.map +1 -1
  58. package/lib/base/model-initialization-constraint.d.ts +16 -1
  59. package/lib/base/model-initialization-constraint.d.ts.map +1 -1
  60. package/lib/base/model-initialization-constraint.js +34 -54
  61. package/lib/base/model-initialization-constraint.js.map +1 -1
  62. package/lib/base/selection-clearing-mouse-listener.js +10 -28
  63. package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
  64. package/lib/base/source-uri-aware.js +2 -5
  65. package/lib/base/source-uri-aware.js.map +1 -1
  66. package/lib/base/tool-manager/glsp-tool-manager.d.ts +1 -1
  67. package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -1
  68. package/lib/base/tool-manager/glsp-tool-manager.js +58 -140
  69. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
  70. package/lib/base/types.d.ts +3 -1
  71. package/lib/base/types.d.ts.map +1 -1
  72. package/lib/base/types.js +4 -2
  73. package/lib/base/types.js.map +1 -1
  74. package/lib/base/view/view-registry.js +10 -28
  75. package/lib/base/view/view-registry.js.map +1 -1
  76. package/lib/features/change-bounds/model.d.ts +3 -1
  77. package/lib/features/change-bounds/model.d.ts.map +1 -1
  78. package/lib/features/change-bounds/model.js +20 -31
  79. package/lib/features/change-bounds/model.js.map +1 -1
  80. package/lib/features/change-bounds/movement-restrictor.d.ts +17 -1
  81. package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
  82. package/lib/features/change-bounds/movement-restrictor.js +28 -42
  83. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  84. package/lib/features/change-bounds/snap.d.ts +17 -1
  85. package/lib/features/change-bounds/snap.d.ts.map +1 -1
  86. package/lib/features/change-bounds/snap.js +13 -39
  87. package/lib/features/change-bounds/snap.js.map +1 -1
  88. package/lib/features/command-palette/command-palette-tool.js +30 -38
  89. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  90. package/lib/features/command-palette/di.config.js +6 -6
  91. package/lib/features/command-palette/di.config.js.map +1 -1
  92. package/lib/features/command-palette/server-command-palette-provider.d.ts +18 -2
  93. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
  94. package/lib/features/command-palette/server-command-palette-provider.js +28 -33
  95. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
  96. package/lib/features/context-menu/delete-element-context-menu.d.ts +1 -1
  97. package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -1
  98. package/lib/features/context-menu/delete-element-context-menu.js +20 -68
  99. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
  100. package/lib/features/context-menu/di.config.d.ts +1 -1
  101. package/lib/features/context-menu/di.config.d.ts.map +1 -1
  102. package/lib/features/context-menu/di.config.js +8 -8
  103. package/lib/features/context-menu/di.config.js.map +1 -1
  104. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +16 -0
  105. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
  106. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +61 -71
  107. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
  108. package/lib/features/context-menu/server-context-menu-provider.d.ts +18 -2
  109. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
  110. package/lib/features/context-menu/server-context-menu-provider.js +30 -31
  111. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
  112. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +22 -2
  113. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
  114. package/lib/features/copy-paste/copy-paste-context-menu.js +99 -72
  115. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
  116. package/lib/features/copy-paste/copy-paste-handler.d.ts +19 -2
  117. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  118. package/lib/features/copy-paste/copy-paste-handler.js +70 -70
  119. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  120. package/lib/features/copy-paste/di.config.d.ts +1 -1
  121. package/lib/features/copy-paste/di.config.d.ts.map +1 -1
  122. package/lib/features/copy-paste/di.config.js +11 -11
  123. package/lib/features/copy-paste/di.config.js.map +1 -1
  124. package/lib/features/decoration/decoration-placer.d.ts +17 -1
  125. package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
  126. package/lib/features/decoration/decoration-placer.js +12 -46
  127. package/lib/features/decoration/decoration-placer.js.map +1 -1
  128. package/lib/features/decoration/di.config.js +4 -4
  129. package/lib/features/decoration/di.config.js.map +1 -1
  130. package/lib/features/edit-label/di.config.js +7 -7
  131. package/lib/features/edit-label/di.config.js.map +1 -1
  132. package/lib/features/edit-label/edit-label-tool.js +20 -43
  133. package/lib/features/edit-label/edit-label-tool.js.map +1 -1
  134. package/lib/features/edit-label/edit-label-validator.d.ts +16 -1
  135. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
  136. package/lib/features/edit-label/edit-label-validator.js +40 -62
  137. package/lib/features/edit-label/edit-label-validator.js.map +1 -1
  138. package/lib/features/hints/di.config.d.ts +0 -15
  139. package/lib/features/hints/di.config.d.ts.map +1 -1
  140. package/lib/features/hints/di.config.js +9 -9
  141. package/lib/features/hints/di.config.js.map +1 -1
  142. package/lib/features/hints/model.d.ts +3 -2
  143. package/lib/features/hints/model.d.ts.map +1 -1
  144. package/lib/features/hints/model.js.map +1 -1
  145. package/lib/features/hints/type-hints.d.ts +17 -45
  146. package/lib/features/hints/type-hints.d.ts.map +1 -1
  147. package/lib/features/hints/type-hints.js +81 -140
  148. package/lib/features/hints/type-hints.js.map +1 -1
  149. package/lib/features/hover/di.config.d.ts +1 -1
  150. package/lib/features/hover/di.config.d.ts.map +1 -1
  151. package/lib/features/hover/di.config.js +11 -9
  152. package/lib/features/hover/di.config.js.map +1 -1
  153. package/lib/features/hover/hover.d.ts +28 -2
  154. package/lib/features/hover/hover.d.ts.map +1 -1
  155. package/lib/features/hover/hover.js +56 -76
  156. package/lib/features/hover/hover.js.map +1 -1
  157. package/lib/features/layout/di.config.d.ts +1 -1
  158. package/lib/features/layout/di.config.d.ts.map +1 -1
  159. package/lib/features/layout/di.config.js +11 -7
  160. package/lib/features/layout/di.config.js.map +1 -1
  161. package/lib/features/layout/freeform-layout.d.ts +16 -0
  162. package/lib/features/layout/freeform-layout.d.ts.map +1 -0
  163. package/lib/features/layout/freeform-layout.js +107 -0
  164. package/lib/features/layout/freeform-layout.js.map +1 -0
  165. package/lib/features/layout/layout-commands.d.ts +19 -3
  166. package/lib/features/layout/layout-commands.d.ts.map +1 -1
  167. package/lib/features/layout/layout-commands.js +189 -265
  168. package/lib/features/layout/layout-commands.js.map +1 -1
  169. package/lib/features/layout/layout-commands.spec.d.ts +0 -15
  170. package/lib/features/layout/layout-commands.spec.d.ts.map +1 -1
  171. package/lib/features/layout/layout-commands.spec.js +95 -89
  172. package/lib/features/layout/layout-commands.spec.js.map +1 -1
  173. package/lib/features/layout/vbox-layout.d.ts +25 -0
  174. package/lib/features/layout/vbox-layout.d.ts.map +1 -0
  175. package/lib/features/layout/vbox-layout.js +188 -0
  176. package/lib/features/layout/vbox-layout.js.map +1 -0
  177. package/lib/features/model-source-watcher/di.config.d.ts +0 -15
  178. package/lib/features/model-source-watcher/di.config.d.ts.map +1 -1
  179. package/lib/features/model-source-watcher/di.config.js +7 -7
  180. package/lib/features/model-source-watcher/di.config.js.map +1 -1
  181. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +17 -2
  182. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
  183. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +38 -46
  184. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
  185. package/lib/features/mouse-tool/di.config.js +5 -5
  186. package/lib/features/mouse-tool/di.config.js.map +1 -1
  187. package/lib/features/mouse-tool/mouse-tool.d.ts +2 -1
  188. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
  189. package/lib/features/mouse-tool/mouse-tool.js +70 -215
  190. package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
  191. package/lib/features/navigation/di.config.d.ts +0 -15
  192. package/lib/features/navigation/di.config.d.ts.map +1 -1
  193. package/lib/features/navigation/di.config.js +11 -10
  194. package/lib/features/navigation/di.config.js.map +1 -1
  195. package/lib/features/navigation/navigation-action-handler.d.ts +19 -38
  196. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
  197. package/lib/features/navigation/navigation-action-handler.js +118 -254
  198. package/lib/features/navigation/navigation-action-handler.js.map +1 -1
  199. package/lib/features/navigation/navigation-target-resolver.d.ts +18 -40
  200. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
  201. package/lib/features/navigation/navigation-target-resolver.js +46 -188
  202. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  203. package/lib/features/navigation/navigation-target-resolver.spec.d.ts +0 -15
  204. package/lib/features/navigation/navigation-target-resolver.spec.d.ts.map +1 -1
  205. package/lib/features/navigation/navigation-target-resolver.spec.js +26 -26
  206. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
  207. package/lib/features/rank/model.d.ts +1 -1
  208. package/lib/features/rank/model.js +2 -2
  209. package/lib/features/rank/model.js.map +1 -1
  210. package/lib/features/reconnect/model.d.ts +1 -1
  211. package/lib/features/reconnect/model.d.ts.map +1 -1
  212. package/lib/features/reconnect/model.js +9 -27
  213. package/lib/features/reconnect/model.js.map +1 -1
  214. package/lib/features/save/di.config.d.ts +1 -1
  215. package/lib/features/save/di.config.d.ts.map +1 -1
  216. package/lib/features/save/di.config.js +6 -6
  217. package/lib/features/save/di.config.js.map +1 -1
  218. package/lib/features/save/{save.d.ts → save-keylistener.d.ts} +4 -10
  219. package/lib/features/save/save-keylistener.d.ts.map +1 -0
  220. package/lib/features/{undo-redo/model.d.ts → save/save-keylistener.js} +16 -12
  221. package/lib/features/save/save-keylistener.js.map +1 -0
  222. package/lib/features/select/di.config.js +11 -11
  223. package/lib/features/select/di.config.js.map +1 -1
  224. package/lib/features/select/select-feedback-action.d.ts.map +1 -1
  225. package/lib/features/select/select-feedback-action.js +45 -71
  226. package/lib/features/select/select-feedback-action.js.map +1 -1
  227. package/lib/features/select/select-mouse-listener.js +7 -23
  228. package/lib/features/select/select-mouse-listener.js.map +1 -1
  229. package/lib/features/select/selection-service.d.ts +17 -1
  230. package/lib/features/select/selection-service.d.ts.map +1 -1
  231. package/lib/features/select/selection-service.js +134 -236
  232. package/lib/features/select/selection-service.js.map +1 -1
  233. package/lib/features/select/selection-service.spec.js +96 -139
  234. package/lib/features/select/selection-service.spec.js.map +1 -1
  235. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +19 -2
  236. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
  237. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +102 -142
  238. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
  239. package/lib/features/tool-feedback/creation-tool-feedback.d.ts +18 -2
  240. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
  241. package/lib/features/tool-feedback/creation-tool-feedback.js +95 -118
  242. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
  243. package/lib/features/tool-feedback/css-feedback.d.ts +20 -2
  244. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
  245. package/lib/features/tool-feedback/css-feedback.js +37 -81
  246. package/lib/features/tool-feedback/css-feedback.js.map +1 -1
  247. package/lib/features/tool-feedback/di.config.d.ts +1 -1
  248. package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
  249. package/lib/features/tool-feedback/di.config.js +27 -27
  250. package/lib/features/tool-feedback/di.config.js.map +1 -1
  251. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +18 -2
  252. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
  253. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +147 -208
  254. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
  255. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +19 -3
  256. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
  257. package/lib/features/tool-feedback/feedback-action-dispatcher.js +35 -72
  258. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
  259. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +17 -1
  260. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
  261. package/lib/features/tool-feedback/marquee-tool-feedback.js +41 -84
  262. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
  263. package/lib/features/tool-feedback/model.d.ts +1 -1
  264. package/lib/features/tool-feedback/model.js +11 -27
  265. package/lib/features/tool-feedback/model.js.map +1 -1
  266. package/lib/features/tool-feedback/view.d.ts +21 -5
  267. package/lib/features/tool-feedback/view.d.ts.map +1 -1
  268. package/lib/features/tool-feedback/view.js +29 -51
  269. package/lib/features/tool-feedback/view.js.map +1 -1
  270. package/lib/features/tool-palette/di.config.d.ts +1 -1
  271. package/lib/features/tool-palette/di.config.d.ts.map +1 -1
  272. package/lib/features/tool-palette/di.config.js +6 -6
  273. package/lib/features/tool-palette/di.config.js.map +1 -1
  274. package/lib/features/tool-palette/palette-item.d.ts +2 -3
  275. package/lib/features/tool-palette/palette-item.d.ts.map +1 -1
  276. package/lib/features/tool-palette/palette-item.js +6 -6
  277. package/lib/features/tool-palette/palette-item.js.map +1 -1
  278. package/lib/features/tool-palette/tool-palette.d.ts +19 -3
  279. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  280. package/lib/features/tool-palette/tool-palette.js +199 -269
  281. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  282. package/lib/features/tools/base-glsp-tool.d.ts +18 -2
  283. package/lib/features/tools/base-glsp-tool.d.ts.map +1 -1
  284. package/lib/features/tools/base-glsp-tool.js +37 -59
  285. package/lib/features/tools/base-glsp-tool.js.map +1 -1
  286. package/lib/features/tools/change-bounds-tool.d.ts +20 -3
  287. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
  288. package/lib/features/tools/change-bounds-tool.js +192 -241
  289. package/lib/features/tools/change-bounds-tool.js.map +1 -1
  290. package/lib/features/tools/delete-tool.d.ts +17 -1
  291. package/lib/features/tools/delete-tool.d.ts.map +1 -1
  292. package/lib/features/tools/delete-tool.js +71 -104
  293. package/lib/features/tools/delete-tool.js.map +1 -1
  294. package/lib/features/tools/di.config.d.ts +0 -15
  295. package/lib/features/tools/di.config.d.ts.map +1 -1
  296. package/lib/features/tools/di.config.js +19 -19
  297. package/lib/features/tools/di.config.js.map +1 -1
  298. package/lib/features/tools/edge-creation-tool.d.ts +17 -2
  299. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
  300. package/lib/features/tools/edge-creation-tool.js +62 -87
  301. package/lib/features/tools/edge-creation-tool.js.map +1 -1
  302. package/lib/features/tools/edge-edit-tool.d.ts +17 -1
  303. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
  304. package/lib/features/tools/edge-edit-tool.js +112 -183
  305. package/lib/features/tools/edge-edit-tool.js.map +1 -1
  306. package/lib/features/tools/marquee-behavior.d.ts +42 -0
  307. package/lib/features/tools/marquee-behavior.d.ts.map +1 -0
  308. package/lib/features/tools/marquee-behavior.js +128 -0
  309. package/lib/features/tools/marquee-behavior.js.map +1 -0
  310. package/{src/features/undo-redo/model.ts → lib/features/tools/marquee-behavior.spec.d.ts} +3 -12
  311. package/lib/features/tools/marquee-behavior.spec.d.ts.map +1 -0
  312. package/lib/features/tools/marquee-behavior.spec.js +165 -0
  313. package/lib/features/tools/marquee-behavior.spec.js.map +1 -0
  314. package/lib/features/tools/marquee-mouse-tool.d.ts +24 -13
  315. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
  316. package/lib/features/tools/marquee-mouse-tool.js +86 -195
  317. package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
  318. package/lib/features/tools/marquee-tool.d.ts +17 -1
  319. package/lib/features/tools/marquee-tool.d.ts.map +1 -1
  320. package/lib/features/tools/marquee-tool.js +32 -73
  321. package/lib/features/tools/marquee-tool.js.map +1 -1
  322. package/lib/features/tools/model.js +4 -22
  323. package/lib/features/tools/model.js.map +1 -1
  324. package/lib/features/tools/node-creation-tool.d.ts +17 -2
  325. package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
  326. package/lib/features/tools/node-creation-tool.js +60 -90
  327. package/lib/features/tools/node-creation-tool.js.map +1 -1
  328. package/lib/features/tools/view.d.ts +1 -1
  329. package/lib/features/tools/view.d.ts.map +1 -1
  330. package/lib/features/tools/view.js +12 -31
  331. package/lib/features/tools/view.js.map +1 -1
  332. package/lib/features/validation/di.config.js +12 -12
  333. package/lib/features/validation/di.config.js.map +1 -1
  334. package/lib/features/validation/issue-marker.d.ts +2 -2
  335. package/lib/features/validation/issue-marker.d.ts.map +1 -1
  336. package/lib/features/validation/issue-marker.js +17 -55
  337. package/lib/features/validation/issue-marker.js.map +1 -1
  338. package/lib/features/validation/marker-navigator.d.ts +17 -1
  339. package/lib/features/validation/marker-navigator.d.ts.map +1 -1
  340. package/lib/features/validation/marker-navigator.js +131 -164
  341. package/lib/features/validation/marker-navigator.js.map +1 -1
  342. package/lib/features/validation/marker-navigator.spec.d.ts +0 -15
  343. package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -1
  344. package/lib/features/validation/marker-navigator.spec.js +83 -77
  345. package/lib/features/validation/marker-navigator.spec.js.map +1 -1
  346. package/lib/features/validation/validate.d.ts +18 -29
  347. package/lib/features/validation/validate.d.ts.map +1 -1
  348. package/lib/features/validation/validate.js +147 -300
  349. package/lib/features/validation/validate.js.map +1 -1
  350. package/lib/features/viewport/di.config.js +10 -10
  351. package/lib/features/viewport/di.config.js.map +1 -1
  352. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +18 -2
  353. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
  354. package/lib/features/viewport/glsp-scroll-mouse-listener.js +16 -47
  355. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
  356. package/lib/index.d.ts +9 -15
  357. package/lib/index.d.ts.map +1 -1
  358. package/lib/index.js +29 -34
  359. package/lib/index.js.map +1 -1
  360. package/lib/lib/model.js +11 -27
  361. package/lib/lib/model.js.map +1 -1
  362. package/lib/model-source/glsp-diagram-server.d.ts +3 -5
  363. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
  364. package/lib/model-source/glsp-diagram-server.js +60 -121
  365. package/lib/model-source/glsp-diagram-server.js.map +1 -1
  366. package/lib/protocol-reexport.d.ts +45 -0
  367. package/lib/protocol-reexport.d.ts.map +1 -0
  368. package/lib/protocol-reexport.js +75 -0
  369. package/lib/protocol-reexport.js.map +1 -0
  370. package/lib/utils/argument-utils.d.ts +3 -3
  371. package/lib/utils/argument-utils.d.ts.map +1 -1
  372. package/lib/utils/argument-utils.js +32 -97
  373. package/lib/utils/argument-utils.js.map +1 -1
  374. package/lib/utils/html-utils.js +2 -2
  375. package/lib/utils/html-utils.js.map +1 -1
  376. package/lib/utils/layout-utils.d.ts +3 -2
  377. package/lib/utils/layout-utils.d.ts.map +1 -1
  378. package/lib/utils/layout-utils.js +5 -5
  379. package/lib/utils/layout-utils.js.map +1 -1
  380. package/lib/utils/marker.d.ts +0 -38
  381. package/lib/utils/marker.d.ts.map +1 -1
  382. package/lib/utils/marker.js +14 -61
  383. package/lib/utils/marker.js.map +1 -1
  384. package/lib/utils/smodel-util.d.ts +4 -4
  385. package/lib/utils/smodel-util.d.ts.map +1 -1
  386. package/lib/utils/smodel-util.js +16 -65
  387. package/lib/utils/smodel-util.js.map +1 -1
  388. package/lib/utils/viewpoint-util.d.ts +3 -2
  389. package/lib/utils/viewpoint-util.d.ts.map +1 -1
  390. package/lib/utils/viewpoint-util.js +15 -30
  391. package/lib/utils/viewpoint-util.js.map +1 -1
  392. package/lib/views/base-view-module.d.ts +0 -15
  393. package/lib/views/base-view-module.d.ts.map +1 -1
  394. package/lib/views/base-view-module.js +28 -28
  395. package/lib/views/base-view-module.js.map +1 -1
  396. package/lib/views/compartments.d.ts +6 -0
  397. package/lib/views/compartments.d.ts.map +1 -0
  398. package/lib/views/compartments.js +43 -0
  399. package/lib/views/compartments.js.map +1 -0
  400. package/lib/views/glsp-edge-view.d.ts +18 -3
  401. package/lib/views/glsp-edge-view.d.ts.map +1 -1
  402. package/lib/views/glsp-edge-view.js +32 -77
  403. package/lib/views/glsp-edge-view.js.map +1 -1
  404. package/lib/views/index.d.ts +1 -1
  405. package/lib/views/index.d.ts.map +1 -1
  406. package/lib/views/index.js +1 -1
  407. package/lib/views/index.js.map +1 -1
  408. package/lib/views/issue-marker-view.d.ts +2 -1
  409. package/lib/views/issue-marker-view.d.ts.map +1 -1
  410. package/lib/views/issue-marker-view.js +36 -50
  411. package/lib/views/issue-marker-view.js.map +1 -1
  412. package/lib/views/rounded-corner-view.d.ts +2 -3
  413. package/lib/views/rounded-corner-view.d.ts.map +1 -1
  414. package/lib/views/rounded-corner-view.js +40 -70
  415. package/lib/views/rounded-corner-view.js.map +1 -1
  416. package/lib/views/rounded-corner.d.ts +2 -1
  417. package/lib/views/rounded-corner.d.ts.map +1 -1
  418. package/lib/views/rounded-corner.js +44 -65
  419. package/lib/views/rounded-corner.js.map +1 -1
  420. package/package.json +12 -19
  421. package/src/base/action-dispatcher.ts +12 -12
  422. package/src/base/actions/focus-change-action.ts +2 -2
  423. package/src/base/{args.ts → argumentable.ts} +2 -3
  424. package/src/base/auto-complete/auto-complete-actions.ts +1 -1
  425. package/src/base/auto-complete/auto-complete-widget.ts +37 -25
  426. package/src/base/auto-complete/validation-decorator.ts +12 -11
  427. package/src/base/command-stack.ts +2 -5
  428. package/src/base/container-modules.ts +112 -0
  429. package/src/base/di.config.ts +33 -18
  430. package/src/base/drag-aware-mouse-listener.ts +3 -4
  431. package/src/base/{editor-context.ts → editor-context-service.ts} +4 -31
  432. package/src/base/focus-tracker.ts +2 -4
  433. package/src/base/model/update-model-command.ts +8 -16
  434. package/src/base/model-initialization-constraint.ts +3 -2
  435. package/src/base/tool-manager/glsp-tool-manager.ts +3 -5
  436. package/src/base/types.ts +4 -2
  437. package/src/features/change-bounds/model.ts +15 -5
  438. package/src/features/change-bounds/movement-restrictor.ts +17 -9
  439. package/src/features/change-bounds/snap.ts +3 -2
  440. package/src/features/command-palette/server-command-palette-provider.ts +11 -9
  441. package/src/features/context-menu/delete-element-context-menu.ts +3 -4
  442. package/src/features/context-menu/di.config.ts +11 -9
  443. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +40 -10
  444. package/src/features/context-menu/server-context-menu-provider.ts +10 -7
  445. package/src/features/copy-paste/copy-paste-context-menu.ts +59 -30
  446. package/src/features/copy-paste/copy-paste-handler.ts +18 -10
  447. package/src/features/copy-paste/di.config.ts +2 -3
  448. package/src/features/decoration/decoration-placer.ts +3 -13
  449. package/src/features/edit-label/edit-label-validator.ts +11 -12
  450. package/src/features/hints/di.config.ts +2 -3
  451. package/src/features/hints/model.ts +4 -3
  452. package/src/features/hints/type-hints.ts +23 -90
  453. package/src/features/hover/di.config.ts +4 -3
  454. package/src/features/hover/hover.ts +26 -7
  455. package/src/features/layout/di.config.ts +8 -4
  456. package/src/features/layout/freeform-layout.ts +133 -0
  457. package/src/features/layout/layout-commands.spec.ts +82 -64
  458. package/src/features/layout/layout-commands.ts +43 -34
  459. package/src/features/layout/vbox-layout.ts +256 -0
  460. package/src/features/model-source-watcher/di.config.ts +3 -4
  461. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +11 -7
  462. package/src/features/mouse-tool/mouse-tool.ts +33 -23
  463. package/src/features/navigation/di.config.ts +4 -10
  464. package/src/features/navigation/navigation-action-handler.ts +33 -69
  465. package/src/features/navigation/navigation-target-resolver.spec.ts +3 -7
  466. package/src/features/navigation/navigation-target-resolver.ts +13 -91
  467. package/src/features/rank/model.ts +2 -2
  468. package/src/features/reconnect/model.ts +2 -3
  469. package/src/features/save/di.config.ts +2 -3
  470. package/src/features/save/{save.ts → save-keylistener.ts} +3 -11
  471. package/src/features/select/select-feedback-action.ts +4 -6
  472. package/src/features/select/selection-service.spec.ts +11 -6
  473. package/src/features/select/selection-service.ts +14 -10
  474. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +26 -20
  475. package/src/features/tool-feedback/creation-tool-feedback.ts +49 -14
  476. package/src/features/tool-feedback/css-feedback.ts +9 -6
  477. package/src/features/tool-feedback/di.config.ts +2 -5
  478. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +19 -18
  479. package/src/features/tool-feedback/feedback-action-dispatcher.ts +8 -9
  480. package/src/features/tool-feedback/marquee-tool-feedback.ts +4 -5
  481. package/src/features/tool-feedback/model.ts +1 -2
  482. package/src/features/tool-feedback/view.tsx +17 -11
  483. package/src/features/tool-palette/di.config.ts +2 -4
  484. package/src/features/tool-palette/palette-item.ts +4 -6
  485. package/src/features/tool-palette/tool-palette.ts +44 -40
  486. package/src/features/tools/base-glsp-tool.ts +4 -4
  487. package/src/features/tools/change-bounds-tool.ts +64 -34
  488. package/src/features/tools/delete-tool.ts +9 -6
  489. package/src/features/tools/di.config.ts +2 -3
  490. package/src/features/tools/edge-creation-tool.ts +5 -10
  491. package/src/features/tools/edge-edit-tool.ts +10 -20
  492. package/src/features/tools/marquee-behavior.spec.ts +175 -0
  493. package/src/features/tools/marquee-behavior.ts +158 -0
  494. package/src/features/tools/marquee-mouse-tool.ts +43 -134
  495. package/src/features/tools/marquee-tool.ts +2 -3
  496. package/src/features/tools/node-creation-tool.ts +4 -11
  497. package/src/features/tools/view.tsx +17 -12
  498. package/src/features/validation/issue-marker.ts +2 -3
  499. package/src/features/validation/marker-navigator.spec.ts +18 -14
  500. package/src/features/validation/marker-navigator.ts +24 -12
  501. package/src/features/validation/validate.ts +7 -40
  502. package/src/features/viewport/glsp-scroll-mouse-listener.ts +3 -12
  503. package/src/index.ts +30 -19
  504. package/src/model-source/glsp-diagram-server.ts +12 -28
  505. package/src/protocol-reexport.ts +64 -0
  506. package/src/utils/argument-utils.ts +14 -11
  507. package/src/utils/layout-utils.ts +13 -7
  508. package/src/utils/marker.ts +2 -26
  509. package/src/utils/smodel-util.ts +15 -11
  510. package/src/utils/viewpoint-util.ts +4 -4
  511. package/src/views/base-view-module.ts +1 -2
  512. package/src/{base/actions/edit-mode-action.ts → views/compartments.tsx} +18 -14
  513. package/src/views/glsp-edge-view.tsx +21 -14
  514. package/src/views/index.ts +1 -1
  515. package/src/views/issue-marker-view.tsx +28 -19
  516. package/src/views/rounded-corner-view.tsx +38 -25
  517. package/src/views/rounded-corner.ts +5 -6
  518. package/lib/base/actions/context-actions.d.ts +0 -36
  519. package/lib/base/actions/context-actions.d.ts.map +0 -1
  520. package/lib/base/actions/context-actions.js +0 -51
  521. package/lib/base/actions/context-actions.js.map +0 -1
  522. package/lib/base/actions/edit-mode-action.d.ts +0 -13
  523. package/lib/base/actions/edit-mode-action.d.ts.map +0 -1
  524. package/lib/base/actions/edit-mode-action.js +0 -56
  525. package/lib/base/actions/edit-mode-action.js.map +0 -1
  526. package/lib/base/actions/edit-validation-actions.d.ts +0 -78
  527. package/lib/base/actions/edit-validation-actions.d.ts.map +0 -1
  528. package/lib/base/actions/edit-validation-actions.js +0 -83
  529. package/lib/base/actions/edit-validation-actions.js.map +0 -1
  530. package/lib/base/actions/protocol-actions.d.ts +0 -41
  531. package/lib/base/actions/protocol-actions.d.ts.map +0 -1
  532. package/lib/base/actions/protocol-actions.js +0 -151
  533. package/lib/base/actions/protocol-actions.js.map +0 -1
  534. package/lib/base/args.d.ts.map +0 -1
  535. package/lib/base/args.js.map +0 -1
  536. package/lib/base/editor-context.d.ts.map +0 -1
  537. package/lib/base/editor-context.js +0 -174
  538. package/lib/base/editor-context.js.map +0 -1
  539. package/lib/base/operations/operation.d.ts +0 -135
  540. package/lib/base/operations/operation.d.ts.map +0 -1
  541. package/lib/base/operations/operation.js +0 -231
  542. package/lib/base/operations/operation.js.map +0 -1
  543. package/lib/features/copy-paste/copy-paste-actions.d.ts +0 -50
  544. package/lib/features/copy-paste/copy-paste-actions.d.ts.map +0 -1
  545. package/lib/features/copy-paste/copy-paste-actions.js +0 -68
  546. package/lib/features/copy-paste/copy-paste-actions.js.map +0 -1
  547. package/lib/features/hints/request-type-hints-action.d.ts +0 -32
  548. package/lib/features/hints/request-type-hints-action.d.ts.map +0 -1
  549. package/lib/features/hints/request-type-hints-action.js +0 -30
  550. package/lib/features/hints/request-type-hints-action.js.map +0 -1
  551. package/lib/features/model-source-watcher/model-source-changed-action.d.ts +0 -24
  552. package/lib/features/model-source-watcher/model-source-changed-action.d.ts.map +0 -1
  553. package/lib/features/model-source-watcher/model-source-changed-action.js +0 -17
  554. package/lib/features/model-source-watcher/model-source-changed-action.js.map +0 -1
  555. package/lib/features/save/save.d.ts.map +0 -1
  556. package/lib/features/save/save.js +0 -62
  557. package/lib/features/save/save.js.map +0 -1
  558. package/lib/features/undo-redo/model.d.ts.map +0 -1
  559. package/lib/features/undo-redo/model.js +0 -22
  560. package/lib/features/undo-redo/model.js.map +0 -1
  561. package/lib/model-source/glsp-server-status.d.ts +0 -30
  562. package/lib/model-source/glsp-server-status.d.ts.map +0 -1
  563. package/lib/model-source/glsp-server-status.js +0 -61
  564. package/lib/model-source/glsp-server-status.js.map +0 -1
  565. package/lib/utils/array-utils.d.ts +0 -28
  566. package/lib/utils/array-utils.d.ts.map +0 -1
  567. package/lib/utils/array-utils.js +0 -61
  568. package/lib/utils/array-utils.js.map +0 -1
  569. package/lib/views/default-types.d.ts +0 -37
  570. package/lib/views/default-types.d.ts.map +0 -1
  571. package/lib/views/default-types.js +0 -47
  572. package/lib/views/default-types.js.map +0 -1
  573. package/src/base/actions/context-actions.ts +0 -43
  574. package/src/base/actions/edit-validation-actions.ts +0 -103
  575. package/src/base/actions/protocol-actions.ts +0 -82
  576. package/src/base/operations/operation.ts +0 -178
  577. package/src/features/copy-paste/copy-paste-actions.ts +0 -60
  578. package/src/features/hints/request-type-hints-action.ts +0 -36
  579. package/src/features/model-source-watcher/model-source-changed-action.ts +0 -26
  580. package/src/model-source/glsp-server-status.ts +0 -38
  581. package/src/utils/array-utils.ts +0 -55
  582. package/src/views/default-types.ts +0 -48
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2020 EclipseSource and others.
2
+ * Copyright (c) 2020-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,96 +13,17 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
+ import {
17
+ isSetResolvedNavigationTargets,
18
+ NavigationTarget,
19
+ ResolveNavigationTargetAction,
20
+ SetResolvedNavigationTargetAction
21
+ } from '@eclipse-glsp/protocol';
16
22
  import { inject, injectable } from 'inversify';
17
- import { Action, generateRequestId, IActionDispatcher, ILogger, RequestAction, ResponseAction, TYPES } from 'sprotty';
18
-
19
- import { Args } from '../../base/args';
20
- import { EditorContextServiceProvider } from '../../base/editor-context';
23
+ import { IActionDispatcher, ILogger, ResponseAction, TYPES } from 'sprotty';
24
+ import { EditorContextServiceProvider } from '../../base/editor-context-service';
21
25
  import { GLSP_TYPES } from '../../base/types';
22
26
 
23
- export interface NavigationTarget {
24
- uri: string;
25
- label?: string;
26
- args?: Args;
27
- }
28
-
29
- export namespace NavigationTarget {
30
-
31
- export const ELEMENT_IDS = 'elementIds';
32
- export const ELEMENT_IDS_SEPARATOR = '&';
33
- export const TEXT_LINE = 'line';
34
- export const TEXT_COLUMN = 'column';
35
-
36
- export function hasArguments(target: NavigationTarget): boolean {
37
- return target.args !== undefined && Object.keys(target.args).length > 0;
38
- }
39
-
40
- export function addArgument(target: NavigationTarget, key: string, value: string | number | boolean): void {
41
- if (target.args === undefined) {
42
- target.args = {};
43
- }
44
- target.args[key] = value;
45
- }
46
-
47
- export function getElementIds(target: NavigationTarget): string[] {
48
- if (target.args === undefined || target.args[NavigationTarget.ELEMENT_IDS] === undefined) {
49
- return [];
50
- }
51
- const elementIdsValue = target.args[NavigationTarget.ELEMENT_IDS].toString();
52
- return elementIdsValue.split(NavigationTarget.ELEMENT_IDS_SEPARATOR);
53
- }
54
-
55
- export function setElementIds(target: NavigationTarget, elementIds: string[]): string {
56
- if (target.args === undefined) {
57
- target.args = {};
58
- }
59
- return target.args[NavigationTarget.ELEMENT_IDS] = elementIds.join(NavigationTarget.ELEMENT_IDS_SEPARATOR);
60
- }
61
-
62
- export function setTextPosition(target: NavigationTarget, position: TextPosition | undefined): void {
63
- if (position) {
64
- if (target.args === undefined) {
65
- target.args = {};
66
- }
67
- target.args[NavigationTarget.TEXT_LINE] = position.line;
68
- target.args[NavigationTarget.TEXT_COLUMN] = position.character;
69
- }
70
- }
71
-
72
- export function getTextPosition(target: NavigationTarget): TextPosition | undefined {
73
- if (target.args === undefined
74
- || target.args[NavigationTarget.TEXT_LINE] === undefined
75
- || target.args[NavigationTarget.TEXT_COLUMN] === undefined) {
76
- return undefined;
77
- }
78
- return {
79
- line: Number(target.args[NavigationTarget.TEXT_LINE]),
80
- character: Number(target.args[NavigationTarget.TEXT_COLUMN])
81
- };
82
- }
83
- }
84
-
85
- export interface TextPosition {
86
- line: number;
87
- character: number;
88
- }
89
-
90
- export class ResolveNavigationTargetAction implements RequestAction<SetResolvedNavigationTargetAction> {
91
- static readonly KIND = 'resolveNavigationTarget';
92
- kind = ResolveNavigationTargetAction.KIND;
93
- constructor(readonly navigationTarget: NavigationTarget, public readonly requestId: string = generateRequestId()) { }
94
- }
95
-
96
- export class SetResolvedNavigationTargetAction implements ResponseAction {
97
- static readonly KIND = 'setResolvedNavigationTarget';
98
- kind = SetResolvedNavigationTargetAction.KIND;
99
- constructor(readonly elementIds: string[] = [], readonly args?: Args, readonly responseId: string = '') { }
100
- }
101
-
102
- export function isSetResolvedNavigationTargets(action: Action): action is SetResolvedNavigationTargetAction {
103
- return action !== undefined && (action.kind === SetResolvedNavigationTargetAction.KIND);
104
- }
105
-
106
27
  /**
107
28
  * Resolves `NavigationTargets` to element ids.
108
29
  *
@@ -111,7 +32,6 @@ export function isSetResolvedNavigationTargets(action: Action): action is SetRes
111
32
  */
112
33
  @injectable()
113
34
  export class NavigationTargetResolver {
114
-
115
35
  @inject(GLSP_TYPES.IEditorContextServiceProvider) protected editorContextService: EditorContextServiceProvider;
116
36
  @inject(TYPES.IActionDispatcher) protected dispatcher: IActionDispatcher;
117
37
  @inject(TYPES.ILogger) protected readonly logger: ILogger;
@@ -122,7 +42,10 @@ export class NavigationTargetResolver {
122
42
  return this.resolveWithSourceUri(sourceUri, navigationTarget);
123
43
  }
124
44
 
125
- async resolveWithSourceUri(sourceUri: string | undefined, target: NavigationTarget): Promise<SetResolvedNavigationTargetAction | undefined> {
45
+ async resolveWithSourceUri(
46
+ sourceUri: string | undefined,
47
+ target: NavigationTarget
48
+ ): Promise<SetResolvedNavigationTargetAction | undefined> {
126
49
  const targetUri = decodeURIComponent(target.uri);
127
50
  if (sourceUri && sourceUri !== targetUri && `file://${sourceUri}` !== targetUri) {
128
51
  // different URI, so we can't resolve it locally
@@ -143,4 +66,3 @@ export class NavigationTargetResolver {
143
66
  return this.dispatcher.request(new ResolveNavigationTargetAction(target));
144
67
  }
145
68
  }
146
-
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -21,7 +21,7 @@ export interface Ranked {
21
21
  }
22
22
 
23
23
  export function isRanked(arg: any): arg is Ranked {
24
- return arg !== undefined && arg.rank !== undefined && typeof (arg.rank) === 'number';
24
+ return arg !== undefined && arg.rank !== undefined && typeof arg.rank === 'number';
25
25
  }
26
26
 
27
27
  export function getRank(arg: any): number {
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -26,8 +26,7 @@ import {
26
26
 
27
27
  export const reconnectFeature = Symbol('reconnectFeature');
28
28
 
29
- export interface Reconnectable extends SModelExtension {
30
- }
29
+ export interface Reconnectable extends SModelExtension {}
31
30
 
32
31
  export function isReconnectable(element: SModelElement): element is SRoutableElement & Reconnectable {
33
32
  return element instanceof SRoutableElement && element.hasFeature(reconnectFeature);
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -16,7 +16,7 @@
16
16
  import { ContainerModule } from 'inversify';
17
17
  import { TYPES } from 'sprotty';
18
18
 
19
- import { SaveModelKeyboardListener } from './save';
19
+ import { SaveModelKeyboardListener } from './save-keylistener';
20
20
 
21
21
  /**
22
22
  * This module is not required the diagram is deployed in Theia with the `GLSPDiagramWidget`
@@ -24,7 +24,6 @@ import { SaveModelKeyboardListener } from './save';
24
24
  */
25
25
  const saveModule = new ContainerModule(bind => {
26
26
  bind(TYPES.KeyListener).to(SaveModelKeyboardListener);
27
-
28
27
  });
29
28
 
30
29
  export default saveModule;
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,18 +13,10 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, KeyListener, SModelRoot } from 'sprotty';
16
+ import { Action, SaveModelAction } from '@eclipse-glsp/protocol';
17
+ import { KeyListener, SModelRoot } from 'sprotty';
17
18
  import { matchesKeystroke } from 'sprotty/lib/utils/keyboard';
18
19
 
19
- export class SaveModelAction implements Action {
20
- static readonly KIND = 'saveModel';
21
- constructor(public readonly fileUri?: string, public readonly kind: string = SaveModelAction.KIND) { }
22
- }
23
-
24
- export function isSaveModelAction(action: Action): action is SaveModelAction {
25
- return action.kind === SaveModelAction.KIND;
26
- }
27
-
28
20
  export class SaveModelKeyboardListener extends KeyListener {
29
21
  keyDown(_element: SModelRoot, event: KeyboardEvent): Action[] {
30
22
  if (matchesKeystroke(event, 'KeyS', 'ctrlCmd')) {
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019-2020 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -27,16 +27,15 @@ export class SelectFeedbackAction {
27
27
  constructor(
28
28
  public readonly selectedElementsIDs: string[] = [],
29
29
  public readonly deselectedElementsIDs: string[] = [],
30
- public readonly kind: string = SelectFeedbackCommand.KIND) {
31
- }
30
+ public readonly kind: string = SelectFeedbackCommand.KIND
31
+ ) {}
32
32
  }
33
33
 
34
34
  export class SelectAllFeedbackAction {
35
35
  /**
36
36
  * If `select` is true, all elements are selected, othewise they are deselected.
37
37
  */
38
- constructor(public readonly select: boolean = true, public readonly kind: string = SelectFeedbackCommand.KIND) {
39
- }
38
+ constructor(public readonly select: boolean = true, public readonly kind: string = SelectFeedbackCommand.KIND) {}
40
39
  }
41
40
 
42
41
  @injectable()
@@ -84,4 +83,3 @@ export class SelectAllFeedbackCommand extends Command {
84
83
  return this.sprottySelectAllCommand.redo(context);
85
84
  }
86
85
  }
87
-
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2020 EclipseSource and others.
2
+ * Copyright (c) 2020-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -14,10 +14,10 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  /* eslint-disable import/no-deprecated,no-unused-expressions */
17
+ import { Action } from '@eclipse-glsp/protocol';
17
18
  import { AssertionError, expect } from 'chai';
18
19
  import { Container, injectable } from 'inversify';
19
- import { Action, defaultModule, SGraphFactory, SModelElementSchema, SModelRoot, TYPES } from 'sprotty';
20
-
20
+ import { defaultModule, SGraphFactory, SModelElementSchema, SModelRoot, TYPES } from 'sprotty';
21
21
  import { GLSP_TYPES } from '../../base/types';
22
22
  import { IFeedbackActionDispatcher, IFeedbackEmitter } from '../tool-feedback/feedback-action-dispatcher';
23
23
  import { SelectFeedbackAction } from './select-feedback-action';
@@ -25,7 +25,7 @@ import { SelectionListener, SelectionService } from './selection-service';
25
25
 
26
26
  @injectable()
27
27
  class MockFeedbackActionDispatcher implements IFeedbackActionDispatcher {
28
- protected feedbackEmitters: Map<IFeedbackEmitter, Action[]> = new Map;
28
+ protected feedbackEmitters: Map<IFeedbackEmitter, Action[]> = new Map();
29
29
 
30
30
  registerFeedback(feedbackEmitter: IFeedbackEmitter, actions: Action[]): void {
31
31
  this.feedbackEmitters.set(feedbackEmitter, actions);
@@ -43,7 +43,7 @@ class MockFeedbackActionDispatcher implements IFeedbackActionDispatcher {
43
43
 
44
44
  getSingleFeedbackAction(): SelectFeedbackAction | undefined {
45
45
  const actions = this.getRegisteredFeedback();
46
- return actions.length === 1 ? actions[0] as SelectFeedbackAction : undefined;
46
+ return actions.length === 1 ? (actions[0] as SelectFeedbackAction) : undefined;
47
47
  }
48
48
  }
49
49
 
@@ -363,7 +363,12 @@ describe('SelectionService', () => {
363
363
  }
364
364
  }
365
365
 
366
- function assertListener(listener: MockSelectionListener, expectedRoot: SModelRoot | undefined, expectedSelection: string[], expectedCalled: number): void {
366
+ function assertListener(
367
+ listener: MockSelectionListener,
368
+ expectedRoot: SModelRoot | undefined,
369
+ expectedSelection: string[],
370
+ expectedCalled: number
371
+ ): void {
367
372
  expect(listener.getRoot()).to.equal(expectedRoot);
368
373
  expect(listener.getSelectedElements()).to.have.lengthOf(expectedSelection.length);
369
374
  expect(listener.getSelectedElements()).to.have.ordered.members(expectedSelection);
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019-2020 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,17 +13,15 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
+ import { Action, distinctAdd, remove, SelectAction, SelectAllAction } from '@eclipse-glsp/protocol';
16
17
  import { inject, injectable, multiInject, optional } from 'inversify';
17
18
  import {
18
- Action,
19
19
  Command,
20
20
  CommandExecutionContext,
21
21
  ILogger,
22
22
  isSelectable,
23
23
  isSelected,
24
24
  SChildElement,
25
- SelectAction,
26
- SelectAllAction,
27
25
  SelectAllCommand as SprottySelectAllCommand,
28
26
  SelectCommand as SprottySelectCommand,
29
27
  SModelElement,
@@ -31,10 +29,8 @@ import {
31
29
  SParentElement,
32
30
  TYPES
33
31
  } from 'sprotty';
34
-
35
32
  import { SModelRootListener } from '../../base/model/update-model-command';
36
33
  import { GLSP_TYPES } from '../../base/types';
37
- import { distinctAdd, remove } from '../../utils/array-utils';
38
34
  import { IFeedbackActionDispatcher } from '../tool-feedback/feedback-action-dispatcher';
39
35
  import { SelectFeedbackAction } from './select-feedback-action';
40
36
 
@@ -50,7 +46,7 @@ export class SelectionService implements SModelRootListener {
50
46
  @inject(GLSP_TYPES.IFeedbackActionDispatcher) protected feedbackDispatcher: IFeedbackActionDispatcher;
51
47
  @inject(TYPES.ILogger) protected logger: ILogger;
52
48
 
53
- constructor(@multiInject(GLSP_TYPES.SelectionListener) @optional() protected selectionListeners: SelectionListener[] = []) { }
49
+ constructor(@multiInject(GLSP_TYPES.SelectionListener) @optional() protected selectionListeners: SelectionListener[] = []) {}
54
50
 
55
51
  register(selectionListener: SelectionListener): void {
56
52
  distinctAdd(this.selectionListeners, selectionListener);
@@ -99,7 +95,9 @@ export class SelectionService implements SModelRootListener {
99
95
  }
100
96
 
101
97
  // only send out changes if there actually are changes, i.e., the root or the selected elements changed
102
- const selectionChanged = prevSelectedElementIDs.size !== this.selectedElementIDs.size || ![...prevSelectedElementIDs].every(value => this.selectedElementIDs.has(value));
98
+ const selectionChanged =
99
+ prevSelectedElementIDs.size !== this.selectedElementIDs.size ||
100
+ ![...prevSelectedElementIDs].every(value => this.selectedElementIDs.has(value));
103
101
  if (selectionChanged) {
104
102
  // aggregate to feedback action handling all elements as only the last feedback is restored
105
103
  this.dispatchFeedback([new SelectFeedbackAction([...this.selectedElementIDs], [...deselectedElementIDs])]);
@@ -156,7 +154,10 @@ export class SelectCommand extends Command {
156
154
  protected selected: SModelElement[] = [];
157
155
  protected deselected: SModelElement[] = [];
158
156
 
159
- constructor(@inject(TYPES.Action) public action: SelectAction, @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService) {
157
+ constructor(
158
+ @inject(TYPES.Action) public action: SelectAction,
159
+ @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService
160
+ ) {
160
161
  super();
161
162
  }
162
163
 
@@ -197,7 +198,10 @@ export class SelectAllCommand extends Command {
197
198
  static readonly KIND = SprottySelectAllCommand.KIND;
198
199
  protected previousSelection: Map<string, boolean> = new Map<string, boolean>();
199
200
 
200
- constructor(@inject(TYPES.Action) public action: SelectAllAction, @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService) {
201
+ constructor(
202
+ @inject(TYPES.Action) public action: SelectAllAction,
203
+ @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService
204
+ ) {
201
205
  super();
202
206
  }
203
207
 
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,10 +13,10 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
+ import { Action, Point } from '@eclipse-glsp/protocol';
16
17
  import { inject, injectable } from 'inversify';
17
- import { VNode } from 'snabbdom/vnode';
18
+ import { VNode } from 'snabbdom';
18
19
  import {
19
- Action,
20
20
  CommandExecutionContext,
21
21
  CommandReturn,
22
22
  ElementMove,
@@ -26,24 +26,24 @@ import {
26
26
  isViewport,
27
27
  MouseListener,
28
28
  MoveAction,
29
- Point,
29
+ SChildElement,
30
30
  SModelElement,
31
31
  SModelRoot,
32
32
  TYPES
33
33
  } from 'sprotty';
34
-
35
34
  import { isNotUndefined } from '../../utils/smodel-util';
36
35
  import { addResizeHandles, isResizable, removeResizeHandles, SResizeHandle } from '../change-bounds/model';
37
36
  import { createMovementRestrictionFeedback, removeMovementRestrictionFeedback } from '../change-bounds/movement-restrictor';
37
+ import { CursorCSS, cursorFeedbackAction } from '../tool-feedback/css-feedback';
38
38
  import { ChangeBoundsTool } from '../tools/change-bounds-tool';
39
39
  import { FeedbackCommand } from './model';
40
40
 
41
41
  export class ShowChangeBoundsToolResizeFeedbackAction implements Action {
42
- constructor(readonly elementId?: string, public readonly kind: string = ShowChangeBoundsToolResizeFeedbackCommand.KIND) { }
42
+ constructor(readonly elementId?: string, public readonly kind: string = ShowChangeBoundsToolResizeFeedbackCommand.KIND) {}
43
43
  }
44
44
 
45
45
  export class HideChangeBoundsToolResizeFeedbackAction implements Action {
46
- constructor(public readonly kind: string = HideChangeBoundsToolResizeFeedbackCommand.KIND) { }
46
+ constructor(public readonly kind: string = HideChangeBoundsToolResizeFeedbackCommand.KIND) {}
47
47
  }
48
48
 
49
49
  @injectable()
@@ -54,10 +54,7 @@ export class ShowChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
54
54
 
55
55
  execute(context: CommandExecutionContext): CommandReturn {
56
56
  const index = context.root.index;
57
- index
58
- .all()
59
- .filter(isResizable)
60
- .forEach(removeResizeHandles);
57
+ index.all().filter(isResizable).forEach(removeResizeHandles);
61
58
 
62
59
  if (isNotUndefined(this.action.elementId)) {
63
60
  const resizeElement = index.getById(this.action.elementId);
@@ -77,10 +74,7 @@ export class HideChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
77
74
 
78
75
  execute(context: CommandExecutionContext): CommandReturn {
79
76
  const index = context.root.index;
80
- index
81
- .all()
82
- .filter(isResizable)
83
- .forEach(removeResizeHandles);
77
+ index.all().filter(isResizable).forEach(removeResizeHandles);
84
78
  return context.root;
85
79
  }
86
80
  }
@@ -126,15 +120,17 @@ export class FeedbackMoveMouseListener extends MouseListener {
126
120
  const moveAction = this.getElementMoves(target, event, false);
127
121
  if (moveAction) {
128
122
  result.push(moveAction);
123
+ result.push(cursorFeedbackAction(CursorCSS.MOVE));
129
124
  }
130
125
  }
131
126
  return result;
132
127
  }
133
128
 
134
129
  protected collectStartPositions(root: SModelRoot): void {
135
- root.index
136
- .all()
137
- .filter(element => isSelectable(element) && element.selected)
130
+ const selectedElements = root.index.all().filter(element => isSelectable(element) && element.selected);
131
+ const elementsSet = new Set(selectedElements);
132
+ selectedElements
133
+ .filter(element => !this.isChildOfSelected(elementsSet, element))
138
134
  .forEach(element => {
139
135
  if (isMoveable(element)) {
140
136
  this.elementId2startPos.set(element.id, element.position);
@@ -142,6 +138,16 @@ export class FeedbackMoveMouseListener extends MouseListener {
142
138
  });
143
139
  }
144
140
 
141
+ protected isChildOfSelected(selectedElements: Set<SModelElement>, element: SModelElement): boolean {
142
+ while (element instanceof SChildElement) {
143
+ element = element.parent;
144
+ if (selectedElements.has(element)) {
145
+ return true;
146
+ }
147
+ }
148
+ return false;
149
+ }
150
+
145
151
  protected getElementMoves(target: SModelElement, event: MouseEvent, isFinished: boolean): MoveAction | undefined {
146
152
  if (!this.startDragPosition) {
147
153
  return undefined;
@@ -214,7 +220,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
214
220
  }
215
221
 
216
222
  mouseEnter(target: SModelElement, event: MouseEvent): Action[] {
217
- if (target instanceof SModelRoot && event.buttons === 0) {
223
+ if (target instanceof SModelRoot && event.buttons === 0 && !this.startDragPosition) {
218
224
  this.mouseUp(target, event);
219
225
  }
220
226
  return [];
@@ -230,7 +236,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
230
236
  if (this.tool.movementRestrictor) {
231
237
  this.tool.deregisterFeedback([removeMovementRestrictionFeedback(target, this.tool.movementRestrictor)], this);
232
238
  }
233
-
239
+ result.push(cursorFeedbackAction(CursorCSS.DEFAULT));
234
240
  }
235
241
  this.hasDragged = false;
236
242
  this.startDragPosition = undefined;
@@ -13,9 +13,9 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
+ import { Action, Point } from '@eclipse-glsp/protocol';
16
17
  import { inject, injectable } from 'inversify';
17
18
  import {
18
- Action,
19
19
  add,
20
20
  AnchorComputerRegistry,
21
21
  center,
@@ -28,7 +28,6 @@ import {
28
28
  isConnectable,
29
29
  MouseListener,
30
30
  MoveAction,
31
- Point,
32
31
  PolylineEdgeRouter,
33
32
  SChildElement,
34
33
  SConnectableElement,
@@ -39,8 +38,7 @@ import {
39
38
  SRoutableElement,
40
39
  TYPES
41
40
  } from 'sprotty';
42
-
43
- import { isRoutable } from '../../utils/smodel-util';
41
+ import { isRoutable, BoundsAwareModelElement } from '../../utils/smodel-util';
44
42
  import { getAbsolutePosition, toAbsoluteBounds, toAbsolutePosition } from '../../utils/viewpoint-util';
45
43
  import { FeedbackCommand } from './model';
46
44
 
@@ -49,7 +47,8 @@ export class DrawFeedbackEdgeAction implements Action {
49
47
  public readonly elementTypeId: string,
50
48
  public readonly sourceId: string,
51
49
  public readonly edgeSchema?: SEdgeSchema,
52
- public readonly kind: string = DrawFeedbackEdgeCommand.KIND) { }
50
+ public readonly kind: string = DrawFeedbackEdgeCommand.KIND
51
+ ) {}
53
52
  }
54
53
 
55
54
  @injectable()
@@ -68,7 +67,7 @@ export class DrawFeedbackEdgeCommand extends FeedbackCommand {
68
67
  }
69
68
 
70
69
  export class RemoveFeedbackEdgeAction implements Action {
71
- constructor(public readonly kind: string = RemoveFeedbackEdgeCommand.KIND) { }
70
+ constructor(public readonly kind: string = RemoveFeedbackEdgeCommand.KIND) {}
72
71
  }
73
72
 
74
73
  @injectable()
@@ -83,10 +82,12 @@ export class RemoveFeedbackEdgeCommand extends FeedbackCommand {
83
82
 
84
83
  export class FeedbackEdgeEnd extends SDanglingAnchor {
85
84
  static readonly TYPE = 'feedback-edge-end';
86
- constructor(readonly sourceId: string,
85
+ constructor(
86
+ readonly sourceId: string,
87
87
  readonly elementTypeId: string,
88
88
  public feedbackEdge: SRoutableElement | undefined = undefined,
89
- public readonly type: string = FeedbackEdgeEnd.TYPE) {
89
+ public readonly type: string = FeedbackEdgeEnd.TYPE
90
+ ) {
90
91
  super();
91
92
  }
92
93
  }
@@ -105,11 +106,12 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
105
106
 
106
107
  const edge = edgeEnd.feedbackEdge;
107
108
  const position = getAbsolutePosition(edgeEnd, event);
108
- const endAtMousePosition = findChildrenAtPosition(target.root, position)
109
- .find(element => isConnectable(element) && element.canConnect(edge, 'target'));
109
+ const endAtMousePosition = findChildrenAtPosition(target.root, position).reverse().find(
110
+ element => isConnectable(element) && element.canConnect(edge, 'target')
111
+ );
110
112
 
111
113
  if (endAtMousePosition instanceof SConnectableElement && edge.source && isBoundsAware(edge.source)) {
112
- const anchor = this.computeAbsoluteAnchor(endAtMousePosition, center(edge.source.bounds));
114
+ const anchor = this.computeAbsoluteAnchor(endAtMousePosition, center(toAbsoluteBounds(edge.source)));
113
115
  if (euclideanDistance(anchor, edgeEnd.position) > 1) {
114
116
  return [new MoveAction([{ elementId: edgeEnd.id, toPosition: anchor }], false)];
115
117
  }
@@ -120,9 +122,10 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
120
122
  return [];
121
123
  }
122
124
 
123
- protected computeAbsoluteAnchor(element: SConnectableElement, referencePoint: Point, offset?: number): Point {
125
+ protected computeAbsoluteAnchor(element: SConnectableElement, absoluteReferencePoint: Point, offset?: number): Point {
126
+ const referencePointInParent = absoluteToParent(element, absoluteReferencePoint);
124
127
  const anchorComputer = this.anchorRegistry.get(PolylineEdgeRouter.KIND, element.anchorKind);
125
- let anchor = anchorComputer.getAnchor(element, referencePoint, offset);
128
+ let anchor = anchorComputer.getAnchor(element, referencePointInParent, offset);
126
129
  // The anchor is computed in the local coordinate system of the element.
127
130
  // If the element is a nested child element we have to add the absolute position of its parent to the anchor.
128
131
  if (element.parent !== element.root) {
@@ -136,6 +139,33 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
136
139
  }
137
140
  }
138
141
 
142
+ /**
143
+ * Convert a point, specified in absolute coordinates, to a point relative
144
+ * to the parent of the specified child element.
145
+ * @param element the child element
146
+ * @param absolutePoint a point in absolute coordinates
147
+ * @returns the equivalent point, relative to the element's parent coordinates
148
+ */
149
+ function absoluteToParent(element: BoundsAwareModelElement & SChildElement, absolutePoint: Point): Point{
150
+ if (isBoundsAware(element.parent)){
151
+ return absoluteToLocal(element.parent, absolutePoint);
152
+ }
153
+ // If the parent is not bounds-aware, assume it's at 0; 0 and proceed
154
+ return absoluteToLocal(element, absolutePoint);
155
+ }
156
+
157
+ /**
158
+ * Convert a point, specified in absolute coordinates, to a point relative
159
+ * to the specified element.
160
+ * @param element the element
161
+ * @param absolutePoint a point in absolute coordinates
162
+ * @returns the equivalent point, relative to the element's coordinates
163
+ */
164
+ function absoluteToLocal(element: BoundsAwareModelElement, absolutePoint: Point): Point {
165
+ const absoluteElementBounds = toAbsoluteBounds(element);
166
+ return {x: absolutePoint.x - absoluteElementBounds.x, y: absolutePoint.y - absoluteElementBounds.y};
167
+ }
168
+
139
169
  export function feedbackEdgeId(root: SModelRoot): string {
140
170
  return root.id + '_feedback_edge';
141
171
  }
@@ -149,7 +179,12 @@ export const defaultFeedbackEdgeSchema: SEdgeSchema = {
149
179
  opacity: 0.3
150
180
  } as SEdgeSchema;
151
181
 
152
- export function drawFeedbackEdge(context: CommandExecutionContext, sourceId: string, elementTypeId: string, feedbackEdgeSchema: SEdgeSchema): void {
182
+ export function drawFeedbackEdge(
183
+ context: CommandExecutionContext,
184
+ sourceId: string,
185
+ elementTypeId: string,
186
+ feedbackEdgeSchema: SEdgeSchema
187
+ ): void {
153
188
  const root = context.root;
154
189
  const sourceChild = root.index.getById(sourceId);
155
190
  if (!sourceChild) {