@eclipse-glsp/client 0.9.0 → 0.10.0-next.385713d.170

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 (512) 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 +13 -1
  38. package/lib/base/editor-context-service.d.ts.map +1 -1
  39. package/lib/base/editor-context-service.js +23 -10
  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/tool-manager/glsp-tool-manager.d.ts +1 -1
  60. package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -1
  61. package/lib/base/tool-manager/glsp-tool-manager.js +10 -10
  62. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
  63. package/lib/base/tool-manager/tool-actions.d.ts +14 -0
  64. package/lib/base/tool-manager/tool-actions.d.ts.map +1 -0
  65. package/lib/base/tool-manager/tool-actions.js +25 -0
  66. package/lib/base/tool-manager/tool-actions.js.map +1 -0
  67. package/lib/base/types.d.ts +144 -20
  68. package/lib/base/types.d.ts.map +1 -1
  69. package/lib/base/types.js +14 -26
  70. package/lib/base/types.js.map +1 -1
  71. package/lib/base/view/view-registry.d.ts.map +1 -1
  72. package/lib/base/view/view-registry.js +2 -2
  73. package/lib/base/view/view-registry.js.map +1 -1
  74. package/lib/features/change-bounds/model.d.ts +1 -1
  75. package/lib/features/change-bounds/model.d.ts.map +1 -1
  76. package/lib/features/change-bounds/model.js +3 -3
  77. package/lib/features/change-bounds/model.js.map +1 -1
  78. package/lib/features/change-bounds/movement-restrictor.d.ts +1 -1
  79. package/lib/features/change-bounds/movement-restrictor.js +6 -6
  80. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  81. package/lib/features/change-bounds/snap.d.ts +42 -1
  82. package/lib/features/change-bounds/snap.d.ts.map +1 -1
  83. package/lib/features/change-bounds/snap.js +78 -2
  84. package/lib/features/change-bounds/snap.js.map +1 -1
  85. package/lib/features/change-bounds/snap.spec.d.ts +17 -0
  86. package/lib/features/change-bounds/snap.spec.d.ts.map +1 -0
  87. package/lib/features/change-bounds/snap.spec.js +82 -0
  88. package/lib/features/change-bounds/snap.spec.js.map +1 -0
  89. package/lib/features/command-palette/command-palette-tool.js +3 -3
  90. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  91. package/lib/features/command-palette/di.config.d.ts +2 -2
  92. package/lib/features/command-palette/di.config.d.ts.map +1 -1
  93. package/lib/features/command-palette/di.config.js +6 -6
  94. package/lib/features/command-palette/di.config.js.map +1 -1
  95. package/lib/features/command-palette/server-command-palette-provider.d.ts +1 -1
  96. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
  97. package/lib/features/command-palette/server-command-palette-provider.js +13 -10
  98. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
  99. package/lib/features/context-menu/delete-element-context-menu.d.ts +17 -1
  100. package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -1
  101. package/lib/features/context-menu/delete-element-context-menu.js +4 -4
  102. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
  103. package/lib/features/context-menu/di.config.d.ts +1 -1
  104. package/lib/features/context-menu/di.config.d.ts.map +1 -1
  105. package/lib/features/context-menu/di.config.js +8 -7
  106. package/lib/features/context-menu/di.config.js.map +1 -1
  107. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +33 -1
  108. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
  109. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +41 -28
  110. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
  111. package/lib/features/context-menu/server-context-menu-provider.d.ts +1 -1
  112. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
  113. package/lib/features/context-menu/server-context-menu-provider.js +8 -7
  114. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
  115. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +12 -15
  116. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
  117. package/lib/features/copy-paste/copy-paste-context-menu.js +26 -33
  118. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
  119. package/lib/features/copy-paste/copy-paste-handler.d.ts +1 -1
  120. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  121. package/lib/features/copy-paste/copy-paste-handler.js +10 -11
  122. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  123. package/lib/features/copy-paste/di.config.d.ts +1 -1
  124. package/lib/features/copy-paste/di.config.d.ts.map +1 -1
  125. package/lib/features/copy-paste/di.config.js +5 -7
  126. package/lib/features/copy-paste/di.config.js.map +1 -1
  127. package/lib/features/decoration/decoration-placer.d.ts +1 -1
  128. package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
  129. package/lib/features/decoration/decoration-placer.js +19 -3
  130. package/lib/features/decoration/decoration-placer.js.map +1 -1
  131. package/lib/features/decoration/di.config.d.ts +2 -2
  132. package/lib/features/decoration/di.config.d.ts.map +1 -1
  133. package/lib/features/decoration/di.config.js +4 -4
  134. package/lib/features/decoration/di.config.js.map +1 -1
  135. package/lib/features/edit-label/di.config.d.ts +1 -1
  136. package/lib/features/edit-label/di.config.d.ts.map +1 -1
  137. package/lib/features/edit-label/di.config.js +5 -5
  138. package/lib/features/edit-label/di.config.js.map +1 -1
  139. package/lib/features/edit-label/edit-label-tool.d.ts.map +1 -1
  140. package/lib/features/edit-label/edit-label-tool.js +2 -2
  141. package/lib/features/edit-label/edit-label-tool.js.map +1 -1
  142. package/lib/features/edit-label/edit-label-validator.d.ts +4 -6
  143. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
  144. package/lib/features/edit-label/edit-label-validator.js +11 -13
  145. package/lib/features/edit-label/edit-label-validator.js.map +1 -1
  146. package/lib/features/hints/di.config.js +4 -4
  147. package/lib/features/hints/di.config.js.map +1 -1
  148. package/lib/features/hints/type-hints.d.ts +15 -5
  149. package/lib/features/hints/type-hints.d.ts.map +1 -1
  150. package/lib/features/hints/type-hints.js +29 -26
  151. package/lib/features/hints/type-hints.js.map +1 -1
  152. package/lib/features/hover/di.config.d.ts +1 -1
  153. package/lib/features/hover/di.config.d.ts.map +1 -1
  154. package/lib/features/hover/di.config.js +14 -10
  155. package/lib/features/hover/di.config.js.map +1 -1
  156. package/lib/features/hover/hover.d.ts +16 -4
  157. package/lib/features/hover/hover.d.ts.map +1 -1
  158. package/lib/features/hover/hover.js +42 -4
  159. package/lib/features/hover/hover.js.map +1 -1
  160. package/lib/features/layout/di.config.d.ts +1 -1
  161. package/lib/features/layout/di.config.d.ts.map +1 -1
  162. package/lib/features/layout/di.config.js +6 -4
  163. package/lib/features/layout/di.config.js.map +1 -1
  164. package/lib/features/layout/freeform-layout.d.ts +17 -1
  165. package/lib/features/layout/freeform-layout.d.ts.map +1 -1
  166. package/lib/features/layout/freeform-layout.js +4 -4
  167. package/lib/features/layout/freeform-layout.js.map +1 -1
  168. package/lib/features/layout/hbox-layout.d.ts +41 -0
  169. package/lib/features/layout/hbox-layout.d.ts.map +1 -0
  170. package/lib/features/layout/hbox-layout.js +189 -0
  171. package/lib/features/layout/hbox-layout.js.map +1 -0
  172. package/lib/features/layout/layout-commands.d.ts +65 -38
  173. package/lib/features/layout/layout-commands.d.ts.map +1 -1
  174. package/lib/features/layout/layout-commands.js +90 -67
  175. package/lib/features/layout/layout-commands.js.map +1 -1
  176. package/lib/features/layout/layout-commands.spec.d.ts.map +1 -1
  177. package/lib/features/layout/layout-commands.spec.js +35 -23
  178. package/lib/features/layout/layout-commands.spec.js.map +1 -1
  179. package/lib/features/layout/vbox-layout.d.ts +17 -1
  180. package/lib/features/layout/vbox-layout.d.ts.map +1 -1
  181. package/lib/features/layout/vbox-layout.js +9 -8
  182. package/lib/features/layout/vbox-layout.js.map +1 -1
  183. package/lib/features/model-source-watcher/di.config.js +1 -1
  184. package/lib/features/model-source-watcher/di.config.js.map +1 -1
  185. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +1 -1
  186. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
  187. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +11 -11
  188. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
  189. package/lib/features/mouse-tool/di.config.d.ts +1 -1
  190. package/lib/features/mouse-tool/di.config.d.ts.map +1 -1
  191. package/lib/features/mouse-tool/di.config.js +2 -2
  192. package/lib/features/mouse-tool/di.config.js.map +1 -1
  193. package/lib/features/mouse-tool/mouse-tool.d.ts +9 -5
  194. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
  195. package/lib/features/mouse-tool/mouse-tool.js +11 -53
  196. package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
  197. package/lib/features/navigation/di.config.js +4 -4
  198. package/lib/features/navigation/di.config.js.map +1 -1
  199. package/lib/features/navigation/navigation-action-handler.d.ts +31 -16
  200. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
  201. package/lib/features/navigation/navigation-action-handler.js +52 -68
  202. package/lib/features/navigation/navigation-action-handler.js.map +1 -1
  203. package/lib/features/navigation/navigation-target-resolver.d.ts +3 -3
  204. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
  205. package/lib/features/navigation/navigation-target-resolver.js +8 -9
  206. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  207. package/lib/features/navigation/navigation-target-resolver.spec.js +12 -12
  208. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
  209. package/lib/features/reconnect/model.d.ts +1 -1
  210. package/lib/features/reconnect/model.d.ts.map +1 -1
  211. package/lib/features/reconnect/model.js +1 -1
  212. package/lib/features/reconnect/model.js.map +1 -1
  213. package/lib/features/save/di.config.d.ts +1 -1
  214. package/lib/features/save/di.config.d.ts.map +1 -1
  215. package/lib/features/save/di.config.js +3 -3
  216. package/lib/features/save/di.config.js.map +1 -1
  217. package/lib/features/save/save-keylistener.d.ts +1 -1
  218. package/lib/features/save/save-keylistener.d.ts.map +1 -1
  219. package/lib/features/save/save-keylistener.js +3 -3
  220. package/lib/features/save/save-keylistener.js.map +1 -1
  221. package/lib/features/select/di.config.d.ts +1 -1
  222. package/lib/features/select/di.config.d.ts.map +1 -1
  223. package/lib/features/select/di.config.js +7 -8
  224. package/lib/features/select/di.config.js.map +1 -1
  225. package/lib/features/select/select-feedback-action.d.ts +26 -22
  226. package/lib/features/select/select-feedback-action.d.ts.map +1 -1
  227. package/lib/features/select/select-feedback-action.js +19 -46
  228. package/lib/features/select/select-feedback-action.js.map +1 -1
  229. package/lib/features/select/select-mouse-listener.d.ts +1 -1
  230. package/lib/features/select/select-mouse-listener.d.ts.map +1 -1
  231. package/lib/features/select/select-mouse-listener.js +1 -1
  232. package/lib/features/select/select-mouse-listener.js.map +1 -1
  233. package/lib/features/select/selection-service.d.ts +3 -3
  234. package/lib/features/select/selection-service.d.ts.map +1 -1
  235. package/lib/features/select/selection-service.js +28 -23
  236. package/lib/features/select/selection-service.js.map +1 -1
  237. package/lib/features/select/selection-service.spec.js +28 -25
  238. package/lib/features/select/selection-service.spec.js.map +1 -1
  239. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +17 -9
  240. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
  241. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +67 -37
  242. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
  243. package/lib/features/tool-feedback/creation-tool-feedback.d.ts +24 -12
  244. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
  245. package/lib/features/tool-feedback/creation-tool-feedback.js +88 -35
  246. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
  247. package/lib/features/tool-feedback/css-feedback.d.ts +17 -10
  248. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
  249. package/lib/features/tool-feedback/css-feedback.js +42 -38
  250. package/lib/features/tool-feedback/css-feedback.js.map +1 -1
  251. package/lib/features/tool-feedback/di.config.d.ts +1 -1
  252. package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
  253. package/lib/features/tool-feedback/di.config.js +18 -18
  254. package/lib/features/tool-feedback/di.config.js.map +1 -1
  255. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +44 -22
  256. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
  257. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +140 -114
  258. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
  259. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +2 -2
  260. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
  261. package/lib/features/tool-feedback/feedback-action-dispatcher.js +4 -4
  262. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
  263. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +21 -10
  264. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
  265. package/lib/features/tool-feedback/marquee-tool-feedback.js +44 -18
  266. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
  267. package/lib/features/tool-feedback/model.d.ts +1 -2
  268. package/lib/features/tool-feedback/model.d.ts.map +1 -1
  269. package/lib/features/tool-feedback/model.js +1 -1
  270. package/lib/features/tool-feedback/model.js.map +1 -1
  271. package/lib/features/tool-feedback/view.d.ts +1 -1
  272. package/lib/features/tool-feedback/view.d.ts.map +1 -1
  273. package/lib/features/tool-feedback/view.js +22 -5
  274. package/lib/features/tool-feedback/view.js.map +1 -1
  275. package/lib/features/tool-palette/di.config.d.ts +1 -1
  276. package/lib/features/tool-palette/di.config.d.ts.map +1 -1
  277. package/lib/features/tool-palette/di.config.js +5 -4
  278. package/lib/features/tool-palette/di.config.js.map +1 -1
  279. package/lib/features/tool-palette/tool-palette.d.ts +10 -7
  280. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  281. package/lib/features/tool-palette/tool-palette.js +39 -32
  282. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  283. package/lib/features/tools/base-glsp-tool.d.ts +3 -3
  284. package/lib/features/tools/base-glsp-tool.d.ts.map +1 -1
  285. package/lib/features/tools/base-glsp-tool.js +11 -11
  286. package/lib/features/tools/base-glsp-tool.js.map +1 -1
  287. package/lib/features/tools/change-bounds-tool.d.ts +7 -9
  288. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
  289. package/lib/features/tools/change-bounds-tool.js +48 -71
  290. package/lib/features/tools/change-bounds-tool.js.map +1 -1
  291. package/lib/features/tools/delete-tool.d.ts +1 -1
  292. package/lib/features/tools/delete-tool.d.ts.map +1 -1
  293. package/lib/features/tools/delete-tool.js +17 -17
  294. package/lib/features/tools/delete-tool.js.map +1 -1
  295. package/lib/features/tools/di.config.d.ts +9 -2
  296. package/lib/features/tools/di.config.d.ts.map +1 -1
  297. package/lib/features/tools/di.config.js +26 -15
  298. package/lib/features/tools/di.config.js.map +1 -1
  299. package/lib/features/tools/edge-creation-tool.d.ts +1 -1
  300. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
  301. package/lib/features/tools/edge-creation-tool.js +28 -21
  302. package/lib/features/tools/edge-creation-tool.js.map +1 -1
  303. package/lib/features/tools/edge-edit-tool.d.ts +3 -2
  304. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
  305. package/lib/features/tools/edge-edit-tool.js +41 -36
  306. package/lib/features/tools/edge-edit-tool.js.map +1 -1
  307. package/lib/features/{tool-palette/palette-item.d.ts → tools/enable-default-tools-on-focus-loss.d.ts} +11 -11
  308. package/lib/features/tools/enable-default-tools-on-focus-loss.d.ts.map +1 -0
  309. package/lib/features/tools/enable-default-tools-on-focus-loss.js +29 -0
  310. package/lib/features/tools/enable-default-tools-on-focus-loss.js.map +1 -0
  311. package/lib/features/tools/marquee-behavior.d.ts +1 -1
  312. package/lib/features/tools/marquee-behavior.js +2 -2
  313. package/lib/features/tools/marquee-behavior.js.map +1 -1
  314. package/lib/features/tools/marquee-behavior.spec.js +63 -63
  315. package/lib/features/tools/marquee-behavior.spec.js.map +1 -1
  316. package/lib/features/tools/marquee-mouse-tool.d.ts +1 -1
  317. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
  318. package/lib/features/tools/marquee-mouse-tool.js +20 -20
  319. package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
  320. package/lib/features/tools/marquee-tool.d.ts +1 -1
  321. package/lib/features/tools/marquee-tool.d.ts.map +1 -1
  322. package/lib/features/tools/marquee-tool.js +4 -4
  323. package/lib/features/tools/marquee-tool.js.map +1 -1
  324. package/lib/features/tools/model.d.ts +3 -2
  325. package/lib/features/tools/model.d.ts.map +1 -1
  326. package/lib/features/tools/model.js +0 -15
  327. package/lib/features/tools/model.js.map +1 -1
  328. package/lib/features/tools/node-creation-tool.d.ts +1 -1
  329. package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
  330. package/lib/features/tools/node-creation-tool.js +17 -17
  331. package/lib/features/tools/node-creation-tool.js.map +1 -1
  332. package/lib/features/tools/view.d.ts.map +1 -1
  333. package/lib/features/tools/view.js +2 -2
  334. package/lib/features/tools/view.js.map +1 -1
  335. package/lib/features/validation/di.config.d.ts +1 -1
  336. package/lib/features/validation/di.config.d.ts.map +1 -1
  337. package/lib/features/validation/di.config.js +7 -7
  338. package/lib/features/validation/di.config.js.map +1 -1
  339. package/lib/features/validation/marker-navigator.d.ts +16 -8
  340. package/lib/features/validation/marker-navigator.d.ts.map +1 -1
  341. package/lib/features/validation/marker-navigator.js +39 -37
  342. package/lib/features/validation/marker-navigator.js.map +1 -1
  343. package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -1
  344. package/lib/features/validation/marker-navigator.spec.js +23 -37
  345. package/lib/features/validation/marker-navigator.spec.js.map +1 -1
  346. package/lib/features/validation/validate.d.ts +10 -12
  347. package/lib/features/validation/validate.d.ts.map +1 -1
  348. package/lib/features/validation/validate.js +42 -41
  349. package/lib/features/validation/validate.js.map +1 -1
  350. package/lib/features/viewport/di.config.d.ts +1 -1
  351. package/lib/features/viewport/di.config.d.ts.map +1 -1
  352. package/lib/features/viewport/di.config.js +7 -7
  353. package/lib/features/viewport/di.config.js.map +1 -1
  354. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +1 -1
  355. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
  356. package/lib/features/viewport/glsp-scroll-mouse-listener.js +3 -3
  357. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
  358. package/lib/index.d.ts +6 -7
  359. package/lib/index.d.ts.map +1 -1
  360. package/lib/index.js +13 -9
  361. package/lib/index.js.map +1 -1
  362. package/lib/lib/model.d.ts +3 -2
  363. package/lib/lib/model.d.ts.map +1 -1
  364. package/lib/lib/model.js +0 -15
  365. package/lib/lib/model.js.map +1 -1
  366. package/lib/model-source/glsp-diagram-server.d.ts +5 -5
  367. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
  368. package/lib/model-source/glsp-diagram-server.js +7 -6
  369. package/lib/model-source/glsp-diagram-server.js.map +1 -1
  370. package/lib/sprotty-reexport.d.ts +174 -0
  371. package/lib/sprotty-reexport.d.ts.map +1 -0
  372. package/lib/sprotty-reexport.js +299 -0
  373. package/lib/sprotty-reexport.js.map +1 -0
  374. package/lib/utils/argument-utils.js +5 -5
  375. package/lib/utils/argument-utils.js.map +1 -1
  376. package/lib/utils/layout-utils.d.ts +3 -3
  377. package/lib/utils/layout-utils.d.ts.map +1 -1
  378. package/lib/utils/smodel-util.d.ts +117 -11
  379. package/lib/utils/smodel-util.d.ts.map +1 -1
  380. package/lib/utils/smodel-util.js +142 -37
  381. package/lib/utils/smodel-util.js.map +1 -1
  382. package/lib/utils/viewpoint-util.d.ts +3 -3
  383. package/lib/utils/viewpoint-util.d.ts.map +1 -1
  384. package/lib/utils/viewpoint-util.js +19 -3
  385. package/lib/utils/viewpoint-util.js.map +1 -1
  386. package/lib/views/base-view-module.js +19 -19
  387. package/lib/views/base-view-module.js.map +1 -1
  388. package/lib/views/compartments.js +2 -2
  389. package/lib/views/compartments.js.map +1 -1
  390. package/lib/views/glsp-edge-view.d.ts +1 -1
  391. package/lib/views/glsp-edge-view.d.ts.map +1 -1
  392. package/lib/views/glsp-edge-view.js +1 -1
  393. package/lib/views/glsp-edge-view.js.map +1 -1
  394. package/lib/views/index.js +6 -2
  395. package/lib/views/index.js.map +1 -1
  396. package/lib/views/issue-marker-view.d.ts.map +1 -1
  397. package/lib/views/issue-marker-view.js +3 -3
  398. package/lib/views/issue-marker-view.js.map +1 -1
  399. package/lib/views/rounded-corner-view.d.ts.map +1 -1
  400. package/lib/views/rounded-corner-view.js +2 -2
  401. package/lib/views/rounded-corner-view.js.map +1 -1
  402. package/package.json +8 -18
  403. package/src/base/action-dispatcher.ts +26 -16
  404. package/src/base/actions/focus-change-action.ts +25 -8
  405. package/src/base/actions/sprotty-actions.ts +26 -0
  406. package/src/base/auto-complete/auto-complete-actions.ts +7 -5
  407. package/src/base/auto-complete/auto-complete-widget.ts +15 -13
  408. package/src/base/command-stack.ts +7 -6
  409. package/src/base/container-modules.ts +2 -1
  410. package/src/base/di.config.ts +4 -5
  411. package/src/base/drag-aware-mouse-listener.ts +4 -4
  412. package/src/base/editor-context-service.ts +19 -7
  413. package/src/base/focus-tracker.ts +5 -4
  414. package/src/base/model/model-registry.ts +2 -2
  415. package/src/base/model/update-model-command.ts +9 -10
  416. package/src/base/model-initialization-constraint.ts +9 -11
  417. package/src/base/selection-clearing-mouse-listener.ts +1 -1
  418. package/src/base/tool-manager/glsp-tool-manager.ts +9 -9
  419. package/src/base/tool-manager/tool-actions.ts +37 -0
  420. package/src/base/types.ts +31 -24
  421. package/src/base/view/view-registry.ts +2 -2
  422. package/src/features/change-bounds/model.ts +5 -5
  423. package/src/features/change-bounds/movement-restrictor.ts +3 -3
  424. package/src/features/change-bounds/snap.spec.ts +89 -0
  425. package/src/features/change-bounds/snap.ts +86 -2
  426. package/src/features/command-palette/di.config.ts +5 -7
  427. package/src/features/command-palette/server-command-palette-provider.ts +9 -8
  428. package/src/features/context-menu/delete-element-context-menu.ts +6 -6
  429. package/src/features/context-menu/di.config.ts +3 -2
  430. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +45 -17
  431. package/src/features/context-menu/server-context-menu-provider.ts +7 -6
  432. package/src/features/copy-paste/copy-paste-context-menu.ts +30 -23
  433. package/src/features/copy-paste/copy-paste-handler.ts +6 -6
  434. package/src/features/copy-paste/di.config.ts +7 -15
  435. package/src/features/decoration/decoration-placer.ts +4 -4
  436. package/src/features/decoration/di.config.ts +3 -5
  437. package/src/features/edit-label/di.config.ts +4 -5
  438. package/src/features/edit-label/edit-label-tool.ts +1 -2
  439. package/src/features/edit-label/edit-label-validator.ts +6 -10
  440. package/src/features/hints/di.config.ts +3 -3
  441. package/src/features/hints/type-hints.ts +33 -18
  442. package/src/features/hover/di.config.ts +8 -2
  443. package/src/features/hover/hover.ts +53 -11
  444. package/src/features/layout/di.config.ts +4 -2
  445. package/src/features/layout/freeform-layout.ts +6 -15
  446. package/src/features/layout/hbox-layout.ts +256 -0
  447. package/src/features/layout/layout-commands.spec.ts +38 -22
  448. package/src/features/layout/layout-commands.ts +134 -60
  449. package/src/features/layout/vbox-layout.ts +20 -20
  450. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +7 -12
  451. package/src/features/mouse-tool/di.config.ts +3 -4
  452. package/src/features/mouse-tool/mouse-tool.ts +18 -59
  453. package/src/features/navigation/navigation-action-handler.ts +76 -42
  454. package/src/features/navigation/navigation-target-resolver.spec.ts +3 -3
  455. package/src/features/navigation/navigation-target-resolver.ts +8 -13
  456. package/src/features/reconnect/model.ts +2 -2
  457. package/src/features/save/di.config.ts +2 -3
  458. package/src/features/save/save-keylistener.ts +3 -3
  459. package/src/features/select/di.config.ts +6 -8
  460. package/src/features/select/select-feedback-action.ts +18 -46
  461. package/src/features/select/select-mouse-listener.ts +1 -2
  462. package/src/features/select/selection-service.spec.ts +11 -8
  463. package/src/features/select/selection-service.ts +17 -12
  464. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +51 -21
  465. package/src/features/tool-feedback/creation-tool-feedback.ts +79 -30
  466. package/src/features/tool-feedback/css-feedback.ts +40 -37
  467. package/src/features/tool-feedback/di.config.ts +4 -5
  468. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +132 -88
  469. package/src/features/tool-feedback/feedback-action-dispatcher.ts +4 -3
  470. package/src/features/tool-feedback/marquee-tool-feedback.ts +38 -13
  471. package/src/features/tool-feedback/model.ts +1 -3
  472. package/src/features/tool-feedback/view.tsx +3 -3
  473. package/src/features/tool-palette/di.config.ts +3 -2
  474. package/src/features/tool-palette/tool-palette.ts +35 -19
  475. package/src/features/tools/base-glsp-tool.ts +11 -11
  476. package/src/features/tools/change-bounds-tool.ts +37 -67
  477. package/src/features/tools/delete-tool.ts +9 -9
  478. package/src/features/tools/di.config.ts +23 -12
  479. package/src/features/tools/edge-creation-tool.ts +21 -12
  480. package/src/features/tools/edge-edit-tool.ts +25 -21
  481. package/src/features/tools/enable-default-tools-on-focus-loss.ts +33 -0
  482. package/src/features/tools/marquee-behavior.ts +2 -2
  483. package/src/features/tools/marquee-mouse-tool.ts +13 -14
  484. package/src/features/tools/marquee-tool.ts +3 -3
  485. package/src/features/tools/model.ts +4 -3
  486. package/src/features/tools/node-creation-tool.ts +8 -8
  487. package/src/features/tools/view.tsx +2 -3
  488. package/src/features/validation/di.config.ts +4 -5
  489. package/src/features/validation/marker-navigator.spec.ts +4 -2
  490. package/src/features/validation/marker-navigator.ts +47 -25
  491. package/src/features/validation/validate.ts +31 -24
  492. package/src/features/viewport/di.config.ts +1 -2
  493. package/src/features/viewport/glsp-scroll-mouse-listener.ts +5 -5
  494. package/src/index.ts +6 -6
  495. package/src/lib/model.ts +4 -4
  496. package/src/model-source/glsp-diagram-server.ts +14 -14
  497. package/src/sprotty-reexport.ts +283 -0
  498. package/src/utils/layout-utils.ts +3 -3
  499. package/src/utils/smodel-util.ts +139 -43
  500. package/src/utils/viewpoint-util.ts +5 -14
  501. package/src/views/compartments.tsx +1 -1
  502. package/src/views/glsp-edge-view.tsx +4 -4
  503. package/src/views/issue-marker-view.tsx +2 -2
  504. package/src/views/rounded-corner-view.tsx +2 -3
  505. package/lib/features/tool-palette/palette-item.d.ts.map +0 -1
  506. package/lib/features/tool-palette/palette-item.js.map +0 -1
  507. package/lib/protocol-reexport.d.ts +0 -45
  508. package/lib/protocol-reexport.d.ts.map +0 -1
  509. package/lib/protocol-reexport.js +0 -75
  510. package/lib/protocol-reexport.js.map +0 -1
  511. package/src/features/tool-palette/palette-item.ts +0 -38
  512. 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
@@ -19,6 +19,8 @@ import {
19
19
  ClosePopupActionHandler,
20
20
  configureActionHandler,
21
21
  configureCommand,
22
+ EnableDefaultToolsAction,
23
+ EnableToolsAction,
22
24
  FitToScreenCommand,
23
25
  HoverFeedbackCommand,
24
26
  HoverKeyListener,
@@ -35,7 +37,8 @@ import { GlspHoverMouseListener } from './hover';
35
37
 
36
38
  const glspHoverModule = new ContainerModule((bind, _unbind, isBound) => {
37
39
  bind(TYPES.PopupVNodePostprocessor).to(PopupPositionUpdater).inSingletonScope();
38
- bind(TYPES.MouseListener).to(GlspHoverMouseListener);
40
+ bind(GlspHoverMouseListener).toSelf().inSingletonScope();
41
+ bind(TYPES.MouseListener).toService(GlspHoverMouseListener);
39
42
  bind(TYPES.PopupMouseListener).to(PopupHoverMouseListener);
40
43
  bind(TYPES.KeyListener).to(HoverKeyListener);
41
44
  bind<HoverState>(TYPES.HoverState).toConstantValue({
@@ -55,6 +58,9 @@ const glspHoverModule = new ContainerModule((bind, _unbind, isBound) => {
55
58
  configureActionHandler(context, SetViewportCommand.KIND, ClosePopupActionHandler);
56
59
  configureActionHandler(context, MoveCommand.KIND, ClosePopupActionHandler);
57
60
  configureActionHandler(context, FocusStateChangedAction.KIND, ClosePopupActionHandler);
61
+ configureActionHandler(context, EnableToolsAction.KIND, GlspHoverMouseListener);
62
+ configureActionHandler(context, EnableDefaultToolsAction.KIND, GlspHoverMouseListener);
63
+ configureActionHandler(context, FocusStateChangedAction.KIND, GlspHoverMouseListener);
58
64
  });
59
65
 
60
66
  export default glspHoverModule;
@@ -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
@@ -13,31 +13,73 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { Action, Bounds, RequestPopupModelAction, SetPopupModelAction } from '@eclipse-glsp/protocol';
16
+ import {
17
+ Action,
18
+ Bounds,
19
+ PreRenderedElementSchema,
20
+ RequestPopupModelAction,
21
+ SetPopupModelAction,
22
+ SModelElementSchema,
23
+ SModelRootSchema
24
+ } from '@eclipse-glsp/protocol';
17
25
  import { injectable } from 'inversify';
18
26
  import {
19
27
  EMPTY_ROOT,
28
+ HoverFeedbackAction,
20
29
  HoverMouseListener,
21
- PreRenderedElementSchema,
30
+ IActionHandler,
31
+ ICommand,
22
32
  SIssueMarker,
23
33
  SIssueSeverity,
24
- SModelElement,
25
- SModelElementSchema,
26
- SModelRootSchema
34
+ SModelElement
27
35
  } from 'sprotty';
36
+ import { FocusStateChangedAction } from '../../base/actions/focus-change-action';
37
+ import { EnableDefaultToolsAction, EnableToolsAction } from '../../base/tool-manager/tool-actions';
38
+ import { EdgeCreationTool } from '../tools/edge-creation-tool';
28
39
  import { GIssueMarker } from '../validation/issue-marker';
29
-
30
40
  @injectable()
31
- export class GlspHoverMouseListener extends HoverMouseListener {
32
- protected startMouseOverTimer(target: SModelElement, event: MouseEvent): Promise<Action> {
41
+ export class GlspHoverMouseListener extends HoverMouseListener implements IActionHandler {
42
+ protected enableHover = true;
43
+ /**
44
+ * Stops mouse over timer and remove hover feedback, if focus is lost.
45
+ *
46
+ * This fixes strange effects that appear if the mouse left the element via e.g. a context menu,
47
+ * which explicitly removes the focus of the diagram.
48
+ * @see SelectionServiceAwareContextMenuMouseListener
49
+ * @param action should be a `FocusStateChangedAction`
50
+ * @returns a `HoverFeedbackAction` resetting the state, if the specified action indicates lost focus
51
+ */
52
+ handle(action: Action): void | Action | ICommand {
53
+ if (FocusStateChangedAction.is(action) && !action.hasFocus) {
54
+ this.stopMouseOverTimer();
55
+ if (this.lastHoverFeedbackElementId) {
56
+ const previousTargetId = this.lastHoverFeedbackElementId;
57
+ this.lastHoverFeedbackElementId = undefined;
58
+ return HoverFeedbackAction.create({ mouseoverElement: previousTargetId, mouseIsOver: false });
59
+ }
60
+ } else if (EnableToolsAction.is(action)) {
61
+ this.enableHover = !(action as EnableToolsAction).toolIds.includes(EdgeCreationTool.ID);
62
+ } else if (EnableDefaultToolsAction.is(action)) {
63
+ this.enableHover = true;
64
+ }
65
+ }
66
+
67
+ override mouseOver(target: SModelElement, event: MouseEvent): (Action | Promise<Action>)[] {
68
+ if (this.enableHover) {
69
+ return super.mouseOver(target, event);
70
+ }
71
+ return [];
72
+ }
73
+
74
+ protected override startMouseOverTimer(target: SModelElement, event: MouseEvent): Promise<Action> {
33
75
  this.stopMouseOverTimer();
34
76
  return new Promise(resolve => {
35
77
  this.state.mouseOverTimer = window.setTimeout(() => {
36
78
  const popupBounds = this.computePopupBounds(target, { x: event.pageX, y: event.pageY });
37
79
  if (target instanceof GIssueMarker) {
38
- resolve(new SetPopupModelAction(this.createPopupModel(target as GIssueMarker, popupBounds)));
80
+ resolve(SetPopupModelAction.create(this.createPopupModel(target as GIssueMarker, popupBounds)));
39
81
  } else {
40
- resolve(new RequestPopupModelAction(target.id, popupBounds));
82
+ resolve(RequestPopupModelAction.create({ elementId: target.id, bounds: popupBounds }));
41
83
  }
42
84
 
43
85
  this.state.popupOpen = true;
@@ -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
@@ -14,8 +14,9 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
  import { ContainerModule } from 'inversify';
17
- import { configureCommand, configureLayout, VBoxLayouter } from 'sprotty';
17
+ import { configureCommand, configureLayout, HBoxLayouter, VBoxLayouter } from 'sprotty';
18
18
  import { FreeFormLayouter } from './freeform-layout';
19
+ import { HBoxLayouterExt } from './hbox-layout';
19
20
  import { AlignElementsCommand, ResizeElementsCommand } from './layout-commands';
20
21
  import { VBoxLayouterExt } from './vbox-layout';
21
22
 
@@ -24,6 +25,7 @@ const layoutCommandsModule = new ContainerModule((bind, _unbind, isBound, rebind
24
25
  configureCommand({ bind, isBound }, AlignElementsCommand);
25
26
 
26
27
  rebind(VBoxLayouter).to(VBoxLayouterExt);
28
+ rebind(HBoxLayouter).to(HBoxLayouterExt);
27
29
  configureLayout({ bind, isBound }, FreeFormLayouter.KIND, FreeFormLayouter);
28
30
  });
29
31
 
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2021 EclipseSource and others.
2
+ * Copyright (c) 2021-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,18 +13,9 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
+ import { Bounds, Dimension, Point } from '@eclipse-glsp/protocol';
16
17
  import { injectable } from 'inversify';
17
- import {
18
- Bounds,
19
- BoundsData,
20
- Dimension,
21
- isValidDimension,
22
- LayoutContainer,
23
- Point,
24
- SChildElement,
25
- SParentElement,
26
- StatefulLayouter
27
- } from 'sprotty';
18
+ import { BoundsData, LayoutContainer, SChildElement, SParentElement, StatefulLayouter } from 'sprotty';
28
19
  import { AbstractLayout } from 'sprotty/lib/features/bounds/abstract-layout';
29
20
  import { AbstractLayoutOptions } from 'sprotty/lib/features/bounds/layout-options';
30
21
 
@@ -35,7 +26,7 @@ import { AbstractLayoutOptions } from 'sprotty/lib/features/bounds/layout-option
35
26
  export class FreeFormLayouter extends AbstractLayout<AbstractLayoutOptions> {
36
27
  static KIND = 'freeform';
37
28
 
38
- layout(container: SParentElement & LayoutContainer, layouter: StatefulLayouter): void {
29
+ override layout(container: SParentElement & LayoutContainer, layouter: StatefulLayouter): void {
39
30
  const boundsData = layouter.getBoundsData(container);
40
31
  const options = this.getLayoutOptions(container);
41
32
  const childrenSize = this.getChildrenSize(container, options, layouter);
@@ -64,7 +55,7 @@ export class FreeFormLayouter extends AbstractLayout<AbstractLayoutOptions> {
64
55
  let maxY = 0;
65
56
  container.children.forEach(child => {
66
57
  const bounds = layouter.getBoundsData(child).bounds;
67
- if (bounds !== undefined && isValidDimension(bounds)) {
58
+ if (bounds !== undefined && Dimension.isValid(bounds)) {
68
59
  const childMaxX = bounds.x + bounds.width;
69
60
  const childMaxY = bounds.y + bounds.height;
70
61
  maxX = Math.max(maxX, childMaxX);
@@ -97,7 +88,7 @@ export class FreeFormLayouter extends AbstractLayout<AbstractLayoutOptions> {
97
88
  return currentOffset;
98
89
  }
99
90
 
100
- protected getFinalContainerBounds(
91
+ protected override getFinalContainerBounds(
101
92
  container: SParentElement & LayoutContainer,
102
93
  lastOffset: Point,
103
94
  options: AbstractLayoutOptions,
@@ -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,16 +37,12 @@ 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';
@@ -69,12 +73,12 @@ class MockActionDispatcher implements IActionDispatcher {
69
73
 
70
74
  const container = new Container();
71
75
  container.load(defaultModule);
72
- container.bind(GLSP_TYPES.IFeedbackActionDispatcher).to(FeedbackActionDispatcher).inSingletonScope();
76
+ container.bind(TYPES.IFeedbackActionDispatcher).to(FeedbackActionDispatcher).inSingletonScope();
73
77
  container.bind(SelectionService).toSelf().inSingletonScope();
74
- container.bind(GLSP_TYPES.SelectionService).toService(SelectionService);
78
+ container.bind(TYPES.SelectionService).toService(SelectionService);
75
79
  container.rebind(TYPES.IModelFactory).to(SGraphFactory).inSingletonScope();
76
80
  const graphFactory = container.get<SGraphFactory>(TYPES.IModelFactory);
77
- const selectionService = container.get<SelectionService>(GLSP_TYPES.SelectionService);
81
+ const selectionService = container.get<SelectionService>(TYPES.SelectionService);
78
82
 
79
83
  const actionDispatcher = new MockActionDispatcher();
80
84
 
@@ -128,7 +132,7 @@ describe('AlignElementsCommand', () => {
128
132
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
129
133
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
130
134
  ]);
131
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Left);
135
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Left });
132
136
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
133
137
  command.execute(newContext(newModel));
134
138
 
@@ -148,7 +152,7 @@ describe('AlignElementsCommand', () => {
148
152
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
149
153
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
150
154
  ]);
151
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Right);
155
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Right });
152
156
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
153
157
  command.execute(newContext(newModel));
154
158
 
@@ -168,7 +172,7 @@ describe('AlignElementsCommand', () => {
168
172
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
169
173
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
170
174
  ]);
171
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Center);
175
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Center });
172
176
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
173
177
  command.execute(newContext(newModel));
174
178
 
@@ -188,7 +192,7 @@ describe('AlignElementsCommand', () => {
188
192
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
189
193
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
190
194
  ]);
191
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Top);
195
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Top });
192
196
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
193
197
  command.execute(newContext(newModel));
194
198
 
@@ -208,7 +212,7 @@ describe('AlignElementsCommand', () => {
208
212
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
209
213
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
210
214
  ]);
211
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Bottom);
215
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Bottom });
212
216
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
213
217
  command.execute(newContext(newModel));
214
218
 
@@ -228,7 +232,7 @@ describe('AlignElementsCommand', () => {
228
232
  { elementId: 'node2', newPosition: { x: 222, y: 222 }, newSize: defaultSize },
229
233
  { elementId: 'node3', newPosition: { x: 333, y: 333 }, newSize: defaultSize }
230
234
  ]);
231
- const action = new AlignElementsAction(['node1', 'node2', 'node3'], Alignment.Middle);
235
+ const action = AlignElementsAction.create({ elementIds: ['node1', 'node2', 'node3'], alignment: Alignment.Middle });
232
236
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
233
237
  command.execute(newContext(newModel));
234
238
 
@@ -250,7 +254,11 @@ describe('ResizeElementsCommand', () => {
250
254
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
251
255
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
252
256
  ]);
253
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Width, Reduce.last);
257
+ const action = ResizeElementsAction.create({
258
+ elementIds: ['node1', 'node2', 'node3'],
259
+ dimension: ResizeDimension.Width,
260
+ reductionFunction: Reduce.last
261
+ });
254
262
  const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
255
263
  command.execute(newContext(newModel));
256
264
 
@@ -271,7 +279,11 @@ describe('ResizeElementsCommand', () => {
271
279
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
272
280
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
273
281
  ]);
274
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Height, Reduce.last);
282
+ const action = ResizeElementsAction.create({
283
+ elementIds: ['node1', 'node2', 'node3'],
284
+ dimension: ResizeDimension.Height,
285
+ reductionFunction: Reduce.last
286
+ });
275
287
  const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
276
288
  command.execute(newContext(newModel));
277
289
 
@@ -292,7 +304,11 @@ describe('ResizeElementsCommand', () => {
292
304
  { elementId: 'node2', newPosition: { x: 100, y: 200 }, newSize: { height: 20, width: 20 } },
293
305
  { elementId: 'node3', newPosition: { x: 100, y: 300 }, newSize: { height: 30, width: 30 } }
294
306
  ]);
295
- const action = new ResizeElementsAction(['node1', 'node2', 'node3'], ResizeDimension.Width_And_Height, Reduce.last);
307
+ const action = ResizeElementsAction.create({
308
+ elementIds: ['node1', 'node2', 'node3'],
309
+ dimension: ResizeDimension.Width_And_Height,
310
+ reductionFunction: Reduce.last
311
+ });
296
312
  const command = new ResizeElementsCommand(action, actionDispatcher, selectionService);
297
313
  command.execute(newContext(newModel));
298
314
 
@@ -308,7 +324,7 @@ describe('ResizeElementsCommand', () => {
308
324
  });
309
325
 
310
326
  function initModel(elementAndBounds: ElementAndBounds[]): SModelRoot {
311
- const mySetBoundsAction = new SetBoundsAction(elementAndBounds);
327
+ const mySetBoundsAction = SetBoundsAction.create(elementAndBounds);
312
328
  const setBoundsCommand = new SetBoundsCommand(mySetBoundsAction);
313
329
  return setBoundsCommand.execute(context) as SModelRoot;
314
330
  }