@eclipse-glsp/client 0.9.0 → 0.10.0-next.17bfb07.173

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 (531) hide show
  1. package/css/glsp-sprotty.css +110 -8
  2. package/lib/base/action-dispatcher.d.ts +4 -3
  3. package/lib/base/action-dispatcher.d.ts.map +1 -1
  4. package/lib/base/action-dispatcher.js +22 -12
  5. package/lib/base/action-dispatcher.js.map +1 -1
  6. package/lib/base/actions/focus-change-action.d.ts +16 -7
  7. package/lib/base/actions/focus-change-action.d.ts.map +1 -1
  8. package/lib/base/actions/focus-change-action.js +31 -12
  9. package/lib/base/actions/focus-change-action.js.map +1 -1
  10. package/lib/base/actions/sprotty-actions.d.ts +7 -0
  11. package/lib/base/actions/sprotty-actions.d.ts.map +1 -0
  12. package/lib/{features/tool-palette/palette-item.js → base/actions/sprotty-actions.js} +4 -20
  13. package/lib/base/actions/sprotty-actions.js.map +1 -0
  14. package/lib/base/auto-complete/auto-complete-actions.d.ts +5 -3
  15. package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -1
  16. package/lib/base/auto-complete/auto-complete-actions.js +24 -5
  17. package/lib/base/auto-complete/auto-complete-actions.js.map +1 -1
  18. package/lib/base/auto-complete/auto-complete-widget.d.ts +9 -2
  19. package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
  20. package/lib/base/auto-complete/auto-complete-widget.js +16 -9
  21. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
  22. package/lib/base/auto-complete/validation-decorator.js +2 -2
  23. package/lib/base/auto-complete/validation-decorator.js.map +1 -1
  24. package/lib/base/command-stack.d.ts.map +1 -1
  25. package/lib/base/command-stack.js +6 -5
  26. package/lib/base/command-stack.js.map +1 -1
  27. package/lib/base/container-modules.d.ts.map +1 -1
  28. package/lib/base/container-modules.js +2 -1
  29. package/lib/base/container-modules.js.map +1 -1
  30. package/lib/base/di.config.d.ts +1 -1
  31. package/lib/base/di.config.d.ts.map +1 -1
  32. package/lib/base/di.config.js +13 -14
  33. package/lib/base/di.config.js.map +1 -1
  34. package/lib/base/drag-aware-mouse-listener.d.ts +1 -1
  35. package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -1
  36. package/lib/base/drag-aware-mouse-listener.js.map +1 -1
  37. package/lib/base/editor-context-service.d.ts +18 -5
  38. package/lib/base/editor-context-service.d.ts.map +1 -1
  39. package/lib/base/editor-context-service.js +39 -22
  40. package/lib/base/editor-context-service.js.map +1 -1
  41. package/lib/base/focus-tracker.d.ts +1 -1
  42. package/lib/base/focus-tracker.d.ts.map +1 -1
  43. package/lib/base/focus-tracker.js +4 -4
  44. package/lib/base/focus-tracker.js.map +1 -1
  45. package/lib/base/model/model-registry.d.ts.map +1 -1
  46. package/lib/base/model/model-registry.js +2 -2
  47. package/lib/base/model/model-registry.js.map +1 -1
  48. package/lib/base/model/update-model-command.d.ts +1 -1
  49. package/lib/base/model/update-model-command.d.ts.map +1 -1
  50. package/lib/base/model/update-model-command.js +15 -15
  51. package/lib/base/model/update-model-command.js.map +1 -1
  52. package/lib/base/model-initialization-constraint.d.ts +4 -5
  53. package/lib/base/model-initialization-constraint.d.ts.map +1 -1
  54. package/lib/base/model-initialization-constraint.js +11 -13
  55. package/lib/base/model-initialization-constraint.js.map +1 -1
  56. package/lib/base/selection-clearing-mouse-listener.d.ts.map +1 -1
  57. package/lib/base/selection-clearing-mouse-listener.js +1 -1
  58. package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
  59. package/lib/base/source-uri-aware.d.ts +2 -17
  60. package/lib/base/source-uri-aware.d.ts.map +1 -1
  61. package/lib/base/source-uri-aware.js +4 -6
  62. package/lib/base/source-uri-aware.js.map +1 -1
  63. package/lib/base/tool-manager/glsp-tool-manager.d.ts +1 -1
  64. package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -1
  65. package/lib/base/tool-manager/glsp-tool-manager.js +10 -10
  66. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
  67. package/lib/base/tool-manager/tool-actions.d.ts +14 -0
  68. package/lib/base/tool-manager/tool-actions.d.ts.map +1 -0
  69. package/lib/base/tool-manager/tool-actions.js +25 -0
  70. package/lib/base/tool-manager/tool-actions.js.map +1 -0
  71. package/lib/base/types.d.ts +144 -20
  72. package/lib/base/types.d.ts.map +1 -1
  73. package/lib/base/types.js +14 -26
  74. package/lib/base/types.js.map +1 -1
  75. package/lib/base/view/view-registry.d.ts.map +1 -1
  76. package/lib/base/view/view-registry.js +2 -2
  77. package/lib/base/view/view-registry.js.map +1 -1
  78. package/lib/features/change-bounds/model.d.ts +1 -1
  79. package/lib/features/change-bounds/model.d.ts.map +1 -1
  80. package/lib/features/change-bounds/model.js +3 -3
  81. package/lib/features/change-bounds/model.js.map +1 -1
  82. package/lib/features/change-bounds/movement-restrictor.d.ts +37 -7
  83. package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
  84. package/lib/features/change-bounds/movement-restrictor.js +55 -40
  85. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  86. package/lib/features/change-bounds/snap.d.ts +42 -2
  87. package/lib/features/change-bounds/snap.d.ts.map +1 -1
  88. package/lib/features/change-bounds/snap.js +78 -2
  89. package/lib/features/change-bounds/snap.js.map +1 -1
  90. package/lib/features/change-bounds/snap.spec.d.ts +17 -0
  91. package/lib/features/change-bounds/snap.spec.d.ts.map +1 -0
  92. package/lib/features/change-bounds/snap.spec.js +82 -0
  93. package/lib/features/change-bounds/snap.spec.js.map +1 -0
  94. package/lib/features/command-palette/command-palette-tool.js +3 -3
  95. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  96. package/lib/features/command-palette/di.config.d.ts +2 -2
  97. package/lib/features/command-palette/di.config.d.ts.map +1 -1
  98. package/lib/features/command-palette/di.config.js +6 -6
  99. package/lib/features/command-palette/di.config.js.map +1 -1
  100. package/lib/features/command-palette/server-command-palette-provider.d.ts +1 -1
  101. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
  102. package/lib/features/command-palette/server-command-palette-provider.js +13 -10
  103. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
  104. package/lib/features/context-menu/delete-element-context-menu.d.ts +17 -1
  105. package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -1
  106. package/lib/features/context-menu/delete-element-context-menu.js +4 -4
  107. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
  108. package/lib/features/context-menu/di.config.d.ts +1 -1
  109. package/lib/features/context-menu/di.config.d.ts.map +1 -1
  110. package/lib/features/context-menu/di.config.js +8 -7
  111. package/lib/features/context-menu/di.config.js.map +1 -1
  112. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +33 -1
  113. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
  114. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +41 -28
  115. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
  116. package/lib/features/context-menu/server-context-menu-provider.d.ts +1 -1
  117. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
  118. package/lib/features/context-menu/server-context-menu-provider.js +8 -7
  119. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
  120. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +12 -15
  121. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
  122. package/lib/features/copy-paste/copy-paste-context-menu.js +26 -33
  123. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
  124. package/lib/features/copy-paste/copy-paste-handler.d.ts +1 -1
  125. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  126. package/lib/features/copy-paste/copy-paste-handler.js +10 -11
  127. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  128. package/lib/features/copy-paste/di.config.d.ts +1 -1
  129. package/lib/features/copy-paste/di.config.d.ts.map +1 -1
  130. package/lib/features/copy-paste/di.config.js +5 -7
  131. package/lib/features/copy-paste/di.config.js.map +1 -1
  132. package/lib/features/decoration/decoration-placer.d.ts +1 -1
  133. package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
  134. package/lib/features/decoration/decoration-placer.js +19 -3
  135. package/lib/features/decoration/decoration-placer.js.map +1 -1
  136. package/lib/features/decoration/di.config.d.ts +2 -2
  137. package/lib/features/decoration/di.config.d.ts.map +1 -1
  138. package/lib/features/decoration/di.config.js +4 -4
  139. package/lib/features/decoration/di.config.js.map +1 -1
  140. package/lib/features/edit-label/di.config.d.ts +1 -1
  141. package/lib/features/edit-label/di.config.d.ts.map +1 -1
  142. package/lib/features/edit-label/di.config.js +5 -5
  143. package/lib/features/edit-label/di.config.js.map +1 -1
  144. package/lib/features/edit-label/edit-label-tool.d.ts.map +1 -1
  145. package/lib/features/edit-label/edit-label-tool.js +2 -2
  146. package/lib/features/edit-label/edit-label-tool.js.map +1 -1
  147. package/lib/features/edit-label/edit-label-validator.d.ts +4 -6
  148. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
  149. package/lib/features/edit-label/edit-label-validator.js +11 -13
  150. package/lib/features/edit-label/edit-label-validator.js.map +1 -1
  151. package/lib/features/hints/di.config.js +4 -4
  152. package/lib/features/hints/di.config.js.map +1 -1
  153. package/lib/features/hints/type-hints.d.ts +15 -5
  154. package/lib/features/hints/type-hints.d.ts.map +1 -1
  155. package/lib/features/hints/type-hints.js +29 -26
  156. package/lib/features/hints/type-hints.js.map +1 -1
  157. package/lib/features/hover/di.config.d.ts +1 -1
  158. package/lib/features/hover/di.config.d.ts.map +1 -1
  159. package/lib/features/hover/di.config.js +14 -10
  160. package/lib/features/hover/di.config.js.map +1 -1
  161. package/lib/features/hover/hover.d.ts +16 -4
  162. package/lib/features/hover/hover.d.ts.map +1 -1
  163. package/lib/features/hover/hover.js +42 -4
  164. package/lib/features/hover/hover.js.map +1 -1
  165. package/lib/features/layout/di.config.d.ts +3 -3
  166. package/lib/features/layout/di.config.d.ts.map +1 -1
  167. package/lib/features/layout/di.config.js +11 -7
  168. package/lib/features/layout/di.config.js.map +1 -1
  169. package/lib/features/layout/freeform-layout.d.ts +17 -1
  170. package/lib/features/layout/freeform-layout.d.ts.map +1 -1
  171. package/lib/features/layout/freeform-layout.js +4 -4
  172. package/lib/features/layout/freeform-layout.js.map +1 -1
  173. package/lib/features/layout/hbox-layout.d.ts +41 -0
  174. package/lib/features/layout/hbox-layout.d.ts.map +1 -0
  175. package/lib/features/layout/hbox-layout.js +189 -0
  176. package/lib/features/layout/hbox-layout.js.map +1 -0
  177. package/lib/features/layout/layout-elements-action.d.ts +198 -0
  178. package/lib/features/layout/layout-elements-action.d.ts.map +1 -0
  179. package/lib/features/layout/layout-elements-action.js +391 -0
  180. package/lib/features/layout/layout-elements-action.js.map +1 -0
  181. package/lib/features/layout/layout-elements-action.spec.d.ts +3 -0
  182. package/lib/features/layout/layout-elements-action.spec.d.ts.map +1 -0
  183. package/lib/features/layout/{layout-commands.spec.js → layout-elements-action.spec.js} +81 -62
  184. package/lib/features/layout/layout-elements-action.spec.js.map +1 -0
  185. package/lib/features/layout/vbox-layout.d.ts +17 -1
  186. package/lib/features/layout/vbox-layout.d.ts.map +1 -1
  187. package/lib/features/layout/vbox-layout.js +9 -8
  188. package/lib/features/layout/vbox-layout.js.map +1 -1
  189. package/lib/features/model-source-watcher/di.config.js +1 -1
  190. package/lib/features/model-source-watcher/di.config.js.map +1 -1
  191. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +1 -1
  192. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
  193. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +11 -11
  194. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
  195. package/lib/features/mouse-tool/di.config.d.ts +1 -1
  196. package/lib/features/mouse-tool/di.config.d.ts.map +1 -1
  197. package/lib/features/mouse-tool/di.config.js +2 -2
  198. package/lib/features/mouse-tool/di.config.js.map +1 -1
  199. package/lib/features/mouse-tool/mouse-tool.d.ts +9 -5
  200. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
  201. package/lib/features/mouse-tool/mouse-tool.js +11 -53
  202. package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
  203. package/lib/features/navigation/di.config.js +4 -4
  204. package/lib/features/navigation/di.config.js.map +1 -1
  205. package/lib/features/navigation/navigation-action-handler.d.ts +31 -16
  206. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
  207. package/lib/features/navigation/navigation-action-handler.js +52 -68
  208. package/lib/features/navigation/navigation-action-handler.js.map +1 -1
  209. package/lib/features/navigation/navigation-target-resolver.d.ts +3 -3
  210. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
  211. package/lib/features/navigation/navigation-target-resolver.js +9 -10
  212. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  213. package/lib/features/navigation/navigation-target-resolver.spec.js +12 -12
  214. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
  215. package/lib/features/reconnect/model.d.ts +1 -1
  216. package/lib/features/reconnect/model.d.ts.map +1 -1
  217. package/lib/features/reconnect/model.js +1 -1
  218. package/lib/features/reconnect/model.js.map +1 -1
  219. package/lib/features/save/di.config.d.ts +1 -1
  220. package/lib/features/save/di.config.d.ts.map +1 -1
  221. package/lib/features/save/di.config.js +3 -3
  222. package/lib/features/save/di.config.js.map +1 -1
  223. package/lib/features/save/save-keylistener.d.ts +1 -1
  224. package/lib/features/save/save-keylistener.d.ts.map +1 -1
  225. package/lib/features/save/save-keylistener.js +3 -3
  226. package/lib/features/save/save-keylistener.js.map +1 -1
  227. package/lib/features/select/di.config.d.ts +1 -1
  228. package/lib/features/select/di.config.d.ts.map +1 -1
  229. package/lib/features/select/di.config.js +7 -8
  230. package/lib/features/select/di.config.js.map +1 -1
  231. package/lib/features/select/select-feedback-action.d.ts +26 -22
  232. package/lib/features/select/select-feedback-action.d.ts.map +1 -1
  233. package/lib/features/select/select-feedback-action.js +19 -46
  234. package/lib/features/select/select-feedback-action.js.map +1 -1
  235. package/lib/features/select/select-mouse-listener.d.ts +1 -1
  236. package/lib/features/select/select-mouse-listener.d.ts.map +1 -1
  237. package/lib/features/select/select-mouse-listener.js +1 -1
  238. package/lib/features/select/select-mouse-listener.js.map +1 -1
  239. package/lib/features/select/selection-service.d.ts +14 -5
  240. package/lib/features/select/selection-service.d.ts.map +1 -1
  241. package/lib/features/select/selection-service.js +55 -64
  242. package/lib/features/select/selection-service.js.map +1 -1
  243. package/lib/features/select/selection-service.spec.js +28 -25
  244. package/lib/features/select/selection-service.spec.js.map +1 -1
  245. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +17 -9
  246. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
  247. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +68 -38
  248. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
  249. package/lib/features/tool-feedback/creation-tool-feedback.d.ts +24 -12
  250. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
  251. package/lib/features/tool-feedback/creation-tool-feedback.js +88 -35
  252. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
  253. package/lib/features/tool-feedback/css-feedback.d.ts +17 -10
  254. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
  255. package/lib/features/tool-feedback/css-feedback.js +42 -38
  256. package/lib/features/tool-feedback/css-feedback.js.map +1 -1
  257. package/lib/features/tool-feedback/di.config.d.ts +1 -1
  258. package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
  259. package/lib/features/tool-feedback/di.config.js +18 -18
  260. package/lib/features/tool-feedback/di.config.js.map +1 -1
  261. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +45 -22
  262. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
  263. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +147 -114
  264. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
  265. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +2 -2
  266. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
  267. package/lib/features/tool-feedback/feedback-action-dispatcher.js +4 -4
  268. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
  269. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +21 -10
  270. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
  271. package/lib/features/tool-feedback/marquee-tool-feedback.js +44 -18
  272. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
  273. package/lib/features/tool-feedback/model.d.ts +1 -2
  274. package/lib/features/tool-feedback/model.d.ts.map +1 -1
  275. package/lib/features/tool-feedback/model.js +1 -1
  276. package/lib/features/tool-feedback/model.js.map +1 -1
  277. package/lib/features/tool-feedback/view.d.ts +1 -1
  278. package/lib/features/tool-feedback/view.d.ts.map +1 -1
  279. package/lib/features/tool-feedback/view.js +22 -5
  280. package/lib/features/tool-feedback/view.js.map +1 -1
  281. package/lib/features/tool-palette/di.config.d.ts +1 -1
  282. package/lib/features/tool-palette/di.config.d.ts.map +1 -1
  283. package/lib/features/tool-palette/di.config.js +5 -4
  284. package/lib/features/tool-palette/di.config.js.map +1 -1
  285. package/lib/features/tool-palette/tool-palette.d.ts +10 -7
  286. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  287. package/lib/features/tool-palette/tool-palette.js +39 -32
  288. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  289. package/lib/features/tools/base-glsp-tool.d.ts +3 -3
  290. package/lib/features/tools/base-glsp-tool.d.ts.map +1 -1
  291. package/lib/features/tools/base-glsp-tool.js +11 -11
  292. package/lib/features/tools/base-glsp-tool.js.map +1 -1
  293. package/lib/features/tools/change-bounds-tool.d.ts +7 -9
  294. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
  295. package/lib/features/tools/change-bounds-tool.js +48 -71
  296. package/lib/features/tools/change-bounds-tool.js.map +1 -1
  297. package/lib/features/tools/delete-tool.d.ts +1 -1
  298. package/lib/features/tools/delete-tool.d.ts.map +1 -1
  299. package/lib/features/tools/delete-tool.js +17 -17
  300. package/lib/features/tools/delete-tool.js.map +1 -1
  301. package/lib/features/tools/di.config.d.ts +9 -2
  302. package/lib/features/tools/di.config.d.ts.map +1 -1
  303. package/lib/features/tools/di.config.js +26 -15
  304. package/lib/features/tools/di.config.js.map +1 -1
  305. package/lib/features/tools/edge-creation-tool.d.ts +1 -1
  306. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
  307. package/lib/features/tools/edge-creation-tool.js +28 -21
  308. package/lib/features/tools/edge-creation-tool.js.map +1 -1
  309. package/lib/features/tools/edge-edit-tool.d.ts +3 -2
  310. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
  311. package/lib/features/tools/edge-edit-tool.js +41 -36
  312. package/lib/features/tools/edge-edit-tool.js.map +1 -1
  313. package/lib/features/{tool-palette/palette-item.d.ts → tools/enable-default-tools-on-focus-loss.d.ts} +11 -11
  314. package/lib/features/tools/enable-default-tools-on-focus-loss.d.ts.map +1 -0
  315. package/lib/features/tools/enable-default-tools-on-focus-loss.js +29 -0
  316. package/lib/features/tools/enable-default-tools-on-focus-loss.js.map +1 -0
  317. package/lib/features/tools/marquee-behavior.d.ts +1 -1
  318. package/lib/features/tools/marquee-behavior.js +2 -2
  319. package/lib/features/tools/marquee-behavior.js.map +1 -1
  320. package/lib/features/tools/marquee-behavior.spec.js +63 -63
  321. package/lib/features/tools/marquee-behavior.spec.js.map +1 -1
  322. package/lib/features/tools/marquee-mouse-tool.d.ts +1 -1
  323. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
  324. package/lib/features/tools/marquee-mouse-tool.js +20 -20
  325. package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
  326. package/lib/features/tools/marquee-tool.d.ts +1 -1
  327. package/lib/features/tools/marquee-tool.d.ts.map +1 -1
  328. package/lib/features/tools/marquee-tool.js +4 -4
  329. package/lib/features/tools/marquee-tool.js.map +1 -1
  330. package/lib/features/tools/model.d.ts +3 -2
  331. package/lib/features/tools/model.d.ts.map +1 -1
  332. package/lib/features/tools/model.js +0 -15
  333. package/lib/features/tools/model.js.map +1 -1
  334. package/lib/features/tools/node-creation-tool.d.ts +1 -1
  335. package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
  336. package/lib/features/tools/node-creation-tool.js +17 -17
  337. package/lib/features/tools/node-creation-tool.js.map +1 -1
  338. package/lib/features/tools/view.d.ts.map +1 -1
  339. package/lib/features/tools/view.js +2 -2
  340. package/lib/features/tools/view.js.map +1 -1
  341. package/lib/features/validation/di.config.d.ts +0 -15
  342. package/lib/features/validation/di.config.d.ts.map +1 -1
  343. package/lib/features/validation/di.config.js +9 -7
  344. package/lib/features/validation/di.config.js.map +1 -1
  345. package/lib/features/validation/marker-navigator.d.ts +27 -25
  346. package/lib/features/validation/marker-navigator.d.ts.map +1 -1
  347. package/lib/features/validation/marker-navigator.js +64 -91
  348. package/lib/features/validation/marker-navigator.js.map +1 -1
  349. package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -1
  350. package/lib/features/validation/marker-navigator.spec.js +23 -37
  351. package/lib/features/validation/marker-navigator.spec.js.map +1 -1
  352. package/lib/features/validation/validate.d.ts +16 -30
  353. package/lib/features/validation/validate.d.ts.map +1 -1
  354. package/lib/features/validation/validate.js +61 -92
  355. package/lib/features/validation/validate.js.map +1 -1
  356. package/lib/features/viewport/di.config.d.ts +1 -1
  357. package/lib/features/viewport/di.config.d.ts.map +1 -1
  358. package/lib/features/viewport/di.config.js +7 -7
  359. package/lib/features/viewport/di.config.js.map +1 -1
  360. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +1 -1
  361. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
  362. package/lib/features/viewport/glsp-scroll-mouse-listener.js +3 -3
  363. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
  364. package/lib/index.d.ts +8 -9
  365. package/lib/index.d.ts.map +1 -1
  366. package/lib/index.js +15 -11
  367. package/lib/index.js.map +1 -1
  368. package/lib/lib/model.d.ts +3 -2
  369. package/lib/lib/model.d.ts.map +1 -1
  370. package/lib/lib/model.js +3 -18
  371. package/lib/lib/model.js.map +1 -1
  372. package/lib/model-source/glsp-diagram-server.d.ts +6 -6
  373. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
  374. package/lib/model-source/glsp-diagram-server.js +8 -7
  375. package/lib/model-source/glsp-diagram-server.js.map +1 -1
  376. package/lib/sprotty-reexport.d.ts +174 -0
  377. package/lib/sprotty-reexport.d.ts.map +1 -0
  378. package/lib/sprotty-reexport.js +299 -0
  379. package/lib/sprotty-reexport.js.map +1 -0
  380. package/lib/utils/argument-utils.js +5 -5
  381. package/lib/utils/argument-utils.js.map +1 -1
  382. package/lib/utils/layout-utils.d.ts +6 -22
  383. package/lib/utils/layout-utils.d.ts.map +1 -1
  384. package/lib/utils/layout-utils.js +1 -1
  385. package/lib/utils/layout-utils.js.map +1 -1
  386. package/lib/utils/smodel-util.d.ts +117 -11
  387. package/lib/utils/smodel-util.d.ts.map +1 -1
  388. package/lib/utils/smodel-util.js +142 -37
  389. package/lib/utils/smodel-util.js.map +1 -1
  390. package/lib/utils/viewpoint-util.d.ts +3 -3
  391. package/lib/utils/viewpoint-util.d.ts.map +1 -1
  392. package/lib/utils/viewpoint-util.js +19 -3
  393. package/lib/utils/viewpoint-util.js.map +1 -1
  394. package/lib/views/base-view-module.d.ts.map +1 -1
  395. package/lib/views/base-view-module.js +21 -19
  396. package/lib/views/base-view-module.js.map +1 -1
  397. package/lib/views/compartments.js +2 -2
  398. package/lib/views/compartments.js.map +1 -1
  399. package/lib/views/glsp-edge-view.d.ts +1 -1
  400. package/lib/views/glsp-edge-view.d.ts.map +1 -1
  401. package/lib/views/glsp-edge-view.js +1 -1
  402. package/lib/views/glsp-edge-view.js.map +1 -1
  403. package/lib/views/index.js +6 -2
  404. package/lib/views/index.js.map +1 -1
  405. package/lib/views/issue-marker-view.d.ts.map +1 -1
  406. package/lib/views/issue-marker-view.js +3 -3
  407. package/lib/views/issue-marker-view.js.map +1 -1
  408. package/lib/views/rounded-corner-view.d.ts.map +1 -1
  409. package/lib/views/rounded-corner-view.js +2 -2
  410. package/lib/views/rounded-corner-view.js.map +1 -1
  411. package/package.json +8 -18
  412. package/src/base/action-dispatcher.ts +26 -16
  413. package/src/base/actions/focus-change-action.ts +25 -8
  414. package/src/base/actions/sprotty-actions.ts +26 -0
  415. package/src/base/auto-complete/auto-complete-actions.ts +7 -5
  416. package/src/base/auto-complete/auto-complete-widget.ts +15 -13
  417. package/src/base/command-stack.ts +7 -6
  418. package/src/base/container-modules.ts +4 -3
  419. package/src/base/di.config.ts +4 -5
  420. package/src/base/drag-aware-mouse-listener.ts +4 -4
  421. package/src/base/editor-context-service.ts +38 -16
  422. package/src/base/focus-tracker.ts +5 -4
  423. package/src/base/model/model-registry.ts +2 -2
  424. package/src/base/model/update-model-command.ts +9 -10
  425. package/src/base/model-initialization-constraint.ts +9 -11
  426. package/src/base/selection-clearing-mouse-listener.ts +1 -1
  427. package/src/base/source-uri-aware.ts +5 -4
  428. package/src/base/tool-manager/glsp-tool-manager.ts +9 -9
  429. package/src/base/tool-manager/tool-actions.ts +37 -0
  430. package/src/base/types.ts +31 -24
  431. package/src/base/view/view-registry.ts +2 -2
  432. package/src/features/change-bounds/model.ts +5 -5
  433. package/src/features/change-bounds/movement-restrictor.ts +74 -44
  434. package/src/features/change-bounds/snap.spec.ts +89 -0
  435. package/src/features/change-bounds/snap.ts +86 -3
  436. package/src/features/command-palette/di.config.ts +5 -7
  437. package/src/features/command-palette/server-command-palette-provider.ts +9 -8
  438. package/src/features/context-menu/delete-element-context-menu.ts +6 -6
  439. package/src/features/context-menu/di.config.ts +3 -2
  440. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +45 -17
  441. package/src/features/context-menu/server-context-menu-provider.ts +7 -6
  442. package/src/features/copy-paste/copy-paste-context-menu.ts +30 -23
  443. package/src/features/copy-paste/copy-paste-handler.ts +6 -6
  444. package/src/features/copy-paste/di.config.ts +7 -15
  445. package/src/features/decoration/decoration-placer.ts +4 -4
  446. package/src/features/decoration/di.config.ts +3 -5
  447. package/src/features/edit-label/di.config.ts +4 -5
  448. package/src/features/edit-label/edit-label-tool.ts +1 -2
  449. package/src/features/edit-label/edit-label-validator.ts +6 -10
  450. package/src/features/hints/di.config.ts +3 -3
  451. package/src/features/hints/type-hints.ts +33 -18
  452. package/src/features/hover/di.config.ts +8 -2
  453. package/src/features/hover/hover.ts +53 -11
  454. package/src/features/layout/di.config.ts +11 -7
  455. package/src/features/layout/freeform-layout.ts +6 -15
  456. package/src/features/layout/hbox-layout.ts +256 -0
  457. package/src/features/layout/{layout-commands.spec.ts → layout-elements-action.spec.ts} +89 -65
  458. package/src/features/layout/layout-elements-action.ts +486 -0
  459. package/src/features/layout/vbox-layout.ts +20 -20
  460. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +7 -12
  461. package/src/features/mouse-tool/di.config.ts +3 -4
  462. package/src/features/mouse-tool/mouse-tool.ts +18 -59
  463. package/src/features/navigation/navigation-action-handler.ts +76 -42
  464. package/src/features/navigation/navigation-target-resolver.spec.ts +3 -3
  465. package/src/features/navigation/navigation-target-resolver.ts +9 -14
  466. package/src/features/reconnect/model.ts +2 -2
  467. package/src/features/save/di.config.ts +2 -3
  468. package/src/features/save/save-keylistener.ts +3 -3
  469. package/src/features/select/di.config.ts +6 -8
  470. package/src/features/select/select-feedback-action.ts +18 -46
  471. package/src/features/select/select-mouse-listener.ts +1 -2
  472. package/src/features/select/selection-service.spec.ts +12 -9
  473. package/src/features/select/selection-service.ts +52 -60
  474. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +52 -22
  475. package/src/features/tool-feedback/creation-tool-feedback.ts +79 -30
  476. package/src/features/tool-feedback/css-feedback.ts +40 -37
  477. package/src/features/tool-feedback/di.config.ts +4 -5
  478. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +140 -88
  479. package/src/features/tool-feedback/feedback-action-dispatcher.ts +4 -3
  480. package/src/features/tool-feedback/marquee-tool-feedback.ts +38 -13
  481. package/src/features/tool-feedback/model.ts +1 -3
  482. package/src/features/tool-feedback/view.tsx +3 -3
  483. package/src/features/tool-palette/di.config.ts +3 -2
  484. package/src/features/tool-palette/tool-palette.ts +35 -19
  485. package/src/features/tools/base-glsp-tool.ts +11 -11
  486. package/src/features/tools/change-bounds-tool.ts +37 -67
  487. package/src/features/tools/delete-tool.ts +9 -9
  488. package/src/features/tools/di.config.ts +23 -12
  489. package/src/features/tools/edge-creation-tool.ts +21 -12
  490. package/src/features/tools/edge-edit-tool.ts +25 -21
  491. package/src/features/tools/enable-default-tools-on-focus-loss.ts +33 -0
  492. package/src/features/tools/marquee-behavior.ts +2 -2
  493. package/src/features/tools/marquee-mouse-tool.ts +13 -14
  494. package/src/features/tools/marquee-tool.ts +3 -3
  495. package/src/features/tools/model.ts +4 -3
  496. package/src/features/tools/node-creation-tool.ts +8 -8
  497. package/src/features/tools/view.tsx +2 -3
  498. package/src/features/validation/di.config.ts +13 -11
  499. package/src/features/validation/marker-navigator.spec.ts +4 -2
  500. package/src/features/validation/marker-navigator.ts +67 -82
  501. package/src/features/validation/validate.ts +57 -91
  502. package/src/features/viewport/di.config.ts +1 -2
  503. package/src/features/viewport/glsp-scroll-mouse-listener.ts +5 -5
  504. package/src/index.ts +9 -9
  505. package/src/lib/model.ts +4 -4
  506. package/src/model-source/glsp-diagram-server.ts +15 -15
  507. package/src/sprotty-reexport.ts +283 -0
  508. package/src/utils/layout-utils.ts +9 -29
  509. package/src/utils/smodel-util.ts +139 -43
  510. package/src/utils/viewpoint-util.ts +5 -14
  511. package/src/views/base-view-module.ts +5 -1
  512. package/src/views/compartments.tsx +1 -1
  513. package/src/views/glsp-edge-view.tsx +4 -4
  514. package/src/views/issue-marker-view.tsx +2 -2
  515. package/src/views/rounded-corner-view.tsx +2 -3
  516. package/lib/features/layout/layout-commands.d.ts +0 -153
  517. package/lib/features/layout/layout-commands.d.ts.map +0 -1
  518. package/lib/features/layout/layout-commands.js +0 -412
  519. package/lib/features/layout/layout-commands.js.map +0 -1
  520. package/lib/features/layout/layout-commands.spec.d.ts +0 -3
  521. package/lib/features/layout/layout-commands.spec.d.ts.map +0 -1
  522. package/lib/features/layout/layout-commands.spec.js.map +0 -1
  523. package/lib/features/tool-palette/palette-item.d.ts.map +0 -1
  524. package/lib/features/tool-palette/palette-item.js.map +0 -1
  525. package/lib/protocol-reexport.d.ts +0 -45
  526. package/lib/protocol-reexport.d.ts.map +0 -1
  527. package/lib/protocol-reexport.js +0 -75
  528. package/lib/protocol-reexport.js.map +0 -1
  529. package/src/features/layout/layout-commands.ts +0 -424
  530. package/src/features/tool-palette/palette-item.ts +0 -38
  531. package/src/protocol-reexport.ts +0 -64
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2020-2021 EclipseSource and others.
2
+ * Copyright (c) 2020-2022 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,11 +14,11 @@
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
+ import { Action, SModelElementSchema } from '@eclipse-glsp/protocol';
18
18
  import { AssertionError, expect } from 'chai';
19
19
  import { Container, injectable } from 'inversify';
20
- import { defaultModule, SGraphFactory, SModelElementSchema, SModelRoot, TYPES } from 'sprotty';
21
- import { GLSP_TYPES } from '../../base/types';
20
+ import { defaultModule, SGraphFactory, SModelRoot } from 'sprotty';
21
+ import { TYPES } from '../../base/types';
22
22
  import { IFeedbackActionDispatcher, IFeedbackEmitter } from '../tool-feedback/feedback-action-dispatcher';
23
23
  import { SelectFeedbackAction } from './select-feedback-action';
24
24
  import { SelectionListener, SelectionService } from './selection-service';
@@ -74,14 +74,16 @@ class MockSelectionListener implements SelectionListener {
74
74
  function createContainer(): Container {
75
75
  const container = new Container();
76
76
  container.load(defaultModule);
77
+ // eslint-disable-next-line deprecation/deprecation
77
78
  container.rebind(TYPES.IModelFactory).to(SGraphFactory).inSingletonScope();
78
- container.bind(GLSP_TYPES.IFeedbackActionDispatcher).to(MockFeedbackActionDispatcher).inSingletonScope();
79
+ container.bind(TYPES.IFeedbackActionDispatcher).to(MockFeedbackActionDispatcher).inSingletonScope();
79
80
  container.bind(SelectionService).toSelf().inSingletonScope();
80
- container.bind(GLSP_TYPES.SelectionService).toService(SelectionService);
81
+ container.bind(TYPES.SelectionService).toService(SelectionService);
81
82
  return container;
82
83
  }
83
84
 
84
85
  describe('SelectionService', () => {
86
+ // eslint-disable-next-line deprecation/deprecation
85
87
  let graphFactory: SGraphFactory;
86
88
  let root: SModelRoot;
87
89
  let selectionService: SelectionService;
@@ -89,10 +91,11 @@ describe('SelectionService', () => {
89
91
 
90
92
  beforeEach(() => {
91
93
  const container = createContainer();
94
+ // eslint-disable-next-line deprecation/deprecation
92
95
  graphFactory = container.get<SGraphFactory>(TYPES.IModelFactory);
93
96
  root = createRoot('node1', 'node2', 'node3', 'node4', 'node5');
94
- selectionService = container.get<SelectionService>(GLSP_TYPES.SelectionService);
95
- feedbackDispatcher = container.get<MockFeedbackActionDispatcher>(GLSP_TYPES.IFeedbackActionDispatcher);
97
+ selectionService = container.get<SelectionService>(TYPES.SelectionService);
98
+ feedbackDispatcher = container.get<MockFeedbackActionDispatcher>(TYPES.IFeedbackActionDispatcher);
96
99
  });
97
100
 
98
101
  describe('Initial State', () => {
@@ -344,7 +347,7 @@ describe('SelectionService', () => {
344
347
  expect(selectionService.hasSelectedElements()).to.equal(expectedSelection.length > 0);
345
348
  expect(selectionService.getSelectedElementIDs()).to.have.lengthOf(expectedSelection.length);
346
349
  if (expectedSelection.length > 0) {
347
- expect(selectionService.getSelectedElementIDs()).to.have.all.keys(...expectedSelection);
350
+ expect(selectionService.getSelectedElementIDs()).to.have.ordered.members(expectedSelection);
348
351
  }
349
352
  }
350
353
 
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019-2021 EclipseSource and others.
2
+ * Copyright (c) 2019-2022 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,24 +13,23 @@
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
+ import { Action, distinctAdd, pluck, remove, SelectAction, SelectAllAction } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable, multiInject, optional } from 'inversify';
18
18
  import {
19
19
  Command,
20
20
  CommandExecutionContext,
21
21
  ILogger,
22
22
  isSelectable,
23
- isSelected,
24
23
  SChildElement,
24
+ Selectable,
25
25
  SelectAllCommand as SprottySelectAllCommand,
26
26
  SelectCommand as SprottySelectCommand,
27
27
  SModelElement,
28
- SModelRoot,
29
- SParentElement,
30
- TYPES
28
+ SModelRoot
31
29
  } from 'sprotty';
32
30
  import { SModelRootListener } from '../../base/model/update-model-command';
33
- import { GLSP_TYPES } from '../../base/types';
31
+ import { TYPES } from '../../base/types';
32
+ import { getElements, getMatchingElements } from '../../utils/smodel-util';
34
33
  import { IFeedbackActionDispatcher } from '../tool-feedback/feedback-action-dispatcher';
35
34
  import { SelectFeedbackAction } from './select-feedback-action';
36
35
 
@@ -43,10 +42,10 @@ export class SelectionService implements SModelRootListener {
43
42
  private root: Readonly<SModelRoot>;
44
43
  private selectedElementIDs: Set<string> = new Set();
45
44
 
46
- @inject(GLSP_TYPES.IFeedbackActionDispatcher) protected feedbackDispatcher: IFeedbackActionDispatcher;
45
+ @inject(TYPES.IFeedbackActionDispatcher) protected feedbackDispatcher: IFeedbackActionDispatcher;
47
46
  @inject(TYPES.ILogger) protected logger: ILogger;
48
47
 
49
- constructor(@multiInject(GLSP_TYPES.SelectionListener) @optional() protected selectionListeners: SelectionListener[] = []) {}
48
+ constructor(@multiInject(TYPES.SelectionListener) @optional() protected selectionListeners: SelectionListener[] = []) {}
50
49
 
51
50
  register(selectionListener: SelectionListener): void {
52
51
  distinctAdd(this.selectionListeners, selectionListener);
@@ -100,7 +99,12 @@ export class SelectionService implements SModelRootListener {
100
99
  ![...prevSelectedElementIDs].every(value => this.selectedElementIDs.has(value));
101
100
  if (selectionChanged) {
102
101
  // aggregate to feedback action handling all elements as only the last feedback is restored
103
- this.dispatchFeedback([new SelectFeedbackAction([...this.selectedElementIDs], [...deselectedElementIDs])]);
102
+ this.dispatchFeedback([
103
+ SelectFeedbackAction.create({
104
+ selectedElementsIDs: [...this.selectedElementIDs],
105
+ deselectedElementsIDs: [...deselectedElementIDs]
106
+ })
107
+ ]);
104
108
  }
105
109
 
106
110
  const rootChanged = prevRoot !== root;
@@ -122,16 +126,16 @@ export class SelectionService implements SModelRootListener {
122
126
  return this.root;
123
127
  }
124
128
 
125
- getSelectedElements(): Readonly<SModelElement>[] {
126
- return Array.from(this.root.index.all().filter(isSelected));
129
+ getSelectedElements(): Readonly<SModelElement & Selectable>[] {
130
+ return getElements(this.root.index, Array.from(this.selectedElementIDs), isSelectable);
127
131
  }
128
132
 
129
133
  /**
130
134
  * QUERY METHODS
131
135
  */
132
136
 
133
- getSelectedElementIDs(): Set<string> {
134
- return this.selectedElementIDs;
137
+ getSelectedElementIDs(): string[] {
138
+ return [...this.selectedElementIDs];
135
139
  }
136
140
 
137
141
  hasSelectedElements(): boolean {
@@ -147,6 +151,11 @@ export class SelectionService implements SModelRootListener {
147
151
  }
148
152
  }
149
153
 
154
+ /**
155
+ * Handles a {@link SelectAction} and propagates the new selection to the {@link SelectionService}.
156
+ * Other tools might be selection-sensitive which means {@link SelectAction}s must be processed as fast as possible.
157
+ * Handling the action with a command ensures that the action is processed before the next render tick.
158
+ */
150
159
  @injectable()
151
160
  export class SelectCommand extends Command {
152
161
  static readonly KIND = SprottySelectCommand.KIND;
@@ -156,43 +165,37 @@ export class SelectCommand extends Command {
156
165
 
157
166
  constructor(
158
167
  @inject(TYPES.Action) public action: SelectAction,
159
- @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService
168
+ @inject(TYPES.SelectionService) public selectionService: SelectionService
160
169
  ) {
161
170
  super();
162
171
  }
163
172
 
164
173
  execute(context: CommandExecutionContext): SModelRoot {
165
174
  const model = context.root;
166
- this.action.selectedElementsIDs.forEach(id => {
167
- const element = model.index.getById(id);
168
- if (element instanceof SChildElement && isSelectable(element)) {
169
- this.selected.push(element);
170
- }
171
- });
172
- this.action.deselectedElementsIDs.forEach(id => {
173
- const element = model.index.getById(id);
174
- if (element instanceof SChildElement && isSelectable(element)) {
175
- this.deselected.push(element);
176
- }
177
- });
178
- return this.redo(context);
175
+ const selectionGuard = (element: any): element is SModelElement => element instanceof SChildElement && isSelectable(element);
176
+ const selectedElements = getElements(model.index, this.action.selectedElementsIDs, selectionGuard);
177
+ const deselectedElements = getElements(model.index, this.action.deselectedElementsIDs, selectionGuard);
178
+
179
+ this.selectionService.updateSelection(model, pluck(selectedElements, 'id'), pluck(deselectedElements, 'id'));
180
+ return model;
179
181
  }
180
182
 
183
+ // Basically no-op since client-side undo is not supported in GLSP.
181
184
  undo(context: CommandExecutionContext): SModelRoot {
182
- const select = this.deselected.map(element => element.id);
183
- const deselect = this.selected.map(element => element.id);
184
- this.selectionService.updateSelection(context.root, select, deselect);
185
185
  return context.root;
186
186
  }
187
187
 
188
+ // Basically no-op since client-side redo is not supported in GLSP.
188
189
  redo(context: CommandExecutionContext): SModelRoot {
189
- const select = this.selected.map(element => element.id);
190
- const deselect = this.deselected.map(element => element.id);
191
- this.selectionService.updateSelection(context.root, select, deselect);
192
190
  return context.root;
193
191
  }
194
192
  }
195
193
 
194
+ /**
195
+ * Handles a {@link SelectAllAction} and propagates the new selection to the {@link SelectionService}.
196
+ * Other tools might be selection-sensitive which means {@link SelectionAllAction}s must be processed as fast as possible.
197
+ * Handling the action with a command ensures that the action is processed before the next render tick.
198
+ */
196
199
  @injectable()
197
200
  export class SelectAllCommand extends Command {
198
201
  static readonly KIND = SprottySelectAllCommand.KIND;
@@ -200,44 +203,33 @@ export class SelectAllCommand extends Command {
200
203
 
201
204
  constructor(
202
205
  @inject(TYPES.Action) public action: SelectAllAction,
203
- @inject(GLSP_TYPES.SelectionService) public selectionService: SelectionService
206
+ @inject(TYPES.SelectionService) public selectionService: SelectionService
204
207
  ) {
205
208
  super();
206
209
  }
207
210
 
208
211
  execute(context: CommandExecutionContext): SModelRoot {
209
- return this.redo(context);
212
+ const model = context.root;
213
+ const selectionGuard = (element: any): element is SModelElement => element instanceof SChildElement && isSelectable(element);
214
+
215
+ const selectables = getMatchingElements(model.index, selectionGuard);
216
+ const selectableIds = pluck(selectables, 'id');
217
+ if (this.action.select) {
218
+ this.selectionService.updateSelection(model, selectableIds, []);
219
+ } else {
220
+ this.selectionService.updateSelection(model, [], selectableIds);
221
+ }
222
+
223
+ return model;
210
224
  }
211
225
 
226
+ // Basically no-op since client-side undo is not supported in GLSP.
212
227
  undo(context: CommandExecutionContext): SModelRoot {
213
- const index = context.root.index;
214
- for (const previousState of this.previousSelection) {
215
- const element = index.getById(previousState[0]);
216
- if (element !== undefined && isSelectable(element)) {
217
- element.selected = previousState[1];
218
- }
219
- }
220
228
  return context.root;
221
229
  }
222
230
 
231
+ // Basically no-op since client-side redo is not supported in GLSP.
223
232
  redo(context: CommandExecutionContext): SModelRoot {
224
- const selectables: string[] = [];
225
- this.selectAll(context.root, this.action.select, selectables);
226
- if (this.action.select) {
227
- this.selectionService.updateSelection(context.root, selectables, []);
228
- } else {
229
- this.selectionService.updateSelection(context.root, [], selectables);
230
- }
231
233
  return context.root;
232
234
  }
233
-
234
- protected selectAll(element: SParentElement, newState: boolean, selected: string[]): void {
235
- if (isSelectable(element)) {
236
- this.previousSelection.set(element.id, element.selected);
237
- selected.push(element.id);
238
- }
239
- for (const child of element.children) {
240
- this.selectAll(child, newState, selected);
241
- }
242
- }
243
235
  }
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019-2021 EclipseSource and others.
2
+ * Copyright (c) 2019-2022 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,7 +13,7 @@
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
+ import { Action, hasStringProp, Point } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable } from 'inversify';
18
18
  import { VNode } from 'snabbdom';
19
19
  import {
@@ -31,34 +31,64 @@ import {
31
31
  SModelRoot,
32
32
  TYPES
33
33
  } from 'sprotty';
34
- import { isNotUndefined } from '../../utils/smodel-util';
34
+ import { forEachElement } from '../../utils/smodel-util';
35
35
  import { addResizeHandles, isResizable, removeResizeHandles, SResizeHandle } from '../change-bounds/model';
36
36
  import { createMovementRestrictionFeedback, removeMovementRestrictionFeedback } from '../change-bounds/movement-restrictor';
37
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
- export class ShowChangeBoundsToolResizeFeedbackAction implements Action {
42
- constructor(readonly elementId?: string, public readonly kind: string = ShowChangeBoundsToolResizeFeedbackCommand.KIND) {}
41
+ export interface ShowChangeBoundsToolResizeFeedbackAction extends Action {
42
+ kind: typeof ShowChangeBoundsToolResizeFeedbackAction.KIND;
43
+
44
+ elementId: string;
45
+ }
46
+
47
+ export namespace ShowChangeBoundsToolResizeFeedbackAction {
48
+ export const KIND = 'showChangeBoundsToolResizeFeedback';
49
+
50
+ export function is(object: any): object is ShowChangeBoundsToolResizeFeedbackAction {
51
+ return Action.hasKind(object, KIND) && hasStringProp(object, 'elementId');
52
+ }
53
+
54
+ export function create(elementId: string): ShowChangeBoundsToolResizeFeedbackAction {
55
+ return {
56
+ kind: KIND,
57
+ elementId
58
+ };
59
+ }
43
60
  }
44
61
 
45
- export class HideChangeBoundsToolResizeFeedbackAction implements Action {
46
- constructor(public readonly kind: string = HideChangeBoundsToolResizeFeedbackCommand.KIND) {}
62
+ export interface HideChangeBoundsToolResizeFeedbackAction extends Action {
63
+ kind: typeof HideChangeBoundsToolResizeFeedbackAction.KIND;
64
+ }
65
+
66
+ export namespace HideChangeBoundsToolResizeFeedbackAction {
67
+ export const KIND = 'hideChangeBoundsToolResizeFeedback';
68
+
69
+ export function is(object: any): object is HideChangeBoundsToolResizeFeedbackAction {
70
+ return Action.hasKind(object, KIND);
71
+ }
72
+
73
+ export function create(): HideChangeBoundsToolResizeFeedbackAction {
74
+ return { kind: KIND };
75
+ }
47
76
  }
48
77
 
49
78
  @injectable()
50
79
  export class ShowChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
51
- static readonly KIND = 'showChangeBoundsToolResizeFeedback';
80
+ static readonly KIND = ShowChangeBoundsToolResizeFeedbackAction.KIND;
52
81
 
53
82
  @inject(TYPES.Action) protected action: ShowChangeBoundsToolResizeFeedbackAction;
54
83
 
55
84
  execute(context: CommandExecutionContext): CommandReturn {
56
85
  const index = context.root.index;
57
- index.all().filter(isResizable).forEach(removeResizeHandles);
58
86
 
59
- if (isNotUndefined(this.action.elementId)) {
87
+ forEachElement(index, isResizable, removeResizeHandles);
88
+
89
+ if (this.action.elementId) {
60
90
  const resizeElement = index.getById(this.action.elementId);
61
- if (isNotUndefined(resizeElement) && isResizable(resizeElement)) {
91
+ if (resizeElement && isResizable(resizeElement)) {
62
92
  addResizeHandles(resizeElement);
63
93
  }
64
94
  }
@@ -68,13 +98,13 @@ export class ShowChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
68
98
 
69
99
  @injectable()
70
100
  export class HideChangeBoundsToolResizeFeedbackCommand extends FeedbackCommand {
71
- static readonly KIND = 'hideChangeBoundsToolResizeFeedback';
101
+ static readonly KIND = HideChangeBoundsToolResizeFeedbackAction.KIND;
72
102
 
73
103
  @inject(TYPES.Action) protected action: HideChangeBoundsToolResizeFeedbackAction;
74
104
 
75
105
  execute(context: CommandExecutionContext): CommandReturn {
76
106
  const index = context.root.index;
77
- index.all().filter(isResizable).forEach(removeResizeHandles);
107
+ forEachElement(index, isResizable, removeResizeHandles);
78
108
  return context.root;
79
109
  }
80
110
  }
@@ -95,7 +125,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
95
125
  super();
96
126
  }
97
127
 
98
- mouseDown(target: SModelElement, event: MouseEvent): Action[] {
128
+ override mouseDown(target: SModelElement, event: MouseEvent): Action[] {
99
129
  if (event.button === 0 && !(target instanceof SResizeHandle)) {
100
130
  const moveable = findParentByFeature(target, isMoveable);
101
131
  if (moveable !== undefined) {
@@ -108,7 +138,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
108
138
  return [];
109
139
  }
110
140
 
111
- mouseMove(target: SModelElement, event: MouseEvent): Action[] {
141
+ override mouseMove(target: SModelElement, event: MouseEvent): Action[] {
112
142
  const result: Action[] = [];
113
143
  if (event.buttons === 0) {
114
144
  this.mouseUp(target, event);
@@ -148,7 +178,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
148
178
  return false;
149
179
  }
150
180
 
151
- protected getElementMoves(target: SModelElement, event: MouseEvent, isFinished: boolean): MoveAction | undefined {
181
+ protected getElementMoves(target: SModelElement, event: MouseEvent, finished: boolean): MoveAction | undefined {
152
182
  if (!this.startDragPosition) {
153
183
  return undefined;
154
184
  }
@@ -172,7 +202,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
172
202
  );
173
203
 
174
204
  if (isMoveable(element)) {
175
- toPosition = this.validateMove(startPosition, toPosition, element, isFinished);
205
+ toPosition = this.validateMove(startPosition, toPosition, element, finished);
176
206
  elementMoves.push({
177
207
  elementId: element.id,
178
208
  fromPosition: {
@@ -185,7 +215,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
185
215
  }
186
216
  });
187
217
  if (elementMoves.length > 0) {
188
- return new MoveAction(elementMoves, false, isFinished);
218
+ return MoveAction.create(elementMoves, { animate: false, finished });
189
219
  } else {
190
220
  return undefined;
191
221
  }
@@ -194,7 +224,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
194
224
  protected validateMove(startPostion: Point, toPosition: Point, element: SModelElement, isFinished: boolean): Point {
195
225
  let newPosition = toPosition;
196
226
  if (this.tool.movementRestrictor) {
197
- const valid = this.tool.movementRestrictor.validate(toPosition, element);
227
+ const valid = this.tool.movementRestrictor.validate(element, toPosition);
198
228
  let action;
199
229
  if (!valid) {
200
230
  action = createMovementRestrictionFeedback(element, this.tool.movementRestrictor);
@@ -219,14 +249,14 @@ export class FeedbackMoveMouseListener extends MouseListener {
219
249
  }
220
250
  }
221
251
 
222
- mouseEnter(target: SModelElement, event: MouseEvent): Action[] {
252
+ override mouseEnter(target: SModelElement, event: MouseEvent): Action[] {
223
253
  if (target instanceof SModelRoot && event.buttons === 0 && !this.startDragPosition) {
224
254
  this.mouseUp(target, event);
225
255
  }
226
256
  return [];
227
257
  }
228
258
 
229
- mouseUp(target: SModelElement, event: MouseEvent): Action[] {
259
+ override mouseUp(target: SModelElement, event: MouseEvent): Action[] {
230
260
  const result: Action[] = [];
231
261
  if (this.startDragPosition) {
232
262
  const moveAction = this.getElementMoves(target, event, true);
@@ -244,7 +274,7 @@ export class FeedbackMoveMouseListener extends MouseListener {
244
274
  return result;
245
275
  }
246
276
 
247
- decorate(vnode: VNode, _element: SModelElement): VNode {
277
+ override decorate(vnode: VNode, _element: SModelElement): VNode {
248
278
  return vnode;
249
279
  }
250
280
  }
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019-2021 EclipseSource and others.
2
+ * Copyright (c) 2019-2022 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,15 +13,12 @@
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
+ import { Action, Bounds, Point } from '@eclipse-glsp/protocol';
17
17
  import { inject, injectable } from 'inversify';
18
18
  import {
19
- add,
20
19
  AnchorComputerRegistry,
21
- center,
22
20
  CommandExecutionContext,
23
21
  CommandReturn,
24
- euclideanDistance,
25
22
  findChildrenAtPosition,
26
23
  findParentByFeature,
27
24
  isBoundsAware,
@@ -32,28 +29,40 @@ import {
32
29
  SChildElement,
33
30
  SConnectableElement,
34
31
  SDanglingAnchor,
35
- SEdgeSchema,
32
+ SEdge as SEdgeSchema,
36
33
  SModelElement,
37
34
  SModelRoot,
38
35
  SRoutableElement,
39
36
  TYPES
40
37
  } from 'sprotty';
41
- import { isRoutable } from '../../utils/smodel-util';
38
+ import { BoundsAwareModelElement, isRoutable } from '../../utils/smodel-util';
42
39
  import { getAbsolutePosition, toAbsoluteBounds, toAbsolutePosition } from '../../utils/viewpoint-util';
43
40
  import { FeedbackCommand } from './model';
41
+ export interface DrawFeedbackEdgeAction extends Action {
42
+ kind: typeof DrawFeedbackEdgeAction.KIND;
43
+ elementTypeId: string;
44
+ sourceId: string;
45
+ edgeSchema?: SEdgeSchema;
46
+ }
44
47
 
45
- export class DrawFeedbackEdgeAction implements Action {
46
- constructor(
47
- public readonly elementTypeId: string,
48
- public readonly sourceId: string,
49
- public readonly edgeSchema?: SEdgeSchema,
50
- public readonly kind: string = DrawFeedbackEdgeCommand.KIND
51
- ) {}
48
+ export namespace DrawFeedbackEdgeAction {
49
+ export const KIND = 'drawFeedbackEdge';
50
+
51
+ export function is(object: any): object is DrawFeedbackEdgeAction {
52
+ return Action.hasKind(object, KIND);
53
+ }
54
+
55
+ export function create(options: { elementTypeId: string; sourceId: string; edgeSchema?: SEdgeSchema }): DrawFeedbackEdgeAction {
56
+ return {
57
+ kind: KIND,
58
+ ...options
59
+ };
60
+ }
52
61
  }
53
62
 
54
63
  @injectable()
55
64
  export class DrawFeedbackEdgeCommand extends FeedbackCommand {
56
- static readonly KIND = 'drawFeedbackEdge';
65
+ static readonly KIND = DrawFeedbackEdgeAction.KIND;
57
66
 
58
67
  constructor(@inject(TYPES.Action) protected action: DrawFeedbackEdgeAction) {
59
68
  super();
@@ -66,13 +75,25 @@ export class DrawFeedbackEdgeCommand extends FeedbackCommand {
66
75
  }
67
76
  }
68
77
 
69
- export class RemoveFeedbackEdgeAction implements Action {
70
- constructor(public readonly kind: string = RemoveFeedbackEdgeCommand.KIND) {}
78
+ export interface RemoveFeedbackEdgeAction extends Action {
79
+ kind: typeof RemoveFeedbackEdgeAction.KIND;
80
+ }
81
+
82
+ export namespace RemoveFeedbackEdgeAction {
83
+ export const KIND = 'removeFeedbackEdgeCommand';
84
+
85
+ export function is(object: any): object is RemoveFeedbackEdgeAction {
86
+ return Action.hasKind(object, KIND);
87
+ }
88
+
89
+ export function create(): RemoveFeedbackEdgeAction {
90
+ return { kind: KIND };
91
+ }
71
92
  }
72
93
 
73
94
  @injectable()
74
95
  export class RemoveFeedbackEdgeCommand extends FeedbackCommand {
75
- static readonly KIND = 'removeFeedbackEdgeCommand';
96
+ static readonly KIND = RemoveFeedbackEdgeAction.KIND;
76
97
 
77
98
  execute(context: CommandExecutionContext): CommandReturn {
78
99
  removeFeedbackEdge(context.root);
@@ -86,7 +107,7 @@ export class FeedbackEdgeEnd extends SDanglingAnchor {
86
107
  readonly sourceId: string,
87
108
  readonly elementTypeId: string,
88
109
  public feedbackEdge: SRoutableElement | undefined = undefined,
89
- public readonly type: string = FeedbackEdgeEnd.TYPE
110
+ override readonly type: string = FeedbackEdgeEnd.TYPE
90
111
  ) {
91
112
  super();
92
113
  }
@@ -97,7 +118,7 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
97
118
  super();
98
119
  }
99
120
 
100
- mouseMove(target: SModelElement, event: MouseEvent): Action[] {
121
+ override mouseMove(target: SModelElement, event: MouseEvent): Action[] {
101
122
  const root = target.root;
102
123
  const edgeEnd = root.index.getById(feedbackEdgeEndId(root));
103
124
  if (!(edgeEnd instanceof FeedbackEdgeEnd) || !edgeEnd.feedbackEdge) {
@@ -106,38 +127,66 @@ export class FeedbackEdgeEndMovingMouseListener extends MouseListener {
106
127
 
107
128
  const edge = edgeEnd.feedbackEdge;
108
129
  const position = getAbsolutePosition(edgeEnd, event);
109
- const endAtMousePosition = findChildrenAtPosition(target.root, position).find(
110
- element => isConnectable(element) && element.canConnect(edge, 'target')
111
- );
130
+ const endAtMousePosition = findChildrenAtPosition(target.root, position)
131
+ .reverse()
132
+ .find(element => isConnectable(element) && element.canConnect(edge, 'target'));
112
133
 
113
134
  if (endAtMousePosition instanceof SConnectableElement && edge.source && isBoundsAware(edge.source)) {
114
- const anchor = this.computeAbsoluteAnchor(endAtMousePosition, center(edge.source.bounds));
115
- if (euclideanDistance(anchor, edgeEnd.position) > 1) {
116
- return [new MoveAction([{ elementId: edgeEnd.id, toPosition: anchor }], false)];
135
+ const anchor = this.computeAbsoluteAnchor(endAtMousePosition, Bounds.center(toAbsoluteBounds(edge.source)));
136
+ if (Point.euclideanDistance(anchor, edgeEnd.position) > 1) {
137
+ return [MoveAction.create([{ elementId: edgeEnd.id, toPosition: anchor }], { animate: false })];
117
138
  }
118
139
  } else {
119
- return [new MoveAction([{ elementId: edgeEnd.id, toPosition: position }], false)];
140
+ return [MoveAction.create([{ elementId: edgeEnd.id, toPosition: position }], { animate: false })];
120
141
  }
121
142
 
122
143
  return [];
123
144
  }
124
145
 
125
- protected computeAbsoluteAnchor(element: SConnectableElement, referencePoint: Point, offset?: number): Point {
146
+ protected computeAbsoluteAnchor(element: SConnectableElement, absoluteReferencePoint: Point, offset?: number): Point {
147
+ const referencePointInParent = absoluteToParent(element, absoluteReferencePoint);
126
148
  const anchorComputer = this.anchorRegistry.get(PolylineEdgeRouter.KIND, element.anchorKind);
127
- let anchor = anchorComputer.getAnchor(element, referencePoint, offset);
149
+ let anchor = anchorComputer.getAnchor(element, referencePointInParent, offset);
128
150
  // The anchor is computed in the local coordinate system of the element.
129
151
  // If the element is a nested child element we have to add the absolute position of its parent to the anchor.
130
152
  if (element.parent !== element.root) {
131
153
  const parent = findParentByFeature(element.parent, isBoundsAware);
132
154
  if (parent) {
133
155
  const absoluteParentPosition = toAbsoluteBounds(parent);
134
- anchor = add(absoluteParentPosition, anchor);
156
+ anchor = Point.add(absoluteParentPosition, anchor);
135
157
  }
136
158
  }
137
159
  return anchor;
138
160
  }
139
161
  }
140
162
 
163
+ /**
164
+ * Convert a point, specified in absolute coordinates, to a point relative
165
+ * to the parent of the specified child element.
166
+ * @param element the child element
167
+ * @param absolutePoint a point in absolute coordinates
168
+ * @returns the equivalent point, relative to the element's parent coordinates
169
+ */
170
+ function absoluteToParent(element: BoundsAwareModelElement & SChildElement, absolutePoint: Point): Point {
171
+ if (isBoundsAware(element.parent)) {
172
+ return absoluteToLocal(element.parent, absolutePoint);
173
+ }
174
+ // If the parent is not bounds-aware, assume it's at 0; 0 and proceed
175
+ return absoluteToLocal(element, absolutePoint);
176
+ }
177
+
178
+ /**
179
+ * Convert a point, specified in absolute coordinates, to a point relative
180
+ * to the specified element.
181
+ * @param element the element
182
+ * @param absolutePoint a point in absolute coordinates
183
+ * @returns the equivalent point, relative to the element's coordinates
184
+ */
185
+ function absoluteToLocal(element: BoundsAwareModelElement, absolutePoint: Point): Point {
186
+ const absoluteElementBounds = toAbsoluteBounds(element);
187
+ return { x: absolutePoint.x - absoluteElementBounds.x, y: absolutePoint.y - absoluteElementBounds.y };
188
+ }
189
+
141
190
  export function feedbackEdgeId(root: SModelRoot): string {
142
191
  return root.id + '_feedback_edge';
143
192
  }