@eclipse-glsp/client 0.9.0-next.f54fd689 → 0.9.0

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 (625) hide show
  1. package/LICENSE +642 -277
  2. package/README.md +4 -2
  3. package/css/command-palette.css +9 -5
  4. package/css/decoration.css +3 -2
  5. package/css/glsp-sprotty.css +20 -7
  6. package/css/tool-palette.css +44 -27
  7. package/lib/base/action-dispatcher.d.ts +18 -2
  8. package/lib/base/action-dispatcher.d.ts.map +1 -1
  9. package/lib/base/action-dispatcher.js +41 -61
  10. package/lib/base/action-dispatcher.js.map +1 -1
  11. package/lib/{features/model-source-watcher/model-source-changed-action.d.ts → base/actions/focus-change-action.d.ts} +7 -7
  12. package/lib/base/actions/focus-change-action.d.ts.map +1 -0
  13. package/lib/base/actions/focus-change-action.js +16 -0
  14. package/lib/base/actions/focus-change-action.js.map +1 -0
  15. package/lib/base/argumentable.d.ts +22 -0
  16. package/lib/base/argumentable.d.ts.map +1 -0
  17. package/lib/base/argumentable.js +8 -0
  18. package/lib/base/argumentable.js.map +1 -0
  19. package/lib/base/auto-complete/auto-complete-actions.d.ts +1 -1
  20. package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -1
  21. package/lib/base/auto-complete/auto-complete-actions.js.map +1 -1
  22. package/lib/base/auto-complete/auto-complete-widget.d.ts +12 -12
  23. package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -1
  24. package/lib/base/auto-complete/auto-complete-widget.js +121 -152
  25. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -1
  26. package/lib/base/auto-complete/validation-decorator.d.ts +3 -18
  27. package/lib/base/auto-complete/validation-decorator.d.ts.map +1 -1
  28. package/lib/base/auto-complete/validation-decorator.js +49 -65
  29. package/lib/base/auto-complete/validation-decorator.js.map +1 -1
  30. package/lib/base/command-stack.d.ts +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 +100 -0
  37. package/lib/base/container-modules.js.map +1 -0
  38. package/lib/base/di.config.d.ts +13 -3
  39. package/lib/base/di.config.d.ts.map +1 -1
  40. package/lib/base/di.config.js +52 -31
  41. package/lib/base/di.config.js.map +1 -1
  42. package/lib/base/drag-aware-mouse-listener.d.ts +3 -2
  43. package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -1
  44. package/lib/base/drag-aware-mouse-listener.js +23 -62
  45. package/lib/base/drag-aware-mouse-listener.js.map +1 -1
  46. package/lib/base/editor-context-service.d.ts +42 -0
  47. package/lib/base/editor-context-service.d.ts.map +1 -0
  48. package/lib/base/editor-context-service.js +109 -0
  49. package/lib/base/editor-context-service.js.map +1 -0
  50. package/lib/{features/undo-redo/model.d.ts → base/focus-tracker.d.ts} +10 -12
  51. package/lib/base/focus-tracker.d.ts.map +1 -0
  52. package/lib/base/focus-tracker.js +50 -0
  53. package/lib/base/focus-tracker.js.map +1 -0
  54. package/lib/base/model/model-registry.d.ts +5 -0
  55. package/lib/base/model/model-registry.d.ts.map +1 -0
  56. package/lib/base/model/model-registry.js +43 -0
  57. package/lib/base/model/model-registry.js.map +1 -0
  58. package/lib/base/model/update-model-command.d.ts +20 -6
  59. package/lib/base/model/update-model-command.d.ts.map +1 -1
  60. package/lib/base/model/update-model-command.js +69 -94
  61. package/lib/base/model/update-model-command.js.map +1 -1
  62. package/lib/base/model-initialization-constraint.d.ts +17 -2
  63. package/lib/base/model-initialization-constraint.d.ts.map +1 -1
  64. package/lib/base/model-initialization-constraint.js +34 -54
  65. package/lib/base/model-initialization-constraint.js.map +1 -1
  66. package/lib/base/selection-clearing-mouse-listener.d.ts +1 -1
  67. package/lib/base/selection-clearing-mouse-listener.d.ts.map +1 -1
  68. package/lib/base/selection-clearing-mouse-listener.js +11 -28
  69. package/lib/base/selection-clearing-mouse-listener.js.map +1 -1
  70. package/lib/base/source-uri-aware.js +2 -5
  71. package/lib/base/source-uri-aware.js.map +1 -1
  72. package/lib/base/tool-manager/glsp-tool-manager.d.ts +2 -2
  73. package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -1
  74. package/lib/base/tool-manager/glsp-tool-manager.js +59 -141
  75. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -1
  76. package/lib/base/types.d.ts +3 -1
  77. package/lib/base/types.d.ts.map +1 -1
  78. package/lib/base/types.js +23 -21
  79. package/lib/base/types.js.map +1 -1
  80. package/lib/base/view/view-registry.d.ts +5 -0
  81. package/lib/base/view/view-registry.d.ts.map +1 -0
  82. package/lib/base/view/view-registry.js +43 -0
  83. package/lib/base/view/view-registry.js.map +1 -0
  84. package/lib/features/change-bounds/model.d.ts +4 -2
  85. package/lib/features/change-bounds/model.d.ts.map +1 -1
  86. package/lib/features/change-bounds/model.js +21 -32
  87. package/lib/features/change-bounds/model.js.map +1 -1
  88. package/lib/features/change-bounds/movement-restrictor.d.ts +18 -2
  89. package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -1
  90. package/lib/features/change-bounds/movement-restrictor.js +34 -46
  91. package/lib/features/change-bounds/movement-restrictor.js.map +1 -1
  92. package/lib/features/change-bounds/snap.d.ts +17 -1
  93. package/lib/features/change-bounds/snap.d.ts.map +1 -1
  94. package/lib/features/change-bounds/snap.js +13 -39
  95. package/lib/features/change-bounds/snap.js.map +1 -1
  96. package/lib/features/command-palette/command-palette-tool.d.ts +1 -1
  97. package/lib/features/command-palette/command-palette-tool.d.ts.map +1 -1
  98. package/lib/features/command-palette/command-palette-tool.js +30 -38
  99. package/lib/features/command-palette/command-palette-tool.js.map +1 -1
  100. package/lib/features/command-palette/di.config.d.ts +2 -2
  101. package/lib/features/command-palette/di.config.js +6 -6
  102. package/lib/features/command-palette/di.config.js.map +1 -1
  103. package/lib/features/command-palette/server-command-palette-provider.d.ts +19 -3
  104. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -1
  105. package/lib/features/command-palette/server-command-palette-provider.js +31 -36
  106. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -1
  107. package/lib/features/context-menu/delete-element-context-menu.d.ts +2 -2
  108. package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -1
  109. package/lib/features/context-menu/delete-element-context-menu.js +24 -72
  110. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -1
  111. package/lib/features/context-menu/di.config.d.ts +2 -2
  112. package/lib/features/context-menu/di.config.d.ts.map +1 -1
  113. package/lib/features/context-menu/di.config.js +14 -18
  114. package/lib/features/context-menu/di.config.js.map +1 -1
  115. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +2 -2
  116. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -1
  117. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +29 -67
  118. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -1
  119. package/lib/features/context-menu/server-context-menu-provider.d.ts +19 -3
  120. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -1
  121. package/lib/features/context-menu/server-context-menu-provider.js +31 -32
  122. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -1
  123. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +22 -2
  124. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -1
  125. package/lib/features/copy-paste/copy-paste-context-menu.js +99 -72
  126. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -1
  127. package/lib/features/copy-paste/copy-paste-handler.d.ts +21 -4
  128. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -1
  129. package/lib/features/copy-paste/copy-paste-handler.js +70 -70
  130. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -1
  131. package/lib/features/copy-paste/di.config.d.ts +2 -2
  132. package/lib/features/copy-paste/di.config.d.ts.map +1 -1
  133. package/lib/features/copy-paste/di.config.js +11 -11
  134. package/lib/features/copy-paste/di.config.js.map +1 -1
  135. package/lib/features/decoration/decoration-placer.d.ts +17 -1
  136. package/lib/features/decoration/decoration-placer.d.ts.map +1 -1
  137. package/lib/features/decoration/decoration-placer.js +14 -47
  138. package/lib/features/decoration/decoration-placer.js.map +1 -1
  139. package/lib/features/decoration/di.config.d.ts +2 -2
  140. package/lib/features/decoration/di.config.d.ts.map +1 -1
  141. package/lib/features/decoration/di.config.js +4 -6
  142. package/lib/features/decoration/di.config.js.map +1 -1
  143. package/lib/features/edit-label/di.config.d.ts +1 -1
  144. package/lib/features/edit-label/di.config.js +7 -7
  145. package/lib/features/edit-label/di.config.js.map +1 -1
  146. package/lib/features/edit-label/edit-label-tool.d.ts +2 -2
  147. package/lib/features/edit-label/edit-label-tool.js +20 -43
  148. package/lib/features/edit-label/edit-label-tool.js.map +1 -1
  149. package/lib/features/edit-label/edit-label-validator.d.ts +18 -3
  150. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -1
  151. package/lib/features/edit-label/edit-label-validator.js +40 -62
  152. package/lib/features/edit-label/edit-label-validator.js.map +1 -1
  153. package/lib/features/hints/di.config.d.ts +1 -16
  154. package/lib/features/hints/di.config.d.ts.map +1 -1
  155. package/lib/features/hints/di.config.js +9 -9
  156. package/lib/features/hints/di.config.js.map +1 -1
  157. package/lib/features/hints/model.d.ts +3 -2
  158. package/lib/features/hints/model.d.ts.map +1 -1
  159. package/lib/features/hints/model.js +2 -2
  160. package/lib/features/hints/model.js.map +1 -1
  161. package/lib/features/hints/type-hints.d.ts +21 -49
  162. package/lib/features/hints/type-hints.d.ts.map +1 -1
  163. package/lib/features/hints/type-hints.js +83 -142
  164. package/lib/features/hints/type-hints.js.map +1 -1
  165. package/lib/features/hover/di.config.d.ts +2 -2
  166. package/lib/features/hover/di.config.d.ts.map +1 -1
  167. package/lib/features/hover/di.config.js +9 -7
  168. package/lib/features/hover/di.config.js.map +1 -1
  169. package/lib/features/hover/hover.d.ts +18 -2
  170. package/lib/features/hover/hover.d.ts.map +1 -1
  171. package/lib/features/hover/hover.js +37 -75
  172. package/lib/features/hover/hover.js.map +1 -1
  173. package/lib/features/layout/di.config.d.ts +2 -2
  174. package/lib/features/layout/di.config.d.ts.map +1 -1
  175. package/lib/features/layout/di.config.js +11 -7
  176. package/lib/features/layout/di.config.js.map +1 -1
  177. package/lib/features/layout/freeform-layout.d.ts +16 -0
  178. package/lib/features/layout/freeform-layout.d.ts.map +1 -0
  179. package/lib/features/layout/freeform-layout.js +107 -0
  180. package/lib/features/layout/freeform-layout.js.map +1 -0
  181. package/lib/features/layout/layout-commands.d.ts +26 -10
  182. package/lib/features/layout/layout-commands.d.ts.map +1 -1
  183. package/lib/features/layout/layout-commands.js +189 -264
  184. package/lib/features/layout/layout-commands.js.map +1 -1
  185. package/lib/features/layout/layout-commands.spec.d.ts +2 -17
  186. package/lib/features/layout/layout-commands.spec.d.ts.map +1 -1
  187. package/lib/features/layout/layout-commands.spec.js +124 -117
  188. package/lib/features/layout/layout-commands.spec.js.map +1 -1
  189. package/lib/features/layout/vbox-layout.d.ts +25 -0
  190. package/lib/features/layout/vbox-layout.d.ts.map +1 -0
  191. package/lib/features/layout/vbox-layout.js +188 -0
  192. package/lib/features/layout/vbox-layout.js.map +1 -0
  193. package/lib/features/model-source-watcher/di.config.d.ts +1 -16
  194. package/lib/features/model-source-watcher/di.config.d.ts.map +1 -1
  195. package/lib/features/model-source-watcher/di.config.js +7 -7
  196. package/lib/features/model-source-watcher/di.config.js.map +1 -1
  197. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +17 -2
  198. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -1
  199. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +38 -46
  200. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -1
  201. package/lib/features/mouse-tool/di.config.d.ts +1 -1
  202. package/lib/features/mouse-tool/di.config.js +5 -5
  203. package/lib/features/mouse-tool/di.config.js.map +1 -1
  204. package/lib/features/mouse-tool/mouse-tool.d.ts +3 -2
  205. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -1
  206. package/lib/features/mouse-tool/mouse-tool.js +74 -217
  207. package/lib/features/mouse-tool/mouse-tool.js.map +1 -1
  208. package/lib/features/navigation/di.config.d.ts +1 -16
  209. package/lib/features/navigation/di.config.d.ts.map +1 -1
  210. package/lib/features/navigation/di.config.js +11 -10
  211. package/lib/features/navigation/di.config.js.map +1 -1
  212. package/lib/features/navigation/navigation-action-handler.d.ts +19 -39
  213. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -1
  214. package/lib/features/navigation/navigation-action-handler.js +118 -255
  215. package/lib/features/navigation/navigation-action-handler.js.map +1 -1
  216. package/lib/features/navigation/navigation-target-resolver.d.ts +18 -40
  217. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -1
  218. package/lib/features/navigation/navigation-target-resolver.js +46 -188
  219. package/lib/features/navigation/navigation-target-resolver.js.map +1 -1
  220. package/lib/features/navigation/navigation-target-resolver.spec.d.ts +2 -17
  221. package/lib/features/navigation/navigation-target-resolver.spec.d.ts.map +1 -1
  222. package/lib/features/navigation/navigation-target-resolver.spec.js +27 -26
  223. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -1
  224. package/lib/features/rank/model.d.ts +2 -2
  225. package/lib/features/rank/model.d.ts.map +1 -1
  226. package/lib/features/rank/model.js +2 -2
  227. package/lib/features/rank/model.js.map +1 -1
  228. package/lib/features/reconnect/model.d.ts +2 -2
  229. package/lib/features/reconnect/model.d.ts.map +1 -1
  230. package/lib/features/reconnect/model.js +10 -28
  231. package/lib/features/reconnect/model.js.map +1 -1
  232. package/lib/features/save/di.config.d.ts +2 -2
  233. package/lib/features/save/di.config.d.ts.map +1 -1
  234. package/lib/features/save/di.config.js +6 -6
  235. package/lib/features/save/di.config.js.map +1 -1
  236. package/lib/features/save/model.d.ts +1 -1
  237. package/lib/features/save/{save.d.ts → save-keylistener.d.ts} +4 -8
  238. package/lib/features/save/save-keylistener.d.ts.map +1 -0
  239. package/lib/{utils/array-utils.js → features/save/save-keylistener.js} +14 -19
  240. package/lib/features/save/save-keylistener.js.map +1 -0
  241. package/lib/features/select/di.config.d.ts +1 -1
  242. package/lib/features/select/di.config.js +11 -11
  243. package/lib/features/select/di.config.js.map +1 -1
  244. package/lib/features/select/select-feedback-action.d.ts +1 -1
  245. package/lib/features/select/select-feedback-action.d.ts.map +1 -1
  246. package/lib/features/select/select-feedback-action.js +45 -71
  247. package/lib/features/select/select-feedback-action.js.map +1 -1
  248. package/lib/features/select/select-mouse-listener.d.ts +2 -2
  249. package/lib/features/select/select-mouse-listener.js +7 -23
  250. package/lib/features/select/select-mouse-listener.js.map +1 -1
  251. package/lib/features/select/selection-service.d.ts +19 -3
  252. package/lib/features/select/selection-service.d.ts.map +1 -1
  253. package/lib/features/select/selection-service.js +134 -236
  254. package/lib/features/select/selection-service.js.map +1 -1
  255. package/lib/features/select/selection-service.spec.js +96 -138
  256. package/lib/features/select/selection-service.spec.js.map +1 -1
  257. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +21 -4
  258. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -1
  259. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +117 -149
  260. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -1
  261. package/lib/features/tool-feedback/creation-tool-feedback.d.ts +19 -2
  262. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -1
  263. package/lib/features/tool-feedback/creation-tool-feedback.js +81 -115
  264. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -1
  265. package/lib/features/tool-feedback/css-feedback.d.ts +24 -5
  266. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -1
  267. package/lib/features/tool-feedback/css-feedback.js +40 -82
  268. package/lib/features/tool-feedback/css-feedback.js.map +1 -1
  269. package/lib/features/tool-feedback/di.config.d.ts +2 -2
  270. package/lib/features/tool-feedback/di.config.d.ts.map +1 -1
  271. package/lib/features/tool-feedback/di.config.js +27 -24
  272. package/lib/features/tool-feedback/di.config.js.map +1 -1
  273. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +21 -4
  274. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -1
  275. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +160 -204
  276. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -1
  277. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +19 -3
  278. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -1
  279. package/lib/features/tool-feedback/feedback-action-dispatcher.js +35 -72
  280. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -1
  281. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +48 -0
  282. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -0
  283. package/lib/features/tool-feedback/marquee-tool-feedback.js +96 -0
  284. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -0
  285. package/lib/features/tool-feedback/model.d.ts +2 -2
  286. package/lib/features/tool-feedback/model.js +11 -27
  287. package/lib/features/tool-feedback/model.js.map +1 -1
  288. package/lib/features/tool-feedback/view.d.ts +22 -6
  289. package/lib/features/tool-feedback/view.d.ts.map +1 -1
  290. package/lib/features/tool-feedback/view.js +30 -51
  291. package/lib/features/tool-feedback/view.js.map +1 -1
  292. package/lib/features/tool-palette/di.config.d.ts +2 -2
  293. package/lib/features/tool-palette/di.config.d.ts.map +1 -1
  294. package/lib/features/tool-palette/di.config.js +6 -6
  295. package/lib/features/tool-palette/di.config.js.map +1 -1
  296. package/lib/features/tool-palette/palette-item.d.ts +2 -3
  297. package/lib/features/tool-palette/palette-item.d.ts.map +1 -1
  298. package/lib/features/tool-palette/palette-item.js +6 -6
  299. package/lib/features/tool-palette/palette-item.js.map +1 -1
  300. package/lib/features/tool-palette/tool-palette.d.ts +23 -6
  301. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -1
  302. package/lib/features/tool-palette/tool-palette.js +229 -286
  303. package/lib/features/tool-palette/tool-palette.js.map +1 -1
  304. package/lib/features/tools/base-glsp-tool.d.ts +21 -5
  305. package/lib/features/tools/base-glsp-tool.d.ts.map +1 -1
  306. package/lib/features/tools/base-glsp-tool.js +37 -59
  307. package/lib/features/tools/base-glsp-tool.js.map +1 -1
  308. package/lib/features/tools/change-bounds-tool.d.ts +26 -9
  309. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -1
  310. package/lib/features/tools/change-bounds-tool.js +192 -241
  311. package/lib/features/tools/change-bounds-tool.js.map +1 -1
  312. package/lib/features/tools/delete-tool.d.ts +20 -4
  313. package/lib/features/tools/delete-tool.d.ts.map +1 -1
  314. package/lib/features/tools/delete-tool.js +71 -104
  315. package/lib/features/tools/delete-tool.js.map +1 -1
  316. package/lib/features/tools/di.config.d.ts +5 -16
  317. package/lib/features/tools/di.config.d.ts.map +1 -1
  318. package/lib/features/tools/di.config.js +26 -13
  319. package/lib/features/tools/di.config.js.map +1 -1
  320. package/lib/features/tools/edge-creation-tool.d.ts +20 -5
  321. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -1
  322. package/lib/features/tools/edge-creation-tool.js +64 -89
  323. package/lib/features/tools/edge-creation-tool.js.map +1 -1
  324. package/lib/features/tools/edge-edit-tool.d.ts +22 -6
  325. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -1
  326. package/lib/features/tools/edge-edit-tool.js +125 -189
  327. package/lib/features/tools/edge-edit-tool.js.map +1 -1
  328. package/lib/features/tools/marquee-behavior.d.ts +42 -0
  329. package/lib/features/tools/marquee-behavior.d.ts.map +1 -0
  330. package/lib/features/tools/marquee-behavior.js +128 -0
  331. package/lib/features/tools/marquee-behavior.js.map +1 -0
  332. package/{src/base/args.ts → lib/features/tools/marquee-behavior.spec.d.ts} +3 -2
  333. package/lib/features/tools/marquee-behavior.spec.d.ts.map +1 -0
  334. package/lib/features/tools/marquee-behavior.spec.js +165 -0
  335. package/lib/features/tools/marquee-behavior.spec.js.map +1 -0
  336. package/lib/features/tools/marquee-mouse-tool.d.ts +48 -0
  337. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -0
  338. package/lib/features/tools/marquee-mouse-tool.js +148 -0
  339. package/lib/features/tools/marquee-mouse-tool.js.map +1 -0
  340. package/lib/features/tools/marquee-tool.d.ts +30 -0
  341. package/lib/features/tools/marquee-tool.d.ts.map +1 -0
  342. package/lib/features/tools/marquee-tool.js +54 -0
  343. package/lib/features/tools/marquee-tool.js.map +1 -0
  344. package/lib/features/tools/model.d.ts +22 -0
  345. package/lib/features/tools/model.d.ts.map +1 -0
  346. package/lib/features/tools/model.js +24 -0
  347. package/lib/features/tools/model.js.map +1 -0
  348. package/lib/features/tools/node-creation-tool.d.ts +20 -5
  349. package/lib/features/tools/node-creation-tool.d.ts.map +1 -1
  350. package/lib/features/tools/node-creation-tool.js +60 -90
  351. package/lib/features/tools/node-creation-tool.js.map +1 -1
  352. package/lib/features/tools/view.d.ts +7 -0
  353. package/lib/features/tools/view.d.ts.map +1 -0
  354. package/lib/features/tools/view.js +40 -0
  355. package/lib/features/tools/view.js.map +1 -0
  356. package/lib/features/validation/di.config.d.ts +1 -1
  357. package/lib/features/validation/di.config.js +12 -12
  358. package/lib/features/validation/di.config.js.map +1 -1
  359. package/lib/features/validation/issue-marker.d.ts +3 -3
  360. package/lib/features/validation/issue-marker.d.ts.map +1 -1
  361. package/lib/features/validation/issue-marker.js +18 -56
  362. package/lib/features/validation/issue-marker.js.map +1 -1
  363. package/lib/features/validation/marker-navigator.d.ts +19 -3
  364. package/lib/features/validation/marker-navigator.d.ts.map +1 -1
  365. package/lib/features/validation/marker-navigator.js +131 -164
  366. package/lib/features/validation/marker-navigator.js.map +1 -1
  367. package/lib/features/validation/marker-navigator.spec.d.ts +2 -17
  368. package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -1
  369. package/lib/features/validation/marker-navigator.spec.js +84 -77
  370. package/lib/features/validation/marker-navigator.spec.js.map +1 -1
  371. package/lib/features/validation/validate.d.ts +20 -31
  372. package/lib/features/validation/validate.d.ts.map +1 -1
  373. package/lib/features/validation/validate.js +148 -299
  374. package/lib/features/validation/validate.js.map +1 -1
  375. package/lib/{base/args.d.ts → features/viewport/di.config.d.ts} +5 -5
  376. package/lib/features/viewport/di.config.d.ts.map +1 -0
  377. package/lib/features/viewport/di.config.js +34 -0
  378. package/lib/features/viewport/di.config.js.map +1 -0
  379. package/{src/features/model-source-watcher/model-source-changed-action.ts → lib/features/viewport/glsp-scroll-mouse-listener.d.ts} +8 -11
  380. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -0
  381. package/lib/features/viewport/glsp-scroll-mouse-listener.js +39 -0
  382. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -0
  383. package/lib/index.d.ts +37 -35
  384. package/lib/index.d.ts.map +1 -1
  385. package/lib/index.js +39 -35
  386. package/lib/index.js.map +1 -1
  387. package/lib/lib/model.d.ts +3 -3
  388. package/lib/lib/model.d.ts.map +1 -1
  389. package/lib/lib/model.js +11 -27
  390. package/lib/lib/model.js.map +1 -1
  391. package/lib/model-source/glsp-diagram-server.d.ts +4 -6
  392. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -1
  393. package/lib/model-source/glsp-diagram-server.js +63 -122
  394. package/lib/model-source/glsp-diagram-server.js.map +1 -1
  395. package/lib/protocol-reexport.d.ts +45 -0
  396. package/lib/protocol-reexport.d.ts.map +1 -0
  397. package/lib/protocol-reexport.js +75 -0
  398. package/lib/protocol-reexport.js.map +1 -0
  399. package/lib/utils/argument-utils.d.ts +50 -0
  400. package/lib/utils/argument-utils.d.ts.map +1 -0
  401. package/lib/utils/argument-utils.js +110 -0
  402. package/lib/utils/argument-utils.js.map +1 -0
  403. package/lib/utils/html-utils.js +2 -2
  404. package/lib/utils/html-utils.js.map +1 -1
  405. package/lib/utils/layout-utils.d.ts +4 -3
  406. package/lib/utils/layout-utils.d.ts.map +1 -1
  407. package/lib/utils/layout-utils.js +5 -5
  408. package/lib/utils/layout-utils.js.map +1 -1
  409. package/lib/utils/marker.d.ts +1 -39
  410. package/lib/utils/marker.d.ts.map +1 -1
  411. package/lib/utils/marker.js +14 -61
  412. package/lib/utils/marker.js.map +1 -1
  413. package/lib/utils/smodel-util.d.ts +7 -17
  414. package/lib/utils/smodel-util.d.ts.map +1 -1
  415. package/lib/utils/smodel-util.js +18 -67
  416. package/lib/utils/smodel-util.js.map +1 -1
  417. package/lib/utils/viewpoint-util.d.ts +3 -2
  418. package/lib/utils/viewpoint-util.d.ts.map +1 -1
  419. package/lib/utils/viewpoint-util.js +15 -30
  420. package/lib/utils/viewpoint-util.js.map +1 -1
  421. package/lib/views/base-view-module.d.ts +9 -0
  422. package/lib/views/base-view-module.d.ts.map +1 -0
  423. package/lib/views/base-view-module.js +59 -0
  424. package/lib/views/base-view-module.js.map +1 -0
  425. package/lib/views/compartments.d.ts +6 -0
  426. package/lib/views/compartments.d.ts.map +1 -0
  427. package/lib/views/compartments.js +43 -0
  428. package/lib/views/compartments.js.map +1 -0
  429. package/lib/views/glsp-edge-view.d.ts +27 -0
  430. package/lib/views/glsp-edge-view.d.ts.map +1 -0
  431. package/lib/views/glsp-edge-view.js +55 -0
  432. package/lib/views/glsp-edge-view.js.map +1 -0
  433. package/lib/views/index.d.ts +22 -0
  434. package/lib/views/index.d.ts.map +1 -0
  435. package/lib/views/index.js +34 -0
  436. package/lib/views/index.js.map +1 -0
  437. package/lib/views/issue-marker-view.d.ts +9 -0
  438. package/lib/views/issue-marker-view.d.ts.map +1 -0
  439. package/lib/views/issue-marker-view.js +68 -0
  440. package/lib/views/issue-marker-view.js.map +1 -0
  441. package/lib/views/rounded-corner-view.d.ts +13 -0
  442. package/lib/views/rounded-corner-view.d.ts.map +1 -0
  443. package/lib/views/rounded-corner-view.js +82 -0
  444. package/lib/views/rounded-corner-view.js.map +1 -0
  445. package/lib/views/rounded-corner.d.ts +38 -0
  446. package/lib/views/rounded-corner.d.ts.map +1 -0
  447. package/lib/views/rounded-corner.js +62 -0
  448. package/lib/views/rounded-corner.js.map +1 -0
  449. package/package.json +27 -34
  450. package/src/base/action-dispatcher.ts +7 -8
  451. package/src/{utils/array-utils.ts → base/actions/focus-change-action.ts} +8 -16
  452. package/src/{features/undo-redo/model.ts → base/argumentable.ts} +7 -8
  453. package/src/base/auto-complete/auto-complete-actions.ts +2 -2
  454. package/src/base/auto-complete/auto-complete-widget.ts +73 -57
  455. package/src/base/auto-complete/validation-decorator.ts +21 -15
  456. package/src/base/command-stack.ts +4 -7
  457. package/src/base/container-modules.ts +112 -0
  458. package/src/base/di.config.ts +47 -25
  459. package/src/base/drag-aware-mouse-listener.ts +7 -8
  460. package/src/base/{editor-context.ts → editor-context-service.ts} +13 -40
  461. package/src/base/focus-tracker.ts +48 -0
  462. package/src/base/model/model-registry.ts +31 -0
  463. package/src/base/model/update-model-command.ts +14 -22
  464. package/src/base/model-initialization-constraint.ts +16 -11
  465. package/src/base/selection-clearing-mouse-listener.ts +4 -3
  466. package/src/base/tool-manager/glsp-tool-manager.ts +12 -14
  467. package/src/base/types.ts +23 -21
  468. package/src/base/view/view-registry.ts +31 -0
  469. package/src/features/change-bounds/model.ts +23 -13
  470. package/src/features/change-bounds/movement-restrictor.ts +28 -18
  471. package/src/features/change-bounds/snap.ts +6 -5
  472. package/src/features/command-palette/command-palette-tool.ts +4 -4
  473. package/src/features/command-palette/di.config.ts +7 -7
  474. package/src/features/command-palette/server-command-palette-provider.ts +16 -14
  475. package/src/features/context-menu/delete-element-context-menu.ts +10 -11
  476. package/src/features/context-menu/di.config.ts +10 -12
  477. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +8 -7
  478. package/src/features/context-menu/server-context-menu-provider.ts +13 -10
  479. package/src/features/copy-paste/copy-paste-context-menu.ts +66 -37
  480. package/src/features/copy-paste/copy-paste-handler.ts +30 -20
  481. package/src/features/copy-paste/di.config.ts +6 -7
  482. package/src/features/decoration/decoration-placer.ts +6 -15
  483. package/src/features/decoration/di.config.ts +4 -6
  484. package/src/features/edit-label/di.config.ts +5 -5
  485. package/src/features/edit-label/edit-label-tool.ts +4 -4
  486. package/src/features/edit-label/edit-label-validator.ts +18 -19
  487. package/src/features/hints/di.config.ts +6 -7
  488. package/src/features/hints/model.ts +7 -6
  489. package/src/features/hints/type-hints.ts +46 -113
  490. package/src/features/hover/di.config.ts +7 -7
  491. package/src/features/hover/hover.ts +11 -14
  492. package/src/features/layout/di.config.ts +10 -6
  493. package/src/features/layout/freeform-layout.ts +133 -0
  494. package/src/features/layout/layout-commands.spec.ts +104 -85
  495. package/src/features/layout/layout-commands.ts +65 -54
  496. package/src/features/layout/vbox-layout.ts +256 -0
  497. package/src/features/model-source-watcher/di.config.ts +5 -6
  498. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +16 -12
  499. package/src/features/mouse-tool/di.config.ts +4 -4
  500. package/src/features/mouse-tool/mouse-tool.ts +44 -32
  501. package/src/features/navigation/di.config.ts +6 -12
  502. package/src/features/navigation/navigation-action-handler.ts +46 -78
  503. package/src/features/navigation/navigation-target-resolver.spec.ts +6 -9
  504. package/src/features/navigation/navigation-target-resolver.ts +16 -94
  505. package/src/features/rank/model.ts +3 -3
  506. package/src/features/reconnect/model.ts +9 -11
  507. package/src/features/save/di.config.ts +4 -5
  508. package/src/features/save/model.ts +1 -1
  509. package/src/features/save/{save.ts → save-keylistener.ts} +4 -8
  510. package/src/features/select/di.config.ts +6 -6
  511. package/src/features/select/select-feedback-action.ts +6 -8
  512. package/src/features/select/select-mouse-listener.ts +2 -2
  513. package/src/features/select/selection-service.spec.ts +25 -19
  514. package/src/features/select/selection-service.ts +25 -22
  515. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +56 -39
  516. package/src/features/tool-feedback/creation-tool-feedback.ts +49 -24
  517. package/src/features/tool-feedback/css-feedback.ts +19 -14
  518. package/src/features/tool-feedback/di.config.ts +15 -14
  519. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +56 -35
  520. package/src/features/tool-feedback/feedback-action-dispatcher.ts +13 -14
  521. package/src/features/tool-feedback/marquee-tool-feedback.ts +103 -0
  522. package/src/features/tool-feedback/model.ts +2 -3
  523. package/src/features/tool-feedback/view.tsx +20 -13
  524. package/src/features/tool-palette/di.config.ts +5 -7
  525. package/src/features/tool-palette/palette-item.ts +5 -7
  526. package/src/features/tool-palette/tool-palette.ts +126 -107
  527. package/src/features/tools/base-glsp-tool.ts +12 -12
  528. package/src/features/tools/change-bounds-tool.ts +83 -53
  529. package/src/features/tools/delete-tool.ts +23 -20
  530. package/src/features/tools/di.config.ts +22 -11
  531. package/src/features/tools/edge-creation-tool.ts +20 -25
  532. package/src/features/tools/edge-edit-tool.ts +43 -46
  533. package/src/features/tools/marquee-behavior.spec.ts +175 -0
  534. package/src/features/tools/marquee-behavior.ts +158 -0
  535. package/src/features/tools/marquee-mouse-tool.ts +153 -0
  536. package/src/features/tools/marquee-tool.ts +51 -0
  537. package/src/features/tools/model.ts +22 -0
  538. package/src/features/tools/node-creation-tool.ts +18 -22
  539. package/src/features/tools/view.tsx +44 -0
  540. package/src/features/validation/di.config.ts +5 -5
  541. package/src/features/validation/issue-marker.ts +4 -5
  542. package/src/features/validation/marker-navigator.spec.ts +38 -33
  543. package/src/features/validation/marker-navigator.ts +39 -26
  544. package/src/features/validation/validate.ts +25 -59
  545. package/src/features/viewport/di.config.ts +47 -0
  546. package/src/features/viewport/glsp-scroll-mouse-listener.ts +41 -0
  547. package/src/index.ts +57 -37
  548. package/src/lib/model.ts +4 -4
  549. package/src/model-source/glsp-diagram-server.ts +19 -33
  550. package/src/protocol-reexport.ts +64 -0
  551. package/src/utils/argument-utils.ts +130 -0
  552. package/src/utils/layout-utils.ts +19 -11
  553. package/src/utils/marker.ts +8 -32
  554. package/src/utils/smodel-util.ts +28 -22
  555. package/src/utils/viewpoint-util.ts +5 -6
  556. package/src/views/base-view-module.ts +97 -0
  557. package/src/views/compartments.tsx +37 -0
  558. package/src/views/glsp-edge-view.tsx +79 -0
  559. package/{lib/utils/array-utils.d.ts → src/views/index.ts} +7 -4
  560. package/src/views/issue-marker-view.tsx +65 -0
  561. package/src/views/rounded-corner-view.tsx +103 -0
  562. package/src/views/rounded-corner.ts +87 -0
  563. package/lib/base/actions/context-actions.d.ts +0 -36
  564. package/lib/base/actions/context-actions.d.ts.map +0 -1
  565. package/lib/base/actions/context-actions.js +0 -51
  566. package/lib/base/actions/context-actions.js.map +0 -1
  567. package/lib/base/actions/edit-mode-action.d.ts +0 -13
  568. package/lib/base/actions/edit-mode-action.d.ts.map +0 -1
  569. package/lib/base/actions/edit-mode-action.js +0 -56
  570. package/lib/base/actions/edit-mode-action.js.map +0 -1
  571. package/lib/base/actions/edit-validation-actions.d.ts +0 -78
  572. package/lib/base/actions/edit-validation-actions.d.ts.map +0 -1
  573. package/lib/base/actions/edit-validation-actions.js +0 -82
  574. package/lib/base/actions/edit-validation-actions.js.map +0 -1
  575. package/lib/base/actions/protocol-actions.d.ts +0 -41
  576. package/lib/base/actions/protocol-actions.d.ts.map +0 -1
  577. package/lib/base/actions/protocol-actions.js +0 -151
  578. package/lib/base/actions/protocol-actions.js.map +0 -1
  579. package/lib/base/args.d.ts.map +0 -1
  580. package/lib/base/args.js +0 -3
  581. package/lib/base/args.js.map +0 -1
  582. package/lib/base/editor-context.d.ts +0 -46
  583. package/lib/base/editor-context.d.ts.map +0 -1
  584. package/lib/base/editor-context.js +0 -174
  585. package/lib/base/editor-context.js.map +0 -1
  586. package/lib/base/operations/operation.d.ts +0 -129
  587. package/lib/base/operations/operation.d.ts.map +0 -1
  588. package/lib/base/operations/operation.js +0 -201
  589. package/lib/base/operations/operation.js.map +0 -1
  590. package/lib/features/copy-paste/copy-paste-actions.d.ts +0 -50
  591. package/lib/features/copy-paste/copy-paste-actions.d.ts.map +0 -1
  592. package/lib/features/copy-paste/copy-paste-actions.js +0 -68
  593. package/lib/features/copy-paste/copy-paste-actions.js.map +0 -1
  594. package/lib/features/decoration/view.d.ts +0 -8
  595. package/lib/features/decoration/view.d.ts.map +0 -1
  596. package/lib/features/decoration/view.js +0 -80
  597. package/lib/features/decoration/view.js.map +0 -1
  598. package/lib/features/hints/request-type-hints-action.d.ts +0 -32
  599. package/lib/features/hints/request-type-hints-action.d.ts.map +0 -1
  600. package/lib/features/hints/request-type-hints-action.js +0 -30
  601. package/lib/features/hints/request-type-hints-action.js.map +0 -1
  602. package/lib/features/model-source-watcher/model-source-changed-action.d.ts.map +0 -1
  603. package/lib/features/model-source-watcher/model-source-changed-action.js +0 -17
  604. package/lib/features/model-source-watcher/model-source-changed-action.js.map +0 -1
  605. package/lib/features/save/save.d.ts.map +0 -1
  606. package/lib/features/save/save.js +0 -57
  607. package/lib/features/save/save.js.map +0 -1
  608. package/lib/features/undo-redo/model.d.ts.map +0 -1
  609. package/lib/features/undo-redo/model.js +0 -22
  610. package/lib/features/undo-redo/model.js.map +0 -1
  611. package/lib/model-source/glsp-server-status.d.ts +0 -30
  612. package/lib/model-source/glsp-server-status.d.ts.map +0 -1
  613. package/lib/model-source/glsp-server-status.js +0 -61
  614. package/lib/model-source/glsp-server-status.js.map +0 -1
  615. package/lib/utils/array-utils.d.ts.map +0 -1
  616. package/lib/utils/array-utils.js.map +0 -1
  617. package/src/base/actions/context-actions.ts +0 -43
  618. package/src/base/actions/edit-mode-action.ts +0 -33
  619. package/src/base/actions/edit-validation-actions.ts +0 -102
  620. package/src/base/actions/protocol-actions.ts +0 -82
  621. package/src/base/operations/operation.ts +0 -148
  622. package/src/features/copy-paste/copy-paste-actions.ts +0 -60
  623. package/src/features/decoration/view.tsx +0 -54
  624. package/src/features/hints/request-type-hints-action.ts +0 -36
  625. package/src/model-source/glsp-server-status.ts +0 -38
@@ -1,5 +1,5 @@
1
1
  /********************************************************************************
2
- * Copyright (c) 2019 EclipseSource and others.
2
+ * Copyright (c) 2019-2021 EclipseSource and others.
3
3
  *
4
4
  * This program and the accompanying materials are made available under the
5
5
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,9 +13,9 @@
13
13
  *
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
- import { inject, injectable, optional } from "inversify";
16
+ import { Action, ChangeRoutingPointsOperation, ReconnectEdgeOperation } from '@eclipse-glsp/protocol';
17
+ import { inject, injectable, optional } from 'inversify';
17
18
  import {
18
- Action,
19
19
  AnchorComputerRegistry,
20
20
  canEditRouting,
21
21
  Connectable,
@@ -27,22 +27,14 @@ import {
27
27
  SModelRoot,
28
28
  SRoutableElement,
29
29
  SRoutingHandle
30
- } from "sprotty";
31
-
32
- import { DragAwareMouseListener } from "../../base/drag-aware-mouse-listener";
33
- import { ChangeRoutingPointsOperation, ReconnectEdgeOperation } from "../../base/operations/operation";
34
- import { GLSP_TYPES } from "../../base/types";
35
- import { isRoutable, isRoutingHandle } from "../../utils/smodel-util";
36
- import {
37
- isReconnectable,
38
- isReconnectHandle,
39
- isSourceRoutingHandle,
40
- isTargetRoutingHandle,
41
- SReconnectHandle
42
- } from "../reconnect/model";
43
- import { SelectionListener, SelectionService } from "../select/selection-service";
44
- import { DrawFeedbackEdgeAction, feedbackEdgeId, RemoveFeedbackEdgeAction } from "../tool-feedback/creation-tool-feedback";
45
- import { CursorCSS, cursorFeedbackAction } from "../tool-feedback/css-feedback";
30
+ } from 'sprotty';
31
+ import { DragAwareMouseListener } from '../../base/drag-aware-mouse-listener';
32
+ import { GLSP_TYPES } from '../../base/types';
33
+ import { isRoutable, isRoutingHandle } from '../../utils/smodel-util';
34
+ import { isReconnectable, isReconnectHandle, isSourceRoutingHandle, isTargetRoutingHandle, SReconnectHandle } from '../reconnect/model';
35
+ import { SelectionListener, SelectionService } from '../select/selection-service';
36
+ import { DrawFeedbackEdgeAction, feedbackEdgeId, RemoveFeedbackEdgeAction } from '../tool-feedback/creation-tool-feedback';
37
+ import { CursorCSS, cursorFeedbackAction } from '../tool-feedback/css-feedback';
46
38
  import {
47
39
  DrawFeedbackEdgeSourceAction,
48
40
  FeedbackEdgeRouteMovingMouseListener,
@@ -51,12 +43,12 @@ import {
51
43
  HideEdgeReconnectHandlesFeedbackAction,
52
44
  ShowEdgeReconnectHandlesFeedbackAction,
53
45
  SwitchRoutingModeAction
54
- } from "../tool-feedback/edge-edit-tool-feedback";
55
- import { BaseGLSPTool } from "./base-glsp-tool";
46
+ } from '../tool-feedback/edge-edit-tool-feedback';
47
+ import { BaseGLSPTool } from './base-glsp-tool';
56
48
 
57
49
  @injectable()
58
50
  export class EdgeEditTool extends BaseGLSPTool {
59
- static ID = "glsp.edge-edit-tool";
51
+ static ID = 'glsp.edge-edit-tool';
60
52
 
61
53
  @inject(GLSP_TYPES.SelectionService) protected selectionService: SelectionService;
62
54
  @inject(AnchorComputerRegistry) protected anchorRegistry: AnchorComputerRegistry;
@@ -121,7 +113,7 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
121
113
  return edge !== undefined && edge.id !== feedbackEdgeId(edge.root) && isSelected(edge);
122
114
  }
123
115
 
124
- protected setEdgeSelected(edge: SRoutableElement) {
116
+ protected setEdgeSelected(edge: SRoutableElement): void {
125
117
  if (this.edge && this.edge.id !== edge.id) {
126
118
  // reset from a previously selected edge
127
119
  this.reset();
@@ -143,18 +135,22 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
143
135
  return this.edge !== undefined && isSelected(this.edge);
144
136
  }
145
137
 
146
- protected setReconnectHandleSelected(edge: SRoutableElement, reconnectHandle: SReconnectHandle) {
138
+ protected setReconnectHandleSelected(edge: SRoutableElement, reconnectHandle: SReconnectHandle): void {
147
139
  if (this.edge && this.edge.target && this.edge.source) {
148
140
  if (isSourceRoutingHandle(edge, reconnectHandle)) {
149
- this.tool.dispatchFeedback([new HideEdgeReconnectHandlesFeedbackAction(),
150
- cursorFeedbackAction(CursorCSS.EDGE_RECONNECT),
151
- new DrawFeedbackEdgeSourceAction(this.edge.type, this.edge.targetId)]);
152
- this.reconnectMode = "NEW_SOURCE";
141
+ this.tool.dispatchFeedback([
142
+ new HideEdgeReconnectHandlesFeedbackAction(),
143
+ cursorFeedbackAction(CursorCSS.EDGE_RECONNECT),
144
+ new DrawFeedbackEdgeSourceAction(this.edge.type, this.edge.targetId)
145
+ ]);
146
+ this.reconnectMode = 'NEW_SOURCE';
153
147
  } else if (isTargetRoutingHandle(edge, reconnectHandle)) {
154
- this.tool.dispatchFeedback([new HideEdgeReconnectHandlesFeedbackAction(),
155
- cursorFeedbackAction(CursorCSS.EDGE_CREATION_TARGET),
156
- new DrawFeedbackEdgeAction(this.edge.type, this.edge.sourceId)]);
157
- this.reconnectMode = "NEW_TARGET";
148
+ this.tool.dispatchFeedback([
149
+ new HideEdgeReconnectHandlesFeedbackAction(),
150
+ cursorFeedbackAction(CursorCSS.EDGE_CREATION_TARGET),
151
+ new DrawFeedbackEdgeAction(this.edge.type, this.edge.sourceId)
152
+ ]);
153
+ this.reconnectMode = 'NEW_TARGET';
158
154
  }
159
155
  }
160
156
  }
@@ -164,10 +160,10 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
164
160
  }
165
161
 
166
162
  protected isReconnectingNewSource(): boolean {
167
- return this.reconnectMode === "NEW_SOURCE";
163
+ return this.reconnectMode === 'NEW_SOURCE';
168
164
  }
169
165
 
170
- protected setRoutingHandleSelected(edge: SRoutableElement, routingHandle: SRoutingHandle) {
166
+ protected setRoutingHandleSelected(edge: SRoutableElement, routingHandle: SRoutingHandle): void {
171
167
  if (this.edge && this.edge.target && this.edge.source) {
172
168
  this.routingHandle = routingHandle;
173
169
  }
@@ -177,15 +173,15 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
177
173
  return this.edge !== undefined && (this.edge.sourceId !== sourceId || this.edge.targetId !== targetId);
178
174
  }
179
175
 
180
- protected setNewConnectable(connectable?: SModelElement & Connectable) {
176
+ protected setNewConnectable(connectable?: SModelElement & Connectable): void {
181
177
  this.newConnectable = connectable;
182
178
  }
183
179
 
184
- protected isReadyToReconnect() {
180
+ protected isReadyToReconnect(): boolean | undefined {
185
181
  return this.edge && this.isReconnecting() && this.newConnectable !== undefined;
186
182
  }
187
183
 
188
- protected isReadyToReroute() {
184
+ protected isReadyToReroute(): boolean {
189
185
  return this.routingHandle !== undefined;
190
186
  }
191
187
 
@@ -235,7 +231,8 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
235
231
  }
236
232
  this.reset();
237
233
  } else if (this.edge && this.routingHandle) {
238
- // we need to re-retrieve the edge as it might have changed due to a server udpate since we do not reset the state between reroute actions
234
+ // we need to re-retrieve the edge as it might have changed due to a server update since we do not reset the state between
235
+ // reroute actions
239
236
  const latestEdge = target.index.getById(this.edge.id);
240
237
  if (latestEdge && isRoutable(latestEdge)) {
241
238
  result.push(new ChangeRoutingPointsOperation([{ elementId: latestEdge.id, newRoutingPoints: latestEdge.routingPoints }]));
@@ -251,9 +248,10 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
251
248
  if (!this.newConnectable || currentTarget !== this.newConnectable) {
252
249
  this.setNewConnectable(currentTarget);
253
250
  if (currentTarget) {
254
- if ((this.reconnectMode === 'NEW_SOURCE' && currentTarget.canConnect(this.edge, "source")) ||
255
- (this.reconnectMode === 'NEW_TARGET' && currentTarget.canConnect(this.edge, "target"))) {
256
-
251
+ if (
252
+ (this.reconnectMode === 'NEW_SOURCE' && currentTarget.canConnect(this.edge, 'source')) ||
253
+ (this.reconnectMode === 'NEW_TARGET' && currentTarget.canConnect(this.edge, 'target'))
254
+ ) {
257
255
  this.tool.dispatchFeedback([cursorFeedbackAction(CursorCSS.EDGE_RECONNECT)]);
258
256
  return [];
259
257
  }
@@ -293,25 +291,24 @@ class EdgeEditListener extends DragAwareMouseListener implements SelectionListen
293
291
  }
294
292
  }
295
293
 
296
- public reset() {
294
+ public reset(): void {
297
295
  this.resetFeedback();
298
296
  this.resetData();
299
297
  }
300
298
 
301
- protected resetData() {
299
+ protected resetData(): void {
302
300
  this.edge = undefined;
303
301
  this.reconnectMode = undefined;
304
302
  this.newConnectable = undefined;
305
303
  this.routingHandle = undefined;
306
304
  }
307
305
 
308
- protected resetFeedback() {
306
+ protected resetFeedback(): void {
309
307
  const result: Action[] = [];
310
308
  if (this.edge) {
311
309
  result.push(new SwitchRoutingModeAction([], [this.edge.id]));
312
310
  }
313
- result.push(...[new HideEdgeReconnectHandlesFeedbackAction(),
314
- cursorFeedbackAction(), new RemoveFeedbackEdgeAction()]);
311
+ result.push(...[new HideEdgeReconnectHandlesFeedbackAction(), cursorFeedbackAction(), new RemoveFeedbackEdgeAction()]);
315
312
  this.tool.deregisterFeedback(result);
316
313
  this.tool.deregisterFeedbackListeners();
317
314
  }
@@ -0,0 +1,175 @@
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
+
17
+ import { expect } from 'chai';
18
+ import { IMarqueeBehavior, MarqueeUtil } from './marquee-behavior';
19
+
20
+ describe('MarqueeUtil', () => {
21
+ function initUtil(marqueeBehavior?: IMarqueeBehavior): MarqueeUtil {
22
+ const util = new MarqueeUtil(marqueeBehavior);
23
+ util.updateStartPoint({ x: 0, y: 0 });
24
+ util.updateCurrentPoint({ x: 0, y: 0 });
25
+ return util;
26
+ }
27
+
28
+ describe('Node marquee', () => {
29
+ const node = { x: 20, y: 20, width: 200, height: 50 };
30
+
31
+ it('touch element', () => {
32
+ const util = initUtil();
33
+ expect(util.isNodeMarked(node)).is.equals(false);
34
+ util.updateCurrentPoint({ x: 30, y: 50 });
35
+ expect(util.isNodeMarked(node)).is.equals(true);
36
+ util.updateCurrentPoint({ x: 250, y: 85 });
37
+ expect(util.isNodeMarked(node)).is.equals(true);
38
+ util.updateStartPoint({ x: 30, y: 25 });
39
+ expect(util.isNodeMarked(node)).is.equals(true);
40
+ });
41
+
42
+ it('touch element (reverse)', () => {
43
+ const util = initUtil();
44
+ expect(util.isNodeMarked(node)).is.equals(false);
45
+ util.updateStartPoint({ x: 30, y: 50 });
46
+ expect(util.isNodeMarked(node)).is.equals(true);
47
+ util.updateStartPoint({ x: 250, y: 85 });
48
+ expect(util.isNodeMarked(node)).is.equals(true);
49
+ util.updateCurrentPoint({ x: 30, y: 25 });
50
+ expect(util.isNodeMarked(node)).is.equals(true);
51
+ });
52
+
53
+ it('mark entire element', () => {
54
+ const util = initUtil({ entireElement: true, entireEdge: false });
55
+ expect(util.isNodeMarked(node)).is.equals(false);
56
+ util.updateCurrentPoint({ x: 30, y: 50 });
57
+ expect(util.isNodeMarked(node)).is.equals(false);
58
+ util.updateCurrentPoint({ x: 250, y: 85 });
59
+ expect(util.isNodeMarked(node)).is.equals(true);
60
+ util.updateStartPoint({ x: 30, y: 85 });
61
+ expect(util.isNodeMarked(node)).is.equals(false);
62
+ });
63
+
64
+ it('mark entire element (reverse)', () => {
65
+ const util = initUtil({ entireElement: true, entireEdge: false });
66
+ expect(util.isNodeMarked(node)).is.equals(false);
67
+ util.updateStartPoint({ x: 30, y: 50 });
68
+ expect(util.isNodeMarked(node)).is.equals(false);
69
+ util.updateStartPoint({ x: 250, y: 85 });
70
+ expect(util.isNodeMarked(node)).is.equals(true);
71
+ util.updateCurrentPoint({ x: 30, y: 85 });
72
+ expect(util.isNodeMarked(node)).is.equals(false);
73
+ });
74
+ });
75
+
76
+ describe('Edge marquee', () => {
77
+ const edge = [
78
+ { x: 20, y: 40 },
79
+ { x: 40, y: 20 }
80
+ ];
81
+ const edge2 = [
82
+ { x: 20, y: 20 },
83
+ { x: 40, y: 40 },
84
+ { x: 50, y: 10 }
85
+ ];
86
+
87
+ it('touch edge', () => {
88
+ const util = initUtil();
89
+ expect(util.isEdgeMarked(edge)).is.equals(false);
90
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
91
+ util.updateCurrentPoint({ x: 20, y: 20 });
92
+ expect(util.isEdgeMarked(edge)).is.equals(false);
93
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
94
+ util.updateCurrentPoint({ x: 30, y: 30 });
95
+ expect(util.isEdgeMarked(edge)).is.equals(true);
96
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
97
+ util.updateCurrentPoint({ x: 50, y: 50 });
98
+ expect(util.isEdgeMarked(edge)).is.equals(true);
99
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
100
+ util.updateStartPoint({ x: 25, y: 25 });
101
+ expect(util.isEdgeMarked(edge)).is.equals(true);
102
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
103
+ });
104
+
105
+ it('touch edge (reverse)', () => {
106
+ const util = initUtil();
107
+ expect(util.isEdgeMarked(edge)).is.equals(false);
108
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
109
+ util.updateStartPoint({ x: 20, y: 20 });
110
+ expect(util.isEdgeMarked(edge)).is.equals(false);
111
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
112
+ util.updateStartPoint({ x: 30, y: 30 });
113
+ expect(util.isEdgeMarked(edge)).is.equals(true);
114
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
115
+ util.updateStartPoint({ x: 50, y: 50 });
116
+ expect(util.isEdgeMarked(edge)).is.equals(true);
117
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
118
+ util.updateCurrentPoint({ x: 25, y: 25 });
119
+ expect(util.isEdgeMarked(edge)).is.equals(true);
120
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
121
+ });
122
+
123
+ it('mark entire edge', () => {
124
+ const util = initUtil({ entireElement: false, entireEdge: true });
125
+ expect(util.isEdgeMarked(edge)).is.equals(false);
126
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
127
+ util.updateCurrentPoint({ x: 20, y: 20 });
128
+ expect(util.isEdgeMarked(edge)).is.equals(false);
129
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
130
+ util.updateCurrentPoint({ x: 30, y: 30 });
131
+ expect(util.isEdgeMarked(edge)).is.equals(false);
132
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
133
+ util.updateCurrentPoint({ x: 45, y: 50 });
134
+ expect(util.isEdgeMarked(edge)).is.equals(true);
135
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
136
+ util.updateCurrentPoint({ x: 55, y: 50 });
137
+ expect(util.isEdgeMarked(edge)).is.equals(true);
138
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
139
+ util.updateStartPoint({ x: 25, y: 25 });
140
+ expect(util.isEdgeMarked(edge)).is.equals(false);
141
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
142
+ });
143
+
144
+ it('mark entire edge (reverse)', () => {
145
+ const util = initUtil({ entireElement: false, entireEdge: true });
146
+ expect(util.isEdgeMarked(edge)).is.equals(false);
147
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
148
+ util.updateStartPoint({ x: 20, y: 20 });
149
+ expect(util.isEdgeMarked(edge)).is.equals(false);
150
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
151
+ util.updateStartPoint({ x: 30, y: 30 });
152
+ expect(util.isEdgeMarked(edge)).is.equals(false);
153
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
154
+ util.updateStartPoint({ x: 45, y: 50 });
155
+ expect(util.isEdgeMarked(edge)).is.equals(true);
156
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
157
+ util.updateStartPoint({ x: 55, y: 50 });
158
+ expect(util.isEdgeMarked(edge)).is.equals(true);
159
+ expect(util.isEdgeMarked(edge2)).is.equals(true);
160
+ util.updateCurrentPoint({ x: 25, y: 25 });
161
+ expect(util.isEdgeMarked(edge)).is.equals(false);
162
+ expect(util.isEdgeMarked(edge2)).is.equals(false);
163
+ });
164
+
165
+ it('edge path should be marked', () => {
166
+ const path = 'M 599.968775008469,272.3972942960205 L 677.0904664855072,232';
167
+ const util = initUtil({ entireElement: false, entireEdge: true });
168
+ expect(util.isEdgePathMarked(path)).is.equals(false);
169
+ util.updateCurrentPoint({ x: 600, y: 300 });
170
+ expect(util.isEdgePathMarked(path)).is.equals(false);
171
+ util.updateCurrentPoint({ x: 700, y: 300 });
172
+ expect(util.isEdgePathMarked(path)).is.equals(true);
173
+ });
174
+ });
175
+ });
@@ -0,0 +1,158 @@
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
+
17
+ import { Bounds, Point } from '@eclipse-glsp/protocol';
18
+ import { PointToPointLine } from 'sprotty';
19
+ import { DrawMarqueeAction } from '../tool-feedback/marquee-tool-feedback';
20
+
21
+ export interface IMarqueeBehavior {
22
+ readonly entireElement: boolean;
23
+ readonly entireEdge: boolean;
24
+ }
25
+
26
+ export class MarqueeUtil {
27
+ protected startPoint: Point;
28
+ protected currentPoint: Point;
29
+ protected marqueeBehavior: IMarqueeBehavior;
30
+
31
+ constructor(marqueeBehavior?: IMarqueeBehavior) {
32
+ if (marqueeBehavior) {
33
+ this.marqueeBehavior = marqueeBehavior;
34
+ } else {
35
+ this.marqueeBehavior = { entireElement: false, entireEdge: false };
36
+ }
37
+ }
38
+
39
+ updateStartPoint(position: Point): void {
40
+ this.startPoint = position;
41
+ }
42
+
43
+ updateCurrentPoint(position: Point): void {
44
+ this.currentPoint = position;
45
+ }
46
+
47
+ drawMarqueeAction(): DrawMarqueeAction {
48
+ return new DrawMarqueeAction(this.startPoint, this.currentPoint);
49
+ }
50
+
51
+ isEdgePathMarked(path: string | null): boolean {
52
+ if (!path) {
53
+ return false;
54
+ }
55
+ const points = path
56
+ .split(/M|L/)
57
+ .filter(p => p)
58
+ .map(p => {
59
+ const coord = p.split(',');
60
+ return { x: parseInt(coord[0], 10), y: parseInt(coord[1], 10) };
61
+ });
62
+ return this.isEdgeMarked(points);
63
+ }
64
+
65
+ isEdgeMarked(points: Point[]): boolean {
66
+ return this.marqueeBehavior.entireEdge ? this.isEntireEdgeMarked(points) : this.isPartOfEdgeMarked(points);
67
+ }
68
+
69
+ isNodeMarked(elementBounds: Bounds): boolean {
70
+ const horizontallyIn =
71
+ this.startPoint.x < this.currentPoint.x
72
+ ? this.isElementBetweenXAxis(elementBounds, this.startPoint.x, this.currentPoint.x)
73
+ : this.isElementBetweenXAxis(elementBounds, this.currentPoint.x, this.startPoint.x);
74
+ const verticallyIn =
75
+ this.startPoint.y < this.currentPoint.y
76
+ ? this.isElementBetweenYAxis(elementBounds, this.startPoint.y, this.currentPoint.y)
77
+ : this.isElementBetweenYAxis(elementBounds, this.currentPoint.y, this.startPoint.y);
78
+ return horizontallyIn && verticallyIn;
79
+ }
80
+
81
+ private isEntireEdgeMarked(points: Point[]): boolean {
82
+ for (let i = 0; i < points.length; i++) {
83
+ if (!this.pointInRect(points[i])) {
84
+ return false;
85
+ }
86
+ }
87
+ return true;
88
+ }
89
+
90
+ private isPartOfEdgeMarked(points: Point[]): boolean {
91
+ for (let i = 0; i < points.length - 1; i++) {
92
+ if (this.isLineMarked(points[i], points[i + 1])) {
93
+ return true;
94
+ }
95
+ }
96
+ return false;
97
+ }
98
+
99
+ private isLineMarked(point1: Point, point2: Point): boolean {
100
+ const line = new PointToPointLine(point1, point2);
101
+ return (
102
+ this.pointInRect(point1) ||
103
+ this.pointInRect(point2) ||
104
+ this.lineIntersect(line, this.startPoint, { x: this.startPoint.x, y: this.currentPoint.y }) ||
105
+ this.lineIntersect(line, this.startPoint, { x: this.currentPoint.x, y: this.startPoint.y }) ||
106
+ this.lineIntersect(line, { x: this.currentPoint.x, y: this.startPoint.y }, this.currentPoint) ||
107
+ this.lineIntersect(line, { x: this.startPoint.x, y: this.currentPoint.y }, this.currentPoint)
108
+ );
109
+ }
110
+
111
+ private lineIntersect(line: PointToPointLine, p1: Point, p2: Point): boolean {
112
+ return line.intersection(new PointToPointLine(p1, p2)) !== undefined;
113
+ }
114
+
115
+ private pointInRect(point: Point): boolean {
116
+ const boolX =
117
+ this.startPoint.x <= this.currentPoint.x
118
+ ? this.isBetween(point.x, this.startPoint.x, this.currentPoint.x)
119
+ : this.isBetween(point.x, this.currentPoint.x, this.startPoint.x);
120
+ const boolY =
121
+ this.startPoint.y <= this.currentPoint.y
122
+ ? this.isBetween(point.y, this.startPoint.y, this.currentPoint.y)
123
+ : this.isBetween(point.y, this.currentPoint.y, this.startPoint.y);
124
+ return boolX && boolY;
125
+ }
126
+
127
+ private isElementBetweenXAxis(elementBounds: Bounds, marqueeLeft: number, marqueeRight: number): boolean {
128
+ const leftEdge = this.isBetween(elementBounds.x, marqueeLeft, marqueeRight);
129
+ const rightEdge = this.isBetween(elementBounds.x + elementBounds.width, marqueeLeft, marqueeRight);
130
+ if (this.marqueeBehavior.entireElement) {
131
+ return leftEdge && rightEdge;
132
+ }
133
+ return (
134
+ leftEdge ||
135
+ rightEdge ||
136
+ this.isBetween(marqueeLeft, elementBounds.x, elementBounds.x + elementBounds.width) ||
137
+ this.isBetween(marqueeRight, elementBounds.x, elementBounds.x + elementBounds.width)
138
+ );
139
+ }
140
+
141
+ private isElementBetweenYAxis(elementBounds: Bounds, marqueeTop: number, marqueeBottom: number): boolean {
142
+ const topEdge = this.isBetween(elementBounds.y, marqueeTop, marqueeBottom);
143
+ const bottomEdge = this.isBetween(elementBounds.y + elementBounds.height, marqueeTop, marqueeBottom);
144
+ if (this.marqueeBehavior.entireElement) {
145
+ return topEdge && bottomEdge;
146
+ }
147
+ return (
148
+ topEdge ||
149
+ bottomEdge ||
150
+ this.isBetween(marqueeTop, elementBounds.y, elementBounds.y + elementBounds.height) ||
151
+ this.isBetween(marqueeBottom, elementBounds.y, elementBounds.y + elementBounds.height)
152
+ );
153
+ }
154
+
155
+ private isBetween(x: number, lower: number, upper: number): boolean {
156
+ return lower <= x && x <= upper;
157
+ }
158
+ }
@@ -0,0 +1,153 @@
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 { Action, SelectAction } from '@eclipse-glsp/protocol';
17
+ import { inject, injectable, optional } from 'inversify';
18
+ import {
19
+ BoundsAware,
20
+ EnableDefaultToolsAction,
21
+ isSelectable,
22
+ isSelected,
23
+ KeyListener,
24
+ SEdge,
25
+ SModelElement,
26
+ SModelRoot,
27
+ SNode,
28
+ TYPES
29
+ } from 'sprotty';
30
+ import { DOMHelper } from 'sprotty/lib/base/views/dom-helper';
31
+ import { GLSP_TYPES } from '../../base/types';
32
+ import { DragAwareMouseListener } from '../../base/drag-aware-mouse-listener';
33
+ import { getAbsolutePosition, toAbsoluteBounds } from '../../utils/viewpoint-util';
34
+ import { CursorCSS, cursorFeedbackAction } from '../tool-feedback/css-feedback';
35
+ import { RemoveMarqueeAction } from '../tool-feedback/marquee-tool-feedback';
36
+ import { BaseGLSPTool } from './base-glsp-tool';
37
+ import { IMarqueeBehavior, MarqueeUtil } from './marquee-behavior';
38
+
39
+ @injectable()
40
+ export class MarqueeMouseTool extends BaseGLSPTool {
41
+ static ID = 'glsp.marquee-mouse-tool';
42
+
43
+ @inject(TYPES.DOMHelper) protected domHelper: DOMHelper;
44
+ @inject(GLSP_TYPES.IMarqueeBehavior) @optional() protected marqueeBehavior: IMarqueeBehavior;
45
+
46
+ protected marqueeMouseListener: MarqueeMouseListener;
47
+ protected shiftKeyListener: ShiftKeyListener = new ShiftKeyListener();
48
+
49
+ get id(): string {
50
+ return MarqueeMouseTool.ID;
51
+ }
52
+
53
+ enable(): void {
54
+ this.marqueeMouseListener = new MarqueeMouseListener(this.domHelper, this.editorContext.modelRoot, this.marqueeBehavior);
55
+ this.mouseTool.register(this.marqueeMouseListener);
56
+ this.keyTool.register(this.shiftKeyListener);
57
+ this.dispatchFeedback([cursorFeedbackAction(CursorCSS.MARQUEE)]);
58
+ }
59
+
60
+ disable(): void {
61
+ this.mouseTool.deregister(this.marqueeMouseListener);
62
+ this.keyTool.deregister(this.shiftKeyListener);
63
+ this.deregisterFeedback([cursorFeedbackAction()]);
64
+ }
65
+ }
66
+
67
+ export class MarqueeMouseListener extends DragAwareMouseListener {
68
+ protected domHelper: DOMHelper;
69
+ protected marqueeUtil: MarqueeUtil;
70
+ protected nodes: (SModelElement & BoundsAware)[];
71
+ protected edges: SVGGElement[];
72
+ protected previouslySelected: string[];
73
+ protected isActive = false;
74
+
75
+ constructor(domHelper: DOMHelper, root: SModelRoot, marqueeBehavior: IMarqueeBehavior | undefined) {
76
+ super();
77
+ this.domHelper = domHelper;
78
+ this.marqueeUtil = new MarqueeUtil(marqueeBehavior);
79
+ this.nodes = Array.from(
80
+ root.index
81
+ .all()
82
+ .map(e => e as SModelElement & BoundsAware)
83
+ .filter(e => isSelectable(e))
84
+ .filter(e => e instanceof SNode)
85
+ );
86
+ const sEdges = Array.from(
87
+ root.index
88
+ .all()
89
+ .filter(e => e instanceof SEdge)
90
+ .filter(e => isSelectable(e))
91
+ .map(e => e.id)
92
+ );
93
+ this.edges = Array.from(document.querySelectorAll('g')).filter(e => sEdges.includes(this.domHelper.findSModelIdByDOMElement(e)));
94
+ }
95
+
96
+ mouseDown(target: SModelElement, event: MouseEvent): Action[] {
97
+ this.isActive = true;
98
+ this.marqueeUtil.updateStartPoint(getAbsolutePosition(target, event));
99
+ if (event.ctrlKey) {
100
+ this.previouslySelected = Array.from(
101
+ target.root.index
102
+ .all()
103
+ .map(e => e as SModelElement & BoundsAware)
104
+ .filter(e => isSelected(e))
105
+ .map(e => e.id)
106
+ );
107
+ }
108
+ return [];
109
+ }
110
+
111
+ mouseMove(target: SModelElement, event: MouseEvent): Action[] {
112
+ this.marqueeUtil.updateCurrentPoint(getAbsolutePosition(target, event));
113
+ if (this.isActive) {
114
+ const nodeIdsSelected = this.nodes.filter(e => this.marqueeUtil.isNodeMarked(toAbsoluteBounds(e))).map(e => e.id);
115
+ const edgeIdsSelected = this.edges.filter(e => this.isEdgeMarked(e)).map(e => this.domHelper.findSModelIdByDOMElement(e));
116
+ const selected = nodeIdsSelected.concat(edgeIdsSelected);
117
+ return [
118
+ new SelectAction([], Array.from(target.root.index.all().map(e => e.id))),
119
+ new SelectAction(selected.concat(this.previouslySelected), []),
120
+ this.marqueeUtil.drawMarqueeAction()
121
+ ];
122
+ }
123
+ return [];
124
+ }
125
+
126
+ mouseUp(target: SModelElement, event: MouseEvent): Action[] {
127
+ this.isActive = false;
128
+ if (event.shiftKey) {
129
+ return [new RemoveMarqueeAction()];
130
+ }
131
+ return [new RemoveMarqueeAction(), new EnableDefaultToolsAction()];
132
+ }
133
+
134
+ isEdgeMarked(element: SVGElement): boolean {
135
+ if (!element.getAttribute('transform')) {
136
+ if (element.children[0]) {
137
+ const path = element.children[0].getAttribute('d');
138
+ return this.marqueeUtil.isEdgePathMarked(path);
139
+ }
140
+ }
141
+ return false;
142
+ }
143
+ }
144
+
145
+ @injectable()
146
+ export class ShiftKeyListener extends KeyListener {
147
+ keyUp(element: SModelElement, event: KeyboardEvent): Action[] {
148
+ if (event.shiftKey) {
149
+ return [];
150
+ }
151
+ return [new RemoveMarqueeAction(), new EnableDefaultToolsAction()];
152
+ }
153
+ }