@eclipse-glsp/client 0.9.0-next.c5944e10

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 (602) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +12 -0
  3. package/css/command-palette.css +58 -0
  4. package/css/decoration.css +37 -0
  5. package/css/glsp-sprotty.css +106 -0
  6. package/css/tool-palette.css +138 -0
  7. package/lib/base/action-dispatcher.d.ts +25 -0
  8. package/lib/base/action-dispatcher.d.ts.map +1 -0
  9. package/lib/base/action-dispatcher.js +110 -0
  10. package/lib/base/action-dispatcher.js.map +1 -0
  11. package/lib/base/actions/context-actions.d.ts +36 -0
  12. package/lib/base/actions/context-actions.d.ts.map +1 -0
  13. package/lib/base/actions/context-actions.js +45 -0
  14. package/lib/base/actions/context-actions.js.map +1 -0
  15. package/lib/base/actions/edit-mode-action.d.ts +13 -0
  16. package/lib/base/actions/edit-mode-action.d.ts.map +1 -0
  17. package/lib/base/actions/edit-mode-action.js +52 -0
  18. package/lib/base/actions/edit-mode-action.js.map +1 -0
  19. package/lib/base/actions/edit-validation-actions.d.ts +78 -0
  20. package/lib/base/actions/edit-validation-actions.d.ts.map +1 -0
  21. package/lib/base/actions/edit-validation-actions.js +77 -0
  22. package/lib/base/actions/edit-validation-actions.js.map +1 -0
  23. package/lib/base/actions/focus-change-action.d.ts +24 -0
  24. package/lib/base/actions/focus-change-action.d.ts.map +1 -0
  25. package/lib/base/actions/focus-change-action.js +16 -0
  26. package/lib/base/actions/focus-change-action.js.map +1 -0
  27. package/lib/base/args.d.ts +24 -0
  28. package/lib/base/args.d.ts.map +1 -0
  29. package/lib/base/args.js +8 -0
  30. package/lib/base/args.js.map +1 -0
  31. package/lib/base/auto-complete/auto-complete-actions.d.ts +21 -0
  32. package/lib/base/auto-complete/auto-complete-actions.d.ts.map +1 -0
  33. package/lib/base/auto-complete/auto-complete-actions.js +8 -0
  34. package/lib/base/auto-complete/auto-complete-actions.js.map +1 -0
  35. package/lib/base/auto-complete/auto-complete-widget.d.ts +88 -0
  36. package/lib/base/auto-complete/auto-complete-widget.d.ts.map +1 -0
  37. package/lib/base/auto-complete/auto-complete-widget.js +233 -0
  38. package/lib/base/auto-complete/auto-complete-widget.js.map +1 -0
  39. package/lib/base/auto-complete/validation-decorator.d.ts +47 -0
  40. package/lib/base/auto-complete/validation-decorator.d.ts.map +1 -0
  41. package/lib/base/auto-complete/validation-decorator.js +113 -0
  42. package/lib/base/auto-complete/validation-decorator.js.map +1 -0
  43. package/lib/base/command-stack.d.ts +7 -0
  44. package/lib/base/command-stack.d.ts.map +1 -0
  45. package/lib/base/command-stack.js +49 -0
  46. package/lib/base/command-stack.js.map +1 -0
  47. package/lib/base/di.config.d.ts +28 -0
  48. package/lib/base/di.config.d.ts.map +1 -0
  49. package/lib/base/di.config.js +81 -0
  50. package/lib/base/di.config.js.map +1 -0
  51. package/lib/base/drag-aware-mouse-listener.d.ts +36 -0
  52. package/lib/base/drag-aware-mouse-listener.d.ts.map +1 -0
  53. package/lib/base/drag-aware-mouse-listener.js +66 -0
  54. package/lib/base/drag-aware-mouse-listener.js.map +1 -0
  55. package/lib/base/editor-context.d.ts +46 -0
  56. package/lib/base/editor-context.d.ts.map +1 -0
  57. package/lib/base/editor-context.js +110 -0
  58. package/lib/base/editor-context.js.map +1 -0
  59. package/lib/base/focus-tracker.d.ts +9 -0
  60. package/lib/base/focus-tracker.d.ts.map +1 -0
  61. package/lib/base/focus-tracker.js +65 -0
  62. package/lib/base/focus-tracker.js.map +1 -0
  63. package/lib/base/model/model-registry.d.ts +5 -0
  64. package/lib/base/model/model-registry.d.ts.map +1 -0
  65. package/lib/base/model/model-registry.js +43 -0
  66. package/lib/base/model/model-registry.js.map +1 -0
  67. package/lib/base/model/update-model-command.d.ts +26 -0
  68. package/lib/base/model/update-model-command.d.ts.map +1 -0
  69. package/lib/base/model/update-model-command.js +132 -0
  70. package/lib/base/model/update-model-command.js.map +1 -0
  71. package/lib/base/model-initialization-constraint.d.ts +39 -0
  72. package/lib/base/model-initialization-constraint.d.ts.map +1 -0
  73. package/lib/base/model-initialization-constraint.js +106 -0
  74. package/lib/base/model-initialization-constraint.js.map +1 -0
  75. package/lib/base/operations/operation.d.ts +135 -0
  76. package/lib/base/operations/operation.d.ts.map +1 -0
  77. package/lib/base/operations/operation.js +182 -0
  78. package/lib/base/operations/operation.js.map +1 -0
  79. package/lib/base/selection-clearing-mouse-listener.d.ts +17 -0
  80. package/lib/base/selection-clearing-mouse-listener.d.ts.map +1 -0
  81. package/lib/base/selection-clearing-mouse-listener.js +55 -0
  82. package/lib/base/selection-clearing-mouse-listener.js.map +1 -0
  83. package/lib/base/source-uri-aware.d.ts +20 -0
  84. package/lib/base/source-uri-aware.d.ts.map +1 -0
  85. package/lib/base/source-uri-aware.js +26 -0
  86. package/lib/base/source-uri-aware.js.map +1 -0
  87. package/lib/base/tool-manager/glsp-tool-manager.d.ts +22 -0
  88. package/lib/base/tool-manager/glsp-tool-manager.d.ts.map +1 -0
  89. package/lib/base/tool-manager/glsp-tool-manager.js +110 -0
  90. package/lib/base/tool-manager/glsp-tool-manager.js.map +1 -0
  91. package/lib/base/types.d.ts +38 -0
  92. package/lib/base/types.d.ts.map +1 -0
  93. package/lib/base/types.js +41 -0
  94. package/lib/base/types.js.map +1 -0
  95. package/lib/base/view/view-registry.d.ts +5 -0
  96. package/lib/base/view/view-registry.d.ts.map +1 -0
  97. package/lib/base/view/view-registry.js +43 -0
  98. package/lib/base/view/view-registry.js.map +1 -0
  99. package/lib/features/change-bounds/model.d.ts +38 -0
  100. package/lib/features/change-bounds/model.d.ts.map +1 -0
  101. package/lib/features/change-bounds/model.js +61 -0
  102. package/lib/features/change-bounds/model.js.map +1 -0
  103. package/lib/features/change-bounds/movement-restrictor.d.ts +14 -0
  104. package/lib/features/change-bounds/movement-restrictor.d.ts.map +1 -0
  105. package/lib/features/change-bounds/movement-restrictor.js +90 -0
  106. package/lib/features/change-bounds/movement-restrictor.js.map +1 -0
  107. package/lib/features/change-bounds/snap.d.ts +7 -0
  108. package/lib/features/change-bounds/snap.d.ts.map +1 -0
  109. package/lib/features/change-bounds/snap.js +44 -0
  110. package/lib/features/change-bounds/snap.js.map +1 -0
  111. package/lib/features/command-palette/command-palette-tool.d.ts +12 -0
  112. package/lib/features/command-palette/command-palette-tool.d.ts.map +1 -0
  113. package/lib/features/command-palette/command-palette-tool.js +63 -0
  114. package/lib/features/command-palette/command-palette-tool.js.map +1 -0
  115. package/lib/features/command-palette/di.config.d.ts +20 -0
  116. package/lib/features/command-palette/di.config.d.ts.map +1 -0
  117. package/lib/features/command-palette/di.config.js +33 -0
  118. package/lib/features/command-palette/di.config.js.map +1 -0
  119. package/lib/features/command-palette/server-command-palette-provider.d.ts +15 -0
  120. package/lib/features/command-palette/server-command-palette-provider.d.ts.map +1 -0
  121. package/lib/features/command-palette/server-command-palette-provider.js +66 -0
  122. package/lib/features/command-palette/server-command-palette-provider.js.map +1 -0
  123. package/lib/features/context-menu/delete-element-context-menu.d.ts +8 -0
  124. package/lib/features/context-menu/delete-element-context-menu.d.ts.map +1 -0
  125. package/lib/features/context-menu/delete-element-context-menu.js +55 -0
  126. package/lib/features/context-menu/delete-element-context-menu.js.map +1 -0
  127. package/lib/features/context-menu/di.config.d.ts +19 -0
  128. package/lib/features/context-menu/di.config.d.ts.map +1 -0
  129. package/lib/features/context-menu/di.config.js +36 -0
  130. package/lib/features/context-menu/di.config.js.map +1 -0
  131. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts +9 -0
  132. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.d.ts.map +1 -0
  133. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js +65 -0
  134. package/lib/features/context-menu/selection-service-aware-context-menu-mouse-listener.js.map +1 -0
  135. package/lib/features/context-menu/server-context-menu-provider.d.ts +13 -0
  136. package/lib/features/context-menu/server-context-menu-provider.d.ts.map +1 -0
  137. package/lib/features/context-menu/server-context-menu-provider.js +63 -0
  138. package/lib/features/context-menu/server-context-menu-provider.js.map +1 -0
  139. package/lib/features/copy-paste/copy-paste-actions.d.ts +50 -0
  140. package/lib/features/copy-paste/copy-paste-actions.d.ts.map +1 -0
  141. package/lib/features/copy-paste/copy-paste-actions.js +58 -0
  142. package/lib/features/copy-paste/copy-paste-actions.js.map +1 -0
  143. package/lib/features/copy-paste/copy-paste-context-menu.d.ts +32 -0
  144. package/lib/features/copy-paste/copy-paste-context-menu.d.ts.map +1 -0
  145. package/lib/features/copy-paste/copy-paste-context-menu.js +151 -0
  146. package/lib/features/copy-paste/copy-paste-context-menu.js.map +1 -0
  147. package/lib/features/copy-paste/copy-paste-handler.d.ts +50 -0
  148. package/lib/features/copy-paste/copy-paste-handler.d.ts.map +1 -0
  149. package/lib/features/copy-paste/copy-paste-handler.js +149 -0
  150. package/lib/features/copy-paste/copy-paste-handler.js.map +1 -0
  151. package/lib/features/copy-paste/di.config.d.ts +24 -0
  152. package/lib/features/copy-paste/di.config.d.ts.map +1 -0
  153. package/lib/features/copy-paste/di.config.js +40 -0
  154. package/lib/features/copy-paste/di.config.js.map +1 -0
  155. package/lib/features/decoration/decoration-placer.d.ts +6 -0
  156. package/lib/features/decoration/decoration-placer.d.ts.map +1 -0
  157. package/lib/features/decoration/decoration-placer.js +47 -0
  158. package/lib/features/decoration/decoration-placer.js.map +1 -0
  159. package/lib/features/decoration/di.config.d.ts +20 -0
  160. package/lib/features/decoration/di.config.d.ts.map +1 -0
  161. package/lib/features/decoration/di.config.js +27 -0
  162. package/lib/features/decoration/di.config.js.map +1 -0
  163. package/lib/features/edit-label/di.config.d.ts +19 -0
  164. package/lib/features/edit-label/di.config.d.ts.map +1 -0
  165. package/lib/features/edit-label/di.config.js +30 -0
  166. package/lib/features/edit-label/di.config.js.map +1 -0
  167. package/lib/features/edit-label/edit-label-tool.d.ts +13 -0
  168. package/lib/features/edit-label/edit-label-tool.d.ts.map +1 -0
  169. package/lib/features/edit-label/edit-label-tool.js +55 -0
  170. package/lib/features/edit-label/edit-label-tool.js.map +1 -0
  171. package/lib/features/edit-label/edit-label-validator.d.ts +20 -0
  172. package/lib/features/edit-label/edit-label-validator.d.ts.map +1 -0
  173. package/lib/features/edit-label/edit-label-validator.js +111 -0
  174. package/lib/features/edit-label/edit-label-validator.js.map +1 -0
  175. package/lib/features/hints/di.config.d.ts +19 -0
  176. package/lib/features/hints/di.config.d.ts.map +1 -0
  177. package/lib/features/hints/di.config.js +30 -0
  178. package/lib/features/hints/di.config.js.map +1 -0
  179. package/lib/features/hints/model.d.ts +26 -0
  180. package/lib/features/hints/model.d.ts.map +1 -0
  181. package/lib/features/hints/model.js +14 -0
  182. package/lib/features/hints/model.js.map +1 -0
  183. package/lib/features/hints/request-type-hints-action.d.ts +32 -0
  184. package/lib/features/hints/request-type-hints-action.d.ts.map +1 -0
  185. package/lib/features/hints/request-type-hints-action.js +26 -0
  186. package/lib/features/hints/request-type-hints-action.js.map +1 -0
  187. package/lib/features/hints/type-hints.d.ts +75 -0
  188. package/lib/features/hints/type-hints.d.ts.map +1 -0
  189. package/lib/features/hints/type-hints.js +199 -0
  190. package/lib/features/hints/type-hints.js.map +1 -0
  191. package/lib/features/hover/di.config.d.ts +19 -0
  192. package/lib/features/hover/di.config.d.ts.map +1 -0
  193. package/lib/features/hover/di.config.js +46 -0
  194. package/lib/features/hover/di.config.js.map +1 -0
  195. package/lib/features/hover/hover.d.ts +11 -0
  196. package/lib/features/hover/hover.d.ts.map +1 -0
  197. package/lib/features/hover/hover.js +88 -0
  198. package/lib/features/hover/hover.js.map +1 -0
  199. package/lib/features/layout/di.config.d.ts +19 -0
  200. package/lib/features/layout/di.config.d.ts.map +1 -0
  201. package/lib/features/layout/di.config.js +26 -0
  202. package/lib/features/layout/di.config.js.map +1 -0
  203. package/lib/features/layout/layout-commands.d.ts +137 -0
  204. package/lib/features/layout/layout-commands.d.ts.map +1 -0
  205. package/lib/features/layout/layout-commands.js +411 -0
  206. package/lib/features/layout/layout-commands.js.map +1 -0
  207. package/lib/features/layout/layout-commands.spec.d.ts +18 -0
  208. package/lib/features/layout/layout-commands.spec.d.ts.map +1 -0
  209. package/lib/features/layout/layout-commands.spec.js +297 -0
  210. package/lib/features/layout/layout-commands.spec.js.map +1 -0
  211. package/lib/features/model-source-watcher/di.config.d.ts +19 -0
  212. package/lib/features/model-source-watcher/di.config.d.ts.map +1 -0
  213. package/lib/features/model-source-watcher/di.config.js +26 -0
  214. package/lib/features/model-source-watcher/di.config.js.map +1 -0
  215. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts +23 -0
  216. package/lib/features/model-source-watcher/model-source-changed-action-handler.d.ts.map +1 -0
  217. package/lib/features/model-source-watcher/model-source-changed-action-handler.js +83 -0
  218. package/lib/features/model-source-watcher/model-source-changed-action-handler.js.map +1 -0
  219. package/lib/features/model-source-watcher/model-source-changed-action.d.ts +24 -0
  220. package/lib/features/model-source-watcher/model-source-changed-action.d.ts.map +1 -0
  221. package/lib/features/model-source-watcher/model-source-changed-action.js +16 -0
  222. package/lib/features/model-source-watcher/model-source-changed-action.js.map +1 -0
  223. package/lib/features/mouse-tool/di.config.d.ts +19 -0
  224. package/lib/features/mouse-tool/di.config.d.ts.map +1 -0
  225. package/lib/features/mouse-tool/di.config.js +28 -0
  226. package/lib/features/mouse-tool/di.config.js.map +1 -0
  227. package/lib/features/mouse-tool/mouse-tool.d.ts +19 -0
  228. package/lib/features/mouse-tool/mouse-tool.d.ts.map +1 -0
  229. package/lib/features/mouse-tool/mouse-tool.js +140 -0
  230. package/lib/features/mouse-tool/mouse-tool.js.map +1 -0
  231. package/lib/features/navigation/di.config.d.ts +18 -0
  232. package/lib/features/navigation/di.config.d.ts.map +1 -0
  233. package/lib/features/navigation/di.config.js +31 -0
  234. package/lib/features/navigation/di.config.js.map +1 -0
  235. package/lib/features/navigation/navigation-action-handler.d.ts +117 -0
  236. package/lib/features/navigation/navigation-action-handler.d.ts.map +1 -0
  237. package/lib/features/navigation/navigation-action-handler.js +293 -0
  238. package/lib/features/navigation/navigation-action-handler.js.map +1 -0
  239. package/lib/features/navigation/navigation-target-resolver.d.ts +55 -0
  240. package/lib/features/navigation/navigation-target-resolver.d.ts.map +1 -0
  241. package/lib/features/navigation/navigation-target-resolver.js +157 -0
  242. package/lib/features/navigation/navigation-target-resolver.js.map +1 -0
  243. package/lib/features/navigation/navigation-target-resolver.spec.d.ts +18 -0
  244. package/lib/features/navigation/navigation-target-resolver.spec.d.ts.map +1 -0
  245. package/lib/features/navigation/navigation-target-resolver.spec.js +54 -0
  246. package/lib/features/navigation/navigation-target-resolver.spec.js.map +1 -0
  247. package/lib/features/rank/model.d.ts +22 -0
  248. package/lib/features/rank/model.d.ts.map +1 -0
  249. package/lib/features/rank/model.js +28 -0
  250. package/lib/features/rank/model.js.map +1 -0
  251. package/lib/features/reconnect/model.d.ts +30 -0
  252. package/lib/features/reconnect/model.d.ts.map +1 -0
  253. package/lib/features/reconnect/model.js +66 -0
  254. package/lib/features/reconnect/model.js.map +1 -0
  255. package/lib/features/save/di.config.d.ts +23 -0
  256. package/lib/features/save/di.config.d.ts.map +1 -0
  257. package/lib/features/save/di.config.js +29 -0
  258. package/lib/features/save/di.config.js.map +1 -0
  259. package/lib/features/save/model.d.ts +22 -0
  260. package/lib/features/save/model.d.ts.map +1 -0
  261. package/lib/features/save/model.js +9 -0
  262. package/lib/features/save/model.js.map +1 -0
  263. package/lib/features/save/save.d.ts +27 -0
  264. package/lib/features/save/save.d.ts.map +1 -0
  265. package/lib/features/save/save.js +42 -0
  266. package/lib/features/save/save.js.map +1 -0
  267. package/lib/features/select/di.config.d.ts +19 -0
  268. package/lib/features/select/di.config.d.ts.map +1 -0
  269. package/lib/features/select/di.config.js +35 -0
  270. package/lib/features/select/di.config.js.map +1 -0
  271. package/lib/features/select/select-feedback-action.d.ts +34 -0
  272. package/lib/features/select/select-feedback-action.d.ts.map +1 -0
  273. package/lib/features/select/select-feedback-action.js +97 -0
  274. package/lib/features/select/select-feedback-action.js.map +1 -0
  275. package/lib/features/select/select-mouse-listener.d.ts +25 -0
  276. package/lib/features/select/select-mouse-listener.d.ts.map +1 -0
  277. package/lib/features/select/select-mouse-listener.js +32 -0
  278. package/lib/features/select/select-mouse-listener.js.map +1 -0
  279. package/lib/features/select/selection-service.d.ts +52 -0
  280. package/lib/features/select/selection-service.d.ts.map +1 -0
  281. package/lib/features/select/selection-service.js +226 -0
  282. package/lib/features/select/selection-service.js.map +1 -0
  283. package/lib/features/select/selection-service.spec.d.ts +2 -0
  284. package/lib/features/select/selection-service.spec.d.ts.map +1 -0
  285. package/lib/features/select/selection-service.spec.js +360 -0
  286. package/lib/features/select/selection-service.spec.js.map +1 -0
  287. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts +47 -0
  288. package/lib/features/tool-feedback/change-bounds-tool-feedback.d.ts.map +1 -0
  289. package/lib/features/tool-feedback/change-bounds-tool-feedback.js +236 -0
  290. package/lib/features/tool-feedback/change-bounds-tool-feedback.js.map +1 -0
  291. package/lib/features/tool-feedback/creation-tool-feedback.d.ts +43 -0
  292. package/lib/features/tool-feedback/creation-tool-feedback.d.ts.map +1 -0
  293. package/lib/features/tool-feedback/creation-tool-feedback.js +181 -0
  294. package/lib/features/tool-feedback/creation-tool-feedback.js.map +1 -0
  295. package/lib/features/tool-feedback/css-feedback.d.ts +32 -0
  296. package/lib/features/tool-feedback/css-feedback.d.ts.map +1 -0
  297. package/lib/features/tool-feedback/css-feedback.js +111 -0
  298. package/lib/features/tool-feedback/css-feedback.js.map +1 -0
  299. package/lib/features/tool-feedback/di.config.d.ts +19 -0
  300. package/lib/features/tool-feedback/di.config.d.ts.map +1 -0
  301. package/lib/features/tool-feedback/di.config.js +53 -0
  302. package/lib/features/tool-feedback/di.config.js.map +1 -0
  303. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts +82 -0
  304. package/lib/features/tool-feedback/edge-edit-tool-feedback.d.ts.map +1 -0
  305. package/lib/features/tool-feedback/edge-edit-tool-feedback.js +315 -0
  306. package/lib/features/tool-feedback/edge-edit-tool-feedback.js.map +1 -0
  307. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts +50 -0
  308. package/lib/features/tool-feedback/feedback-action-dispatcher.d.ts.map +1 -0
  309. package/lib/features/tool-feedback/feedback-action-dispatcher.js +75 -0
  310. package/lib/features/tool-feedback/feedback-action-dispatcher.js.map +1 -0
  311. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts +32 -0
  312. package/lib/features/tool-feedback/marquee-tool-feedback.d.ts.map +1 -0
  313. package/lib/features/tool-feedback/marquee-tool-feedback.js +111 -0
  314. package/lib/features/tool-feedback/marquee-tool-feedback.js.map +1 -0
  315. package/lib/features/tool-feedback/model.d.ts +23 -0
  316. package/lib/features/tool-feedback/model.d.ts.map +1 -0
  317. package/lib/features/tool-feedback/model.js +34 -0
  318. package/lib/features/tool-feedback/model.js.map +1 -0
  319. package/lib/features/tool-feedback/view.d.ts +16 -0
  320. package/lib/features/tool-feedback/view.d.ts.map +1 -0
  321. package/lib/features/tool-feedback/view.js +81 -0
  322. package/lib/features/tool-feedback/view.js.map +1 -0
  323. package/lib/features/tool-palette/di.config.d.ts +20 -0
  324. package/lib/features/tool-palette/di.config.d.ts.map +1 -0
  325. package/lib/features/tool-palette/di.config.js +29 -0
  326. package/lib/features/tool-palette/di.config.js.map +1 -0
  327. package/lib/features/tool-palette/palette-item.d.ts +27 -0
  328. package/lib/features/tool-palette/palette-item.d.ts.map +1 -0
  329. package/lib/features/tool-palette/palette-item.js +37 -0
  330. package/lib/features/tool-palette/palette-item.js.map +1 -0
  331. package/lib/features/tool-palette/tool-palette.d.ts +56 -0
  332. package/lib/features/tool-palette/tool-palette.d.ts.map +1 -0
  333. package/lib/features/tool-palette/tool-palette.js +401 -0
  334. package/lib/features/tool-palette/tool-palette.js.map +1 -0
  335. package/lib/features/tools/base-glsp-tool.d.ts +20 -0
  336. package/lib/features/tools/base-glsp-tool.d.ts.map +1 -0
  337. package/lib/features/tools/base-glsp-tool.js +70 -0
  338. package/lib/features/tools/base-glsp-tool.js.map +1 -0
  339. package/lib/features/tools/change-bounds-tool.d.ts +71 -0
  340. package/lib/features/tools/change-bounds-tool.d.ts.map +1 -0
  341. package/lib/features/tools/change-bounds-tool.js +371 -0
  342. package/lib/features/tools/change-bounds-tool.js.map +1 -0
  343. package/lib/features/tools/delete-tool.d.ts +36 -0
  344. package/lib/features/tools/delete-tool.d.ts.map +1 -0
  345. package/lib/features/tools/delete-tool.js +129 -0
  346. package/lib/features/tools/delete-tool.js.map +1 -0
  347. package/lib/features/tools/di.config.d.ts +23 -0
  348. package/lib/features/tools/di.config.d.ts.map +1 -0
  349. package/lib/features/tools/di.config.js +55 -0
  350. package/lib/features/tools/di.config.js.map +1 -0
  351. package/lib/features/tools/edge-creation-tool.d.ts +37 -0
  352. package/lib/features/tools/edge-creation-tool.d.ts.map +1 -0
  353. package/lib/features/tools/edge-creation-tool.js +158 -0
  354. package/lib/features/tools/edge-creation-tool.js.map +1 -0
  355. package/lib/features/tools/edge-edit-tool.d.ts +50 -0
  356. package/lib/features/tools/edge-edit-tool.d.ts.map +1 -0
  357. package/lib/features/tools/edge-edit-tool.js +281 -0
  358. package/lib/features/tools/edge-edit-tool.js.map +1 -0
  359. package/lib/features/tools/marquee-mouse-tool.d.ts +37 -0
  360. package/lib/features/tools/marquee-mouse-tool.d.ts.map +1 -0
  361. package/lib/features/tools/marquee-mouse-tool.js +226 -0
  362. package/lib/features/tools/marquee-mouse-tool.js.map +1 -0
  363. package/lib/features/tools/marquee-tool.d.ts +14 -0
  364. package/lib/features/tools/marquee-tool.d.ts.map +1 -0
  365. package/lib/features/tools/marquee-tool.js +69 -0
  366. package/lib/features/tools/marquee-tool.js.map +1 -0
  367. package/lib/features/tools/model.d.ts +22 -0
  368. package/lib/features/tools/model.d.ts.map +1 -0
  369. package/lib/features/tools/model.js +24 -0
  370. package/lib/features/tools/model.js.map +1 -0
  371. package/lib/features/tools/node-creation-tool.d.ts +26 -0
  372. package/lib/features/tools/node-creation-tool.d.ts.map +1 -0
  373. package/lib/features/tools/node-creation-tool.js +117 -0
  374. package/lib/features/tools/node-creation-tool.js.map +1 -0
  375. package/lib/features/tools/view.d.ts +7 -0
  376. package/lib/features/tools/view.d.ts.map +1 -0
  377. package/lib/features/tools/view.js +40 -0
  378. package/lib/features/tools/view.js.map +1 -0
  379. package/lib/features/undo-redo/model.d.ts +27 -0
  380. package/lib/features/undo-redo/model.d.ts.map +1 -0
  381. package/lib/features/undo-redo/model.js +18 -0
  382. package/lib/features/undo-redo/model.js.map +1 -0
  383. package/lib/features/validation/di.config.d.ts +25 -0
  384. package/lib/features/validation/di.config.d.ts.map +1 -0
  385. package/lib/features/validation/di.config.js +44 -0
  386. package/lib/features/validation/di.config.js.map +1 -0
  387. package/lib/features/validation/issue-marker.d.ts +43 -0
  388. package/lib/features/validation/issue-marker.d.ts.map +1 -0
  389. package/lib/features/validation/issue-marker.js +89 -0
  390. package/lib/features/validation/issue-marker.js.map +1 -0
  391. package/lib/features/validation/marker-navigator.d.ts +55 -0
  392. package/lib/features/validation/marker-navigator.d.ts.map +1 -0
  393. package/lib/features/validation/marker-navigator.js +247 -0
  394. package/lib/features/validation/marker-navigator.js.map +1 -0
  395. package/lib/features/validation/marker-navigator.spec.d.ts +18 -0
  396. package/lib/features/validation/marker-navigator.spec.d.ts.map +1 -0
  397. package/lib/features/validation/marker-navigator.spec.js +177 -0
  398. package/lib/features/validation/marker-navigator.spec.js.map +1 -0
  399. package/lib/features/validation/validate.d.ts +111 -0
  400. package/lib/features/validation/validate.d.ts.map +1 -0
  401. package/lib/features/validation/validate.js +290 -0
  402. package/lib/features/validation/validate.js.map +1 -0
  403. package/lib/features/viewport/di.config.d.ts +19 -0
  404. package/lib/features/viewport/di.config.d.ts.map +1 -0
  405. package/lib/features/viewport/di.config.js +34 -0
  406. package/lib/features/viewport/di.config.js.map +1 -0
  407. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts +7 -0
  408. package/lib/features/viewport/glsp-scroll-mouse-listener.d.ts.map +1 -0
  409. package/lib/features/viewport/glsp-scroll-mouse-listener.js +54 -0
  410. package/lib/features/viewport/glsp-scroll-mouse-listener.js.map +1 -0
  411. package/lib/index.d.ts +110 -0
  412. package/lib/index.d.ts.map +1 -0
  413. package/lib/index.js +144 -0
  414. package/lib/index.js.map +1 -0
  415. package/lib/lib/model.d.ts +24 -0
  416. package/lib/lib/model.d.ts.map +1 -0
  417. package/lib/lib/model.js +33 -0
  418. package/lib/lib/model.js.map +1 -0
  419. package/lib/model-source/glsp-diagram-server.d.ts +38 -0
  420. package/lib/model-source/glsp-diagram-server.d.ts.map +1 -0
  421. package/lib/model-source/glsp-diagram-server.js +88 -0
  422. package/lib/model-source/glsp-diagram-server.js.map +1 -0
  423. package/lib/model-source/glsp-server-status.d.ts +30 -0
  424. package/lib/model-source/glsp-server-status.d.ts.map +1 -0
  425. package/lib/model-source/glsp-server-status.js +44 -0
  426. package/lib/model-source/glsp-server-status.js.map +1 -0
  427. package/lib/utils/argument-utils.d.ts +50 -0
  428. package/lib/utils/argument-utils.d.ts.map +1 -0
  429. package/lib/utils/argument-utils.js +112 -0
  430. package/lib/utils/argument-utils.js.map +1 -0
  431. package/lib/utils/array-utils.d.ts +28 -0
  432. package/lib/utils/array-utils.d.ts.map +1 -0
  433. package/lib/utils/array-utils.js +56 -0
  434. package/lib/utils/array-utils.js.map +1 -0
  435. package/lib/utils/html-utils.d.ts +17 -0
  436. package/lib/utils/html-utils.d.ts.map +1 -0
  437. package/lib/utils/html-utils.js +30 -0
  438. package/lib/utils/html-utils.js.map +1 -0
  439. package/lib/utils/layout-utils.d.ts +41 -0
  440. package/lib/utils/layout-utils.d.ts.map +1 -0
  441. package/lib/utils/layout-utils.js +61 -0
  442. package/lib/utils/layout-utils.js.map +1 -0
  443. package/lib/utils/marker.d.ts +48 -0
  444. package/lib/utils/marker.d.ts.map +1 -0
  445. package/lib/utils/marker.js +48 -0
  446. package/lib/utils/marker.js.map +1 -0
  447. package/lib/utils/smodel-util.d.ts +41 -0
  448. package/lib/utils/smodel-util.d.ts.map +1 -0
  449. package/lib/utils/smodel-util.js +134 -0
  450. package/lib/utils/smodel-util.js.map +1 -0
  451. package/lib/utils/viewpoint-util.d.ts +52 -0
  452. package/lib/utils/viewpoint-util.d.ts.map +1 -0
  453. package/lib/utils/viewpoint-util.js +89 -0
  454. package/lib/utils/viewpoint-util.js.map +1 -0
  455. package/lib/views/base-view-module.d.ts +24 -0
  456. package/lib/views/base-view-module.d.ts.map +1 -0
  457. package/lib/views/base-view-module.js +59 -0
  458. package/lib/views/base-view-module.js.map +1 -0
  459. package/lib/views/default-types.d.ts +37 -0
  460. package/lib/views/default-types.d.ts.map +1 -0
  461. package/lib/views/default-types.js +47 -0
  462. package/lib/views/default-types.js.map +1 -0
  463. package/lib/views/glsp-edge-view.d.ts +11 -0
  464. package/lib/views/glsp-edge-view.d.ts.map +1 -0
  465. package/lib/views/glsp-edge-view.js +70 -0
  466. package/lib/views/glsp-edge-view.js.map +1 -0
  467. package/lib/views/index.d.ts +22 -0
  468. package/lib/views/index.d.ts.map +1 -0
  469. package/lib/views/index.js +34 -0
  470. package/lib/views/index.js.map +1 -0
  471. package/lib/views/issue-marker-view.d.ts +8 -0
  472. package/lib/views/issue-marker-view.d.ts.map +1 -0
  473. package/lib/views/issue-marker-view.js +59 -0
  474. package/lib/views/issue-marker-view.js.map +1 -0
  475. package/lib/views/rounded-corner-view.d.ts +13 -0
  476. package/lib/views/rounded-corner-view.d.ts.map +1 -0
  477. package/lib/views/rounded-corner-view.js +82 -0
  478. package/lib/views/rounded-corner-view.js.map +1 -0
  479. package/lib/views/rounded-corner.d.ts +37 -0
  480. package/lib/views/rounded-corner.d.ts.map +1 -0
  481. package/lib/views/rounded-corner.js +62 -0
  482. package/lib/views/rounded-corner.js.map +1 -0
  483. package/package.json +68 -0
  484. package/src/base/action-dispatcher.ts +103 -0
  485. package/src/base/actions/context-actions.ts +43 -0
  486. package/src/base/actions/edit-mode-action.ts +33 -0
  487. package/src/base/actions/edit-validation-actions.ts +103 -0
  488. package/src/base/actions/focus-change-action.ts +26 -0
  489. package/src/base/args.ts +26 -0
  490. package/src/base/auto-complete/auto-complete-actions.ts +24 -0
  491. package/src/base/auto-complete/auto-complete-widget.ts +314 -0
  492. package/src/base/auto-complete/validation-decorator.ts +126 -0
  493. package/src/base/command-stack.ts +36 -0
  494. package/src/base/di.config.ts +96 -0
  495. package/src/base/drag-aware-mouse-listener.ts +69 -0
  496. package/src/base/editor-context.ts +124 -0
  497. package/src/base/focus-tracker.ts +50 -0
  498. package/src/base/model/model-registry.ts +31 -0
  499. package/src/base/model/update-model-command.ts +118 -0
  500. package/src/base/model-initialization-constraint.ts +94 -0
  501. package/src/base/operations/operation.ts +178 -0
  502. package/src/base/selection-clearing-mouse-listener.ts +43 -0
  503. package/src/base/source-uri-aware.ts +22 -0
  504. package/src/base/tool-manager/glsp-tool-manager.ts +97 -0
  505. package/src/base/types.ts +37 -0
  506. package/src/base/view/view-registry.ts +31 -0
  507. package/src/features/change-bounds/model.ts +74 -0
  508. package/src/features/change-bounds/movement-restrictor.ts +89 -0
  509. package/src/features/change-bounds/snap.ts +35 -0
  510. package/src/features/command-palette/command-palette-tool.ts +46 -0
  511. package/src/features/command-palette/di.config.ts +34 -0
  512. package/src/features/command-palette/server-command-palette-provider.ts +48 -0
  513. package/src/features/context-menu/delete-element-context-menu.ts +42 -0
  514. package/src/features/context-menu/di.config.ts +35 -0
  515. package/src/features/context-menu/selection-service-aware-context-menu-mouse-listener.ts +50 -0
  516. package/src/features/context-menu/server-context-menu-provider.ts +46 -0
  517. package/src/features/copy-paste/copy-paste-actions.ts +60 -0
  518. package/src/features/copy-paste/copy-paste-context-menu.ts +138 -0
  519. package/src/features/copy-paste/copy-paste-handler.ts +152 -0
  520. package/src/features/copy-paste/di.config.ts +45 -0
  521. package/src/features/decoration/decoration-placer.ts +46 -0
  522. package/src/features/decoration/di.config.ts +28 -0
  523. package/src/features/edit-label/di.config.ts +30 -0
  524. package/src/features/edit-label/edit-label-tool.ts +51 -0
  525. package/src/features/edit-label/edit-label-validator.ts +104 -0
  526. package/src/features/hints/di.config.ts +30 -0
  527. package/src/features/hints/model.ts +34 -0
  528. package/src/features/hints/request-type-hints-action.ts +36 -0
  529. package/src/features/hints/type-hints.ts +257 -0
  530. package/src/features/hover/di.config.ts +61 -0
  531. package/src/features/hover/hover.ts +95 -0
  532. package/src/features/layout/di.config.ts +26 -0
  533. package/src/features/layout/layout-commands.spec.ts +366 -0
  534. package/src/features/layout/layout-commands.ts +415 -0
  535. package/src/features/model-source-watcher/di.config.ts +26 -0
  536. package/src/features/model-source-watcher/model-source-changed-action-handler.ts +70 -0
  537. package/src/features/model-source-watcher/model-source-changed-action.ts +26 -0
  538. package/src/features/mouse-tool/di.config.ts +28 -0
  539. package/src/features/mouse-tool/mouse-tool.ts +139 -0
  540. package/src/features/navigation/di.config.ts +35 -0
  541. package/src/features/navigation/navigation-action-handler.ts +272 -0
  542. package/src/features/navigation/navigation-target-resolver.spec.ts +61 -0
  543. package/src/features/navigation/navigation-target-resolver.ts +146 -0
  544. package/src/features/rank/model.ts +29 -0
  545. package/src/features/reconnect/model.ts +76 -0
  546. package/src/features/save/di.config.ts +30 -0
  547. package/src/features/save/model.ts +26 -0
  548. package/src/features/save/save.ts +35 -0
  549. package/src/features/select/di.config.ts +35 -0
  550. package/src/features/select/select-feedback-action.ts +87 -0
  551. package/src/features/select/select-mouse-listener.ts +26 -0
  552. package/src/features/select/selection-service.spec.ts +372 -0
  553. package/src/features/select/selection-service.ts +239 -0
  554. package/src/features/tool-feedback/change-bounds-tool-feedback.ts +244 -0
  555. package/src/features/tool-feedback/creation-tool-feedback.ts +190 -0
  556. package/src/features/tool-feedback/css-feedback.ts +98 -0
  557. package/src/features/tool-feedback/di.config.ts +69 -0
  558. package/src/features/tool-feedback/edge-edit-tool-feedback.ts +327 -0
  559. package/src/features/tool-feedback/feedback-action-dispatcher.ts +101 -0
  560. package/src/features/tool-feedback/marquee-tool-feedback.ts +104 -0
  561. package/src/features/tool-feedback/model.ts +32 -0
  562. package/src/features/tool-feedback/view.tsx +70 -0
  563. package/src/features/tool-palette/di.config.ts +30 -0
  564. package/src/features/tool-palette/palette-item.ts +40 -0
  565. package/src/features/tool-palette/tool-palette.ts +416 -0
  566. package/src/features/tools/base-glsp-tool.ts +53 -0
  567. package/src/features/tools/change-bounds-tool.ts +445 -0
  568. package/src/features/tools/delete-tool.ts +120 -0
  569. package/src/features/tools/di.config.ts +56 -0
  570. package/src/features/tools/edge-creation-tool.ts +171 -0
  571. package/src/features/tools/edge-edit-tool.ts +325 -0
  572. package/src/features/tools/marquee-mouse-tool.ts +244 -0
  573. package/src/features/tools/marquee-tool.ts +52 -0
  574. package/src/features/tools/model.ts +22 -0
  575. package/src/features/tools/node-creation-tool.ts +123 -0
  576. package/src/features/tools/view.tsx +38 -0
  577. package/src/features/undo-redo/model.ts +26 -0
  578. package/src/features/validation/di.config.ts +51 -0
  579. package/src/features/validation/issue-marker.ts +93 -0
  580. package/src/features/validation/marker-navigator.spec.ts +207 -0
  581. package/src/features/validation/marker-navigator.ts +249 -0
  582. package/src/features/validation/validate.ts +274 -0
  583. package/src/features/viewport/di.config.ts +47 -0
  584. package/src/features/viewport/glsp-scroll-mouse-listener.ts +50 -0
  585. package/src/index.ts +115 -0
  586. package/src/lib/model.ts +27 -0
  587. package/src/model-source/glsp-diagram-server.ts +114 -0
  588. package/src/model-source/glsp-server-status.ts +38 -0
  589. package/src/utils/argument-utils.ts +127 -0
  590. package/src/utils/array-utils.ts +55 -0
  591. package/src/utils/html-utils.ts +25 -0
  592. package/src/utils/layout-utils.ts +97 -0
  593. package/src/utils/marker.ts +63 -0
  594. package/src/utils/smodel-util.ts +149 -0
  595. package/src/utils/viewpoint-util.ts +99 -0
  596. package/src/views/base-view-module.ts +98 -0
  597. package/src/views/default-types.ts +48 -0
  598. package/src/views/glsp-edge-view.tsx +70 -0
  599. package/src/views/index.ts +21 -0
  600. package/src/views/issue-marker-view.tsx +55 -0
  601. package/src/views/rounded-corner-view.tsx +88 -0
  602. package/src/views/rounded-corner.ts +88 -0
@@ -0,0 +1,139 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2019 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, multiInject, optional } from 'inversify';
17
+ import { On, VNode, VNodeData } from 'snabbdom';
18
+ import { Action, isAction, MouseListener, MouseTool, SModelElement, SModelRoot, TYPES } from 'sprotty';
19
+
20
+ import { getRank } from '../rank/model';
21
+
22
+ export interface IMouseTool {
23
+ register(mouseListener: MouseListener): void;
24
+ deregister(mouseListener: MouseListener): void;
25
+ }
26
+
27
+ @injectable()
28
+ export class RankingMouseTool extends MouseTool implements IMouseTool {
29
+ protected rankedMouseListeners: Map<number, MouseListener[]>;
30
+
31
+ constructor(@multiInject(TYPES.MouseListener) @optional() protected mouseListeners: MouseListener[] = []) {
32
+ super(mouseListeners);
33
+ this.rankedMouseListeners = groupBy(mouseListeners, listener => getRank(listener));
34
+ }
35
+
36
+ register(mouseListener: MouseListener): void {
37
+ super.register(mouseListener);
38
+ this.rankedMouseListeners = groupBy(this.mouseListeners, listener => getRank(listener));
39
+ }
40
+
41
+ deregister(mouseListener: MouseListener): void {
42
+ super.deregister(mouseListener);
43
+ this.rankedMouseListeners = groupBy(this.mouseListeners, listener => getRank(listener));
44
+ }
45
+
46
+ decorate(vnode: VNode, element: SModelElement): VNode {
47
+ // we need to overwrite the existing event handlers registered by the original mouse tool
48
+ if (element instanceof SModelRoot) {
49
+ overwriteOn(vnode, 'mouseover', this.mouseOver.bind(this, element), element);
50
+ overwriteOn(vnode, 'mouseout', this.mouseOut.bind(this, element), element);
51
+ overwriteOn(vnode, 'mouseenter', this.mouseEnter.bind(this, element), element);
52
+ overwriteOn(vnode, 'mouseleave', this.mouseLeave.bind(this, element), element);
53
+ overwriteOn(vnode, 'mousedown', this.mouseDown.bind(this, element), element);
54
+ overwriteOn(vnode, 'mouseup', this.mouseUp.bind(this, element), element);
55
+ overwriteOn(vnode, 'mousemove', this.mouseMove.bind(this, element), element);
56
+ overwriteOn(vnode, 'wheel', this.wheel.bind(this, element), element);
57
+ overwriteOn(vnode, 'contextmenu', this.contextMenu.bind(this, element), element);
58
+ overwriteOn(vnode, 'dblclick', this.doubleClick.bind(this, element), element);
59
+ }
60
+ vnode = this.mouseListeners.reduce(
61
+ (n: VNode, listener: MouseListener) => listener.decorate(n, element),
62
+ vnode);
63
+ return vnode;
64
+ }
65
+
66
+ contextMenu(model: SModelRoot, event: MouseEvent): void {
67
+ event.preventDefault();
68
+ }
69
+
70
+ protected handleEvent<K extends keyof MouseListener>(methodName: K, model: SModelRoot, event: MouseEvent): void {
71
+ this.focusOnMouseEvent(methodName, model);
72
+ const element = this.getTargetElement(model, event);
73
+ if (!element) {
74
+ return;
75
+ }
76
+ this.notifyListenersByRank(element, methodName, model, event);
77
+ }
78
+
79
+ async notifyListenersByRank<K extends keyof MouseListener>(element: SModelElement, methodName: K, model: SModelRoot, event: MouseEvent): Promise<void> {
80
+ for (const rank of this.rankedMouseListeners) {
81
+ await this.dispatchActions(rank[1], methodName, element, event);
82
+ }
83
+ }
84
+
85
+ async dispatchActions<K extends keyof MouseListener>(mouseListeners: MouseListener[], methodName: K, element: SModelElement, event: MouseEvent): Promise<void> {
86
+ const actions = mouseListeners
87
+ .map(listener => listener[methodName].apply(listener, [element, event]))
88
+ .reduce((a, b) => a.concat(b));
89
+ if (actions.length > 0) {
90
+ event.preventDefault();
91
+ for (const actionOrPromise of actions) {
92
+ if (isAction(actionOrPromise)) {
93
+ await this.actionDispatcher.dispatch(actionOrPromise);
94
+ } else {
95
+ actionOrPromise.then((action: Action) => {
96
+ this.actionDispatcher.dispatch(action);
97
+ });
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ function groupBy<K, T>(array: Array<T>, keyFunction: (x: T) => K): Map<K, T[]> {
105
+ const unsortedMap = array.reduce((result: Map<K, T[]>, item: T) => {
106
+ const key = keyFunction(item);
107
+ if (!result.has(key)) {
108
+ result.set(key, [item]);
109
+ } else {
110
+ const entries = result.get(key);
111
+ if (entries) {
112
+ entries.push(item);
113
+ }
114
+ }
115
+ return result;
116
+ }, new Map<K, T[]>());
117
+ return new Map<K, T[]>([...unsortedMap.entries()].sort());
118
+ }
119
+
120
+ function overwriteOn(vnode: VNode, event: string, listener: (model: SModelElement, event: Event) => void, element: SModelElement): void {
121
+ const val = getOn(vnode);
122
+ // ignore any previous val[event] registrations
123
+ (val as any)[event] = [listener, element];
124
+ }
125
+
126
+ function getOn(vnode: VNode): On {
127
+ const data = getData(vnode);
128
+ if (!data.on) {
129
+ data.on = {};
130
+ }
131
+ return data.on;
132
+ }
133
+
134
+ function getData(vnode: VNode): VNodeData {
135
+ if (!vnode.data) {
136
+ vnode.data = {};
137
+ }
138
+ return vnode.data;
139
+ }
@@ -0,0 +1,35 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2020 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 { ContainerModule } from 'inversify';
17
+ import { configureActionHandler } from 'sprotty/lib';
18
+
19
+ import {
20
+ NavigateAction,
21
+ NavigateToExternalTargetAction,
22
+ NavigateToTargetAction,
23
+ NavigationActionHandler,
24
+ ProcessNavigationArgumentsAction
25
+ } from './navigation-action-handler';
26
+ import { NavigationTargetResolver } from './navigation-target-resolver';
27
+
28
+ export const navigationModule = new ContainerModule((bind, _unbind, isBound) => {
29
+ bind(NavigationTargetResolver).toSelf().inSingletonScope();
30
+ bind(NavigationActionHandler).toSelf().inSingletonScope();
31
+ configureActionHandler({ bind, isBound }, NavigateAction.KIND, NavigationActionHandler);
32
+ configureActionHandler({ bind, isBound }, NavigateToTargetAction.KIND, NavigationActionHandler);
33
+ configureActionHandler({ bind, isBound }, ProcessNavigationArgumentsAction.KIND, NavigationActionHandler);
34
+ configureActionHandler({ bind, isBound }, NavigateToExternalTargetAction.KIND, NavigationActionHandler);
35
+ });
@@ -0,0 +1,272 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2020 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 { inject, injectable } from 'inversify';
17
+ import {
18
+ Action,
19
+ ActionHandlerRegistry,
20
+ CenterAction,
21
+ generateRequestId,
22
+ IActionDispatcher,
23
+ IActionHandler,
24
+ ICommand,
25
+ ILogger,
26
+ RequestAction,
27
+ ResponseAction,
28
+ SelectAction,
29
+ SelectAllAction,
30
+ TYPES
31
+ } from 'sprotty';
32
+
33
+ import { Args } from '../../base/args';
34
+ import { EditorContext, EditorContextServiceProvider } from '../../base/editor-context';
35
+ import { GLSP_TYPES } from '../../base/types';
36
+ import { GLSPServerStatusAction, ServerMessageAction } from '../../model-source/glsp-server-status';
37
+ import { NavigationTarget, NavigationTargetResolver, SetResolvedNavigationTargetAction } from './navigation-target-resolver';
38
+
39
+ /**
40
+ * Action for triggering a navigation of a certain target type.
41
+ *
42
+ * Examples for target types could be `documentation`, `implementation`, etc.
43
+ * but this is up to the domain-specific diagram implementation to decide.
44
+ * Such an action will eventually trigger a `RequestNavigationTargetsAction`
45
+ * (see `NavigationActionHandler`) in order to request the navigation targets
46
+ * from the server.
47
+ *
48
+ * This action is typically triggered by a user action.
49
+ */
50
+ export class NavigateAction implements Action {
51
+ static readonly KIND = 'navigate';
52
+ readonly kind = NavigateAction.KIND;
53
+ constructor(readonly targetTypeId: string, readonly args?: Args) { }
54
+ }
55
+
56
+ export function isNavigateAction(action: Action): action is NavigateAction {
57
+ return action !== undefined && (action.kind === NavigateAction.KIND)
58
+ && (action as NavigateAction).targetTypeId !== undefined;
59
+ }
60
+
61
+ /** Action that is usually sent to the server to request navigation targets for a navigation type. */
62
+ export class RequestNavigationTargetsAction implements RequestAction<SetNavigationTargetsAction> {
63
+ static readonly KIND = 'requestNavigationTargets';
64
+ kind = RequestNavigationTargetsAction.KIND;
65
+ constructor(readonly targetTypeId: string, readonly editorContext: EditorContext,
66
+ readonly requestId: string = generateRequestId()) { }
67
+ }
68
+
69
+ /** Action that is usually sent from the server to the client as a repsonse to a `RequestNavigationTargetsAction`. */
70
+ export class SetNavigationTargetsAction implements ResponseAction {
71
+ static readonly KIND = 'setNavigationTargets';
72
+ kind = SetNavigationTargetsAction.KIND;
73
+ constructor(readonly targets: NavigationTarget[], readonly responseId: string = '', readonly args?: Args) { }
74
+ }
75
+
76
+ export function isSetNavigationTargetsAction(action: Action): action is SetNavigationTargetsAction {
77
+ return action !== undefined && (action.kind === SetNavigationTargetsAction.KIND)
78
+ && (action as SetNavigationTargetsAction).targets !== undefined;
79
+ }
80
+
81
+ /** Action that triggers the navigation to a particular navigation target, such as element IDs, queries, etc.. */
82
+ export class NavigateToTargetAction implements Action {
83
+ static readonly KIND = 'navigateToTarget';
84
+ readonly kind = NavigateToTargetAction.KIND;
85
+ constructor(readonly target: NavigationTarget) { }
86
+ }
87
+
88
+ export function isNavigateToTargetAction(action: Action): action is NavigateToTargetAction {
89
+ return action !== undefined && (action.kind === NavigateToTargetAction.KIND)
90
+ && (action as NavigateToTargetAction).target !== undefined;
91
+ }
92
+
93
+ export class NavigateToExternalTargetAction implements Action {
94
+ static readonly KIND = 'navigateToExternalTarget';
95
+ readonly kind = NavigateToExternalTargetAction.KIND;
96
+ constructor(readonly target: NavigationTarget) { }
97
+ }
98
+
99
+ export function isNavigateToExternalTargetAction(action: Action): action is NavigateToExternalTargetAction {
100
+ return action !== undefined && (action.kind === NavigateToExternalTargetAction.KIND)
101
+ && (action as NavigateToExternalTargetAction).target !== undefined;
102
+ }
103
+
104
+ /** Action to trigger the processing of additional navigation arguments.
105
+ *
106
+ * The resolution of a `NavigationTarget` may entail additional arguments. In this case, this action is
107
+ * triggered allowing the client to react to those arguments. The default `NavigationActionHandler` will
108
+ * only process the arguments' keys `info`, `warning`, and `error` to present them to the user.
109
+ * Customizations, however, may add domain-specific arguments and register custom handler to also process
110
+ * other arguments and trigger some additional behavior (e.g. update other views, etc.).
111
+ */
112
+ export class ProcessNavigationArgumentsAction implements Action {
113
+ static readonly KIND = 'processNavigationArguments';
114
+ readonly kind = ProcessNavigationArgumentsAction.KIND;
115
+ constructor(readonly args: Args) { }
116
+ }
117
+
118
+ export function isProcessNavigationArgumentsAction(action: Action): action is ProcessNavigationArgumentsAction {
119
+ return action !== undefined && (action.kind === ProcessNavigationArgumentsAction.KIND)
120
+ && (action as ProcessNavigationArgumentsAction).args !== undefined;
121
+ }
122
+
123
+ /**
124
+ * Default handler for all actions that are related to the navigation.
125
+ *
126
+ * For a `NavigateAction` this handler triggers a `RequestNavigationTargetAction` to obtain the actual
127
+ * navigation targets for the navigation type that is specified in the `NavigateAction`.
128
+ * Once the navigation targets are available, it will trigger a `NavigateToTargetAction` to actually
129
+ * perform the navigation.
130
+ *
131
+ * In other scenarios, clients may also trigger the `NavigateToTargetAction` directly, e.g. when opening
132
+ * the diagram.
133
+ *
134
+ * Depending on the URI and arguments of the navigation target we may encounter three cases:
135
+ * *(a)* the navigation target already specifies element IDs, in which case this action handler navigates
136
+ * to the specified elements directly, by the selecting them and centering them in the viewport.
137
+ * *(b)* the arguments of the navigation targets don't contain element IDs, but other arguments, the
138
+ * navigation target needs to be resolved into actual elment IDs by the `NavigationTargetResolver`.
139
+ * This can for instance be useful, if the navigation deals with queries or some other more complex
140
+ * logic that can't be dealt with on the client.
141
+ * *(c)* the target isn't resolved by the `NavigationTargetResolver`, e.g. because the `uri` doesn't match
142
+ * the URI of the current diagram. In this case, the navigation request is forwarded by dispatching
143
+ * a `NavigateToExternalTargetAction`.
144
+ */
145
+ @injectable()
146
+ export class NavigationActionHandler implements IActionHandler {
147
+
148
+ readonly notificationTimeout = 5000;
149
+
150
+ @inject(TYPES.ILogger) protected logger: ILogger;
151
+ @inject(TYPES.IActionDispatcher) protected dispatcher: IActionDispatcher;
152
+ @inject(TYPES.ActionHandlerRegistryProvider) protected actionHandlerRegistryProvider: () => Promise<ActionHandlerRegistry>;
153
+ @inject(GLSP_TYPES.IEditorContextServiceProvider) protected editorContextService: EditorContextServiceProvider;
154
+ @inject(NavigationTargetResolver) protected resolver: NavigationTargetResolver;
155
+
156
+ handle(action: Action): ICommand | Action | void {
157
+ if (isNavigateAction(action)) {
158
+ this.handleNavigateAction(action);
159
+ } else if (isNavigateToTargetAction(action)) {
160
+ this.handleNavigateToTarget(action);
161
+ } else if (isProcessNavigationArgumentsAction(action)) {
162
+ this.processNavigationArguments(action.args);
163
+ } else if (isNavigateToExternalTargetAction(action)) {
164
+ this.handleNavigateToExternalTarget(action);
165
+ }
166
+ }
167
+
168
+ protected async handleNavigateAction(action: NavigateAction): Promise<void> {
169
+ try {
170
+ const editorContextService = await this.editorContextService();
171
+ const context = editorContextService.get(action.args);
172
+ const response = await this.dispatcher.request(new RequestNavigationTargetsAction(action.targetTypeId, context));
173
+ if (isSetNavigationTargetsAction(response) && response.targets && response.targets.length === 1) {
174
+ if (response.targets.length > 1) {
175
+ this.logger.warn(this, 'Processing of multiple targets is not supported yet. ' +
176
+ 'Only the first is being processed.', response.targets);
177
+ }
178
+ return this.dispatcher.dispatch(new NavigateToTargetAction(response.targets[0]));
179
+ }
180
+ this.warnAboutFailedNavigation('No valid navigation target found');
181
+ } catch (reason) {
182
+ this.logger.error(this, 'Failed to obtain navigation target', reason, action);
183
+ }
184
+ }
185
+
186
+ protected async handleNavigateToTarget(action: NavigateToTargetAction): Promise<void> {
187
+ try {
188
+ const resolvedElements = await this.resolveElements(action);
189
+ if (this.containsElementIdsOrArguments(resolvedElements)) {
190
+ this.navigateTo(resolvedElements);
191
+ this.handleResolutionArguments(resolvedElements);
192
+ return;
193
+ } else {
194
+ this.navigateToExternal(action.target);
195
+ return;
196
+ }
197
+ } catch (reason) {
198
+ this.logger.error(this, 'Failed to navigate', reason, action);
199
+ }
200
+ }
201
+
202
+ protected resolveElements(action: NavigateToTargetAction): Promise<SetResolvedNavigationTargetAction | undefined> {
203
+ return this.resolver.resolve(action.target);
204
+ }
205
+
206
+ protected containsElementIdsOrArguments(target: SetResolvedNavigationTargetAction | undefined): target is SetResolvedNavigationTargetAction {
207
+ return target !== undefined && (this.containsElementIds(target.elementIds) || this.containsArguments(target.args));
208
+ }
209
+
210
+ protected containsElementIds(elementIds: string[] | undefined): elementIds is string[] {
211
+ return elementIds !== undefined && elementIds.length > 0;
212
+ }
213
+
214
+ protected containsArguments(args: Args | undefined): args is Args {
215
+ return args !== undefined && args !== undefined && Object.keys(args).length > 0;
216
+ }
217
+
218
+ protected navigateTo(target: SetResolvedNavigationTargetAction): void {
219
+ const elementIds = target.elementIds;
220
+ if (!this.containsElementIds(elementIds)) {
221
+ return;
222
+ }
223
+ this.dispatcher.dispatchAll([new SelectAllAction(false), new SelectAction(elementIds), new CenterAction(elementIds)]);
224
+ }
225
+
226
+ protected handleResolutionArguments(target: SetResolvedNavigationTargetAction): void {
227
+ const args = target.args;
228
+ if (!this.containsArguments(args)) {
229
+ return;
230
+ }
231
+ this.dispatcher.dispatch(new ProcessNavigationArgumentsAction(args));
232
+ }
233
+
234
+ protected navigateToExternal(target: NavigationTarget): Promise<void> {
235
+ return this.dispatcher.dispatch(new NavigateToExternalTargetAction(target));
236
+ }
237
+
238
+ protected processNavigationArguments(args: Args): void {
239
+ if (args.info && args.info.toString().length > 0) {
240
+ this.notify('INFO', args.info.toString());
241
+ }
242
+ if (args.warning && args.warning.toString().length > 0) {
243
+ this.notify('WARNING', args.warning.toString());
244
+ }
245
+ if (args.error && args.error.toString().length > 0) {
246
+ this.notify('ERROR', args.error.toString());
247
+ }
248
+ }
249
+
250
+ protected async handleNavigateToExternalTarget(action: NavigateToExternalTargetAction): Promise<void> {
251
+ const registry = await this.actionHandlerRegistryProvider();
252
+ const handlers = registry.get(NavigateToExternalTargetAction.KIND);
253
+ if (handlers.length === 1) {
254
+ // we are the only handler so we know nobody took care of it
255
+ this.warnAboutFailedNavigation('Could not resolve or navigate to target', action.target);
256
+ }
257
+ }
258
+
259
+ protected warnAboutFailedNavigation(msg: string, target?: NavigationTarget): void {
260
+ const message = `${msg}` + (target ? `: '${target.uri}' (arguments: ${JSON.stringify(target.args)})` : '');
261
+ this.logger.warn(this, msg, target);
262
+ this.notify('WARNING', message);
263
+ }
264
+
265
+ private notify(severity: string, message: string): void {
266
+ const timeout = this.notificationTimeout;
267
+ this.dispatcher.dispatchAll([
268
+ { kind: GLSPServerStatusAction.KIND, severity, timeout, message } as GLSPServerStatusAction,
269
+ { kind: ServerMessageAction.KIND, severity, timeout, message } as ServerMessageAction
270
+ ]);
271
+ }
272
+ }
@@ -0,0 +1,61 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2020 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
+ /* eslint-disable no-unused-expressions */
17
+ import 'mocha';
18
+ import 'reflect-metadata';
19
+
20
+ import { expect } from 'chai';
21
+
22
+ import { NavigationTarget } from './navigation-target-resolver';
23
+
24
+ describe('NavigationTarget', () => {
25
+
26
+ it('should be able to set and get element IDs', () => {
27
+ const navigationTarget: NavigationTarget = { uri: 'uri' };
28
+ NavigationTarget.setElementIds(navigationTarget, ['id1', 'id2']);
29
+ expect(NavigationTarget.getElementIds(navigationTarget)).to.be.eql(['id1', 'id2']);
30
+ });
31
+
32
+ it('should be able to set and get textual positions', () => {
33
+ const navigationTarget: NavigationTarget = { uri: 'uri' };
34
+ NavigationTarget.setTextPosition(navigationTarget, { line: 1, character: 2 });
35
+ expect(NavigationTarget.getTextPosition(navigationTarget)).to.be.eql({ line: 1, character: 2 });
36
+ });
37
+
38
+ it('should be able to set and get custom query arguments', () => {
39
+ const navigationTarget: NavigationTarget = { uri: 'uri' };
40
+ NavigationTarget.addArgument(navigationTarget, 'name', 'test');
41
+ expect(navigationTarget.args!.name).to.be.eql('test');
42
+ });
43
+
44
+ it('should specify whether it has arguments', () => {
45
+ let navigationTarget: NavigationTarget = { uri: 'uri' };
46
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.false;
47
+ NavigationTarget.addArgument(navigationTarget, 'name', 'test');
48
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.true;
49
+
50
+ navigationTarget = { uri: 'uri' };
51
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.false;
52
+ NavigationTarget.setElementIds(navigationTarget, ['id1', 'id2']);
53
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.true;
54
+
55
+ navigationTarget = { uri: 'uri' };
56
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.false;
57
+ NavigationTarget.setTextPosition(navigationTarget, { line: 1, character: 2 });
58
+ expect(NavigationTarget.hasArguments(navigationTarget)).to.be.true;
59
+ });
60
+
61
+ });
@@ -0,0 +1,146 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2020 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 { inject, injectable } from 'inversify';
17
+ import { Action, generateRequestId, IActionDispatcher, ILogger, RequestAction, ResponseAction, TYPES } from 'sprotty';
18
+
19
+ import { Args } from '../../base/args';
20
+ import { EditorContextServiceProvider } from '../../base/editor-context';
21
+ import { GLSP_TYPES } from '../../base/types';
22
+
23
+ export interface NavigationTarget {
24
+ uri: string;
25
+ label?: string;
26
+ args?: Args;
27
+ }
28
+
29
+ export namespace NavigationTarget {
30
+
31
+ export const ELEMENT_IDS = 'elementIds';
32
+ export const ELEMENT_IDS_SEPARATOR = '&';
33
+ export const TEXT_LINE = 'line';
34
+ export const TEXT_COLUMN = 'column';
35
+
36
+ export function hasArguments(target: NavigationTarget): boolean {
37
+ return target.args !== undefined && Object.keys(target.args).length > 0;
38
+ }
39
+
40
+ export function addArgument(target: NavigationTarget, key: string, value: string | number | boolean): void {
41
+ if (target.args === undefined) {
42
+ target.args = {};
43
+ }
44
+ target.args[key] = value;
45
+ }
46
+
47
+ export function getElementIds(target: NavigationTarget): string[] {
48
+ if (target.args === undefined || target.args[NavigationTarget.ELEMENT_IDS] === undefined) {
49
+ return [];
50
+ }
51
+ const elementIdsValue = target.args[NavigationTarget.ELEMENT_IDS].toString();
52
+ return elementIdsValue.split(NavigationTarget.ELEMENT_IDS_SEPARATOR);
53
+ }
54
+
55
+ export function setElementIds(target: NavigationTarget, elementIds: string[]): string {
56
+ if (target.args === undefined) {
57
+ target.args = {};
58
+ }
59
+ return target.args[NavigationTarget.ELEMENT_IDS] = elementIds.join(NavigationTarget.ELEMENT_IDS_SEPARATOR);
60
+ }
61
+
62
+ export function setTextPosition(target: NavigationTarget, position: TextPosition | undefined): void {
63
+ if (position) {
64
+ if (target.args === undefined) {
65
+ target.args = {};
66
+ }
67
+ target.args[NavigationTarget.TEXT_LINE] = position.line;
68
+ target.args[NavigationTarget.TEXT_COLUMN] = position.character;
69
+ }
70
+ }
71
+
72
+ export function getTextPosition(target: NavigationTarget): TextPosition | undefined {
73
+ if (target.args === undefined
74
+ || target.args[NavigationTarget.TEXT_LINE] === undefined
75
+ || target.args[NavigationTarget.TEXT_COLUMN] === undefined) {
76
+ return undefined;
77
+ }
78
+ return {
79
+ line: Number(target.args[NavigationTarget.TEXT_LINE]),
80
+ character: Number(target.args[NavigationTarget.TEXT_COLUMN])
81
+ };
82
+ }
83
+ }
84
+
85
+ export interface TextPosition {
86
+ line: number;
87
+ character: number;
88
+ }
89
+
90
+ export class ResolveNavigationTargetAction implements RequestAction<SetResolvedNavigationTargetAction> {
91
+ static readonly KIND = 'resolveNavigationTarget';
92
+ kind = ResolveNavigationTargetAction.KIND;
93
+ constructor(readonly navigationTarget: NavigationTarget, public readonly requestId: string = generateRequestId()) { }
94
+ }
95
+
96
+ export class SetResolvedNavigationTargetAction implements ResponseAction {
97
+ static readonly KIND = 'setResolvedNavigationTarget';
98
+ kind = SetResolvedNavigationTargetAction.KIND;
99
+ constructor(readonly elementIds: string[] = [], readonly args?: Args, readonly responseId: string = '') { }
100
+ }
101
+
102
+ export function isSetResolvedNavigationTargets(action: Action): action is SetResolvedNavigationTargetAction {
103
+ return action !== undefined && (action.kind === SetResolvedNavigationTargetAction.KIND);
104
+ }
105
+
106
+ /**
107
+ * Resolves `NavigationTargets` to element ids.
108
+ *
109
+ * If the `NavigationTarget` doesn't have element ids itself, this resolver queries the server via a
110
+ * `ResolveNavigationTargetAction` for element ids.
111
+ */
112
+ @injectable()
113
+ export class NavigationTargetResolver {
114
+
115
+ @inject(GLSP_TYPES.IEditorContextServiceProvider) protected editorContextService: EditorContextServiceProvider;
116
+ @inject(TYPES.IActionDispatcher) protected dispatcher: IActionDispatcher;
117
+ @inject(TYPES.ILogger) protected readonly logger: ILogger;
118
+
119
+ async resolve(navigationTarget: NavigationTarget): Promise<SetResolvedNavigationTargetAction | undefined> {
120
+ const contextService = await this.editorContextService();
121
+ const sourceUri = await contextService.getSourceUri();
122
+ return this.resolveWithSourceUri(sourceUri, navigationTarget);
123
+ }
124
+
125
+ async resolveWithSourceUri(sourceUri: string | undefined, target: NavigationTarget): Promise<SetResolvedNavigationTargetAction | undefined> {
126
+ const targetUri = decodeURIComponent(target.uri);
127
+ if (sourceUri && sourceUri !== targetUri && `file://${sourceUri}` !== targetUri) {
128
+ // different URI, so we can't resolve it locally
129
+ this.logger.info("Source and Target URI are different. Can't resolve locally.", sourceUri, targetUri);
130
+ return undefined;
131
+ }
132
+ if (NavigationTarget.getElementIds(target).length > 0) {
133
+ return new SetResolvedNavigationTargetAction(NavigationTarget.getElementIds(target));
134
+ }
135
+ const response = await this.requestResolution(target);
136
+ if (isSetResolvedNavigationTargets(response)) {
137
+ return response;
138
+ }
139
+ return undefined;
140
+ }
141
+
142
+ protected requestResolution(target: NavigationTarget): Promise<ResponseAction> {
143
+ return this.dispatcher.request(new ResolveNavigationTargetAction(target));
144
+ }
145
+ }
146
+