@eclipse-glsp/client 0.9.0-next.d0112315 → 0.9.0-next.f12e3d87

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 (469) hide show
  1. package/README.md +2 -1
  2. package/css/command-palette.css +6 -5
  3. package/css/glsp-sprotty.css +17 -8
  4. package/css/tool-palette.css +14 -14
  5. package/lib/base/action-dispatcher.d.ts.map +1 -1
  6. package/lib/base/action-dispatcher.js +39 -60
  7. package/lib/base/action-dispatcher.js.map +1 -1
  8. package/lib/base/actions/context-actions.d.ts +1 -1
  9. package/lib/base/actions/context-actions.d.ts.map +1 -1
  10. package/lib/base/actions/context-actions.js +11 -18
  11. package/lib/base/actions/context-actions.js.map +1 -1
  12. package/lib/base/actions/edit-mode-action.d.ts.map +1 -1
  13. package/lib/base/actions/edit-mode-action.js +12 -17
  14. package/lib/base/actions/edit-mode-action.js.map +1 -1
  15. package/lib/base/actions/edit-validation-actions.d.ts +1 -1
  16. package/lib/base/actions/edit-validation-actions.d.ts.map +1 -1
  17. package/lib/base/actions/edit-validation-actions.js +23 -26
  18. package/lib/base/actions/edit-validation-actions.js.map +1 -1
  19. package/lib/base/actions/focus-change-action.js +4 -5
  20. package/lib/base/actions/focus-change-action.js.map +1 -1
  21. package/lib/base/args.d.ts +1 -1
  22. package/lib/base/args.d.ts.map +1 -1
  23. package/lib/base/args.js.map +1 -1
  24. package/lib/base/auto-complete/auto-complete-widget.d.ts +1 -1
  25. package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
  26. package/lib/base/auto-complete/auto-complete-widget.js +100 -150
  27. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
  28. package/lib/base/auto-complete/validation-decorator.d.ts +1 -1
  29. package/lib/base/auto-complete/validation-decorator.js +38 -60
  30. package/lib/base/auto-complete/validation-decorator.js.map +1 -1
  31. package/lib/base/command-stack.d.ts.map +1 -1
  32. package/lib/base/command-stack.js +19 -37
  33. package/lib/base/command-stack.js.map +1 -1
  34. package/lib/base/container-modules.d.ts +40 -0
  35. package/lib/base/container-modules.d.ts.map +1 -0
  36. package/lib/base/container-modules.js +84 -0
  37. package/lib/base/container-modules.js.map +1 -0
  38. package/lib/base/di.config.d.ts +11 -2
  39. package/lib/base/di.config.d.ts.map +1 -1
  40. package/lib/base/di.config.js +37 -37
  41. package/lib/base/di.config.js.map +1 -1
  42. package/lib/base/drag-aware-mouse-listener.d.ts +1 -1
  43. package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -1
  44. package/lib/base/drag-aware-mouse-listener.js +24 -48
  45. package/lib/base/drag-aware-mouse-listener.js.map +1 -1
  46. package/lib/base/editor-context.d.ts.map +1 -1
  47. package/lib/base/editor-context.js +64 -128
  48. package/lib/base/editor-context.js.map +1 -1
  49. package/lib/base/focus-tracker.d.ts.map +1 -1
  50. package/lib/base/focus-tracker.js +19 -24
  51. package/lib/base/focus-tracker.js.map +1 -1
  52. package/lib/base/model/model-registry.js +10 -28
  53. package/lib/base/model/model-registry.js.map +1 -1
  54. package/lib/base/model/update-model-command.d.ts +2 -2
  55. package/lib/base/model/update-model-command.d.ts.map +1 -1
  56. package/lib/base/model/update-model-command.js +67 -88
  57. package/lib/base/model/update-model-command.js.map +1 -1
  58. package/lib/base/model-initialization-constraint.js +31 -52
  59. package/lib/base/model-initialization-constraint.js.map +1 -1
  60. package/lib/base/operations/operation.d.ts +5 -5
  61. package/lib/base/operations/operation.d.ts.map +1 -1
  62. package/lib/base/operations/operation.js +75 -115
  63. package/lib/base/operations/operation.js.map +1 -1
  64. package/lib/base/selection-clearing-mouse-listener.js +10 -28
  65. package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
  66. package/lib/base/source-uri-aware.js +2 -5
  67. package/lib/base/source-uri-aware.js.map +1 -1
  68. package/lib/base/tool-manager/glsp-tool-manager.js +56 -137
  69. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
  70. package/lib/base/types.d.ts +2 -1
  71. package/lib/base/types.d.ts.map +1 -1
  72. package/lib/base/types.js +3 -2
  73. package/lib/base/types.js.map +1 -1
  74. package/lib/base/view/view-registry.js +10 -28
  75. package/lib/base/view/view-registry.js.map +1 -1
  76. package/lib/features/change-bounds/model.d.ts +3 -1
  77. package/lib/features/change-bounds/model.d.ts.map +1 -1
  78. package/lib/features/change-bounds/model.js +20 -31
  79. package/lib/features/change-bounds/model.js.map +1 -1
  80. package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
  81. package/lib/features/change-bounds/movement-restrictor.js +29 -28
  82. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  83. package/lib/features/change-bounds/snap.js +13 -24
  84. package/lib/features/change-bounds/snap.js.map +1 -1
  85. package/lib/features/command-palette/command-palette-tool.js +30 -38
  86. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  87. package/lib/features/command-palette/di.config.js +6 -6
  88. package/lib/features/command-palette/di.config.js.map +1 -1
  89. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
  90. package/lib/features/command-palette/server-command-palette-provider.js +27 -32
  91. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
  92. package/lib/features/context-menu/delete-element-context-menu.js +19 -67
  93. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
  94. package/lib/features/context-menu/di.config.d.ts +1 -1
  95. package/lib/features/context-menu/di.config.d.ts.map +1 -1
  96. package/lib/features/context-menu/di.config.js +8 -8
  97. package/lib/features/context-menu/di.config.js.map +1 -1
  98. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
  99. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +29 -67
  100. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
  101. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
  102. package/lib/features/context-menu/server-context-menu-provider.js +29 -30
  103. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
  104. package/lib/features/copy-paste/copy-paste-actions.d.ts +1 -1
  105. package/lib/features/copy-paste/copy-paste-actions.d.ts.map +1 -1
  106. package/lib/features/copy-paste/copy-paste-actions.js +20 -30
  107. package/lib/features/copy-paste/copy-paste-actions.js.map +1 -1
  108. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +5 -1
  109. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
  110. package/lib/features/copy-paste/copy-paste-context-menu.js +99 -72
  111. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
  112. package/lib/features/copy-paste/copy-paste-handler.d.ts +2 -0
  113. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  114. package/lib/features/copy-paste/copy-paste-handler.js +67 -67
  115. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  116. package/lib/features/copy-paste/di.config.js +10 -10
  117. package/lib/features/copy-paste/di.config.js.map +1 -1
  118. package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
  119. package/lib/features/decoration/decoration-placer.js +13 -32
  120. package/lib/features/decoration/decoration-placer.js.map +1 -1
  121. package/lib/features/decoration/di.config.js +4 -4
  122. package/lib/features/decoration/di.config.js.map +1 -1
  123. package/lib/features/edit-label/di.config.js +7 -7
  124. package/lib/features/edit-label/di.config.js.map +1 -1
  125. package/lib/features/edit-label/edit-label-tool.js +20 -43
  126. package/lib/features/edit-label/edit-label-tool.js.map +1 -1
  127. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
  128. package/lib/features/edit-label/edit-label-validator.js +37 -59
  129. package/lib/features/edit-label/edit-label-validator.js.map +1 -1
  130. package/lib/features/hints/di.config.js +8 -8
  131. package/lib/features/hints/di.config.js.map +1 -1
  132. package/lib/features/hints/model.d.ts +1 -1
  133. package/lib/features/hints/model.d.ts.map +1 -1
  134. package/lib/features/hints/request-type-hints-action.d.ts +1 -1
  135. package/lib/features/hints/request-type-hints-action.d.ts.map +1 -1
  136. package/lib/features/hints/request-type-hints-action.js +12 -14
  137. package/lib/features/hints/request-type-hints-action.js.map +1 -1
  138. package/lib/features/hints/type-hints.d.ts +4 -4
  139. package/lib/features/hints/type-hints.d.ts.map +1 -1
  140. package/lib/features/hints/type-hints.js +91 -133
  141. package/lib/features/hints/type-hints.js.map +1 -1
  142. package/lib/features/hover/di.config.js +7 -7
  143. package/lib/features/hover/di.config.js.map +1 -1
  144. package/lib/features/hover/hover.d.ts.map +1 -1
  145. package/lib/features/hover/hover.js +35 -76
  146. package/lib/features/hover/hover.js.map +1 -1
  147. package/lib/features/layout/di.config.d.ts +5 -1
  148. package/lib/features/layout/di.config.d.ts.map +1 -1
  149. package/lib/features/layout/di.config.js +47 -7
  150. package/lib/features/layout/di.config.js.map +1 -1
  151. package/lib/features/layout/freeform-layout.d.ts +16 -0
  152. package/lib/features/layout/freeform-layout.d.ts.map +1 -0
  153. package/lib/features/layout/freeform-layout.js +107 -0
  154. package/lib/features/layout/freeform-layout.js.map +1 -0
  155. package/lib/features/layout/layout-commands.d.ts +2 -2
  156. package/lib/features/layout/layout-commands.d.ts.map +1 -1
  157. package/lib/features/layout/layout-commands.js +187 -263
  158. package/lib/features/layout/layout-commands.js.map +1 -1
  159. package/lib/features/layout/layout-commands.spec.d.ts +1 -1
  160. package/lib/features/layout/layout-commands.spec.js +94 -88
  161. package/lib/features/layout/layout-commands.spec.js.map +1 -1
  162. package/lib/features/layout/vbox-layout.d.ts +25 -0
  163. package/lib/features/layout/vbox-layout.d.ts.map +1 -0
  164. package/lib/features/layout/vbox-layout.js +187 -0
  165. package/lib/features/layout/vbox-layout.js.map +1 -0
  166. package/lib/features/model-source-watcher/di.config.js +6 -6
  167. package/lib/features/model-source-watcher/di.config.js.map +1 -1
  168. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
  169. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +38 -45
  170. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
  171. package/lib/features/model-source-watcher/model-source-changed-action.d.ts +1 -1
  172. package/lib/features/model-source-watcher/model-source-changed-action.js +4 -5
  173. package/lib/features/model-source-watcher/model-source-changed-action.js.map +1 -1
  174. package/lib/features/mouse-tool/di.config.js +5 -5
  175. package/lib/features/mouse-tool/di.config.js.map +1 -1
  176. package/lib/features/mouse-tool/mouse-tool.d.ts +2 -1
  177. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
  178. package/lib/features/mouse-tool/mouse-tool.js +69 -215
  179. package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
  180. package/lib/features/navigation/di.config.js +9 -9
  181. package/lib/features/navigation/di.config.js.map +1 -1
  182. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
  183. package/lib/features/navigation/navigation-action-handler.js +136 -217
  184. package/lib/features/navigation/navigation-action-handler.js.map +1 -1
  185. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
  186. package/lib/features/navigation/navigation-target-resolver.js +57 -122
  187. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  188. package/lib/features/navigation/navigation-target-resolver.spec.d.ts +1 -1
  189. package/lib/features/navigation/navigation-target-resolver.spec.js +12 -12
  190. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
  191. package/lib/features/rank/model.d.ts +1 -1
  192. package/lib/features/rank/model.js +2 -2
  193. package/lib/features/rank/model.js.map +1 -1
  194. package/lib/features/reconnect/model.d.ts +1 -1
  195. package/lib/features/reconnect/model.d.ts.map +1 -1
  196. package/lib/features/reconnect/model.js +9 -27
  197. package/lib/features/reconnect/model.js.map +1 -1
  198. package/lib/features/save/di.config.d.ts +1 -1
  199. package/lib/features/save/di.config.d.ts.map +1 -1
  200. package/lib/features/save/di.config.js +5 -5
  201. package/lib/features/save/di.config.js.map +1 -1
  202. package/lib/features/save/save.d.ts +1 -1
  203. package/lib/features/save/save.js +11 -31
  204. package/lib/features/save/save.js.map +1 -1
  205. package/lib/features/select/di.config.js +11 -11
  206. package/lib/features/select/di.config.js.map +1 -1
  207. package/lib/features/select/select-feedback-action.d.ts.map +1 -1
  208. package/lib/features/select/select-feedback-action.js +45 -71
  209. package/lib/features/select/select-feedback-action.js.map +1 -1
  210. package/lib/features/select/select-mouse-listener.js +7 -23
  211. package/lib/features/select/select-mouse-listener.js.map +1 -1
  212. package/lib/features/select/selection-service.d.ts.map +1 -1
  213. package/lib/features/select/selection-service.js +132 -234
  214. package/lib/features/select/selection-service.js.map +1 -1
  215. package/lib/features/select/selection-service.spec.js +97 -124
  216. package/lib/features/select/selection-service.spec.js.map +1 -1
  217. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +2 -1
  218. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
  219. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +104 -127
  220. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
  221. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
  222. package/lib/features/tool-feedback/creation-tool-feedback.js +69 -103
  223. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
  224. package/lib/features/tool-feedback/css-feedback.d.ts +3 -1
  225. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
  226. package/lib/features/tool-feedback/css-feedback.js +37 -81
  227. package/lib/features/tool-feedback/css-feedback.js.map +1 -1
  228. package/lib/features/tool-feedback/di.config.d.ts +1 -1
  229. package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
  230. package/lib/features/tool-feedback/di.config.js +27 -27
  231. package/lib/features/tool-feedback/di.config.js.map +1 -1
  232. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +1 -1
  233. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
  234. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +147 -193
  235. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
  236. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +2 -2
  237. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
  238. package/lib/features/tool-feedback/feedback-action-dispatcher.js +36 -58
  239. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
  240. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -1
  241. package/lib/features/tool-feedback/marquee-tool-feedback.js +41 -69
  242. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -1
  243. package/lib/features/tool-feedback/model.d.ts +1 -1
  244. package/lib/features/tool-feedback/model.js +11 -27
  245. package/lib/features/tool-feedback/model.js.map +1 -1
  246. package/lib/features/tool-feedback/view.d.ts +4 -4
  247. package/lib/features/tool-feedback/view.d.ts.map +1 -1
  248. package/lib/features/tool-feedback/view.js +30 -37
  249. package/lib/features/tool-feedback/view.js.map +1 -1
  250. package/lib/features/tool-palette/di.config.js +6 -6
  251. package/lib/features/tool-palette/di.config.js.map +1 -1
  252. package/lib/features/tool-palette/palette-item.d.ts +1 -1
  253. package/lib/features/tool-palette/palette-item.d.ts.map +1 -1
  254. package/lib/features/tool-palette/palette-item.js +6 -5
  255. package/lib/features/tool-palette/palette-item.js.map +1 -1
  256. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  257. package/lib/features/tool-palette/tool-palette.js +182 -259
  258. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  259. package/lib/features/tools/base-glsp-tool.js +37 -44
  260. package/lib/features/tools/base-glsp-tool.js.map +1 -1
  261. package/lib/features/tools/change-bounds-tool.d.ts +3 -2
  262. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
  263. package/lib/features/tools/change-bounds-tool.js +187 -237
  264. package/lib/features/tools/change-bounds-tool.js.map +1 -1
  265. package/lib/features/tools/delete-tool.d.ts.map +1 -1
  266. package/lib/features/tools/delete-tool.js +69 -102
  267. package/lib/features/tools/delete-tool.js.map +1 -1
  268. package/lib/features/tools/di.config.js +18 -18
  269. package/lib/features/tools/di.config.js.map +1 -1
  270. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
  271. package/lib/features/tools/edge-creation-tool.js +60 -85
  272. package/lib/features/tools/edge-creation-tool.js.map +1 -1
  273. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
  274. package/lib/features/tools/edge-edit-tool.js +110 -181
  275. package/lib/features/tools/edge-edit-tool.js.map +1 -1
  276. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -1
  277. package/lib/features/tools/marquee-mouse-tool.js +128 -149
  278. package/lib/features/tools/marquee-mouse-tool.js.map +1 -1
  279. package/lib/features/tools/marquee-tool.d.ts.map +1 -1
  280. package/lib/features/tools/marquee-tool.js +32 -58
  281. package/lib/features/tools/marquee-tool.js.map +1 -1
  282. package/lib/features/tools/model.js +4 -22
  283. package/lib/features/tools/model.js.map +1 -1
  284. package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
  285. package/lib/features/tools/node-creation-tool.js +59 -89
  286. package/lib/features/tools/node-creation-tool.js.map +1 -1
  287. package/lib/features/tools/view.d.ts +1 -1
  288. package/lib/features/tools/view.d.ts.map +1 -1
  289. package/lib/features/tools/view.js +12 -31
  290. package/lib/features/tools/view.js.map +1 -1
  291. package/lib/features/undo-redo/model.d.ts +1 -1
  292. package/lib/features/undo-redo/model.js +8 -12
  293. package/lib/features/undo-redo/model.js.map +1 -1
  294. package/lib/features/validation/di.config.js +12 -12
  295. package/lib/features/validation/di.config.js.map +1 -1
  296. package/lib/features/validation/issue-marker.js +13 -51
  297. package/lib/features/validation/issue-marker.js.map +1 -1
  298. package/lib/features/validation/marker-navigator.d.ts.map +1 -1
  299. package/lib/features/validation/marker-navigator.js +129 -163
  300. package/lib/features/validation/marker-navigator.js.map +1 -1
  301. package/lib/features/validation/marker-navigator.spec.d.ts +1 -1
  302. package/lib/features/validation/marker-navigator.spec.js +79 -73
  303. package/lib/features/validation/marker-navigator.spec.js.map +1 -1
  304. package/lib/features/validation/validate.d.ts +2 -2
  305. package/lib/features/validation/validate.d.ts.map +1 -1
  306. package/lib/features/validation/validate.js +161 -276
  307. package/lib/features/validation/validate.js.map +1 -1
  308. package/lib/features/viewport/di.config.js +10 -10
  309. package/lib/features/viewport/di.config.js.map +1 -1
  310. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -1
  311. package/lib/features/viewport/glsp-scroll-mouse-listener.js +16 -32
  312. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -1
  313. package/lib/index.d.ts +5 -4
  314. package/lib/index.d.ts.map +1 -1
  315. package/lib/index.js +25 -23
  316. package/lib/index.js.map +1 -1
  317. package/lib/lib/model.js +11 -27
  318. package/lib/lib/model.js.map +1 -1
  319. package/lib/model-source/glsp-diagram-server.d.ts +1 -1
  320. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
  321. package/lib/model-source/glsp-diagram-server.js +43 -118
  322. package/lib/model-source/glsp-diagram-server.js.map +1 -1
  323. package/lib/model-source/glsp-server-status.js +10 -27
  324. package/lib/model-source/glsp-server-status.js.map +1 -1
  325. package/lib/utils/argument-utils.d.ts +3 -3
  326. package/lib/utils/argument-utils.d.ts.map +1 -1
  327. package/lib/utils/argument-utils.js +27 -92
  328. package/lib/utils/argument-utils.js.map +1 -1
  329. package/lib/utils/array-utils.d.ts +1 -1
  330. package/lib/utils/array-utils.d.ts.map +1 -1
  331. package/lib/utils/array-utils.js +10 -15
  332. package/lib/utils/array-utils.js.map +1 -1
  333. package/lib/utils/html-utils.js +2 -2
  334. package/lib/utils/html-utils.js.map +1 -1
  335. package/lib/utils/layout-utils.d.ts +1 -1
  336. package/lib/utils/layout-utils.d.ts.map +1 -1
  337. package/lib/utils/layout-utils.js +5 -5
  338. package/lib/utils/layout-utils.js.map +1 -1
  339. package/lib/utils/marker.js +11 -53
  340. package/lib/utils/marker.js.map +1 -1
  341. package/lib/utils/smodel-util.d.ts +3 -3
  342. package/lib/utils/smodel-util.d.ts.map +1 -1
  343. package/lib/utils/smodel-util.js +17 -51
  344. package/lib/utils/smodel-util.js.map +1 -1
  345. package/lib/utils/viewpoint-util.d.ts +1 -1
  346. package/lib/utils/viewpoint-util.d.ts.map +1 -1
  347. package/lib/utils/viewpoint-util.js +16 -16
  348. package/lib/utils/viewpoint-util.js.map +1 -1
  349. package/lib/views/base-view-module.js +9 -9
  350. package/lib/views/base-view-module.js.map +1 -1
  351. package/lib/views/compartments.d.ts +6 -0
  352. package/lib/views/compartments.d.ts.map +1 -0
  353. package/lib/views/compartments.js +43 -0
  354. package/lib/views/compartments.js.map +1 -0
  355. package/lib/views/default-types.js +1 -1
  356. package/lib/views/default-types.js.map +1 -1
  357. package/lib/views/glsp-edge-view.d.ts +1 -2
  358. package/lib/views/glsp-edge-view.d.ts.map +1 -1
  359. package/lib/views/glsp-edge-view.js +32 -62
  360. package/lib/views/glsp-edge-view.js.map +1 -1
  361. package/lib/views/index.d.ts +1 -0
  362. package/lib/views/index.d.ts.map +1 -1
  363. package/lib/views/index.js +1 -0
  364. package/lib/views/index.js.map +1 -1
  365. package/lib/views/issue-marker-view.d.ts +1 -1
  366. package/lib/views/issue-marker-view.d.ts.map +1 -1
  367. package/lib/views/issue-marker-view.js +19 -42
  368. package/lib/views/issue-marker-view.js.map +1 -1
  369. package/lib/views/rounded-corner-view.d.ts +2 -3
  370. package/lib/views/rounded-corner-view.d.ts.map +1 -1
  371. package/lib/views/rounded-corner-view.js +40 -70
  372. package/lib/views/rounded-corner-view.js.map +1 -1
  373. package/lib/views/rounded-corner.d.ts.map +1 -1
  374. package/lib/views/rounded-corner.js +44 -65
  375. package/lib/views/rounded-corner.js.map +1 -1
  376. package/package.json +6 -16
  377. package/src/base/action-dispatcher.ts +1 -2
  378. package/src/base/actions/context-actions.ts +6 -6
  379. package/src/base/actions/edit-mode-action.ts +3 -4
  380. package/src/base/actions/edit-validation-actions.ts +26 -14
  381. package/src/base/actions/focus-change-action.ts +1 -1
  382. package/src/base/args.ts +4 -2
  383. package/src/base/auto-complete/auto-complete-widget.ts +34 -21
  384. package/src/base/auto-complete/validation-decorator.ts +5 -5
  385. package/src/base/command-stack.ts +1 -3
  386. package/src/base/container-modules.ts +113 -0
  387. package/src/base/di.config.ts +31 -16
  388. package/src/base/drag-aware-mouse-listener.ts +1 -3
  389. package/src/base/editor-context.ts +2 -4
  390. package/src/base/focus-tracker.ts +0 -2
  391. package/src/base/model/update-model-command.ts +6 -8
  392. package/src/base/operations/operation.ts +57 -31
  393. package/src/base/types.ts +3 -2
  394. package/src/features/change-bounds/model.ts +16 -5
  395. package/src/features/change-bounds/movement-restrictor.ts +15 -7
  396. package/src/features/command-palette/server-command-palette-provider.ts +8 -5
  397. package/src/features/context-menu/di.config.ts +11 -9
  398. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +4 -3
  399. package/src/features/context-menu/server-context-menu-provider.ts +7 -3
  400. package/src/features/copy-paste/copy-paste-actions.ts +11 -8
  401. package/src/features/copy-paste/copy-paste-context-menu.ts +57 -17
  402. package/src/features/copy-paste/copy-paste-handler.ts +15 -6
  403. package/src/features/decoration/decoration-placer.ts +2 -13
  404. package/src/features/edit-label/edit-label-validator.ts +11 -12
  405. package/src/features/hints/model.ts +2 -2
  406. package/src/features/hints/request-type-hints-action.ts +10 -5
  407. package/src/features/hints/type-hints.ts +26 -30
  408. package/src/features/hover/hover.ts +1 -2
  409. package/src/features/layout/di.config.ts +30 -5
  410. package/src/features/layout/freeform-layout.ts +132 -0
  411. package/src/features/layout/layout-commands.spec.ts +79 -56
  412. package/src/features/layout/layout-commands.ts +42 -31
  413. package/src/features/layout/vbox-layout.ts +241 -0
  414. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +3 -3
  415. package/src/features/model-source-watcher/model-source-changed-action.ts +2 -2
  416. package/src/features/mouse-tool/mouse-tool.ts +31 -22
  417. package/src/features/navigation/navigation-action-handler.ts +32 -22
  418. package/src/features/navigation/navigation-target-resolver.spec.ts +1 -3
  419. package/src/features/navigation/navigation-target-resolver.ts +14 -12
  420. package/src/features/rank/model.ts +2 -2
  421. package/src/features/reconnect/model.ts +2 -3
  422. package/src/features/save/di.config.ts +1 -2
  423. package/src/features/save/save.ts +2 -2
  424. package/src/features/select/select-feedback-action.ts +4 -6
  425. package/src/features/select/selection-service.spec.ts +9 -4
  426. package/src/features/select/selection-service.ts +13 -5
  427. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +26 -17
  428. package/src/features/tool-feedback/creation-tool-feedback.ts +16 -7
  429. package/src/features/tool-feedback/css-feedback.ts +7 -4
  430. package/src/features/tool-feedback/di.config.ts +2 -5
  431. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +18 -15
  432. package/src/features/tool-feedback/feedback-action-dispatcher.ts +6 -8
  433. package/src/features/tool-feedback/marquee-tool-feedback.ts +3 -2
  434. package/src/features/tool-feedback/model.ts +1 -2
  435. package/src/features/tool-feedback/view.tsx +16 -10
  436. package/src/features/tool-palette/di.config.ts +1 -1
  437. package/src/features/tool-palette/palette-item.ts +3 -3
  438. package/src/features/tool-palette/tool-palette.ts +12 -14
  439. package/src/features/tools/change-bounds-tool.ts +54 -25
  440. package/src/features/tools/delete-tool.ts +8 -3
  441. package/src/features/tools/edge-creation-tool.ts +5 -8
  442. package/src/features/tools/edge-edit-tool.ts +9 -18
  443. package/src/features/tools/marquee-mouse-tool.ts +57 -37
  444. package/src/features/tools/marquee-tool.ts +0 -1
  445. package/src/features/tools/node-creation-tool.ts +4 -9
  446. package/src/features/tools/view.tsx +17 -12
  447. package/src/features/undo-redo/model.ts +3 -3
  448. package/src/features/validation/marker-navigator.spec.ts +15 -9
  449. package/src/features/validation/marker-navigator.ts +23 -8
  450. package/src/features/validation/validate.ts +9 -13
  451. package/src/features/viewport/glsp-scroll-mouse-listener.ts +1 -10
  452. package/src/index.ts +26 -8
  453. package/src/model-source/glsp-diagram-server.ts +2 -14
  454. package/src/utils/argument-utils.ts +13 -9
  455. package/src/utils/array-utils.ts +4 -2
  456. package/src/utils/layout-utils.ts +11 -5
  457. package/src/utils/smodel-util.ts +14 -10
  458. package/src/utils/viewpoint-util.ts +3 -2
  459. package/src/views/compartments.tsx +37 -0
  460. package/src/views/glsp-edge-view.tsx +20 -13
  461. package/src/views/index.ts +1 -0
  462. package/src/views/issue-marker-view.tsx +11 -12
  463. package/src/views/rounded-corner-view.tsx +38 -25
  464. package/src/views/rounded-corner.ts +3 -4
  465. package/lib/base/actions/protocol-actions.d.ts +0 -41
  466. package/lib/base/actions/protocol-actions.d.ts.map +0 -1
  467. package/lib/base/actions/protocol-actions.js +0 -151
  468. package/lib/base/actions/protocol-actions.js.map +0 -1
  469. package/src/base/actions/protocol-actions.ts +0 -82
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -58,7 +58,7 @@ import {
58
58
  } from './layout-commands';
59
59
 
60
60
  class MockActionDispatcher implements IActionDispatcher {
61
- constructor(public dispatchedActions: Action[] = []) { }
61
+ constructor(public dispatchedActions: Action[] = []) {}
62
62
  dispatch(action: Action): Promise<void> {
63
63
  this.dispatchedActions.push(action);
64
64
  return Promise.resolve();
@@ -84,15 +84,18 @@ const selectionService = container.get<SelectionService>(GLSP_TYPES.SelectionSer
84
84
  const actionDispatcher = new MockActionDispatcher();
85
85
 
86
86
  const node1 = {
87
- id: 'node1', type: 'node:circle',
87
+ id: 'node1',
88
+ type: 'node:circle',
88
89
  selected: true
89
90
  };
90
91
  const node2 = {
91
- id: 'node2', type: 'node:circle',
92
+ id: 'node2',
93
+ type: 'node:circle',
92
94
  selected: true
93
95
  };
94
96
  const node3 = {
95
- id: 'node3', type: 'node:circle',
97
+ id: 'node3',
98
+ type: 'node:circle',
96
99
  selected: true
97
100
  };
98
101
  const model = createModel();
@@ -123,7 +126,6 @@ const context: CommandExecutionContext = {
123
126
  const defaultSize = { height: 10, width: 10 };
124
127
 
125
128
  describe('AlignElementsCommand', () => {
126
-
127
129
  it('should align all elements left', () => {
128
130
  actionDispatcher.dispatchedActions = [];
129
131
  const newModel = initModel([
@@ -135,11 +137,13 @@ describe('AlignElementsCommand', () => {
135
137
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
136
138
  command.execute(newContext(newModel));
137
139
 
138
- assertAllBounds(new Map([
139
- ['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
140
- ['node2', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
141
- ['node3', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }]
142
- ]));
140
+ assertAllBounds(
141
+ new Map([
142
+ ['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
143
+ ['node2', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
144
+ ['node3', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }]
145
+ ])
146
+ );
143
147
  });
144
148
 
145
149
  it('should align all elements right', () => {
@@ -153,11 +157,13 @@ describe('AlignElementsCommand', () => {
153
157
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
154
158
  command.execute(newContext(newModel));
155
159
 
156
- assertAllBounds(new Map([
157
- ['node1', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }],
158
- ['node2', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }],
159
- ['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
160
- ]));
160
+ assertAllBounds(
161
+ new Map([
162
+ ['node1', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }],
163
+ ['node2', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }],
164
+ ['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
165
+ ])
166
+ );
161
167
  });
162
168
 
163
169
  it('should align all elements center', () => {
@@ -171,11 +177,13 @@ describe('AlignElementsCommand', () => {
171
177
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
172
178
  command.execute(newContext(newModel));
173
179
 
174
- assertAllBounds(new Map([
175
- ['node1', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
176
- ['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
177
- ['node3', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }]
178
- ]));
180
+ assertAllBounds(
181
+ new Map([
182
+ ['node1', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
183
+ ['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
184
+ ['node3', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }]
185
+ ])
186
+ );
179
187
  });
180
188
 
181
189
  it('should align all elements top', () => {
@@ -189,11 +197,13 @@ describe('AlignElementsCommand', () => {
189
197
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
190
198
  command.execute(newContext(newModel));
191
199
 
192
- assertAllBounds(new Map([
193
- ['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
194
- ['node2', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
195
- ['node3', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }]
196
- ]));
200
+ assertAllBounds(
201
+ new Map([
202
+ ['node1', { x: 111, y: 111, width: defaultSize.width, height: defaultSize.height }],
203
+ ['node2', { x: 222, y: 111, width: defaultSize.width, height: defaultSize.height }],
204
+ ['node3', { x: 333, y: 111, width: defaultSize.width, height: defaultSize.height }]
205
+ ])
206
+ );
197
207
  });
198
208
 
199
209
  it('should align all elements bottom', () => {
@@ -207,11 +217,13 @@ describe('AlignElementsCommand', () => {
207
217
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
208
218
  command.execute(newContext(newModel));
209
219
 
210
- assertAllBounds(new Map([
211
- ['node1', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }],
212
- ['node2', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }],
213
- ['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
214
- ]));
220
+ assertAllBounds(
221
+ new Map([
222
+ ['node1', { x: 111, y: 333, width: defaultSize.width, height: defaultSize.height }],
223
+ ['node2', { x: 222, y: 333, width: defaultSize.width, height: defaultSize.height }],
224
+ ['node3', { x: 333, y: 333, width: defaultSize.width, height: defaultSize.height }]
225
+ ])
226
+ );
215
227
  });
216
228
 
217
229
  it('should align all elements middle', () => {
@@ -225,17 +237,17 @@ describe('AlignElementsCommand', () => {
225
237
  const command = new AlignElementsCommand(action, actionDispatcher, selectionService);
226
238
  command.execute(newContext(newModel));
227
239
 
228
- assertAllBounds(new Map([
229
- ['node1', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
230
- ['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
231
- ['node3', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }]
232
- ]));
240
+ assertAllBounds(
241
+ new Map([
242
+ ['node1', { x: 111, y: 222, width: defaultSize.width, height: defaultSize.height }],
243
+ ['node2', { x: 222, y: 222, width: defaultSize.width, height: defaultSize.height }],
244
+ ['node3', { x: 333, y: 222, width: defaultSize.width, height: defaultSize.height }]
245
+ ])
246
+ );
233
247
  });
234
-
235
248
  });
236
249
 
237
250
  describe('ResizeElementsCommand', () => {
238
-
239
251
  it('should make same width as last', () => {
240
252
  actionDispatcher.dispatchedActions = [];
241
253
  const newModel = initModel([
@@ -248,11 +260,13 @@ describe('ResizeElementsCommand', () => {
248
260
  command.execute(newContext(newModel));
249
261
 
250
262
  // resize is keeping the center, so the X moves by diff / 2
251
- assertAllBoundsInChangeBounds(new Map([
252
- ['node1', { x: 90, y: 100, height: 10, width: 30 }],
253
- ['node2', { x: 95, y: 200, height: 20, width: 30 }],
254
- ['node3', { x: 100, y: 300, height: 30, width: 30 }]
255
- ]));
263
+ assertAllBoundsInChangeBounds(
264
+ new Map([
265
+ ['node1', { x: 90, y: 100, height: 10, width: 30 }],
266
+ ['node2', { x: 95, y: 200, height: 20, width: 30 }],
267
+ ['node3', { x: 100, y: 300, height: 30, width: 30 }]
268
+ ])
269
+ );
256
270
  });
257
271
 
258
272
  it('should make same height as last', () => {
@@ -267,11 +281,13 @@ describe('ResizeElementsCommand', () => {
267
281
  command.execute(newContext(newModel));
268
282
 
269
283
  // resize is keeping the center, so the Y moves by diff / 2
270
- assertAllBoundsInChangeBounds(new Map([
271
- ['node1', { x: 100, y: 90, height: 30, width: 10 }],
272
- ['node2', { x: 100, y: 195, height: 30, width: 20 }],
273
- ['node3', { x: 100, y: 300, height: 30, width: 30 }]
274
- ]));
284
+ assertAllBoundsInChangeBounds(
285
+ new Map([
286
+ ['node1', { x: 100, y: 90, height: 30, width: 10 }],
287
+ ['node2', { x: 100, y: 195, height: 30, width: 20 }],
288
+ ['node3', { x: 100, y: 300, height: 30, width: 30 }]
289
+ ])
290
+ );
275
291
  });
276
292
 
277
293
  it('should make same width and height as last', () => {
@@ -286,13 +302,14 @@ describe('ResizeElementsCommand', () => {
286
302
  command.execute(newContext(newModel));
287
303
 
288
304
  // resize is keeping the center, so the Y moves by diff / 2
289
- assertAllBoundsInChangeBounds(new Map([
290
- ['node1', { x: 90, y: 90, height: 30, width: 30 }],
291
- ['node2', { x: 95, y: 195, height: 30, width: 30 }],
292
- ['node3', { x: 100, y: 300, height: 30, width: 30 }]
293
- ]));
305
+ assertAllBoundsInChangeBounds(
306
+ new Map([
307
+ ['node1', { x: 90, y: 90, height: 30, width: 30 }],
308
+ ['node2', { x: 95, y: 195, height: 30, width: 30 }],
309
+ ['node3', { x: 100, y: 300, height: 30, width: 30 }]
310
+ ])
311
+ );
294
312
  });
295
-
296
313
  });
297
314
 
298
315
  function initModel(elementAndBounds: ElementAndBounds[]): SModelRoot {
@@ -350,11 +367,17 @@ function getElementAndBoundsById(id: string, elementAndBounds: ElementAndBounds[
350
367
  }
351
368
 
352
369
  function dispatchedElementMoves(): ElementMove[] {
353
- return actionDispatcher.dispatchedActions.filter(isMoveAction).map(a => a.moves).reduce((acc, val) => acc.concat(val), []);
370
+ return actionDispatcher.dispatchedActions
371
+ .filter(isMoveAction)
372
+ .map(a => a.moves)
373
+ .reduce((acc, val) => acc.concat(val), []);
354
374
  }
355
375
 
356
376
  function dispatchedChangeBounds(): ElementAndBounds[] {
357
- return actionDispatcher.dispatchedActions.filter(isChangeBounds).map(a => a.newBounds).reduce((acc, val) => acc.concat(val), []);
377
+ return actionDispatcher.dispatchedActions
378
+ .filter(isChangeBounds)
379
+ .map(a => a.newBounds)
380
+ .reduce((acc, val) => acc.concat(val), []);
358
381
  }
359
382
 
360
383
  function isMoveAction(action: Action): action is MoveAction {
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -27,24 +27,18 @@ import {
27
27
  SModelElement,
28
28
  TYPES
29
29
  } from 'sprotty';
30
-
31
30
  import { ChangeBoundsOperation } from '../../base/operations/operation';
32
31
  import { GLSP_TYPES } from '../../base/types';
33
- import {
34
- toValidElementAndBounds,
35
- toValidElementMove,
36
- WriteableElementAndBounds,
37
- WriteableElementMove
38
- } from '../../utils/layout-utils';
32
+ import { toValidElementAndBounds, toValidElementMove, WriteableElementAndBounds, WriteableElementMove } from '../../utils/layout-utils';
39
33
  import { BoundsAwareModelElement } from '../../utils/smodel-util';
40
34
  import { isBoundsAwareMoveable, isResizable } from '../change-bounds/model';
41
35
  import { IMovementRestrictor } from '../change-bounds/movement-restrictor';
42
36
  import { SelectionService } from '../select/selection-service';
43
37
 
38
+ // eslint-disable-next-line no-shadow
44
39
  export enum ResizeDimension {
45
40
  Width,
46
41
  Height,
47
- // eslint-disable-next-line @typescript-eslint/camelcase
48
42
  Width_And_Height
49
43
  }
50
44
 
@@ -84,10 +78,11 @@ export class ResizeElementsAction implements Action {
84
78
  * Function to reduce the dimension to a target dimension value, see Reduce.* for potential functions.
85
79
  */
86
80
  public readonly reductionFunction: (...values: number[]) => number,
87
- public readonly kind: string = ResizeElementsCommand.KIND) {
88
- }
81
+ public readonly kind: string = ResizeElementsCommand.KIND
82
+ ) {}
89
83
  }
90
84
 
85
+ // eslint-disable-next-line no-shadow
91
86
  export enum Alignment {
92
87
  Left,
93
88
  Center,
@@ -125,16 +120,18 @@ export class AlignElementsAction implements Action {
125
120
  * Function to selected elements that are considered during alignment calculation, see Select.* for potential functions.
126
121
  */
127
122
  public readonly selectionFunction: (elements: BoundsAwareModelElement[]) => BoundsAwareModelElement[] = Select.all,
128
- public readonly kind = AlignElementsCommand.KIND) {
129
- }
123
+ public readonly kind = AlignElementsCommand.KIND
124
+ ) {}
130
125
  }
131
126
 
132
127
  @injectable()
133
128
  abstract class LayoutElementsCommand extends Command {
134
- constructor(@inject(TYPES.Action) protected action: ResizeElementsAction | AlignElementsAction,
129
+ constructor(
130
+ @inject(TYPES.Action) protected action: ResizeElementsAction | AlignElementsAction,
135
131
  @inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
136
132
  @inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
137
- @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor) {
133
+ @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
134
+ ) {
138
135
  super();
139
136
  }
140
137
 
@@ -170,10 +167,12 @@ abstract class LayoutElementsCommand extends Command {
170
167
  export class ResizeElementsCommand extends LayoutElementsCommand {
171
168
  static readonly KIND = 'layout:resize';
172
169
 
173
- constructor(@inject(TYPES.Action) protected action: ResizeElementsAction,
170
+ constructor(
171
+ @inject(TYPES.Action) protected action: ResizeElementsAction,
174
172
  @inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
175
173
  @inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
176
- @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor) {
174
+ @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
175
+ ) {
177
176
  super(action, actionDispatcher, selectionService, movementRestrictor);
178
177
  }
179
178
 
@@ -233,7 +232,10 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
233
232
  });
234
233
  }
235
234
 
236
- dispatchResizeActions(elements: BoundsAwareModelElement[], change: (element: BoundsAwareModelElement, bounds: WriteableElementAndBounds) => void): void {
235
+ dispatchResizeActions(
236
+ elements: BoundsAwareModelElement[],
237
+ change: (element: BoundsAwareModelElement, bounds: WriteableElementAndBounds) => void
238
+ ): void {
237
239
  const elementAndBounds: ElementAndBounds[] = []; // client- and server-side resize
238
240
  elements.forEach(element => {
239
241
  const elementChange = this.createElementAndBounds(element, change);
@@ -245,9 +247,10 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
245
247
  this.dispatchActions([new SetBoundsAction(elementAndBounds), new ChangeBoundsOperation(elementAndBounds)]);
246
248
  }
247
249
 
248
- createElementAndBounds(element: BoundsAwareModelElement, change: (element: BoundsAwareModelElement,
249
- bounds: WriteableElementAndBounds) => void): WriteableElementAndBounds | undefined {
250
-
250
+ createElementAndBounds(
251
+ element: BoundsAwareModelElement,
252
+ change: (_element: BoundsAwareModelElement, _bounds: WriteableElementAndBounds) => void
253
+ ): WriteableElementAndBounds | undefined {
251
254
  const bounds: WriteableElementAndBounds = {
252
255
  elementId: element.id,
253
256
  newPosition: {
@@ -278,10 +281,12 @@ export class ResizeElementsCommand extends LayoutElementsCommand {
278
281
  export class AlignElementsCommand extends LayoutElementsCommand {
279
282
  static readonly KIND = 'layout:align';
280
283
 
281
- constructor(@inject(TYPES.Action) protected action: AlignElementsAction,
284
+ constructor(
285
+ @inject(TYPES.Action) protected action: AlignElementsAction,
282
286
  @inject(TYPES.IActionDispatcher) protected actionDispatcher: IActionDispatcher,
283
287
  @inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService,
284
- @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor) {
288
+ @inject(GLSP_TYPES.IMovementRestrictor) @optional() readonly movementRestrictor?: IMovementRestrictor
289
+ ) {
285
290
  super(action, actionDispatcher, selectionService, movementRestrictor);
286
291
  }
287
292
 
@@ -319,7 +324,7 @@ export class AlignElementsCommand extends LayoutElementsCommand {
319
324
  alignLeft(elements: BoundsAwareModelElement[]): void {
320
325
  const calculationElements = this.action.selectionFunction(elements);
321
326
  const minX = calculationElements.map(element => element.bounds.x).reduce((a, b) => Math.min(a, b));
322
- this.dispatchAlignActions(elements, (_, move) => move.toPosition.x = minX);
327
+ this.dispatchAlignActions(elements, (_, move) => (move.toPosition.x = minX));
323
328
  }
324
329
 
325
330
  alignCenter(elements: BoundsAwareModelElement[]): void {
@@ -328,19 +333,19 @@ export class AlignElementsCommand extends LayoutElementsCommand {
328
333
  const maxX = calculationElements.map(element => element.bounds.x + element.bounds.width).reduce((a, b) => Math.max(a, b));
329
334
  const diffX = maxX - minX;
330
335
  const centerX = minX + 0.5 * diffX;
331
- this.dispatchAlignActions(elements, (element, move) => move.toPosition.x = centerX - 0.5 * element.bounds.width);
336
+ this.dispatchAlignActions(elements, (element, move) => (move.toPosition.x = centerX - 0.5 * element.bounds.width));
332
337
  }
333
338
 
334
339
  alignRight(elements: BoundsAwareModelElement[]): void {
335
340
  const calculationElements = this.action.selectionFunction(elements);
336
341
  const maxX = calculationElements.map(element => element.bounds.x + element.bounds.width).reduce((a, b) => Math.max(a, b));
337
- this.dispatchAlignActions(elements, (element, move) => move.toPosition.x = maxX - element.bounds.width);
342
+ this.dispatchAlignActions(elements, (element, move) => (move.toPosition.x = maxX - element.bounds.width));
338
343
  }
339
344
 
340
345
  alignTop(elements: BoundsAwareModelElement[]): void {
341
346
  const calculationElements = this.action.selectionFunction(elements);
342
347
  const minY = calculationElements.map(element => element.bounds.y).reduce((a, b) => Math.min(a, b));
343
- this.dispatchAlignActions(elements, (_, move) => move.toPosition.y = minY);
348
+ this.dispatchAlignActions(elements, (_, move) => (move.toPosition.y = minY));
344
349
  }
345
350
 
346
351
  alignMiddle(elements: BoundsAwareModelElement[]): void {
@@ -349,16 +354,19 @@ export class AlignElementsCommand extends LayoutElementsCommand {
349
354
  const maxY = calculationElements.map(element => element.bounds.y + element.bounds.height).reduce((a, b) => Math.max(a, b));
350
355
  const diffY = maxY - minY;
351
356
  const middleY = minY + 0.5 * diffY;
352
- this.dispatchAlignActions(elements, (element, move) => move.toPosition.y = middleY - 0.5 * element.bounds.height);
357
+ this.dispatchAlignActions(elements, (element, move) => (move.toPosition.y = middleY - 0.5 * element.bounds.height));
353
358
  }
354
359
 
355
360
  alignBottom(elements: BoundsAwareModelElement[]): void {
356
361
  const calculationElements = this.action.selectionFunction(elements);
357
362
  const maxY = calculationElements.map(element => element.bounds.y + element.bounds.height).reduce((a, b) => Math.max(a, b));
358
- this.dispatchAlignActions(elements, (element, move) => move.toPosition.y = maxY - element.bounds.height);
363
+ this.dispatchAlignActions(elements, (element, move) => (move.toPosition.y = maxY - element.bounds.height));
359
364
  }
360
365
 
361
- dispatchAlignActions(elements: BoundsAwareModelElement[], change: (element: BoundsAwareModelElement, move: WriteableElementMove) => void): void {
366
+ dispatchAlignActions(
367
+ elements: BoundsAwareModelElement[],
368
+ change: (element: BoundsAwareModelElement, move: WriteableElementMove) => void
369
+ ): void {
362
370
  const moves: ElementMove[] = []; // client-side move
363
371
  const elementAndBounds: ElementAndBounds[] = []; // server-side move
364
372
  elements.forEach(element => {
@@ -373,7 +381,10 @@ export class AlignElementsCommand extends LayoutElementsCommand {
373
381
  this.dispatchActions([new MoveAction(moves), new ChangeBoundsOperation(elementAndBounds)]);
374
382
  }
375
383
 
376
- createElementMove(element: BoundsAwareModelElement, change: (element: BoundsAwareModelElement, move: WriteableElementMove) => void): WriteableElementMove | undefined {
384
+ createElementMove(
385
+ element: BoundsAwareModelElement,
386
+ change: (_element: BoundsAwareModelElement, _move: WriteableElementMove) => void
387
+ ): WriteableElementMove | undefined {
377
388
  const move: WriteableElementMove = {
378
389
  elementId: element.id,
379
390
  fromPosition: {
@@ -0,0 +1,241 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2021 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 { injectable } from 'inversify';
17
+ import {
18
+ Bounds,
19
+ BoundsData,
20
+ Dimension,
21
+ EMPTY_BOUNDS,
22
+ isBoundsAware,
23
+ isLayoutableChild,
24
+ isValidDimension,
25
+ LayoutContainer,
26
+ Point,
27
+ SChildElement,
28
+ SModelElement,
29
+ SParentElement,
30
+ StatefulLayouter,
31
+ VBoxLayouter,
32
+ VBoxLayoutOptions
33
+ } from 'sprotty';
34
+
35
+ export interface VBoxLayoutOptionsExt extends VBoxLayoutOptions {
36
+ hGrab: boolean;
37
+ vGrab: boolean;
38
+ prefWidth: number | null;
39
+ prefHeight: number | null;
40
+ }
41
+
42
+ /**
43
+ * Extends VBoxLayouter to support additional layout options
44
+ */
45
+ @injectable()
46
+ export class VBoxLayouterExt extends VBoxLayouter {
47
+
48
+ static KIND = VBoxLayouter.KIND;
49
+
50
+ layout(container: SParentElement & LayoutContainer,
51
+ layouter: StatefulLayouter): void {
52
+
53
+ const boundsData = layouter.getBoundsData(container);
54
+ const options = this.getLayoutOptions(container);
55
+ const childrenSize = this.getChildrenSize(container, options, layouter);
56
+
57
+ const fixedSize = this.getFixedContainerBounds(container, options, layouter);
58
+
59
+ const maxWidth = options.paddingFactor * (
60
+ options.resizeContainer
61
+ ? Math.max(fixedSize.width - options.paddingLeft - options.paddingRight, childrenSize.width)
62
+ : Math.max(0, fixedSize.width - options.paddingLeft - options.paddingRight));
63
+ const maxHeight = options.paddingFactor * (
64
+ options.resizeContainer
65
+ ? Math.max(fixedSize.height - options.paddingTop - options.paddingBottom, childrenSize.height)
66
+ : Math.max(0, fixedSize.height - options.paddingTop - options.paddingBottom));
67
+
68
+ // Remaining size that can be grabbed by children with the vGrab option
69
+ const grabHeight: number = maxHeight - childrenSize.height;
70
+ // Number of children that request vGrab
71
+ // FIXME: This approach works fine when only 1 child uses VGrab, but may cause rounding issues
72
+ // when the grabHeight can't be equally shared by all children.
73
+ const grabbingChildren = container.children
74
+ .map(child => this.getChildLayoutOptions(child, options))
75
+ .filter(opt => opt.vGrab)
76
+ .length;
77
+
78
+ if (maxWidth > 0 && maxHeight > 0) {
79
+ const offset = this.layoutChildren(container, layouter, options, maxWidth, maxHeight, grabHeight, grabbingChildren);
80
+ boundsData.bounds = this.getFinalContainerBounds(container, offset, options, childrenSize.width, childrenSize.height);
81
+ boundsData.boundsChanged = true;
82
+ }
83
+ }
84
+
85
+ protected getChildrenSize(container: SParentElement & LayoutContainer,
86
+ containerOptions: VBoxLayoutOptionsExt,
87
+ layouter: StatefulLayouter): Dimension {
88
+ let maxWidth = -1;
89
+ let maxHeight = 0;
90
+ let isFirst = true;
91
+ container.children.forEach(
92
+ child => {
93
+ if (isLayoutableChild(child)) {
94
+ const bounds = layouter.getBoundsData(child).bounds;
95
+ if (bounds !== undefined && isValidDimension(bounds)) {
96
+ maxHeight += bounds.height;
97
+ if (isFirst) {
98
+ isFirst = false;
99
+ } else {
100
+ maxHeight += containerOptions.vGap;
101
+ }
102
+ maxWidth = Math.max(maxWidth, bounds.width);
103
+ }
104
+ }
105
+ }
106
+ );
107
+ const result = {
108
+ width: maxWidth,
109
+ height: maxHeight
110
+ };
111
+ return result;
112
+ }
113
+
114
+ protected layoutChildren(container: SParentElement & LayoutContainer,
115
+ layouter: StatefulLayouter,
116
+ containerOptions: VBoxLayoutOptionsExt,
117
+ maxWidth: number,
118
+ maxHeight: number, grabHeight?: number, grabbingChildren?: number): Point {
119
+ let currentOffset: Point = {
120
+ x: containerOptions.paddingLeft + 0.5 * (maxWidth - (maxWidth / containerOptions.paddingFactor)),
121
+ y: containerOptions.paddingTop + 0.5 * (maxHeight - (maxHeight / containerOptions.paddingFactor))
122
+ };
123
+
124
+ container.children.forEach(
125
+ child => {
126
+ if (isLayoutableChild(child)) {
127
+ const boundsData = layouter.getBoundsData(child);
128
+ const bounds = boundsData.bounds;
129
+ const childOptions = this.getChildLayoutOptions(child, containerOptions);
130
+ if (bounds !== undefined && isValidDimension(bounds)) {
131
+ currentOffset = this.layoutChild(child, boundsData, bounds,
132
+ childOptions, containerOptions, currentOffset,
133
+ maxWidth, maxHeight, grabHeight, grabbingChildren);
134
+ }
135
+ }
136
+ }
137
+ );
138
+ return currentOffset;
139
+ }
140
+
141
+ protected layoutChild(child: SChildElement,
142
+ boundsData: BoundsData,
143
+ bounds: Bounds,
144
+ childOptions: VBoxLayoutOptionsExt,
145
+ containerOptions: VBoxLayoutOptionsExt,
146
+ currentOffset: Point,
147
+ maxWidth: number,
148
+ maxHeight: number,
149
+ grabHeight?: number,
150
+ grabbingChildren?: number): Point {
151
+ let offset = super.layoutChild(child, boundsData, bounds, childOptions, containerOptions, currentOffset, maxWidth, maxHeight);
152
+ if (childOptions.hGrab) {
153
+ boundsData.bounds = {
154
+ x: boundsData.bounds!.x,
155
+ y: boundsData.bounds!.y,
156
+ width: maxWidth,
157
+ height: boundsData.bounds!.height
158
+ };
159
+ boundsData.boundsChanged = true;
160
+ }
161
+ if (childOptions.vGrab && grabHeight && grabbingChildren) {
162
+ const height = boundsData.bounds!.height + (grabHeight / grabbingChildren);
163
+ boundsData.bounds = {
164
+ x: boundsData.bounds!.x,
165
+ y: boundsData.bounds!.y,
166
+ width: boundsData.bounds!.width,
167
+ height: height
168
+ };
169
+ boundsData.boundsChanged = true;
170
+ offset = { x: currentOffset.x, y: currentOffset.y + height };
171
+ }
172
+ return offset;
173
+ }
174
+
175
+ protected getFixedContainerBounds(container: SModelElement, layoutOptions: VBoxLayoutOptionsExt, layouter: StatefulLayouter): Bounds {
176
+ const currentContainer = container;
177
+ // eslint-disable-next-line no-constant-condition
178
+ if (isBoundsAware(currentContainer)) {
179
+ const bounds = currentContainer.bounds;
180
+ const elementOptions = this.getElementLayoutOptions(currentContainer);
181
+ const width = elementOptions?.prefWidth ?? 0;
182
+ const height = elementOptions?.prefHeight ?? 0;
183
+ return { ...bounds, width, height };
184
+ }
185
+ return EMPTY_BOUNDS;
186
+ }
187
+
188
+ protected getChildLayoutOptions(child: SChildElement, containerOptions: VBoxLayoutOptionsExt): VBoxLayoutOptionsExt {
189
+ return super.getChildLayoutOptions(child, containerOptions) as VBoxLayoutOptionsExt;
190
+ }
191
+
192
+ protected getLayoutOptions(element: SModelElement): VBoxLayoutOptionsExt {
193
+ return super.getLayoutOptions(element) as VBoxLayoutOptionsExt;
194
+ }
195
+
196
+ protected getElementLayoutOptions(element: SModelElement): VBoxLayoutOptionsExt | undefined {
197
+ return (element as any).layoutOptions;
198
+ }
199
+
200
+ protected getFinalContainerBounds(container: SParentElement & LayoutContainer,
201
+ lastOffset: Point, options: VBoxLayoutOptionsExt, maxWidth: number, maxHeight: number): Bounds {
202
+
203
+ const elementOptions = this.getElementLayoutOptions(container);
204
+ const width = elementOptions?.prefWidth ?? options.minWidth;
205
+ const height = elementOptions?.prefHeight ?? options.minHeight;
206
+
207
+ const result = {
208
+ x: container.bounds.x,
209
+ y: container.bounds.y,
210
+ width: Math.max(width, maxWidth + options.paddingLeft + options.paddingRight),
211
+ height: Math.max(height, maxHeight + options.paddingTop + options.paddingBottom)
212
+ };
213
+
214
+ return result;
215
+ }
216
+
217
+ protected getDefaultLayoutOptions(): VBoxLayoutOptionsExt {
218
+ return {
219
+ resizeContainer: true,
220
+ paddingTop: 5,
221
+ paddingBottom: 5,
222
+ paddingLeft: 5,
223
+ paddingRight: 5,
224
+ paddingFactor: 1,
225
+ vGap: 1,
226
+ hAlign: 'center',
227
+ minWidth: 0,
228
+ minHeight: 0,
229
+ hGrab: false,
230
+ vGrab: false,
231
+ // eslint-disable-next-line no-null/no-null
232
+ prefHeight: null,
233
+ // eslint-disable-next-line no-null/no-null
234
+ prefWidth: null
235
+ };
236
+ }
237
+
238
+ protected spread(a: VBoxLayoutOptionsExt, b: VBoxLayoutOptionsExt): VBoxLayoutOptionsExt {
239
+ return { ...a, ...b };
240
+ }
241
+ }