@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
@@ -0,0 +1,256 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2021-2022 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+ import { Bounds, Dimension, Point } from '@eclipse-glsp/protocol';
17
+ import { injectable } from 'inversify';
18
+ import {
19
+ BoundsData,
20
+ isBoundsAware,
21
+ isLayoutableChild,
22
+ LayoutContainer,
23
+ SChildElement,
24
+ SModelElement,
25
+ SParentElement,
26
+ StatefulLayouter,
27
+ HBoxLayouter,
28
+ HBoxLayoutOptions
29
+ } from 'sprotty';
30
+
31
+ export interface HBoxLayoutOptionsExt extends HBoxLayoutOptions {
32
+ hGrab: boolean;
33
+ vGrab: boolean;
34
+ prefWidth: number | null;
35
+ prefHeight: number | null;
36
+ }
37
+
38
+ /**
39
+ * Extends HBoxLayouter to support additional layout options
40
+ */
41
+ @injectable()
42
+ export class HBoxLayouterExt extends HBoxLayouter {
43
+ static override KIND = HBoxLayouter.KIND;
44
+
45
+ override layout(container: SParentElement & LayoutContainer, layouter: StatefulLayouter): void {
46
+ const boundsData = layouter.getBoundsData(container);
47
+ const options = this.getLayoutOptions(container);
48
+ const childrenSize = this.getChildrenSize(container, options, layouter);
49
+
50
+ const fixedSize = this.getFixedContainerBounds(container, options, layouter);
51
+
52
+ const maxWidth =
53
+ options.paddingFactor *
54
+ (options.resizeContainer
55
+ ? Math.max(fixedSize.width - options.paddingLeft - options.paddingRight, childrenSize.width)
56
+ : Math.max(0, fixedSize.width - options.paddingLeft - options.paddingRight));
57
+ const maxHeight =
58
+ options.paddingFactor *
59
+ (options.resizeContainer
60
+ ? Math.max(fixedSize.height - options.paddingTop - options.paddingBottom, childrenSize.height)
61
+ : Math.max(0, fixedSize.height - options.paddingTop - options.paddingBottom));
62
+
63
+ // Remaining size that can be grabbed by children with the hGrab option
64
+ const grabWidth: number = maxWidth - childrenSize.width;
65
+ // Number of children that request hGrab
66
+ // FIXME: This approach works fine when only 1 child uses HGrab, but may cause rounding issues
67
+ // when the grabHeight can't be equally shared by all children.
68
+ const grabbingChildren = container.children
69
+ .map(child => this.getChildLayoutOptions(child, options))
70
+ .filter(opt => opt.hGrab).length;
71
+
72
+ if (maxWidth > 0 && maxHeight > 0) {
73
+ const offset = this.layoutChildren(container, layouter, options, maxWidth, maxHeight, grabWidth, grabbingChildren);
74
+ boundsData.bounds = this.getFinalContainerBounds(container, offset, options, childrenSize.width, childrenSize.height);
75
+ boundsData.boundsChanged = true;
76
+ }
77
+ }
78
+
79
+ protected override getChildrenSize(
80
+ container: SParentElement & LayoutContainer,
81
+ containerOptions: HBoxLayoutOptionsExt,
82
+ layouter: StatefulLayouter
83
+ ): Dimension {
84
+ let maxWidth = 0;
85
+ let maxHeight = -1;
86
+ let isFirst = true;
87
+ container.children.forEach(child => {
88
+ if (isLayoutableChild(child)) {
89
+ const bounds = layouter.getBoundsData(child).bounds;
90
+ if (bounds !== undefined && Dimension.isValid(bounds)) {
91
+ maxWidth += bounds.width;
92
+ if (isFirst) {
93
+ isFirst = false;
94
+ } else {
95
+ maxWidth += containerOptions.hGap;
96
+ }
97
+ maxHeight = Math.max(maxHeight, bounds.height);
98
+ }
99
+ }
100
+ });
101
+ const result = {
102
+ width: maxWidth,
103
+ height: maxHeight
104
+ };
105
+ return result;
106
+ }
107
+
108
+ protected override layoutChildren(
109
+ container: SParentElement & LayoutContainer,
110
+ layouter: StatefulLayouter,
111
+ containerOptions: HBoxLayoutOptionsExt,
112
+ maxWidth: number,
113
+ maxHeight: number,
114
+ grabWidth?: number,
115
+ grabbingChildren?: number
116
+ ): Point {
117
+ let currentOffset: Point = {
118
+ x: containerOptions.paddingLeft + 0.5 * (maxWidth - maxWidth / containerOptions.paddingFactor),
119
+ y: containerOptions.paddingTop + 0.5 * (maxHeight - maxHeight / containerOptions.paddingFactor)
120
+ };
121
+
122
+ container.children.forEach(child => {
123
+ if (isLayoutableChild(child)) {
124
+ const boundsData = layouter.getBoundsData(child);
125
+ const bounds = boundsData.bounds;
126
+ const childOptions = this.getChildLayoutOptions(child, containerOptions);
127
+ if (bounds !== undefined && Dimension.isValid(bounds)) {
128
+ currentOffset = this.layoutChild(
129
+ child,
130
+ boundsData,
131
+ bounds,
132
+ childOptions,
133
+ containerOptions,
134
+ currentOffset,
135
+ maxWidth,
136
+ maxHeight,
137
+ grabWidth,
138
+ grabbingChildren
139
+ );
140
+ }
141
+ }
142
+ });
143
+ return currentOffset;
144
+ }
145
+
146
+ protected override layoutChild(
147
+ child: SChildElement,
148
+ boundsData: BoundsData,
149
+ bounds: Bounds,
150
+ childOptions: HBoxLayoutOptionsExt,
151
+ containerOptions: HBoxLayoutOptionsExt,
152
+ currentOffset: Point,
153
+ maxWidth: number,
154
+ maxHeight: number,
155
+ grabWidth?: number,
156
+ grabbingChildren?: number
157
+ ): Point {
158
+ let offset = super.layoutChild(child, boundsData, bounds, childOptions, containerOptions, currentOffset, maxWidth, maxHeight);
159
+ if (childOptions.hGrab) {
160
+ boundsData.bounds = {
161
+ x: boundsData.bounds!.x,
162
+ y: boundsData.bounds!.y,
163
+ width: boundsData.bounds!.width,
164
+ height: maxHeight
165
+ };
166
+ boundsData.boundsChanged = true;
167
+ }
168
+ if (childOptions.hGrab && grabWidth && grabbingChildren) {
169
+ const width = boundsData.bounds!.width + grabWidth / grabbingChildren;
170
+ boundsData.bounds = {
171
+ x: boundsData.bounds!.x,
172
+ y: boundsData.bounds!.y,
173
+ width: width,
174
+ height: boundsData.bounds!.height
175
+ };
176
+ boundsData.boundsChanged = true;
177
+ offset = { x: currentOffset.x + width, y: currentOffset.y };
178
+ }
179
+ return offset;
180
+ }
181
+
182
+ protected override getFixedContainerBounds(
183
+ container: SModelElement,
184
+ layoutOptions: HBoxLayoutOptionsExt,
185
+ layouter: StatefulLayouter
186
+ ): Bounds {
187
+ const currentContainer = container;
188
+ // eslint-disable-next-line no-constant-condition
189
+ if (isBoundsAware(currentContainer)) {
190
+ const bounds = currentContainer.bounds;
191
+ const elementOptions = this.getElementLayoutOptions(currentContainer);
192
+ const width = elementOptions?.prefWidth ?? 0;
193
+ const height = elementOptions?.prefHeight ?? 0;
194
+ return { ...bounds, width, height };
195
+ }
196
+ return Bounds.EMPTY;
197
+ }
198
+
199
+ protected override getChildLayoutOptions(child: SChildElement, containerOptions: HBoxLayoutOptionsExt): HBoxLayoutOptionsExt {
200
+ return super.getChildLayoutOptions(child, containerOptions) as HBoxLayoutOptionsExt;
201
+ }
202
+
203
+ protected override getLayoutOptions(element: SModelElement): HBoxLayoutOptionsExt {
204
+ return super.getLayoutOptions(element) as HBoxLayoutOptionsExt;
205
+ }
206
+
207
+ protected getElementLayoutOptions(element: SModelElement): HBoxLayoutOptionsExt | undefined {
208
+ return (element as any).layoutOptions;
209
+ }
210
+
211
+ protected override getFinalContainerBounds(
212
+ container: SParentElement & LayoutContainer,
213
+ lastOffset: Point,
214
+ options: HBoxLayoutOptionsExt,
215
+ maxWidth: number,
216
+ maxHeight: number
217
+ ): Bounds {
218
+ const elementOptions = this.getElementLayoutOptions(container);
219
+ const width = elementOptions?.prefWidth ?? options.minWidth;
220
+ const height = elementOptions?.prefHeight ?? options.minHeight;
221
+
222
+ const result = {
223
+ x: container.bounds.x,
224
+ y: container.bounds.y,
225
+ width: Math.max(width, maxWidth + options.paddingLeft + options.paddingRight),
226
+ height: Math.max(height, maxHeight + options.paddingTop + options.paddingBottom)
227
+ };
228
+
229
+ return result;
230
+ }
231
+
232
+ protected override getDefaultLayoutOptions(): HBoxLayoutOptionsExt {
233
+ return {
234
+ resizeContainer: true,
235
+ paddingTop: 5,
236
+ paddingBottom: 5,
237
+ paddingLeft: 5,
238
+ paddingRight: 5,
239
+ paddingFactor: 1,
240
+ hGap: 1,
241
+ vAlign: 'center',
242
+ minWidth: 0,
243
+ minHeight: 0,
244
+ hGrab: false,
245
+ vGrab: false,
246
+ // eslint-disable-next-line no-null/no-null
247
+ prefHeight: null,
248
+ // eslint-disable-next-line no-null/no-null
249
+ prefWidth: null
250
+ };
251
+ }
252
+
253
+ protected override spread(a: HBoxLayoutOptionsExt, b: HBoxLayoutOptionsExt): HBoxLayoutOptionsExt {
254
+ return { ...a, ...b };
255
+ }
256
+ }
@@ -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,8 +13,16 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- /* eslint-disable import/no-deprecated,no-unused-expressions */
17
- import { Action, Bounds, ChangeBoundsOperation, ElementAndBounds } from '@eclipse-glsp/protocol';
16
+ /* eslint-disable deprecation/deprecation */
17
+ import {
18
+ Action,
19
+ Bounds,
20
+ ChangeBoundsOperation,
21
+ ElementAndBounds,
22
+ RequestAction,
23
+ ResponseAction,
24
+ SetBoundsAction
25
+ } from '@eclipse-glsp/protocol';
18
26
  import { expect } from 'chai';
19
27
  import { Container } from 'inversify';
20
28
  import 'mocha';
@@ -29,28 +37,23 @@ import {
29
37
  IActionDispatcher,
30
38
  MoveAction,
31
39
  MoveCommand,
32
- RequestAction,
33
- ResponseAction,
34
40
  SChildElement,
35
- SetBoundsAction,
36
41
  SetBoundsCommand,
37
42
  SGraphFactory,
38
- SModelRoot,
39
- TYPES
43
+ SModelRoot
40
44
  } from 'sprotty';
41
- import { GLSP_TYPES } from '../../base/types';
45
+ import { TYPES } from '../../base/types';
42
46
  import { resizeFeature } from '../change-bounds/model';
43
47
  import { SelectionService } from '../select/selection-service';
44
48
  import { FeedbackActionDispatcher } from '../tool-feedback/feedback-action-dispatcher';
45
49
  import {
46
50
  AlignElementsAction,
47
- AlignElementsCommand,
51
+ AlignElementsActionHandler,
48
52
  Alignment,
49
- Reduce,
50
53
  ResizeDimension,
51
54
  ResizeElementsAction,
52
- ResizeElementsCommand
53
- } from './layout-commands';
55
+ ResizeElementsActionHandler
56
+ } from './layout-elements-action';
54
57
 
55
58
  class MockActionDispatcher implements IActionDispatcher {
56
59
  constructor(public dispatchedActions: Action[] = []) {}
@@ -67,14 +70,21 @@ class MockActionDispatcher implements IActionDispatcher {
67
70
  }
68
71
  }
69
72
 
73
+ class MockSelectionService extends SelectionService {
74
+ constructor(public modelRoot: SModelRoot) {
75
+ super();
76
+ }
77
+ override getModelRoot(): Readonly<SModelRoot> {
78
+ return this.modelRoot;
79
+ }
80
+ }
81
+
82
+ // Generic Test setup
70
83
  const container = new Container();
71
84
  container.load(defaultModule);
72
- container.bind(GLSP_TYPES.IFeedbackActionDispatcher).to(FeedbackActionDispatcher).inSingletonScope();
73
- container.bind(SelectionService).toSelf().inSingletonScope();
74
- container.bind(GLSP_TYPES.SelectionService).toService(SelectionService);
85
+ container.bind(TYPES.IFeedbackActionDispatcher).to(FeedbackActionDispatcher).inSingletonScope();
75
86
  container.rebind(TYPES.IModelFactory).to(SGraphFactory).inSingletonScope();
76
87
  const graphFactory = container.get<SGraphFactory>(TYPES.IModelFactory);
77
- const selectionService = container.get<SelectionService>(GLSP_TYPES.SelectionService);
78
88
 
79
89
  const actionDispatcher = new MockActionDispatcher();
80
90
 
@@ -121,16 +131,26 @@ const context: CommandExecutionContext = {
121
131
  const defaultSize = { height: 10, width: 10 };
122
132
 
123
133
  describe('AlignElementsCommand', () => {
124
- it('should align all elements left', () => {
134
+ let handler: AlignElementsActionHandler;
135
+ const setModel = (newModel: SModelRoot): void => {
136
+ handler['selectionService'] = new MockSelectionService(newModel);
137
+ };
138
+
139
+ beforeEach(() => {
125
140
  actionDispatcher.dispatchedActions = [];
141
+
142
+ handler = new AlignElementsActionHandler();
143
+ handler['actionDispatcher'] = actionDispatcher;
144
+ });
145
+ it('should align all elements left', () => {
126
146
  const newModel = initModel([
127
147
  { elementId: 'node1', newPosition: { x: 111, y: 111 }, newSize: defaultSize },
128
148
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
129
149
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
130
150
  ]);
131
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Left);
132
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
133
- command.execute(newContext(newModel));
151
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Left });
152
+ setModel(newModel);
153
+ handler.handle(action);
134
154
 
135
155
  assertAllBounds(
136
156
  new Map([
@@ -142,16 +162,14 @@ describe('AlignElementsCommand', () => {
142
162
  });
143
163
 
144
164
  it('should align all elements right', () => {
145
- actionDispatcher.dispatchedActions = [];
146
165
  const newModel = initModel([
147
166
  { elementId: 'node1', newPosition: { x: 111, y: 111 }, newSize: defaultSize },
148
167
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
149
168
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
150
169
  ]);
151
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Right);
152
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
153
- command.execute(newContext(newModel));
154
-
170
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Right });
171
+ setModel(newModel);
172
+ handler.handle(action);
155
173
  assertAllBounds(
156
174
  new Map([
157
175
  ['node1', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }],
@@ -168,9 +186,9 @@ describe('AlignElementsCommand', () => {
168
186
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
169
187
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
170
188
  ]);
171
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Center);
172
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
173
- command.execute(newContext(newModel));
189
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Center });
190
+ setModel(newModel);
191
+ handler.handle(action);
174
192
 
175
193
  assertAllBounds(
176
194
  new Map([
@@ -182,15 +200,14 @@ describe('AlignElementsCommand', () => {
182
200
  });
183
201
 
184
202
  it('should align all elements top', () => {
185
- actionDispatcher.dispatchedActions = [];
186
203
  const newModel = initModel([
187
204
  { elementId: 'node1', newPosition: { x: 111, y: 111 }, newSize: defaultSize },
188
205
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
189
206
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
190
207
  ]);
191
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Top);
192
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
193
- command.execute(newContext(newModel));
208
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Top });
209
+ setModel(newModel);
210
+ handler.handle(action);
194
211
 
195
212
  assertAllBounds(
196
213
  new Map([
@@ -202,15 +219,14 @@ describe('AlignElementsCommand', () => {
202
219
  });
203
220
 
204
221
  it('should align all elements bottom', () => {
205
- actionDispatcher.dispatchedActions = [];
206
222
  const newModel = initModel([
207
223
  { elementId: 'node1', newPosition: { x: 111, y: 111 }, newSize: defaultSize },
208
224
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
209
225
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
210
226
  ]);
211
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Bottom);
212
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
213
- command.execute(newContext(newModel));
227
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Bottom });
228
+ setModel(newModel);
229
+ handler.handle(action);
214
230
 
215
231
  assertAllBounds(
216
232
  new Map([
@@ -222,15 +238,14 @@ describe('AlignElementsCommand', () => {
222
238
  });
223
239
 
224
240
  it('should align all elements middle', () => {
225
- actionDispatcher.dispatchedActions = [];
226
241
  const newModel = initModel([
227
242
  { elementId: 'node1', newPosition: { x: 111, y: 111 }, newSize: defaultSize },
228
243
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
229
244
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
230
245
  ]);
231
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Middle);
232
- const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
233
- command.execute(newContext(newModel));
246
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Middle });
247
+ setModel(newModel);
248
+ handler.handle(action);
234
249
 
235
250
  assertAllBounds(
236
251
  new Map([
@@ -243,16 +258,30 @@ describe('AlignElementsCommand', () => {
243
258
  });
244
259
 
245
260
  describe('ResizeElementsCommand', () => {
246
- it('should make same width as last', () => {
261
+ let handler: ResizeElementsActionHandler;
262
+ const setModel = (newModel: SModelRoot): void => {
263
+ handler['selectionService'] = new MockSelectionService(newModel);
264
+ };
265
+
266
+ beforeEach(() => {
247
267
  actionDispatcher.dispatchedActions = [];
268
+
269
+ handler = new ResizeElementsActionHandler();
270
+ handler['actionDispatcher'] = actionDispatcher;
271
+ });
272
+ it('should make same width as last', () => {
248
273
  const newModel = initModel([
249
274
  { elementId: 'node1', newPosition: { x: 100, y: 100 }, newSize: { height: 10, width: 10 } },
250
275
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
251
276
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
252
277
  ]);
253
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Width, Reduce.last);
254
- const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
255
- command.execute(newContext(newModel));
278
+ const action = ResizeElementsAction.create({
279
+ elementIds: ['node1', 'node2', 'node3'],
280
+ dimension: ResizeDimension.Width,
281
+ reduceFunction: 'last'
282
+ });
283
+ setModel(newModel);
284
+ handler.handle(action);
256
285
 
257
286
  // resize is keeping the center, so the X moves by diff / 2
258
287
  assertAllBoundsInChangeBounds(
@@ -265,15 +294,18 @@ describe('ResizeElementsCommand', () => {
265
294
  });
266
295
 
267
296
  it('should make same height as last', () => {
268
- actionDispatcher.dispatchedActions = [];
269
297
  const newModel = initModel([
270
298
  { elementId: 'node1', newPosition: { x: 100, y: 100 }, newSize: { height: 10, width: 10 } },
271
299
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
272
300
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
273
301
  ]);
274
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Height, Reduce.last);
275
- const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
276
- command.execute(newContext(newModel));
302
+ const action = ResizeElementsAction.create({
303
+ elementIds: ['node1', 'node2', 'node3'],
304
+ dimension: ResizeDimension.Height,
305
+ reduceFunction: 'last'
306
+ });
307
+ setModel(newModel);
308
+ handler.handle(action);
277
309
 
278
310
  // resize is keeping the center, so the Y moves by diff / 2
279
311
  assertAllBoundsInChangeBounds(
@@ -286,15 +318,18 @@ describe('ResizeElementsCommand', () => {
286
318
  });
287
319
 
288
320
  it('should make same width and height as last', () => {
289
- actionDispatcher.dispatchedActions = [];
290
321
  const newModel = initModel([
291
322
  { elementId: 'node1', newPosition: { x: 100, y: 100 }, newSize: { height: 10, width: 10 } },
292
323
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
293
324
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
294
325
  ]);
295
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Width_And_Height, Reduce.last);
296
- const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
297
- command.execute(newContext(newModel));
326
+ const action = ResizeElementsAction.create({
327
+ elementIds: ['node1', 'node2', 'node3'],
328
+ dimension: ResizeDimension.Width_And_Height,
329
+ reduceFunction: 'last'
330
+ });
331
+ setModel(newModel);
332
+ handler.handle(action);
298
333
 
299
334
  // resize is keeping the center, so the Y moves by diff / 2
300
335
  assertAllBoundsInChangeBounds(
@@ -308,22 +343,11 @@ describe('ResizeElementsCommand', () => {
308
343
  });
309
344
 
310
345
  function initModel(elementAndBounds: ElementAndBounds[]): SModelRoot {
311
- const mySetBoundsAction = new SetBoundsAction(elementAndBounds);
346
+ const mySetBoundsAction = SetBoundsAction.create(elementAndBounds);
312
347
  const setBoundsCommand = new SetBoundsCommand(mySetBoundsAction);
313
348
  return setBoundsCommand.execute(context) as SModelRoot;
314
349
  }
315
350
 
316
- function newContext(root: SModelRoot): CommandExecutionContext {
317
- return {
318
- root: root,
319
- modelFactory: graphFactory,
320
- duration: 0,
321
- modelChanged: undefined!,
322
- logger: new ConsoleLogger(),
323
- syncer: new AnimationFrameSyncer()
324
- };
325
- }
326
-
327
351
  function assertAllBounds(allBounds: Map<string, Bounds>): void {
328
352
  allBounds.forEach((bounds, nodeId) => assertBounds(nodeId, bounds));
329
353
  }